diff --git a/css/react-bootstrap-table.css b/css/react-bootstrap-table.css index ef417bfb1..d5a19c995 100644 --- a/css/react-bootstrap-table.css +++ b/css/react-bootstrap-table.css @@ -6,17 +6,16 @@ } .react-bs-table .table-header{ height: 42px; - border-right-width: 1px; - border-right-style: solid; - border-right-color: rgb(221, 221, 221); border-top-width: 1px; border-top-style: solid; border-top-color: rgb(221, 221, 221); + border-bottom-width: 0px; + border-bottom-style: solid; + border-bottom-color: rgb(221, 221, 221); } .react-bs-table .table-header > table{ table-layout: fixed; - border-right-style: hidden; border-top-style: hidden; } diff --git a/css/react-bootstrap-table.min.css b/css/react-bootstrap-table.min.css index 00aa84a31..b2f122897 100644 --- a/css/react-bootstrap-table.min.css +++ b/css/react-bootstrap-table.min.css @@ -1 +1,5 @@ -.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}.toast-top-center,.toast-top-full-width{top:0;right:0;width:100%}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.react-bs-table{margin-bottom:37px}.react-bs-table .table-header{height:42px;border-right-width:1px;border-right-style:solid;border-right-color:#ddd;border-top-width:1px;border-top-style:solid;border-top-color:#ddd}.react-bs-table .table-header>table{table-layout:fixed;border-right-style:hidden;border-top-style:hidden}.react-bs-table .table-header>table>thead>tr{border-bottom-style:hidden}.react-bs-table .table-header>table>thead>tr>th .table-header-column{line-height:25px}.react-bs-table .table-header>table>thead>tr>.sort-column{cursor:pointer}.react-bs-table .table-container{overflow-x:auto;overflow-y:auto;height:100%}.react-bs-table .table-container>table{margin-top:-18px;table-layout:fixed;margin-bottom:0}.react-bs-container .tool-bar{margin-bottom:5px}.react-bs-table .form-control.editor{width:100%;top:0;left:0;height:100%;position:absolute}.react-bs-table .textarea-save-btn{position:absolute;z-index:100;right:0;top:-21px}.animated{animation-fill-mode:both}.animated.bounceIn,.animated.bounceOut{animation-duration:.75s}.animated.shake{animation-duration:.3s}@keyframes shake{from,to{transform:translate3d(0,0,0)}10%,50%,90%{transform:translate3d(-10px,0,0)}30%,70%{transform:translate3d(10px,0,0)}}.shake{animation-name:shake}@keyframes bounceIn{20%,40%,60%,80%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scale3d(1,1,1)}}.bounceIn{animation-name:bounceIn}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{animation-name:bounceOut} \ No newline at end of file +<<<<<<< HEAD +.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}.toast-top-center,.toast-top-full-width{top:0;right:0;width:100%}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.react-bs-table{margin-bottom:37px}.react-bs-table .table-header{height:42px;border-right-width:1px;border-right-style:solid;border-right-color:#ddd;border-top-width:1px;border-top-style:solid;border-top-color:#ddd}.react-bs-table .table-header>table{table-layout:fixed;border-right-style:hidden;border-top-style:hidden}.react-bs-table .table-header>table>thead>tr{border-bottom-style:hidden}.react-bs-table .table-header>table>thead>tr>th .table-header-column{line-height:25px}.react-bs-table .table-header>table>thead>tr>.sort-column{cursor:pointer}.react-bs-table .table-container{overflow-x:auto;overflow-y:auto;height:100%}.react-bs-table .table-container>table{margin-top:-18px;table-layout:fixed;margin-bottom:0}.react-bs-container .tool-bar{margin-bottom:5px}.react-bs-table .form-control.editor{width:100%;top:0;left:0;height:100%;position:absolute}.react-bs-table .textarea-save-btn{position:absolute;z-index:100;right:0;top:-21px}.animated{animation-fill-mode:both}.animated.bounceIn,.animated.bounceOut{animation-duration:.75s}.animated.shake{animation-duration:.3s}@keyframes shake{from,to{transform:translate3d(0,0,0)}10%,50%,90%{transform:translate3d(-10px,0,0)}30%,70%{transform:translate3d(10px,0,0)}}.shake{animation-name:shake}@keyframes bounceIn{20%,40%,60%,80%,from,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scale3d(1,1,1)}}.bounceIn{animation-name:bounceIn}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{animation-name:bounceOut} +======= +.react-bs-table{margin-bottom:37px}.react-bs-table .table-header{height:37px;border-top-width:1px;border-top-style:solid;border-top-color:#ddd;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#ddd}.react-bs-table .table-header>table{table-layout:fixed;border-top-style:hidden}.react-bs-table .table-header>table>thead>tr{border-bottom-style:hidden}.react-bs-table .table-header>table>thead>tr>th .table-header-column{line-height:25px}.react-bs-table .table-header>table>thead>tr>.sort-column{cursor:pointer}.react-bs-table .table-container{overflow-x:auto;overflow-y:auto;height:100%}.react-bs-table .table-container>table{margin-top:-18px;table-layout:fixed;margin-bottom:0}.react-bs-container .tool-bar{margin-bottom:5px} +>>>>>>> 0cc7d0b70e39501fd581e32fa598a26a913070be diff --git a/demo/basic-example.html b/demo/basic-example.html index df1654e6c..1cdafd0ea 100644 --- a/demo/basic-example.html +++ b/demo/basic-example.html @@ -4,7 +4,7 @@ react-bootstrap-table demo - + diff --git a/demo/js/demo.bundle.js b/demo/js/demo.bundle.js index 18794db72..44c3830db 100644 --- a/demo/js/demo.bundle.js +++ b/demo/js/demo.bundle.js @@ -90,7 +90,7 @@ function priceFormatter(cell, row) { React.render(React.createElement( BootstrapTable, { data: products, striped: true, hover: true, pagination: true, selectRow: selectRowProp, cellEdit: cellEditProp, - insertRow: true, deleteRow: true, search: true, columnFilter: true, options: options }, + insertRow: true, deleteRow: true, search: true, columnFilter: true, options: options, bordered: true }, React.createElement( TableHeaderColumn, { dataField: "id", dataAlign: "center", dataSort: true, isKey: true }, @@ -23076,12 +23076,14 @@ var BootstrapTable = (function (_React$Component) { sortName: this.props.options.sortName, sortOrder: this.props.options.sortOrder, onSort: this.handleSort.bind(this), - onSelectAllRow: this.handleSelectAllRow.bind(this) }, + onSelectAllRow: this.handleSelectAllRow.bind(this), + bordered: this.props.bordered }, this.props.children ), React.createElement(TableBody, { ref: "body", data: this.state.data, columns: columns, trClassName: this.props.trClassName, striped: this.props.striped, + bordered: this.props.bordered, hover: this.props.hover, keyField: this.store.getKeyField(), condensed: this.props.condensed, @@ -23365,6 +23367,7 @@ BootstrapTable.propTypes = { height: React.PropTypes.string, data: React.PropTypes.array, striped: React.PropTypes.bool, + bordered: React.PropTypes.bool, hover: React.PropTypes.bool, condensed: React.PropTypes.bool, pagination: React.PropTypes.bool, @@ -23404,6 +23407,7 @@ BootstrapTable.propTypes = { BootstrapTable.defaultProps = { height: "100%", striped: false, + bordered: true, hover: false, condensed: false, pagination: false, @@ -23724,8 +23728,9 @@ var TableBody = (function (_React$Component) { value: function render() { var containerClasses = classSet("table-container"); - var tableClasses = classSet("table", "table-bordered", { + var tableClasses = classSet("table", { "table-striped": this.props.striped, + "table-bordered": this.props.bordered, "table-hover": this.props.hover, "table-condensed": this.props.condensed }); @@ -23955,6 +23960,7 @@ TableBody.propTypes = { data: React.PropTypes.array, columns: React.PropTypes.array, striped: React.PropTypes.bool, + bordered: React.PropTypes.bool, hover: React.PropTypes.bool, condensed: React.PropTypes.bool, keyField: React.PropTypes.string, @@ -24366,6 +24372,9 @@ var TableHeader = (function (_React$Component) { render: { value: function render() { var containerClasses = classSet("table-header"); + var tableClasses = classSet("table", "table-hover", { + "table-bordered": this.props.bordered + }); var selectRowHeaderCol = this.props.hideSelectColumn ? null : this.renderSelectRowHeader(); this._attachClearSortCaretFunc(); @@ -24374,7 +24383,7 @@ var TableHeader = (function (_React$Component) { { className: containerClasses }, React.createElement( "table", - { className: "table table-hover table-bordered" }, + { className: tableClasses }, React.createElement( "thead", null, @@ -24426,7 +24435,8 @@ TableHeader.propTypes = { onSelectAllRow: React.PropTypes.func, sortName: React.PropTypes.string, sortOrder: React.PropTypes.string, - hideSelectColumn: React.PropTypes.bool + hideSelectColumn: React.PropTypes.bool, + bordered: React.PropTypes.bool }; TableHeader.defaultProps = {}; @@ -25506,4 +25516,4 @@ module.exports = { }; },{"./BootstrapTable":"/Users/allen/Node/react-bootstrap-table/src/BootstrapTable.js","./TableHeaderColumn":"/Users/allen/Node/react-bootstrap-table/src/TableHeaderColumn.js","./store/TableDataStore":"/Users/allen/Node/react-bootstrap-table/src/store/TableDataStore.js"}]},{},["./demo/js/demo.js"]) -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvZGVtby9qcy9kZW1vLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdENvbnRhaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC10b2FzdHIvbGliL1RvYXN0TWVzc2FnZS9hbmltYXRpb25NaXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC10b2FzdHIvbGliL1RvYXN0TWVzc2FnZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC10b2FzdHIvbGliL1RvYXN0TWVzc2FnZS9qUXVlcnlNaXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC10b2FzdHIvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2FkZG9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvQXV0b0ZvY3VzTWl4aW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0JlZm9yZUlucHV0RXZlbnRQbHVnaW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0NTU0NvcmUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0NTU1Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0NhbGxiYWNrUXVldWUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0NoYW5nZUV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DbGllbnRSZWFjdFJvb3RJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRE9NQ2hpbGRyZW5PcGVyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9ET01Qcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRE9NUHJvcGVydHlPcGVyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9EYW5nZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9FbnRlckxlYXZlRXZlbnRQbHVnaW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V2ZW50Q29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9FdmVudExpc3RlbmVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRQbHVnaW5SZWdpc3RyeS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRQbHVnaW5VdGlscy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRQcm9wYWdhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0ZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvSFRNTERPTVByb3BlcnR5Q29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9MaW5rZWRTdGF0ZU1peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9MaW5rZWRWYWx1ZVV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9Mb2NhbEV2ZW50VHJhcE1peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9Nb2JpbGVTYWZhcmlDbGlja0V2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9PYmplY3QuYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9Qb29sZWRDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3QuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENoaWxkUmVjb25jaWxlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDaGlsZHJlbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDb21wb25lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbnRleHQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01CdXR0b24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NQ29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUZvcm0uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NSURPcGVyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUlmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01JbWcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NSW5wdXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NT3B0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTVNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01TZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NVGV4dENvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01UZXh0YXJlYS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3REZWZhdWx0SW5qZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERlZmF1bHRQZXJmLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50VmFsaWRhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVtcHR5Q29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVycm9yVXRpbHMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RXZlbnRFbWl0dGVyTWl4aW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RXZlbnRMaXN0ZW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RGcmFnbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RJbmplY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0SW5wdXRTZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0SW5zdGFuY2VIYW5kbGVzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEluc3RhbmNlTWFwLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdExpZmVDeWNsZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RMaW5rLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE1hcmt1cENoZWNrc3VtLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE1vdW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE11bHRpQ2hpbGQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE5hdGl2ZUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RPd25lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RQZXJmLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUcmFuc2ZlcmVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZXMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0UHV0TGlzdGVuZXJRdWV1ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RSZWNvbmNpbGVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFJlZi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RSb290SW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0U2VydmVyUmVuZGVyaW5nLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFN0YXRlU2V0dGVycy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RUZXN0VXRpbHMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RUcmFuc2l0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFRyYW5zaXRpb25Hcm91cC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RVcGRhdGVRdWV1ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RVcGRhdGVzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFdpdGhBZGRvbnMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1NWR0RPTVByb3BlcnR5Q29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TZWxlY3RFdmVudFBsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU2VydmVyUmVhY3RSb290SW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1NpbXBsZUV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNDbGlwYm9hcmRFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljRHJhZ0V2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljRm9jdXNFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljSW5wdXRFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljS2V5Ym9hcmRFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljTW91c2VFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljVG91Y2hFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljVUlFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljV2hlZWxFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvVHJhbnNhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1ZpZXdwb3J0TWV0cmljcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvYWNjdW11bGF0ZUludG8uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2FkbGVyMzIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NhbWVsaXplLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jYW1lbGl6ZVN0eWxlTmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvY2xvbmVXaXRoUHJvcHMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NvbnRhaW5zTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvY3JlYXRlQXJyYXlGcm9tTWl4ZWQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jcmVhdGVOb2Rlc0Zyb21NYXJrdXAuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2N4LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9kYW5nZXJvdXNTdHlsZVZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9lbXB0eU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9maW5kRE9NTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZmxhdHRlbkNoaWxkcmVuLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9mb2N1c05vZGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2ZvckVhY2hBY2N1bXVsYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0QWN0aXZlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRDaGFyQ29kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRLZXkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldEV2ZW50TW9kaWZpZXJTdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRUYXJnZXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldEl0ZXJhdG9yRm4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldE1hcmt1cFdyYXAuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0VGV4dENvbnRlbnRBY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2h5cGhlbmF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvaHlwaGVuYXRlU3R5bGVOYW1lLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pbnZhcmlhbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2lzRXZlbnRTdXBwb3J0ZWQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvaXNUZXh0SW5wdXRFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pc1RleHROb2RlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9qb2luQ2xhc3Nlcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIva2V5TWlycm9yLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9rZXlPZi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvbWFwT2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9tZW1vaXplU3RyaW5nT25seS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvb25seUNoaWxkLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9wZXJmb3JtYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvcGVyZm9ybWFuY2VOb3cuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3F1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9zZXRJbm5lckhUTUwuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3NldFRleHRDb250ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9zaGFsbG93RXF1YWwuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi90b0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi90cmF2ZXJzZUFsbENoaWxkcmVuLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi91cGRhdGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3dhcm5pbmcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvcmVhY3QuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL0Jvb3RzdHJhcFRhYmxlLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9Db25zdC5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvRWRpdG9yLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9Ob3RpZmljYXRpb24uanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1NlbGVjdFJvd0hlYWRlckNvbHVtbi5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvVGFibGVCb2R5LmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUNvbHVtbi5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvVGFibGVFZGl0Q29sdW1uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUZpbHRlci5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvVGFibGVIZWFkZXIuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1RhYmxlSGVhZGVyQ29sdW1uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZVJvdy5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvcGFnaW5hdGlvbi9QYWdlQnV0dG9uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9wYWdpbmF0aW9uL1BhZ2luYXRpb25MaXN0LmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9zdG9yZS9UYWJsZURhdGFTdG9yZS5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvdG9vbGJhci9Ub29sQmFyLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy91dGlsLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7SUNBTyxLQUFLLDJCQUFNLE9BQU87O21DQUN1Qix1QkFBdUI7O0lBQS9ELGNBQWMsd0JBQWQsY0FBYztJQUFFLGlCQUFpQix3QkFBakIsaUJBQWlCOztBQUV6QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7O0FBRWxCLFNBQVMsV0FBVyxDQUFDLFFBQVEsRUFBRTtBQUM3QixNQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzlCLE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsUUFBSSxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNyQixZQUFRLENBQUMsSUFBSSxDQUFDO0FBQ1osUUFBRSxFQUFFLEVBQUU7QUFDTixVQUFJLEVBQUUsWUFBWSxHQUFHLEVBQUU7QUFDdkIsV0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDO0tBQ2YsQ0FBQyxDQUFDO0dBQ0o7Q0FDRjs7QUFFRCxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBRWhCLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUM7QUFDbkMsU0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixTQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQTtDQUN2Qzs7QUFFRCxTQUFTLFdBQVcsQ0FBQyxVQUFVLEVBQUM7QUFDOUIsU0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFRCxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQztBQUNoRCxTQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBQyxRQUFRLEdBQUMsZ0JBQWdCLEdBQUMsU0FBUyxHQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLFNBQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMvQixTQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xCOztBQUVELFNBQVMsb0JBQW9CLEdBQUU7QUFDN0IsU0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0NBQ3ZDOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFDO0FBQ2hDLFNBQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNoQyxTQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3RCOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFDO0FBQzVCLFNBQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNoQyxTQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xCOztBQUVELElBQUksYUFBYSxHQUFHO0FBQ2xCLE1BQUksRUFBRSxVQUFVO0FBQ2hCLGVBQWEsRUFBRSxJQUFJOztBQUVuQixVQUFRLEVBQUUsRUFBRTtBQUNaLFNBQU8sRUFBRSxvQkFBb0I7QUFDN0IsVUFBUSxFQUFFLFdBQVc7QUFDckIsYUFBVyxFQUFFLFdBQVc7Q0FDekIsQ0FBQzs7QUFFRixJQUFJLFlBQVksR0FBRztBQUNqQixNQUFJLEVBQUUsT0FBTztBQUNiLFlBQVUsRUFBRSxJQUFJO0FBQ2hCLGVBQWEsRUFBRSxlQUFlO0NBQy9CLENBQUM7O0FBRUYsSUFBSSxPQUFPLEdBQUc7Ozs7O0FBS1osVUFBUSxFQUFFLE1BQU07QUFDaEIsV0FBUyxFQUFFLE1BQU07QUFDakIsb0JBQWtCLEVBQUUsb0JBQW9CO0FBQ3hDLGdCQUFjLEVBQUUsZ0JBQWdCO0FBQ2hDLGdCQUFjLEVBQUUsZ0JBQWdCO0FBQUEsQ0FDakMsQ0FBQzs7QUFHRixTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFDO0FBQ2hDLFNBQU8sNENBQTBDLEdBQUcsSUFBSSxDQUFDO0NBQzFEOztBQUVELEtBQUssQ0FBQyxNQUFNLENBQ1Y7QUFBQyxnQkFBYztJQUFDLElBQUksRUFBRSxRQUFRLEFBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxBQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQUFBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLEFBQUMsRUFBQyxTQUFTLEVBQUUsYUFBYSxBQUFDLEVBQUMsUUFBUSxFQUFFLFlBQVksQUFBQztBQUMvRyxhQUFTLEVBQUUsSUFBSSxBQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksQUFBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLEFBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxBQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sQUFBQztFQUNqRztBQUFDLHFCQUFpQjtNQUFDLFNBQVMsRUFBQyxJQUFJLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUUsSUFBSSxBQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQUFBQzs7R0FBK0I7RUFDaEg7QUFBQyxxQkFBaUI7TUFBQyxTQUFTLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBRSxJQUFJLEFBQUM7O0dBQWlDO0VBQ3BGO0FBQUMscUJBQWlCO01BQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUUsY0FBYyxBQUFDLEVBQUMsUUFBUSxFQUFFLEtBQUssQUFBQzs7R0FBa0M7Q0FDdEcsRUFDbEIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FDaEMsQ0FBQzs7O0FDekZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaDVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzEzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaGdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7SUNBTyxLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsS0FBSywyQkFBTSxTQUFTOztJQUNwQixXQUFXLDJCQUFNLGVBQWU7O0lBQ2hDLFNBQVMsMkJBQU0sYUFBYTs7SUFDNUIsY0FBYywyQkFBTSw2QkFBNkI7O0lBQ2pELE9BQU8sMkJBQU0sbUJBQW1COztJQUNoQyxXQUFXLDJCQUFNLGVBQWU7O0lBQy9CLGNBQWMsV0FBTyx3QkFBd0IsRUFBN0MsY0FBYzs7SUFFaEIsY0FBYztBQUVQLFdBRlAsY0FBYyxDQUVOLEtBQUssRUFBRTs7OzBCQUZmLGNBQWM7O0FBR2xCLCtCQUhJLGNBQWMsNkNBR1osS0FBSyxFQUFFOztBQUVYLFFBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQzNCLFFBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixRQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQzs7QUFFM0IsU0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBUyxNQUFNLEVBQUM7QUFDMUQsVUFBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBQztBQUNwQixZQUFHLFFBQVEsSUFBSSxJQUFJLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRixnQkFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO09BQ25DO0FBQ0QsVUFBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBQztBQUN2Qix5QkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO09BQ25FO0tBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCxRQUFHLFFBQVEsSUFBSSxJQUFJLEVBQ2pCLE1BQU0sNEhBQTRILENBQUM7O0FBRXJJLFFBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUM7QUFDakMsVUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzNELFVBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hCLFVBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQSxVQUFDLElBQUksRUFBSztBQUNyQyxjQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsY0FBSyxRQUFRLENBQUM7QUFDWixjQUFJLEVBQUUsTUFBSyxZQUFZLEVBQUU7U0FDMUIsQ0FBQyxDQUFBO09BQ0gsQ0FBQSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ2YsTUFBSztBQUNKLFVBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsRDtBQUNELFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDOztBQUV4RSxRQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBQztBQUN2RCxVQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzdEOztBQUVELFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxVQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUN6QixxQkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUU7S0FDakQsQ0FBQztHQUNIOztZQTVDRyxjQUFjOztlQUFkLGNBQWM7QUE4Q2xCLGdCQUFZO2FBQUEsd0JBQUc7QUFDYixZQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDN0QsR0FBRyxFQUFFLENBQUM7U0FDcEIsTUFBSztBQUNKLGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMzQjtBQUNELGVBQU8sTUFBTSxDQUFDO09BQ2Y7O0FBRUQsNkJBQXlCO2FBQUEsbUNBQUMsU0FBUyxFQUFDO0FBQ2xDLFlBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUM7QUFDL0IsY0FBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLGNBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixnQkFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7V0FDMUIsQ0FBQyxDQUFDO1NBQ0o7QUFDRCxZQUFHLFNBQVMsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUM7O0FBRXJELGNBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzRCxjQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osMkJBQWUsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVE7V0FDOUMsQ0FBQyxDQUFDO1NBQ0o7T0FDRjs7QUFFRCxzQkFBa0I7YUFBQSw4QkFBRTtBQUNsQixZQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUMzQixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO09BQzNDOztBQUVELHVCQUFtQjthQUFBLCtCQUFFO0FBQ25CLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDckIsY0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEUsY0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGNBQWMsRUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztTQUM5QztPQUNGOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVDLFlBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ3BDLFlBQUksS0FBSyxHQUFHO0FBQ1YsZ0JBQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDMUIsQ0FBQztBQUNGLFlBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUM7QUFDckMsbUJBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkM7QUFDRCxZQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUM3QyxpQkFBTztBQUNMLGdCQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQzVCLGlCQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQzdCLGdCQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQzNCLGtCQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVO0FBQy9CLG9CQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQy9CLGtCQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQzNCLHFCQUFTLEVBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlO0FBQ3RDLGlCQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLO0FBQ3pCLGlCQUFLLEVBQUUsQ0FBQztXQUNULENBQUM7U0FDSCxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUVULFlBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3pDLFlBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNuQyxZQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQsZUFDRTs7WUFBSyxTQUFTLEVBQUMsb0JBQW9CO1VBQ2hDLE9BQU87VUFDUjs7Y0FBSyxHQUFHLEVBQUMsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEFBQUMsRUFBQyxTQUFTLEVBQUUsVUFBVSxBQUFDO1lBQ25EO0FBQUMseUJBQVc7Z0JBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQUFBQztBQUN6QyxnQ0FBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQUFBQztBQUN4RCx3QkFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQUFBQztBQUN0Qyx5QkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQUFBQztBQUN4QyxzQkFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQ25DLDhCQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztjQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7YUFDUjtZQUNkLG9CQUFDLFNBQVMsSUFBQyxHQUFHLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQUFBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEFBQUM7QUFDNUQseUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQUFBQztBQUNwQyxxQkFBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxBQUFDO0FBQzVCLG1CQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEFBQUM7QUFDeEIsc0JBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxBQUFDO0FBQ25DLHVCQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEFBQUM7QUFDaEMsdUJBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQUFBQztBQUNoQyxzQkFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxBQUFDO0FBQzlCLDZCQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEFBQUM7QUFDNUMseUJBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQyxHQUFFO1lBQ2hELFdBQVc7V0FDUjtVQUNMLFVBQVU7U0FDUCxDQUNQO09BQ0Y7O0FBRUQsY0FBVTthQUFBLG9CQUFDLEtBQUssRUFBRSxTQUFTLEVBQUM7QUFDMUIsWUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JELFlBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixjQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztPQUNKOztBQUVELHdCQUFvQjthQUFBLDhCQUFDLElBQUksRUFBRSxXQUFXLEVBQUM7QUFDckMsWUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3RELFlBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixjQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztPQUNKOztBQUVELHNCQUFrQjthQUFBLDRCQUFDLENBQUMsRUFBQztBQUNuQixZQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztBQUN6QyxZQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDekIsWUFBRyxVQUFVLEVBQUM7QUFDWix5QkFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDN0M7O0FBRUQsWUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUM5QyxZQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1oseUJBQWUsRUFBRSxlQUFlO1NBQ2pDLENBQUMsQ0FBQztBQUNILFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFDO0FBQ2xDLGNBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM5QztPQUNGOztBQUVELG1CQUFlO2FBQUEseUJBQUMsR0FBRyxFQUFFLFVBQVUsRUFBQztBQUM5QixZQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDbkQsWUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMzQyxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsaUJBQWlCLEVBQUM7QUFDdkQsc0JBQVksR0FBRyxVQUFVLEdBQUMsQ0FBQyxNQUFNLENBQUMsR0FBQyxFQUFFLENBQUE7U0FDdEMsTUFBTTtBQUNMLGNBQUcsVUFBVSxFQUFFO0FBQ2Isd0JBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDM0IsTUFBTTtBQUNMLHdCQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUM5QyxxQkFBTyxNQUFNLEtBQUssR0FBRyxDQUFDO2FBQ3ZCLENBQUMsQ0FBQztXQUNKO1NBQ0Y7O0FBRUQsWUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMzQyxZQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1oseUJBQWUsRUFBRSxZQUFZO1NBQzlCLENBQUMsQ0FBQzs7QUFFSCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBQztBQUMvQixjQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ2hEO09BQ0Y7O0FBRUQsa0JBQWM7YUFBQSx3QkFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQztBQUN4QyxZQUFJLFNBQVMsWUFBQSxDQUFDO0FBQ2QsYUFBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBUyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzdELGNBQUcsQ0FBQyxJQUFJLFFBQVEsRUFBQztBQUNmLHFCQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDbkMsbUJBQU8sS0FBSyxDQUFDO1dBQ2Q7U0FDRixDQUFDLENBQUM7O0FBRUgsWUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoRSxZQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osY0FBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7O0FBRUgsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUM7QUFDbkMsY0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqRjtPQUNGOztBQUVELHFCQUFpQjthQUFBLDZCQUFFO0FBQ2pCLFlBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFFakI7T0FDRjs7QUFFRCxnQkFBWTthQUFBLHNCQUFDLE1BQU0sRUFBQztBQUNsQixZQUFJLEdBQUcsR0FBRyxJQUFJO1lBQUUsTUFBTSxZQUFBLENBQUM7QUFDdkIsWUFBSTtBQUNGLGNBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hCLENBQUMsT0FBTSxDQUFDLEVBQUM7QUFDUixpQkFBTyxDQUFDLENBQUM7U0FDVjs7QUFFRCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFDOztBQUV2QixjQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4RCxjQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEUsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUQsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGdCQUFJLEVBQUUsTUFBTTtXQUNiLENBQUMsQ0FBQztBQUNILGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMvQyxNQUFLO0FBQ0osZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLGNBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixnQkFBSSxFQUFFLE1BQU07V0FDYixDQUFDLENBQUM7U0FDSjs7QUFFRCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBQztBQUNuQyxjQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0M7T0FDRjs7QUFFRCxpQkFBYTthQUFBLHlCQUFFO0FBQ2IsWUFBSSxNQUFNLFlBQUEsQ0FBQztBQUNYLFlBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzs7QUFFbEQsWUFBRyxXQUFXLElBQUUsV0FBVyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUM7QUFDbkMsY0FBRyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxFQUFDO0FBQUMsbUJBQU07V0FBQztTQUNsRDtBQUNELFlBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9CLFlBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBRWpDLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7QUFDdkIsY0FBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDeEQsY0FBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xFLGNBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hELGNBQUcsV0FBVyxHQUFHLFlBQVksRUFDM0IsV0FBVyxHQUFHLFlBQVksQ0FBQztBQUM3QixnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6RCxjQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osZ0JBQUksRUFBRSxNQUFNO0FBQ1osMkJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO1dBQ2pELENBQUMsQ0FBQztBQUNILGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM5QyxNQUFJO0FBQ0gsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLGNBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixnQkFBSSxFQUFFLE1BQU07QUFDWiwyQkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUU7V0FDakQsQ0FBQyxDQUFDO1NBQ0o7QUFDRCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBQztBQUNuQyxjQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDaEQ7T0FDRjs7QUFFRCxvQkFBZ0I7YUFBQSwwQkFBQyxTQUFTLEVBQUM7QUFDekIsWUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0IsWUFBSSxNQUFNLFlBQUEsQ0FBQztBQUNYLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7QUFDdkIsY0FBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDeEQsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0MsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BDLE1BQUk7QUFDSCxnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDM0I7QUFDRCxZQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osY0FBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUM7T0FDSjs7QUFFRCxnQkFBWTthQUFBLHNCQUFDLFVBQVUsRUFBQztBQUN0QixZQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QixZQUFJLE1BQU0sWUFBQSxDQUFDO0FBQ1gsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixjQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4RCxnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEMsTUFBSTtBQUNILGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMzQjtBQUNELFlBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixjQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztPQUNKOztBQUVELG9CQUFnQjthQUFBLDRCQUFFO0FBQ2hCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7QUFDdkIsaUJBQ0U7OztZQUNFLG9CQUFDLGNBQWMsSUFBQyxHQUFHLEVBQUMsWUFBWTtBQUNoQixzQkFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLEFBQUM7QUFDdkMsd0JBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQ2pELHlCQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQUFBQztBQUMzRSw2QkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEFBQUM7QUFDaEYsNEJBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLGVBQWUsQUFBQztBQUMzRSxzQkFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEFBQUMsR0FBRztXQUNqRCxDQUNQO1NBQ0YsTUFBSztBQUNKLGlCQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7O0FBRUQsaUJBQWE7YUFBQSx5QkFBRTtBQUNiLFlBQUksT0FBTyxZQUFBLENBQUM7QUFDWixZQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBQztBQUNwQyxpQkFBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBQztBQUNoRCxnQkFBSSxLQUFLLEdBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN2QixtQkFBTzs7Ozs7O0FBTUwsa0JBQUksRUFBRSxLQUFLLENBQUMsUUFBUTtBQUNwQixtQkFBSyxFQUFFLEtBQUssQ0FBQyxTQUFTOztBQUV0Qix1QkFBUyxFQUFDLEtBQUssQ0FBQyxTQUFTLElBQUUsS0FBSzs7QUFFaEMsc0JBQVEsRUFBQyxLQUFLLENBQUMsUUFBUSxJQUFHLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBRyxVQUFVLEFBQUMsR0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUMsS0FBSyxDQUFDLFFBQVE7QUFDN0Ysb0JBQU0sRUFBQyxLQUFLLENBQUMsTUFBTSxHQUFDLE1BQU0sR0FBQyxLQUFLOztBQUFBLGFBRWpDLENBQUM7V0FDSCxDQUFDLENBQUM7U0FDSixNQUFNO0FBQ0wsaUJBQU8sR0FBRyxDQUFDO0FBQ1QsZ0JBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUN4QyxpQkFBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTO0FBQzFDLG9CQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FDN0MsQ0FBQyxDQUFDO1NBQ0o7QUFDRCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFDO0FBQ25FLGlCQUNFOztjQUFLLFNBQVMsRUFBQyxVQUFVO1lBQ3ZCLG9CQUFDLE9BQU8sSUFBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEFBQUM7QUFDbkMsMEJBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQUFBQztBQUNuQywwQkFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxBQUFDO0FBQ2hDLHFCQUFPLEVBQUUsT0FBTyxBQUFDO0FBQ2pCLCtCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEFBQUM7QUFDaEQsc0JBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUN2QywyQkFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7QUFDakQsdUJBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUN6QyxzQkFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUU7V0FDOUMsQ0FDUDtTQUNGLE1BQUk7QUFDSCxpQkFBTyxJQUFJLENBQUM7U0FDYjtPQUNGOztBQUVELHFCQUFpQjthQUFBLDJCQUFDLE9BQU8sRUFBQztBQUN4QixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFDO0FBQ3pCLGlCQUNFLG9CQUFDLFdBQVcsSUFBQyxPQUFPLEVBQUUsT0FBTyxBQUFDO0FBQ2pCLHlCQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxBQUFDO0FBQ3pDLG9CQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQyxHQUFFLENBQzFEO1NBQ0gsTUFBSTtBQUNILGlCQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7Ozs7U0F2WUcsY0FBYztHQUFTLEtBQUssQ0FBQyxTQUFTOztBQXlZNUMsY0FBYyxDQUFDLFNBQVMsR0FBRztBQUN6QixRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQzlCLE1BQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDM0IsU0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM3QixPQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzNCLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDL0IsWUFBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNoQyxtQkFBaUIsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDekMsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQy9CLFFBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDNUIsV0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUMvQixZQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQy9CLFlBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDOUIsZUFBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNqQyxpQkFBYSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNuQyxvQkFBZ0IsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDdEMsNEJBQXdCLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0dBQy9DLENBQUM7QUFDRixVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDOUIsUUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUM1QixjQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2hDLGlCQUFhLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0dBQ3BDLENBQUM7QUFDRixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQy9CLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDL0IsUUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM1QixjQUFZLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2xDLGFBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDaEMsU0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQzdCLFlBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsYUFBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNqQyxzQkFBa0IsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDeEMsa0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDcEMsa0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDcEMsUUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUM1QixtQkFBZSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztBQUN0QyxlQUFXLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ25DLGtCQUFjLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0dBQ3ZDLENBQUM7Q0FDSCxDQUFDO0FBQ0YsY0FBYyxDQUFDLFlBQVksR0FBRztBQUM1QixRQUFNLEVBQUUsTUFBTTtBQUNkLFNBQU8sRUFBRSxLQUFLO0FBQ2QsT0FBSyxFQUFFLEtBQUs7QUFDWixXQUFTLEVBQUUsS0FBSztBQUNoQixZQUFVLEVBQUUsS0FBSztBQUNqQixtQkFBaUIsRUFBRSxTQUFTO0FBQzVCLFdBQVMsRUFBRTtBQUNULFFBQUksRUFBRSxLQUFLLENBQUMsZUFBZTtBQUMzQixXQUFPLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtBQUNsQyxZQUFRLEVBQUUsRUFBRTtBQUNaLFlBQVEsRUFBRSxTQUFTO0FBQ25CLGVBQVcsRUFBRSxTQUFTO0FBQ3RCLGlCQUFhLEVBQUUsS0FBSztBQUNwQixvQkFBZ0IsRUFBRSxLQUFLO0FBQ3ZCLDRCQUF3QixFQUFFLEtBQUs7R0FDaEM7QUFDRCxVQUFRLEVBQUM7QUFDUCxRQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWM7QUFDMUIsY0FBVSxFQUFFLEtBQUs7QUFDakIsaUJBQWEsRUFBRSxTQUFTO0dBQ3pCO0FBQ0QsV0FBUyxFQUFFLEtBQUs7QUFDaEIsV0FBUyxFQUFFLEtBQUs7QUFDaEIsUUFBTSxFQUFFLEtBQUs7QUFDYixjQUFZLEVBQUUsS0FBSztBQUNuQixhQUFXLEVBQUUsRUFBRTtBQUNmLFNBQU8sRUFBRTtBQUNQLFlBQVEsRUFBRSxTQUFTO0FBQ25CLGFBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztBQUMxQixzQkFBa0IsRUFBRSxTQUFTO0FBQzdCLGtCQUFjLEVBQUUsU0FBUztBQUN6QixrQkFBYyxFQUFFLFNBQVM7QUFDekIsUUFBSSxFQUFFLENBQUM7QUFDUCxtQkFBZSxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7QUFDekMsZUFBVyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFDeEMsa0JBQWMsRUFBRSxLQUFLLENBQUMsZUFBZTtHQUN0QztDQUNGLENBQUM7O2lCQUVhLGNBQWM7Ozs7Ozs7aUJDcGVkO0FBQ2IsV0FBUyxFQUFFLE1BQU07QUFDakIsVUFBUSxFQUFFLEtBQUs7QUFDZixlQUFhLEVBQUUsRUFBRTtBQUNqQixXQUFTLEVBQUUsR0FBRztBQUNkLFdBQVMsRUFBRSxJQUFJO0FBQ2YsVUFBUSxFQUFFLEdBQUc7QUFDYixZQUFVLEVBQUUsSUFBSTtBQUNoQixxQkFBbUIsRUFBRSxFQUFFO0FBQ3ZCLGlCQUFlLEVBQUUsTUFBTTtBQUN2QixtQkFBaUIsRUFBRSxPQUFPO0FBQzFCLGtCQUFnQixFQUFFLFVBQVU7QUFDNUIsZ0JBQWMsRUFBRSxNQUFNO0FBQ3RCLGlCQUFlLEVBQUUsT0FBTztBQUN4QixtQkFBaUIsRUFBRSxTQUFTO0FBQzVCLG9CQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3BDLGlCQUFlLEVBQUUsQ0FBQztDQUNuQjs7Ozs7Ozs7O0lDakJNLEtBQUssMkJBQU0sT0FBTzs7QUFDekIsSUFBSSxNQUFNLEdBQUMsZ0JBQVMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBQzs7QUFHbEUsUUFBRyxRQUFRLEtBQUcsSUFBSSxJQUFFLE9BQU8sUUFBUSxLQUFHLFFBQVEsRUFBQzs7QUFDM0MsWUFBSSxJQUFJLEdBQUMsUUFBUSxLQUFHLElBQUksR0FBQyxNQUFNLEdBQUMsUUFBUSxDQUFDO0FBQ3pDLGVBQ0ksMENBQVcsSUFBSSxJQUFFLElBQUksRUFBRSxJQUFJLEFBQUMsRUFBQyxZQUFZLEVBQUUsWUFBWSxBQUFDO0FBQ2pELHFCQUFTLEVBQUUsQ0FBQyxXQUFXLElBQUUsRUFBRSxDQUFBLEdBQUUsZ0NBQWdDLEFBQUMsSUFBRyxDQUMzRTtLQUNKLE1BQU0sSUFBRyxDQUFDLFFBQVEsRUFBQztBQUNsQixZQUFJLElBQUksR0FBQyxRQUFRLEtBQUcsSUFBSSxHQUFDLE1BQU0sR0FBQyxRQUFRLENBQUM7QUFDekMsZUFDSSwwQ0FBVyxJQUFJLElBQUUsSUFBSSxFQUFFLElBQUksQUFBQyxFQUFDLFlBQVksRUFBRSxZQUFZLEFBQUMsRUFBQyxRQUFRLEVBQUMsVUFBVTtBQUNyRSxxQkFBUyxFQUFFLENBQUMsV0FBVyxJQUFFLEVBQUUsQ0FBQSxHQUFFLGdDQUFnQyxBQUFDLElBQUcsQ0FDM0U7S0FDRixNQUFNLElBQUcsUUFBUSxDQUFDLElBQUksRUFBQzs7O0FBRXBCLGdCQUFRLENBQUMsS0FBSyxLQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQSxBQUFDLENBQUM7OztBQUc1QyxZQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsV0FBVyxJQUFFLEVBQUUsQ0FBQSxHQUNoQiw0QkFBNEIsR0FDNUIsUUFBUSxDQUFDLElBQUksSUFDWixRQUFRLENBQUMsU0FBUyxHQUFFLEdBQUcsR0FBQyxRQUFRLENBQUMsU0FBUyxHQUFFLEVBQUUsQ0FBQSxBQUFDLENBQUM7O0FBRWxFLFlBQUcsUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUM7O0FBQzFCLGdCQUFJLE9BQU8sR0FBRyxFQUFFO2dCQUFFLE1BQU0sR0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNqRCxnQkFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFDOztBQUNyQixvQkFBSSxRQUFRLENBQUM7QUFDYix1QkFBTyxHQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO0FBQzVCLDRCQUFRLEdBQUMsTUFBTSxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7QUFDNUIsMkJBQ0k7OzBCQUFRLEdBQUcsRUFBRSxRQUFRLEdBQUMsQ0FBQyxBQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsQUFBQzt3QkFBRSxRQUFRO3FCQUFVLENBQ3pEO2lCQUNKLENBQUMsQ0FBQzthQUNOO0FBQ0QsbUJBQ0k7OzZCQUFZLElBQUksSUFBRSxZQUFZLEVBQUUsWUFBWSxBQUFDO2dCQUFFLE9BQU87YUFBVSxDQUNsRTtTQUNMLE1BQU0sSUFBRyxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBQzs7O0FBRW5DLG9CQUFRLENBQUMsSUFBSSxLQUFHLElBQUksQ0FBQyxJQUFJLEdBQUMsUUFBUSxDQUFDLElBQUksQ0FBQSxBQUFDLENBQUM7QUFDekMsb0JBQVEsQ0FBQyxJQUFJLEtBQUcsSUFBSSxDQUFDLElBQUksR0FBQyxRQUFRLENBQUMsSUFBSSxDQUFBLEFBQUMsQ0FBQztBQUN6QyxnQkFBSSxZQUFZLEdBQUMsSUFBSSxDQUFDLFNBQVM7Z0JBQUMsT0FBTyxHQUFDLElBQUksQ0FBQztBQUM3QyxnQkFBRyxZQUFZLEVBQUM7QUFDWixvQkFBSSxDQUFDLFNBQVMsR0FBQyxVQUFTLENBQUMsRUFBQztBQUN0Qix3QkFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRTs7QUFDakIsb0NBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDbkI7aUJBQ0osQ0FBQztBQUNGLHVCQUFPLEdBQUM7O3NCQUFPLFNBQVMsRUFBQyx1Q0FBdUMsRUFBQyxPQUFPLEVBQUUsWUFBWSxBQUFDOztpQkFBYSxDQUFBO2FBQ3ZHOztBQUVELG1CQUNJOzs7Z0JBQ0ksNkNBQWMsSUFBSSxJQUFFLFlBQVksRUFBRSxZQUFZLEFBQUMsSUFBWTtnQkFDMUQsT0FBTzthQUNOLENBRVI7U0FDTCxNQUFNLElBQUcsUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUM7QUFDckMsZ0JBQUksT0FBTSxHQUFHLFlBQVksQ0FBQztBQUMxQixnQkFBRyxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFDOztBQUU3Qyx1QkFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQ2xDO0FBQ0QsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNELGdCQUFJLENBQUMsU0FBUyxJQUFJLHNCQUFzQixDQUFDOztBQUV6QyxnQkFBSSxPQUFPLEdBQUcsWUFBWSxJQUFJLE9BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLEtBQUssQ0FBQzs7QUFFOUQsbUJBQ0UsMENBQVcsSUFBSSxJQUFFLElBQUksRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFFLE9BQU0sQUFBQyxFQUFDLGNBQWMsRUFBRSxPQUFPLEFBQUMsSUFBRSxDQUMxRTtTQUNILE1BQUs7O0FBQ0YsbUJBQ0ksMENBQVcsSUFBSSxJQUFFLElBQUksRUFBRSxJQUFJLEFBQUMsRUFBQyxZQUFZLEVBQUUsWUFBWSxBQUFDLElBQUUsQ0FDN0Q7U0FDSjtLQUNKOztBQUVELFdBQ0ksMENBQVcsSUFBSSxJQUFFLElBQUksRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxJQUFFLEVBQUUsQ0FBQSxHQUFFLGdDQUFnQyxBQUFDLElBQUUsQ0FDaEc7Q0FDSixDQUFDOztpQkFFYSxNQUFNOzs7Ozs7Ozs7Ozs7O0lDdkZkLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsS0FBSywyQkFBTSxTQUFTOztJQUNwQixNQUFNLDJCQUFNLGNBQWM7O0FBRWpDLElBQUksZUFBZSxHQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDMUMsSUFBSSxvQkFBb0IsR0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7O0lBRXRFLFlBQVk7V0FBWixZQUFZOzBCQUFaLFlBQVk7Ozs7Ozs7WUFBWixZQUFZOztlQUFaLFlBQVk7QUFFaEIsVUFBTTs7O2FBQUEsZ0JBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUM7QUFDcEIsWUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ2xCLEdBQUcsRUFBQyxLQUFLLEVBQUU7QUFDVCxjQUFJLEVBQUMsUUFBUTtBQUNiLGlCQUFPLEVBQUUsSUFBSTtBQUNiLHlCQUFlLEVBQUUsSUFBSTtBQUNyQix1QkFBYSxFQUFFLG9CQUFvQjtBQUNuQyx1QkFBYSxFQUFFLG9CQUFvQjtTQUNwQyxDQUFDLENBQUM7T0FDUjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixlQUNJLG9CQUFDLGVBQWUsSUFBQyxHQUFHLEVBQUMsUUFBUSxFQUFDLG1CQUFtQixFQUFFLG9CQUFvQixBQUFDO0FBQ3ZELFlBQUUsRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUMsaUJBQWlCLEdBQW1CLENBQ3hGO09BQ0Y7Ozs7U0FsQkcsWUFBWTtHQUFTLEtBQUssQ0FBQyxTQUFTOztpQkFxQjNCLFlBQVk7Ozs7Ozs7Ozs7Ozs7SUM1QnBCLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsUUFBUSwyQkFBTSxZQUFZOztJQUMxQixLQUFLLDJCQUFNLFNBQVM7O0lBRXJCLHFCQUFxQjtXQUFyQixxQkFBcUI7MEJBQXJCLHFCQUFxQjs7Ozs7OztZQUFyQixxQkFBcUI7O2VBQXJCLHFCQUFxQjtBQUV6QixVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLE9BQU8sR0FBRztBQUNaLGVBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQzs7QUFFRixlQUNFOztZQUFJLEtBQUssRUFBRSxPQUFPLEFBQUM7VUFDakI7O2NBQUssU0FBUyxFQUFDLDhCQUE4QjtZQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FDaEI7U0FDSCxDQUNOO09BQ0Y7Ozs7U0FkRyxxQkFBcUI7R0FBUyxLQUFLLENBQUMsU0FBUzs7aUJBaUJwQyxxQkFBcUI7Ozs7Ozs7Ozs7Ozs7OztJQ3JCN0IsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsV0FBVywyQkFBTSxlQUFlOztJQUNoQyxlQUFlLDJCQUFNLG1CQUFtQjs7SUFDeEMsUUFBUSwyQkFBTSxZQUFZOztBQUVqQyxJQUFJLEtBQUssR0FBQyxlQUFTLEdBQUcsRUFBQztBQUNyQixTQUFPLEdBQUcsSUFBRyxPQUFPLEdBQUcsS0FBRyxVQUFVLEFBQUMsQ0FBQztDQUV2QyxDQUFDOztJQUNJLFNBQVM7QUFFRixXQUZQLFNBQVMsQ0FFRCxLQUFLLEVBQUU7MEJBRmYsU0FBUzs7QUFHYiwrQkFISSxTQUFTLDZDQUdQLEtBQUssRUFBRTtBQUNYLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxrQkFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQztBQUNGLFFBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0dBQ3RCOztZQVJHLFNBQVM7O2VBQVQsU0FBUztBQVViLFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7O0FBRW5ELFlBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7QUFDckQseUJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87QUFDbkMsdUJBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7QUFDL0IsMkJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1NBQ3hDLENBQUMsQ0FBQzs7QUFFSCxZQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ3BELFlBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOztBQUU3RCxZQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBUyxJQUFJLEVBQUUsQ0FBQyxFQUFDO0FBQ25ELGNBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDM0QsZ0JBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsZ0JBQUcsSUFBSSxDQUFDLE9BQU8sSUFDYixNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUNuQyxrQkFBTSxDQUFDLFFBQVE7QUFDZixnQkFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFDO0FBQy9CLGtCQUFJLE1BQU0sR0FBQyxNQUFNLENBQUMsTUFBTSxHQUFDLFVBQVMsS0FBSyxFQUFDO0FBQ3RDLHVCQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUMsRUFBRSxDQUFDLENBQUM7ZUFDdkQsR0FBQyxLQUFLLENBQUM7O0FBRVYscUJBQ0k7QUFBQywrQkFBZTtrQkFBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQzs7QUFFckQsMEJBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLFFBQVEsQUFBQztBQUN0Rix3QkFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUMsTUFBTSxHQUFDLEtBQUssQUFBQztBQUNuQyxxQkFBRyxFQUFFLENBQUMsQUFBQztBQUNQLDRCQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxBQUFDO0FBQzNDLDBCQUFRLEVBQUUsQ0FBQyxBQUFDO0FBQ1osMEJBQVEsRUFBRSxDQUFDLEFBQUM7Z0JBQzFCLFVBQVU7ZUFDSyxDQUNuQjthQUNKLE1BQUs7O0FBRUosa0JBQUksV0FBVyxHQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDOztBQUUvRixrQkFBRyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFDO0FBQ3RDLG9CQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRCxvQkFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDekMsZ0NBQWMsR0FBRyw2QkFBSyx1QkFBdUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUMsQUFBQyxHQUFPLENBQUM7aUJBQ2pGO0FBQ0QsdUJBQ0U7QUFBQyw2QkFBVztvQkFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQUFBQztBQUN4Qix1QkFBRyxFQUFFLENBQUMsQUFBQztBQUNQLDZCQUFTLEVBQUUsV0FBVyxBQUFDO0FBQ3ZCLDRCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEFBQUM7QUFDOUIsMEJBQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUN2Qyx5QkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEFBQUM7a0JBQzlCLGNBQWM7aUJBQ0gsQ0FDZjtlQUNGLE1BQUs7QUFDSix1QkFDRTtBQUFDLDZCQUFXO29CQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxBQUFDO0FBQ3hCLHVCQUFHLEVBQUUsQ0FBQyxBQUFDO0FBQ1AsNkJBQVMsRUFBRSxXQUFXLEFBQUM7QUFDdkIsNEJBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQUFBQztBQUM5QiwwQkFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEFBQUM7QUFDdEIsMEJBQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUN2Qyx5QkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEFBQUM7a0JBQzlCLFVBQVU7aUJBQ0MsQ0FDZjtlQUNGO2FBQ0Y7V0FDRixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1QsY0FBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O0FBRW5GLGNBQUksZUFBZSxHQUFHLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQzFELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsR0FBQyxJQUFJLENBQUM7Ozs7QUFJbEUsY0FBSSxXQUFXLEdBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDOztBQUVwRyxpQkFDRTtBQUFDLG9CQUFRO2NBQUMsVUFBVSxFQUFFLFFBQVEsQUFBQyxFQUFDLEdBQUcsRUFBRSxDQUFDLEFBQUMsRUFBQyxTQUFTLEVBQUUsV0FBVyxBQUFDO0FBQzdELHVCQUFTLEVBQUUsa0JBQWtCLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUMsU0FBUyxBQUFDO0FBQzdELDRCQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxjQUFjLEFBQUM7QUFDbEUseUJBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztZQUM1QyxlQUFlO1lBQ2YsWUFBWTtXQUNKLENBQ1o7U0FDRixFQUFFLElBQUksQ0FBQyxDQUFDOztBQUVULFlBQUcsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUM7QUFDeEIsbUJBQVMsQ0FBQyxJQUFJLENBQ2Q7QUFBQyxvQkFBUTtjQUFDLEdBQUcsRUFBQyxpQkFBaUI7WUFDN0I7O2dCQUFJLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUUsa0JBQWtCLEdBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQSxBQUFDLEFBQUM7QUFDNUQscUJBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQUFBQzs7YUFFOUI7V0FDSSxDQUFDLENBQUM7U0FDZDs7QUFFRCxZQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNyQixlQUNFOztZQUFLLFNBQVMsRUFBRSxnQkFBZ0IsQUFBQztVQUMvQjs7Y0FBTyxTQUFTLEVBQUUsWUFBWSxBQUFDO1lBQzVCLFdBQVc7WUFDWjs7O2NBQ0csU0FBUzthQUNKO1dBQ0Y7U0FDSixDQUNQO09BQ0Y7O0FBRUQscUJBQWlCO2FBQUEsMkJBQUMsa0JBQWtCLEVBQUM7QUFDbkMsWUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDOztBQUUzQixZQUFHLGtCQUFrQixFQUFDO0FBQ3BCLGNBQUksS0FBSyxHQUFHO0FBQ1YsaUJBQUssRUFBQyxFQUFFO1dBQ1QsQ0FBQTtBQUNELHlCQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUMsSUFBSSxHQUFFLDRCQUFJLEtBQUssRUFBRSxLQUFLLEFBQUMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEFBQUMsR0FBTSxBQUFDLENBQUM7U0FDakc7QUFDRCxZQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBUyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQ3RELGNBQUksS0FBSyxHQUFDO0FBQ1IsbUJBQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFDLE1BQU0sR0FBQyxJQUFJO0FBQ2xDLGlCQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7V0FDcEIsQ0FBQztBQUNGLGlCQUFRLDRCQUFJLEtBQUssRUFBRSxLQUFLLEFBQUMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxBQUFDLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEFBQUMsR0FBTSxDQUFFO1NBQ3ZFLENBQUMsQ0FBQzs7QUFFSCxlQUNFOzs7VUFDRTs7O1lBQUssZUFBZTtZQUFFLE9BQU87V0FBTTtTQUM3QixDQUNUO09BQ0Y7O0FBRUQsbUJBQWU7YUFBQSx5QkFBQyxRQUFRLEVBQUUsVUFBVSxFQUFDO0FBQ25DLFlBQUksR0FBRyxFQUFFLFdBQVcsQ0FBQztBQUNyQixZQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBUyxHQUFHLEVBQUUsQ0FBQyxFQUFDO0FBQ3RDLGNBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBQyxDQUFDLEVBQUM7QUFDakIsZUFBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9CLHVCQUFXLEdBQUcsR0FBRyxDQUFDO1dBQ25CO1NBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULFlBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztPQUNqRDs7QUFFRCw4QkFBMEI7YUFBQSxvQ0FBQyxDQUFDLEVBQUM7QUFDM0IsWUFBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLHdCQUF3QixFQUFDO0FBQ3ZGLGNBQUksQ0FBQyxlQUFlLENBQ2xCLENBQUMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRjtPQUNGOztBQUVELGtCQUFjO2FBQUEsd0JBQUMsUUFBUSxFQUFFLFdBQVcsRUFBQztBQUNuQyxZQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQixZQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFDO0FBQzVCLHFCQUFXLEVBQUUsQ0FBQztBQUNkLGNBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQ3RDLFdBQVcsRUFBRSxDQUFDO1NBQ2pCO0FBQ0QsZ0JBQVEsRUFBRSxDQUFDO0FBQ1gsWUFBSSxRQUFRLEdBQUc7QUFDYixzQkFBWSxFQUFFO0FBQ1osZUFBRyxFQUFFLFFBQVE7QUFDYixlQUFHLEVBQUUsV0FBVztXQUNqQjtTQUNGLENBQUM7O0FBRUYsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBQzs7QUFFL0MsY0FBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RyxjQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QztBQUNELFlBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDekI7O0FBRUQsY0FBVTthQUFBLHNCQUFFO0FBQ1YsWUFBSSxZQUFZLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7QUFDekMsWUFBRyxZQUFZLEVBQUM7QUFDZCxjQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JFO09BQ0Y7O0FBRUQsMEJBQXNCO2FBQUEsZ0NBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUM7QUFDbkQsWUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0FBQ3BDLFlBQUcsSUFBSSxJQUFJLE1BQU0sRUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO09BQ3pFOztBQUVELHlCQUFxQjthQUFBLCtCQUFDLFFBQVEsRUFBQztBQUM3QixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7QUFDdkQsaUJBQVE7QUFBQyx1QkFBVzs7WUFBQywrQkFBTyxJQUFJLEVBQUMsT0FBTyxFQUFDLElBQUksRUFBQyxXQUFXLEVBQUMsT0FBTyxFQUFFLFFBQVEsQUFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUU7V0FBYyxDQUFFO1NBQ3JKLE1BQUs7QUFDSixpQkFBUTtBQUFDLHVCQUFXOztZQUFFLCtCQUFPLElBQUksRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFFLFFBQVEsQUFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUU7V0FBYyxDQUFFO1NBQ3hJO09BQ0Y7O0FBRUQsdUJBQW1CO2FBQUEsK0JBQUU7QUFDbkIsZUFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGlCQUFpQixJQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDO09BQzNEOzs7O1NBck5HLFNBQVM7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUF1TnZDLFNBQVMsQ0FBQyxTQUFTLEdBQUc7QUFDcEIsTUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztBQUMzQixTQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQzlCLFNBQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDN0IsT0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMzQixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQy9CLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsaUJBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDdEMsYUFBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtDQUNsQyxDQUFDO2lCQUNhLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDNU9qQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLEtBQUssMkJBQU0sU0FBUzs7SUFFckIsV0FBVztBQUVKLFdBRlAsV0FBVyxDQUVILEtBQUssRUFBRTswQkFGZixXQUFXOztBQUdmLCtCQUhJLFdBQVcsNkNBR1QsS0FBSyxFQUFFO0dBQ1o7O1lBSkcsV0FBVzs7ZUFBWCxXQUFXO0FBTWYsa0JBQWM7YUFBQSx3QkFBQyxDQUFDLEVBQUM7QUFDZixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUM7QUFDckQsY0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ2pELG9CQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1dBQzVCLE1BQU0sSUFBRyxNQUFNLENBQUMsWUFBWSxFQUFFO0FBQzNCLGdCQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDaEMsZUFBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1dBQ3pCO1NBQ0Y7QUFDRCxZQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDZixDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQ3RDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDOUI7O0FBRUQsVUFBTTthQUFBLGtCQUFFO0FBQ04sWUFBSSxPQUFPLEdBQUc7QUFDWixtQkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztBQUMvQixpQkFBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLE1BQU0sR0FBQyxJQUFJO1NBQ3ZDLENBQUM7O0FBRUYsWUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2QsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBQztBQUNyQixjQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFDO0FBQ25ELGdCQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQy9DLE1BQUssSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFDO0FBQzNELGdCQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ3JEO1NBQ0Y7QUFDRCxlQUNFOztxQkFBSSxLQUFLLEVBQUUsT0FBTyxBQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxBQUFDLElBQUssSUFBSTtVQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7U0FDakIsQ0FDTjtPQUNGOzs7O1NBdkNHLFdBQVc7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUF5Q3pDLFdBQVcsQ0FBQyxTQUFTLEdBQUc7QUFDdEIsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNqQyxRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzVCLFdBQVMsRUFBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07Q0FDakMsQ0FBQzs7QUFFRixXQUFXLENBQUMsWUFBWSxHQUFHO0FBQ3pCLFdBQVMsRUFBRSxNQUFNO0FBQ2pCLFFBQU0sRUFBRSxLQUFLO0FBQ2IsV0FBUyxFQUFDLEVBQUU7Q0FDYixDQUFBO2lCQUNjLFdBQVc7Ozs7Ozs7Ozs7Ozs7OztJQ3ZEbkIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLE1BQU0sMkJBQU0sVUFBVTs7SUFDdEIsUUFBUSwyQkFBTSxtQkFBbUI7O0lBQ2pDLFFBQVEsMkJBQU0sWUFBWTs7SUFFM0IsZUFBZTtBQUNOLGFBRFQsZUFBZSxDQUNMLEtBQUssRUFBQzs4QkFEaEIsZUFBZTs7QUFFYixtQ0FGRixlQUFlLDZDQUVQLEtBQUssRUFBRTtBQUNiLFlBQUksQ0FBQyxhQUFhLEdBQUMsQ0FBQyxDQUFDO0FBQ3JCLFlBQUksQ0FBQyxLQUFLLEdBQUM7QUFDUCx1QkFBVyxFQUFDLEtBQUs7U0FDcEIsQ0FBQztLQUNMOztjQVBDLGVBQWU7O2lCQUFmLGVBQWU7QUFTbkIsc0JBQWM7bUJBQUEsd0JBQUMsQ0FBQyxFQUFDO0FBQ2Ysb0JBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUU7O0FBQ25CLHdCQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxVQUFVLEdBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQzs7QUFFOUQsd0JBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFDO0FBQ3RCLCtCQUFPO3FCQUNWO0FBQ0Qsd0JBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDcEQsTUFBSyxJQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFDO0FBQ3ZCLHdCQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25EO2FBQ0Y7O0FBRUQsa0JBQVU7bUJBQUEsb0JBQUMsQ0FBQyxFQUFDO0FBQ1gsb0JBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7QUFDdkIsd0JBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLFVBQVUsR0FDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0FBQzlELHdCQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBQztBQUN0QiwrQkFBTztxQkFDVjtBQUNELHdCQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3REO2FBQ0Y7O0FBQ0QsaUJBQVM7bUJBQUEsbUJBQUMsS0FBSyxFQUFDO0FBQ1osb0JBQUksRUFBRSxHQUFDLElBQUksQ0FBQztBQUNaLG9CQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBQztBQUMzQix3QkFBSSxLQUFLLEdBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdDLHdCQUFHLEtBQUssS0FBRyxJQUFJLEVBQUM7QUFDWiwwQkFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUNoRSw0QkFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7O0FBRTFDLDBCQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEIsMEJBQUUsQ0FBQyxRQUFRLENBQUMsRUFBQyxXQUFXLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztBQUNoQywwQkFBRSxDQUFDLGFBQWEsR0FBQyxVQUFVLENBQUMsWUFBVTtBQUFDLDhCQUFFLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7eUJBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztBQUMvRSw2QkFBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2QsK0JBQU8sS0FBSyxDQUFDO3FCQUNoQjtpQkFDSjtBQUNELHVCQUFPLElBQUksQ0FBQzthQUVmOztBQUNELG9CQUFZOzs7Ozs7Ozs7OztlQUFBLFlBQUU7QUFDVixvQkFBRyxJQUFJLENBQUMsYUFBYSxJQUFFLENBQUMsRUFBQztBQUNyQixnQ0FBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNqQyx3QkFBSSxDQUFDLGFBQWEsR0FBQyxDQUFDLENBQUM7aUJBQ3hCO2FBQ0o7O0FBQ0QseUJBQWlCO21CQUFBLDZCQUFFO0FBQ2Ysb0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDOztBQUU1QyxxQkFBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2pCOztBQUVELDRCQUFvQjttQkFBQSxnQ0FBRztBQUNyQixvQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCOztBQUVELGNBQU07bUJBQUEsa0JBQUU7QUFDTixvQkFBSSxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO29CQUM1QixNQUFNLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO29CQUN4QixJQUFJLEdBQUM7QUFDRCx1QkFBRyxFQUFDLFVBQVU7QUFDZCw2QkFBUyxFQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN4QywwQkFBTSxFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDcEMsQ0FBQzs7QUFFRix3QkFBUSxDQUFDLFdBQVcsS0FBRyxJQUFJLENBQUMsV0FBVyxHQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUEsQUFBQyxDQUFDOztBQUVsRSxvQkFBSSxXQUFXLEdBQUMsUUFBUSxDQUFDLEVBQUMsVUFBVyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBQyxPQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQztBQUM3Rix1QkFDSTs7c0JBQUksR0FBRyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLEFBQUM7b0JBQ3JDLE1BQU0sQ0FBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxXQUFXLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUUsRUFBRSxDQUFDO29CQUNqRSxvQkFBQyxRQUFRLElBQUMsR0FBRyxFQUFDLFVBQVUsR0FBWTtpQkFDbkMsQ0FDUjthQUNGOztBQUVELHlCQUFpQjttQkFBQSwyQkFBQyxDQUFDLEVBQUM7QUFDbEIsb0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLG9CQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMscUJBQUssR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELHVCQUFPLEtBQUssQ0FBQzthQUNkOzs7O1dBL0ZHLGVBQWU7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUFrRzdDLGVBQWUsQ0FBQyxTQUFTLEdBQUc7QUFDMUIsZ0JBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDbEMsWUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNoQyxZQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLGNBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDakMsQ0FBQzs7aUJBR2EsZUFBZTs7Ozs7Ozs7Ozs7Ozs7O0lDaEh2QixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLEtBQUssMkJBQU0sU0FBUzs7SUFDcEIsUUFBUSwyQkFBTSxZQUFZOztJQUUzQixXQUFXO0FBRUosV0FGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzBCQUZmLFdBQVc7O0FBR2IsK0JBSEUsV0FBVyw2Q0FHUCxLQUFLLEVBQUU7QUFDYixRQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztHQUNyQjs7WUFMRyxXQUFXOztlQUFYLFdBQVc7QUFPZixlQUFXO2FBQUEscUJBQUMsQ0FBQyxFQUFDO0FBQ1osWUFBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBRTVDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQzs7QUFFL0QsWUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ3JDOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUU7QUFDbkMseUJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87QUFDbkMsMkJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1NBQ3hDLENBQUMsQ0FBQztBQUNILFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQzs7QUFFM0IsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsaUJBQWlCLElBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBQztBQUNyRCxjQUFJLEtBQUssR0FBRztBQUNWLGlCQUFLLEVBQUMsRUFBRTtBQUNSLHVCQUFXLEVBQUUsQ0FBQztBQUNkLHdCQUFZLEVBQUUsQ0FBQztXQUNoQixDQUFBO0FBQ0QseUJBQWUsR0FBSTs7Y0FBSSxLQUFLLEVBQUUsS0FBSyxBQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxBQUFDOztXQUFZLEFBQUMsQ0FBQztTQUM1RDtBQUNELFlBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBQztBQUN2RCxjQUFJLE9BQU8sR0FBRztBQUNaLG1CQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBQyxNQUFNLEdBQUMsSUFBSTtBQUNsQyxpQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1dBQ3BCLENBQUM7QUFDRixpQkFDRTs7Y0FBSSxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQUFBQyxFQUFDLEtBQUssRUFBRSxPQUFPLEFBQUM7WUFDbkM7O2dCQUFLLFNBQVMsRUFBQyw4QkFBOEI7Y0FDM0MsK0JBQU8sSUFBSSxFQUFDLE1BQU0sRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQUFBQyxFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxBQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUU7YUFDbkc7V0FDSCxDQUNOO1NBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULGVBQ0U7O1lBQU8sU0FBUyxFQUFFLFlBQVksQUFBQyxFQUFDLEtBQUssRUFBRSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsQUFBQztVQUNuRDs7O1lBQ0U7O2dCQUFJLEtBQUssRUFBRSxFQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBQyxBQUFDO2NBQ3RDLGVBQWU7Y0FBRSxXQUFXO2FBQzFCO1dBQ0M7U0FDRixDQUNUO09BQ0Y7Ozs7U0F0REcsV0FBVztHQUFTLEtBQUssQ0FBQyxTQUFTOztBQXdEekMsV0FBVyxDQUFDLFNBQVMsR0FBRztBQUN0QixTQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQzlCLGVBQWEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDckMsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtDQUMvQixDQUFDO2lCQUNhLFdBQVc7Ozs7Ozs7Ozs7Ozs7OztJQ2pFbkIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLElBQUksMkJBQU0sUUFBUTs7SUFDbEIsUUFBUSwyQkFBTSxZQUFZOztJQUMxQixxQkFBcUIsMkJBQU0seUJBQXlCOztJQUVyRCxXQUFXO0FBRUosV0FGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzBCQUZmLFdBQVc7O0FBR2IsK0JBSEUsV0FBVyw2Q0FHUCxLQUFLLEVBQUU7R0FDZDs7WUFKRyxXQUFXOztlQUFYLFdBQVc7QUFNZixrQkFBYzthQUFBLHdCQUFDLEtBQUssRUFBRSxTQUFTLEVBQUM7QUFDOUIsWUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDeEMsYUFBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLEVBQUUsRUFBQztBQUN0QyxjQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxjQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO0FBQ25ELGtCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQy9EO1NBQ0Y7QUFDRCxZQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7T0FDckM7O0FBRUQscUJBQWlCO2FBQUEsNkJBQUU7O0FBRWpCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDckIsY0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELGNBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3hDLGVBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDdEMsZ0JBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDM0Qsb0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDL0Qsb0JBQU07YUFDUDtXQUNGO1NBQ0Y7T0FDRjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNoRCxZQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUMsSUFBSSxHQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3ZGLFlBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDOztBQUVqQyxlQUNFOztZQUFLLFNBQVMsRUFBRSxnQkFBZ0IsQUFBQztVQUMvQjs7Y0FBTyxTQUFTLEVBQUMsa0NBQWtDO1lBQ2pEOzs7Y0FDRTs7a0JBQUksR0FBRyxFQUFDLFFBQVE7Z0JBQ2Isa0JBQWtCO2dCQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7ZUFDakI7YUFDQztXQUNGO1NBQ0osQ0FDUDtPQUNGOztBQUVELHlCQUFxQjthQUFBLGlDQUFFO0FBQ3JCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQ3RELGlCQUFRLG9CQUFDLHFCQUFxQixPQUF5QixDQUFFO1NBQzFELE1BQUssSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUM7QUFDMUQsaUJBQVE7QUFBQyxpQ0FBcUI7O1lBQUMsK0JBQU8sSUFBSSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEFBQUMsR0FBRTtXQUF3QixDQUFFO1NBQ3ZILE1BQUk7QUFDSCxpQkFBTyxJQUFJLENBQUM7U0FDYjtPQUNGOztBQUVELDZCQUF5QjthQUFBLHFDQUFFO0FBQ3pCLFlBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDO0FBQ3BDLGVBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDM0MsZ0JBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUNwQixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1dBQ3hHO1NBQ0YsTUFBTTtBQUNMLGNBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUNqQixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1NBQ3JHO09BQ0Y7Ozs7U0F2RUcsV0FBVztHQUFTLEtBQUssQ0FBQyxTQUFTOztBQXlFekMsV0FBVyxDQUFDLFNBQVMsR0FBRztBQUN0QixlQUFhLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ3JDLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDNUIsZ0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDcEMsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNoQyxXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2pDLGtCQUFnQixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtDQUN2QyxDQUFDOztBQUVGLFdBQVcsQ0FBQyxZQUFZLEdBQUcsRUFDMUIsQ0FBQztpQkFDYSxXQUFXOzs7Ozs7Ozs7Ozs7O0lDMUZuQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsS0FBSywyQkFBTSxTQUFTOztJQUNwQixJQUFJLDJCQUFNLFFBQVE7O0lBRW5CLGlCQUFpQjtXQUFqQixpQkFBaUI7MEJBQWpCLGlCQUFpQjs7Ozs7OztZQUFqQixpQkFBaUI7O2VBQWpCLGlCQUFpQjtBQUlyQixxQkFBaUI7YUFBQSwyQkFBQyxDQUFDLEVBQUM7QUFDbEIsWUFBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUFDLGlCQUFPO1NBQUEsQUFDL0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDMUMsWUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQzFFLFlBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RCxXQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7T0FDbkQ7O0FBRUQscUJBQWlCO2FBQUEsNkJBQUU7QUFDakIsWUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ2xGOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksT0FBTyxHQUFHO0FBQ1osbUJBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7QUFDL0IsaUJBQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxNQUFNLEdBQUMsSUFBSTtBQUN0QyxlQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1NBQ3hCLENBQUM7O0FBRUYsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUMsR0FBRyxJQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFDLGFBQWEsR0FBQyxFQUFFLENBQUEsQUFBQyxDQUFDO0FBQzlFLGVBQ0U7O1lBQUksU0FBUyxFQUFFLE9BQU8sQUFBQyxFQUFDLEtBQUssRUFBRSxPQUFPLEFBQUM7VUFDckM7O2NBQUssR0FBRyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsOEJBQThCO0FBQzFELHFCQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtXQUFPO1NBQ3RFLENBQ047T0FDRjs7OztTQTlCRyxpQkFBaUI7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUFnQy9DLGlCQUFpQixDQUFDLFNBQVMsR0FBRztBQUM1QixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2pDLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDakMsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM5QixnQkFBYyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNwQyxZQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2hDLE9BQUssRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDM0IsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRztBQUM3QixRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzVCLFdBQVMsRUFBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsT0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUM3QixVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzlCLGlCQUFlLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHO0NBQ3JDLENBQUM7O0FBRUYsaUJBQWlCLENBQUMsWUFBWSxHQUFHO0FBQy9CLFdBQVMsRUFBRSxNQUFNO0FBQ2pCLFVBQVEsRUFBRSxLQUFLO0FBQ2YsWUFBVSxFQUFFLFNBQVM7QUFDckIsT0FBSyxFQUFFLEtBQUs7QUFDWixVQUFRLEVBQUUsSUFBSTtBQUNkLGdCQUFjLEVBQUUsU0FBUztBQUN6QixRQUFNLEVBQUUsS0FBSztBQUNiLFdBQVMsRUFBRSxFQUFFO0FBQ2IsT0FBSyxFQUFFLElBQUk7QUFDWCxVQUFRLEVBQUUsU0FBUztBQUNuQixpQkFBZSxFQUFFLEVBQUU7Q0FDcEIsQ0FBQzs7aUJBRWEsaUJBQWlCOzs7Ozs7Ozs7Ozs7Ozs7SUNsRXpCLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsS0FBSywyQkFBTSxTQUFTOztJQUVyQixRQUFRO1dBQVIsUUFBUTswQkFBUixRQUFROzs7Ozs7O1lBQVIsUUFBUTs7ZUFBUixRQUFRO0FBRVosWUFBUTthQUFBLGtCQUFDLENBQUMsRUFBQztBQUNULFlBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7T0FDNUU7O0FBRUQsVUFBTTthQUFBLGtCQUFFOztBQUVOLFlBQUksS0FBSyxHQUFDO0FBQ1IsZUFBSyxFQUFDO0FBQ0osMkJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUMsSUFBSTtXQUN6RTtBQUNELG1CQUFTLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUUsRUFBRTtTQUNuQyxDQUFDOztBQUVGLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsS0FDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFBLEFBQUMsRUFBQztBQUN0RixpQkFDRTs7eUJBQVEsS0FBSyxJQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtXQUFNLENBQzdFO1NBQ0YsTUFBSTtBQUNILGlCQUNFOztZQUFRLEtBQUs7WUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FBTSxDQUMxQztTQUNGO09BQ0Y7Ozs7U0ExQkcsUUFBUTtHQUFTLEtBQUssQ0FBQyxTQUFTOztBQTRCdEMsUUFBUSxDQUFDLFNBQVMsR0FBRztBQUNuQixZQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2hDLGdCQUFjLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3BDLGFBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDbEMsQ0FBQztpQkFDYSxRQUFROzs7Ozs7Ozs7Ozs7Ozs7SUNwQ2hCLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsUUFBUSwyQkFBTSxZQUFZOztJQUUzQixVQUFVO0FBRUgsV0FGUCxVQUFVLENBRUYsS0FBSyxFQUFFOzBCQUZmLFVBQVU7O0FBR2QsK0JBSEksVUFBVSw2Q0FHUixLQUFLLEVBQUU7R0FDYjs7WUFKSSxVQUFVOztlQUFWLFVBQVU7QUFNZCxnQkFBWTthQUFBLHNCQUFDLENBQUMsRUFBQztBQUNiLFNBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNuQixZQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzdDOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBQyxJQUFJLENBQUM7QUFDeEQsZUFDSTs7WUFBSSxTQUFTLEVBQUUsT0FBTyxBQUFDO1VBQUM7O2NBQUcsSUFBSSxFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FBSztTQUFLLENBQzVHO09BQ0Y7Ozs7U0FoQkcsVUFBVTtHQUFTLEtBQUssQ0FBQyxTQUFTOztBQWtCeEMsVUFBVSxDQUFDLFNBQVMsR0FBRztBQUNyQixZQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2hDLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDN0IsQ0FBQzs7aUJBRWEsVUFBVTs7Ozs7Ozs7Ozs7Ozs7O0lDMUJsQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFVBQVUsMkJBQU0saUJBQWlCOztJQUNqQyxLQUFLLDJCQUFNLFVBQVU7O0lBRXRCLGNBQWM7QUFFUCxXQUZQLGNBQWMsQ0FFTixLQUFLLEVBQUU7MEJBRmYsY0FBYzs7QUFHbEIsK0JBSEksY0FBYyw2Q0FHWixLQUFLLEVBQUU7QUFDYixRQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1QsaUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7QUFDaEMsaUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7S0FDcEMsQ0FBQztHQUNKOztZQVJJLGNBQWM7O2VBQWQsY0FBYztBQVVsQixjQUFVO2FBQUEsb0JBQUMsSUFBSSxFQUFDO0FBQ2QsWUFBRyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBQztBQUN4QixjQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUMsQ0FBQyxHQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDO1NBQ2hFLE1BQUssSUFBRyxJQUFJLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBQztBQUMvQixjQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUM7U0FDNUYsTUFBSyxJQUFHLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFDO0FBQy9CLGNBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hCLE1BQUssSUFBRyxJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBQztBQUNoQyxjQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ1YsTUFBSTtBQUNILGNBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7O0FBRUQsWUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUM7QUFDaEMsY0FBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0FBQ25DLGNBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JEO09BQ0Y7O0FBRUQscUJBQWlCO2FBQUEsMkJBQUMsQ0FBQyxFQUFDO0FBQ2xCLFNBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNuQixZQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxZQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBQztBQUN0QyxjQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUQsY0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzNDLGNBQUksQ0FBQyxRQUFRLENBQUM7QUFDWix1QkFBVyxFQUFFLFVBQVU7QUFDdkIsdUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7V0FDcEMsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDM0Q7T0FDRjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7OztBQUNOLFlBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hFLFlBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQixZQUFJLGFBQWEsR0FBRztBQUNsQixtQkFBUyxFQUFFLEtBQUs7QUFBQSxTQUNqQixDQUFBOztBQUVELFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFDLFdBQVcsRUFBSztBQUNwRSxpQkFDRTs7Y0FBSSxHQUFHLEVBQUUsV0FBVyxBQUFDLEVBQUMsSUFBSSxFQUFDLGNBQWM7WUFDdkM7O2dCQUFHLElBQUksRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsR0FBRyxFQUFDLE9BQU8sRUFBRSxNQUFLLGlCQUFpQixDQUFDLElBQUksT0FBTSxBQUFDO2NBQUUsV0FBVzthQUFLO1dBQ3BHLENBQ0w7U0FDSCxDQUFDLENBQUM7O0FBRUgsZUFDRTs7WUFBSyxTQUFTLEVBQUMsS0FBSztVQUNsQjs7Y0FBSyxTQUFTLEVBQUMsVUFBVTtZQUN2Qjs7Z0JBQUssU0FBUyxFQUFDLFVBQVU7Y0FDdkI7O2tCQUFRLFNBQVMsRUFBQyxpQ0FBaUMsRUFBQyxJQUFJLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsZUFBWSxVQUFVLEVBQUMsaUJBQWMsTUFBTTtnQkFDNUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO2dCQUN2Qiw4QkFBTSxTQUFTLEVBQUMsT0FBTyxHQUFRO2VBQ3hCO2NBQ1Q7O2tCQUFJLFNBQVMsRUFBQyxlQUFlLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxtQkFBZ0IsY0FBYztnQkFDckUsZUFBZTtlQUNiO2FBQ0Q7V0FDRjtVQUNOOztjQUFLLFNBQVMsRUFBQyxVQUFVO1lBQ3ZCOztnQkFBSSxTQUFTLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBRSxhQUFhLEFBQUM7Y0FDN0MsUUFBUTthQUNOO1dBQ0Q7U0FDRixDQUNQO09BQ0Y7O0FBRUQsWUFBUTthQUFBLG9CQUFFO0FBQ1IsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVCLGVBQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFTLElBQUksRUFBQztBQUM3QixjQUFJLFFBQVEsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUMsSUFBSSxHQUFDLEtBQUssQ0FBQztBQUN6RCxpQkFDRTtBQUFDLHNCQUFVO2NBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEVBQUMsTUFBTSxFQUFFLFFBQVEsQUFBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLEFBQUM7WUFBRSxJQUFJO1dBQWMsQ0FDckc7U0FDRixFQUFFLElBQUksQ0FBQyxDQUFDO09BQ1Y7O0FBRUQsWUFBUTthQUFBLG9CQUFFO0FBQ1IsWUFBSSxTQUFTLEdBQUcsQ0FBQztZQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDOztBQUU3QyxpQkFBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRixlQUFPLEdBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzs7QUFFdEQsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM3QixpQkFBTyxHQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDNUIsbUJBQVMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1NBQ3JEO0FBQ0QsWUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQyxhQUFJLElBQUksQ0FBQyxHQUFDLFNBQVMsRUFBQyxDQUFDLElBQUUsT0FBTyxFQUFDLENBQUMsRUFBRSxFQUFDO0FBQ2pDLGNBQUcsQ0FBQyxHQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO0FBQ0QsYUFBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUIsYUFBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUIsZUFBTyxLQUFLLENBQUM7T0FDZDs7QUFFRCxrQkFBYzthQUFBLDBCQUFFO0FBQ2QsZUFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztPQUMvQjs7QUFFRCxrQkFBYzthQUFBLDBCQUFFO0FBQ2QsZUFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztPQUMvQjs7OztTQXBIRyxjQUFjO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBc0g1QyxjQUFjLENBQUMsU0FBUyxHQUFHO0FBQ3pCLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsYUFBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNuQyxVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLFlBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDaEMsaUJBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDdEMsZ0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07Q0FDdkMsQ0FBQzs7QUFFRixjQUFjLENBQUMsWUFBWSxHQUFHO0FBQzVCLGFBQVcsRUFBRSxLQUFLLENBQUMsYUFBYTtDQUNqQyxDQUFBO2lCQUNjLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUN0SXRCLEtBQUssMkJBQU0sVUFBVTs7QUFDNUIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQzs7QUFFbEQsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDO0FBQzdDLE9BQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUIsS0FBRyxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsRUFBQyxDQUFDLEVBQUs7QUFDaEIsUUFBRyxRQUFRLEVBQUM7QUFDVixhQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxVQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFDO0FBQzFCLGVBQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxBQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUksQ0FBQyxHQUFHLENBQUMsQUFBQyxDQUFDO09BQ2hGLE1BQUk7QUFDSCxlQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsQUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFJLENBQUMsR0FBRyxDQUFDLEFBQUMsQ0FBQztPQUNoRjtLQUNGO0dBQ0YsQ0FBQyxDQUFDOztBQUVILFNBQU8sR0FBRyxDQUFDO0NBQ1o7O0lBRVksWUFBWSxXQUFaLFlBQVk7QUFDWixXQURBLFlBQVksQ0FDWCxJQUFJLEVBQUM7MEJBRE4sWUFBWTs7QUFFckIsK0JBRlMsWUFBWSw2Q0FFZixJQUFJLEVBQUU7QUFDWixRQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztHQUNsQjs7WUFKVSxZQUFZOztlQUFaLFlBQVk7QUFNdkIsV0FBTzthQUFBLGlCQUFDLElBQUksRUFBRTtBQUNaLFlBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzNCOztBQUVELFNBQUs7YUFBQSxpQkFBRTtBQUNMLFlBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO09BQ2xCOztBQUVELFdBQU87YUFBQSxtQkFBRTtBQUNQLGVBQU8sSUFBSSxDQUFDLElBQUksQ0FBQztPQUNsQjs7OztTQWhCVSxZQUFZO0dBQVMsWUFBWTs7SUFtQmpDLGNBQWMsV0FBZCxjQUFjO0FBRWQsV0FGQSxjQUFjLENBRWIsSUFBSSxFQUFDOzBCQUZOLGNBQWM7O0FBR3ZCLFFBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFFBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDOUIsUUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEIsUUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbEIsUUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7R0FDcEI7O2VBWlUsY0FBYztBQWN6QixZQUFRO2FBQUEsa0JBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBQztBQUNqRCxZQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QixZQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLFlBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztPQUM1Qzs7QUFFRCxXQUFPO2FBQUEsaUJBQUMsSUFBSSxFQUFFO0FBQ1osWUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2xCLGNBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEQsY0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzRDtBQUNELFlBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUNkLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN2RDtPQUNGOztBQUVELHFCQUFpQjthQUFBLDJCQUFDLGVBQWUsRUFBQztBQUNoQyxZQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztPQUNqQzs7QUFFRCxzQkFBa0I7YUFBQSw4QkFBRTtBQUNsQixlQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7T0FDdEI7O0FBRUQseUJBQXFCO2FBQUEsaUNBQUU7QUFDckIsWUFBRyxJQUFJLENBQUMsVUFBVTtBQUFFLGlCQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7O0FBQ3hDLGlCQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQTtPQUN2Qjs7QUFFRCxRQUFJO2FBQUEsY0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFDO0FBQ3BCLFlBQUksQ0FBQyxPQUFPLEdBQUc7QUFDYixlQUFLLEVBQUUsS0FBSztBQUNaLG1CQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDOztBQUVGLFlBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDdEQsWUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELDBCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztBQUUzRSxlQUFPLElBQUksQ0FBQztPQUNiOztBQUVELFFBQUk7Ozs7Ozs7Ozs7O1NBQUEsVUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDO0FBQ3JCLFlBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksR0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDO0FBQ3RDLFlBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUEsQUFBQyxDQUFDO0FBQzFELGVBQU8sSUFBSSxDQUFDO09BQ2I7O0FBRUQsUUFBSTthQUFBLGNBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUM7QUFDL0IsWUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUN0RCxZQUFJLFdBQVcsWUFBQSxDQUFDO0FBQ2hCLFlBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUM7QUFDeEIsNEJBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELHFCQUFXLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNELE1BQUk7QUFDSCw0QkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEUscUJBQVcsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUU7QUFDRCxZQUFHLElBQUksQ0FBQyxVQUFVLEVBQUM7QUFDakIsY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBUyxHQUFHLEVBQUM7QUFDN0IsZ0JBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxXQUFXLEVBQUM7QUFDcEMsaUJBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO2FBQ3hDO1dBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNWO0FBQ0QsZUFBTyxJQUFJLENBQUM7T0FDYjs7QUFFRCxPQUFHO2FBQUEsYUFBQyxNQUFNLEVBQUM7QUFDVCxZQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFDO0FBQ3JDLGdCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsd0JBQXdCLENBQUM7U0FDaEQ7QUFDRCxZQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3RELDBCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUN0QyxjQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQztBQUN6RCxrQkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1dBQ3ZFO1NBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCwwQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hCO09BQ0Y7O0FBRUQsVUFBTTthQUFBLGdCQUFDLE1BQU0sRUFBQztBQUNaLFlBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDdEQsWUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBRyxFQUFDO0FBQ2xELGlCQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2pELEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGNBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBUyxHQUFHLEVBQUM7QUFDeEMsbUJBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7V0FDakQsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULGNBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1NBQzVCLE1BQUk7QUFDSCxjQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUNwQjtPQUNGOztBQUVELFVBQU07YUFBQSxnQkFBQyxTQUFTLEVBQUM7QUFDZixZQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBQztBQUNwQyxjQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixjQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN4QixjQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN2QixNQUFLO0FBQ0osY0FBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0IsY0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoRCxnQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGlCQUFJLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBQztBQUN2QixrQkFBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQy9FLHFCQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2Qsc0JBQU07ZUFDUDthQUNGO0FBQ0QsbUJBQU8sS0FBSyxDQUFDO1dBQ2QsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7T0FDRjs7QUFFRCxVQUFNO2FBQUEsZ0JBQUMsVUFBVSxFQUFDO0FBQ2hCLFlBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBQztBQUMxQixjQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixjQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN4QixjQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QixNQUFJO0FBQ0gsY0FBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDN0IsY0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoRCxnQkFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLGlCQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBQztBQUNqQixrQkFBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQ1IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztBQUM1RSxxQkFBSyxHQUFHLElBQUksQ0FBQztBQUNiLHNCQUFNO2VBQ1A7YUFDRjtBQUNELG1CQUFPLEtBQUssQ0FBQztXQUNkLENBQUMsQ0FBQztBQUNILGNBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO09BQ0Y7O0FBRUQsT0FBRzthQUFBLGVBQUU7QUFDSCxZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs7QUFFekMsWUFBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7QUFBRSxpQkFBTyxLQUFLLENBQUM7U0FBQSxBQUVuQyxJQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFDO0FBQ3hCLGlCQUFPLEtBQUssQ0FBQztTQUNkLE1BQUk7QUFDSCxjQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsZUFBSSxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDbkQsa0JBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsZ0JBQUcsQ0FBQyxHQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFDLE1BQU07V0FDOUI7QUFDRCxpQkFBTyxNQUFNLENBQUM7U0FDZjtPQUNGOztBQUVELGVBQVc7YUFBQSx1QkFBRTtBQUNYLGVBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztPQUN0Qjs7QUFFRCxjQUFVO2FBQUEsc0JBQUU7QUFDVixlQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztPQUM1Qzs7QUFFRCxnQkFBWTthQUFBLHdCQUFFO0FBQ1osZUFBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoQyxpQkFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNCLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDVjs7OztTQTVMVSxjQUFjOzs7QUE4TDFCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ3JPSyxLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsS0FBSywyQkFBTSxVQUFVOztJQUNyQixNQUFNLDJCQUFNLFdBQVc7O0lBQ3ZCLFFBQVEsMkJBQU0sb0JBQW9COztJQUVuQyxPQUFPO0FBRUEsV0FGUCxPQUFPLENBRUMsS0FBSyxFQUFFOzBCQUZmLE9BQU87O0FBR1gsK0JBSEksT0FBTyw2Q0FHTCxLQUFLLEVBQUU7QUFDWCxRQUFJLENBQUMsYUFBYSxHQUFDLENBQUMsQ0FBQztBQUNyQixRQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsd0JBQWtCLEVBQUUsSUFBSTtBQUN4QixtQkFBYSxFQUFDLElBQUk7QUFDbEIsaUJBQVcsRUFBQyxLQUFLO0tBQ2xCLENBQUM7R0FDSDs7WUFWRyxPQUFPOztlQUFQLE9BQU87QUFXWCx3QkFBb0I7YUFBQSxnQ0FBRTtBQUNwQixZQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7T0FDckI7O0FBQ0QsZ0JBQVk7Ozs7Ozs7Ozs7O1NBQUEsWUFBRztBQUNiLFlBQUcsSUFBSSxDQUFDLGFBQWEsRUFBQztBQUNwQixzQkFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNqQyxjQUFJLENBQUMsYUFBYSxHQUFDLENBQUMsQ0FBQztTQUN0QjtPQUNGOztBQUVELHFCQUFpQjthQUFBLDZCQUFFO0FBQ2pCLFlBQUksRUFBRSxHQUFDLElBQUk7WUFBQyxNQUFNLEdBQUcsRUFBRTtZQUFDLE9BQU8sR0FBQyxJQUFJO1lBQUMsU0FBUztZQUFDLE9BQU87WUFBQyxhQUFhLEdBQUMsRUFBRSxDQUFDO0FBQ3hFLFlBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDNUMsY0FBRyxNQUFNLENBQUMsU0FBUyxFQUFDOztBQUNsQixxQkFBUyxHQUFDLE9BQU8sTUFBTSxDQUFDLFNBQVMsSUFBRSxVQUFVLEdBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFFLFlBQVksR0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxBQUFDLENBQUM7V0FDdEcsTUFBSTtBQUNILGdCQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDakQscUJBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDOztBQUV0QixnQkFBRyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBQztBQUN2RCxrQkFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsdUJBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUM7O0FBRUQsZ0JBQUcsTUFBTSxDQUFDLFFBQVEsSUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBQzs7QUFDNUMscUJBQU8sR0FBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUM3QyxrQkFBRyxPQUFPLEtBQUcsSUFBSSxFQUFDO0FBQ2hCLHVCQUFPLEdBQUMsS0FBSyxDQUFDO0FBQ2QsNkJBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsT0FBTyxDQUFDO2VBQ3JDO2FBQ0Y7V0FDRjs7QUFFRCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRSxTQUFTLENBQUM7U0FDakMsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCxZQUFHLE9BQU8sRUFBQztBQUNULGlCQUFPLE1BQU0sQ0FBQztTQUNmLE1BQUk7QUFDSCxZQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7O0FBRWxCLGNBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxhQUFhLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDOztBQUU5RCxZQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFDLHdDQUF3QyxFQUFDLHdCQUF3QixDQUFDLENBQUM7O0FBRW5HLFlBQUUsQ0FBQyxhQUFhLEdBQUMsVUFBVSxDQUFDLFlBQVU7QUFBQyxjQUFFLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7V0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9FLGlCQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7O0FBRUQsc0JBQWtCO2FBQUEsNEJBQUMsQ0FBQyxFQUFDO0FBQ25CLFlBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3RDLFlBQUcsQ0FBQyxNQUFNLEVBQUM7O0FBQ1QsaUJBQU87U0FDUjtBQUNELFlBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLFlBQUcsR0FBRyxFQUFFO0FBQ04sY0FBSSxFQUFFLEdBQUMsSUFBSSxDQUFDO0FBQ1osWUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQyxHQUFHLEVBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUM5RCxZQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7O0FBRWxCLFlBQUUsQ0FBQyxRQUFRLENBQUMsRUFBQyxXQUFXLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQywrQ0FBK0MsRUFBQyxDQUFDLENBQUM7O0FBRTlGLFlBQUUsQ0FBQyxhQUFhLEdBQUMsVUFBVSxDQUFDLFlBQVU7QUFBQyxjQUFFLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7V0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hGLE1BQUs7O0FBRUosY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLHlCQUFhLEVBQUMsSUFBSTtBQUNsQix1QkFBVyxFQUFDLEtBQUs7V0FDbEIsQ0FBQyxDQUFDOztBQUVILGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBRXJDO09BQ0Y7O0FBRUQseUJBQXFCO2FBQUEsK0JBQUMsQ0FBQyxFQUFDO0FBQ3RCLFlBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7T0FDeEI7O0FBRUQsa0JBQWM7YUFBQSx3QkFBQyxDQUFDLEVBQUM7QUFDZixZQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztPQUN2RDs7QUFFRCxlQUFXO2FBQUEscUJBQUMsQ0FBQyxFQUFDO0FBQ1osWUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUM1Qzs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLGNBQWMsR0FBRyxtQkFBbUIsR0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlELFlBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUNqQzs7WUFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQUFBQyxFQUFDLFNBQVMsRUFBQyxjQUFjLEVBQUMsZUFBWSxPQUFPLEVBQUMsZUFBYSxHQUFHLEdBQUMsY0FBYyxBQUFDO1VBQ3BJLDJCQUFHLFNBQVMsRUFBQywwQkFBMEIsR0FBSzs7U0FBYSxHQUFDLElBQUksQ0FBQzs7QUFFdkUsWUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQ2pDOztZQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGlCQUFpQixFQUFDLGVBQVksU0FBUyxFQUFDLGtCQUFlLE9BQU8sRUFBQyxLQUFLLEVBQUMsbUJBQW1CO0FBQ3RILG1CQUFPLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztVQUMvQywyQkFBRyxTQUFTLEVBQUMsMkJBQTJCLEdBQUs7O1NBQ3RDLEdBQUMsSUFBSSxDQUFDO0FBQ3JCLFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUMzQywrQkFBTyxJQUFJLEVBQUMsTUFBTSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUMsUUFBUSxBQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUUsR0FBQyxJQUFJLENBQUM7QUFDbkosWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxHQUFDLElBQUksQ0FBQztBQUNuRixZQUFJLFlBQVksR0FBRztBQUNqQixpQkFBTyxFQUFFLE1BQU07QUFDZixzQkFBWSxFQUFFLENBQUM7U0FDaEIsQ0FBQztBQUNGLGVBQ0U7OztVQUNFOztjQUFLLFNBQVMsRUFBQyx3QkFBd0IsRUFBQyxJQUFJLEVBQUMsT0FBTyxFQUFDLGNBQVcsS0FBSztZQUNsRSxTQUFTO1lBQ1QsU0FBUztXQUNOO1VBQ0wsZUFBZTtVQUNoQixvQkFBQyxRQUFRLElBQUMsR0FBRyxFQUFDLFVBQVUsR0FBWTtVQUNuQyxLQUFLO1NBQ0YsQ0FDUDtPQUNGOztBQUVELHdCQUFvQjthQUFBLDhCQUFDLGNBQWMsRUFBQztBQUNsQyxZQUFJLGFBQWEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBQzs7OztBQUl6RCxjQUFJLFFBQVEsR0FBQyxNQUFNLENBQUMsUUFBUTtjQUN4QixNQUFNLEdBQUMsTUFBTSxDQUFDLE1BQU07Y0FDcEIsSUFBSSxHQUFDLEVBQUMsR0FBRyxFQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxRQUFRLENBQUMsV0FBVyxHQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUMsTUFBTSxDQUFDLElBQUksRUFBQyxDQUFDOztBQUVoRyxjQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUM7O0FBQ2xCLG1CQUFPLElBQUksQ0FBQztXQUNiO0FBQ0QsY0FBSSxLQUFLLEdBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRTs7Y0FBTSxTQUFTLEVBQUMsc0JBQXNCO1lBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7V0FBUSxHQUFFLElBQUksQ0FBQzs7Ozs7QUFLekgsaUJBQ0U7O2NBQUssU0FBUyxFQUFDLFlBQVksRUFBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQUFBQztZQUM1Qzs7O2NBQVEsTUFBTSxDQUFDLElBQUk7YUFBUztZQUMzQixNQUFNLENBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsRUFBRSxDQUFDO1lBQy9CLEtBQUs7V0FDRixDQUNOO1NBQ0gsQ0FBQyxDQUFDO0FBQ0gsWUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUcsY0FBYyxFQUFDO0FBQ3pELGNBQUksRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7QUFBQSxTQUN0RCxDQUFDLENBQUM7QUFDSCxZQUFJLFdBQVcsR0FBQyxRQUFRLENBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQztBQUNqRCxvQkFBVyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7QUFDakMsaUJBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO1NBQy9CLENBQUMsQ0FBQztBQUNILGVBQ0U7O1lBQUssR0FBRyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxBQUFDLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsUUFBUTtVQUNsRTs7Y0FBSyxTQUFTLEVBQUUsV0FBVyxBQUFDO1lBQzFCOztnQkFBSyxTQUFTLEVBQUMsZUFBZTtjQUM1Qjs7a0JBQUssU0FBUyxFQUFDLGNBQWM7Z0JBQzNCOztvQkFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsZ0JBQWEsT0FBTyxFQUFDLGNBQVcsT0FBTztrQkFBQzs7c0JBQU0sZUFBWSxNQUFNOzttQkFBZTtpQkFBUztnQkFDaEk7O29CQUFJLFNBQVMsRUFBQyxhQUFhOztpQkFBZ0I7ZUFDdkM7Y0FDTjs7a0JBQUssU0FBUyxFQUFDLFlBQVk7Z0JBQ3pCOztvQkFBTSxHQUFHLEVBQUMsTUFBTTtrQkFDZixVQUFVO2lCQUNKO2VBQ0g7Y0FDTjs7a0JBQUssU0FBUyxFQUFDLGNBQWM7Z0JBQzNCOztvQkFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxpQkFBaUIsRUFBQyxnQkFBYSxPQUFPOztpQkFBZTtnQkFDckY7O29CQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQzs7aUJBQWM7ZUFDdEc7YUFDRjtXQUNGO1NBQ0YsQ0FDUDtPQUNGOzs7O1NBeExHLE9BQU87R0FBUyxLQUFLLENBQUMsU0FBUzs7QUEwTHJDLE9BQU8sQ0FBQyxTQUFTLEdBQUc7QUFDbEIsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM5QixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQy9CLGNBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDbEMsY0FBWSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNsQyxjQUFZLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2xDLFNBQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDOUIsbUJBQWlCLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0NBQzFDLENBQUM7O0FBRUYsT0FBTyxDQUFDLFlBQVksR0FBRztBQUNyQixjQUFZLEVBQUUsS0FBSztBQUNuQixjQUFZLEVBQUUsS0FBSztBQUNuQixjQUFZLEVBQUUsS0FBSztDQUNwQixDQUFBO2lCQUNjLE9BQU87Ozs7Ozs7SUMvTWYsS0FBSywyQkFBTSxTQUFTOztpQkFDWjs7QUFFYixpQkFBZSxFQUFBLHlCQUFDLEtBQUssRUFBRTtBQUNyQixRQUFJLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLFFBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQ3pCLFFBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUM7QUFDeEQsUUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQyxTQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUMxQixTQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDaEMsUUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixXQUFPLElBQUksQ0FBQztHQUNiOztDQUVGOzs7Ozs7O0lDZE0sY0FBYywyQkFBTSxrQkFBa0I7O0lBQ3RDLGlCQUFpQiwyQkFBTSxxQkFBcUI7O0lBQzNDLFlBQVksV0FBTyx3QkFBd0IsRUFBM0MsWUFBWTs7QUFFcEIsSUFBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUM7QUFDL0IsUUFBTSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDdkMsUUFBTSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0NBQzlDO2lCQUNjO0FBQ2IsZ0JBQWMsRUFBZCxjQUFjO0FBQ2QsbUJBQWlCLEVBQWpCLGlCQUFpQjtBQUNqQixjQUFZLEVBQVosWUFBWTtDQUNiIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Jvb3RzdHJhcFRhYmxlLCBUYWJsZUhlYWRlckNvbHVtbn0gZnJvbSAncmVhY3QtYm9vdHN0cmFwLXRhYmxlJztcblxudmFyIHByb2R1Y3RzID0gW107XG5cbmZ1bmN0aW9uIGFkZFByb2R1Y3RzKHF1YW50aXR5KSB7XG4gIHZhciBzdGFydElkID0gcHJvZHVjdHMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHF1YW50aXR5OyBpKyspIHtcbiAgICB2YXIgaWQgPSBzdGFydElkICsgaTtcbiAgICBwcm9kdWN0cy5wdXNoKHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIG5hbWU6IFwiSXRlbSBuYW1lIFwiICsgaWQsXG4gICAgICBwcmljZTogMTAwICsgaVxuICAgIH0pO1xuICB9XG59XG5cbmFkZFByb2R1Y3RzKDcwKTtcblxuZnVuY3Rpb24gb25Sb3dTZWxlY3Qocm93LCBpc1NlbGVjdGVkKXtcbiAgY29uc29sZS5sb2cocm93KTtcbiAgY29uc29sZS5sb2coXCJzZWxlY3RlZDogXCIgKyBpc1NlbGVjdGVkKVxufVxuXG5mdW5jdGlvbiBvblNlbGVjdEFsbChpc1NlbGVjdGVkKXtcbiAgY29uc29sZS5sb2coXCJpcyBzZWxlY3QgYWxsOiBcIiArIGlzU2VsZWN0ZWQpO1xufVxuXG5mdW5jdGlvbiBvbkFmdGVyU2F2ZUNlbGwocm93LCBjZWxsTmFtZSwgY2VsbFZhbHVlKXtcbiAgY29uc29sZS5sb2coXCJTYXZlIGNlbGwgJ1wiK2NlbGxOYW1lK1wiJyB3aXRoIHZhbHVlICdcIitjZWxsVmFsdWUrXCInXCIpO1xuICBjb25zb2xlLmxvZyhcIlRodyB3aG9sZSByb3cgOlwiKTtcbiAgY29uc29sZS5sb2cocm93KTtcbn1cblxuZnVuY3Rpb24gb25BZnRlclRhYmxlQ29tcGxldGUoKXtcbiAgY29uc29sZS5sb2coJ1RhYmxlIHJlbmRlciBjb21wbGV0ZS4nKTtcbn1cblxuZnVuY3Rpb24gb25BZnRlckRlbGV0ZVJvdyhyb3dLZXlzKXtcbiAgY29uc29sZS5sb2coXCJvbkFmdGVyRGVsZXRlUm93XCIpO1xuICBjb25zb2xlLmxvZyhyb3dLZXlzKTtcbn1cblxuZnVuY3Rpb24gb25BZnRlckluc2VydFJvdyhyb3cpe1xuICBjb25zb2xlLmxvZyhcIm9uQWZ0ZXJJbnNlcnRSb3dcIik7XG4gIGNvbnNvbGUubG9nKHJvdyk7XG59XG5cbnZhciBzZWxlY3RSb3dQcm9wID0ge1xuICBtb2RlOiBcImNoZWNrYm94XCIsXG4gIGNsaWNrVG9TZWxlY3Q6IHRydWUsXG4gIC8vIGhpZGVTZWxlY3RDb2x1bW46IHRydWUsIC8veW91IGNhbiBoaWRlIHNlbGVjdCBjb2x1bW4sIGlmIHlvdSBlbmFibGUgY2xpY2tUb1NlbGVjdFxuICBzZWxlY3RlZDogW10sIC8vZGVmYXVsdCBzZWxlY3Rpb24gb24gdGFibGVcbiAgYmdDb2xvcjogXCJyZ2IoMjM4LCAxOTMsIDIxMylcIixcbiAgb25TZWxlY3Q6IG9uUm93U2VsZWN0LFxuICBvblNlbGVjdEFsbDogb25TZWxlY3RBbGxcbn07XG5cbnZhciBjZWxsRWRpdFByb3AgPSB7XG4gIG1vZGU6IFwiY2xpY2tcIixcbiAgYmx1clRvU2F2ZTogdHJ1ZSxcbiAgYWZ0ZXJTYXZlQ2VsbDogb25BZnRlclNhdmVDZWxsXG59O1xuXG52YXIgb3B0aW9ucyA9IHtcbiAgLy8gcGFnZTogMyxcbiAgLy8gc2l6ZVBlclBhZ2U6IDUsXG4gIC8vIHNpemVQZXJQYWdlTGlzdDogWzUsMTAsMTUsMjBdLFxuICAvLyBwYWdpbmF0aW9uU2l6ZTogNixcbiAgc29ydE5hbWU6IFwibmFtZVwiLCAgLy9kZWZhdWx0IHNvcnQgY29sdW1uIG5hbWVcbiAgc29ydE9yZGVyOiBcImRlc2NcIiwgIC8vZGVmYXVsdCBzb3J0IG9yZGVyXG4gIGFmdGVyVGFibGVDb21wbGV0ZTogb25BZnRlclRhYmxlQ29tcGxldGUsIC8vIEEgaG9vayBmb3IgYWZ0ZXIgdGFibGUgcmVuZGVyIGNvbXBsZXRlLlxuICBhZnRlckRlbGV0ZVJvdzogb25BZnRlckRlbGV0ZVJvdywgIC8vIEEgaG9vayBmb3IgYWZ0ZXIgZHJvcGluZyByb3dzLlxuICBhZnRlckluc2VydFJvdzogb25BZnRlckluc2VydFJvdyAgIC8vIEEgaG9vayBmb3IgYWZ0ZXIgaW5zZXJ0IHJvd3Ncbn07XG5cblxuZnVuY3Rpb24gcHJpY2VGb3JtYXR0ZXIoY2VsbCwgcm93KXtcbiAgcmV0dXJuICc8aSBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tdXNkXCI+PC9pPiAnICsgY2VsbDtcbn1cblxuUmVhY3QucmVuZGVyKFxuICA8Qm9vdHN0cmFwVGFibGUgZGF0YT17cHJvZHVjdHN9IHN0cmlwZWQ9e3RydWV9IGhvdmVyPXt0cnVlfSBwYWdpbmF0aW9uPXt0cnVlfSBzZWxlY3RSb3c9e3NlbGVjdFJvd1Byb3B9IGNlbGxFZGl0PXtjZWxsRWRpdFByb3B9XG4gICAgICAgICAgICAgICAgICBpbnNlcnRSb3c9e3RydWV9IGRlbGV0ZVJvdz17dHJ1ZX0gc2VhcmNoPXt0cnVlfSBjb2x1bW5GaWx0ZXI9e3RydWV9IG9wdGlvbnM9e29wdGlvbnN9PlxuICAgICAgPFRhYmxlSGVhZGVyQ29sdW1uIGRhdGFGaWVsZD1cImlkXCIgZGF0YUFsaWduPVwiY2VudGVyXCIgZGF0YVNvcnQ9e3RydWV9IGlzS2V5PXt0cnVlfT5Qcm9kdWN0IElEPC9UYWJsZUhlYWRlckNvbHVtbj5cbiAgICAgIDxUYWJsZUhlYWRlckNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgZGF0YVNvcnQ9e3RydWV9PlByb2R1Y3QgTmFtZTwvVGFibGVIZWFkZXJDb2x1bW4+XG4gICAgICA8VGFibGVIZWFkZXJDb2x1bW4gZGF0YUZpZWxkPVwicHJpY2VcIiBkYXRhRm9ybWF0PXtwcmljZUZvcm1hdHRlcn0gZWRpdGFibGU9e2ZhbHNlfT5Qcm9kdWN0IFByaWNlPC9UYWJsZUhlYWRlckNvbHVtbj5cbiAgPC9Cb290c3RyYXBUYWJsZT4sXG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmFzaWNcIilcbik7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbkV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHxcbiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG4gICAgICBlciA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgICAgfVxuICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LicpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gZmFzdCBjYXNlc1xuICAgICAgY2FzZSAxOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2xvd2VyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKylcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXG4gICAgbGlzdGVuZXJzID0gaGFuZGxlci5zbGljZSgpO1xuICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG07XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgaWYgKHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lcilcbiAgICB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgaXNGdW5jdGlvbihsaXN0ZW5lci5saXN0ZW5lcikgP1xuICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgZWxzZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlXG4gICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gW3RoaXMuX2V2ZW50c1t0eXBlXSwgbGlzdGVuZXJdO1xuXG4gIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pICYmICF0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkKSB7XG4gICAgdmFyIG07XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhMaXN0ZW5lcnMpKSB7XG4gICAgICBtID0gdGhpcy5fbWF4TGlzdGVuZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gICAgfVxuXG4gICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCA+IG0pIHtcbiAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcignKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgJyArXG4gICAgICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAnVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUudHJhY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBpbiBJRSAxMFxuICAgICAgICBjb25zb2xlLnRyYWNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIHZhciBmaXJlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGcoKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBnKTtcblxuICAgIGlmICghZmlyZWQpIHtcbiAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgZy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICB0aGlzLm9uKHR5cGUsIGcpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWRcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbGlzdCwgcG9zaXRpb24sIGxlbmd0aCwgaTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXR1cm4gdGhpcztcblxuICBsaXN0ID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuICBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgcG9zaXRpb24gPSAtMTtcblxuICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHxcbiAgICAgIChpc0Z1bmN0aW9uKGxpc3QubGlzdGVuZXIpICYmIGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG5cbiAgfSBlbHNlIGlmIChpc09iamVjdChsaXN0KSkge1xuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tID4gMDspIHtcbiAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fFxuICAgICAgICAgIChsaXN0W2ldLmxpc3RlbmVyICYmIGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICByZXR1cm4gdGhpcztcblxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgbGlzdC5sZW5ndGggPSAwO1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGlzdC5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGtleSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgaWYgKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIGVsc2UgaWYgKHRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGtleSBpbiB0aGlzLl9ldmVudHMpIHtcbiAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXJzKSkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMSUZPIG9yZGVyXG4gICAgd2hpbGUgKGxpc3RlbmVycy5sZW5ndGgpXG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tsaXN0ZW5lcnMubGVuZ3RoIC0gMV0pO1xuICB9XG4gIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIHJldDtcbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXQgPSBbXTtcbiAgZWxzZSBpZiAoaXNGdW5jdGlvbih0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIHJldCA9IFt0aGlzLl9ldmVudHNbdHlwZV1dO1xuICBlbHNlXG4gICAgcmV0ID0gdGhpcy5fZXZlbnRzW3R5cGVdLnNsaWNlKCk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgdmFyIHJldDtcbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1t0eXBlXSlcbiAgICByZXQgPSAwO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKGVtaXR0ZXIuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gMTtcbiAgZWxzZVxuICAgIHJldCA9IGVtaXR0ZXIuX2V2ZW50c1t0eXBlXS5sZW5ndGg7XG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IHRydWU7XG4gICAgdmFyIGN1cnJlbnRRdWV1ZTtcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgdmFyIGkgPSAtMTtcbiAgICAgICAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgICAgICAgICAgY3VycmVudFF1ZXVlW2ldKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xufVxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICBxdWV1ZS5wdXNoKGZ1bik7XG4gICAgaWYgKCFkcmFpbmluZykge1xuICAgICAgICBzZXRUaW1lb3V0KGRyYWluUXVldWUsIDApO1xuICAgIH1cbn07XG5cbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG4vLyBUT0RPKHNodHlsbWFuKVxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyohXG4gIENvcHlyaWdodCAoYykgMjAxNSBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKCdzdHJpbmcnID09PSBhcmdUeXBlIHx8ICdudW1iZXInID09PSBhcmdUeXBlKSB7XG5cdFx0XHRcdGNsYXNzZXMgKz0gJyAnICsgYXJnO1xuXG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRjbGFzc2VzICs9ICcgJyArIGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblxuXHRcdFx0fSBlbHNlIGlmICgnb2JqZWN0JyA9PT0gYXJnVHlwZSkge1xuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGFyZy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzICs9ICcgJyArIGtleTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5zdWJzdHIoMSk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCl7XG5cdFx0Ly8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuXHRcdGRlZmluZShmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cblxufSgpKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3QvYWRkb25zXCIpO1xudmFyIHVwZGF0ZSA9IFJlYWN0LmFkZG9ucy51cGRhdGU7XG5cbnZhciBUb2FzdE1lc3NhZ2UgPSBSZWFjdC5jcmVhdGVGYWN0b3J5KHJlcXVpcmUoXCIuL1RvYXN0TWVzc2FnZVwiKSk7XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6IFwiVG9hc3RDb250YWluZXJcIixcblxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgIHRoaXMuX25vdGlmeSh0aGlzLnByb3BzLnRvYXN0VHlwZS5lcnJvciwgbWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSk7XG4gIH0sXG5cbiAgaW5mbzogZnVuY3Rpb24gaW5mbyhtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgdGhpcy5fbm90aWZ5KHRoaXMucHJvcHMudG9hc3RUeXBlLmluZm8sIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICB9LFxuXG4gIHN1Y2Nlc3M6IGZ1bmN0aW9uIHN1Y2Nlc3MobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgIHRoaXMuX25vdGlmeSh0aGlzLnByb3BzLnRvYXN0VHlwZS5zdWNjZXNzLCBtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKTtcbiAgfSxcblxuICB3YXJuaW5nOiBmdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpIHtcbiAgICB0aGlzLl9ub3RpZnkodGhpcy5wcm9wcy50b2FzdFR5cGUud2FybmluZywgbWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSk7XG4gIH0sXG5cbiAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciByZWZzID0gdGhpcy5yZWZzO1xuICAgIHZhciBrZXk7XG4gICAgZm9yIChrZXkgaW4gcmVmcykge1xuICAgICAgcmVmc1trZXldLmhpZGVUb2FzdChmYWxzZSk7XG4gICAgfVxuICB9LFxuXG4gIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3BzKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b2FzdFR5cGU6IHtcbiAgICAgICAgZXJyb3I6IFwiZXJyb3JcIixcbiAgICAgICAgaW5mbzogXCJpbmZvXCIsXG4gICAgICAgIHN1Y2Nlc3M6IFwic3VjY2Vzc1wiLFxuICAgICAgICB3YXJuaW5nOiBcIndhcm5pbmdcIlxuICAgICAgfSxcbiAgICAgIGlkOiBcInRvYXN0LWNvbnRhaW5lclwiLFxuICAgICAgdG9hc3RNZXNzYWdlRmFjdG9yeTogVG9hc3RNZXNzYWdlLFxuICAgICAgcHJldmVudER1cGxpY2F0ZXM6IGZhbHNlLFxuICAgICAgbmV3ZXN0T25Ub3A6IHRydWUsXG4gICAgICBvbkNsaWNrOiBub29wXG4gICAgfTtcbiAgfSxcblxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9hc3RzOiBbXSxcbiAgICAgIHRvYXN0SWQ6IDAsXG4gICAgICBwcmV2aW91c01lc3NhZ2U6IG51bGxcbiAgICB9O1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXIodGhpcy5wcm9wcywgdGhpcy5zdGF0ZSk7XG4gIH0sXG5cbiAgX25vdGlmeTogZnVuY3Rpb24gX25vdGlmeSh0eXBlLCBtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgaWYgKHByb3BzLnByZXZlbnREdXBsaWNhdGVzKSB7XG4gICAgICBpZiAoc3RhdGUucHJldmlvdXNNZXNzYWdlID09PSBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGtleSA9IHN0YXRlLnRvYXN0SWQrKztcbiAgICB2YXIgdG9hc3RJZCA9IGtleTtcbiAgICB2YXIgbmV3VG9hc3QgPSB1cGRhdGUob3B0aW9uc092ZXJyaWRlIHx8IHt9LCB7XG4gICAgICAkbWVyZ2U6IHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB0b2FzdElkOiB0b2FzdElkLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgcmVmOiBcInRvYXN0c19fXCIgKyBrZXksXG4gICAgICAgIGhhbmRsZU9uQ2xpY2s6IHRoaXMuX2hhbmRsZV90b2FzdF9vbl9jbGljayxcbiAgICAgICAgaGFuZGxlUmVtb3ZlOiB0aGlzLl9oYW5kbGVfdG9hc3RfcmVtb3ZlXG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIHRvYXN0T3BlcmF0aW9uID0ge307XG4gICAgdG9hc3RPcGVyYXRpb25bXCJcIiArIChwcm9wcy5uZXdlc3RPblRvcCA/IFwiJHVuc2hpZnRcIiA6IFwiJHB1c2hcIildID0gW25ld1RvYXN0XTtcblxuICAgIHZhciBuZXdTdGF0ZSA9IHVwZGF0ZShzdGF0ZSwge1xuICAgICAgdG9hc3RzOiB0b2FzdE9wZXJhdGlvbixcbiAgICAgIHByZXZpb3VzTWVzc2FnZTogeyAkc2V0OiBtZXNzYWdlIH1cbiAgICB9KTtcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgfSxcblxuICBfaGFuZGxlX3RvYXN0X29uX2NsaWNrOiBmdW5jdGlvbiBfaGFuZGxlX3RvYXN0X29uX2NsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9LFxuXG4gIF9oYW5kbGVfdG9hc3RfcmVtb3ZlOiBmdW5jdGlvbiBfaGFuZGxlX3RvYXN0X3JlbW92ZSh0b2FzdElkKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICBzdGF0ZS50b2FzdHNbXCJcIiArICh0aGlzLnByb3BzLm5ld2VzdE9uVG9wID8gXCJyZWR1Y2VSaWdodFwiIDogXCJyZWR1Y2VcIildKGZ1bmN0aW9uIChmb3VuZCwgdG9hc3QsIGluZGV4KSB7XG4gICAgICBpZiAoZm91bmQgfHwgdG9hc3QudG9hc3RJZCAhPT0gdG9hc3RJZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh1cGRhdGUoc3RhdGUsIHtcbiAgICAgICAgdG9hc3RzOiB7ICRzcGxpY2U6IFtbaW5kZXgsIDFdXSB9XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCBmYWxzZSk7XG4gIH0sXG5cbiAgX3JlbmRlcjogZnVuY3Rpb24gX3JlbmRlcihwcm9wcywgc3RhdGUpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIFwiZGl2XCIsXG4gICAgICBfZXh0ZW5kcyh7fSwgcHJvcHMsIHsgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIiwgcm9sZTogXCJhbGVydFwiIH0pLFxuICAgICAgc3RhdGUudG9hc3RzLm1hcChmdW5jdGlvbiAodG9hc3QpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzLnRvYXN0TWVzc2FnZUZhY3RvcnkodG9hc3QpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIENTU0NvcmUgPSByZXF1aXJlKFwicmVhY3QvbGliL0NTU0NvcmVcIik7XG52YXIgUmVhY3RUcmFuc2l0aW9uRXZlbnRzID0gcmVxdWlyZShcInJlYWN0L2xpYi9SZWFjdFRyYW5zaXRpb25FdmVudHNcIik7XG52YXIgVElDSyA9IDE3O1xudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3BzKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2l0aW9uOiBudWxsLCAvL3NvbWUgZXhhbXBsZXMgZGVmaW5lZCBpbiBpbmRleC5zY3NzIChzY2FsZSwgZmFkZUluT3V0LCByb3RhdGUpXG4gICAgICBzaG93QW5pbWF0aW9uOiBcImFuaW1hdGVkIGJvdW5jZUluXCIsIC8vb3Igb3RoZXIgYW5pbWF0aW9ucyBmcm9tIGFuaW1hdGUuY3NzXG4gICAgICBoaWRlQW5pbWF0aW9uOiBcImFuaW1hdGVkIGJvdW5jZU91dFwiLFxuICAgICAgdGltZU91dDogNTAwMCxcbiAgICAgIGV4dGVuZGVkVGltZU91dDogMTAwMFxuICAgIH07XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgdGhpcy5jbGFzc05hbWVRdWV1ZSA9IFtdO1xuICAgIHRoaXMuaXNIaWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmludGVydmFsSWQgPSBudWxsO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIHRoaXMuX3Nob3cocHJvcHMpO1xuXG4gICAgdmFyIG9uSGlkZUNvbXBsZXRlID0gZnVuY3Rpb24gb25IaWRlQ29tcGxldGUoKSB7XG4gICAgICBpZiAoX3RoaXMuaXNIaWRpbmcpIHtcbiAgICAgICAgX3RoaXMuX3NldF9pc19oaWRpbmcoZmFsc2UpO1xuICAgICAgICBSZWFjdFRyYW5zaXRpb25FdmVudHMucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBvbkhpZGVDb21wbGV0ZSk7XG4gICAgICAgIF90aGlzLl9oYW5kbGVfcmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBub2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgUmVhY3RUcmFuc2l0aW9uRXZlbnRzLmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgb25IaWRlQ29tcGxldGUpO1xuXG4gICAgaWYgKDAgPCBwcm9wcy50aW1lT3V0KSB7XG4gICAgICB0aGlzLl9zZXRfaW50ZXJ2YWxfaWQoc2V0VGltZW91dCh0aGlzLmhpZGVUb2FzdCwgcHJvcHMudGltZU91dCkpO1xuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50V2lsbFVubW91bnQ6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmludGVydmFsSWQpO1xuICAgIH1cbiAgfSxcbiAgX3NldF90cmFuc2l0aW9uOiBmdW5jdGlvbiBfc2V0X3RyYW5zaXRpb24oaGlkZSkge1xuICAgIHZhciBhbmltYXRpb25UeXBlID0gaGlkZSA/IFwibGVhdmVcIiA6IFwiZW50ZXJcIjtcbiAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLnByb3BzLnRyYW5zaXRpb24gKyBcIi1cIiArIGFuaW1hdGlvblR5cGU7XG4gICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiO1xuXG4gICAgdmFyIGVuZExpc3RlbmVyID0gZnVuY3Rpb24gZW5kTGlzdGVuZXIoZSkge1xuICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IG5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBDU1NDb3JlLnJlbW92ZUNsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgICBDU1NDb3JlLnJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG5cbiAgICAgIFJlYWN0VHJhbnNpdGlvbkV2ZW50cy5yZW1vdmVFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTtcbiAgICB9O1xuXG4gICAgUmVhY3RUcmFuc2l0aW9uRXZlbnRzLmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIpO1xuXG4gICAgQ1NTQ29yZS5hZGRDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuXG4gICAgLy8gTmVlZCB0byBkbyB0aGlzIHRvIGFjdHVhbGx5IHRyaWdnZXIgYSB0cmFuc2l0aW9uLlxuICAgIHRoaXMuX3F1ZXVlX2NsYXNzKGFjdGl2ZUNsYXNzTmFtZSk7XG4gIH0sXG5cbiAgX2NsZWFyX3RyYW5zaXRpb246IGZ1bmN0aW9uIF9jbGVhcl90cmFuc2l0aW9uKGhpZGUpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIHZhciBhbmltYXRpb25UeXBlID0gaGlkZSA/IFwibGVhdmVcIiA6IFwiZW50ZXJcIjtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy50cmFuc2l0aW9uICsgXCItXCIgKyBhbmltYXRpb25UeXBlO1xuICAgIHZhciBhY3RpdmVDbGFzc05hbWUgPSBjbGFzc05hbWUgKyBcIi1hY3RpdmVcIjtcblxuICAgIENTU0NvcmUucmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcbiAgICBDU1NDb3JlLnJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG4gIH0sXG5cbiAgX3NldF9hbmltYXRpb246IGZ1bmN0aW9uIF9zZXRfYW5pbWF0aW9uKGhpZGUpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIHZhciBhbmltYXRpb25zID0gdGhpcy5fZ2V0X2FuaW1hdGlvbl9jbGFzc2VzKGhpZGUpO1xuICAgIHZhciBlbmRMaXN0ZW5lciA9IGZ1bmN0aW9uIGVuZExpc3RlbmVyKGUpIHtcbiAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmltKSB7XG4gICAgICAgIENTU0NvcmUucmVtb3ZlQ2xhc3Mobm9kZSwgYW5pbSk7XG4gICAgICB9KTtcblxuICAgICAgUmVhY3RUcmFuc2l0aW9uRXZlbnRzLnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIpO1xuICAgIH07XG5cbiAgICBSZWFjdFRyYW5zaXRpb25FdmVudHMuYWRkRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG5cbiAgICBhbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGFuaW0pIHtcbiAgICAgIENTU0NvcmUuYWRkQ2xhc3Mobm9kZSwgYW5pbSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgX2dldF9hbmltYXRpb25fY2xhc3NlczogZnVuY3Rpb24gX2dldF9hbmltYXRpb25fY2xhc3NlcyhoaWRlKSB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIHZhciBhbmltYXRpb25zID0gaGlkZSA/IHByb3BzLmhpZGVBbmltYXRpb24gOiBwcm9wcy5zaG93QW5pbWF0aW9uO1xuICAgIGlmIChcIltvYmplY3QgQXJyYXldXCIgPT09IHRvU3RyaW5nLmNhbGwoYW5pbWF0aW9ucykpIHtcbiAgICAgIHJldHVybiBhbmltYXRpb25zO1xuICAgIH0gZWxzZSBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGFuaW1hdGlvbnMpIHtcbiAgICAgIHJldHVybiBhbmltYXRpb25zLnNwbGl0KFwiIFwiKTtcbiAgICB9XG4gIH0sXG5cbiAgX2NsZWFyX2FuaW1hdGlvbjogZnVuY3Rpb24gX2NsZWFyX2FuaW1hdGlvbihoaWRlKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgYW5pbWF0aW9ucyA9IHRoaXMuX2dldF9hbmltYXRpb25fY2xhc3NlcyhoaWRlKTtcbiAgICBhbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKGFuaW1hdGlvbikge1xuICAgICAgQ1NTQ29yZS5yZW1vdmVDbGFzcyhfdGhpczIuZ2V0RE9NTm9kZSgpLCBhbmltYXRpb24pO1xuICAgIH0pO1xuICB9LFxuXG4gIF9xdWV1ZV9jbGFzczogZnVuY3Rpb24gX3F1ZXVlX2NsYXNzKGNsYXNzTmFtZSkge1xuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUucHVzaChjbGFzc05hbWUpO1xuXG4gICAgaWYgKCF0aGlzLnRpbWVvdXQpIHtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZSwgVElDSyk7XG4gICAgfVxuICB9LFxuXG4gIF9mbHVzaF9jbGFzc19uYW1lX3F1ZXVlOiBmdW5jdGlvbiBfZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZSgpIHtcbiAgICBpZiAodGhpcy5pc01vdW50ZWQoKSkge1xuICAgICAgdGhpcy5jbGFzc05hbWVRdWV1ZS5mb3JFYWNoKENTU0NvcmUuYWRkQ2xhc3MuYmluZChDU1NDb3JlLCB0aGlzLmdldERPTU5vZGUoKSkpO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzTmFtZVF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgfSxcblxuICBfc2hvdzogZnVuY3Rpb24gX3Nob3coKSB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChwcm9wcy50cmFuc2l0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfdHJhbnNpdGlvbigpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuc2hvd0FuaW1hdGlvbikge1xuICAgICAgdGhpcy5fc2V0X2FuaW1hdGlvbigpO1xuICAgIH1cbiAgfSxcblxuICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmludGVydmFsSWQpO1xuICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChudWxsKTtcbiAgICBpZiAodGhpcy5pc0hpZGluZykge1xuICAgICAgdGhpcy5fc2V0X2lzX2hpZGluZyhmYWxzZSk7XG5cbiAgICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGlmIChwcm9wcy5oaWRlQW5pbWF0aW9uKSB7XG4gICAgICAgIHRoaXMuX2NsZWFyX2FuaW1hdGlvbih0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcHMudHJhbnNpdGlvbikge1xuICAgICAgICB0aGlzLl9jbGVhcl90cmFuc2l0aW9uKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBoYW5kbGVNb3VzZUxlYXZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKCkge1xuICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoIXRoaXMuaXNIaWRpbmcgJiYgKDAgPCBwcm9wcy50aW1lT3V0IHx8IDAgPCBwcm9wcy5leHRlbmRlZFRpbWVPdXQpKSB7XG4gICAgICB0aGlzLl9zZXRfaW50ZXJ2YWxfaWQoc2V0VGltZW91dCh0aGlzLmhpZGVUb2FzdCwgcHJvcHMuZXh0ZW5kZWRUaW1lT3V0KSk7XG4gICAgfVxuICB9LFxuXG4gIGhpZGVUb2FzdDogZnVuY3Rpb24gaGlkZVRvYXN0KG92ZXJyaWRlKSB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIGlmICh0aGlzLmlzSGlkaW5nIHx8IG51bGwgPT0gdGhpcy5pbnRlcnZhbElkICYmICFvdmVycmlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NldF9pc19oaWRpbmcodHJ1ZSk7XG4gICAgaWYgKHByb3BzLnRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuX3NldF90cmFuc2l0aW9uKHRydWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaGlkZUFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fc2V0X2FuaW1hdGlvbih0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGFuZGxlX3JlbW92ZSgpO1xuICAgIH1cbiAgfSxcblxuICBfc2V0X2ludGVydmFsX2lkOiBmdW5jdGlvbiBfc2V0X2ludGVydmFsX2lkKGludGVydmFsSWQpIHtcbiAgICB0aGlzLmludGVydmFsSWQgPSBpbnRlcnZhbElkO1xuICB9LFxuXG4gIF9zZXRfaXNfaGlkaW5nOiBmdW5jdGlvbiBfc2V0X2lzX2hpZGluZyhpc0hpZGluZykge1xuICAgIHRoaXMuaXNIaWRpbmcgPSBpc0hpZGluZztcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdC9hZGRvbnNcIik7XG52YXIgdXBkYXRlID0gUmVhY3QuYWRkb25zLnVwZGF0ZTtcblxudmFyIGN4ID0gcmVxdWlyZShcImNsYXNzbmFtZXNcIik7XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG52YXIgVG9hc3RNZXNzYWdlU3BlYyA9IHtcbiAgZGlzcGxheU5hbWU6IFwiVG9hc3RNZXNzYWdlXCIsXG5cbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbiBnZXREZWZhdWx0UHJvcHMoKSB7XG4gICAgdmFyIGljb25DbGFzc05hbWVzID0ge1xuICAgICAgZXJyb3I6IFwidG9hc3QtZXJyb3JcIixcbiAgICAgIGluZm86IFwidG9hc3QtaW5mb1wiLFxuICAgICAgc3VjY2VzczogXCJ0b2FzdC1zdWNjZXNzXCIsXG4gICAgICB3YXJuaW5nOiBcInRvYXN0LXdhcm5pbmdcIlxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xhc3NOYW1lOiBcInRvYXN0XCIsXG4gICAgICBpY29uQ2xhc3NOYW1lczogaWNvbkNsYXNzTmFtZXMsXG4gICAgICB0aXRsZUNsYXNzTmFtZTogXCJ0b2FzdC10aXRsZVwiLFxuICAgICAgbWVzc2FnZUNsYXNzTmFtZTogXCJ0b2FzdC1tZXNzYWdlXCIsXG4gICAgICB0YXBUb0Rpc21pc3M6IHRydWUsXG4gICAgICBjbG9zZUJ1dHRvbjogZmFsc2VcbiAgICB9O1xuICB9LFxuXG4gIGhhbmRsZU9uQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZU9uQ2xpY2soZXZlbnQpIHtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgcHJvcHMuaGFuZGxlT25DbGljayhldmVudCk7XG4gICAgaWYgKHByb3BzLnRhcFRvRGlzbWlzcykge1xuICAgICAgdGhpcy5oaWRlVG9hc3QodHJ1ZSk7XG4gICAgfVxuICB9LFxuXG4gIF9oYW5kbGVfY2xvc2VfYnV0dG9uX2NsaWNrOiBmdW5jdGlvbiBfaGFuZGxlX2Nsb3NlX2J1dHRvbl9jbGljayhldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaGlkZVRvYXN0KHRydWUpO1xuICB9LFxuXG4gIF9oYW5kbGVfcmVtb3ZlOiBmdW5jdGlvbiBfaGFuZGxlX3JlbW92ZSgpIHtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgcHJvcHMuaGFuZGxlUmVtb3ZlKHByb3BzLnRvYXN0SWQpO1xuICB9LFxuXG4gIF9yZW5kZXJfY2xvc2VfYnV0dG9uOiBmdW5jdGlvbiBfcmVuZGVyX2Nsb3NlX2J1dHRvbihwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy5jbG9zZUJ1dHRvbiA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwidG9hc3QtY2xvc2UtYnV0dG9uXCIsIHJvbGU6IFwiYnV0dG9uXCIsXG4gICAgICBvbkNsaWNrOiB0aGlzLl9oYW5kbGVfY2xvc2VfYnV0dG9uX2NsaWNrLFxuICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBcIiZ0aW1lcztcIiB9XG4gICAgfSkgOiBmYWxzZTtcbiAgfSxcblxuICBfcmVuZGVyX3RpdGxlX2VsZW1lbnQ6IGZ1bmN0aW9uIF9yZW5kZXJfdGl0bGVfZWxlbWVudChwcm9wcykge1xuICAgIHJldHVybiBwcm9wcy50aXRsZSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBjbGFzc05hbWU6IHByb3BzLnRpdGxlQ2xhc3NOYW1lIH0sXG4gICAgICBwcm9wcy50aXRsZVxuICAgICkgOiBmYWxzZTtcbiAgfSxcblxuICBfcmVuZGVyX21lc3NhZ2VfZWxlbWVudDogZnVuY3Rpb24gX3JlbmRlcl9tZXNzYWdlX2VsZW1lbnQocHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHMubWVzc2FnZSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBjbGFzc05hbWU6IHByb3BzLm1lc3NhZ2VDbGFzc05hbWUgfSxcbiAgICAgIHByb3BzLm1lc3NhZ2VcbiAgICApIDogZmFsc2U7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIHZhciBpY29uQ2xhc3NOYW1lID0gcHJvcHMuaWNvbkNsYXNzTmFtZSB8fCBwcm9wcy5pY29uQ2xhc3NOYW1lc1twcm9wcy50eXBlXTtcblxuICAgIHZhciB0b2FzdENsYXNzID0ge307XG4gICAgdG9hc3RDbGFzc1twcm9wcy5jbGFzc05hbWVdID0gdHJ1ZTtcbiAgICB0b2FzdENsYXNzW2ljb25DbGFzc05hbWVdID0gdHJ1ZTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgY2xhc3NOYW1lOiBjeCh0b2FzdENsYXNzKSwgc3R5bGU6IHByb3BzLnN0eWxlIHx8IHt9LFxuICAgICAgICBvbkNsaWNrOiB0aGlzLmhhbmRsZU9uQ2xpY2ssXG4gICAgICAgIG9uTW91c2VFbnRlcjogdGhpcy5oYW5kbGVNb3VzZUVudGVyLFxuICAgICAgICBvbk1vdXNlTGVhdmU6IHRoaXMuaGFuZGxlTW91c2VMZWF2ZSB9LFxuICAgICAgdGhpcy5fcmVuZGVyX2Nsb3NlX2J1dHRvbihwcm9wcyksXG4gICAgICB0aGlzLl9yZW5kZXJfdGl0bGVfZWxlbWVudChwcm9wcyksXG4gICAgICB0aGlzLl9yZW5kZXJfbWVzc2FnZV9lbGVtZW50KHByb3BzKVxuICAgICk7XG4gIH1cbn07XG5cbnZhciBhbmltYXRpb24gPSBSZWFjdC5jcmVhdGVDbGFzcyh1cGRhdGUoVG9hc3RNZXNzYWdlU3BlYywge1xuICBkaXNwbGF5TmFtZTogeyAkc2V0OiBcIlRvYXN0TWVzc2FnZS5hbmltYXRpb25cIiB9LFxuICBtaXhpbnM6IHsgJHNldDogW3JlcXVpcmUoXCIuL2FuaW1hdGlvbk1peGluXCIpXSB9XG59KSk7XG5cbnZhciBqUXVlcnkgPSBSZWFjdC5jcmVhdGVDbGFzcyh1cGRhdGUoVG9hc3RNZXNzYWdlU3BlYywge1xuICBkaXNwbGF5TmFtZTogeyAkc2V0OiBcIlRvYXN0TWVzc2FnZS5qUXVlcnlcIiB9LFxuICBtaXhpbnM6IHsgJHNldDogW3JlcXVpcmUoXCIuL2pRdWVyeU1peGluXCIpXSB9XG59KSk7XG5cbi8qXG4gKiBhc3NpZ24gZGVmYXVsdCBub29wIGZ1bmN0aW9uc1xuICovXG5Ub2FzdE1lc3NhZ2VTcGVjLmhhbmRsZU1vdXNlRW50ZXIgPSBub29wO1xuVG9hc3RNZXNzYWdlU3BlYy5oYW5kbGVNb3VzZUxlYXZlID0gbm9vcDtcblRvYXN0TWVzc2FnZVNwZWMuaGlkZVRvYXN0ID0gbm9vcDtcblxudmFyIFRvYXN0TWVzc2FnZSA9IG1vZHVsZS5leHBvcnRzID0gUmVhY3QuY3JlYXRlQ2xhc3MoVG9hc3RNZXNzYWdlU3BlYyk7XG5Ub2FzdE1lc3NhZ2UuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuVG9hc3RNZXNzYWdlLmpRdWVyeSA9IGpRdWVyeTsiLCJcInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIGNhbGxfc2hvd19tZXRob2QoJG5vZGUsIHByb3BzKSB7XG4gICRub2RlW3Byb3BzLnNob3dNZXRob2RdKHtcbiAgICBkdXJhdGlvbjogcHJvcHMuc2hvd0R1cmF0aW9uLFxuICAgIGVhc2luZzogcHJvcHMuc2hvd0Vhc2luZ1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3BzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdHlsZToge1xuICAgICAgICBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgLy8gZWZmZWN0aXZlICQuaGlkZSgpXG4gICAgICBzaG93TWV0aG9kOiBcImZhZGVJblwiLCAvLywgc2xpZGVEb3duLCBhbmQgc2hvdyBhcmUgYnVpbHQgaW50byBqUXVlcnlcbiAgICAgIHNob3dEdXJhdGlvbjogMzAwLFxuICAgICAgc2hvd0Vhc2luZzogXCJzd2luZ1wiLCAvLyBhbmQgbGluZWFyIGFyZSBidWlsdCBpbnRvIGpRdWVyeVxuICAgICAgaGlkZU1ldGhvZDogXCJmYWRlT3V0XCIsXG4gICAgICBoaWRlRHVyYXRpb246IDEwMDAsXG4gICAgICBoaWRlRWFzaW5nOiBcInN3aW5nXCIsXG4gICAgICAvL1xuICAgICAgdGltZU91dDogNTAwMCxcbiAgICAgIGV4dGVuZGVkVGltZU91dDogMTAwMFxuICAgIH07XG4gIH0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGludGVydmFsSWQ6IG51bGwsXG4gICAgICBpc0hpZGluZzogZmFsc2VcbiAgICB9O1xuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgY2FsbF9zaG93X21ldGhvZCh0aGlzLl9nZXRfJF9ub2RlKCksIHByb3BzKTtcbiAgICBpZiAoMCA8IHByb3BzLnRpbWVPdXQpIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCBwcm9wcy50aW1lT3V0KSk7XG4gICAgfVxuICB9LFxuXG4gIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUuaW50ZXJ2YWxJZCk7XG4gICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKG51bGwpO1xuICAgIHRoaXMuX3NldF9pc19oaWRpbmcoZmFsc2UpO1xuXG4gICAgY2FsbF9zaG93X21ldGhvZCh0aGlzLl9nZXRfJF9ub2RlKCkuc3RvcCh0cnVlLCB0cnVlKSwgdGhpcy5wcm9wcyk7XG4gIH0sXG5cbiAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSGlkaW5nICYmICgwIDwgcHJvcHMudGltZU91dCB8fCAwIDwgcHJvcHMuZXh0ZW5kZWRUaW1lT3V0KSkge1xuICAgICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKHNldFRpbWVvdXQodGhpcy5oaWRlVG9hc3QsIHByb3BzLmV4dGVuZGVkVGltZU91dCkpO1xuICAgIH1cbiAgfSxcblxuICBoaWRlVG9hc3Q6IGZ1bmN0aW9uIGhpZGVUb2FzdChvdmVycmlkZSkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChzdGF0ZS5pc0hpZGluZyB8fCBudWxsID09IHN0YXRlLmludGVydmFsSWQgJiYgIW92ZXJyaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0hpZGluZzogdHJ1ZSB9KTtcblxuICAgIHRoaXMuX2dldF8kX25vZGUoKVtwcm9wcy5oaWRlTWV0aG9kXSh7XG4gICAgICBkdXJhdGlvbjogcHJvcHMuaGlkZUR1cmF0aW9uLFxuICAgICAgZWFzaW5nOiBwcm9wcy5oaWRlRWFzaW5nLFxuICAgICAgY29tcGxldGU6IHRoaXMuX2hhbmRsZV9yZW1vdmVcbiAgICB9KTtcbiAgfSxcblxuICBfZ2V0XyRfbm9kZTogZnVuY3Rpb24gX2dldF8kX25vZGUoKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbiAgICByZXR1cm4galF1ZXJ5KHRoaXMuZ2V0RE9NTm9kZSgpKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVuZGVmICovXG4gIH0sXG5cbiAgX3NldF9pbnRlcnZhbF9pZDogZnVuY3Rpb24gX3NldF9pbnRlcnZhbF9pZChpbnRlcnZhbElkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpbnRlcnZhbElkOiBpbnRlcnZhbElkXG4gICAgfSk7XG4gIH0sXG5cbiAgX3NldF9pc19oaWRpbmc6IGZ1bmN0aW9uIF9zZXRfaXNfaGlkaW5nKGlzSGlkaW5nKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0hpZGluZzogaXNIaWRpbmdcbiAgICB9KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuVG9hc3RDb250YWluZXIgPSByZXF1aXJlKFwiLi9Ub2FzdENvbnRhaW5lclwiKTtcbmV4cG9ydHMuVG9hc3RNZXNzYWdlID0gcmVxdWlyZShcIi4vVG9hc3RNZXNzYWdlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvUmVhY3RXaXRoQWRkb25zJyk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQXV0b0ZvY3VzTWl4aW5cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9jdXNOb2RlID0gcmVxdWlyZShcIi4vZm9jdXNOb2RlXCIpO1xuXG52YXIgQXV0b0ZvY3VzTWl4aW4gPSB7XG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5hdXRvRm9jdXMpIHtcbiAgICAgIGZvY3VzTm9kZSh0aGlzLmdldERPTU5vZGUoKSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9Gb2N1c01peGluO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1IEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQmVmb3JlSW5wdXRFdmVudFBsdWdpblxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKFwiLi9FdmVudFByb3BhZ2F0b3JzXCIpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG52YXIgRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlID0gcmVxdWlyZShcIi4vRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlXCIpO1xudmFyIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50XCIpO1xudmFyIFN5bnRoZXRpY0lucHV0RXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNJbnB1dEV2ZW50XCIpO1xuXG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcblxudmFyIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXTsgLy8gVGFiLCBSZXR1cm4sIEVzYywgU3BhY2VcbnZhciBTVEFSVF9LRVlDT0RFID0gMjI5O1xuXG52YXIgY2FuVXNlQ29tcG9zaXRpb25FdmVudCA9IChcbiAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmXG4gICdDb21wb3NpdGlvbkV2ZW50JyBpbiB3aW5kb3dcbik7XG5cbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkge1xuICBkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbi8vIFdlYmtpdCBvZmZlcnMgYSB2ZXJ5IHVzZWZ1bCBgdGV4dElucHV0YCBldmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4vLyBkaXJlY3RseSByZXByZXNlbnQgYGJlZm9yZUlucHV0YC4gVGhlIElFIGB0ZXh0aW5wdXRgIGV2ZW50IGlzIG5vdCBhc1xuLy8gdXNlZnVsLCBzbyB3ZSBkb24ndCB1c2UgaXQuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSAoXG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJlxuICAnVGV4dEV2ZW50JyBpbiB3aW5kb3cgJiZcbiAgIWRvY3VtZW50TW9kZSAmJlxuICAhaXNQcmVzdG8oKVxuKTtcblxuLy8gSW4gSUU5Kywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcG9zaXRpb24gZXZlbnRzLCBidXQgdGhlIGRhdGEgc3VwcGxpZWRcbi8vIGJ5IHRoZSBuYXRpdmUgY29tcG9zaXRpb25lbmQgZXZlbnQgbWF5IGJlIGluY29ycmVjdC4gSmFwYW5lc2UgaWRlb2dyYXBoaWNcbi8vIHNwYWNlcywgZm9yIGluc3RhbmNlIChcXHUzMDAwKSBhcmUgbm90IHJlY29yZGVkIGNvcnJlY3RseS5cbnZhciB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9IChcbiAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmXG4gIChcbiAgICAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgfHwgZG9jdW1lbnRNb2RlICYmIGRvY3VtZW50TW9kZSA+IDggJiYgZG9jdW1lbnRNb2RlIDw9IDExKVxuICApXG4pO1xuXG4vKipcbiAqIE9wZXJhIDw9IDEyIGluY2x1ZGVzIFRleHRFdmVudCBpbiB3aW5kb3csIGJ1dCBkb2VzIG5vdCBmaXJlXG4gKiB0ZXh0IGlucHV0IGV2ZW50cy4gUmVseSBvbiBrZXlwcmVzcyBpbnN0ZWFkLlxuICovXG5mdW5jdGlvbiBpc1ByZXN0bygpIHtcbiAgdmFyIG9wZXJhID0gd2luZG93Lm9wZXJhO1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBvcGVyYSA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb3BlcmEudmVyc2lvbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHBhcnNlSW50KG9wZXJhLnZlcnNpb24oKSwgMTApIDw9IDEyXG4gICk7XG59XG5cbnZhciBTUEFDRUJBUl9DT0RFID0gMzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSk7XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxuLy8gRXZlbnRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHByb3BlcnR5IG5hbWVzLlxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIGJlZm9yZUlucHV0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkJlZm9yZUlucHV0OiBudWxsfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQmVmb3JlSW5wdXRDYXB0dXJlOiBudWxsfSlcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvbkVuZCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3MsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcFRleHRJbnB1dCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wUGFzdGVcbiAgICBdXG4gIH0sXG4gIGNvbXBvc2l0aW9uRW5kOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNvbXBvc2l0aW9uRW5kOiBudWxsfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ29tcG9zaXRpb25FbmRDYXB0dXJlOiBudWxsfSlcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BCbHVyLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvbkVuZCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5RG93bixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3MsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVVwLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd25cbiAgICBdXG4gIH0sXG4gIGNvbXBvc2l0aW9uU3RhcnQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ29tcG9zaXRpb25TdGFydDogbnVsbH0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNvbXBvc2l0aW9uU3RhcnRDYXB0dXJlOiBudWxsfSlcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BCbHVyLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvblN0YXJ0LFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzcyxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5VXAsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlRG93blxuICAgIF1cbiAgfSxcbiAgY29tcG9zaXRpb25VcGRhdGU6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ29tcG9zaXRpb25VcGRhdGU6IG51bGx9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Db21wb3NpdGlvblVwZGF0ZUNhcHR1cmU6IG51bGx9KVxuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEJsdXIsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uVXBkYXRlLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzcyxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5VXAsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlRG93blxuICAgIF1cbiAgfVxufTtcblxuLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0aGUgc3BhY2Uga2V5LlxudmFyIGhhc1NwYWNlS2V5cHJlc3MgPSBmYWxzZTtcblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhIG5hdGl2ZSBrZXlwcmVzcyBldmVudCBpcyBhc3N1bWVkIHRvIGJlIGEgY29tbWFuZC5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBGaXJlZm94IGZpcmVzIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBrZXkgY29tbWFuZHNcbiAqIChjdXQsIGNvcHksIHNlbGVjdC1hbGwsIGV0Yy4pIGV2ZW4gdGhvdWdoIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIChcbiAgICAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiZcbiAgICAvLyBjdHJsS2V5ICYmIGFsdEtleSBpcyBlcXVpdmFsZW50IHRvIEFsdEdyLCBhbmQgaXMgbm90IGEgY29tbWFuZC5cbiAgICAhKG5hdGl2ZUV2ZW50LmN0cmxLZXkgJiYgbmF0aXZlRXZlbnQuYWx0S2V5KVxuICApO1xufVxuXG5cbi8qKlxuICogVHJhbnNsYXRlIG5hdGl2ZSB0b3AgbGV2ZWwgZXZlbnRzIGludG8gZXZlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZSh0b3BMZXZlbFR5cGUpIHtcbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25TdGFydDpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uU3RhcnQ7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uRW5kOlxuICAgICAgcmV0dXJuIGV2ZW50VHlwZXMuY29tcG9zaXRpb25FbmQ7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uVXBkYXRlOlxuICAgICAgcmV0dXJuIGV2ZW50VHlwZXMuY29tcG9zaXRpb25VcGRhdGU7XG4gIH1cbn1cblxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBiZXN0LWd1ZXNzIG1vZGVsIHRoaW5rIHRoaXMgZXZlbnQgc2lnbmlmaWVzIHRoYXRcbiAqIGNvbXBvc2l0aW9uIGhhcyBiZWd1bj9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIChcbiAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wS2V5RG93biAmJlxuICAgIG5hdGl2ZUV2ZW50LmtleUNvZGUgPT09IFNUQVJUX0tFWUNPREVcbiAgKTtcbn1cblxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5VXA6XG4gICAgICAvLyBDb21tYW5kIGtleXMgaW5zZXJ0IG9yIGNsZWFyIElNRSBpbnB1dC5cbiAgICAgIHJldHVybiAoRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSkgIT09IC0xKTtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5RG93bjpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIChuYXRpdmVFdmVudC5rZXlDb2RlICE9PSBTVEFSVF9LRVlDT0RFKTtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3M6XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlRG93bjpcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQmx1cjpcbiAgICAgIC8vIEV2ZW50cyBhcmUgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FuY2VsbGluZyBJTUUuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogR29vZ2xlIElucHV0IFRvb2xzIHByb3ZpZGVzIGNvbXBvc2l0aW9uIGRhdGEgdmlhIGEgQ3VzdG9tRXZlbnQsXG4gKiB3aXRoIHRoZSBgZGF0YWAgcHJvcGVydHkgcG9wdWxhdGVkIGluIHRoZSBgZGV0YWlsYCBvYmplY3QuIElmIHRoaXNcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgZXZlbnQgb2JqZWN0LCB1c2UgaXQuIElmIG5vdCwgdGhpcyBpcyBhIHBsYWluXG4gKiBjb21wb3NpdGlvbiBldmVudCBhbmQgd2UgaGF2ZSBub3RoaW5nIHNwZWNpYWwgdG8gZXh0cmFjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRldGFpbCA9IG5hdGl2ZUV2ZW50LmRldGFpbDtcbiAgaWYgKHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBkZXRhaWwpIHtcbiAgICByZXR1cm4gZGV0YWlsLmRhdGE7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIFRyYWNrIHRoZSBjdXJyZW50IElNRSBjb21wb3NpdGlvbiBmYWxsYmFjayBvYmplY3QsIGlmIGFueS5cbnZhciBjdXJyZW50Q29tcG9zaXRpb24gPSBudWxsO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KFxuICB0b3BMZXZlbFR5cGUsXG4gIHRvcExldmVsVGFyZ2V0LFxuICB0b3BMZXZlbFRhcmdldElELFxuICBuYXRpdmVFdmVudFxuKSB7XG4gIHZhciBldmVudFR5cGU7XG4gIHZhciBmYWxsYmFja0RhdGE7XG5cbiAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICBldmVudFR5cGUgPSBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZSh0b3BMZXZlbFR5cGUpO1xuICB9IGVsc2UgaWYgKCFjdXJyZW50Q29tcG9zaXRpb24pIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9IGV2ZW50VHlwZXMuY29tcG9zaXRpb25TdGFydDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgZXZlbnRUeXBlID0gZXZlbnRUeXBlcy5jb21wb3NpdGlvbkVuZDtcbiAgfVxuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEpIHtcbiAgICAvLyBUaGUgY3VycmVudCBjb21wb3NpdGlvbiBpcyBzdG9yZWQgc3RhdGljYWxseSBhbmQgbXVzdCBub3QgYmVcbiAgICAvLyBvdmVyd3JpdHRlbiB3aGlsZSBjb21wb3NpdGlvbiBjb250aW51ZXMuXG4gICAgaWYgKCFjdXJyZW50Q29tcG9zaXRpb24gJiYgZXZlbnRUeXBlID09PSBldmVudFR5cGVzLmNvbXBvc2l0aW9uU3RhcnQpIHtcbiAgICAgIGN1cnJlbnRDb21wb3NpdGlvbiA9IEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5nZXRQb29sZWQodG9wTGV2ZWxUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kKSB7XG4gICAgICBpZiAoY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGN1cnJlbnRDb21wb3NpdGlvbi5nZXREYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5nZXRQb29sZWQoXG4gICAgZXZlbnRUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgbmF0aXZlRXZlbnRcbiAgKTtcblxuICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgLy8gSW5qZWN0IGRhdGEgZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2sgcGF0aCBpbnRvIHRoZSBzeW50aGV0aWMgZXZlbnQuXG4gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBwcm9wZXJ0eSBvZiBuYXRpdmUgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZS5cbiAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXN0b21EYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG4gICAgaWYgKGN1c3RvbURhdGEgIT09IG51bGwpIHtcbiAgICAgIGV2ZW50LmRhdGEgPSBjdXN0b21EYXRhO1xuICAgIH1cbiAgfVxuXG4gIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBUaGUgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBgYmVmb3JlSW5wdXRgIGV2ZW50LlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25FbmQ6XG4gICAgICByZXR1cm4gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzOlxuICAgICAgLyoqXG4gICAgICAgKiBJZiBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRzIGFyZSBhdmFpbGFibGUsIG91ciBnb2FsIGlzIHRvIG1ha2VcbiAgICAgICAqIHVzZSBvZiB0aGVtLiBIb3dldmVyLCB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZTogdGhlIHNwYWNlYmFyIGtleS5cbiAgICAgICAqIEluIFdlYmtpdCwgcHJldmVudGluZyBkZWZhdWx0IG9uIGEgc3BhY2ViYXIgYHRleHRJbnB1dGAgZXZlbnRcbiAgICAgICAqIGNhbmNlbHMgY2hhcmFjdGVyIGluc2VydGlvbiwgYnV0IGl0ICphbHNvKiBjYXVzZXMgdGhlIGJyb3dzZXJcbiAgICAgICAqIHRvIGZhbGwgYmFjayB0byBpdHMgZGVmYXVsdCBzcGFjZWJhciBiZWhhdmlvciBvZiBzY3JvbGxpbmcgdGhlXG4gICAgICAgKiBwYWdlLlxuICAgICAgICpcbiAgICAgICAqIFRyYWNraW5nIGF0OlxuICAgICAgICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM1NTEwM1xuICAgICAgICpcbiAgICAgICAqIFRvIGF2b2lkIHRoaXMgaXNzdWUsIHVzZSB0aGUga2V5cHJlc3MgZXZlbnQgYXMgaWYgbm8gYHRleHRJbnB1dGBcbiAgICAgICAqIGV2ZW50IGlzIGF2YWlsYWJsZS5cbiAgICAgICAqL1xuICAgICAgdmFyIHdoaWNoID0gbmF0aXZlRXZlbnQud2hpY2g7XG4gICAgICBpZiAod2hpY2ggIT09IFNQQUNFQkFSX0NPREUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhhc1NwYWNlS2V5cHJlc3MgPSB0cnVlO1xuICAgICAgcmV0dXJuIFNQQUNFQkFSX0NIQVI7XG5cbiAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wVGV4dElucHV0OlxuICAgICAgLy8gUmVjb3JkIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBET00uXG4gICAgICB2YXIgY2hhcnMgPSBuYXRpdmVFdmVudC5kYXRhO1xuXG4gICAgICAvLyBJZiBpdCdzIGEgc3BhY2ViYXIgY2hhcmFjdGVyLCBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFscmVhZHkgaGFuZGxlZFxuICAgICAgLy8gaXQgYXQgdGhlIGtleXByZXNzIGxldmVsIGFuZCBiYWlsIGltbWVkaWF0ZWx5LiBBbmRyb2lkIENocm9tZVxuICAgICAgLy8gZG9lc24ndCBnaXZlIHVzIGtleWNvZGVzLCBzbyB3ZSBuZWVkIHRvIGJsYWNrbGlzdCBpdC5cbiAgICAgIGlmIChjaGFycyA9PT0gU1BBQ0VCQVJfQ0hBUiAmJiBoYXNTcGFjZUtleXByZXNzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hhcnM7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRm9yIG90aGVyIG5hdGl2ZSBldmVudCB0eXBlcywgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogRm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlIGB0ZXh0SW5wdXRgIGV2ZW50LCBleHRyYWN0IHRoZVxuICogYXBwcm9wcmlhdGUgc3RyaW5nIHRvIHVzZSBmb3IgU3ludGhldGljSW5wdXRFdmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBUaGUgZmFsbGJhY2sgc3RyaW5nIGZvciB0aGlzIGBiZWZvcmVJbnB1dGAgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgY29tcG9zaW5nIChJTUUpIGFuZCB1c2luZyBhIGZhbGxiYWNrIHRvIGRvIHNvLFxuICAvLyB0cnkgdG8gZXh0cmFjdCB0aGUgY29tcG9zZWQgY2hhcmFjdGVycyBmcm9tIHRoZSBmYWxsYmFjayBvYmplY3QuXG4gIGlmIChjdXJyZW50Q29tcG9zaXRpb24pIHtcbiAgICBpZiAoXG4gICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25FbmQgfHxcbiAgICAgIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KVxuICAgICkge1xuICAgICAgdmFyIGNoYXJzID0gY3VycmVudENvbXBvc2l0aW9uLmdldERhdGEoKTtcbiAgICAgIEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5yZWxlYXNlKGN1cnJlbnRDb21wb3NpdGlvbik7XG4gICAgICBjdXJyZW50Q29tcG9zaXRpb24gPSBudWxsO1xuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFBhc3RlOlxuICAgICAgLy8gSWYgYSBwYXN0ZSBldmVudCBvY2N1cnMgYWZ0ZXIgYSBrZXlwcmVzcywgdGhyb3cgb3V0IHRoZSBpbnB1dFxuICAgICAgLy8gY2hhcnMuIFBhc3RlIGV2ZW50cyBzaG91bGQgbm90IGxlYWQgdG8gQmVmb3JlSW5wdXQgZXZlbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzOlxuICAgICAgLyoqXG4gICAgICAgKiBBcyBvZiB2MjcsIEZpcmVmb3ggbWF5IGZpcmUga2V5cHJlc3MgZXZlbnRzIGV2ZW4gd2hlbiBubyBjaGFyYWN0ZXJcbiAgICAgICAqIHdpbGwgYmUgaW5zZXJ0ZWQuIEEgZmV3IHBvc3NpYmlsaXRpZXM6XG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIGAwYC4gQXJyb3cga2V5cywgRXNjIGtleSwgZXRjLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IG5vIGNoYXIgaXMgYXZhaWxhYmxlLlxuICAgICAgICogICBFeDogJ0FsdEdyICsgZGAgaW4gUG9saXNoLiBUaGVyZSBpcyBubyBtb2RpZmllZCBjaGFyYWN0ZXIgZm9yXG4gICAgICAgKiAgIHRoaXMga2V5IGNvbWJpbmF0aW9uIGFuZCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byB0aGVcbiAgICAgICAqICAgZG9jdW1lbnQsIGJ1dCBGRiBmaXJlcyB0aGUga2V5cHJlc3MgZm9yIGNoYXIgY29kZSBgMTAwYCBhbnl3YXkuXG4gICAgICAgKiAgIE5vIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBhIGNvbW1hbmQgY29tYmluYXRpb24gaXNcbiAgICAgICAqICAgYmVpbmcgdXNlZC4gRXg6IGBDbWQrQ2AuIE5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgYW5kIG5vXG4gICAgICAgKiAgIGBpbnB1dGAgZXZlbnQgd2lsbCBvY2N1ci5cbiAgICAgICAqL1xuICAgICAgaWYgKG5hdGl2ZUV2ZW50LndoaWNoICYmICFpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobmF0aXZlRXZlbnQud2hpY2gpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uRW5kOlxuICAgICAgcmV0dXJuIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID8gbnVsbCA6IG5hdGl2ZUV2ZW50LmRhdGE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIFN5bnRoZXRpY0lucHV0RXZlbnQgZm9yIGBiZWZvcmVJbnB1dGAsIGJhc2VkIG9uIGVpdGhlciBuYXRpdmVcbiAqIGB0ZXh0SW5wdXRgIG9yIGZhbGxiYWNrIGJlaGF2aW9yLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KFxuICB0b3BMZXZlbFR5cGUsXG4gIHRvcExldmVsVGFyZ2V0LFxuICB0b3BMZXZlbFRhcmdldElELFxuICBuYXRpdmVFdmVudFxuKSB7XG4gIHZhciBjaGFycztcblxuICBpZiAoY2FuVXNlVGV4dElucHV0RXZlbnQpIHtcbiAgICBjaGFycyA9IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY2hhcnMgPSBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gIH1cblxuICAvLyBJZiBubyBjaGFyYWN0ZXJzIGFyZSBiZWluZyBpbnNlcnRlZCwgbm8gQmVmb3JlSW5wdXQgZXZlbnQgc2hvdWxkXG4gIC8vIGJlIGZpcmVkLlxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNJbnB1dEV2ZW50LmdldFBvb2xlZChcbiAgICBldmVudFR5cGVzLmJlZm9yZUlucHV0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgbmF0aXZlRXZlbnRcbiAgKTtcblxuICBldmVudC5kYXRhID0gY2hhcnM7XG4gIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gYG9uQmVmb3JlSW5wdXRgIGV2ZW50IHRvIG1hdGNoXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNS8jZXZlbnRzLWlucHV0ZXZlbnRzLlxuICpcbiAqIFRoaXMgZXZlbnQgcGx1Z2luIGlzIGJhc2VkIG9uIHRoZSBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRcbiAqIGF2YWlsYWJsZSBpbiBDaHJvbWUsIFNhZmFyaSwgT3BlcmEsIGFuZCBJRS4gVGhpcyBldmVudCBmaXJlcyBhZnRlclxuICogYG9uS2V5UHJlc3NgIGFuZCBgb25Db21wb3NpdGlvbkVuZGAsIGJ1dCBiZWZvcmUgYG9uSW5wdXRgLlxuICpcbiAqIGBiZWZvcmVJbnB1dGAgaXMgc3BlYydkIGJ1dCBub3QgaW1wbGVtZW50ZWQgaW4gYW55IGJyb3dzZXJzLCBhbmRcbiAqIHRoZSBgaW5wdXRgIGV2ZW50IGRvZXMgbm90IHByb3ZpZGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGhhc1xuICogYWN0dWFsbHkgYmVlbiBhZGRlZCwgY29udHJhcnkgdG8gdGhlIHNwZWMuIFRodXMsIGB0ZXh0SW5wdXRgIGlzIHRoZSBiZXN0XG4gKiBhdmFpbGFibGUgZXZlbnQgdG8gaWRlbnRpZnkgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gaW5zZXJ0ZWRcbiAqIGludG8gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGx1Z2luIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIGBjb21wb3NpdGlvbmAgZXZlbnRzLCB0aHVzXG4gKiBhbGxvd2luZyB1cyB0byBzaGFyZSBjb21wb3NpdGlvbiBmYWxsYmFjayBjb2RlIGZvciBib3RoIGBiZWZvcmVJbnB1dGAgYW5kXG4gKiBgY29tcG9zaXRpb25gIGV2ZW50IHR5cGVzLlxuICovXG52YXIgQmVmb3JlSW5wdXRFdmVudFBsdWdpbiA9IHtcblxuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50c31cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKFxuICAgIHRvcExldmVsVHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldCxcbiAgICB0b3BMZXZlbFRhcmdldElELFxuICAgIG5hdGl2ZUV2ZW50XG4gICkge1xuICAgIHJldHVybiBbXG4gICAgICBleHRyYWN0Q29tcG9zaXRpb25FdmVudChcbiAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICksXG4gICAgICBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChcbiAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgIClcbiAgICBdO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJlZm9yZUlucHV0RXZlbnRQbHVnaW47XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIENTU0NvcmVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBUaGUgQ1NTQ29yZSBtb2R1bGUgc3BlY2lmaWVzIHRoZSBBUEkgKGFuZCBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIG1ldGhvZHMpXG4gKiB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBkaXNwbGF5IG9mIGVsZW1lbnRzICh2aWEgdGhlaXJcbiAqIENTUyBjbGFzc2VzIGFuZCB2aXNpYmlsaXR5IG9uIHNjcmVlbi4gSXQgaXMgYW4gQVBJIGZvY3VzZWQgb24gbXV0YXRpbmcgdGhlXG4gKiBkaXNwbGF5IGFuZCBub3QgcmVhZGluZyBpdCBhcyBubyBsb2dpY2FsIHN0YXRlIHNob3VsZCBiZSBlbmNvZGVkIGluIHRoZVxuICogZGlzcGxheSBvZiBlbGVtZW50cy5cbiAqL1xuXG52YXIgQ1NTQ29yZSA9IHtcblxuICAvKipcbiAgICogQWRkcyB0aGUgY2xhc3MgcGFzc2VkIGluIHRvIHRoZSBlbGVtZW50IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBjbGFzcyBvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3NOYW1lXG4gICAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IHRoZSBlbGVtZW50IHBhc3NlZCBpblxuICAgKi9cbiAgYWRkQ2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhL1xccy8udGVzdChjbGFzc05hbWUpLFxuICAgICAgJ0NTU0NvcmUuYWRkQ2xhc3MgdGFrZXMgb25seSBhIHNpbmdsZSBjbGFzcyBuYW1lLiBcIiVzXCIgY29udGFpbnMgJyArXG4gICAgICAnbXVsdGlwbGUgY2xhc3Nlcy4nLCBjbGFzc05hbWVcbiAgICApIDogaW52YXJpYW50KCEvXFxzLy50ZXN0KGNsYXNzTmFtZSkpKTtcblxuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoIUNTU0NvcmUuaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgJyAnICsgY2xhc3NOYW1lO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSxcblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgY2xhc3MgcGFzc2VkIGluIGZyb20gdGhlIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHNldCB0aGUgY2xhc3Mgb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzTmFtZVxuICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSB0aGUgZWxlbWVudCBwYXNzZWQgaW5cbiAgICovXG4gIHJlbW92ZUNsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIS9cXHMvLnRlc3QoY2xhc3NOYW1lKSxcbiAgICAgICdDU1NDb3JlLnJlbW92ZUNsYXNzIHRha2VzIG9ubHkgYSBzaW5nbGUgY2xhc3MgbmFtZS4gXCIlc1wiIGNvbnRhaW5zICcgK1xuICAgICAgJ211bHRpcGxlIGNsYXNzZXMuJywgY2xhc3NOYW1lXG4gICAgKSA6IGludmFyaWFudCghL1xccy8udGVzdChjbGFzc05hbWUpKSk7XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKENTU0NvcmUuaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lXG4gICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIGNsYXNzTmFtZSArICcoPzpcXFxcc3wkKScsICdnJyksICckMScpXG4gICAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKSAvLyBtdWx0aXBsZSBzcGFjZXMgdG8gb25lXG4gICAgICAgICAgLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTsgLy8gdHJpbSB0aGUgZW5kc1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSxcblxuICAvKipcbiAgICogSGVscGVyIHRvIGFkZCBvciByZW1vdmUgYSBjbGFzcyBmcm9tIGFuIGVsZW1lbnQgYmFzZWQgb24gYSBjb25kaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB0byBzZXQgdGhlIGNsYXNzIG9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzc05hbWVcbiAgICogQHBhcmFtIHsqfSBib29sIGNvbmRpdGlvbiB0byB3aGV0aGVyIHRvIGFkZCBvciByZW1vdmUgdGhlIGNsYXNzXG4gICAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IHRoZSBlbGVtZW50IHBhc3NlZCBpblxuICAgKi9cbiAgY29uZGl0aW9uQ2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSwgYm9vbCkge1xuICAgIHJldHVybiAoYm9vbCA/IENTU0NvcmUuYWRkQ2xhc3MgOiBDU1NDb3JlLnJlbW92ZUNsYXNzKShlbGVtZW50LCBjbGFzc05hbWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUZXN0cyB3aGV0aGVyIHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3Mgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTU5vZGV8RE9NV2luZG93fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHNldCB0aGUgY2xhc3Mgb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzTmFtZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3MsIGZhbHNlIGlmIG5vdFxuICAgKi9cbiAgaGFzQ2xhc3M6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhL1xccy8udGVzdChjbGFzc05hbWUpLFxuICAgICAgJ0NTUy5oYXNDbGFzcyB0YWtlcyBvbmx5IGEgc2luZ2xlIGNsYXNzIG5hbWUuJ1xuICAgICkgOiBpbnZhcmlhbnQoIS9cXHMvLnRlc3QoY2xhc3NOYW1lKSkpO1xuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgICAgcmV0dXJuICEhY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAoJyAnICsgZWxlbWVudC5jbGFzc05hbWUgKyAnICcpLmluZGV4T2YoJyAnICsgY2xhc3NOYW1lICsgJyAnKSA+IC0xO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ1NTQ29yZTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlExTlRRMjl5WlM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JEVTFORGIzSmxYRzRnS2lCQWRIbHdaV05vWldOcmMxeHVJQ292WEc1Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1ZHaGxJRU5UVTBOdmNtVWdiVzlrZFd4bElITndaV05wWm1sbGN5QjBhR1VnUVZCSklDaGhibVFnYVcxd2JHVnRaVzUwY3lCdGIzTjBJRzltSUhSb1pTQnRaWFJvYjJSektWeHVJQ29nZEdoaGRDQnphRzkxYkdRZ1ltVWdkWE5sWkNCM2FHVnVJR1JsWVd4cGJtY2dkMmwwYUNCMGFHVWdaR2x6Y0d4aGVTQnZaaUJsYkdWdFpXNTBjeUFvZG1saElIUm9aV2x5WEc0Z0tpQkRVMU1nWTJ4aGMzTmxjeUJoYm1RZ2RtbHphV0pwYkdsMGVTQnZiaUJ6WTNKbFpXNHVJRWwwSUdseklHRnVJRUZRU1NCbWIyTjFjMlZrSUc5dUlHMTFkR0YwYVc1bklIUm9aVnh1SUNvZ1pHbHpjR3hoZVNCaGJtUWdibTkwSUhKbFlXUnBibWNnYVhRZ1lYTWdibThnYkc5bmFXTmhiQ0J6ZEdGMFpTQnphRzkxYkdRZ1ltVWdaVzVqYjJSbFpDQnBiaUIwYUdWY2JpQXFJR1JwYzNCc1lYa2diMllnWld4bGJXVnVkSE11WEc0Z0tpOWNibHh1ZG1GeUlFTlRVME52Y21VZ1BTQjdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRmtaSE1nZEdobElHTnNZWE56SUhCaGMzTmxaQ0JwYmlCMGJ5QjBhR1VnWld4bGJXVnVkQ0JwWmlCcGRDQmtiMlZ6YmlkMElHRnNjbVZoWkhrZ2FHRjJaU0JwZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdEVUMDFGYkdWdFpXNTBmU0JsYkdWdFpXNTBJSFJvWlNCbGJHVnRaVzUwSUhSdklITmxkQ0IwYUdVZ1kyeGhjM01nYjI1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR05zWVhOelRtRnRaU0IwYUdVZ1ExTlRJR05zWVhOelRtRnRaVnh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVUMDFGYkdWdFpXNTBmU0IwYUdVZ1pXeGxiV1Z1ZENCd1lYTnpaV1FnYVc1Y2JpQWdJQ292WEc0Z0lHRmtaRU5zWVhOek9pQm1kVzVqZEdsdmJpaGxiR1Z0Wlc1MExDQmpiR0Z6YzA1aGJXVXBJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lTOWNYSE12TG5SbGMzUW9ZMnhoYzNOT1lXMWxLU3hjYmlBZ0lDQWdJQ2REVTFORGIzSmxMbUZrWkVOc1lYTnpJSFJoYTJWeklHOXViSGtnWVNCemFXNW5iR1VnWTJ4aGMzTWdibUZ0WlM0Z1hDSWxjMXdpSUdOdmJuUmhhVzV6SUNjZ0sxeHVJQ0FnSUNBZ0oyMTFiSFJwY0d4bElHTnNZWE56WlhNdUp5d2dZMnhoYzNOT1lXMWxYRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2doTDF4Y2N5OHVkR1Z6ZENoamJHRnpjMDVoYldVcEtTazdYRzVjYmlBZ0lDQnBaaUFvWTJ4aGMzTk9ZVzFsS1NCN1hHNGdJQ0FnSUNCcFppQW9aV3hsYldWdWRDNWpiR0Z6YzB4cGMzUXBJSHRjYmlBZ0lDQWdJQ0FnWld4bGJXVnVkQzVqYkdGemMweHBjM1F1WVdSa0tHTnNZWE56VG1GdFpTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLQ0ZEVTFORGIzSmxMbWhoYzBOc1lYTnpLR1ZzWlcxbGJuUXNJR05zWVhOelRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ1pXeGxiV1Z1ZEM1amJHRnpjMDVoYldVZ1BTQmxiR1Z0Wlc1MExtTnNZWE56VG1GdFpTQXJJQ2NnSnlBcklHTnNZWE56VG1GdFpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR1ZzWlcxbGJuUTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGJXOTJaWE1nZEdobElHTnNZWE56SUhCaGMzTmxaQ0JwYmlCbWNtOXRJSFJvWlNCbGJHVnRaVzUwWEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdaV3hsYldWdWRDQjBhR1VnWld4bGJXVnVkQ0IwYnlCelpYUWdkR2hsSUdOc1lYTnpJRzl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmpiR0Z6YzA1aGJXVWdkR2hsSUVOVFV5QmpiR0Z6YzA1aGJXVmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1JFOU5SV3hsYldWdWRIMGdkR2hsSUdWc1pXMWxiblFnY0dGemMyVmtJR2x1WEc0Z0lDQXFMMXh1SUNCeVpXMXZkbVZEYkdGemN6b2dablZ1WTNScGIyNG9aV3hsYldWdWRDd2dZMnhoYzNOT1lXMWxLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDRXZYRnh6THk1MFpYTjBLR05zWVhOelRtRnRaU2tzWEc0Z0lDQWdJQ0FuUTFOVFEyOXlaUzV5WlcxdmRtVkRiR0Z6Y3lCMFlXdGxjeUJ2Ym14NUlHRWdjMmx1WjJ4bElHTnNZWE56SUc1aGJXVXVJRndpSlhOY0lpQmpiMjUwWVdsdWN5QW5JQ3RjYmlBZ0lDQWdJQ2R0ZFd4MGFYQnNaU0JqYkdGemMyVnpMaWNzSUdOc1lYTnpUbUZ0WlZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lTOWNYSE12TG5SbGMzUW9ZMnhoYzNOT1lXMWxLU2twTzF4dVhHNGdJQ0FnYVdZZ0tHTnNZWE56VG1GdFpTa2dlMXh1SUNBZ0lDQWdhV1lnS0dWc1pXMWxiblF1WTJ4aGMzTk1hWE4wS1NCN1hHNGdJQ0FnSUNBZ0lHVnNaVzFsYm5RdVkyeGhjM05NYVhOMExuSmxiVzkyWlNoamJHRnpjMDVoYldVcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaERVMU5EYjNKbExtaGhjME5zWVhOektHVnNaVzFsYm5Rc0lHTnNZWE56VG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnWld4bGJXVnVkQzVqYkdGemMwNWhiV1VnUFNCbGJHVnRaVzUwTG1Oc1lYTnpUbUZ0WlZ4dUlDQWdJQ0FnSUNBZ0lDNXlaWEJzWVdObEtHNWxkeUJTWldkRmVIQW9KeWhlZkZ4Y1hGeHpLU2NnS3lCamJHRnpjMDVoYldVZ0t5QW5LRDg2WEZ4Y1hITjhKQ2tuTENBblp5Y3BMQ0FuSkRFbktWeHVJQ0FnSUNBZ0lDQWdJQzV5WlhCc1lXTmxLQzljWEhNckwyY3NJQ2NnSnlrZ0x5OGdiWFZzZEdsd2JHVWdjM0JoWTJWeklIUnZJRzl1WlZ4dUlDQWdJQ0FnSUNBZ0lDNXlaWEJzWVdObEtDOWVYRnh6S254Y1hITXFKQzluTENBbkp5azdJQzh2SUhSeWFXMGdkR2hsSUdWdVpITmNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR1ZzWlcxbGJuUTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVobGJIQmxjaUIwYnlCaFpHUWdiM0lnY21WdGIzWmxJR0VnWTJ4aGMzTWdabkp2YlNCaGJpQmxiR1Z0Wlc1MElHSmhjMlZrSUc5dUlHRWdZMjl1WkdsMGFXOXVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHVnNaVzFsYm5RZ2RHaGxJR1ZzWlcxbGJuUWdkRzhnYzJWMElIUm9aU0JqYkdGemN5QnZibHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1kyeGhjM05PWVcxbElIUm9aU0JEVTFNZ1kyeGhjM05PWVcxbFhHNGdJQ0FxSUVCd1lYSmhiU0I3S24wZ1ltOXZiQ0JqYjI1a2FYUnBiMjRnZEc4Z2QyaGxkR2hsY2lCMGJ5QmhaR1FnYjNJZ2NtVnRiM1psSUhSb1pTQmpiR0Z6YzF4dUlDQWdLaUJBY21WMGRYSnVJSHRFVDAxRmJHVnRaVzUwZlNCMGFHVWdaV3hsYldWdWRDQndZWE56WldRZ2FXNWNiaUFnSUNvdlhHNGdJR052Ym1ScGRHbHZia05zWVhOek9pQm1kVzVqZEdsdmJpaGxiR1Z0Wlc1MExDQmpiR0Z6YzA1aGJXVXNJR0p2YjJ3cElIdGNiaUFnSUNCeVpYUjFjbTRnS0dKdmIyd2dQeUJEVTFORGIzSmxMbUZrWkVOc1lYTnpJRG9nUTFOVFEyOXlaUzV5WlcxdmRtVkRiR0Z6Y3lrb1pXeGxiV1Z1ZEN3Z1kyeGhjM05PWVcxbEtUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVkdWemRITWdkMmhsZEdobGNpQjBhR1VnWld4bGJXVnVkQ0JvWVhNZ2RHaGxJR05zWVhOeklITndaV05wWm1sbFpDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRFVDAxT2IyUmxmRVJQVFZkcGJtUnZkMzBnWld4bGJXVnVkQ0IwYUdVZ1pXeGxiV1Z1ZENCMGJ5QnpaWFFnZEdobElHTnNZWE56SUc5dVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JqYkdGemMwNWhiV1VnZEdobElFTlRVeUJqYkdGemMwNWhiV1ZjYmlBZ0lDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMGdkSEoxWlNCcFppQjBhR1VnWld4bGJXVnVkQ0JvWVhNZ2RHaGxJR05zWVhOekxDQm1ZV3h6WlNCcFppQnViM1JjYmlBZ0lDb3ZYRzRnSUdoaGMwTnNZWE56T2lCbWRXNWpkR2x2YmlobGJHVnRaVzUwTENCamJHRnpjMDVoYldVcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSVM5Y1hITXZMblJsYzNRb1kyeGhjM05PWVcxbEtTeGNiaUFnSUNBZ0lDZERVMU11YUdGelEyeGhjM01nZEdGclpYTWdiMjVzZVNCaElITnBibWRzWlNCamJHRnpjeUJ1WVcxbExpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLQ0V2WEZ4ekx5NTBaWE4wS0dOc1lYTnpUbUZ0WlNrcEtUdGNiaUFnSUNCcFppQW9aV3hsYldWdWRDNWpiR0Z6YzB4cGMzUXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQWhJV05zWVhOelRtRnRaU0FtSmlCbGJHVnRaVzUwTG1Oc1lYTnpUR2x6ZEM1amIyNTBZV2x1Y3loamJHRnpjMDVoYldVcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdLQ2NnSnlBcklHVnNaVzFsYm5RdVkyeGhjM05PWVcxbElDc2dKeUFuS1M1cGJtUmxlRTltS0NjZ0p5QXJJR05zWVhOelRtRnRaU0FySUNjZ0p5a2dQaUF0TVR0Y2JpQWdmVnh1WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRU5UVTBOdmNtVTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDU1NQcm9wZXJ0eVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDU1MgcHJvcGVydGllcyB3aGljaCBhY2NlcHQgbnVtYmVycyBidXQgYXJlIG5vdCBpbiB1bml0cyBvZiBcInB4XCIuXG4gKi9cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBib3hGbGV4OiB0cnVlLFxuICBib3hGbGV4R3JvdXA6IHRydWUsXG4gIGNvbHVtbkNvdW50OiB0cnVlLFxuICBmbGV4OiB0cnVlLFxuICBmbGV4R3JvdzogdHJ1ZSxcbiAgZmxleFBvc2l0aXZlOiB0cnVlLFxuICBmbGV4U2hyaW5rOiB0cnVlLFxuICBmbGV4TmVnYXRpdmU6IHRydWUsXG4gIGZvbnRXZWlnaHQ6IHRydWUsXG4gIGxpbmVDbGFtcDogdHJ1ZSxcbiAgbGluZUhlaWdodDogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgb3JkZXI6IHRydWUsXG4gIG9ycGhhbnM6IHRydWUsXG4gIHdpZG93czogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICB6b29tOiB0cnVlLFxuXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IHRydWUsXG4gIHN0cm9rZU9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiB0cnVlXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHByZWZpeCwgZWc6IFdlYmtpdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBzdHlsZSBuYW1lLCBlZzogdHJhbnNpdGlvbkR1cmF0aW9uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0eWxlIG5hbWUgcHJlZml4ZWQgd2l0aCBgcHJlZml4YCwgcHJvcGVybHkgY2FtZWxDYXNlZCwgZWc6XG4gKiBXZWJraXRUcmFuc2l0aW9uRHVyYXRpb25cbiAqL1xuZnVuY3Rpb24gcHJlZml4S2V5KHByZWZpeCwga2V5KSB7XG4gIHJldHVybiBwcmVmaXggKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgc3R5bGUgbmFtZXMgdGhhdCBtYXkgY29tZSBwYXNzZWQgaW4gcHJlZml4ZWQgYnkgYWRkaW5nIHBlcm11dGF0aW9uc1xuICogb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG52YXIgcHJlZml4ZXMgPSBbJ1dlYmtpdCcsICdtcycsICdNb3onLCAnTyddO1xuXG4vLyBVc2luZyBPYmplY3Qua2V5cyBoZXJlLCBvciBlbHNlIHRoZSB2YW5pbGxhIGZvci1pbiBsb29wIG1ha2VzIElFOCBnbyBpbnRvIGFuXG4vLyBpbmZpbml0ZSBsb29wLCBiZWNhdXNlIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIG5ld2x5IGFkZGVkIHByb3BzIHRvby5cbk9iamVjdC5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBNb3N0IHN0eWxlIHByb3BlcnRpZXMgY2FuIGJlIHVuc2V0IGJ5IGRvaW5nIC5zdHlsZVtwcm9wXSA9ICcnIGJ1dCBJRThcbiAqIGRvZXNuJ3QgbGlrZSBkb2luZyB0aGF0IHdpdGggc2hvcnRoYW5kIHByb3BlcnRpZXMgc28gZm9yIHRoZSBwcm9wZXJ0aWVzIHRoYXRcbiAqIElFOCBicmVha3Mgb24sIHdoaWNoIGFyZSBsaXN0ZWQgaGVyZSwgd2UgaW5zdGVhZCB1bnNldCBlYWNoIG9mIHRoZVxuICogaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLiBTZWUgaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzODUuXG4gKiBUaGUgNC12YWx1ZSAnY2xvY2snIHByb3BlcnRpZXMgbGlrZSBtYXJnaW4sIHBhZGRpbmcsIGJvcmRlci13aWR0aCBzZWVtIHRvXG4gKiBiZWhhdmUgd2l0aG91dCBhbnkgcHJvYmxlbXMuIEN1cmlvdXNseSwgbGlzdC1zdHlsZSB3b3JrcyB0b28gd2l0aG91dCBhbnlcbiAqIHNwZWNpYWwgcHJvZGRpbmcuXG4gKi9cbnZhciBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnMgPSB7XG4gIGJhY2tncm91bmQ6IHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IHRydWUsXG4gICAgYmFja2dyb3VuZFBvc2l0aW9uOiB0cnVlLFxuICAgIGJhY2tncm91bmRSZXBlYXQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlcjoge1xuICAgIGJvcmRlcldpZHRoOiB0cnVlLFxuICAgIGJvcmRlclN0eWxlOiB0cnVlLFxuICAgIGJvcmRlckNvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlckJvdHRvbToge1xuICAgIGJvcmRlckJvdHRvbVdpZHRoOiB0cnVlLFxuICAgIGJvcmRlckJvdHRvbVN0eWxlOiB0cnVlLFxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICBib3JkZXJMZWZ0V2lkdGg6IHRydWUsXG4gICAgYm9yZGVyTGVmdFN0eWxlOiB0cnVlLFxuICAgIGJvcmRlckxlZnRDb2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXJSaWdodDoge1xuICAgIGJvcmRlclJpZ2h0V2lkdGg6IHRydWUsXG4gICAgYm9yZGVyUmlnaHRTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJSaWdodENvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlclRvcDoge1xuICAgIGJvcmRlclRvcFdpZHRoOiB0cnVlLFxuICAgIGJvcmRlclRvcFN0eWxlOiB0cnVlLFxuICAgIGJvcmRlclRvcENvbG9yOiB0cnVlXG4gIH0sXG4gIGZvbnQ6IHtcbiAgICBmb250U3R5bGU6IHRydWUsXG4gICAgZm9udFZhcmlhbnQ6IHRydWUsXG4gICAgZm9udFdlaWdodDogdHJ1ZSxcbiAgICBmb250U2l6ZTogdHJ1ZSxcbiAgICBsaW5lSGVpZ2h0OiB0cnVlLFxuICAgIGZvbnRGYW1pbHk6IHRydWVcbiAgfVxufTtcblxudmFyIENTU1Byb3BlcnR5ID0ge1xuICBpc1VuaXRsZXNzTnVtYmVyOiBpc1VuaXRsZXNzTnVtYmVyLFxuICBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnM6IHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDU1NQcm9wZXJ0eTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQ1NTUHJvcGVydHlPcGVyYXRpb25zXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENTU1Byb3BlcnR5ID0gcmVxdWlyZShcIi4vQ1NTUHJvcGVydHlcIik7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIGNhbWVsaXplU3R5bGVOYW1lID0gcmVxdWlyZShcIi4vY2FtZWxpemVTdHlsZU5hbWVcIik7XG52YXIgZGFuZ2Vyb3VzU3R5bGVWYWx1ZSA9IHJlcXVpcmUoXCIuL2Rhbmdlcm91c1N0eWxlVmFsdWVcIik7XG52YXIgaHlwaGVuYXRlU3R5bGVOYW1lID0gcmVxdWlyZShcIi4vaHlwaGVuYXRlU3R5bGVOYW1lXCIpO1xudmFyIG1lbW9pemVTdHJpbmdPbmx5ID0gcmVxdWlyZShcIi4vbWVtb2l6ZVN0cmluZ09ubHlcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gbWVtb2l6ZVN0cmluZ09ubHkoZnVuY3Rpb24oc3R5bGVOYW1lKSB7XG4gIHJldHVybiBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKTtcbn0pO1xuXG52YXIgc3R5bGVGbG9hdEFjY2Vzc29yID0gJ2Nzc0Zsb2F0JztcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gSUU4IG9ubHkgc3VwcG9ydHMgYWNjZXNzaW5nIGNzc0Zsb2F0IChzdGFuZGFyZCkgYXMgc3R5bGVGbG9hdFxuICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmNzc0Zsb2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnc3R5bGVGbG9hdCc7XG4gIH1cbn1cblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAvLyAnbXNUcmFuc2Zvcm0nIGlzIGNvcnJlY3QsIGJ1dCB0aGUgb3RoZXIgcHJlZml4ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkXG4gIHZhciBiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4gPSAvXig/OndlYmtpdHxtb3p8bylbQS1aXS87XG5cbiAgLy8gc3R5bGUgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uXG4gIHZhciBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLztcblxuICB2YXIgd2FybmVkU3R5bGVOYW1lcyA9IHt9O1xuICB2YXIgd2FybmVkU3R5bGVWYWx1ZXMgPSB7fTtcblxuICB2YXIgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgZmFsc2UsXG4gICAgICAnVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLFxuICAgICAgbmFtZSxcbiAgICAgIGNhbWVsaXplU3R5bGVOYW1lKG5hbWUpXG4gICAgKSA6IG51bGwpO1xuICB9O1xuXG4gIHZhciB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgZmFsc2UsXG4gICAgICAnVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JyxcbiAgICAgIG5hbWUsXG4gICAgICBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKVxuICAgICkgOiBudWxsKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVWYWx1ZXMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSA9IHRydWU7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBmYWxzZSxcbiAgICAgICdTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkblxcJ3QgY29udGFpbiBhIHNlbWljb2xvbi4gJyArXG4gICAgICAnVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJylcbiAgICApIDogbnVsbCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICovXG4gIHZhciB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIENTUyBwcm9wZXJ0aWVzLlxuICovXG52YXIgQ1NTUHJvcGVydHlPcGVyYXRpb25zID0ge1xuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgbWFwcGluZyBvZiBzdHlsZSBwcm9wZXJ0aWVzIGZvciB1c2UgYXMgaW5saW5lIHN0eWxlczpcbiAgICpcbiAgICogICA+IGNyZWF0ZU1hcmt1cEZvclN0eWxlcyh7d2lkdGg6ICcyMDBweCcsIGhlaWdodDogMH0pXG4gICAqICAgXCJ3aWR0aDoyMDBweDtoZWlnaHQ6MDtcIlxuICAgKlxuICAgKiBVbmRlZmluZWQgdmFsdWVzIGFyZSBpZ25vcmVkIHNvIHRoYXQgZGVjbGFyYXRpdmUgcHJvZ3JhbW1pbmcgaXMgZWFzaWVyLlxuICAgKiBUaGUgcmVzdWx0IHNob3VsZCBiZSBIVE1MLWVzY2FwZWQgYmVmb3JlIGluc2VydGlvbiBpbnRvIHRoZSBET00uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAgICogQHJldHVybiB7P3N0cmluZ31cbiAgICovXG4gIGNyZWF0ZU1hcmt1cEZvclN0eWxlczogZnVuY3Rpb24oc3R5bGVzKSB7XG4gICAgdmFyIHNlcmlhbGl6ZWQgPSAnJztcbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgc2VyaWFsaXplZCArPSBwcm9jZXNzU3R5bGVOYW1lKHN0eWxlTmFtZSkgKyAnOic7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpICsgJzsnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgbXVsdGlwbGUgc3R5bGVzIG9uIGEgbm9kZS4gIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzXG4gICAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICAgKi9cbiAgc2V0VmFsdWVGb3JTdHlsZXM6IGZ1bmN0aW9uKG5vZGUsIHN0eWxlcykge1xuICAgIHZhciBzdHlsZSA9IG5vZGUuc3R5bGU7XG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgd2FyblZhbGlkU3R5bGUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICB9XG4gICAgICB2YXIgc3R5bGVWYWx1ZSA9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICAgIHN0eWxlTmFtZSA9IHN0eWxlRmxvYXRBY2Nlc3NvcjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZVZhbHVlKSB7XG4gICAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGV4cGFuc2lvbiA9IENTU1Byb3BlcnR5LnNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1tzdHlsZU5hbWVdO1xuICAgICAgICBpZiAoZXhwYW5zaW9uKSB7XG4gICAgICAgICAgLy8gU2hvcnRoYW5kIHByb3BlcnR5IHRoYXQgSUU4IHdvbid0IGxpa2UgdW5zZXR0aW5nLCBzbyB1bnNldCBlYWNoXG4gICAgICAgICAgLy8gY29tcG9uZW50IHRvIHBsYWNhdGUgaXRcbiAgICAgICAgICBmb3IgKHZhciBpbmRpdmlkdWFsU3R5bGVOYW1lIGluIGV4cGFuc2lvbikge1xuICAgICAgICAgICAgc3R5bGVbaW5kaXZpZHVhbFN0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ1NTUHJvcGVydHlPcGVyYXRpb25zO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UTFOVFVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnUTFOVFVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1elhHNGdLaUJBZEhsd1pXTm9aV05yY3lCemRHRjBhV010YjI1c2VWeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRU5UVTFCeWIzQmxjblI1SUQwZ2NtVnhkV2x5WlNoY0lpNHZRMU5UVUhKdmNHVnlkSGxjSWlrN1hHNTJZWElnUlhobFkzVjBhVzl1Ulc1MmFYSnZibTFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEZ3aUtUdGNibHh1ZG1GeUlHTmhiV1ZzYVhwbFUzUjViR1ZPWVcxbElEMGdjbVZ4ZFdseVpTaGNJaTR2WTJGdFpXeHBlbVZUZEhsc1pVNWhiV1ZjSWlrN1hHNTJZWElnWkdGdVoyVnliM1Z6VTNSNWJHVldZV3gxWlNBOUlISmxjWFZwY21Vb1hDSXVMMlJoYm1kbGNtOTFjMU4wZVd4bFZtRnNkV1ZjSWlrN1hHNTJZWElnYUhsd2FHVnVZWFJsVTNSNWJHVk9ZVzFsSUQwZ2NtVnhkV2x5WlNoY0lpNHZhSGx3YUdWdVlYUmxVM1I1YkdWT1lXMWxYQ0lwTzF4dWRtRnlJRzFsYlc5cGVtVlRkSEpwYm1kUGJteDVJRDBnY21WeGRXbHlaU2hjSWk0dmJXVnRiMmw2WlZOMGNtbHVaMDl1YkhsY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JuWmhjaUJ3Y205alpYTnpVM1I1YkdWT1lXMWxJRDBnYldWdGIybDZaVk4wY21sdVowOXViSGtvWm5WdVkzUnBiMjRvYzNSNWJHVk9ZVzFsS1NCN1hHNGdJSEpsZEhWeWJpQm9lWEJvWlc1aGRHVlRkSGxzWlU1aGJXVW9jM1I1YkdWT1lXMWxLVHRjYm4wcE8xeHVYRzUyWVhJZ2MzUjViR1ZHYkc5aGRFRmpZMlZ6YzI5eUlEMGdKMk56YzBac2IyRjBKenRjYm1sbUlDaEZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQzVqWVc1VmMyVkVUMDBwSUh0Y2JpQWdMeThnU1VVNElHOXViSGtnYzNWd2NHOXlkSE1nWVdOalpYTnphVzVuSUdOemMwWnNiMkYwSUNoemRHRnVaR0Z5WkNrZ1lYTWdjM1I1YkdWR2JHOWhkRnh1SUNCcFppQW9aRzlqZFcxbGJuUXVaRzlqZFcxbGJuUkZiR1Z0Wlc1MExuTjBlV3hsTG1OemMwWnNiMkYwSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQnpkSGxzWlVac2IyRjBRV05qWlhOemIzSWdQU0FuYzNSNWJHVkdiRzloZENjN1hHNGdJSDFjYm4xY2JseHVhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBdkx5QW5iWE5VY21GdWMyWnZjbTBuSUdseklHTnZjbkpsWTNRc0lHSjFkQ0IwYUdVZ2IzUm9aWElnY0hKbFptbDRaWE1nYzJodmRXeGtJR0psSUdOaGNHbDBZV3hwZW1Wa1hHNGdJSFpoY2lCaVlXUldaVzVrYjNKbFpGTjBlV3hsVG1GdFpWQmhkSFJsY200Z1BTQXZYaWcvT25kbFltdHBkSHh0YjNwOGJ5bGJRUzFhWFM4N1hHNWNiaUFnTHk4Z2MzUjViR1VnZG1Gc2RXVnpJSE5vYjNWc1pHNG5kQ0JqYjI1MFlXbHVJR0VnYzJWdGFXTnZiRzl1WEc0Z0lIWmhjaUJpWVdSVGRIbHNaVlpoYkhWbFYybDBhRk5sYldsamIyeHZibEJoZEhSbGNtNGdQU0F2TzF4Y2N5b2tMenRjYmx4dUlDQjJZWElnZDJGeWJtVmtVM1I1YkdWT1lXMWxjeUE5SUh0OU8xeHVJQ0IyWVhJZ2QyRnlibVZrVTNSNWJHVldZV3gxWlhNZ1BTQjdmVHRjYmx4dUlDQjJZWElnZDJGeWJraDVjR2hsYm1GMFpXUlRkSGxzWlU1aGJXVWdQU0JtZFc1amRHbHZiaWh1WVcxbEtTQjdYRzRnSUNBZ2FXWWdLSGRoY201bFpGTjBlV3hsVG1GdFpYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2tnSmlZZ2QyRnlibVZrVTNSNWJHVk9ZVzFsYzF0dVlXMWxYU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIZGhjbTVsWkZOMGVXeGxUbUZ0WlhOYmJtRnRaVjBnUFNCMGNuVmxPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQW5WVzV6ZFhCd2IzSjBaV1FnYzNSNWJHVWdjSEp2Y0dWeWRIa2dKWE11SUVScFpDQjViM1VnYldWaGJpQWxjejhuTEZ4dUlDQWdJQ0FnYm1GdFpTeGNiaUFnSUNBZ0lHTmhiV1ZzYVhwbFUzUjViR1ZPWVcxbEtHNWhiV1VwWEc0Z0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNCOU8xeHVYRzRnSUhaaGNpQjNZWEp1UW1Ga1ZtVnVaRzl5WldSVGRIbHNaVTVoYldVZ1BTQm1kVzVqZEdsdmJpaHVZVzFsS1NCN1hHNGdJQ0FnYVdZZ0tIZGhjbTVsWkZOMGVXeGxUbUZ0WlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa2dKaVlnZDJGeWJtVmtVM1I1YkdWT1lXMWxjMXR1WVcxbFhTa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhkaGNtNWxaRk4wZVd4bFRtRnRaWE5iYm1GdFpWMGdQU0IwY25WbE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBblZXNXpkWEJ3YjNKMFpXUWdkbVZ1Wkc5eUxYQnlaV1pwZUdWa0lITjBlV3hsSUhCeWIzQmxjblI1SUNWekxpQkVhV1FnZVc5MUlHMWxZVzRnSlhNL0p5eGNiaUFnSUNBZ0lHNWhiV1VzWEc0Z0lDQWdJQ0J1WVcxbExtTm9ZWEpCZENnd0tTNTBiMVZ3Y0dWeVEyRnpaU2dwSUNzZ2JtRnRaUzV6YkdsalpTZ3hLVnh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnZlR0Y2JseHVJQ0IyWVhJZ2QyRnlibE4wZVd4bFZtRnNkV1ZYYVhSb1UyVnRhV052Ykc5dUlEMGdablZ1WTNScGIyNG9ibUZ0WlN3Z2RtRnNkV1VwSUh0Y2JpQWdJQ0JwWmlBb2QyRnlibVZrVTNSNWJHVldZV3gxWlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvZG1Gc2RXVXBJQ1ltSUhkaGNtNWxaRk4wZVd4bFZtRnNkV1Z6VzNaaGJIVmxYU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIZGhjbTVsWkZOMGVXeGxWbUZzZFdWelczWmhiSFZsWFNBOUlIUnlkV1U3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ2RUZEhsc1pTQndjbTl3WlhKMGVTQjJZV3gxWlhNZ2MyaHZkV3hrYmx4Y0ozUWdZMjl1ZEdGcGJpQmhJSE5sYldsamIyeHZiaTRnSnlBclhHNGdJQ0FnSUNBblZISjVJRndpSlhNNklDVnpYQ0lnYVc1emRHVmhaQzRuTEZ4dUlDQWdJQ0FnYm1GdFpTeGNiaUFnSUNBZ0lIWmhiSFZsTG5KbGNHeGhZMlVvWW1Ga1UzUjViR1ZXWVd4MVpWZHBkR2hUWlcxcFkyOXNiMjVRWVhSMFpYSnVMQ0FuSnlsY2JpQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lIMDdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdVlXMWxYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdkbUZzZFdWY2JpQWdJQ292WEc0Z0lIWmhjaUIzWVhKdVZtRnNhV1JUZEhsc1pTQTlJR1oxYm1OMGFXOXVLRzVoYldVc0lIWmhiSFZsS1NCN1hHNGdJQ0FnYVdZZ0tHNWhiV1V1YVc1a1pYaFBaaWduTFNjcElENGdMVEVwSUh0Y2JpQWdJQ0FnSUhkaGNtNUllWEJvWlc1aGRHVmtVM1I1YkdWT1lXMWxLRzVoYldVcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1ltRmtWbVZ1Wkc5eVpXUlRkSGxzWlU1aGJXVlFZWFIwWlhKdUxuUmxjM1FvYm1GdFpTa3BJSHRjYmlBZ0lDQWdJSGRoY201Q1lXUldaVzVrYjNKbFpGTjBlV3hsVG1GdFpTaHVZVzFsS1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0dKaFpGTjBlV3hsVm1Gc2RXVlhhWFJvVTJWdGFXTnZiRzl1VUdGMGRHVnliaTUwWlhOMEtIWmhiSFZsS1NrZ2UxeHVJQ0FnSUNBZ2QyRnlibE4wZVd4bFZtRnNkV1ZYYVhSb1UyVnRhV052Ykc5dUtHNWhiV1VzSUhaaGJIVmxLVHRjYmlBZ0lDQjlYRzRnSUgwN1hHNTlYRzVjYmk4cUtseHVJQ29nVDNCbGNtRjBhVzl1Y3lCbWIzSWdaR1ZoYkdsdVp5QjNhWFJvSUVOVFV5QndjbTl3WlhKMGFXVnpMbHh1SUNvdlhHNTJZWElnUTFOVFVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1eklEMGdlMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRaWEpwWVd4cGVtVnpJR0VnYldGd2NHbHVaeUJ2WmlCemRIbHNaU0J3Y205d1pYSjBhV1Z6SUdadmNpQjFjMlVnWVhNZ2FXNXNhVzVsSUhOMGVXeGxjenBjYmlBZ0lDcGNiaUFnSUNvZ0lDQStJR055WldGMFpVMWhjbXQxY0VadmNsTjBlV3hsY3loN2QybGtkR2c2SUNjeU1EQndlQ2NzSUdobGFXZG9kRG9nTUgwcFhHNGdJQ0FxSUNBZ1hDSjNhV1IwYURveU1EQndlRHRvWldsbmFIUTZNRHRjSWx4dUlDQWdLbHh1SUNBZ0tpQlZibVJsWm1sdVpXUWdkbUZzZFdWeklHRnlaU0JwWjI1dmNtVmtJSE52SUhSb1lYUWdaR1ZqYkdGeVlYUnBkbVVnY0hKdlozSmhiVzFwYm1jZ2FYTWdaV0Z6YVdWeUxseHVJQ0FnS2lCVWFHVWdjbVZ6ZFd4MElITm9iM1ZzWkNCaVpTQklWRTFNTFdWelkyRndaV1FnWW1WbWIzSmxJR2x1YzJWeWRHbHZiaUJwYm5SdklIUm9aU0JFVDAwdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnpkSGxzWlhOY2JpQWdJQ29nUUhKbGRIVnliaUI3UDNOMGNtbHVaMzFjYmlBZ0lDb3ZYRzRnSUdOeVpXRjBaVTFoY210MWNFWnZjbE4wZVd4bGN6b2dablZ1WTNScGIyNG9jM1I1YkdWektTQjdYRzRnSUNBZ2RtRnlJSE5sY21saGJHbDZaV1FnUFNBbkp6dGNiaUFnSUNCbWIzSWdLSFpoY2lCemRIbHNaVTVoYldVZ2FXNGdjM1I1YkdWektTQjdYRzRnSUNBZ0lDQnBaaUFvSVhOMGVXeGxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHpkSGxzWlU1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZG1GeUlITjBlV3hsVm1Gc2RXVWdQU0J6ZEhsc1pYTmJjM1I1YkdWT1lXMWxYVHRjYmlBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnZDJGeWJsWmhiR2xrVTNSNWJHVW9jM1I1YkdWT1lXMWxMQ0J6ZEhsc1pWWmhiSFZsS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDaHpkSGxzWlZaaGJIVmxJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnYzJWeWFXRnNhWHBsWkNBclBTQndjbTlqWlhOelUzUjViR1ZPWVcxbEtITjBlV3hsVG1GdFpTa2dLeUFuT2ljN1hHNGdJQ0FnSUNBZ0lITmxjbWxoYkdsNlpXUWdLejBnWkdGdVoyVnliM1Z6VTNSNWJHVldZV3gxWlNoemRIbHNaVTVoYldVc0lITjBlV3hsVm1Gc2RXVXBJQ3NnSnpzbk8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjMlZ5YVdGc2FYcGxaQ0I4ZkNCdWRXeHNPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVFpYUnpJSFJvWlNCMllXeDFaU0JtYjNJZ2JYVnNkR2x3YkdVZ2MzUjViR1Z6SUc5dUlHRWdibTlrWlM0Z0lFbG1JR0VnZG1Gc2RXVWdhWE1nYzNCbFkybG1hV1ZrSUdGelhHNGdJQ0FxSUNjbklDaGxiWEIwZVNCemRISnBibWNwTENCMGFHVWdZMjl5Y21WemNHOXVaR2x1WnlCemRIbHNaU0J3Y205d1pYSjBlU0IzYVd4c0lHSmxJSFZ1YzJWMExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUc1dlpHVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhOMGVXeGxjMXh1SUNBZ0tpOWNiaUFnYzJWMFZtRnNkV1ZHYjNKVGRIbHNaWE02SUdaMWJtTjBhVzl1S0c1dlpHVXNJSE4wZVd4bGN5a2dlMXh1SUNBZ0lIWmhjaUJ6ZEhsc1pTQTlJRzV2WkdVdWMzUjViR1U3WEc0Z0lDQWdabTl5SUNoMllYSWdjM1I1YkdWT1lXMWxJR2x1SUhOMGVXeGxjeWtnZTF4dUlDQWdJQ0FnYVdZZ0tDRnpkSGxzWlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYzNSNWJHVk9ZVzFsS1NrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdkMkZ5YmxaaGJHbGtVM1I1YkdVb2MzUjViR1ZPWVcxbExDQnpkSGxzWlhOYmMzUjViR1ZPWVcxbFhTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQjJZWElnYzNSNWJHVldZV3gxWlNBOUlHUmhibWRsY205MWMxTjBlV3hsVm1Gc2RXVW9jM1I1YkdWT1lXMWxMQ0J6ZEhsc1pYTmJjM1I1YkdWT1lXMWxYU2s3WEc0Z0lDQWdJQ0JwWmlBb2MzUjViR1ZPWVcxbElEMDlQU0FuWm14dllYUW5LU0I3WEc0Z0lDQWdJQ0FnSUhOMGVXeGxUbUZ0WlNBOUlITjBlV3hsUm14dllYUkJZMk5sYzNOdmNqdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2h6ZEhsc1pWWmhiSFZsS1NCN1hHNGdJQ0FnSUNBZ0lITjBlV3hsVzNOMGVXeGxUbUZ0WlYwZ1BTQnpkSGxzWlZaaGJIVmxPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdWNGNHRnVjMmx2YmlBOUlFTlRVMUJ5YjNCbGNuUjVMbk5vYjNKMGFHRnVaRkJ5YjNCbGNuUjVSWGh3WVc1emFXOXVjMXR6ZEhsc1pVNWhiV1ZkTzF4dUlDQWdJQ0FnSUNCcFppQW9aWGh3WVc1emFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdVMmh2Y25Sb1lXNWtJSEJ5YjNCbGNuUjVJSFJvWVhRZ1NVVTRJSGR2YmlkMElHeHBhMlVnZFc1elpYUjBhVzVuTENCemJ5QjFibk5sZENCbFlXTm9YRzRnSUNBZ0lDQWdJQ0FnTHk4Z1kyOXRjRzl1Wlc1MElIUnZJSEJzWVdOaGRHVWdhWFJjYmlBZ0lDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCcGJtUnBkbWxrZFdGc1UzUjViR1ZPWVcxbElHbHVJR1Y0Y0dGdWMybHZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1I1YkdWYmFXNWthWFpwWkhWaGJGTjBlV3hsVG1GdFpWMGdQU0FuSnp0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnYzNSNWJHVmJjM1I1YkdWT1lXMWxYU0E5SUNjbk8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUTFOVFVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ek8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDYWxsYmFja1F1ZXVlXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgcHNldWRvLWV2ZW50IG1vZHVsZSB0byBoZWxwIGtlZXAgdHJhY2sgb2YgY29tcG9uZW50cyB3YWl0aW5nIHRvXG4gKiBiZSBub3RpZmllZCB3aGVuIHRoZWlyIERPTSByZXByZXNlbnRhdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50cyBgUG9vbGVkQ2xhc3NgLCBzbyB5b3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy5cbiAqIEluc3RlYWQsIHVzZSBgQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQoKWAuXG4gKlxuICogQGNsYXNzIFJlYWN0TW91bnRSZWFkeVxuICogQGltcGxlbWVudHMgUG9vbGVkQ2xhc3NcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBDYWxsYmFja1F1ZXVlKCkge1xuICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICB0aGlzLl9jb250ZXh0cyA9IG51bGw7XG59XG5cbmFzc2lnbihDYWxsYmFja1F1ZXVlLnByb3RvdHlwZSwge1xuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBgbm90aWZ5QWxsYCBpcyBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBJbnZva2VkIHdoZW4gYG5vdGlmeUFsbGAgaXMgaW52b2tlZC5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBjb250ZXh0IENvbnRleHQgdG8gY2FsbCBgY2FsbGJhY2tgIHdpdGguXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZTogZnVuY3Rpb24oY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwgW107XG4gICAgdGhpcy5fY29udGV4dHMgPSB0aGlzLl9jb250ZXh0cyB8fCBbXTtcbiAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5fY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgfSxcblxuICAvKipcbiAgICogSW52b2tlcyBhbGwgZW5xdWV1ZWQgY2FsbGJhY2tzIGFuZCBjbGVhcnMgdGhlIHF1ZXVlLiBUaGlzIGlzIGludm9rZWQgYWZ0ZXJcbiAgICogdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbXBvbmVudCBoYXMgYmVlbiBjcmVhdGVkIG9yIHVwZGF0ZWQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbm90aWZ5QWxsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzO1xuICAgIHZhciBjb250ZXh0cyA9IHRoaXMuX2NvbnRleHRzO1xuICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIGNhbGxiYWNrcy5sZW5ndGggPT09IGNvbnRleHRzLmxlbmd0aCxcbiAgICAgICAgJ01pc21hdGNoZWQgbGlzdCBvZiBjb250ZXh0cyBpbiBjYWxsYmFjayBxdWV1ZSdcbiAgICAgICkgOiBpbnZhcmlhbnQoY2FsbGJhY2tzLmxlbmd0aCA9PT0gY29udGV4dHMubGVuZ3RoKSk7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICAgICAgdGhpcy5fY29udGV4dHMgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYWxsYmFja3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKGNvbnRleHRzW2ldKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrcy5sZW5ndGggPSAwO1xuICAgICAgY29udGV4dHMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgaW50ZXJuYWwgcXVldWUuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IG51bGw7XG4gICAgdGhpcy5fY29udGV4dHMgPSBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciB0aGlzLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbn0pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oQ2FsbGJhY2tRdWV1ZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FsbGJhY2tRdWV1ZTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlEyRnNiR0poWTJ0UmRXVjFaUzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JEWVd4c1ltRmphMUYxWlhWbFhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdVRzl2YkdWa1EyeGhjM01nUFNCeVpYRjFhWEpsS0Z3aUxpOVFiMjlzWldSRGJHRnpjMXdpS1R0Y2JseHVkbUZ5SUdGemMybG5iaUE5SUhKbGNYVnBjbVVvWENJdUwwOWlhbVZqZEM1aGMzTnBaMjVjSWlrN1hHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNHZLaXBjYmlBcUlFRWdjM0JsWTJsaGJHbDZaV1FnY0hObGRXUnZMV1YyWlc1MElHMXZaSFZzWlNCMGJ5Qm9aV3h3SUd0bFpYQWdkSEpoWTJzZ2IyWWdZMjl0Y0c5dVpXNTBjeUIzWVdsMGFXNW5JSFJ2WEc0Z0tpQmlaU0J1YjNScFptbGxaQ0IzYUdWdUlIUm9aV2x5SUVSUFRTQnlaWEJ5WlhObGJuUmhkR2x2Ym5NZ1lYSmxJR0YyWVdsc1lXSnNaU0JtYjNJZ2RYTmxMbHh1SUNwY2JpQXFJRlJvYVhNZ2FXMXdiR1Z0Wlc1MGN5QmdVRzl2YkdWa1EyeGhjM05nTENCemJ5QjViM1VnYzJodmRXeGtJRzVsZG1WeUlHNWxaV1FnZEc4Z2FXNXpkR0Z1ZEdsaGRHVWdkR2hwY3k1Y2JpQXFJRWx1YzNSbFlXUXNJSFZ6WlNCZ1EyRnNiR0poWTJ0UmRXVjFaUzVuWlhSUWIyOXNaV1FvS1dBdVhHNGdLbHh1SUNvZ1FHTnNZWE56SUZKbFlXTjBUVzkxYm5SU1pXRmtlVnh1SUNvZ1FHbHRjR3hsYldWdWRITWdVRzl2YkdWa1EyeGhjM05jYmlBcUlFQnBiblJsY201aGJGeHVJQ292WEc1bWRXNWpkR2x2YmlCRFlXeHNZbUZqYTFGMVpYVmxLQ2tnZTF4dUlDQjBhR2x6TGw5allXeHNZbUZqYTNNZ1BTQnVkV3hzTzF4dUlDQjBhR2x6TGw5amIyNTBaWGgwY3lBOUlHNTFiR3c3WEc1OVhHNWNibUZ6YzJsbmJpaERZV3hzWW1GamExRjFaWFZsTG5CeWIzUnZkSGx3WlN3Z2UxeHVYRzRnSUM4cUtseHVJQ0FnS2lCRmJuRjFaWFZsY3lCaElHTmhiR3hpWVdOcklIUnZJR0psSUdsdWRtOXJaV1FnZDJobGJpQmdibTkwYVdaNVFXeHNZQ0JwY3lCcGJuWnZhMlZrTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5Qkpiblp2YTJWa0lIZG9aVzRnWUc1dmRHbG1lVUZzYkdBZ2FYTWdhVzUyYjJ0bFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCamIyNTBaWGgwSUVOdmJuUmxlSFFnZEc4Z1kyRnNiQ0JnWTJGc2JHSmhZMnRnSUhkcGRHZ3VYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaVzV4ZFdWMVpUb2dablZ1WTNScGIyNG9ZMkZzYkdKaFkyc3NJR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjBhR2x6TGw5allXeHNZbUZqYTNNZ1BTQjBhR2x6TGw5allXeHNZbUZqYTNNZ2ZId2dXMTA3WEc0Z0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZEhNZ1BTQjBhR2x6TGw5amIyNTBaWGgwY3lCOGZDQmJYVHRjYmlBZ0lDQjBhR2x6TGw5allXeHNZbUZqYTNNdWNIVnphQ2hqWVd4c1ltRmpheWs3WEc0Z0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZEhNdWNIVnphQ2hqYjI1MFpYaDBLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1NXNTJiMnRsY3lCaGJHd2daVzV4ZFdWMVpXUWdZMkZzYkdKaFkydHpJR0Z1WkNCamJHVmhjbk1nZEdobElIRjFaWFZsTGlCVWFHbHpJR2x6SUdsdWRtOXJaV1FnWVdaMFpYSmNiaUFnSUNvZ2RHaGxJRVJQVFNCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCaElHTnZiWEJ2Ym1WdWRDQm9ZWE1nWW1WbGJpQmpjbVZoZEdWa0lHOXlJSFZ3WkdGMFpXUXVYRzRnSUNBcVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ2JtOTBhV1o1UVd4c09pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjJZWElnWTJGc2JHSmhZMnR6SUQwZ2RHaHBjeTVmWTJGc2JHSmhZMnR6TzF4dUlDQWdJSFpoY2lCamIyNTBaWGgwY3lBOUlIUm9hWE11WDJOdmJuUmxlSFJ6TzF4dUlDQWdJR2xtSUNoallXeHNZbUZqYTNNcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lHTmhiR3hpWVdOcmN5NXNaVzVuZEdnZ1BUMDlJR052Ym5SbGVIUnpMbXhsYm1kMGFDeGNiaUFnSUNBZ0lDQWdKMDFwYzIxaGRHTm9aV1FnYkdsemRDQnZaaUJqYjI1MFpYaDBjeUJwYmlCallXeHNZbUZqYXlCeGRXVjFaU2RjYmlBZ0lDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1kyRnNiR0poWTJ0ekxteGxibWQwYUNBOVBUMGdZMjl1ZEdWNGRITXViR1Z1WjNSb0tTazdYRzRnSUNBZ0lDQjBhR2x6TGw5allXeHNZbUZqYTNNZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnZEdocGN5NWZZMjl1ZEdWNGRITWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREFzSUd3Z1BTQmpZV3hzWW1GamEzTXViR1Z1WjNSb095QnBJRHdnYkRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUdOaGJHeGlZV05yYzF0cFhTNWpZV3hzS0dOdmJuUmxlSFJ6VzJsZEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTmhiR3hpWVdOcmN5NXNaVzVuZEdnZ1BTQXdPMXh1SUNBZ0lDQWdZMjl1ZEdWNGRITXViR1Z1WjNSb0lEMGdNRHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGMyVjBjeUIwYUdVZ2FXNTBaWEp1WVd3Z2NYVmxkV1V1WEc0Z0lDQXFYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdjbVZ6WlhRNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lIUm9hWE11WDJOaGJHeGlZV05yY3lBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZEhNZ1BTQnVkV3hzTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQmdVRzl2YkdWa1EyeGhjM05nSUd4dmIydHpJR1p2Y2lCMGFHbHpMbHh1SUNBZ0tpOWNiaUFnWkdWemRISjFZM1J2Y2pvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2RHaHBjeTV5WlhObGRDZ3BPMXh1SUNCOVhHNWNibjBwTzF4dVhHNVFiMjlzWldSRGJHRnpjeTVoWkdSUWIyOXNhVzVuVkc4b1EyRnNiR0poWTJ0UmRXVjFaU2s3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1EyRnNiR0poWTJ0UmRXVjFaVHRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQ2hhbmdlRXZlbnRQbHVnaW5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5IdWJcIik7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoXCIuL0V2ZW50UHJvcGFnYXRvcnNcIik7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcblxudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKFwiLi9pc0V2ZW50U3VwcG9ydGVkXCIpO1xudmFyIGlzVGV4dElucHV0RWxlbWVudCA9IHJlcXVpcmUoXCIuL2lzVGV4dElucHV0RWxlbWVudFwiKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbnZhciBldmVudFR5cGVzID0ge1xuICBjaGFuZ2U6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ2hhbmdlOiBudWxsfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ2hhbmdlQ2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ2hhbmdlLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BDbGljayxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wRm9jdXMsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcElucHV0LFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdlXG4gICAgXVxuICB9XG59O1xuXG4vKipcbiAqIEZvciBJRSBzaGltc1xuICovXG52YXIgYWN0aXZlRWxlbWVudCA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudElEID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50VmFsdWUgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRWYWx1ZVByb3AgPSBudWxsO1xuXG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudFxuICovXG5mdW5jdGlvbiBzaG91bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7XG4gIHJldHVybiAoXG4gICAgZWxlbS5ub2RlTmFtZSA9PT0gJ1NFTEVDVCcgfHxcbiAgICAoZWxlbS5ub2RlTmFtZSA9PT0gJ0lOUFVUJyAmJiBlbGVtLnR5cGUgPT09ICdmaWxlJylcbiAgKTtcbn1cblxudmFyIGRvZXNDaGFuZ2VFdmVudEJ1YmJsZSA9IGZhbHNlO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAvLyBTZWUgYGhhbmRsZUNoYW5nZWAgY29tbWVudCBiZWxvd1xuICBkb2VzQ2hhbmdlRXZlbnRCdWJibGUgPSBpc0V2ZW50U3VwcG9ydGVkKCdjaGFuZ2UnKSAmJiAoXG4gICAgKCEoJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDgpXG4gICk7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGV2ZW50ID0gU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgIGV2ZW50VHlwZXMuY2hhbmdlLFxuICAgIGFjdGl2ZUVsZW1lbnRJRCxcbiAgICBuYXRpdmVFdmVudFxuICApO1xuICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuXG4gIC8vIElmIGNoYW5nZSBhbmQgcHJvcGVydHljaGFuZ2UgYnViYmxlZCwgd2UnZCBqdXN0IGJpbmQgdG8gaXQgbGlrZSBhbGwgdGhlXG4gIC8vIG90aGVyIGV2ZW50cyBhbmQgaGF2ZSBpdCBnbyB0aHJvdWdoIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci4gU2luY2UgaXRcbiAgLy8gZG9lc24ndCwgd2UgbWFudWFsbHkgbGlzdGVuIGZvciB0aGUgZXZlbnRzIGFuZCBzbyB3ZSBoYXZlIHRvIGVucXVldWUgYW5kXG4gIC8vIHByb2Nlc3MgdGhlIGFic3RyYWN0IGV2ZW50IG1hbnVhbGx5LlxuICAvL1xuICAvLyBCYXRjaGluZyBpcyBuZWNlc3NhcnkgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBhbGwgZXZlbnQgaGFuZGxlcnMgcnVuXG4gIC8vIGJlZm9yZSB0aGUgbmV4dCByZXJlbmRlciAoaW5jbHVkaW5nIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIHRvIGFuY2VzdG9yXG4gIC8vIGVsZW1lbnRzIGluc3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIGlucHV0KS4gV2l0aG91dCB0aGlzLCBjb250cm9sbGVkXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBjb25qdW5jdGlvbiB3aXRoIGV2ZW50IGJ1YmJsaW5nIGJlY2F1c2VcbiAgLy8gdGhlIGNvbXBvbmVudCBpcyByZXJlbmRlcmVkIGFuZCB0aGUgdmFsdWUgcmV2ZXJ0ZWQgYmVmb3JlIGFsbCB0aGUgZXZlbnRcbiAgLy8gaGFuZGxlcnMgY2FuIHJ1bi4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzA4LlxuICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMocnVuRXZlbnRJbkJhdGNoLCBldmVudCk7XG59XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChldmVudCkge1xuICBFdmVudFBsdWdpbkh1Yi5lbnF1ZXVlRXZlbnRzKGV2ZW50KTtcbiAgRXZlbnRQbHVnaW5IdWIucHJvY2Vzc0V2ZW50UXVldWUoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KHRhcmdldCwgdGFyZ2V0SUQpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudElEID0gdGFyZ2V0SUQ7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29uY2hhbmdlJywgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25jaGFuZ2UnLCBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJRCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldElERm9yQ2hhbmdlRXZlbnQoXG4gICAgdG9wTGV2ZWxUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BDaGFuZ2UpIHtcbiAgICByZXR1cm4gdG9wTGV2ZWxUYXJnZXRJRDtcbiAgfVxufVxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9yQ2hhbmdlRXZlbnRJRTgoXG4gICAgdG9wTGV2ZWxUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BGb2N1cykge1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgodG9wTGV2ZWxUYXJnZXQsIHRvcExldmVsVGFyZ2V0SUQpO1xuICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BCbHVyKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgoKTtcbiAgfVxufVxuXG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBpbnB1dGAgZXZlbnRcbiAqL1xudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAvLyBJRTkgY2xhaW1zIHRvIHN1cHBvcnQgdGhlIGlucHV0IGV2ZW50IGJ1dCBmYWlscyB0byB0cmlnZ2VyIGl0IHdoZW5cbiAgLy8gZGVsZXRpbmcgdGV4dCwgc28gd2UgaWdub3JlIGl0cyBpbnB1dCBldmVudHNcbiAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gaXNFdmVudFN1cHBvcnRlZCgnaW5wdXQnKSAmJiAoXG4gICAgKCEoJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDkpXG4gICk7XG59XG5cbi8qKlxuICogKEZvciBvbGQgSUUuKSBSZXBsYWNlbWVudCBnZXR0ZXIvc2V0dGVyIGZvciB0aGUgYHZhbHVlYCBwcm9wZXJ0eSB0aGF0IGdldHNcbiAqIHNldCBvbiB0aGUgYWN0aXZlIGVsZW1lbnQuXG4gKi9cbnZhciBuZXdWYWx1ZVByb3AgPSAge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhY3RpdmVFbGVtZW50VmFsdWVQcm9wLmdldC5jYWxsKHRoaXMpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgIC8vIENhc3QgdG8gYSBzdHJpbmcgc28gd2UgY2FuIGRvIGVxdWFsaXR5IGNoZWNrcy5cbiAgICBhY3RpdmVFbGVtZW50VmFsdWUgPSAnJyArIHZhbDtcbiAgICBhY3RpdmVFbGVtZW50VmFsdWVQcm9wLnNldC5jYWxsKHRoaXMsIHZhbCk7XG4gIH1cbn07XG5cbi8qKlxuICogKEZvciBvbGQgSUUuKSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJRCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SUQgPSB0YXJnZXRJRDtcbiAgYWN0aXZlRWxlbWVudFZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuICBhY3RpdmVFbGVtZW50VmFsdWVQcm9wID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICB0YXJnZXQuY29uc3RydWN0b3IucHJvdG90eXBlLFxuICAgICd2YWx1ZSdcbiAgKTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWN0aXZlRWxlbWVudCwgJ3ZhbHVlJywgbmV3VmFsdWVQcm9wKTtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cblxuLyoqXG4gKiAoRm9yIG9sZCBJRS4pIFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBlbGVtZW50LFxuICogaWYgYW55IGV4aXN0cy5cbiAqL1xuZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSB7XG4gIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGRlbGV0ZSByZXN0b3JlcyB0aGUgb3JpZ2luYWwgcHJvcGVydHkgZGVmaW5pdGlvblxuICBkZWxldGUgYWN0aXZlRWxlbWVudC52YWx1ZTtcbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcblxuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudElEID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudFZhbHVlID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudFZhbHVlUHJvcCA9IG51bGw7XG59XG5cbi8qKlxuICogKEZvciBvbGQgSUUuKSBIYW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZlxuICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlDaGFuZ2UobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAhPT0gJ3ZhbHVlJykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgdmFsdWUgPSBuYXRpdmVFdmVudC5zcmNFbGVtZW50LnZhbHVlO1xuICBpZiAodmFsdWUgPT09IGFjdGl2ZUVsZW1lbnRWYWx1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhY3RpdmVFbGVtZW50VmFsdWUgPSB2YWx1ZTtcblxuICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTtcbn1cblxuLyoqXG4gKiBJZiBhIGBjaGFuZ2VgIGV2ZW50IHNob3VsZCBiZSBmaXJlZCwgcmV0dXJucyB0aGUgdGFyZ2V0J3MgSUQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhcmdldElERm9ySW5wdXRFdmVudChcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcElucHV0KSB7XG4gICAgLy8gSW4gbW9kZXJuIGJyb3dzZXJzIChpLmUuLCBub3QgSUU4IG9yIElFOSksIHRoZSBpbnB1dCBldmVudCBpcyBleGFjdGx5XG4gICAgLy8gd2hhdCB3ZSB3YW50IHNvIGZhbGwgdGhyb3VnaCBoZXJlIGFuZCB0cmlnZ2VyIGFuIGFic3RyYWN0IGV2ZW50XG4gICAgcmV0dXJuIHRvcExldmVsVGFyZ2V0SUQ7XG4gIH1cbn1cblxuLy8gRm9yIElFOCBhbmQgSUU5LlxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudElFKFxuICAgIHRvcExldmVsVHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldCxcbiAgICB0b3BMZXZlbFRhcmdldElEKSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wRm9jdXMpIHtcbiAgICAvLyBJbiBJRTgsIHdlIGNhbiBjYXB0dXJlIGFsbW9zdCBhbGwgLnZhbHVlIGNoYW5nZXMgYnkgYWRkaW5nIGFcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGFuZCBsb29raW5nIGZvciBldmVudHMgd2l0aCBwcm9wZXJ0eU5hbWVcbiAgICAvLyBlcXVhbCB0byAndmFsdWUnXG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0b3BMZXZlbFRhcmdldCwgdG9wTGV2ZWxUYXJnZXRJRCk7XG4gIH0gZWxzZSBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEJsdXIpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59XG5cbi8vIEZvciBJRTggYW5kIElFOS5cbmZ1bmN0aW9uIGdldFRhcmdldElERm9ySW5wdXRFdmVudElFKFxuICAgIHRvcExldmVsVHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldCxcbiAgICB0b3BMZXZlbFRhcmdldElEKSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdlIHx8XG4gICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wS2V5VXAgfHxcbiAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duKSB7XG4gICAgLy8gT24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0XG4gICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlXG4gICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGFcbiAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5XG4gICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdFxuICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodFxuICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvXG4gICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgYWN0aXZlRWxlbWVudC52YWx1ZSAhPT0gYWN0aXZlRWxlbWVudFZhbHVlKSB7XG4gICAgICBhY3RpdmVFbGVtZW50VmFsdWUgPSBhY3RpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnRJRDtcbiAgICB9XG4gIH1cbn1cblxuXG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFVzZUNsaWNrRXZlbnQoZWxlbSkge1xuICAvLyBVc2UgdGhlIGBjbGlja2AgZXZlbnQgdG8gZGV0ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0cy5cbiAgLy8gVGhpcyBhcHByb2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFzIGBjaGFuZ2VgIGRvZXMgbm90IGZpcmVcbiAgLy8gdW50aWwgYGJsdXJgIGluIElFOC5cbiAgcmV0dXJuIChcbiAgICBlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmXG4gICAgKGVsZW0udHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBlbGVtLnR5cGUgPT09ICdyYWRpbycpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldElERm9yQ2xpY2tFdmVudChcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcENsaWNrKSB7XG4gICAgcmV0dXJuIHRvcExldmVsVGFyZ2V0SUQ7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xudmFyIENoYW5nZUV2ZW50UGx1Z2luID0ge1xuXG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzfVxuICAgKi9cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudCkge1xuXG4gICAgdmFyIGdldFRhcmdldElERnVuYywgaGFuZGxlRXZlbnRGdW5jO1xuICAgIGlmIChzaG91bGRVc2VDaGFuZ2VFdmVudCh0b3BMZXZlbFRhcmdldCkpIHtcbiAgICAgIGlmIChkb2VzQ2hhbmdlRXZlbnRCdWJibGUpIHtcbiAgICAgICAgZ2V0VGFyZ2V0SURGdW5jID0gZ2V0VGFyZ2V0SURGb3JDaGFuZ2VFdmVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvckNoYW5nZUV2ZW50SUU4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRvcExldmVsVGFyZ2V0KSkge1xuICAgICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgICBnZXRUYXJnZXRJREZ1bmMgPSBnZXRUYXJnZXRJREZvcklucHV0RXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRUYXJnZXRJREZ1bmMgPSBnZXRUYXJnZXRJREZvcklucHV0RXZlbnRJRTtcbiAgICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudElFO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2hvdWxkVXNlQ2xpY2tFdmVudCh0b3BMZXZlbFRhcmdldCkpIHtcbiAgICAgIGdldFRhcmdldElERnVuYyA9IGdldFRhcmdldElERm9yQ2xpY2tFdmVudDtcbiAgICB9XG5cbiAgICBpZiAoZ2V0VGFyZ2V0SURGdW5jKSB7XG4gICAgICB2YXIgdGFyZ2V0SUQgPSBnZXRUYXJnZXRJREZ1bmMoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0SURcbiAgICAgICk7XG4gICAgICBpZiAodGFyZ2V0SUQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgICAgIGV2ZW50VHlwZXMuY2hhbmdlLFxuICAgICAgICAgIHRhcmdldElELFxuICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICk7XG4gICAgICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgICBoYW5kbGVFdmVudEZ1bmMoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0SURcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hhbmdlRXZlbnRQbHVnaW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQ2xpZW50UmVhY3RSb290SW5kZXhcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgbmV4dFJlYWN0Um9vdEluZGV4ID0gMDtcblxudmFyIENsaWVudFJlYWN0Um9vdEluZGV4ID0ge1xuICBjcmVhdGVSZWFjdFJvb3RJbmRleDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5leHRSZWFjdFJvb3RJbmRleCsrO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFJlYWN0Um9vdEluZGV4O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBET01DaGlsZHJlbk9wZXJhdGlvbnNcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRGFuZ2VyID0gcmVxdWlyZShcIi4vRGFuZ2VyXCIpO1xudmFyIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzID0gcmVxdWlyZShcIi4vUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXNcIik7XG5cbnZhciBzZXRUZXh0Q29udGVudCA9IHJlcXVpcmUoXCIuL3NldFRleHRDb250ZW50XCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBJbnNlcnRzIGBjaGlsZE5vZGVgIGFzIGEgY2hpbGQgb2YgYHBhcmVudE5vZGVgIGF0IHRoZSBgaW5kZXhgLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcGFyZW50Tm9kZSBQYXJlbnQgbm9kZSBpbiB3aGljaCB0byBpbnNlcnQuXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNoaWxkTm9kZSBDaGlsZCBub2RlIHRvIGluc2VydC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGNoaWxkLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGluc2VydENoaWxkQXQocGFyZW50Tm9kZSwgY2hpbGROb2RlLCBpbmRleCkge1xuICAvLyBCeSBleHBsb2l0aW5nIGFycmF5cyByZXR1cm5pbmcgYHVuZGVmaW5lZGAgZm9yIGFuIHVuZGVmaW5lZCBpbmRleCwgd2UgY2FuXG4gIC8vIHJlbHkgZXhjbHVzaXZlbHkgb24gYGluc2VydEJlZm9yZShub2RlLCBudWxsKWAgaW5zdGVhZCBvZiBhbHNvIHVzaW5nXG4gIC8vIGBhcHBlbmRDaGlsZChub2RlKWAuIEhvd2V2ZXIsIHVzaW5nIGB1bmRlZmluZWRgIGlzIG5vdCBhbGxvd2VkIGJ5IGFsbFxuICAvLyBicm93c2VycyBzbyB3ZSBtdXN0IHJlcGxhY2UgaXQgd2l0aCBgbnVsbGAuXG4gIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFxuICAgIGNoaWxkTm9kZSxcbiAgICBwYXJlbnROb2RlLmNoaWxkTm9kZXNbaW5kZXhdIHx8IG51bGxcbiAgKTtcbn1cblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciB1cGRhdGluZyB3aXRoIERPTSBjaGlsZHJlbi5cbiAqL1xudmFyIERPTUNoaWxkcmVuT3BlcmF0aW9ucyA9IHtcblxuICBkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cDogRGFuZ2VyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwLFxuXG4gIHVwZGF0ZVRleHRDb250ZW50OiBzZXRUZXh0Q29udGVudCxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbXBvbmVudCdzIGNoaWxkcmVuIGJ5IHByb2Nlc3NpbmcgYSBzZXJpZXMgb2YgdXBkYXRlcy4gVGhlXG4gICAqIHVwZGF0ZSBjb25maWd1cmF0aW9ucyBhcmUgZWFjaCBleHBlY3RlZCB0byBoYXZlIGEgYHBhcmVudE5vZGVgIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5PG9iamVjdD59IHVwZGF0ZXMgTGlzdCBvZiB1cGRhdGUgY29uZmlndXJhdGlvbnMuXG4gICAqIEBwYXJhbSB7YXJyYXk8c3RyaW5nPn0gbWFya3VwTGlzdCBMaXN0IG9mIG1hcmt1cCBzdHJpbmdzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb2Nlc3NVcGRhdGVzOiBmdW5jdGlvbih1cGRhdGVzLCBtYXJrdXBMaXN0KSB7XG4gICAgdmFyIHVwZGF0ZTtcbiAgICAvLyBNYXBwaW5nIGZyb20gcGFyZW50IElEcyB0byBpbml0aWFsIGNoaWxkIG9yZGVyaW5ncy5cbiAgICB2YXIgaW5pdGlhbENoaWxkcmVuID0gbnVsbDtcbiAgICAvLyBMaXN0IG9mIGNoaWxkcmVuIHRoYXQgd2lsbCBiZSBtb3ZlZCBvciByZW1vdmVkLlxuICAgIHZhciB1cGRhdGVkQ2hpbGRyZW4gPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB1cGRhdGUgPSB1cGRhdGVzW2ldO1xuICAgICAgaWYgKHVwZGF0ZS50eXBlID09PSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5NT1ZFX0VYSVNUSU5HIHx8XG4gICAgICAgICAgdXBkYXRlLnR5cGUgPT09IFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLlJFTU9WRV9OT0RFKSB7XG4gICAgICAgIHZhciB1cGRhdGVkSW5kZXggPSB1cGRhdGUuZnJvbUluZGV4O1xuICAgICAgICB2YXIgdXBkYXRlZENoaWxkID0gdXBkYXRlLnBhcmVudE5vZGUuY2hpbGROb2Rlc1t1cGRhdGVkSW5kZXhdO1xuICAgICAgICB2YXIgcGFyZW50SUQgPSB1cGRhdGUucGFyZW50SUQ7XG5cbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICB1cGRhdGVkQ2hpbGQsXG4gICAgICAgICAgJ3Byb2Nlc3NVcGRhdGVzKCk6IFVuYWJsZSB0byBmaW5kIGNoaWxkICVzIG9mIGVsZW1lbnQuIFRoaXMgJyArXG4gICAgICAgICAgJ3Byb2JhYmx5IG1lYW5zIHRoZSBET00gd2FzIHVuZXhwZWN0ZWRseSBtdXRhdGVkIChlLmcuLCBieSB0aGUgJyArXG4gICAgICAgICAgJ2Jyb3dzZXIpLCB1c3VhbGx5IGR1ZSB0byBmb3JnZXR0aW5nIGEgPHRib2R5PiB3aGVuIHVzaW5nIHRhYmxlcywgJyArXG4gICAgICAgICAgJ25lc3RpbmcgdGFncyBsaWtlIDxmb3JtPiwgPHA+LCBvciA8YT4sIG9yIHVzaW5nIG5vbi1TVkcgZWxlbWVudHMgJyArXG4gICAgICAgICAgJ2luIGFuIDxzdmc+IHBhcmVudC4gVHJ5IGluc3BlY3RpbmcgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBlbGVtZW50ICcgK1xuICAgICAgICAgICd3aXRoIFJlYWN0IElEIGAlc2AuJyxcbiAgICAgICAgICB1cGRhdGVkSW5kZXgsXG4gICAgICAgICAgcGFyZW50SURcbiAgICAgICAgKSA6IGludmFyaWFudCh1cGRhdGVkQ2hpbGQpKTtcblxuICAgICAgICBpbml0aWFsQ2hpbGRyZW4gPSBpbml0aWFsQ2hpbGRyZW4gfHwge307XG4gICAgICAgIGluaXRpYWxDaGlsZHJlbltwYXJlbnRJRF0gPSBpbml0aWFsQ2hpbGRyZW5bcGFyZW50SURdIHx8IFtdO1xuICAgICAgICBpbml0aWFsQ2hpbGRyZW5bcGFyZW50SURdW3VwZGF0ZWRJbmRleF0gPSB1cGRhdGVkQ2hpbGQ7XG5cbiAgICAgICAgdXBkYXRlZENoaWxkcmVuID0gdXBkYXRlZENoaWxkcmVuIHx8IFtdO1xuICAgICAgICB1cGRhdGVkQ2hpbGRyZW4ucHVzaCh1cGRhdGVkQ2hpbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZW5kZXJlZE1hcmt1cCA9IERhbmdlci5kYW5nZXJvdXNseVJlbmRlck1hcmt1cChtYXJrdXBMaXN0KTtcblxuICAgIC8vIFJlbW92ZSB1cGRhdGVkIGNoaWxkcmVuIGZpcnN0IHNvIHRoYXQgYHRvSW5kZXhgIGlzIGNvbnNpc3RlbnQuXG4gICAgaWYgKHVwZGF0ZWRDaGlsZHJlbikge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB1cGRhdGVkQ2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdXBkYXRlZENoaWxkcmVuW2pdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodXBkYXRlZENoaWxkcmVuW2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHVwZGF0ZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZXNba107XG4gICAgICBzd2l0Y2ggKHVwZGF0ZS50eXBlKSB7XG4gICAgICAgIGNhc2UgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuSU5TRVJUX01BUktVUDpcbiAgICAgICAgICBpbnNlcnRDaGlsZEF0KFxuICAgICAgICAgICAgdXBkYXRlLnBhcmVudE5vZGUsXG4gICAgICAgICAgICByZW5kZXJlZE1hcmt1cFt1cGRhdGUubWFya3VwSW5kZXhdLFxuICAgICAgICAgICAgdXBkYXRlLnRvSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLk1PVkVfRVhJU1RJTkc6XG4gICAgICAgICAgaW5zZXJ0Q2hpbGRBdChcbiAgICAgICAgICAgIHVwZGF0ZS5wYXJlbnROb2RlLFxuICAgICAgICAgICAgaW5pdGlhbENoaWxkcmVuW3VwZGF0ZS5wYXJlbnRJRF1bdXBkYXRlLmZyb21JbmRleF0sXG4gICAgICAgICAgICB1cGRhdGUudG9JbmRleFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuVEVYVF9DT05URU5UOlxuICAgICAgICAgIHNldFRleHRDb250ZW50KFxuICAgICAgICAgICAgdXBkYXRlLnBhcmVudE5vZGUsXG4gICAgICAgICAgICB1cGRhdGUudGV4dENvbnRlbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLlJFTU9WRV9OT0RFOlxuICAgICAgICAgIC8vIEFscmVhZHkgcmVtb3ZlZCBieSB0aGUgZm9yLWxvb3AgYWJvdmUuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRE9NQ2hpbGRyZW5PcGVyYXRpb25zO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UkU5TlEyaHBiR1J5Wlc1UGNHVnlZWFJwYjI1ekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkVUMDFEYUdsc1pISmxiazl3WlhKaGRHbHZibk5jYmlBcUlFQjBlWEJsWTJobFkydHpJSE4wWVhScFl5MXZibXg1WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1JHRnVaMlZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZSR0Z1WjJWeVhDSXBPMXh1ZG1GeUlGSmxZV04wVFhWc2RHbERhR2xzWkZWd1pHRjBaVlI1Y0dWeklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUk5kV3gwYVVOb2FXeGtWWEJrWVhSbFZIbHdaWE5jSWlrN1hHNWNiblpoY2lCelpYUlVaWGgwUTI5dWRHVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwzTmxkRlJsZUhSRGIyNTBaVzUwWENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVMeW9xWEc0Z0tpQkpibk5sY25SeklHQmphR2xzWkU1dlpHVmdJR0Z6SUdFZ1kyaHBiR1FnYjJZZ1lIQmhjbVZ1ZEU1dlpHVmdJR0YwSUhSb1pTQmdhVzVrWlhoZ0xseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdjR0Z5Wlc1MFRtOWtaU0JRWVhKbGJuUWdibTlrWlNCcGJpQjNhR2xqYUNCMGJ5QnBibk5sY25RdVhHNGdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUdOb2FXeGtUbTlrWlNCRGFHbHNaQ0J1YjJSbElIUnZJR2x1YzJWeWRDNWNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JwYm1SbGVDQkpibVJsZUNCaGRDQjNhR2xqYUNCMGJ5QnBibk5sY25RZ2RHaGxJR05vYVd4a0xseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpOWNibVoxYm1OMGFXOXVJR2x1YzJWeWRFTm9hV3hrUVhRb2NHRnlaVzUwVG05a1pTd2dZMmhwYkdST2IyUmxMQ0JwYm1SbGVDa2dlMXh1SUNBdkx5QkNlU0JsZUhCc2IybDBhVzVuSUdGeWNtRjVjeUJ5WlhSMWNtNXBibWNnWUhWdVpHVm1hVzVsWkdBZ1ptOXlJR0Z1SUhWdVpHVm1hVzVsWkNCcGJtUmxlQ3dnZDJVZ1kyRnVYRzRnSUM4dklISmxiSGtnWlhoamJIVnphWFpsYkhrZ2IyNGdZR2x1YzJWeWRFSmxabTl5WlNodWIyUmxMQ0J1ZFd4c0tXQWdhVzV6ZEdWaFpDQnZaaUJoYkhOdklIVnphVzVuWEc0Z0lDOHZJR0JoY0hCbGJtUkRhR2xzWkNodWIyUmxLV0F1SUVodmQyVjJaWElzSUhWemFXNW5JR0IxYm1SbFptbHVaV1JnSUdseklHNXZkQ0JoYkd4dmQyVmtJR0o1SUdGc2JGeHVJQ0F2THlCaWNtOTNjMlZ5Y3lCemJ5QjNaU0J0ZFhOMElISmxjR3hoWTJVZ2FYUWdkMmwwYUNCZ2JuVnNiR0F1WEc0Z0lIQmhjbVZ1ZEU1dlpHVXVhVzV6WlhKMFFtVm1iM0psS0Z4dUlDQWdJR05vYVd4a1RtOWtaU3hjYmlBZ0lDQndZWEpsYm5ST2IyUmxMbU5vYVd4a1RtOWtaWE5iYVc1a1pYaGRJSHg4SUc1MWJHeGNiaUFnS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJQY0dWeVlYUnBiMjV6SUdadmNpQjFjR1JoZEdsdVp5QjNhWFJvSUVSUFRTQmphR2xzWkhKbGJpNWNiaUFxTDF4dWRtRnlJRVJQVFVOb2FXeGtjbVZ1VDNCbGNtRjBhVzl1Y3lBOUlIdGNibHh1SUNCa1lXNW5aWEp2ZFhOc2VWSmxjR3hoWTJWT2IyUmxWMmwwYUUxaGNtdDFjRG9nUkdGdVoyVnlMbVJoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd0xGeHVYRzRnSUhWd1pHRjBaVlJsZUhSRGIyNTBaVzUwT2lCelpYUlVaWGgwUTI5dWRHVnVkQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWEJrWVhSbGN5QmhJR052YlhCdmJtVnVkQ2R6SUdOb2FXeGtjbVZ1SUdKNUlIQnliMk5sYzNOcGJtY2dZU0J6WlhKcFpYTWdiMllnZFhCa1lYUmxjeTRnVkdobFhHNGdJQ0FxSUhWd1pHRjBaU0JqYjI1bWFXZDFjbUYwYVc5dWN5QmhjbVVnWldGamFDQmxlSEJsWTNSbFpDQjBieUJvWVhabElHRWdZSEJoY21WdWRFNXZaR1ZnSUhCeWIzQmxjblI1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyRnljbUY1UEc5aWFtVmpkRDU5SUhWd1pHRjBaWE1nVEdsemRDQnZaaUIxY0dSaGRHVWdZMjl1Wm1sbmRYSmhkR2x2Ym5NdVhHNGdJQ0FxSUVCd1lYSmhiU0I3WVhKeVlYazhjM1J5YVc1blBuMGdiV0Z5YTNWd1RHbHpkQ0JNYVhOMElHOW1JRzFoY210MWNDQnpkSEpwYm1kekxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lIQnliMk5sYzNOVmNHUmhkR1Z6T2lCbWRXNWpkR2x2YmloMWNHUmhkR1Z6TENCdFlYSnJkWEJNYVhOMEtTQjdYRzRnSUNBZ2RtRnlJSFZ3WkdGMFpUdGNiaUFnSUNBdkx5Qk5ZWEJ3YVc1bklHWnliMjBnY0dGeVpXNTBJRWxFY3lCMGJ5QnBibWwwYVdGc0lHTm9hV3hrSUc5eVpHVnlhVzVuY3k1Y2JpQWdJQ0IyWVhJZ2FXNXBkR2xoYkVOb2FXeGtjbVZ1SUQwZ2JuVnNiRHRjYmlBZ0lDQXZMeUJNYVhOMElHOW1JR05vYVd4a2NtVnVJSFJvWVhRZ2QybHNiQ0JpWlNCdGIzWmxaQ0J2Y2lCeVpXMXZkbVZrTGx4dUlDQWdJSFpoY2lCMWNHUmhkR1ZrUTJocGJHUnlaVzRnUFNCdWRXeHNPMXh1WEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0IxY0dSaGRHVnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCMWNHUmhkR1VnUFNCMWNHUmhkR1Z6VzJsZE8xeHVJQ0FnSUNBZ2FXWWdLSFZ3WkdGMFpTNTBlWEJsSUQwOVBTQlNaV0ZqZEUxMWJIUnBRMmhwYkdSVmNHUmhkR1ZVZVhCbGN5NU5UMVpGWDBWWVNWTlVTVTVISUh4OFhHNGdJQ0FnSUNBZ0lDQWdkWEJrWVhSbExuUjVjR1VnUFQwOUlGSmxZV04wVFhWc2RHbERhR2xzWkZWd1pHRjBaVlI1Y0dWekxsSkZUVTlXUlY5T1QwUkZLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQjFjR1JoZEdWa1NXNWtaWGdnUFNCMWNHUmhkR1V1Wm5KdmJVbHVaR1Y0TzF4dUlDQWdJQ0FnSUNCMllYSWdkWEJrWVhSbFpFTm9hV3hrSUQwZ2RYQmtZWFJsTG5CaGNtVnVkRTV2WkdVdVkyaHBiR1JPYjJSbGMxdDFjR1JoZEdWa1NXNWtaWGhkTzF4dUlDQWdJQ0FnSUNCMllYSWdjR0Z5Wlc1MFNVUWdQU0IxY0dSaGRHVXVjR0Z5Wlc1MFNVUTdYRzVjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSUNCMWNHUmhkR1ZrUTJocGJHUXNYRzRnSUNBZ0lDQWdJQ0FnSjNCeWIyTmxjM05WY0dSaGRHVnpLQ2s2SUZWdVlXSnNaU0IwYnlCbWFXNWtJR05vYVd4a0lDVnpJRzltSUdWc1pXMWxiblF1SUZSb2FYTWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0ozQnliMkpoWW14NUlHMWxZVzV6SUhSb1pTQkVUMDBnZDJGeklIVnVaWGh3WldOMFpXUnNlU0J0ZFhSaGRHVmtJQ2hsTG1jdUxDQmllU0IwYUdVZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjJKeWIzZHpaWElwTENCMWMzVmhiR3g1SUdSMVpTQjBieUJtYjNKblpYUjBhVzVuSUdFZ1BIUmliMlI1UGlCM2FHVnVJSFZ6YVc1bklIUmhZbXhsY3l3Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjI1bGMzUnBibWNnZEdGbmN5QnNhV3RsSUR4bWIzSnRQaXdnUEhBK0xDQnZjaUE4WVQ0c0lHOXlJSFZ6YVc1bklHNXZiaTFUVmtjZ1pXeGxiV1Z1ZEhNZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjJsdUlHRnVJRHh6ZG1jK0lIQmhjbVZ1ZEM0Z1ZISjVJR2x1YzNCbFkzUnBibWNnZEdobElHTm9hV3hrSUc1dlpHVnpJRzltSUhSb1pTQmxiR1Z0Wlc1MElDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkM2FYUm9JRkpsWVdOMElFbEVJR0FsYzJBdUp5eGNiaUFnSUNBZ0lDQWdJQ0IxY0dSaGRHVmtTVzVrWlhnc1hHNGdJQ0FnSUNBZ0lDQWdjR0Z5Wlc1MFNVUmNiaUFnSUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoMWNHUmhkR1ZrUTJocGJHUXBLVHRjYmx4dUlDQWdJQ0FnSUNCcGJtbDBhV0ZzUTJocGJHUnlaVzRnUFNCcGJtbDBhV0ZzUTJocGJHUnlaVzRnZkh3Z2UzMDdYRzRnSUNBZ0lDQWdJR2x1YVhScFlXeERhR2xzWkhKbGJsdHdZWEpsYm5SSlJGMGdQU0JwYm1sMGFXRnNRMmhwYkdSeVpXNWJjR0Z5Wlc1MFNVUmRJSHg4SUZ0ZE8xeHVJQ0FnSUNBZ0lDQnBibWwwYVdGc1EyaHBiR1J5Wlc1YmNHRnlaVzUwU1VSZFczVndaR0YwWldSSmJtUmxlRjBnUFNCMWNHUmhkR1ZrUTJocGJHUTdYRzVjYmlBZ0lDQWdJQ0FnZFhCa1lYUmxaRU5vYVd4a2NtVnVJRDBnZFhCa1lYUmxaRU5vYVd4a2NtVnVJSHg4SUZ0ZE8xeHVJQ0FnSUNBZ0lDQjFjR1JoZEdWa1EyaHBiR1J5Wlc0dWNIVnphQ2gxY0dSaGRHVmtRMmhwYkdRcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhaaGNpQnlaVzVrWlhKbFpFMWhjbXQxY0NBOUlFUmhibWRsY2k1a1lXNW5aWEp2ZFhOc2VWSmxibVJsY2sxaGNtdDFjQ2h0WVhKcmRYQk1hWE4wS1R0Y2JseHVJQ0FnSUM4dklGSmxiVzkyWlNCMWNHUmhkR1ZrSUdOb2FXeGtjbVZ1SUdacGNuTjBJSE52SUhSb1lYUWdZSFJ2U1c1a1pYaGdJR2x6SUdOdmJuTnBjM1JsYm5RdVhHNGdJQ0FnYVdZZ0tIVndaR0YwWldSRGFHbHNaSEpsYmlrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FpQTlJREE3SUdvZ1BDQjFjR1JoZEdWa1EyaHBiR1J5Wlc0dWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJQ0FnZFhCa1lYUmxaRU5vYVd4a2NtVnVXMnBkTG5CaGNtVnVkRTV2WkdVdWNtVnRiM1psUTJocGJHUW9kWEJrWVhSbFpFTm9hV3hrY21WdVcycGRLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1iM0lnS0haaGNpQnJJRDBnTURzZ2F5QThJSFZ3WkdGMFpYTXViR1Z1WjNSb095QnJLeXNwSUh0Y2JpQWdJQ0FnSUhWd1pHRjBaU0E5SUhWd1pHRjBaWE5iYTEwN1hHNGdJQ0FnSUNCemQybDBZMmdnS0hWd1pHRjBaUzUwZVhCbEtTQjdYRzRnSUNBZ0lDQWdJR05oYzJVZ1VtVmhZM1JOZFd4MGFVTm9hV3hrVlhCa1lYUmxWSGx3WlhNdVNVNVRSVkpVWDAxQlVrdFZVRHBjYmlBZ0lDQWdJQ0FnSUNCcGJuTmxjblJEYUdsc1pFRjBLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RYQmtZWFJsTG5CaGNtVnVkRTV2WkdVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5Wlc1a1pYSmxaRTFoY210MWNGdDFjR1JoZEdVdWJXRnlhM1Z3U1c1a1pYaGRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RYQmtZWFJsTG5SdlNXNWtaWGhjYmlBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ0lDQmpZWE5sSUZKbFlXTjBUWFZzZEdsRGFHbHNaRlZ3WkdGMFpWUjVjR1Z6TGsxUFZrVmZSVmhKVTFSSlRrYzZYRzRnSUNBZ0lDQWdJQ0FnYVc1elpYSjBRMmhwYkdSQmRDaGNiaUFnSUNBZ0lDQWdJQ0FnSUhWd1pHRjBaUzV3WVhKbGJuUk9iMlJsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdhVzVwZEdsaGJFTm9hV3hrY21WdVczVndaR0YwWlM1d1lYSmxiblJKUkYxYmRYQmtZWFJsTG1aeWIyMUpibVJsZUYwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IxY0dSaGRHVXVkRzlKYm1SbGVGeHVJQ0FnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdVbVZoWTNSTmRXeDBhVU5vYVd4a1ZYQmtZWFJsVkhsd1pYTXVWRVZZVkY5RFQwNVVSVTVVT2x4dUlDQWdJQ0FnSUNBZ0lITmxkRlJsZUhSRGIyNTBaVzUwS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdkWEJrWVhSbExuQmhjbVZ1ZEU1dlpHVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCMWNHUmhkR1V1ZEdWNGRFTnZiblJsYm5SY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0JqWVhObElGSmxZV04wVFhWc2RHbERhR2xzWkZWd1pHRjBaVlI1Y0dWekxsSkZUVTlXUlY5T1QwUkZPbHh1SUNBZ0lDQWdJQ0FnSUM4dklFRnNjbVZoWkhrZ2NtVnRiM1psWkNCaWVTQjBhR1VnWm05eUxXeHZiM0FnWVdKdmRtVXVYRzRnSUNBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUkU5TlEyaHBiR1J5Wlc1UGNHVnlZWFJwYjI1ek8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBET01Qcm9wZXJ0eVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4vKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuZnVuY3Rpb24gY2hlY2tNYXNrKHZhbHVlLCBiaXRtYXNrKSB7XG4gIHJldHVybiAodmFsdWUgJiBiaXRtYXNrKSA9PT0gYml0bWFzaztcbn1cblxudmFyIERPTVByb3BlcnR5SW5qZWN0aW9uID0ge1xuICAvKipcbiAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQsIGNhbWVsY2FzZWQgcHJvcGVydHkgbmFtZXMgdG8gYSBjb25maWd1cmF0aW9uIHRoYXRcbiAgICogc3BlY2lmaWVzIGhvdyB0aGUgYXNzb2NpYXRlZCBET00gcHJvcGVydHkgc2hvdWxkIGJlIGFjY2Vzc2VkIG9yIHJlbmRlcmVkLlxuICAgKi9cbiAgTVVTVF9VU0VfQVRUUklCVVRFOiAweDEsXG4gIE1VU1RfVVNFX1BST1BFUlRZOiAweDIsXG4gIEhBU19TSURFX0VGRkVDVFM6IDB4NCxcbiAgSEFTX0JPT0xFQU5fVkFMVUU6IDB4OCxcbiAgSEFTX05VTUVSSUNfVkFMVUU6IDB4MTAsXG4gIEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFOiAweDIwIHwgMHgxMCxcbiAgSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRTogMHg0MCxcblxuICAvKipcbiAgICogSW5qZWN0IHNvbWUgc3BlY2lhbGl6ZWQga25vd2xlZGdlIGFib3V0IHRoZSBET00uIFRoaXMgdGFrZXMgYSBjb25maWcgb2JqZWN0XG4gICAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiBpc0N1c3RvbUF0dHJpYnV0ZTogZnVuY3Rpb24gdGhhdCBnaXZlbiBhbiBhdHRyaWJ1dGUgbmFtZSB3aWxsIHJldHVybiB0cnVlXG4gICAqIGlmIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00gdmVyYmF0aW0uIFVzZWZ1bCBmb3IgZGF0YS0qIG9yIGFyaWEtKlxuICAgKiBhdHRyaWJ1dGVzIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byBlbnVtZXJhdGUgYWxsIG9mIHRoZSBwb3NzaWJsZVxuICAgKiBhdHRyaWJ1dGUgbmFtZXMsXG4gICAqXG4gICAqIFByb3BlcnRpZXM6IG9iamVjdCBtYXBwaW5nIERPTSBwcm9wZXJ0eSBuYW1lIHRvIG9uZSBvZiB0aGVcbiAgICogRE9NUHJvcGVydHlJbmplY3Rpb24gY29uc3RhbnRzIG9yIG51bGwuIElmIHlvdXIgYXR0cmlidXRlIGlzbid0IGluIGhlcmUsXG4gICAqIGl0IHdvbid0IGdldCB3cml0dGVuIHRvIHRoZSBET00uXG4gICAqXG4gICAqIERPTUF0dHJpYnV0ZU5hbWVzOiBvYmplY3QgbWFwcGluZyBSZWFjdCBhdHRyaWJ1dGUgbmFtZSB0byB0aGUgRE9NXG4gICAqIGF0dHJpYnV0ZSBuYW1lLiBBdHRyaWJ1dGUgbmFtZXMgbm90IHNwZWNpZmllZCB1c2UgdGhlICoqbG93ZXJjYXNlKipcbiAgICogbm9ybWFsaXplZCBuYW1lLlxuICAgKlxuICAgKiBET01Qcm9wZXJ0eU5hbWVzOiBzaW1pbGFyIHRvIERPTUF0dHJpYnV0ZU5hbWVzIGJ1dCBmb3IgRE9NIHByb3BlcnRpZXMuXG4gICAqIFByb3BlcnR5IG5hbWVzIG5vdCBzcGVjaWZpZWQgdXNlIHRoZSBub3JtYWxpemVkIG5hbWUuXG4gICAqXG4gICAqIERPTU11dGF0aW9uTWV0aG9kczogUHJvcGVydGllcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBtdXRhdGlvbiBtZXRob2RzLiBJZlxuICAgKiBgdmFsdWVgIGlzIHVuZGVmaW5lZCwgdGhlIG11dGF0aW9uIG1ldGhvZCBzaG91bGQgdW5zZXQgdGhlIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZG9tUHJvcGVydHlDb25maWcgdGhlIGNvbmZpZyBhcyBkZXNjcmliZWQgYWJvdmUuXG4gICAqL1xuICBpbmplY3RET01Qcm9wZXJ0eUNvbmZpZzogZnVuY3Rpb24oZG9tUHJvcGVydHlDb25maWcpIHtcbiAgICB2YXIgUHJvcGVydGllcyA9IGRvbVByb3BlcnR5Q29uZmlnLlByb3BlcnRpZXMgfHwge307XG4gICAgdmFyIERPTUF0dHJpYnV0ZU5hbWVzID0gZG9tUHJvcGVydHlDb25maWcuRE9NQXR0cmlidXRlTmFtZXMgfHwge307XG4gICAgdmFyIERPTVByb3BlcnR5TmFtZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5ET01Qcm9wZXJ0eU5hbWVzIHx8IHt9O1xuICAgIHZhciBET01NdXRhdGlvbk1ldGhvZHMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5ET01NdXRhdGlvbk1ldGhvZHMgfHwge307XG5cbiAgICBpZiAoZG9tUHJvcGVydHlDb25maWcuaXNDdXN0b21BdHRyaWJ1dGUpIHtcbiAgICAgIERPTVByb3BlcnR5Ll9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5wdXNoKFxuICAgICAgICBkb21Qcm9wZXJ0eUNvbmZpZy5pc0N1c3RvbUF0dHJpYnV0ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBQcm9wZXJ0aWVzKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAhRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpLFxuICAgICAgICAnaW5qZWN0RE9NUHJvcGVydHlDb25maWcoLi4uKTogWW91XFwncmUgdHJ5aW5nIHRvIGluamVjdCBET00gcHJvcGVydHkgJyArXG4gICAgICAgICdcXCclc1xcJyB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGluamVjdGVkLiBZb3UgbWF5IGJlIGFjY2lkZW50YWxseSAnICtcbiAgICAgICAgJ2luamVjdGluZyB0aGUgc2FtZSBET00gcHJvcGVydHkgY29uZmlnIHR3aWNlLCBvciB5b3UgbWF5IGJlICcgK1xuICAgICAgICAnaW5qZWN0aW5nIHR3byBjb25maWdzIHRoYXQgaGF2ZSBjb25mbGljdGluZyBwcm9wZXJ0eSBuYW1lcy4nLFxuICAgICAgICBwcm9wTmFtZVxuICAgICAgKSA6IGludmFyaWFudCghRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSk7XG5cbiAgICAgIERPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lW3Byb3BOYW1lXSA9IHRydWU7XG5cbiAgICAgIHZhciBsb3dlckNhc2VkID0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2xvd2VyQ2FzZWRdID0gcHJvcE5hbWU7XG5cbiAgICAgIGlmIChET01BdHRyaWJ1dGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBET01BdHRyaWJ1dGVOYW1lc1twcm9wTmFtZV07XG4gICAgICAgIERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2F0dHJpYnV0ZU5hbWVdID0gcHJvcE5hbWU7XG4gICAgICAgIERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbcHJvcE5hbWVdID0gYXR0cmlidXRlTmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbcHJvcE5hbWVdID0gbG93ZXJDYXNlZDtcbiAgICAgIH1cblxuICAgICAgRE9NUHJvcGVydHkuZ2V0UHJvcGVydHlOYW1lW3Byb3BOYW1lXSA9XG4gICAgICAgIERPTVByb3BlcnR5TmFtZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpID9cbiAgICAgICAgICBET01Qcm9wZXJ0eU5hbWVzW3Byb3BOYW1lXSA6XG4gICAgICAgICAgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChET01NdXRhdGlvbk1ldGhvZHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIERPTVByb3BlcnR5LmdldE11dGF0aW9uTWV0aG9kW3Byb3BOYW1lXSA9IERPTU11dGF0aW9uTWV0aG9kc1twcm9wTmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBET01Qcm9wZXJ0eS5nZXRNdXRhdGlvbk1ldGhvZFtwcm9wTmFtZV0gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcENvbmZpZyA9IFByb3BlcnRpZXNbcHJvcE5hbWVdO1xuICAgICAgRE9NUHJvcGVydHkubXVzdFVzZUF0dHJpYnV0ZVtwcm9wTmFtZV0gPVxuICAgICAgICBjaGVja01hc2socHJvcENvbmZpZywgRE9NUHJvcGVydHlJbmplY3Rpb24uTVVTVF9VU0VfQVRUUklCVVRFKTtcbiAgICAgIERPTVByb3BlcnR5Lm11c3RVc2VQcm9wZXJ0eVtwcm9wTmFtZV0gPVxuICAgICAgICBjaGVja01hc2socHJvcENvbmZpZywgRE9NUHJvcGVydHlJbmplY3Rpb24uTVVTVF9VU0VfUFJPUEVSVFkpO1xuICAgICAgRE9NUHJvcGVydHkuaGFzU2lkZUVmZmVjdHNbcHJvcE5hbWVdID1cbiAgICAgICAgY2hlY2tNYXNrKHByb3BDb25maWcsIERPTVByb3BlcnR5SW5qZWN0aW9uLkhBU19TSURFX0VGRkVDVFMpO1xuICAgICAgRE9NUHJvcGVydHkuaGFzQm9vbGVhblZhbHVlW3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxVRSk7XG4gICAgICBET01Qcm9wZXJ0eS5oYXNOdW1lcmljVmFsdWVbcHJvcE5hbWVdID1cbiAgICAgICAgY2hlY2tNYXNrKHByb3BDb25maWcsIERPTVByb3BlcnR5SW5qZWN0aW9uLkhBU19OVU1FUklDX1ZBTFVFKTtcbiAgICAgIERPTVByb3BlcnR5Lmhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlW3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5IQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSk7XG4gICAgICBET01Qcm9wZXJ0eS5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlW3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5IQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFKTtcblxuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgIURPTVByb3BlcnR5Lm11c3RVc2VBdHRyaWJ1dGVbcHJvcE5hbWVdIHx8XG4gICAgICAgICAgIURPTVByb3BlcnR5Lm11c3RVc2VQcm9wZXJ0eVtwcm9wTmFtZV0sXG4gICAgICAgICdET01Qcm9wZXJ0eTogQ2Fubm90IHJlcXVpcmUgdXNpbmcgYm90aCBhdHRyaWJ1dGUgYW5kIHByb3BlcnR5OiAlcycsXG4gICAgICAgIHByb3BOYW1lXG4gICAgICApIDogaW52YXJpYW50KCFET01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW3Byb3BOYW1lXSB8fFxuICAgICAgICAhRE9NUHJvcGVydHkubXVzdFVzZVByb3BlcnR5W3Byb3BOYW1lXSkpO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgRE9NUHJvcGVydHkubXVzdFVzZVByb3BlcnR5W3Byb3BOYW1lXSB8fFxuICAgICAgICAgICFET01Qcm9wZXJ0eS5oYXNTaWRlRWZmZWN0c1twcm9wTmFtZV0sXG4gICAgICAgICdET01Qcm9wZXJ0eTogUHJvcGVydGllcyB0aGF0IGhhdmUgc2lkZSBlZmZlY3RzIG11c3QgdXNlIHByb3BlcnR5OiAlcycsXG4gICAgICAgIHByb3BOYW1lXG4gICAgICApIDogaW52YXJpYW50KERPTVByb3BlcnR5Lm11c3RVc2VQcm9wZXJ0eVtwcm9wTmFtZV0gfHxcbiAgICAgICAgIURPTVByb3BlcnR5Lmhhc1NpZGVFZmZlY3RzW3Byb3BOYW1lXSkpO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgISFET01Qcm9wZXJ0eS5oYXNCb29sZWFuVmFsdWVbcHJvcE5hbWVdICtcbiAgICAgICAgICAhIURPTVByb3BlcnR5Lmhhc051bWVyaWNWYWx1ZVtwcm9wTmFtZV0gK1xuICAgICAgICAgICEhRE9NUHJvcGVydHkuaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZVtwcm9wTmFtZV0gPD0gMSxcbiAgICAgICAgJ0RPTVByb3BlcnR5OiBWYWx1ZSBjYW4gYmUgb25lIG9mIGJvb2xlYW4sIG92ZXJsb2FkZWQgYm9vbGVhbiwgb3IgJyArXG4gICAgICAgICdudW1lcmljIHZhbHVlLCBidXQgbm90IGEgY29tYmluYXRpb246ICVzJyxcbiAgICAgICAgcHJvcE5hbWVcbiAgICAgICkgOiBpbnZhcmlhbnQoISFET01Qcm9wZXJ0eS5oYXNCb29sZWFuVmFsdWVbcHJvcE5hbWVdICtcbiAgICAgICAgISFET01Qcm9wZXJ0eS5oYXNOdW1lcmljVmFsdWVbcHJvcE5hbWVdICtcbiAgICAgICAgISFET01Qcm9wZXJ0eS5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlW3Byb3BOYW1lXSA8PSAxKSk7XG4gICAgfVxuICB9XG59O1xudmFyIGRlZmF1bHRWYWx1ZUNhY2hlID0ge307XG5cbi8qKlxuICogRE9NUHJvcGVydHkgZXhwb3J0cyBsb29rdXAgb2JqZWN0cyB0aGF0IGNhbiBiZSB1c2VkIGxpa2UgZnVuY3Rpb25zOlxuICpcbiAqICAgPiBET01Qcm9wZXJ0eS5pc1ZhbGlkWydpZCddXG4gKiAgIHRydWVcbiAqICAgPiBET01Qcm9wZXJ0eS5pc1ZhbGlkWydmb29iYXInXVxuICogICB1bmRlZmluZWRcbiAqXG4gKiBBbHRob3VnaCB0aGlzIG1heSBiZSBjb25mdXNpbmcsIGl0IHBlcmZvcm1zIGJldHRlciBpbiBnZW5lcmFsLlxuICpcbiAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20va2V5LWV4aXN0c1xuICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9rZXktbWlzc2luZ1xuICovXG52YXIgRE9NUHJvcGVydHkgPSB7XG5cbiAgSURfQVRUUklCVVRFX05BTUU6ICdkYXRhLXJlYWN0aWQnLFxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHByb3BlcnR5IG5hbWUgaXMgYSBzdGFuZGFyZCBwcm9wZXJ0eS5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGlzU3RhbmRhcmROYW1lOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIGxvd2VyY2FzZSBwcm9wZXJ0eSBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbiwgdXNlZFxuICAgKiB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgcHJvcGVydGllcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGdldFBvc3NpYmxlU3RhbmRhcmROYW1lOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQgbmFtZXMgdG8gYXR0cmlidXRlIG5hbWVzIHRoYXQgZGlmZmVyLiBBdHRyaWJ1dGVcbiAgICogbmFtZXMgYXJlIHVzZWQgd2hlbiByZW5kZXJpbmcgbWFya3VwIG9yIHdpdGggYCpBdHRyaWJ1dGUoKWAuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnZXRBdHRyaWJ1dGVOYW1lOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQgbmFtZXMgdG8gcHJvcGVydGllcyBvbiBET00gbm9kZSBpbnN0YW5jZXMuXG4gICAqIChUaGlzIGluY2x1ZGVzIHByb3BlcnRpZXMgdGhhdCBtdXRhdGUgZHVlIHRvIGV4dGVybmFsIGZhY3RvcnMuKVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgZ2V0UHJvcGVydHlOYW1lOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIG5vcm1hbGl6ZWQgbmFtZXMgdG8gbXV0YXRpb24gbWV0aG9kcy4gVGhpcyB3aWxsIG9ubHkgZXhpc3QgaWZcbiAgICogbXV0YXRpb24gY2Fubm90IGJlIHNldCBzaW1wbHkgYnkgdGhlIHByb3BlcnR5IG9yIGBzZXRBdHRyaWJ1dGUoKWAuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnZXRNdXRhdGlvbk1ldGhvZDoge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgYWNjZXNzZWQgYW5kIG11dGF0ZWQgYXMgYW4gb2JqZWN0IHByb3BlcnR5LlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgbXVzdFVzZUF0dHJpYnV0ZToge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgYWNjZXNzZWQgYW5kIG11dGF0ZWQgdXNpbmcgYCpBdHRyaWJ1dGUoKWAuXG4gICAqIChUaGlzIGluY2x1ZGVzIGFueXRoaW5nIHRoYXQgZmFpbHMgYDxwcm9wTmFtZT4gaW4gPGVsZW1lbnQ+YC4pXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBtdXN0VXNlUHJvcGVydHk6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCBzZXR0aW5nIGEgdmFsdWUgY2F1c2VzIHNpZGUgZWZmZWN0cyBzdWNoIGFzIHRyaWdnZXJpbmdcbiAgICogcmVzb3VyY2VzIHRvIGJlIGxvYWRlZCBvciB0ZXh0IHNlbGVjdGlvbiBjaGFuZ2VzLiBXZSBtdXN0IGVuc3VyZSB0aGF0XG4gICAqIHRoZSB2YWx1ZSBpcyBvbmx5IHNldCBpZiBpdCBoYXMgY2hhbmdlZC5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGhhc1NpZGVFZmZlY3RzOiB7fSxcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBoYXNCb29sZWFuVmFsdWU6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIG51bWVyaWMgb3IgcGFyc2UgYXMgYVxuICAgKiBudW1lcmljIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHNldCB0byBhIGZhbHNleSB2YWx1ZS5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGhhc051bWVyaWNWYWx1ZToge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlXG4gICAqIG51bWVyaWMgYW5kIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gc2V0IHRvIGEgZmFsc2V5IHZhbHVlLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgaGFzUG9zaXRpdmVOdW1lcmljVmFsdWU6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgYXMgd2VsbCBhcyB3aXRoIGEgdmFsdWUuIFJlbW92ZWRcbiAgICogd2hlbiBzdHJpY3RseSBlcXVhbCB0byBmYWxzZTsgcHJlc2VudCB3aXRob3V0IGEgdmFsdWUgd2hlbiBzdHJpY3RseSBlcXVhbFxuICAgKiB0byB0cnVlOyBwcmVzZW50IHdpdGggYSB2YWx1ZSBvdGhlcndpc2UuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBoYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlOiB7fSxcblxuICAvKipcbiAgICogQWxsIG9mIHRoZSBpc0N1c3RvbUF0dHJpYnV0ZSgpIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBpbmplY3RlZC5cbiAgICovXG4gIF9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uczogW10sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgcHJvcGVydHkgbmFtZSBpcyBhIGN1c3RvbSBhdHRyaWJ1dGUuXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGlzQ3VzdG9tQXR0cmlidXRlOiBmdW5jdGlvbihhdHRyaWJ1dGVOYW1lKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBET01Qcm9wZXJ0eS5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpc0N1c3RvbUF0dHJpYnV0ZUZuID0gRE9NUHJvcGVydHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zW2ldO1xuICAgICAgaWYgKGlzQ3VzdG9tQXR0cmlidXRlRm4oYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBET00gcHJvcGVydHkgKGkuZS4sIG5vdCBhblxuICAgKiBhdHRyaWJ1dGUpLiBNb3N0IGRlZmF1bHQgdmFsdWVzIGFyZSAnJyBvciBmYWxzZSwgYnV0IG5vdCBhbGwuIFdvcnNlIHlldCxcbiAgICogc29tZSAoaW4gcGFydGljdWxhciwgYHR5cGVgKSB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBlbGVtZW50LlxuICAgKlxuICAgKiBUT0RPOiBJcyBpdCBiZXR0ZXIgdG8gZ3JhYiBhbGwgdGhlIHBvc3NpYmxlIHByb3BlcnRpZXMgd2hlbiBjcmVhdGluZyBhblxuICAgKiBlbGVtZW50IHRvIGF2b2lkIGhhdmluZyB0byBjcmVhdGUgdGhlIHNhbWUgZWxlbWVudCB0d2ljZT9cbiAgICovXG4gIGdldERlZmF1bHRWYWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbihub2RlTmFtZSwgcHJvcCkge1xuICAgIHZhciBub2RlRGVmYXVsdHMgPSBkZWZhdWx0VmFsdWVDYWNoZVtub2RlTmFtZV07XG4gICAgdmFyIHRlc3RFbGVtZW50O1xuICAgIGlmICghbm9kZURlZmF1bHRzKSB7XG4gICAgICBkZWZhdWx0VmFsdWVDYWNoZVtub2RlTmFtZV0gPSBub2RlRGVmYXVsdHMgPSB7fTtcbiAgICB9XG4gICAgaWYgKCEocHJvcCBpbiBub2RlRGVmYXVsdHMpKSB7XG4gICAgICB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpO1xuICAgICAgbm9kZURlZmF1bHRzW3Byb3BdID0gdGVzdEVsZW1lbnRbcHJvcF07XG4gICAgfVxuICAgIHJldHVybiBub2RlRGVmYXVsdHNbcHJvcF07XG4gIH0sXG5cbiAgaW5qZWN0aW9uOiBET01Qcm9wZXJ0eUluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Qcm9wZXJ0eTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJFOU5VSEp2Y0dWeWRIa3Vhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRVQwMVFjbTl3WlhKMGVWeHVJQ29nUUhSNWNHVmphR1ZqYTNNZ2MzUmhkR2xqTFc5dWJIbGNiaUFxTDF4dVhHNHZLbXB6YkdsdWRDQmlhWFIzYVhObE9pQjBjblZsSUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVablZ1WTNScGIyNGdZMmhsWTJ0TllYTnJLSFpoYkhWbExDQmlhWFJ0WVhOcktTQjdYRzRnSUhKbGRIVnliaUFvZG1Gc2RXVWdKaUJpYVhSdFlYTnJLU0E5UFQwZ1ltbDBiV0Z6YXp0Y2JuMWNibHh1ZG1GeUlFUlBUVkJ5YjNCbGNuUjVTVzVxWldOMGFXOXVJRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dUV0Z3Y0dsdVp5Qm1jbTl0SUc1dmNtMWhiR2w2WldRc0lHTmhiV1ZzWTJGelpXUWdjSEp2Y0dWeWRIa2dibUZ0WlhNZ2RHOGdZU0JqYjI1bWFXZDFjbUYwYVc5dUlIUm9ZWFJjYmlBZ0lDb2djM0JsWTJsbWFXVnpJR2h2ZHlCMGFHVWdZWE56YjJOcFlYUmxaQ0JFVDAwZ2NISnZjR1Z5ZEhrZ2MyaHZkV3hrSUdKbElHRmpZMlZ6YzJWa0lHOXlJSEpsYm1SbGNtVmtMbHh1SUNBZ0tpOWNiaUFnVFZWVFZGOVZVMFZmUVZSVVVrbENWVlJGT2lBd2VERXNYRzRnSUUxVlUxUmZWVk5GWDFCU1QxQkZVbFJaT2lBd2VESXNYRzRnSUVoQlUxOVRTVVJGWDBWR1JrVkRWRk02SURCNE5DeGNiaUFnU0VGVFgwSlBUMHhGUVU1ZlZrRk1WVVU2SURCNE9DeGNiaUFnU0VGVFgwNVZUVVZTU1VOZlZrRk1WVVU2SURCNE1UQXNYRzRnSUVoQlUxOVFUMU5KVkVsV1JWOU9WVTFGVWtsRFgxWkJURlZGT2lBd2VESXdJSHdnTUhneE1DeGNiaUFnU0VGVFgwOVdSVkpNVDBGRVJVUmZRazlQVEVWQlRsOVdRVXhWUlRvZ01IZzBNQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzVxWldOMElITnZiV1VnYzNCbFkybGhiR2w2WldRZ2EyNXZkMnhsWkdkbElHRmliM1YwSUhSb1pTQkVUMDB1SUZSb2FYTWdkR0ZyWlhNZ1lTQmpiMjVtYVdjZ2IySnFaV04wWEc0Z0lDQXFJSGRwZEdnZ2RHaGxJR1p2Ykd4dmQybHVaeUJ3Y205d1pYSjBhV1Z6T2x4dUlDQWdLbHh1SUNBZ0tpQnBjME4xYzNSdmJVRjBkSEpwWW5WMFpUb2dablZ1WTNScGIyNGdkR2hoZENCbmFYWmxiaUJoYmlCaGRIUnlhV0oxZEdVZ2JtRnRaU0IzYVd4c0lISmxkSFZ5YmlCMGNuVmxYRzRnSUNBcUlHbG1JR2wwSUdOaGJpQmlaU0JwYm5ObGNuUmxaQ0JwYm5SdklIUm9aU0JFVDAwZ2RtVnlZbUYwYVcwdUlGVnpaV1oxYkNCbWIzSWdaR0YwWVMwcUlHOXlJR0Z5YVdFdEtseHVJQ0FnS2lCaGRIUnlhV0oxZEdWeklIZG9aWEpsSUdsMEozTWdhVzF3YjNOemFXSnNaU0IwYnlCbGJuVnRaWEpoZEdVZ1lXeHNJRzltSUhSb1pTQndiM056YVdKc1pWeHVJQ0FnS2lCaGRIUnlhV0oxZEdVZ2JtRnRaWE1zWEc0Z0lDQXFYRzRnSUNBcUlGQnliM0JsY25ScFpYTTZJRzlpYW1WamRDQnRZWEJ3YVc1bklFUlBUU0J3Y205d1pYSjBlU0J1WVcxbElIUnZJRzl1WlNCdlppQjBhR1ZjYmlBZ0lDb2dSRTlOVUhKdmNHVnlkSGxKYm1wbFkzUnBiMjRnWTI5dWMzUmhiblJ6SUc5eUlHNTFiR3d1SUVsbUlIbHZkWElnWVhSMGNtbGlkWFJsSUdsemJpZDBJR2x1SUdobGNtVXNYRzRnSUNBcUlHbDBJSGR2YmlkMElHZGxkQ0IzY21sMGRHVnVJSFJ2SUhSb1pTQkVUMDB1WEc0Z0lDQXFYRzRnSUNBcUlFUlBUVUYwZEhKcFluVjBaVTVoYldWek9pQnZZbXBsWTNRZ2JXRndjR2x1WnlCU1pXRmpkQ0JoZEhSeWFXSjFkR1VnYm1GdFpTQjBieUIwYUdVZ1JFOU5YRzRnSUNBcUlHRjBkSEpwWW5WMFpTQnVZVzFsTGlCQmRIUnlhV0oxZEdVZ2JtRnRaWE1nYm05MElITndaV05wWm1sbFpDQjFjMlVnZEdobElDb3FiRzkzWlhKallYTmxLaXBjYmlBZ0lDb2dibTl5YldGc2FYcGxaQ0J1WVcxbExseHVJQ0FnS2x4dUlDQWdLaUJFVDAxUWNtOXdaWEowZVU1aGJXVnpPaUJ6YVcxcGJHRnlJSFJ2SUVSUFRVRjBkSEpwWW5WMFpVNWhiV1Z6SUdKMWRDQm1iM0lnUkU5TklIQnliM0JsY25ScFpYTXVYRzRnSUNBcUlGQnliM0JsY25SNUlHNWhiV1Z6SUc1dmRDQnpjR1ZqYVdacFpXUWdkWE5sSUhSb1pTQnViM0p0WVd4cGVtVmtJRzVoYldVdVhHNGdJQ0FxWEc0Z0lDQXFJRVJQVFUxMWRHRjBhVzl1VFdWMGFHOWtjem9nVUhKdmNHVnlkR2xsY3lCMGFHRjBJSEpsY1hWcGNtVWdjM0JsWTJsaGJDQnRkWFJoZEdsdmJpQnRaWFJvYjJSekxpQkpabHh1SUNBZ0tpQmdkbUZzZFdWZ0lHbHpJSFZ1WkdWbWFXNWxaQ3dnZEdobElHMTFkR0YwYVc5dUlHMWxkR2h2WkNCemFHOTFiR1FnZFc1elpYUWdkR2hsSUhCeWIzQmxjblI1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ1pHOXRVSEp2Y0dWeWRIbERiMjVtYVdjZ2RHaGxJR052Ym1acFp5QmhjeUJrWlhOamNtbGlaV1FnWVdKdmRtVXVYRzRnSUNBcUwxeHVJQ0JwYm1wbFkzUkVUMDFRY205d1pYSjBlVU52Ym1acFp6b2dablZ1WTNScGIyNG9aRzl0VUhKdmNHVnlkSGxEYjI1bWFXY3BJSHRjYmlBZ0lDQjJZWElnVUhKdmNHVnlkR2xsY3lBOUlHUnZiVkJ5YjNCbGNuUjVRMjl1Wm1sbkxsQnliM0JsY25ScFpYTWdmSHdnZTMwN1hHNGdJQ0FnZG1GeUlFUlBUVUYwZEhKcFluVjBaVTVoYldWeklEMGdaRzl0VUhKdmNHVnlkSGxEYjI1bWFXY3VSRTlOUVhSMGNtbGlkWFJsVG1GdFpYTWdmSHdnZTMwN1hHNGdJQ0FnZG1GeUlFUlBUVkJ5YjNCbGNuUjVUbUZ0WlhNZ1BTQmtiMjFRY205d1pYSjBlVU52Ym1acFp5NUVUMDFRY205d1pYSjBlVTVoYldWeklIeDhJSHQ5TzF4dUlDQWdJSFpoY2lCRVQwMU5kWFJoZEdsdmJrMWxkR2h2WkhNZ1BTQmtiMjFRY205d1pYSjBlVU52Ym1acFp5NUVUMDFOZFhSaGRHbHZiazFsZEdodlpITWdmSHdnZTMwN1hHNWNiaUFnSUNCcFppQW9aRzl0VUhKdmNHVnlkSGxEYjI1bWFXY3VhWE5EZFhOMGIyMUJkSFJ5YVdKMWRHVXBJSHRjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TGw5cGMwTjFjM1J2YlVGMGRISnBZblYwWlVaMWJtTjBhVzl1Y3k1d2RYTm9LRnh1SUNBZ0lDQWdJQ0JrYjIxUWNtOXdaWEowZVVOdmJtWnBaeTVwYzBOMWMzUnZiVUYwZEhKcFluVjBaVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1iM0lnS0haaGNpQndjbTl3VG1GdFpTQnBiaUJRY205d1pYSjBhV1Z6S1NCN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSUNBaFJFOU5VSEp2Y0dWeWRIa3VhWE5UZEdGdVpHRnlaRTVoYldVdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwTEZ4dUlDQWdJQ0FnSUNBbmFXNXFaV04wUkU5TlVISnZjR1Z5ZEhsRGIyNW1hV2NvTGk0dUtUb2dXVzkxWEZ3bmNtVWdkSEo1YVc1bklIUnZJR2x1YW1WamRDQkVUMDBnY0hKdmNHVnlkSGtnSnlBclhHNGdJQ0FnSUNBZ0lDZGNYQ2NsYzF4Y0p5QjNhR2xqYUNCb1lYTWdZV3h5WldGa2VTQmlaV1Z1SUdsdWFtVmpkR1ZrTGlCWmIzVWdiV0Y1SUdKbElHRmpZMmxrWlc1MFlXeHNlU0FuSUN0Y2JpQWdJQ0FnSUNBZ0oybHVhbVZqZEdsdVp5QjBhR1VnYzJGdFpTQkVUMDBnY0hKdmNHVnlkSGtnWTI5dVptbG5JSFIzYVdObExDQnZjaUI1YjNVZ2JXRjVJR0psSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5hVzVxWldOMGFXNW5JSFIzYnlCamIyNW1hV2R6SUhSb1lYUWdhR0YyWlNCamIyNW1iR2xqZEdsdVp5QndjbTl3WlhKMGVTQnVZVzFsY3k0bkxGeHVJQ0FnSUNBZ0lDQndjbTl3VG1GdFpWeHVJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2doUkU5TlVISnZjR1Z5ZEhrdWFYTlRkR0Z1WkdGeVpFNWhiV1V1YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0U1aGJXVXBLU2s3WEc1Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtbHpVM1JoYm1SaGNtUk9ZVzFsVzNCeWIzQk9ZVzFsWFNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUhaaGNpQnNiM2RsY2tOaGMyVmtJRDBnY0hKdmNFNWhiV1V1ZEc5TWIzZGxja05oYzJVb0tUdGNiaUFnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWRsZEZCdmMzTnBZbXhsVTNSaGJtUmhjbVJPWVcxbFcyeHZkMlZ5UTJGelpXUmRJRDBnY0hKdmNFNWhiV1U3WEc1Y2JpQWdJQ0FnSUdsbUlDaEVUMDFCZEhSeWFXSjFkR1ZPWVcxbGN5NW9ZWE5QZDI1UWNtOXdaWEowZVNod2NtOXdUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdGMGRISnBZblYwWlU1aGJXVWdQU0JFVDAxQmRIUnlhV0oxZEdWT1lXMWxjMXR3Y205d1RtRnRaVjA3WEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtZGxkRkJ2YzNOcFlteGxVM1JoYm1SaGNtUk9ZVzFsVzJGMGRISnBZblYwWlU1aGJXVmRJRDBnY0hKdmNFNWhiV1U3WEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtZGxkRUYwZEhKcFluVjBaVTVoYldWYmNISnZjRTVoYldWZElEMGdZWFIwY21saWRYUmxUbUZ0WlR0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtZGxkRUYwZEhKcFluVjBaVTVoYldWYmNISnZjRTVoYldWZElEMGdiRzkzWlhKRFlYTmxaRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdVoyVjBVSEp2Y0dWeWRIbE9ZVzFsVzNCeWIzQk9ZVzFsWFNBOVhHNGdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVUbUZ0WlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwSUQ5Y2JpQWdJQ0FnSUNBZ0lDQkVUMDFRY205d1pYSjBlVTVoYldWelczQnliM0JPWVcxbFhTQTZYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNFNWhiV1U3WEc1Y2JpQWdJQ0FnSUdsbUlDaEVUMDFOZFhSaGRHbHZiazFsZEdodlpITXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRTVoYldVcEtTQjdYRzRnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1kbGRFMTFkR0YwYVc5dVRXVjBhRzlrVzNCeWIzQk9ZVzFsWFNBOUlFUlBUVTExZEdGMGFXOXVUV1YwYUc5a2MxdHdjbTl3VG1GdFpWMDdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQkVUMDFRY205d1pYSjBlUzVuWlhSTmRYUmhkR2x2YmsxbGRHaHZaRnR3Y205d1RtRnRaVjBnUFNCdWRXeHNPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ2NISnZjRU52Ym1acFp5QTlJRkJ5YjNCbGNuUnBaWE5iY0hKdmNFNWhiV1ZkTzF4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdWJYVnpkRlZ6WlVGMGRISnBZblYwWlZ0d2NtOXdUbUZ0WlYwZ1BWeHVJQ0FnSUNBZ0lDQmphR1ZqYTAxaGMyc29jSEp2Y0VOdmJtWnBaeXdnUkU5TlVISnZjR1Z5ZEhsSmJtcGxZM1JwYjI0dVRWVlRWRjlWVTBWZlFWUlVVa2xDVlZSRktUdGNiaUFnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbTExYzNSVmMyVlFjbTl3WlhKMGVWdHdjbTl3VG1GdFpWMGdQVnh1SUNBZ0lDQWdJQ0JqYUdWamEwMWhjMnNvY0hKdmNFTnZibVpwWnl3Z1JFOU5VSEp2Y0dWeWRIbEpibXBsWTNScGIyNHVUVlZUVkY5VlUwVmZVRkpQVUVWU1ZGa3BPMXh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YUdGelUybGtaVVZtWm1WamRITmJjSEp2Y0U1aGJXVmRJRDFjYmlBZ0lDQWdJQ0FnWTJobFkydE5ZWE5yS0hCeWIzQkRiMjVtYVdjc0lFUlBUVkJ5YjNCbGNuUjVTVzVxWldOMGFXOXVMa2hCVTE5VFNVUkZYMFZHUmtWRFZGTXBPMXh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YUdGelFtOXZiR1ZoYmxaaGJIVmxXM0J5YjNCT1lXMWxYU0E5WEc0Z0lDQWdJQ0FnSUdOb1pXTnJUV0Z6YXlod2NtOXdRMjl1Wm1sbkxDQkVUMDFRY205d1pYSjBlVWx1YW1WamRHbHZiaTVJUVZOZlFrOVBURVZCVGw5V1FVeFZSU2s3WEc0Z0lDQWdJQ0JFVDAxUWNtOXdaWEowZVM1b1lYTk9kVzFsY21salZtRnNkV1ZiY0hKdmNFNWhiV1ZkSUQxY2JpQWdJQ0FnSUNBZ1kyaGxZMnROWVhOcktIQnliM0JEYjI1bWFXY3NJRVJQVFZCeWIzQmxjblI1U1c1cVpXTjBhVzl1TGtoQlUxOU9WVTFGVWtsRFgxWkJURlZGS1R0Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtaGhjMUJ2YzJsMGFYWmxUblZ0WlhKcFkxWmhiSFZsVzNCeWIzQk9ZVzFsWFNBOVhHNGdJQ0FnSUNBZ0lHTm9aV05yVFdGemF5aHdjbTl3UTI5dVptbG5MQ0JFVDAxUWNtOXdaWEowZVVsdWFtVmpkR2x2Ymk1SVFWTmZVRTlUU1ZSSlZrVmZUbFZOUlZKSlExOVdRVXhWUlNrN1hHNGdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVTNW9ZWE5QZG1WeWJHOWhaR1ZrUW05dmJHVmhibFpoYkhWbFczQnliM0JPWVcxbFhTQTlYRzRnSUNBZ0lDQWdJR05vWldOclRXRnpheWh3Y205d1EyOXVabWxuTENCRVQwMVFjbTl3WlhKMGVVbHVhbVZqZEdsdmJpNUlRVk5mVDFaRlVreFBRVVJGUkY5Q1QwOU1SVUZPWDFaQlRGVkZLVHRjYmx4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSVVSUFRWQnliM0JsY25SNUxtMTFjM1JWYzJWQmRIUnlhV0oxZEdWYmNISnZjRTVoYldWZElIeDhYRzRnSUNBZ0lDQWdJQ0FnSVVSUFRWQnliM0JsY25SNUxtMTFjM1JWYzJWUWNtOXdaWEowZVZ0d2NtOXdUbUZ0WlYwc1hHNGdJQ0FnSUNBZ0lDZEVUMDFRY205d1pYSjBlVG9nUTJGdWJtOTBJSEpsY1hWcGNtVWdkWE5wYm1jZ1ltOTBhQ0JoZEhSeWFXSjFkR1VnWVc1a0lIQnliM0JsY25SNU9pQWxjeWNzWEc0Z0lDQWdJQ0FnSUhCeWIzQk9ZVzFsWEc0Z0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtDRkVUMDFRY205d1pYSjBlUzV0ZFhOMFZYTmxRWFIwY21saWRYUmxXM0J5YjNCT1lXMWxYU0I4ZkZ4dUlDQWdJQ0FnSUNBaFJFOU5VSEp2Y0dWeWRIa3ViWFZ6ZEZWelpWQnliM0JsY25SNVczQnliM0JPWVcxbFhTa3BPMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YlhWemRGVnpaVkJ5YjNCbGNuUjVXM0J5YjNCT1lXMWxYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDRkVUMDFRY205d1pYSjBlUzVvWVhOVGFXUmxSV1ptWldOMGMxdHdjbTl3VG1GdFpWMHNYRzRnSUNBZ0lDQWdJQ2RFVDAxUWNtOXdaWEowZVRvZ1VISnZjR1Z5ZEdsbGN5QjBhR0YwSUdoaGRtVWdjMmxrWlNCbFptWmxZM1J6SUcxMWMzUWdkWE5sSUhCeWIzQmxjblI1T2lBbGN5Y3NYRzRnSUNBZ0lDQWdJSEJ5YjNCT1lXMWxYRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0VSUFRWQnliM0JsY25SNUxtMTFjM1JWYzJWUWNtOXdaWEowZVZ0d2NtOXdUbUZ0WlYwZ2ZIeGNiaUFnSUNBZ0lDQWdJVVJQVFZCeWIzQmxjblI1TG1oaGMxTnBaR1ZGWm1abFkzUnpXM0J5YjNCT1lXMWxYU2twTzF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSVNGRVQwMVFjbTl3WlhKMGVTNW9ZWE5DYjI5c1pXRnVWbUZzZFdWYmNISnZjRTVoYldWZElDdGNiaUFnSUNBZ0lDQWdJQ0FoSVVSUFRWQnliM0JsY25SNUxtaGhjMDUxYldWeWFXTldZV3gxWlZ0d2NtOXdUbUZ0WlYwZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0VoUkU5TlVISnZjR1Z5ZEhrdWFHRnpUM1psY214dllXUmxaRUp2YjJ4bFlXNVdZV3gxWlZ0d2NtOXdUbUZ0WlYwZ1BEMGdNU3hjYmlBZ0lDQWdJQ0FnSjBSUFRWQnliM0JsY25SNU9pQldZV3gxWlNCallXNGdZbVVnYjI1bElHOW1JR0p2YjJ4bFlXNHNJRzkyWlhKc2IyRmtaV1FnWW05dmJHVmhiaXdnYjNJZ0p5QXJYRzRnSUNBZ0lDQWdJQ2R1ZFcxbGNtbGpJSFpoYkhWbExDQmlkWFFnYm05MElHRWdZMjl0WW1sdVlYUnBiMjQ2SUNWekp5eGNiaUFnSUNBZ0lDQWdjSEp2Y0U1aGJXVmNiaUFnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVNGRVQwMVFjbTl3WlhKMGVTNW9ZWE5DYjI5c1pXRnVWbUZzZFdWYmNISnZjRTVoYldWZElDdGNiaUFnSUNBZ0lDQWdJU0ZFVDAxUWNtOXdaWEowZVM1b1lYTk9kVzFsY21salZtRnNkV1ZiY0hKdmNFNWhiV1ZkSUN0Y2JpQWdJQ0FnSUNBZ0lTRkVUMDFRY205d1pYSjBlUzVvWVhOUGRtVnliRzloWkdWa1FtOXZiR1ZoYmxaaGJIVmxXM0J5YjNCT1lXMWxYU0E4UFNBeEtTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OU8xeHVkbUZ5SUdSbFptRjFiSFJXWVd4MVpVTmhZMmhsSUQwZ2UzMDdYRzVjYmk4cUtseHVJQ29nUkU5TlVISnZjR1Z5ZEhrZ1pYaHdiM0owY3lCc2IyOXJkWEFnYjJKcVpXTjBjeUIwYUdGMElHTmhiaUJpWlNCMWMyVmtJR3hwYTJVZ1puVnVZM1JwYjI1ek9seHVJQ3BjYmlBcUlDQWdQaUJFVDAxUWNtOXdaWEowZVM1cGMxWmhiR2xrV3lkcFpDZGRYRzRnS2lBZ0lIUnlkV1ZjYmlBcUlDQWdQaUJFVDAxUWNtOXdaWEowZVM1cGMxWmhiR2xrV3lkbWIyOWlZWEluWFZ4dUlDb2dJQ0IxYm1SbFptbHVaV1JjYmlBcVhHNGdLaUJCYkhSb2IzVm5hQ0IwYUdseklHMWhlU0JpWlNCamIyNW1kWE5wYm1jc0lHbDBJSEJsY21admNtMXpJR0psZEhSbGNpQnBiaUJuWlc1bGNtRnNMbHh1SUNwY2JpQXFJRUJ6WldVZ2FIUjBjRG92TDJwemNHVnlaaTVqYjIwdmEyVjVMV1Y0YVhOMGMxeHVJQ29nUUhObFpTQm9kSFJ3T2k4dmFuTndaWEptTG1OdmJTOXJaWGt0YldsemMybHVaMXh1SUNvdlhHNTJZWElnUkU5TlVISnZjR1Z5ZEhrZ1BTQjdYRzVjYmlBZ1NVUmZRVlJVVWtsQ1ZWUkZYMDVCVFVVNklDZGtZWFJoTFhKbFlXTjBhV1FuTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYUdWamEzTWdkMmhsZEdobGNpQmhJSEJ5YjNCbGNuUjVJRzVoYldVZ2FYTWdZU0J6ZEdGdVpHRnlaQ0J3Y205d1pYSjBlUzVjYmlBZ0lDb2dRSFI1Y0dVZ2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lHbHpVM1JoYm1SaGNtUk9ZVzFsT2lCN2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RXRndjR2x1WnlCbWNtOXRJR3h2ZDJWeVkyRnpaU0J3Y205d1pYSjBlU0J1WVcxbGN5QjBieUIwYUdVZ2NISnZjR1Z5YkhrZ1kyRnpaV1FnZG1WeWMybHZiaXdnZFhObFpGeHVJQ0FnS2lCMGJ5QjNZWEp1SUdsdUlIUm9aU0JqWVhObElHOW1JRzFwYzNOcGJtY2djSEp2Y0dWeWRHbGxjeTVjYmlBZ0lDb2dRSFI1Y0dVZ2UwOWlhbVZqZEgxY2JpQWdJQ292WEc0Z0lHZGxkRkJ2YzNOcFlteGxVM1JoYm1SaGNtUk9ZVzFsT2lCN2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RXRndjR2x1WnlCbWNtOXRJRzV2Y20xaGJHbDZaV1FnYm1GdFpYTWdkRzhnWVhSMGNtbGlkWFJsSUc1aGJXVnpJSFJvWVhRZ1pHbG1abVZ5TGlCQmRIUnlhV0oxZEdWY2JpQWdJQ29nYm1GdFpYTWdZWEpsSUhWelpXUWdkMmhsYmlCeVpXNWtaWEpwYm1jZ2JXRnlhM1Z3SUc5eUlIZHBkR2dnWUNwQmRIUnlhV0oxZEdVb0tXQXVYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCblpYUkJkSFJ5YVdKMWRHVk9ZVzFsT2lCN2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RXRndjR2x1WnlCbWNtOXRJRzV2Y20xaGJHbDZaV1FnYm1GdFpYTWdkRzhnY0hKdmNHVnlkR2xsY3lCdmJpQkVUMDBnYm05a1pTQnBibk4wWVc1alpYTXVYRzRnSUNBcUlDaFVhR2x6SUdsdVkyeDFaR1Z6SUhCeWIzQmxjblJwWlhNZ2RHaGhkQ0J0ZFhSaGRHVWdaSFZsSUhSdklHVjRkR1Z5Ym1Gc0lHWmhZM1J2Y25NdUtWeHVJQ0FnS2lCQWRIbHdaU0I3VDJKcVpXTjBmVnh1SUNBZ0tpOWNiaUFnWjJWMFVISnZjR1Z5ZEhsT1lXMWxPaUI3ZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVFdGd2NHbHVaeUJtY205dElHNXZjbTFoYkdsNlpXUWdibUZ0WlhNZ2RHOGdiWFYwWVhScGIyNGdiV1YwYUc5a2N5NGdWR2hwY3lCM2FXeHNJRzl1YkhrZ1pYaHBjM1FnYVdaY2JpQWdJQ29nYlhWMFlYUnBiMjRnWTJGdWJtOTBJR0psSUhObGRDQnphVzF3YkhrZ1lua2dkR2hsSUhCeWIzQmxjblI1SUc5eUlHQnpaWFJCZEhSeWFXSjFkR1VvS1dBdVhHNGdJQ0FxSUVCMGVYQmxJSHRQWW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0JuWlhSTmRYUmhkR2x2YmsxbGRHaHZaRG9nZTMwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZkb1pYUm9aWElnZEdobElIQnliM0JsY25SNUlHMTFjM1FnWW1VZ1lXTmpaWE56WldRZ1lXNWtJRzExZEdGMFpXUWdZWE1nWVc0Z2IySnFaV04wSUhCeWIzQmxjblI1TGx4dUlDQWdLaUJBZEhsd1pTQjdUMkpxWldOMGZWeHVJQ0FnS2k5Y2JpQWdiWFZ6ZEZWelpVRjBkSEpwWW5WMFpUb2dlMzBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRmRvWlhSb1pYSWdkR2hsSUhCeWIzQmxjblI1SUcxMWMzUWdZbVVnWVdOalpYTnpaV1FnWVc1a0lHMTFkR0YwWldRZ2RYTnBibWNnWUNwQmRIUnlhV0oxZEdVb0tXQXVYRzRnSUNBcUlDaFVhR2x6SUdsdVkyeDFaR1Z6SUdGdWVYUm9hVzVuSUhSb1lYUWdabUZwYkhNZ1lEeHdjbTl3VG1GdFpUNGdhVzRnUEdWc1pXMWxiblErWUM0cFhHNGdJQ0FxSUVCMGVYQmxJSHRQWW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0J0ZFhOMFZYTmxVSEp2Y0dWeWRIazZJSHQ5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJYYUdWMGFHVnlJRzl5SUc1dmRDQnpaWFIwYVc1bklHRWdkbUZzZFdVZ1kyRjFjMlZ6SUhOcFpHVWdaV1ptWldOMGN5QnpkV05vSUdGeklIUnlhV2RuWlhKcGJtZGNiaUFnSUNvZ2NtVnpiM1Z5WTJWeklIUnZJR0psSUd4dllXUmxaQ0J2Y2lCMFpYaDBJSE5sYkdWamRHbHZiaUJqYUdGdVoyVnpMaUJYWlNCdGRYTjBJR1Z1YzNWeVpTQjBhR0YwWEc0Z0lDQXFJSFJvWlNCMllXeDFaU0JwY3lCdmJteDVJSE5sZENCcFppQnBkQ0JvWVhNZ1kyaGhibWRsWkM1Y2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJR2hoYzFOcFpHVkZabVpsWTNSek9pQjdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWMmhsZEdobGNpQjBhR1VnY0hKdmNHVnlkSGtnYzJodmRXeGtJR0psSUhKbGJXOTJaV1FnZDJobGJpQnpaWFFnZEc4Z1lTQm1ZV3h6WlhrZ2RtRnNkV1V1WEc0Z0lDQXFJRUIwZVhCbElIdFBZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQm9ZWE5DYjI5c1pXRnVWbUZzZFdVNklIdDlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlhhR1YwYUdWeUlIUm9aU0J3Y205d1pYSjBlU0J0ZFhOMElHSmxJRzUxYldWeWFXTWdiM0lnY0dGeWMyVWdZWE1nWVZ4dUlDQWdLaUJ1ZFcxbGNtbGpJR0Z1WkNCemFHOTFiR1FnWW1VZ2NtVnRiM1psWkNCM2FHVnVJSE5sZENCMGJ5QmhJR1poYkhObGVTQjJZV3gxWlM1Y2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJR2hoYzA1MWJXVnlhV05XWVd4MVpUb2dlMzBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRmRvWlhSb1pYSWdkR2hsSUhCeWIzQmxjblI1SUcxMWMzUWdZbVVnY0c5emFYUnBkbVVnYm5WdFpYSnBZeUJ2Y2lCd1lYSnpaU0JoY3lCaElIQnZjMmwwYVhabFhHNGdJQ0FxSUc1MWJXVnlhV01nWVc1a0lITm9iM1ZzWkNCaVpTQnlaVzF2ZG1Wa0lIZG9aVzRnYzJWMElIUnZJR0VnWm1Gc2MyVjVJSFpoYkhWbExseHVJQ0FnS2lCQWRIbHdaU0I3VDJKcVpXTjBmVnh1SUNBZ0tpOWNiaUFnYUdGelVHOXphWFJwZG1WT2RXMWxjbWxqVm1Gc2RXVTZJSHQ5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJYYUdWMGFHVnlJSFJvWlNCd2NtOXdaWEowZVNCallXNGdZbVVnZFhObFpDQmhjeUJoSUdac1lXY2dZWE1nZDJWc2JDQmhjeUIzYVhSb0lHRWdkbUZzZFdVdUlGSmxiVzkyWldSY2JpQWdJQ29nZDJobGJpQnpkSEpwWTNSc2VTQmxjWFZoYkNCMGJ5Qm1ZV3h6WlRzZ2NISmxjMlZ1ZENCM2FYUm9iM1YwSUdFZ2RtRnNkV1VnZDJobGJpQnpkSEpwWTNSc2VTQmxjWFZoYkZ4dUlDQWdLaUIwYnlCMGNuVmxPeUJ3Y21WelpXNTBJSGRwZEdnZ1lTQjJZV3gxWlNCdmRHaGxjbmRwYzJVdVhHNGdJQ0FxSUVCMGVYQmxJSHRQWW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0JvWVhOUGRtVnliRzloWkdWa1FtOXZiR1ZoYmxaaGJIVmxPaUI3ZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUVd4c0lHOW1JSFJvWlNCcGMwTjFjM1J2YlVGMGRISnBZblYwWlNncElHWjFibU4wYVc5dWN5QjBhR0YwSUdoaGRtVWdZbVZsYmlCcGJtcGxZM1JsWkM1Y2JpQWdJQ292WEc0Z0lGOXBjME4xYzNSdmJVRjBkSEpwWW5WMFpVWjFibU4wYVc5dWN6b2dXMTBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU5vWldOcmN5QjNhR1YwYUdWeUlHRWdjSEp2Y0dWeWRIa2dibUZ0WlNCcGN5QmhJR04xYzNSdmJTQmhkSFJ5YVdKMWRHVXVYRzRnSUNBcUlFQnRaWFJvYjJSY2JpQWdJQ292WEc0Z0lHbHpRM1Z6ZEc5dFFYUjBjbWxpZFhSbE9pQm1kVzVqZEdsdmJpaGhkSFJ5YVdKMWRHVk9ZVzFsS1NCN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCRVQwMVFjbTl3WlhKMGVTNWZhWE5EZFhOMGIyMUJkSFJ5YVdKMWRHVkdkVzVqZEdsdmJuTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUhaaGNpQnBjME4xYzNSdmJVRjBkSEpwWW5WMFpVWnVJRDBnUkU5TlVISnZjR1Z5ZEhrdVgybHpRM1Z6ZEc5dFFYUjBjbWxpZFhSbFJuVnVZM1JwYjI1elcybGRPMXh1SUNBZ0lDQWdhV1lnS0dselEzVnpkRzl0UVhSMGNtbGlkWFJsUm00b1lYUjBjbWxpZFhSbFRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGRYSnVjeUIwYUdVZ1pHVm1ZWFZzZENCd2NtOXdaWEowZVNCMllXeDFaU0JtYjNJZ1lTQkVUMDBnY0hKdmNHVnlkSGtnS0drdVpTNHNJRzV2ZENCaGJseHVJQ0FnS2lCaGRIUnlhV0oxZEdVcExpQk5iM04wSUdSbFptRjFiSFFnZG1Gc2RXVnpJR0Z5WlNBbkp5QnZjaUJtWVd4elpTd2dZblYwSUc1dmRDQmhiR3d1SUZkdmNuTmxJSGxsZEN4Y2JpQWdJQ29nYzI5dFpTQW9hVzRnY0dGeWRHbGpkV3hoY2l3Z1lIUjVjR1ZnS1NCMllYSjVJR1JsY0dWdVpHbHVaeUJ2YmlCMGFHVWdkSGx3WlNCdlppQmxiR1Z0Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJVVDBSUE9pQkpjeUJwZENCaVpYUjBaWElnZEc4Z1ozSmhZaUJoYkd3Z2RHaGxJSEJ2YzNOcFlteGxJSEJ5YjNCbGNuUnBaWE1nZDJobGJpQmpjbVZoZEdsdVp5QmhibHh1SUNBZ0tpQmxiR1Z0Wlc1MElIUnZJR0YyYjJsa0lHaGhkbWx1WnlCMGJ5QmpjbVZoZEdVZ2RHaGxJSE5oYldVZ1pXeGxiV1Z1ZENCMGQybGpaVDljYmlBZ0lDb3ZYRzRnSUdkbGRFUmxabUYxYkhSV1lXeDFaVVp2Y2xCeWIzQmxjblI1T2lCbWRXNWpkR2x2YmlodWIyUmxUbUZ0WlN3Z2NISnZjQ2tnZTF4dUlDQWdJSFpoY2lCdWIyUmxSR1ZtWVhWc2RITWdQU0JrWldaaGRXeDBWbUZzZFdWRFlXTm9aVnR1YjJSbFRtRnRaVjA3WEc0Z0lDQWdkbUZ5SUhSbGMzUkZiR1Z0Wlc1ME8xeHVJQ0FnSUdsbUlDZ2hibTlrWlVSbFptRjFiSFJ6S1NCN1hHNGdJQ0FnSUNCa1pXWmhkV3gwVm1Gc2RXVkRZV05vWlZ0dWIyUmxUbUZ0WlYwZ1BTQnViMlJsUkdWbVlYVnNkSE1nUFNCN2ZUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tDRW9jSEp2Y0NCcGJpQnViMlJsUkdWbVlYVnNkSE1wS1NCN1hHNGdJQ0FnSUNCMFpYTjBSV3hsYldWdWRDQTlJR1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb2JtOWtaVTVoYldVcE8xeHVJQ0FnSUNBZ2JtOWtaVVJsWm1GMWJIUnpXM0J5YjNCZElEMGdkR1Z6ZEVWc1pXMWxiblJiY0hKdmNGMDdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ1YjJSbFJHVm1ZWFZzZEhOYmNISnZjRjA3WEc0Z0lIMHNYRzVjYmlBZ2FXNXFaV04wYVc5dU9pQkVUMDFRY205d1pYSjBlVWx1YW1WamRHbHZibHh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQkVUMDFRY205d1pYSjBlVHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIERPTVByb3BlcnR5T3BlcmF0aW9uc1xuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xuXG52YXIgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIgPSByZXF1aXJlKFwiLi9xdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlclwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuZnVuY3Rpb24gc2hvdWxkSWdub3JlVmFsdWUobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHxcbiAgICAoRE9NUHJvcGVydHkuaGFzQm9vbGVhblZhbHVlW25hbWVdICYmICF2YWx1ZSkgfHxcbiAgICAoRE9NUHJvcGVydHkuaGFzTnVtZXJpY1ZhbHVlW25hbWVdICYmIGlzTmFOKHZhbHVlKSkgfHxcbiAgICAoRE9NUHJvcGVydHkuaGFzUG9zaXRpdmVOdW1lcmljVmFsdWVbbmFtZV0gJiYgKHZhbHVlIDwgMSkpIHx8XG4gICAgKERPTVByb3BlcnR5Lmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWVbbmFtZV0gJiYgdmFsdWUgPT09IGZhbHNlKTtcbn1cblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICB2YXIgcmVhY3RQcm9wcyA9IHtcbiAgICBjaGlsZHJlbjogdHJ1ZSxcbiAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogdHJ1ZSxcbiAgICBrZXk6IHRydWUsXG4gICAgcmVmOiB0cnVlXG4gIH07XG4gIHZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG5cbiAgdmFyIHdhcm5Vbmtub3duUHJvcGVydHkgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKHJlYWN0UHJvcHMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgcmVhY3RQcm9wc1tuYW1lXSB8fFxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBkYXRhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuICAgIHZhciBzdGFuZGFyZE5hbWUgPSAoXG4gICAgICBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShsb3dlckNhc2VkTmFtZSkgP1xuICAgICAgICBsb3dlckNhc2VkTmFtZSA6XG4gICAgICBET01Qcm9wZXJ0eS5nZXRQb3NzaWJsZVN0YW5kYXJkTmFtZS5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgP1xuICAgICAgICBET01Qcm9wZXJ0eS5nZXRQb3NzaWJsZVN0YW5kYXJkTmFtZVtsb3dlckNhc2VkTmFtZV0gOlxuICAgICAgICBudWxsXG4gICAgKTtcblxuICAgIC8vIEZvciBub3csIG9ubHkgd2FybiB3aGVuIHdlIGhhdmUgYSBzdWdnZXN0ZWQgY29ycmVjdGlvbi4gVGhpcyBwcmV2ZW50c1xuICAgIC8vIGxvZ2dpbmcgdG9vIG11Y2ggd2hlbiB1c2luZyB0cmFuc2ZlclByb3BzVG8uXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBzdGFuZGFyZE5hbWUgPT0gbnVsbCxcbiAgICAgICdVbmtub3duIERPTSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsXG4gICAgICBuYW1lLFxuICAgICAgc3RhbmRhcmROYW1lXG4gICAgKSA6IG51bGwpO1xuXG4gIH07XG59XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIERPTSBwcm9wZXJ0aWVzLlxuICovXG52YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0ge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIElEIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVW5lc2NhcGVkIElELlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcuXG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JJRDogZnVuY3Rpb24oaWQpIHtcbiAgICByZXR1cm4gRE9NUHJvcGVydHkuSURfQVRUUklCVVRFX05BTUUgKyAnPScgK1xuICAgICAgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIoaWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgYSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBNYXJrdXAgc3RyaW5nLCBvciBudWxsIGlmIHRoZSBwcm9wZXJ0eSB3YXMgaW52YWxpZC5cbiAgICovXG4gIGNyZWF0ZU1hcmt1cEZvclByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtuYW1lXSkge1xuICAgICAgaWYgKHNob3VsZElnbm9yZVZhbHVlKG5hbWUsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbbmFtZV07XG4gICAgICBpZiAoRE9NUHJvcGVydHkuaGFzQm9vbGVhblZhbHVlW25hbWVdIHx8XG4gICAgICAgICAgKERPTVByb3BlcnR5Lmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWVbbmFtZV0gJiYgdmFsdWUgPT09IHRydWUpKSB7XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWUgKyAnPScgKyBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3Nlcih2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5hbWUgKyAnPScgKyBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3Nlcih2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHdhcm5Vbmtub3duUHJvcGVydHkobmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqL1xuICBzZXRWYWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbihub2RlLCBuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtuYW1lXSkge1xuICAgICAgdmFyIG11dGF0aW9uTWV0aG9kID0gRE9NUHJvcGVydHkuZ2V0TXV0YXRpb25NZXRob2RbbmFtZV07XG4gICAgICBpZiAobXV0YXRpb25NZXRob2QpIHtcbiAgICAgICAgbXV0YXRpb25NZXRob2Qobm9kZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzaG91bGRJZ25vcmVWYWx1ZShuYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kZWxldGVWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUpO1xuICAgICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW25hbWVdKSB7XG4gICAgICAgIC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShET01Qcm9wZXJ0eS5nZXRBdHRyaWJ1dGVOYW1lW25hbWVdLCAnJyArIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSA9IERPTVByb3BlcnR5LmdldFByb3BlcnR5TmFtZVtuYW1lXTtcbiAgICAgICAgLy8gTXVzdCBleHBsaWNpdGx5IGNhc3QgdmFsdWVzIGZvciBIQVNfU0lERV9FRkZFQ1RTLXByb3BlcnRpZXMgdG8gdGhlXG4gICAgICAgIC8vIHByb3BlcnR5IHR5cGUgYmVmb3JlIGNvbXBhcmluZzsgb25seSBgdmFsdWVgIGRvZXMgYW5kIGlzIHN0cmluZy5cbiAgICAgICAgaWYgKCFET01Qcm9wZXJ0eS5oYXNTaWRlRWZmZWN0c1tuYW1lXSB8fFxuICAgICAgICAgICAgKCcnICsgbm9kZVtwcm9wTmFtZV0pICE9PSAoJycgKyB2YWx1ZSkpIHtcbiAgICAgICAgICAvLyBDb250cmFyeSB0byBgc2V0QXR0cmlidXRlYCwgb2JqZWN0IHByb3BlcnRpZXMgYXJlIHByb3Blcmx5XG4gICAgICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgICAgIG5vZGVbcHJvcE5hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB3YXJuVW5rbm93blByb3BlcnR5KG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIGRlbGV0ZVZhbHVlRm9yUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgICBpZiAoRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbbmFtZV0pIHtcbiAgICAgIHZhciBtdXRhdGlvbk1ldGhvZCA9IERPTVByb3BlcnR5LmdldE11dGF0aW9uTWV0aG9kW25hbWVdO1xuICAgICAgaWYgKG11dGF0aW9uTWV0aG9kKSB7XG4gICAgICAgIG11dGF0aW9uTWV0aG9kKG5vZGUsIHVuZGVmaW5lZCk7XG4gICAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5Lm11c3RVc2VBdHRyaWJ1dGVbbmFtZV0pIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRlTmFtZVtuYW1lXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBET01Qcm9wZXJ0eS5nZXRQcm9wZXJ0eU5hbWVbbmFtZV07XG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBET01Qcm9wZXJ0eS5nZXREZWZhdWx0VmFsdWVGb3JQcm9wZXJ0eShcbiAgICAgICAgICBub2RlLm5vZGVOYW1lLFxuICAgICAgICAgIHByb3BOYW1lXG4gICAgICAgICk7XG4gICAgICAgIGlmICghRE9NUHJvcGVydHkuaGFzU2lkZUVmZmVjdHNbbmFtZV0gfHxcbiAgICAgICAgICAgICgnJyArIG5vZGVbcHJvcE5hbWVdKSAhPT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgbm9kZVtwcm9wTmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgd2FyblVua25vd25Qcm9wZXJ0eShuYW1lKTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Qcm9wZXJ0eU9wZXJhdGlvbnM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSRTlOVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTmNiaUFxSUVCMGVYQmxZMmhsWTJ0eklITjBZWFJwWXkxdmJteDVYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnUkU5TlVISnZjR1Z5ZEhrZ1BTQnlaWEYxYVhKbEtGd2lMaTlFVDAxUWNtOXdaWEowZVZ3aUtUdGNibHh1ZG1GeUlIRjFiM1JsUVhSMGNtbGlkWFJsVm1Gc2RXVkdiM0pDY205M2MyVnlJRDBnY21WeGRXbHlaU2hjSWk0dmNYVnZkR1ZCZEhSeWFXSjFkR1ZXWVd4MVpVWnZja0p5YjNkelpYSmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNibVoxYm1OMGFXOXVJSE5vYjNWc1pFbG5ibTl5WlZaaGJIVmxLRzVoYldVc0lIWmhiSFZsS1NCN1hHNGdJSEpsZEhWeWJpQjJZV3gxWlNBOVBTQnVkV3hzSUh4OFhHNGdJQ0FnS0VSUFRWQnliM0JsY25SNUxtaGhjMEp2YjJ4bFlXNVdZV3gxWlZ0dVlXMWxYU0FtSmlBaGRtRnNkV1VwSUh4OFhHNGdJQ0FnS0VSUFRWQnliM0JsY25SNUxtaGhjMDUxYldWeWFXTldZV3gxWlZ0dVlXMWxYU0FtSmlCcGMwNWhUaWgyWVd4MVpTa3BJSHg4WEc0Z0lDQWdLRVJQVFZCeWIzQmxjblI1TG1oaGMxQnZjMmwwYVhabFRuVnRaWEpwWTFaaGJIVmxXMjVoYldWZElDWW1JQ2gyWVd4MVpTQThJREVwS1NCOGZGeHVJQ0FnSUNoRVQwMVFjbTl3WlhKMGVTNW9ZWE5QZG1WeWJHOWhaR1ZrUW05dmJHVmhibFpoYkhWbFcyNWhiV1ZkSUNZbUlIWmhiSFZsSUQwOVBTQm1ZV3h6WlNrN1hHNTlYRzVjYm1sbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdkbUZ5SUhKbFlXTjBVSEp2Y0hNZ1BTQjdYRzRnSUNBZ1kyaHBiR1J5Wlc0NklIUnlkV1VzWEc0Z0lDQWdaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV3NklIUnlkV1VzWEc0Z0lDQWdhMlY1T2lCMGNuVmxMRnh1SUNBZ0lISmxaam9nZEhKMVpWeHVJQ0I5TzF4dUlDQjJZWElnZDJGeWJtVmtVSEp2Y0dWeWRHbGxjeUE5SUh0OU8xeHVYRzRnSUhaaGNpQjNZWEp1Vlc1cmJtOTNibEJ5YjNCbGNuUjVJRDBnWm5WdVkzUnBiMjRvYm1GdFpTa2dlMXh1SUNBZ0lHbG1JQ2h5WldGamRGQnliM0J6TG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcElDWW1JSEpsWVdOMFVISnZjSE5iYm1GdFpWMGdmSHhjYmlBZ0lDQWdJQ0FnZDJGeWJtVmtVSEp2Y0dWeWRHbGxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHVZVzFsS1NBbUppQjNZWEp1WldSUWNtOXdaWEowYVdWelcyNWhiV1ZkS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkMkZ5Ym1Wa1VISnZjR1Z5ZEdsbGMxdHVZVzFsWFNBOUlIUnlkV1U3WEc0Z0lDQWdkbUZ5SUd4dmQyVnlRMkZ6WldST1lXMWxJRDBnYm1GdFpTNTBiMHh2ZDJWeVEyRnpaU2dwTzF4dVhHNGdJQ0FnTHk4Z1pHRjBZUzBxSUdGMGRISnBZblYwWlhNZ2MyaHZkV3hrSUdKbElHeHZkMlZ5WTJGelpUc2djM1ZuWjJWemRDQjBhR1VnYkc5M1pYSmpZWE5sSUhabGNuTnBiMjVjYmlBZ0lDQjJZWElnYzNSaGJtUmhjbVJPWVcxbElEMGdLRnh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YVhORGRYTjBiMjFCZEhSeWFXSjFkR1VvYkc5M1pYSkRZWE5sWkU1aGJXVXBJRDljYmlBZ0lDQWdJQ0FnYkc5M1pYSkRZWE5sWkU1aGJXVWdPbHh1SUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1WjJWMFVHOXpjMmxpYkdWVGRHRnVaR0Z5WkU1aGJXVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JHOTNaWEpEWVhObFpFNWhiV1VwSUQ5Y2JpQWdJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VaMlYwVUc5emMybGliR1ZUZEdGdVpHRnlaRTVoYldWYmJHOTNaWEpEWVhObFpFNWhiV1ZkSURwY2JpQWdJQ0FnSUNBZ2JuVnNiRnh1SUNBZ0lDazdYRzVjYmlBZ0lDQXZMeUJHYjNJZ2JtOTNMQ0J2Ym14NUlIZGhjbTRnZDJobGJpQjNaU0JvWVhabElHRWdjM1ZuWjJWemRHVmtJR052Y25KbFkzUnBiMjR1SUZSb2FYTWdjSEpsZG1WdWRITmNiaUFnSUNBdkx5QnNiMmRuYVc1bklIUnZieUJ0ZFdOb0lIZG9aVzRnZFhOcGJtY2dkSEpoYm5ObVpYSlFjbTl3YzFSdkxseHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdjM1JoYm1SaGNtUk9ZVzFsSUQwOUlHNTFiR3dzWEc0Z0lDQWdJQ0FuVlc1cmJtOTNiaUJFVDAwZ2NISnZjR1Z5ZEhrZ0pYTXVJRVJwWkNCNWIzVWdiV1ZoYmlBbGN6OG5MRnh1SUNBZ0lDQWdibUZ0WlN4Y2JpQWdJQ0FnSUhOMFlXNWtZWEprVG1GdFpWeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JseHVJQ0I5TzF4dWZWeHVYRzR2S2lwY2JpQXFJRTl3WlhKaGRHbHZibk1nWm05eUlHUmxZV3hwYm1jZ2QybDBhQ0JFVDAwZ2NISnZjR1Z5ZEdsbGN5NWNiaUFxTDF4dWRtRnlJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3lBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsY3lCdFlYSnJkWEFnWm05eUlIUm9aU0JKUkNCd2NtOXdaWEowZVM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRlZ1WlhOallYQmxaQ0JKUkM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JOWVhKcmRYQWdjM1J5YVc1bkxseHVJQ0FnS2k5Y2JpQWdZM0psWVhSbFRXRnlhM1Z3Um05eVNVUTZJR1oxYm1OMGFXOXVLR2xrS1NCN1hHNGdJQ0FnY21WMGRYSnVJRVJQVFZCeWIzQmxjblI1TGtsRVgwRlVWRkpKUWxWVVJWOU9RVTFGSUNzZ0p6MG5JQ3RjYmlBZ0lDQWdJSEYxYjNSbFFYUjBjbWxpZFhSbFZtRnNkV1ZHYjNKQ2NtOTNjMlZ5S0dsa0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxjeUJ0WVhKcmRYQWdabTl5SUdFZ2NISnZjR1Z5ZEhrdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdLbjBnZG1Gc2RXVmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1AzTjBjbWx1WjMwZ1RXRnlhM1Z3SUhOMGNtbHVaeXdnYjNJZ2JuVnNiQ0JwWmlCMGFHVWdjSEp2Y0dWeWRIa2dkMkZ6SUdsdWRtRnNhV1F1WEc0Z0lDQXFMMXh1SUNCamNtVmhkR1ZOWVhKcmRYQkdiM0pRY205d1pYSjBlVG9nWm5WdVkzUnBiMjRvYm1GdFpTd2dkbUZzZFdVcElIdGNiaUFnSUNCcFppQW9SRTlOVUhKdmNHVnlkSGt1YVhOVGRHRnVaR0Z5WkU1aGJXVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2tnSmlaY2JpQWdJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VhWE5UZEdGdVpHRnlaRTVoYldWYmJtRnRaVjBwSUh0Y2JpQWdJQ0FnSUdsbUlDaHphRzkxYkdSSloyNXZjbVZXWVd4MVpTaHVZVzFsTENCMllXeDFaU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUNjbk8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RtRnlJR0YwZEhKcFluVjBaVTVoYldVZ1BTQkVUMDFRY205d1pYSjBlUzVuWlhSQmRIUnlhV0oxZEdWT1lXMWxXMjVoYldWZE8xeHVJQ0FnSUNBZ2FXWWdLRVJQVFZCeWIzQmxjblI1TG1oaGMwSnZiMnhsWVc1V1lXeDFaVnR1WVcxbFhTQjhmRnh1SUNBZ0lDQWdJQ0FnSUNoRVQwMVFjbTl3WlhKMGVTNW9ZWE5QZG1WeWJHOWhaR1ZrUW05dmJHVmhibFpoYkhWbFcyNWhiV1ZkSUNZbUlIWmhiSFZsSUQwOVBTQjBjblZsS1NrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1lYUjBjbWxpZFhSbFRtRnRaVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQmhkSFJ5YVdKMWRHVk9ZVzFsSUNzZ0p6MG5JQ3NnY1hWdmRHVkJkSFJ5YVdKMWRHVldZV3gxWlVadmNrSnliM2R6WlhJb2RtRnNkV1VwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvUkU5TlVISnZjR1Z5ZEhrdWFYTkRkWE4wYjIxQmRIUnlhV0oxZEdVb2JtRnRaU2twSUh0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlNBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlBbkp6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCdVlXMWxJQ3NnSnowbklDc2djWFZ2ZEdWQmRIUnlhV0oxZEdWV1lXeDFaVVp2Y2tKeWIzZHpaWElvZG1Gc2RXVXBPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCM1lYSnVWVzVyYm05M2JsQnliM0JsY25SNUtHNWhiV1VwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JuVnNiRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1UyVjBjeUIwYUdVZ2RtRnNkV1VnWm05eUlHRWdjSEp2Y0dWeWRIa2diMjRnWVNCdWIyUmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHNXZaR1ZjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHNWhiV1ZjYmlBZ0lDb2dRSEJoY21GdElIc3FmU0IyWVd4MVpWeHVJQ0FnS2k5Y2JpQWdjMlYwVm1Gc2RXVkdiM0pRY205d1pYSjBlVG9nWm5WdVkzUnBiMjRvYm05a1pTd2dibUZ0WlN3Z2RtRnNkV1VwSUh0Y2JpQWdJQ0JwWmlBb1JFOU5VSEp2Y0dWeWRIa3VhWE5UZEdGdVpHRnlaRTVoYldVdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa2dKaVpjYmlBZ0lDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdWFYTlRkR0Z1WkdGeVpFNWhiV1ZiYm1GdFpWMHBJSHRjYmlBZ0lDQWdJSFpoY2lCdGRYUmhkR2x2YmsxbGRHaHZaQ0E5SUVSUFRWQnliM0JsY25SNUxtZGxkRTExZEdGMGFXOXVUV1YwYUc5a1cyNWhiV1ZkTzF4dUlDQWdJQ0FnYVdZZ0tHMTFkR0YwYVc5dVRXVjBhRzlrS1NCN1hHNGdJQ0FnSUNBZ0lHMTFkR0YwYVc5dVRXVjBhRzlrS0c1dlpHVXNJSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9jMmh2ZFd4a1NXZHViM0psVm1Gc2RXVW9ibUZ0WlN3Z2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WkdWc1pYUmxWbUZzZFdWR2IzSlFjbTl3WlhKMGVTaHViMlJsTENCdVlXMWxLVHRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvUkU5TlVISnZjR1Z5ZEhrdWJYVnpkRlZ6WlVGMGRISnBZblYwWlZ0dVlXMWxYU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QmdjMlYwUVhSMGNtbGlkWFJsWUNCM2FYUm9JRzlpYW1WamRITWdZbVZqYjIxbGN5QnZibXg1SUdCYmIySnFaV04wWFdBZ2FXNGdTVVU0THprc1hHNGdJQ0FnSUNBZ0lDOHZJQ2duSnlBcklIWmhiSFZsS1NCdFlXdGxjeUJwZENCdmRYUndkWFFnZEdobElHTnZjbkpsWTNRZ2RHOVRkSEpwYm1jb0tTMTJZV3gxWlM1Y2JpQWdJQ0FnSUNBZ2JtOWtaUzV6WlhSQmRIUnlhV0oxZEdVb1JFOU5VSEp2Y0dWeWRIa3VaMlYwUVhSMGNtbGlkWFJsVG1GdFpWdHVZVzFsWFN3Z0p5Y2dLeUIyWVd4MVpTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnY0hKdmNFNWhiV1VnUFNCRVQwMVFjbTl3WlhKMGVTNW5aWFJRY205d1pYSjBlVTVoYldWYmJtRnRaVjA3WEc0Z0lDQWdJQ0FnSUM4dklFMTFjM1FnWlhod2JHbGphWFJzZVNCallYTjBJSFpoYkhWbGN5Qm1iM0lnU0VGVFgxTkpSRVZmUlVaR1JVTlVVeTF3Y205d1pYSjBhV1Z6SUhSdklIUm9aVnh1SUNBZ0lDQWdJQ0F2THlCd2NtOXdaWEowZVNCMGVYQmxJR0psWm05eVpTQmpiMjF3WVhKcGJtYzdJRzl1YkhrZ1lIWmhiSFZsWUNCa2IyVnpJR0Z1WkNCcGN5QnpkSEpwYm1jdVhHNGdJQ0FnSUNBZ0lHbG1JQ2doUkU5TlVISnZjR1Z5ZEhrdWFHRnpVMmxrWlVWbVptVmpkSE5iYm1GdFpWMGdmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lDZ25KeUFySUc1dlpHVmJjSEp2Y0U1aGJXVmRLU0FoUFQwZ0tDY25JQ3NnZG1Gc2RXVXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdRMjl1ZEhKaGNua2dkRzhnWUhObGRFRjBkSEpwWW5WMFpXQXNJRzlpYW1WamRDQndjbTl3WlhKMGFXVnpJR0Z5WlNCd2NtOXdaWEpzZVZ4dUlDQWdJQ0FnSUNBZ0lDOHZJR0IwYjFOMGNtbHVaMkJsWkNCaWVTQkpSVGd2T1M1Y2JpQWdJQ0FnSUNBZ0lDQnViMlJsVzNCeWIzQk9ZVzFsWFNBOUlIWmhiSFZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNoRVQwMVFjbTl3WlhKMGVTNXBjME4xYzNSdmJVRjBkSEpwWW5WMFpTaHVZVzFsS1NrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbElEMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdibTlrWlM1eVpXMXZkbVZCZEhSeWFXSjFkR1VvYm1GdFpTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnViMlJsTG5ObGRFRjBkSEpwWW5WMFpTaHVZVzFsTENBbkp5QXJJSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnZDJGeWJsVnVhMjV2ZDI1UWNtOXdaWEowZVNodVlXMWxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVSbGJHVjBaWE1nZEdobElIWmhiSFZsSUdadmNpQmhJSEJ5YjNCbGNuUjVJRzl1SUdFZ2JtOWtaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0RVQwMUZiR1Z0Wlc1MGZTQnViMlJsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsWEc0Z0lDQXFMMXh1SUNCa1pXeGxkR1ZXWVd4MVpVWnZjbEJ5YjNCbGNuUjVPaUJtZFc1amRHbHZiaWh1YjJSbExDQnVZVzFsS1NCN1hHNGdJQ0FnYVdZZ0tFUlBUVkJ5YjNCbGNuUjVMbWx6VTNSaGJtUmhjbVJPWVcxbExtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBJQ1ltWEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtbHpVM1JoYm1SaGNtUk9ZVzFsVzI1aGJXVmRLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2JYVjBZWFJwYjI1TlpYUm9iMlFnUFNCRVQwMVFjbTl3WlhKMGVTNW5aWFJOZFhSaGRHbHZiazFsZEdodlpGdHVZVzFsWFR0Y2JpQWdJQ0FnSUdsbUlDaHRkWFJoZEdsdmJrMWxkR2h2WkNrZ2UxeHVJQ0FnSUNBZ0lDQnRkWFJoZEdsdmJrMWxkR2h2WkNodWIyUmxMQ0IxYm1SbFptbHVaV1FwTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoRVQwMVFjbTl3WlhKMGVTNXRkWE4wVlhObFFYUjBjbWxpZFhSbFcyNWhiV1ZkS1NCN1hHNGdJQ0FnSUNBZ0lHNXZaR1V1Y21WdGIzWmxRWFIwY21saWRYUmxLRVJQVFZCeWIzQmxjblI1TG1kbGRFRjBkSEpwWW5WMFpVNWhiV1ZiYm1GdFpWMHBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUhCeWIzQk9ZVzFsSUQwZ1JFOU5VSEp2Y0dWeWRIa3VaMlYwVUhKdmNHVnlkSGxPWVcxbFcyNWhiV1ZkTzF4dUlDQWdJQ0FnSUNCMllYSWdaR1ZtWVhWc2RGWmhiSFZsSUQwZ1JFOU5VSEp2Y0dWeWRIa3VaMlYwUkdWbVlYVnNkRlpoYkhWbFJtOXlVSEp2Y0dWeWRIa29YRzRnSUNBZ0lDQWdJQ0FnYm05a1pTNXViMlJsVG1GdFpTeGNiaUFnSUNBZ0lDQWdJQ0J3Y205d1RtRnRaVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNCcFppQW9JVVJQVFZCeWIzQmxjblI1TG1oaGMxTnBaR1ZGWm1abFkzUnpXMjVoYldWZElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNBb0p5Y2dLeUJ1YjJSbFczQnliM0JPWVcxbFhTa2dJVDA5SUdSbFptRjFiSFJXWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUc1dlpHVmJjSEp2Y0U1aGJXVmRJRDBnWkdWbVlYVnNkRlpoYkhWbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaEVUMDFRY205d1pYSjBlUzVwYzBOMWMzUnZiVUYwZEhKcFluVjBaU2h1WVcxbEtTa2dlMXh1SUNBZ0lDQWdibTlrWlM1eVpXMXZkbVZCZEhSeWFXSjFkR1VvYm1GdFpTazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhkaGNtNVZibXR1YjNkdVVISnZjR1Z5ZEhrb2JtRnRaU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1JFOU5VSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRGFuZ2VyXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbi8qanNsaW50IGV2aWw6IHRydWUsIHN1YjogdHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgY3JlYXRlTm9kZXNGcm9tTWFya3VwID0gcmVxdWlyZShcIi4vY3JlYXRlTm9kZXNGcm9tTWFya3VwXCIpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xudmFyIGdldE1hcmt1cFdyYXAgPSByZXF1aXJlKFwiLi9nZXRNYXJrdXBXcmFwXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxudmFyIE9QRU5fVEFHX05BTUVfRVhQID0gL14oPFteIFxcLz5dKykvO1xudmFyIFJFU1VMVF9JTkRFWF9BVFRSID0gJ2RhdGEtZGFuZ2VyLWluZGV4JztcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYG5vZGVOYW1lYCBmcm9tIGEgc3RyaW5nIG9mIG1hcmt1cC5cbiAqXG4gKiBOT1RFOiBFeHRyYWN0aW5nIHRoZSBgbm9kZU5hbWVgIGRvZXMgbm90IHJlcXVpcmUgYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hcbiAqIGJlY2F1c2Ugd2UgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBSZWFjdC1nZW5lcmF0ZWQgbWFya3VwIChpLmUuIHRoZXJlIGFyZSBub1xuICogc3BhY2VzIHN1cnJvdW5kaW5nIHRoZSBvcGVuaW5nIHRhZyBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBTdHJpbmcgb2YgbWFya3VwLlxuICogQHJldHVybiB7c3RyaW5nfSBOb2RlIG5hbWUgb2YgdGhlIHN1cHBsaWVkIG1hcmt1cC5cbiAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20vZXh0cmFjdC1ub2RlbmFtZVxuICovXG5mdW5jdGlvbiBnZXROb2RlTmFtZShtYXJrdXApIHtcbiAgcmV0dXJuIG1hcmt1cC5zdWJzdHJpbmcoMSwgbWFya3VwLmluZGV4T2YoJyAnKSk7XG59XG5cbnZhciBEYW5nZXIgPSB7XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgbWFya3VwIGludG8gYW4gYXJyYXkgb2Ygbm9kZXMuIFRoZSBtYXJrdXAgaXMgZXhwZWN0ZWQgdG8gcmVuZGVyXG4gICAqIGludG8gYSBsaXN0IG9mIHJvb3Qgbm9kZXMuIEFsc28sIHRoZSBsZW5ndGggb2YgYHJlc3VsdExpc3RgIGFuZFxuICAgKiBgbWFya3VwTGlzdGAgc2hvdWxkIGJlIHRoZSBzYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5PHN0cmluZz59IG1hcmt1cExpc3QgTGlzdCBvZiBtYXJrdXAgc3RyaW5ncyB0byByZW5kZXIuXG4gICAqIEByZXR1cm4ge2FycmF5PERPTUVsZW1lbnQ+fSBMaXN0IG9mIHJlbmRlcmVkIG5vZGVzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhbmdlcm91c2x5UmVuZGVyTWFya3VwOiBmdW5jdGlvbihtYXJrdXBMaXN0KSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSxcbiAgICAgICdkYW5nZXJvdXNseVJlbmRlck1hcmt1cCguLi4pOiBDYW5ub3QgcmVuZGVyIG1hcmt1cCBpbiBhIHdvcmtlciAnICtcbiAgICAgICd0aHJlYWQuIE1ha2Ugc3VyZSBgd2luZG93YCBhbmQgYGRvY3VtZW50YCBhcmUgYXZhaWxhYmxlIGdsb2JhbGx5ICcgK1xuICAgICAgJ2JlZm9yZSByZXF1aXJpbmcgUmVhY3Qgd2hlbiB1bml0IHRlc3Rpbmcgb3IgdXNlICcgK1xuICAgICAgJ1JlYWN0LnJlbmRlclRvU3RyaW5nIGZvciBzZXJ2ZXIgcmVuZGVyaW5nLidcbiAgICApIDogaW52YXJpYW50KEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkpO1xuICAgIHZhciBub2RlTmFtZTtcbiAgICB2YXIgbWFya3VwQnlOb2RlTmFtZSA9IHt9O1xuICAgIC8vIEdyb3VwIG1hcmt1cCBieSBgbm9kZU5hbWVgIGlmIGEgd3JhcCBpcyBuZWNlc3NhcnksIGVsc2UgYnkgJyonLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya3VwTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgbWFya3VwTGlzdFtpXSxcbiAgICAgICAgJ2Rhbmdlcm91c2x5UmVuZGVyTWFya3VwKC4uLik6IE1pc3NpbmcgbWFya3VwLidcbiAgICAgICkgOiBpbnZhcmlhbnQobWFya3VwTGlzdFtpXSkpO1xuICAgICAgbm9kZU5hbWUgPSBnZXROb2RlTmFtZShtYXJrdXBMaXN0W2ldKTtcbiAgICAgIG5vZGVOYW1lID0gZ2V0TWFya3VwV3JhcChub2RlTmFtZSkgPyBub2RlTmFtZSA6ICcqJztcbiAgICAgIG1hcmt1cEJ5Tm9kZU5hbWVbbm9kZU5hbWVdID0gbWFya3VwQnlOb2RlTmFtZVtub2RlTmFtZV0gfHwgW107XG4gICAgICBtYXJrdXBCeU5vZGVOYW1lW25vZGVOYW1lXVtpXSA9IG1hcmt1cExpc3RbaV07XG4gICAgfVxuICAgIHZhciByZXN1bHRMaXN0ID0gW107XG4gICAgdmFyIHJlc3VsdExpc3RBc3NpZ25tZW50Q291bnQgPSAwO1xuICAgIGZvciAobm9kZU5hbWUgaW4gbWFya3VwQnlOb2RlTmFtZSkge1xuICAgICAgaWYgKCFtYXJrdXBCeU5vZGVOYW1lLmhhc093blByb3BlcnR5KG5vZGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBtYXJrdXBMaXN0QnlOb2RlTmFtZSA9IG1hcmt1cEJ5Tm9kZU5hbWVbbm9kZU5hbWVdO1xuXG4gICAgICAvLyBUaGlzIGZvci1pbiBsb29wIHNraXBzIHRoZSBob2xlcyBvZiB0aGUgc3BhcnNlIGFycmF5LiBUaGUgb3JkZXIgb2ZcbiAgICAgIC8vIGl0ZXJhdGlvbiBzaG91bGQgZm9sbG93IHRoZSBvcmRlciBvZiBhc3NpZ25tZW50LCB3aGljaCBoYXBwZW5zIHRvIG1hdGNoXG4gICAgICAvLyBudW1lcmljYWwgaW5kZXggb3JkZXIsIGJ1dCB3ZSBkb24ndCByZWx5IG9uIHRoYXQuXG4gICAgICB2YXIgcmVzdWx0SW5kZXg7XG4gICAgICBmb3IgKHJlc3VsdEluZGV4IGluIG1hcmt1cExpc3RCeU5vZGVOYW1lKSB7XG4gICAgICAgIGlmIChtYXJrdXBMaXN0QnlOb2RlTmFtZS5oYXNPd25Qcm9wZXJ0eShyZXN1bHRJbmRleCkpIHtcbiAgICAgICAgICB2YXIgbWFya3VwID0gbWFya3VwTGlzdEJ5Tm9kZU5hbWVbcmVzdWx0SW5kZXhdO1xuXG4gICAgICAgICAgLy8gUHVzaCB0aGUgcmVxdWVzdGVkIG1hcmt1cCB3aXRoIGFuIGFkZGl0aW9uYWwgUkVTVUxUX0lOREVYX0FUVFJcbiAgICAgICAgICAvLyBhdHRyaWJ1dGUuICBJZiB0aGUgbWFya3VwIGRvZXMgbm90IHN0YXJ0IHdpdGggYSA8IGNoYXJhY3RlciwgaXRcbiAgICAgICAgICAvLyB3aWxsIGJlIGRpc2NhcmRlZCBiZWxvdyAod2l0aCBhbiBhcHByb3ByaWF0ZSBjb25zb2xlLmVycm9yKS5cbiAgICAgICAgICBtYXJrdXBMaXN0QnlOb2RlTmFtZVtyZXN1bHRJbmRleF0gPSBtYXJrdXAucmVwbGFjZShcbiAgICAgICAgICAgIE9QRU5fVEFHX05BTUVfRVhQLFxuICAgICAgICAgICAgLy8gVGhpcyBpbmRleCB3aWxsIGJlIHBhcnNlZCBiYWNrIG91dCBiZWxvdy5cbiAgICAgICAgICAgICckMSAnICsgUkVTVUxUX0lOREVYX0FUVFIgKyAnPVwiJyArIHJlc3VsdEluZGV4ICsgJ1wiICdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlbmRlciBlYWNoIGdyb3VwIG9mIG1hcmt1cCB3aXRoIHNpbWlsYXIgd3JhcHBpbmcgYG5vZGVOYW1lYC5cbiAgICAgIHZhciByZW5kZXJOb2RlcyA9IGNyZWF0ZU5vZGVzRnJvbU1hcmt1cChcbiAgICAgICAgbWFya3VwTGlzdEJ5Tm9kZU5hbWUuam9pbignJyksXG4gICAgICAgIGVtcHR5RnVuY3Rpb24gLy8gRG8gbm90aGluZyBzcGVjaWFsIHdpdGggPHNjcmlwdD4gdGFncy5cbiAgICAgICk7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVuZGVyTm9kZXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgdmFyIHJlbmRlck5vZGUgPSByZW5kZXJOb2Rlc1tqXTtcbiAgICAgICAgaWYgKHJlbmRlck5vZGUuaGFzQXR0cmlidXRlICYmXG4gICAgICAgICAgICByZW5kZXJOb2RlLmhhc0F0dHJpYnV0ZShSRVNVTFRfSU5ERVhfQVRUUikpIHtcblxuICAgICAgICAgIHJlc3VsdEluZGV4ID0gK3JlbmRlck5vZGUuZ2V0QXR0cmlidXRlKFJFU1VMVF9JTkRFWF9BVFRSKTtcbiAgICAgICAgICByZW5kZXJOb2RlLnJlbW92ZUF0dHJpYnV0ZShSRVNVTFRfSU5ERVhfQVRUUik7XG5cbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgICAgIXJlc3VsdExpc3QuaGFzT3duUHJvcGVydHkocmVzdWx0SW5kZXgpLFxuICAgICAgICAgICAgJ0RhbmdlcjogQXNzaWduaW5nIHRvIGFuIGFscmVhZHktb2NjdXBpZWQgcmVzdWx0IGluZGV4LidcbiAgICAgICAgICApIDogaW52YXJpYW50KCFyZXN1bHRMaXN0Lmhhc093blByb3BlcnR5KHJlc3VsdEluZGV4KSkpO1xuXG4gICAgICAgICAgcmVzdWx0TGlzdFtyZXN1bHRJbmRleF0gPSByZW5kZXJOb2RlO1xuXG4gICAgICAgICAgLy8gVGhpcyBzaG91bGQgbWF0Y2ggcmVzdWx0TGlzdC5sZW5ndGggYW5kIG1hcmt1cExpc3QubGVuZ3RoIHdoZW5cbiAgICAgICAgICAvLyB3ZSdyZSBkb25lLlxuICAgICAgICAgIHJlc3VsdExpc3RBc3NpZ25tZW50Q291bnQgKz0gMTtcblxuICAgICAgICB9IGVsc2UgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnRGFuZ2VyOiBEaXNjYXJkaW5nIHVuZXhwZWN0ZWQgbm9kZTonLFxuICAgICAgICAgICAgcmVuZGVyTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbHRob3VnaCByZXN1bHRMaXN0IHdhcyBwb3B1bGF0ZWQgb3V0IG9mIG9yZGVyLCBpdCBzaG91bGQgbm93IGJlIGEgZGVuc2VcbiAgICAvLyBhcnJheS5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgcmVzdWx0TGlzdEFzc2lnbm1lbnRDb3VudCA9PT0gcmVzdWx0TGlzdC5sZW5ndGgsXG4gICAgICAnRGFuZ2VyOiBEaWQgbm90IGFzc2lnbiB0byBldmVyeSBpbmRleCBvZiByZXN1bHRMaXN0LidcbiAgICApIDogaW52YXJpYW50KHJlc3VsdExpc3RBc3NpZ25tZW50Q291bnQgPT09IHJlc3VsdExpc3QubGVuZ3RoKSk7XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgcmVzdWx0TGlzdC5sZW5ndGggPT09IG1hcmt1cExpc3QubGVuZ3RoLFxuICAgICAgJ0RhbmdlcjogRXhwZWN0ZWQgbWFya3VwIHRvIHJlbmRlciAlcyBub2RlcywgYnV0IHJlbmRlcmVkICVzLicsXG4gICAgICBtYXJrdXBMaXN0Lmxlbmd0aCxcbiAgICAgIHJlc3VsdExpc3QubGVuZ3RoXG4gICAgKSA6IGludmFyaWFudChyZXN1bHRMaXN0Lmxlbmd0aCA9PT0gbWFya3VwTGlzdC5sZW5ndGgpKTtcblxuICAgIHJldHVybiByZXN1bHRMaXN0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhIG5vZGUgd2l0aCBhIHN0cmluZyBvZiBtYXJrdXAgYXQgaXRzIGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIGl0c1xuICAgKiBwYXJlbnQuIFRoZSBtYXJrdXAgbXVzdCByZW5kZXIgaW50byBhIHNpbmdsZSByb290IG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb2xkQ2hpbGQgQ2hpbGQgbm9kZSB0byByZXBsYWNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIE1hcmt1cCB0byByZW5kZXIgaW4gcGxhY2Ugb2YgdGhlIGNoaWxkIG5vZGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6IGZ1bmN0aW9uKG9sZENoaWxkLCBtYXJrdXApIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NLFxuICAgICAgJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKC4uLik6IENhbm5vdCByZW5kZXIgbWFya3VwIGluIGEgJyArXG4gICAgICAnd29ya2VyIHRocmVhZC4gTWFrZSBzdXJlIGB3aW5kb3dgIGFuZCBgZG9jdW1lbnRgIGFyZSBhdmFpbGFibGUgJyArXG4gICAgICAnZ2xvYmFsbHkgYmVmb3JlIHJlcXVpcmluZyBSZWFjdCB3aGVuIHVuaXQgdGVzdGluZyBvciB1c2UgJyArXG4gICAgICAnUmVhY3QucmVuZGVyVG9TdHJpbmcgZm9yIHNlcnZlciByZW5kZXJpbmcuJ1xuICAgICkgOiBpbnZhcmlhbnQoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChtYXJrdXAsICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCguLi4pOiBNaXNzaW5nIG1hcmt1cC4nKSA6IGludmFyaWFudChtYXJrdXApKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgb2xkQ2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnaHRtbCcsXG4gICAgICAnZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAoLi4uKTogQ2Fubm90IHJlcGxhY2UgbWFya3VwIG9mIHRoZSAnICtcbiAgICAgICc8aHRtbD4gbm9kZS4gVGhpcyBpcyBiZWNhdXNlIGJyb3dzZXIgcXVpcmtzIG1ha2UgdGhpcyB1bnJlbGlhYmxlICcgK1xuICAgICAgJ2FuZC9vciBzbG93LiBJZiB5b3Ugd2FudCB0byByZW5kZXIgdG8gdGhlIHJvb3QgeW91IG11c3QgdXNlICcgK1xuICAgICAgJ3NlcnZlciByZW5kZXJpbmcuIFNlZSBSZWFjdC5yZW5kZXJUb1N0cmluZygpLidcbiAgICApIDogaW52YXJpYW50KG9sZENoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2h0bWwnKSk7XG5cbiAgICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXAobWFya3VwLCBlbXB0eUZ1bmN0aW9uKVswXTtcbiAgICBvbGRDaGlsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGFuZ2VyO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UkdGdVoyVnlMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUVSaGJtZGxjbHh1SUNvZ1FIUjVjR1ZqYUdWamEzTWdjM1JoZEdsakxXOXViSGxjYmlBcUwxeHVYRzR2S21wemJHbHVkQ0JsZG1sc09pQjBjblZsTENCemRXSTZJSFJ5ZFdVZ0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5RmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRGd2lLVHRjYmx4dWRtRnlJR055WldGMFpVNXZaR1Z6Um5KdmJVMWhjbXQxY0NBOUlISmxjWFZwY21Vb1hDSXVMMk55WldGMFpVNXZaR1Z6Um5KdmJVMWhjbXQxY0Z3aUtUdGNiblpoY2lCbGJYQjBlVVoxYm1OMGFXOXVJRDBnY21WeGRXbHlaU2hjSWk0dlpXMXdkSGxHZFc1amRHbHZibHdpS1R0Y2JuWmhjaUJuWlhSTllYSnJkWEJYY21Gd0lEMGdjbVZ4ZFdseVpTaGNJaTR2WjJWMFRXRnlhM1Z3VjNKaGNGd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYm5aaGNpQlBVRVZPWDFSQlIxOU9RVTFGWDBWWVVDQTlJQzllS0R4YlhpQmNYQzgrWFNzcEx6dGNiblpoY2lCU1JWTlZURlJmU1U1RVJWaGZRVlJVVWlBOUlDZGtZWFJoTFdSaGJtZGxjaTFwYm1SbGVDYzdYRzVjYmk4cUtseHVJQ29nUlhoMGNtRmpkSE1nZEdobElHQnViMlJsVG1GdFpXQWdabkp2YlNCaElITjBjbWx1WnlCdlppQnRZWEpyZFhBdVhHNGdLbHh1SUNvZ1RrOVVSVG9nUlhoMGNtRmpkR2x1WnlCMGFHVWdZRzV2WkdWT1lXMWxZQ0JrYjJWeklHNXZkQ0J5WlhGMWFYSmxJR0VnY21WbmRXeGhjaUJsZUhCeVpYTnphVzl1SUcxaGRHTm9YRzRnS2lCaVpXTmhkWE5sSUhkbElHMWhhMlVnWVhOemRXMXdkR2x2Ym5NZ1lXSnZkWFFnVW1WaFkzUXRaMlZ1WlhKaGRHVmtJRzFoY210MWNDQW9hUzVsTGlCMGFHVnlaU0JoY21VZ2JtOWNiaUFxSUhOd1lXTmxjeUJ6ZFhKeWIzVnVaR2x1WnlCMGFHVWdiM0JsYm1sdVp5QjBZV2NnWVc1a0lIUm9aWEpsSUdseklHRjBJR3hsWVhOMElHOXVaU0JoZEhSeWFXSjFkR1VwTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J0WVhKcmRYQWdVM1J5YVc1bklHOW1JRzFoY210MWNDNWNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnVG05a1pTQnVZVzFsSUc5bUlIUm9aU0J6ZFhCd2JHbGxaQ0J0WVhKcmRYQXVYRzRnS2lCQWMyVmxJR2gwZEhBNkx5OXFjM0JsY21ZdVkyOXRMMlY0ZEhKaFkzUXRibTlrWlc1aGJXVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1oyVjBUbTlrWlU1aGJXVW9iV0Z5YTNWd0tTQjdYRzRnSUhKbGRIVnliaUJ0WVhKcmRYQXVjM1ZpYzNSeWFXNW5LREVzSUcxaGNtdDFjQzVwYm1SbGVFOW1LQ2NnSnlrcE8xeHVmVnh1WEc1MllYSWdSR0Z1WjJWeUlEMGdlMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaVzVrWlhKeklHMWhjbXQxY0NCcGJuUnZJR0Z1SUdGeWNtRjVJRzltSUc1dlpHVnpMaUJVYUdVZ2JXRnlhM1Z3SUdseklHVjRjR1ZqZEdWa0lIUnZJSEpsYm1SbGNseHVJQ0FnS2lCcGJuUnZJR0VnYkdsemRDQnZaaUJ5YjI5MElHNXZaR1Z6TGlCQmJITnZMQ0IwYUdVZ2JHVnVaM1JvSUc5bUlHQnlaWE4xYkhSTWFYTjBZQ0JoYm1SY2JpQWdJQ29nWUcxaGNtdDFjRXhwYzNSZ0lITm9iM1ZzWkNCaVpTQjBhR1VnYzJGdFpTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRoY25KaGVUeHpkSEpwYm1jK2ZTQnRZWEpyZFhCTWFYTjBJRXhwYzNRZ2IyWWdiV0Z5YTNWd0lITjBjbWx1WjNNZ2RHOGdjbVZ1WkdWeUxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0aGNuSmhlVHhFVDAxRmJHVnRaVzUwUG4wZ1RHbHpkQ0J2WmlCeVpXNWtaWEpsWkNCdWIyUmxjeTVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JrWVc1blpYSnZkWE5zZVZKbGJtUmxjazFoY210MWNEb2dablZ1WTNScGIyNG9iV0Z5YTNWd1RHbHpkQ2tnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQkZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQzVqWVc1VmMyVkVUMDBzWEc0Z0lDQWdJQ0FuWkdGdVoyVnliM1Z6YkhsU1pXNWtaWEpOWVhKcmRYQW9MaTR1S1RvZ1EyRnVibTkwSUhKbGJtUmxjaUJ0WVhKcmRYQWdhVzRnWVNCM2IzSnJaWElnSnlBclhHNGdJQ0FnSUNBbmRHaHlaV0ZrTGlCTllXdGxJSE4xY21VZ1lIZHBibVJ2ZDJBZ1lXNWtJR0JrYjJOMWJXVnVkR0FnWVhKbElHRjJZV2xzWVdKc1pTQm5iRzlpWVd4c2VTQW5JQ3RjYmlBZ0lDQWdJQ2RpWldadmNtVWdjbVZ4ZFdseWFXNW5JRkpsWVdOMElIZG9aVzRnZFc1cGRDQjBaWE4wYVc1bklHOXlJSFZ6WlNBbklDdGNiaUFnSUNBZ0lDZFNaV0ZqZEM1eVpXNWtaWEpVYjFOMGNtbHVaeUJtYjNJZ2MyVnlkbVZ5SUhKbGJtUmxjbWx1Wnk0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaEZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQzVqWVc1VmMyVkVUMDBwS1R0Y2JpQWdJQ0IyWVhJZ2JtOWtaVTVoYldVN1hHNGdJQ0FnZG1GeUlHMWhjbXQxY0VKNVRtOWtaVTVoYldVZ1BTQjdmVHRjYmlBZ0lDQXZMeUJIY205MWNDQnRZWEpyZFhBZ1lua2dZRzV2WkdWT1lXMWxZQ0JwWmlCaElIZHlZWEFnYVhNZ2JtVmpaWE56WVhKNUxDQmxiSE5sSUdKNUlDY3FKeTVjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJRzFoY210MWNFeHBjM1F1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lHMWhjbXQxY0V4cGMzUmJhVjBzWEc0Z0lDQWdJQ0FnSUNka1lXNW5aWEp2ZFhOc2VWSmxibVJsY2sxaGNtdDFjQ2d1TGk0cE9pQk5hWE56YVc1bklHMWhjbXQxY0M0blhHNGdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLRzFoY210MWNFeHBjM1JiYVYwcEtUdGNiaUFnSUNBZ0lHNXZaR1ZPWVcxbElEMGdaMlYwVG05a1pVNWhiV1VvYldGeWEzVndUR2x6ZEZ0cFhTazdYRzRnSUNBZ0lDQnViMlJsVG1GdFpTQTlJR2RsZEUxaGNtdDFjRmR5WVhBb2JtOWtaVTVoYldVcElEOGdibTlrWlU1aGJXVWdPaUFuS2ljN1hHNGdJQ0FnSUNCdFlYSnJkWEJDZVU1dlpHVk9ZVzFsVzI1dlpHVk9ZVzFsWFNBOUlHMWhjbXQxY0VKNVRtOWtaVTVoYldWYmJtOWtaVTVoYldWZElIeDhJRnRkTzF4dUlDQWdJQ0FnYldGeWEzVndRbmxPYjJSbFRtRnRaVnR1YjJSbFRtRnRaVjFiYVYwZ1BTQnRZWEpyZFhCTWFYTjBXMmxkTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnY21WemRXeDBUR2x6ZENBOUlGdGRPMXh1SUNBZ0lIWmhjaUJ5WlhOMWJIUk1hWE4wUVhOemFXZHViV1Z1ZEVOdmRXNTBJRDBnTUR0Y2JpQWdJQ0JtYjNJZ0tHNXZaR1ZPWVcxbElHbHVJRzFoY210MWNFSjVUbTlrWlU1aGJXVXBJSHRjYmlBZ0lDQWdJR2xtSUNnaGJXRnlhM1Z3UW5sT2IyUmxUbUZ0WlM1b1lYTlBkMjVRY205d1pYSjBlU2h1YjJSbFRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCMllYSWdiV0Z5YTNWd1RHbHpkRUo1VG05a1pVNWhiV1VnUFNCdFlYSnJkWEJDZVU1dlpHVk9ZVzFsVzI1dlpHVk9ZVzFsWFR0Y2JseHVJQ0FnSUNBZ0x5OGdWR2hwY3lCbWIzSXRhVzRnYkc5dmNDQnphMmx3Y3lCMGFHVWdhRzlzWlhNZ2IyWWdkR2hsSUhOd1lYSnpaU0JoY25KaGVTNGdWR2hsSUc5eVpHVnlJRzltWEc0Z0lDQWdJQ0F2THlCcGRHVnlZWFJwYjI0Z2MyaHZkV3hrSUdadmJHeHZkeUIwYUdVZ2IzSmtaWElnYjJZZ1lYTnphV2R1YldWdWRDd2dkMmhwWTJnZ2FHRndjR1Z1Y3lCMGJ5QnRZWFJqYUZ4dUlDQWdJQ0FnTHk4Z2JuVnRaWEpwWTJGc0lHbHVaR1Y0SUc5eVpHVnlMQ0JpZFhRZ2QyVWdaRzl1SjNRZ2NtVnNlU0J2YmlCMGFHRjBMbHh1SUNBZ0lDQWdkbUZ5SUhKbGMzVnNkRWx1WkdWNE8xeHVJQ0FnSUNBZ1ptOXlJQ2h5WlhOMWJIUkpibVJsZUNCcGJpQnRZWEpyZFhCTWFYTjBRbmxPYjJSbFRtRnRaU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9iV0Z5YTNWd1RHbHpkRUo1VG05a1pVNWhiV1V1YUdGelQzZHVVSEp2Y0dWeWRIa29jbVZ6ZFd4MFNXNWtaWGdwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkbUZ5SUcxaGNtdDFjQ0E5SUcxaGNtdDFjRXhwYzNSQ2VVNXZaR1ZPWVcxbFczSmxjM1ZzZEVsdVpHVjRYVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDOHZJRkIxYzJnZ2RHaGxJSEpsY1hWbGMzUmxaQ0J0WVhKcmRYQWdkMmwwYUNCaGJpQmhaR1JwZEdsdmJtRnNJRkpGVTFWTVZGOUpUa1JGV0Y5QlZGUlNYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1lYUjBjbWxpZFhSbExpQWdTV1lnZEdobElHMWhjbXQxY0NCa2IyVnpJRzV2ZENCemRHRnlkQ0IzYVhSb0lHRWdQQ0JqYUdGeVlXTjBaWElzSUdsMFhHNGdJQ0FnSUNBZ0lDQWdMeThnZDJsc2JDQmlaU0JrYVhOallYSmtaV1FnWW1Wc2IzY2dLSGRwZEdnZ1lXNGdZWEJ3Y205d2NtbGhkR1VnWTI5dWMyOXNaUzVsY25KdmNpa3VYRzRnSUNBZ0lDQWdJQ0FnYldGeWEzVndUR2x6ZEVKNVRtOWtaVTVoYldWYmNtVnpkV3gwU1c1a1pYaGRJRDBnYldGeWEzVndMbkpsY0d4aFkyVW9YRzRnSUNBZ0lDQWdJQ0FnSUNCUFVFVk9YMVJCUjE5T1FVMUZYMFZZVUN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUZSb2FYTWdhVzVrWlhnZ2QybHNiQ0JpWlNCd1lYSnpaV1FnWW1GamF5QnZkWFFnWW1Wc2IzY3VYRzRnSUNBZ0lDQWdJQ0FnSUNBbkpERWdKeUFySUZKRlUxVk1WRjlKVGtSRldGOUJWRlJTSUNzZ0p6MWNJaWNnS3lCeVpYTjFiSFJKYm1SbGVDQXJJQ2RjSWlBblhHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QlNaVzVrWlhJZ1pXRmphQ0JuY205MWNDQnZaaUJ0WVhKcmRYQWdkMmwwYUNCemFXMXBiR0Z5SUhkeVlYQndhVzVuSUdCdWIyUmxUbUZ0WldBdVhHNGdJQ0FnSUNCMllYSWdjbVZ1WkdWeVRtOWtaWE1nUFNCamNtVmhkR1ZPYjJSbGMwWnliMjFOWVhKcmRYQW9YRzRnSUNBZ0lDQWdJRzFoY210MWNFeHBjM1JDZVU1dlpHVk9ZVzFsTG1wdmFXNG9KeWNwTEZ4dUlDQWdJQ0FnSUNCbGJYQjBlVVoxYm1OMGFXOXVJQzh2SUVSdklHNXZkR2hwYm1jZ2MzQmxZMmxoYkNCM2FYUm9JRHh6WTNKcGNIUStJSFJoWjNNdVhHNGdJQ0FnSUNBcE8xeHVYRzRnSUNBZ0lDQm1iM0lnS0haaGNpQnFJRDBnTURzZ2FpQThJSEpsYm1SbGNrNXZaR1Z6TG14bGJtZDBhRHNnS3l0cUtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCeVpXNWtaWEpPYjJSbElEMGdjbVZ1WkdWeVRtOWtaWE5iYWwwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h5Wlc1a1pYSk9iMlJsTG1oaGMwRjBkSEpwWW5WMFpTQW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVnVaR1Z5VG05a1pTNW9ZWE5CZEhSeWFXSjFkR1VvVWtWVFZVeFVYMGxPUkVWWVgwRlVWRklwS1NCN1hHNWNiaUFnSUNBZ0lDQWdJQ0J5WlhOMWJIUkpibVJsZUNBOUlDdHlaVzVrWlhKT2IyUmxMbWRsZEVGMGRISnBZblYwWlNoU1JWTlZURlJmU1U1RVJWaGZRVlJVVWlrN1hHNGdJQ0FnSUNBZ0lDQWdjbVZ1WkdWeVRtOWtaUzV5WlcxdmRtVkJkSFJ5YVdKMWRHVW9Va1ZUVlV4VVgwbE9SRVZZWDBGVVZGSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0Z5WlhOMWJIUk1hWE4wTG1oaGMwOTNibEJ5YjNCbGNuUjVLSEpsYzNWc2RFbHVaR1Y0S1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2RFWVc1blpYSTZJRUZ6YzJsbmJtbHVaeUIwYnlCaGJpQmhiSEpsWVdSNUxXOWpZM1Z3YVdWa0lISmxjM1ZzZENCcGJtUmxlQzRuWEc0Z0lDQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2doY21WemRXeDBUR2x6ZEM1b1lYTlBkMjVRY205d1pYSjBlU2h5WlhOMWJIUkpibVJsZUNrcEtUdGNibHh1SUNBZ0lDQWdJQ0FnSUhKbGMzVnNkRXhwYzNSYmNtVnpkV3gwU1c1a1pYaGRJRDBnY21WdVpHVnlUbTlrWlR0Y2JseHVJQ0FnSUNBZ0lDQWdJQzh2SUZSb2FYTWdjMmh2ZFd4a0lHMWhkR05vSUhKbGMzVnNkRXhwYzNRdWJHVnVaM1JvSUdGdVpDQnRZWEpyZFhCTWFYTjBMbXhsYm1kMGFDQjNhR1Z1WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkMlVuY21VZ1pHOXVaUzVjYmlBZ0lDQWdJQ0FnSUNCeVpYTjFiSFJNYVhOMFFYTnphV2R1YldWdWRFTnZkVzUwSUNzOUlERTdYRzVjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLRnh1SUNBZ0lDQWdJQ0FnSUNBZ0owUmhibWRsY2pvZ1JHbHpZMkZ5WkdsdVp5QjFibVY0Y0dWamRHVmtJRzV2WkdVNkp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGJtUmxjazV2WkdWY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnUVd4MGFHOTFaMmdnY21WemRXeDBUR2x6ZENCM1lYTWdjRzl3ZFd4aGRHVmtJRzkxZENCdlppQnZjbVJsY2l3Z2FYUWdjMmh2ZFd4a0lHNXZkeUJpWlNCaElHUmxibk5sWEc0Z0lDQWdMeThnWVhKeVlYa3VYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUhKbGMzVnNkRXhwYzNSQmMzTnBaMjV0Wlc1MFEyOTFiblFnUFQwOUlISmxjM1ZzZEV4cGMzUXViR1Z1WjNSb0xGeHVJQ0FnSUNBZ0owUmhibWRsY2pvZ1JHbGtJRzV2ZENCaGMzTnBaMjRnZEc4Z1pYWmxjbmtnYVc1a1pYZ2diMllnY21WemRXeDBUR2x6ZEM0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHlaWE4xYkhSTWFYTjBRWE56YVdkdWJXVnVkRU52ZFc1MElEMDlQU0J5WlhOMWJIUk1hWE4wTG14bGJtZDBhQ2twTzF4dVhHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJSEpsYzNWc2RFeHBjM1F1YkdWdVozUm9JRDA5UFNCdFlYSnJkWEJNYVhOMExteGxibWQwYUN4Y2JpQWdJQ0FnSUNkRVlXNW5aWEk2SUVWNGNHVmpkR1ZrSUcxaGNtdDFjQ0IwYnlCeVpXNWtaWElnSlhNZ2JtOWtaWE1zSUdKMWRDQnlaVzVrWlhKbFpDQWxjeTRuTEZ4dUlDQWdJQ0FnYldGeWEzVndUR2x6ZEM1c1pXNW5kR2dzWEc0Z0lDQWdJQ0J5WlhOMWJIUk1hWE4wTG14bGJtZDBhRnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvY21WemRXeDBUR2x6ZEM1c1pXNW5kR2dnUFQwOUlHMWhjbXQxY0V4cGMzUXViR1Z1WjNSb0tTazdYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVnpkV3gwVEdsemREdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1Wd2JHRmpaWE1nWVNCdWIyUmxJSGRwZEdnZ1lTQnpkSEpwYm1jZ2IyWWdiV0Z5YTNWd0lHRjBJR2wwY3lCamRYSnlaVzUwSUhCdmMybDBhVzl1SUhkcGRHaHBiaUJwZEhOY2JpQWdJQ29nY0dGeVpXNTBMaUJVYUdVZ2JXRnlhM1Z3SUcxMWMzUWdjbVZ1WkdWeUlHbHVkRzhnWVNCemFXNW5iR1VnY205dmRDQnViMlJsTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJRzlzWkVOb2FXeGtJRU5vYVd4a0lHNXZaR1VnZEc4Z2NtVndiR0ZqWlM1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzFoY210MWNDQk5ZWEpyZFhBZ2RHOGdjbVZ1WkdWeUlHbHVJSEJzWVdObElHOW1JSFJvWlNCamFHbHNaQ0J1YjJSbExseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHUmhibWRsY205MWMyeDVVbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3T2lCbWRXNWpkR2x2YmlodmJHUkRhR2xzWkN3Z2JXRnlhM1Z3S1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJRVY0WldOMWRHbHZia1Z1ZG1seWIyNXRaVzUwTG1OaGJsVnpaVVJQVFN4Y2JpQWdJQ0FnSUNka1lXNW5aWEp2ZFhOc2VWSmxjR3hoWTJWT2IyUmxWMmwwYUUxaGNtdDFjQ2d1TGk0cE9pQkRZVzV1YjNRZ2NtVnVaR1Z5SUcxaGNtdDFjQ0JwYmlCaElDY2dLMXh1SUNBZ0lDQWdKM2R2Y210bGNpQjBhSEpsWVdRdUlFMWhhMlVnYzNWeVpTQmdkMmx1Wkc5M1lDQmhibVFnWUdSdlkzVnRaVzUwWUNCaGNtVWdZWFpoYVd4aFlteGxJQ2NnSzF4dUlDQWdJQ0FnSjJkc2IySmhiR3g1SUdKbFptOXlaU0J5WlhGMWFYSnBibWNnVW1WaFkzUWdkMmhsYmlCMWJtbDBJSFJsYzNScGJtY2diM0lnZFhObElDY2dLMXh1SUNBZ0lDQWdKMUpsWVdOMExuSmxibVJsY2xSdlUzUnlhVzVuSUdadmNpQnpaWEoyWlhJZ2NtVnVaR1Z5YVc1bkxpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRVY0WldOMWRHbHZia1Z1ZG1seWIyNXRaVzUwTG1OaGJsVnpaVVJQVFNrcE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvYldGeWEzVndMQ0FuWkdGdVoyVnliM1Z6YkhsU1pYQnNZV05sVG05a1pWZHBkR2hOWVhKcmRYQW9MaTR1S1RvZ1RXbHpjMmx1WnlCdFlYSnJkWEF1SnlrZ09pQnBiblpoY21saGJuUW9iV0Z5YTNWd0tTazdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUc5c1pFTm9hV3hrTG5SaFowNWhiV1V1ZEc5TWIzZGxja05oYzJVb0tTQWhQVDBnSjJoMGJXd25MRnh1SUNBZ0lDQWdKMlJoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd0tDNHVMaWs2SUVOaGJtNXZkQ0J5WlhCc1lXTmxJRzFoY210MWNDQnZaaUIwYUdVZ0p5QXJYRzRnSUNBZ0lDQW5QR2gwYld3K0lHNXZaR1V1SUZSb2FYTWdhWE1nWW1WallYVnpaU0JpY205M2MyVnlJSEYxYVhKcmN5QnRZV3RsSUhSb2FYTWdkVzV5Wld4cFlXSnNaU0FuSUN0Y2JpQWdJQ0FnSUNkaGJtUXZiM0lnYzJ4dmR5NGdTV1lnZVc5MUlIZGhiblFnZEc4Z2NtVnVaR1Z5SUhSdklIUm9aU0J5YjI5MElIbHZkU0J0ZFhOMElIVnpaU0FuSUN0Y2JpQWdJQ0FnSUNkelpYSjJaWElnY21WdVpHVnlhVzVuTGlCVFpXVWdVbVZoWTNRdWNtVnVaR1Z5Vkc5VGRISnBibWNvS1M0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHZiR1JEYUdsc1pDNTBZV2RPWVcxbExuUnZURzkzWlhKRFlYTmxLQ2tnSVQwOUlDZG9kRzFzSnlrcE8xeHVYRzRnSUNBZ2RtRnlJRzVsZDBOb2FXeGtJRDBnWTNKbFlYUmxUbTlrWlhOR2NtOXRUV0Z5YTNWd0tHMWhjbXQxY0N3Z1pXMXdkSGxHZFc1amRHbHZiaWxiTUYwN1hHNGdJQ0FnYjJ4a1EyaHBiR1F1Y0dGeVpXNTBUbTlrWlM1eVpYQnNZV05sUTJocGJHUW9ibVYzUTJocGJHUXNJRzlzWkVOb2FXeGtLVHRjYmlBZ2ZWeHVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlFUmhibWRsY2p0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIERlZmF1bHRFdmVudFBsdWdpbk9yZGVyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcblxuLyoqXG4gKiBNb2R1bGUgdGhhdCBpcyBpbmplY3RhYmxlIGludG8gYEV2ZW50UGx1Z2luSHViYCwgdGhhdCBzcGVjaWZpZXMgYVxuICogZGV0ZXJtaW5pc3RpYyBvcmRlcmluZyBvZiBgRXZlbnRQbHVnaW5gcy4gQSBjb252ZW5pZW50IHdheSB0byByZWFzb24gYWJvdXRcbiAqIHBsdWdpbnMsIHdpdGhvdXQgaGF2aW5nIHRvIHBhY2thZ2UgZXZlcnkgb25lIG9mIHRoZW0uIFRoaXMgaXMgYmV0dGVyIHRoYW5cbiAqIGhhdmluZyBwbHVnaW5zIGJlIG9yZGVyZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGV5IGFyZSBpbmplY3RlZCBiZWNhdXNlXG4gKiB0aGF0IG9yZGVyaW5nIHdvdWxkIGJlIGluZmx1ZW5jZWQgYnkgdGhlIHBhY2thZ2luZyBvcmRlci5cbiAqIGBSZXNwb25kZXJFdmVudFBsdWdpbmAgbXVzdCBvY2N1ciBiZWZvcmUgYFNpbXBsZUV2ZW50UGx1Z2luYCBzbyB0aGF0XG4gKiBwcmV2ZW50aW5nIGRlZmF1bHQgb24gZXZlbnRzIGlzIGNvbnZlbmllbnQgaW4gYFNpbXBsZUV2ZW50UGx1Z2luYCBoYW5kbGVycy5cbiAqL1xudmFyIERlZmF1bHRFdmVudFBsdWdpbk9yZGVyID0gW1xuICBrZXlPZih7UmVzcG9uZGVyRXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe1NpbXBsZUV2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtUYXBFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7RW50ZXJMZWF2ZUV2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtDaGFuZ2VFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7U2VsZWN0RXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe0JlZm9yZUlucHV0RXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe0FuYWx5dGljc0V2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtNb2JpbGVTYWZhcmlDbGlja0V2ZW50UGx1Z2luOiBudWxsfSlcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoXCIuL0V2ZW50UHJvcGFnYXRvcnNcIik7XG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY01vdXNlRXZlbnRcIik7XG5cbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG52YXIgZ2V0Rmlyc3RSZWFjdERPTSA9IFJlYWN0TW91bnQuZ2V0Rmlyc3RSZWFjdERPTTtcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIG1vdXNlRW50ZXI6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiBrZXlPZih7b25Nb3VzZUVudGVyOiBudWxsfSksXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0LFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU92ZXJcbiAgICBdXG4gIH0sXG4gIG1vdXNlTGVhdmU6IHtcbiAgICByZWdpc3RyYXRpb25OYW1lOiBrZXlPZih7b25Nb3VzZUxlYXZlOiBudWxsfSksXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0LFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU92ZXJcbiAgICBdXG4gIH1cbn07XG5cbnZhciBleHRyYWN0ZWRFdmVudHMgPSBbbnVsbCwgbnVsbF07XG5cbnZhciBFbnRlckxlYXZlRXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICAvKipcbiAgICogRm9yIGFsbW9zdCBldmVyeSBpbnRlcmFjdGlvbiB3ZSBjYXJlIGFib3V0LCB0aGVyZSB3aWxsIGJlIGJvdGggYSB0b3AtbGV2ZWxcbiAgICogYG1vdXNlb3ZlcmAgYW5kIGBtb3VzZW91dGAgZXZlbnQgdGhhdCBvY2N1cnMuIE9ubHkgdXNlIGBtb3VzZW91dGAgc28gdGhhdFxuICAgKiB3ZSBkbyBub3QgZXh0cmFjdCBkdXBsaWNhdGUgZXZlbnRzLiBIb3dldmVyLCBtb3ZpbmcgdGhlIG1vdXNlIGludG8gdGhlXG4gICAqIGJyb3dzZXIgZnJvbSBvdXRzaWRlIHdpbGwgbm90IGZpcmUgYSBgbW91c2VvdXRgIGV2ZW50LiBJbiB0aGlzIGNhc2UsIHdlIHVzZVxuICAgKiB0aGUgYG1vdXNlb3ZlcmAgdG9wLWxldmVsIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50c31cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnQpIHtcbiAgICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3ZlciAmJlxuICAgICAgICAobmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodG9wTGV2ZWxUeXBlICE9PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0ICYmXG4gICAgICAgIHRvcExldmVsVHlwZSAhPT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU92ZXIpIHtcbiAgICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2UgaW4gb3IgbW91c2Ugb3V0IC0gaWdub3JpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgd2luO1xuICAgIGlmICh0b3BMZXZlbFRhcmdldC53aW5kb3cgPT09IHRvcExldmVsVGFyZ2V0KSB7XG4gICAgICAvLyBgdG9wTGV2ZWxUYXJnZXRgIGlzIHByb2JhYmx5IGEgd2luZG93IG9iamVjdC5cbiAgICAgIHdpbiA9IHRvcExldmVsVGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgICB2YXIgZG9jID0gdG9wTGV2ZWxUYXJnZXQub3duZXJEb2N1bWVudDtcbiAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgd2luID0gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW4gPSB3aW5kb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb20sIHRvO1xuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VPdXQpIHtcbiAgICAgIGZyb20gPSB0b3BMZXZlbFRhcmdldDtcbiAgICAgIHRvID1cbiAgICAgICAgZ2V0Rmlyc3RSZWFjdERPTShuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudCkgfHxcbiAgICAgICAgd2luO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcm9tID0gd2luO1xuICAgICAgdG8gPSB0b3BMZXZlbFRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAgIC8vIE5vdGhpbmcgcGVydGFpbnMgdG8gb3VyIG1hbmFnZWQgY29tcG9uZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBmcm9tSUQgPSBmcm9tID8gUmVhY3RNb3VudC5nZXRJRChmcm9tKSA6ICcnO1xuICAgIHZhciB0b0lEID0gdG8gPyBSZWFjdE1vdW50LmdldElEKHRvKSA6ICcnO1xuXG4gICAgdmFyIGxlYXZlID0gU3ludGhldGljTW91c2VFdmVudC5nZXRQb29sZWQoXG4gICAgICBldmVudFR5cGVzLm1vdXNlTGVhdmUsXG4gICAgICBmcm9tSUQsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG4gICAgbGVhdmUudHlwZSA9ICdtb3VzZWxlYXZlJztcbiAgICBsZWF2ZS50YXJnZXQgPSBmcm9tO1xuICAgIGxlYXZlLnJlbGF0ZWRUYXJnZXQgPSB0bztcblxuICAgIHZhciBlbnRlciA9IFN5bnRoZXRpY01vdXNlRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgZXZlbnRUeXBlcy5tb3VzZUVudGVyLFxuICAgICAgdG9JRCxcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKTtcbiAgICBlbnRlci50eXBlID0gJ21vdXNlZW50ZXInO1xuICAgIGVudGVyLnRhcmdldCA9IHRvO1xuICAgIGVudGVyLnJlbGF0ZWRUYXJnZXQgPSBmcm9tO1xuXG4gICAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXMobGVhdmUsIGVudGVyLCBmcm9tSUQsIHRvSUQpO1xuXG4gICAgZXh0cmFjdGVkRXZlbnRzWzBdID0gbGVhdmU7XG4gICAgZXh0cmFjdGVkRXZlbnRzWzFdID0gZW50ZXI7XG5cbiAgICByZXR1cm4gZXh0cmFjdGVkRXZlbnRzO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV2ZW50Q29uc3RhbnRzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5TWlycm9yID0gcmVxdWlyZShcIi4va2V5TWlycm9yXCIpO1xuXG52YXIgUHJvcGFnYXRpb25QaGFzZXMgPSBrZXlNaXJyb3Ioe2J1YmJsZWQ6IG51bGwsIGNhcHR1cmVkOiBudWxsfSk7XG5cbi8qKlxuICogVHlwZXMgb2YgcmF3IHNpZ25hbHMgZnJvbSB0aGUgYnJvd3NlciBjYXVnaHQgYXQgdGhlIHRvcCBsZXZlbC5cbiAqL1xudmFyIHRvcExldmVsVHlwZXMgPSBrZXlNaXJyb3Ioe1xuICB0b3BCbHVyOiBudWxsLFxuICB0b3BDaGFuZ2U6IG51bGwsXG4gIHRvcENsaWNrOiBudWxsLFxuICB0b3BDb21wb3NpdGlvbkVuZDogbnVsbCxcbiAgdG9wQ29tcG9zaXRpb25TdGFydDogbnVsbCxcbiAgdG9wQ29tcG9zaXRpb25VcGRhdGU6IG51bGwsXG4gIHRvcENvbnRleHRNZW51OiBudWxsLFxuICB0b3BDb3B5OiBudWxsLFxuICB0b3BDdXQ6IG51bGwsXG4gIHRvcERvdWJsZUNsaWNrOiBudWxsLFxuICB0b3BEcmFnOiBudWxsLFxuICB0b3BEcmFnRW5kOiBudWxsLFxuICB0b3BEcmFnRW50ZXI6IG51bGwsXG4gIHRvcERyYWdFeGl0OiBudWxsLFxuICB0b3BEcmFnTGVhdmU6IG51bGwsXG4gIHRvcERyYWdPdmVyOiBudWxsLFxuICB0b3BEcmFnU3RhcnQ6IG51bGwsXG4gIHRvcERyb3A6IG51bGwsXG4gIHRvcEVycm9yOiBudWxsLFxuICB0b3BGb2N1czogbnVsbCxcbiAgdG9wSW5wdXQ6IG51bGwsXG4gIHRvcEtleURvd246IG51bGwsXG4gIHRvcEtleVByZXNzOiBudWxsLFxuICB0b3BLZXlVcDogbnVsbCxcbiAgdG9wTG9hZDogbnVsbCxcbiAgdG9wTW91c2VEb3duOiBudWxsLFxuICB0b3BNb3VzZU1vdmU6IG51bGwsXG4gIHRvcE1vdXNlT3V0OiBudWxsLFxuICB0b3BNb3VzZU92ZXI6IG51bGwsXG4gIHRvcE1vdXNlVXA6IG51bGwsXG4gIHRvcFBhc3RlOiBudWxsLFxuICB0b3BSZXNldDogbnVsbCxcbiAgdG9wU2Nyb2xsOiBudWxsLFxuICB0b3BTZWxlY3Rpb25DaGFuZ2U6IG51bGwsXG4gIHRvcFN1Ym1pdDogbnVsbCxcbiAgdG9wVGV4dElucHV0OiBudWxsLFxuICB0b3BUb3VjaENhbmNlbDogbnVsbCxcbiAgdG9wVG91Y2hFbmQ6IG51bGwsXG4gIHRvcFRvdWNoTW92ZTogbnVsbCxcbiAgdG9wVG91Y2hTdGFydDogbnVsbCxcbiAgdG9wV2hlZWw6IG51bGxcbn0pO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSB7XG4gIHRvcExldmVsVHlwZXM6IHRvcExldmVsVHlwZXMsXG4gIFByb3BhZ2F0aW9uUGhhc2VzOiBQcm9wYWdhdGlvblBoYXNlc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudENvbnN0YW50cztcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV2ZW50TGlzdGVuZXJcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xuXG4vKipcbiAqIFVwc3RyZWFtIHZlcnNpb24gb2YgZXZlbnQgbGlzdGVuZXIuIERvZXMgbm90IHRha2UgaW50byBhY2NvdW50IHNwZWNpZmljXG4gKiBuYXR1cmUgb2YgcGxhdGZvcm0uXG4gKi9cbnZhciBFdmVudExpc3RlbmVyID0ge1xuICAvKipcbiAgICogTGlzdGVuIHRvIERPTSBldmVudHMgZHVyaW5nIHRoZSBidWJibGUgcGhhc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRhcmdldCBET00gZWxlbWVudCB0byByZWdpc3RlciBsaXN0ZW5lciBvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZSBFdmVudCB0eXBlLCBlLmcuICdjbGljaycgb3IgJ21vdXNlb3ZlcicuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCB3aXRoIGEgYHJlbW92ZWAgbWV0aG9kLlxuICAgKi9cbiAgbGlzdGVuOiBmdW5jdGlvbih0YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodGFyZ2V0LmF0dGFjaEV2ZW50KSB7XG4gICAgICB0YXJnZXQuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50VHlwZSwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0YXJnZXQuZGV0YWNoRXZlbnQoJ29uJyArIGV2ZW50VHlwZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogTGlzdGVuIHRvIERPTSBldmVudHMgZHVyaW5nIHRoZSBjYXB0dXJlIHBoYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0YXJnZXQgRE9NIGVsZW1lbnQgdG8gcmVnaXN0ZXIgbGlzdGVuZXIgb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgRXZlbnQgdHlwZSwgZS5nLiAnY2xpY2snIG9yICdtb3VzZW92ZXInLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybiB7b2JqZWN0fSBPYmplY3Qgd2l0aCBhIGByZW1vdmVgIG1ldGhvZC5cbiAgICovXG4gIGNhcHR1cmU6IGZ1bmN0aW9uKHRhcmdldCwgZXZlbnRUeXBlLCBjYWxsYmFjaykge1xuICAgIGlmICghdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnQXR0ZW1wdGVkIHRvIGxpc3RlbiB0byBldmVudHMgZHVyaW5nIHRoZSBjYXB0dXJlIHBoYXNlIG9uIGEgJyArXG4gICAgICAgICAgJ2Jyb3dzZXIgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjYXB0dXJlIHBoYXNlLiBZb3VyIGFwcGxpY2F0aW9uICcgK1xuICAgICAgICAgICd3aWxsIG5vdCByZWNlaXZlIHNvbWUgZXZlbnRzLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZW1wdHlGdW5jdGlvblxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICByZWdpc3RlckRlZmF1bHQ6IGZ1bmN0aW9uKCkge31cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRMaXN0ZW5lcjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJYWmxiblJNYVhOMFpXNWxjaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2x4dUlDb2dUR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUZ3WVdOb1pTQk1hV05sYm5ObExDQldaWEp6YVc5dUlESXVNQ0FvZEdobElGd2lUR2xqWlc1elpWd2lLVHRjYmlBcUlIbHZkU0J0WVhrZ2JtOTBJSFZ6WlNCMGFHbHpJR1pwYkdVZ1pYaGpaWEIwSUdsdUlHTnZiWEJzYVdGdVkyVWdkMmwwYUNCMGFHVWdUR2xqWlc1elpTNWNiaUFxSUZsdmRTQnRZWGtnYjJKMFlXbHVJR0VnWTI5d2VTQnZaaUIwYUdVZ1RHbGpaVzV6WlNCaGRGeHVJQ3BjYmlBcUlHaDBkSEE2THk5M2QzY3VZWEJoWTJobExtOXlaeTlzYVdObGJuTmxjeTlNU1VORlRsTkZMVEl1TUZ4dUlDcGNiaUFxSUZWdWJHVnpjeUJ5WlhGMWFYSmxaQ0JpZVNCaGNIQnNhV05oWW14bElHeGhkeUJ2Y2lCaFozSmxaV1FnZEc4Z2FXNGdkM0pwZEdsdVp5d2djMjltZEhkaGNtVmNiaUFxSUdScGMzUnlhV0oxZEdWa0lIVnVaR1Z5SUhSb1pTQk1hV05sYm5ObElHbHpJR1JwYzNSeWFXSjFkR1ZrSUc5dUlHRnVJRndpUVZNZ1NWTmNJaUJDUVZOSlV5eGNiaUFxSUZkSlZFaFBWVlFnVjBGU1VrRk9WRWxGVXlCUFVpQkRUMDVFU1ZSSlQwNVRJRTlHSUVGT1dTQkxTVTVFTENCbGFYUm9aWElnWlhod2NtVnpjeUJ2Y2lCcGJYQnNhV1ZrTGx4dUlDb2dVMlZsSUhSb1pTQk1hV05sYm5ObElHWnZjaUIwYUdVZ2MzQmxZMmxtYVdNZ2JHRnVaM1ZoWjJVZ1oyOTJaWEp1YVc1bklIQmxjbTFwYzNOcGIyNXpJR0Z1WkZ4dUlDb2diR2x0YVhSaGRHbHZibk1nZFc1a1pYSWdkR2hsSUV4cFkyVnVjMlV1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRVYyWlc1MFRHbHpkR1Z1WlhKY2JpQXFJRUIwZVhCbFkyaGxZMnR6WEc0Z0tpOWNibHh1ZG1GeUlHVnRjSFI1Um5WdVkzUnBiMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOWxiWEIwZVVaMWJtTjBhVzl1WENJcE8xeHVYRzR2S2lwY2JpQXFJRlZ3YzNSeVpXRnRJSFpsY25OcGIyNGdiMllnWlhabGJuUWdiR2x6ZEdWdVpYSXVJRVJ2WlhNZ2JtOTBJSFJoYTJVZ2FXNTBieUJoWTJOdmRXNTBJSE53WldOcFptbGpYRzRnS2lCdVlYUjFjbVVnYjJZZ2NHeGhkR1p2Y20wdVhHNGdLaTljYm5aaGNpQkZkbVZ1ZEV4cGMzUmxibVZ5SUQwZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nVEdsemRHVnVJSFJ2SUVSUFRTQmxkbVZ1ZEhNZ1pIVnlhVzVuSUhSb1pTQmlkV0ppYkdVZ2NHaGhjMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1JFOU5SWFpsYm5SVVlYSm5aWFI5SUhSaGNtZGxkQ0JFVDAwZ1pXeGxiV1Z1ZENCMGJ5QnlaV2RwYzNSbGNpQnNhWE4wWlc1bGNpQnZiaTVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHVjJaVzUwVkhsd1pTQkZkbVZ1ZENCMGVYQmxMQ0JsTG1jdUlDZGpiR2xqYXljZ2IzSWdKMjF2ZFhObGIzWmxjaWN1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNTlJR05oYkd4aVlXTnJJRU5oYkd4aVlXTnJJR1oxYm1OMGFXOXVMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdHZZbXBsWTNSOUlFOWlhbVZqZENCM2FYUm9JR0VnWUhKbGJXOTJaV0FnYldWMGFHOWtMbHh1SUNBZ0tpOWNiaUFnYkdsemRHVnVPaUJtZFc1amRHbHZiaWgwWVhKblpYUXNJR1YyWlc1MFZIbHdaU3dnWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0JwWmlBb2RHRnlaMlYwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElwSUh0Y2JpQWdJQ0FnSUhSaGNtZGxkQzVoWkdSRmRtVnVkRXhwYzNSbGJtVnlLR1YyWlc1MFZIbHdaU3dnWTJGc2JHSmhZMnNzSUdaaGJITmxLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQWdJSEpsYlc5MlpUb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHRnlaMlYwTG5KbGJXOTJaVVYyWlc1MFRHbHpkR1Z1WlhJb1pYWmxiblJVZVhCbExDQmpZV3hzWW1GamF5d2dabUZzYzJVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kR0Z5WjJWMExtRjBkR0ZqYUVWMlpXNTBLU0I3WEc0Z0lDQWdJQ0IwWVhKblpYUXVZWFIwWVdOb1JYWmxiblFvSjI5dUp5QXJJR1YyWlc1MFZIbHdaU3dnWTJGc2JHSmhZMnNwTzF4dUlDQWdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJQ0FnY21WdGIzWmxPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBZWEpuWlhRdVpHVjBZV05vUlhabGJuUW9KMjl1SnlBcklHVjJaVzUwVkhsd1pTd2dZMkZzYkdKaFkyc3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RHbHpkR1Z1SUhSdklFUlBUU0JsZG1WdWRITWdaSFZ5YVc1bklIUm9aU0JqWVhCMGRYSmxJSEJvWVhObExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWMlpXNTBWR0Z5WjJWMGZTQjBZWEpuWlhRZ1JFOU5JR1ZzWlcxbGJuUWdkRzhnY21WbmFYTjBaWElnYkdsemRHVnVaWElnYjI0dVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JsZG1WdWRGUjVjR1VnUlhabGJuUWdkSGx3WlN3Z1pTNW5MaUFuWTJ4cFkyc25JRzl5SUNkdGIzVnpaVzkyWlhJbkxseHVJQ0FnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCallXeHNZbUZqYXlCRFlXeHNZbUZqYXlCbWRXNWpkR2x2Ymk1Y2JpQWdJQ29nUUhKbGRIVnliaUI3YjJKcVpXTjBmU0JQWW1wbFkzUWdkMmwwYUNCaElHQnlaVzF2ZG1WZ0lHMWxkR2h2WkM1Y2JpQWdJQ292WEc0Z0lHTmhjSFIxY21VNklHWjFibU4wYVc5dUtIUmhjbWRsZEN3Z1pYWmxiblJVZVhCbExDQmpZV3hzWW1GamF5a2dlMXh1SUNBZ0lHbG1JQ2doZEdGeVoyVjBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSXBJSHRjYmlBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpaGNiaUFnSUNBZ0lDQWdJQ0FuUVhSMFpXMXdkR1ZrSUhSdklHeHBjM1JsYmlCMGJ5QmxkbVZ1ZEhNZ1pIVnlhVzVuSUhSb1pTQmpZWEIwZFhKbElIQm9ZWE5sSUc5dUlHRWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oySnliM2R6WlhJZ2RHaGhkQ0JrYjJWeklHNXZkQ0J6ZFhCd2IzSjBJSFJvWlNCallYQjBkWEpsSUhCb1lYTmxMaUJaYjNWeUlHRndjR3hwWTJGMGFXOXVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZDNhV3hzSUc1dmRDQnlaV05sYVhabElITnZiV1VnWlhabGJuUnpMaWRjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUhKbGJXOTJaVG9nWlcxd2RIbEdkVzVqZEdsdmJseHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdGeVoyVjBMbUZrWkVWMlpXNTBUR2x6ZEdWdVpYSW9aWFpsYm5SVWVYQmxMQ0JqWVd4c1ltRmpheXdnZEhKMVpTazdYRzRnSUNBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ0lDQnlaVzF2ZG1VNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSaGNtZGxkQzV5WlcxdmRtVkZkbVZ1ZEV4cGMzUmxibVZ5S0dWMlpXNTBWSGx3WlN3Z1kyRnNiR0poWTJzc0lIUnlkV1VwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQnlaV2RwYzNSbGNrUmxabUYxYkhRNklHWjFibU4wYVc5dUtDa2dlMzFjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdSWFpsYm5STWFYTjBaVzVsY2p0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFdmVudFBsdWdpbkh1YlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UGx1Z2luUmVnaXN0cnkgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpblJlZ2lzdHJ5XCIpO1xudmFyIEV2ZW50UGx1Z2luVXRpbHMgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpblV0aWxzXCIpO1xuXG52YXIgYWNjdW11bGF0ZUludG8gPSByZXF1aXJlKFwiLi9hY2N1bXVsYXRlSW50b1wiKTtcbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSByZXF1aXJlKFwiLi9mb3JFYWNoQWNjdW11bGF0ZWRcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIEludGVybmFsIHN0b3JlIGZvciBldmVudCBsaXN0ZW5lcnNcbiAqL1xudmFyIGxpc3RlbmVyQmFuayA9IHt9O1xuXG4vKipcbiAqIEludGVybmFsIHF1ZXVlIG9mIGV2ZW50cyB0aGF0IGhhdmUgYWNjdW11bGF0ZWQgdGhlaXIgZGlzcGF0Y2hlcyBhbmQgYXJlXG4gKiB3YWl0aW5nIHRvIGhhdmUgdGhlaXIgZGlzcGF0Y2hlcyBleGVjdXRlZC5cbiAqL1xudmFyIGV2ZW50UXVldWUgPSBudWxsO1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYW4gZXZlbnQgYW5kIHJlbGVhc2VzIGl0IGJhY2sgaW50byB0aGUgcG9vbCwgdW5sZXNzIHBlcnNpc3RlbnQuXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBldmVudCBTeW50aGV0aWMgZXZlbnQgdG8gYmUgZGlzcGF0Y2hlZC5cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2UgPSBmdW5jdGlvbihldmVudCkge1xuICBpZiAoZXZlbnQpIHtcbiAgICB2YXIgZXhlY3V0ZURpc3BhdGNoID0gRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2g7XG4gICAgLy8gUGx1Z2lucyBjYW4gcHJvdmlkZSBjdXN0b20gYmVoYXZpb3Igd2hlbiBkaXNwYXRjaGluZyBldmVudHMuXG4gICAgdmFyIFBsdWdpbk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkuZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQoZXZlbnQpO1xuICAgIGlmIChQbHVnaW5Nb2R1bGUgJiYgUGx1Z2luTW9kdWxlLmV4ZWN1dGVEaXNwYXRjaCkge1xuICAgICAgZXhlY3V0ZURpc3BhdGNoID0gUGx1Z2luTW9kdWxlLmV4ZWN1dGVEaXNwYXRjaDtcbiAgICB9XG4gICAgRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQsIGV4ZWN1dGVEaXNwYXRjaCk7XG5cbiAgICBpZiAoIWV2ZW50LmlzUGVyc2lzdGVudCgpKSB7XG4gICAgICBldmVudC5jb25zdHJ1Y3Rvci5yZWxlYXNlKGV2ZW50KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogLSBgSW5zdGFuY2VIYW5kbGVgOiBbcmVxdWlyZWRdIE1vZHVsZSB0aGF0IHBlcmZvcm1zIGxvZ2ljYWwgdHJhdmVyc2FscyBvZiBET01cbiAqICAgaGllcmFyY2h5IGdpdmVuIGlkcyBvZiB0aGUgbG9naWNhbCBET00gZWxlbWVudHMgaW52b2x2ZWQuXG4gKi9cbnZhciBJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5zdGFuY2VIYW5kbGUoKSB7XG4gIHZhciB2YWxpZCA9XG4gICAgSW5zdGFuY2VIYW5kbGUgJiZcbiAgICBJbnN0YW5jZUhhbmRsZS50cmF2ZXJzZVR3b1BoYXNlICYmXG4gICAgSW5zdGFuY2VIYW5kbGUudHJhdmVyc2VFbnRlckxlYXZlO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHZhbGlkLFxuICAgICdJbnN0YW5jZUhhbmRsZSBub3QgaW5qZWN0ZWQgYmVmb3JlIHVzZSEnXG4gICkgOiBpbnZhcmlhbnQodmFsaWQpKTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGEgdW5pZmllZCBpbnRlcmZhY2UgZm9yIGV2ZW50IHBsdWdpbnMgdG8gYmUgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkLlxuICpcbiAqIEV2ZW50IHBsdWdpbnMgY2FuIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICBgZXh0cmFjdEV2ZW50c2Age2Z1bmN0aW9uKHN0cmluZywgRE9NRXZlbnRUYXJnZXQsIHN0cmluZywgb2JqZWN0KTogKn1cbiAqICAgICBSZXF1aXJlZC4gV2hlbiBhIHRvcC1sZXZlbCBldmVudCBpcyBmaXJlZCwgdGhpcyBtZXRob2QgaXMgZXhwZWN0ZWQgdG9cbiAqICAgICBleHRyYWN0IHN5bnRoZXRpYyBldmVudHMgdGhhdCB3aWxsIGluIHR1cm4gYmUgcXVldWVkIGFuZCBkaXNwYXRjaGVkLlxuICpcbiAqICAgYGV2ZW50VHlwZXNgIHtvYmplY3R9XG4gKiAgICAgT3B0aW9uYWwsIHBsdWdpbnMgdGhhdCBmaXJlIGV2ZW50cyBtdXN0IHB1Ymxpc2ggYSBtYXBwaW5nIG9mIHJlZ2lzdHJhdGlvblxuICogICAgIG5hbWVzIHRoYXQgYXJlIHVzZWQgdG8gcmVnaXN0ZXIgbGlzdGVuZXJzLiBWYWx1ZXMgb2YgdGhpcyBtYXBwaW5nIG11c3RcbiAqICAgICBiZSBvYmplY3RzIHRoYXQgY29udGFpbiBgcmVnaXN0cmF0aW9uTmFtZWAgb3IgYHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzYC5cbiAqXG4gKiAgIGBleGVjdXRlRGlzcGF0Y2hgIHtmdW5jdGlvbihvYmplY3QsIGZ1bmN0aW9uLCBzdHJpbmcpfVxuICogICAgIE9wdGlvbmFsLCBhbGxvd3MgcGx1Z2lucyB0byBvdmVycmlkZSBob3cgYW4gZXZlbnQgZ2V0cyBkaXNwYXRjaGVkLiBCeVxuICogICAgIGRlZmF1bHQsIHRoZSBsaXN0ZW5lciBpcyBzaW1wbHkgaW52b2tlZC5cbiAqXG4gKiBFYWNoIHBsdWdpbiB0aGF0IGlzIGluamVjdGVkIGludG8gYEV2ZW50c1BsdWdpbkh1YmAgaXMgaW1tZWRpYXRlbHkgb3BlcmFibGUuXG4gKlxuICogQHB1YmxpY1xuICovXG52YXIgRXZlbnRQbHVnaW5IdWIgPSB7XG5cbiAgLyoqXG4gICAqIE1ldGhvZHMgZm9yIGluamVjdGluZyBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBpbmplY3Rpb246IHtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBJbmplY3RlZE1vdW50XG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGluamVjdE1vdW50OiBFdmVudFBsdWdpblV0aWxzLmluamVjdGlvbi5pbmplY3RNb3VudCxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBJbmplY3RlZEluc3RhbmNlSGFuZGxlXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIGluamVjdEluc3RhbmNlSGFuZGxlOiBmdW5jdGlvbihJbmplY3RlZEluc3RhbmNlSGFuZGxlKSB7XG4gICAgICBJbnN0YW5jZUhhbmRsZSA9IEluamVjdGVkSW5zdGFuY2VIYW5kbGU7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIHZhbGlkYXRlSW5zdGFuY2VIYW5kbGUoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SW5zdGFuY2VIYW5kbGU6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICB2YWxpZGF0ZUluc3RhbmNlSGFuZGxlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gSW5zdGFuY2VIYW5kbGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IEluamVjdGVkRXZlbnRQbHVnaW5PcmRlclxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBpbmplY3RFdmVudFBsdWdpbk9yZGVyOiBFdmVudFBsdWdpblJlZ2lzdHJ5LmluamVjdEV2ZW50UGx1Z2luT3JkZXIsXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy5cbiAgICAgKi9cbiAgICBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6IEV2ZW50UGx1Z2luUmVnaXN0cnkuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lXG5cbiAgfSxcblxuICBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M6IEV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLFxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzOiBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLFxuXG4gIC8qKlxuICAgKiBTdG9yZXMgYGxpc3RlbmVyYCBhdCBgbGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdW2lkXWAuIElzIGlkZW1wb3RlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGxpc3RlbmVyIFRoZSBjYWxsYmFjayB0byBzdG9yZS5cbiAgICovXG4gIHB1dExpc3RlbmVyOiBmdW5jdGlvbihpZCwgcmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIWxpc3RlbmVyIHx8IHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdFeHBlY3RlZCAlcyBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCB0eXBlICVzJyxcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBsaXN0ZW5lclxuICAgICkgOiBpbnZhcmlhbnQoIWxpc3RlbmVyIHx8IHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykpO1xuXG4gICAgdmFyIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lID1cbiAgICAgIGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXSB8fCAobGlzdGVuZXJCYW5rW3JlZ2lzdHJhdGlvbk5hbWVdID0ge30pO1xuICAgIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lW2lkXSA9IGxpc3RlbmVyO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIERPTSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn0gVGhlIHN0b3JlZCBjYWxsYmFjay5cbiAgICovXG4gIGdldExpc3RlbmVyOiBmdW5jdGlvbihpZCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSA9IGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICByZXR1cm4gYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgJiYgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWVbaWRdO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgbGlzdGVuZXIgZnJvbSB0aGUgcmVnaXN0cmF0aW9uIGJhbmsuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICovXG4gIGRlbGV0ZUxpc3RlbmVyOiBmdW5jdGlvbihpZCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSA9IGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICBpZiAoYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgIGRlbGV0ZSBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtpZF07XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFsbCBsaXN0ZW5lcnMgZm9yIHRoZSBET00gZWxlbWVudCB3aXRoIHRoZSBzdXBwbGllZCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBET00gZWxlbWVudC5cbiAgICovXG4gIGRlbGV0ZUFsbExpc3RlbmVyczogZnVuY3Rpb24oaWQpIHtcbiAgICBmb3IgKHZhciByZWdpc3RyYXRpb25OYW1lIGluIGxpc3RlbmVyQmFuaykge1xuICAgICAgZGVsZXRlIGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXVtpZF07XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBBbGxvd3MgcmVnaXN0ZXJlZCBwbHVnaW5zIGFuIG9wcG9ydHVuaXR5IHRvIGV4dHJhY3QgZXZlbnRzIGZyb20gdG9wLWxldmVsXG4gICAqIG5hdGl2ZSBicm93c2VyIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24oXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudCkge1xuICAgIHZhciBldmVudHM7XG4gICAgdmFyIHBsdWdpbnMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnM7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwbHVnaW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgLy8gTm90IGV2ZXJ5IHBsdWdpbiBpbiB0aGUgb3JkZXJpbmcgbWF5IGJlIGxvYWRlZCBhdCBydW50aW1lLlxuICAgICAgdmFyIHBvc3NpYmxlUGx1Z2luID0gcGx1Z2luc1tpXTtcbiAgICAgIGlmIChwb3NzaWJsZVBsdWdpbikge1xuICAgICAgICB2YXIgZXh0cmFjdGVkRXZlbnRzID0gcG9zc2libGVQbHVnaW4uZXh0cmFjdEV2ZW50cyhcbiAgICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICApO1xuICAgICAgICBpZiAoZXh0cmFjdGVkRXZlbnRzKSB7XG4gICAgICAgICAgZXZlbnRzID0gYWNjdW11bGF0ZUludG8oZXZlbnRzLCBleHRyYWN0ZWRFdmVudHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBldmVudHM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEVucXVldWVzIGEgc3ludGhldGljIGV2ZW50IHRoYXQgc2hvdWxkIGJlIGRpc3BhdGNoZWQgd2hlblxuICAgKiBgcHJvY2Vzc0V2ZW50UXVldWVgIGlzIGludm9rZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gZXZlbnRzIEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cykge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIGV2ZW50UXVldWUgPSBhY2N1bXVsYXRlSW50byhldmVudFF1ZXVlLCBldmVudHMpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbGwgc3ludGhldGljIGV2ZW50cyBvbiB0aGUgZXZlbnQgcXVldWUuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvY2Vzc0V2ZW50UXVldWU6IGZ1bmN0aW9uKCkge1xuICAgIC8vIFNldCBgZXZlbnRRdWV1ZWAgdG8gbnVsbCBiZWZvcmUgcHJvY2Vzc2luZyBpdCBzbyB0aGF0IHdlIGNhbiB0ZWxsIGlmIG1vcmVcbiAgICAvLyBldmVudHMgZ2V0IGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcuXG4gICAgdmFyIHByb2Nlc3NpbmdFdmVudFF1ZXVlID0gZXZlbnRRdWV1ZTtcbiAgICBldmVudFF1ZXVlID0gbnVsbDtcbiAgICBmb3JFYWNoQWNjdW11bGF0ZWQocHJvY2Vzc2luZ0V2ZW50UXVldWUsIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICFldmVudFF1ZXVlLFxuICAgICAgJ3Byb2Nlc3NFdmVudFF1ZXVlKCk6IEFkZGl0aW9uYWwgZXZlbnRzIHdlcmUgZW5xdWV1ZWQgd2hpbGUgcHJvY2Vzc2luZyAnICtcbiAgICAgICdhbiBldmVudCBxdWV1ZS4gU3VwcG9ydCBmb3IgdGhpcyBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkLidcbiAgICApIDogaW52YXJpYW50KCFldmVudFF1ZXVlKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRlc3RzIG9ubHkuIERvIG5vdCB1c2UhXG4gICAqL1xuICBfX3B1cmdlOiBmdW5jdGlvbigpIHtcbiAgICBsaXN0ZW5lckJhbmsgPSB7fTtcbiAgfSxcblxuICBfX2dldExpc3RlbmVyQmFuazogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQmFuaztcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luSHViO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UlhabGJuUlFiSFZuYVc1SWRXSXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkZkbVZ1ZEZCc2RXZHBia2gxWWx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlFVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNua2dQU0J5WlhGMWFYSmxLRndpTGk5RmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNVhDSXBPMXh1ZG1GeUlFVjJaVzUwVUd4MVoybHVWWFJwYkhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlGZG1WdWRGQnNkV2RwYmxWMGFXeHpYQ0lwTzF4dVhHNTJZWElnWVdOamRXMTFiR0YwWlVsdWRHOGdQU0J5WlhGMWFYSmxLRndpTGk5aFkyTjFiWFZzWVhSbFNXNTBiMXdpS1R0Y2JuWmhjaUJtYjNKRllXTm9RV05qZFcxMWJHRjBaV1FnUFNCeVpYRjFhWEpsS0Z3aUxpOW1iM0pGWVdOb1FXTmpkVzExYkdGMFpXUmNJaWs3WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc0dktpcGNiaUFxSUVsdWRHVnlibUZzSUhOMGIzSmxJR1p2Y2lCbGRtVnVkQ0JzYVhOMFpXNWxjbk5jYmlBcUwxeHVkbUZ5SUd4cGMzUmxibVZ5UW1GdWF5QTlJSHQ5TzF4dVhHNHZLaXBjYmlBcUlFbHVkR1Z5Ym1Gc0lIRjFaWFZsSUc5bUlHVjJaVzUwY3lCMGFHRjBJR2hoZG1VZ1lXTmpkVzExYkdGMFpXUWdkR2hsYVhJZ1pHbHpjR0YwWTJobGN5QmhibVFnWVhKbFhHNGdLaUIzWVdsMGFXNW5JSFJ2SUdoaGRtVWdkR2hsYVhJZ1pHbHpjR0YwWTJobGN5QmxlR1ZqZFhSbFpDNWNiaUFxTDF4dWRtRnlJR1YyWlc1MFVYVmxkV1VnUFNCdWRXeHNPMXh1WEc0dktpcGNiaUFxSUVScGMzQmhkR05vWlhNZ1lXNGdaWFpsYm5RZ1lXNWtJSEpsYkdWaGMyVnpJR2wwSUdKaFkyc2dhVzUwYnlCMGFHVWdjRzl2YkN3Z2RXNXNaWE56SUhCbGNuTnBjM1JsYm5RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCbGRtVnVkQ0JUZVc1MGFHVjBhV01nWlhabGJuUWdkRzhnWW1VZ1pHbHpjR0YwWTJobFpDNWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNiblpoY2lCbGVHVmpkWFJsUkdsemNHRjBZMmhsYzBGdVpGSmxiR1ZoYzJVZ1BTQm1kVzVqZEdsdmJpaGxkbVZ1ZENrZ2UxeHVJQ0JwWmlBb1pYWmxiblFwSUh0Y2JpQWdJQ0IyWVhJZ1pYaGxZM1YwWlVScGMzQmhkR05vSUQwZ1JYWmxiblJRYkhWbmFXNVZkR2xzY3k1bGVHVmpkWFJsUkdsemNHRjBZMmc3WEc0Z0lDQWdMeThnVUd4MVoybHVjeUJqWVc0Z2NISnZkbWxrWlNCamRYTjBiMjBnWW1Wb1lYWnBiM0lnZDJobGJpQmthWE53WVhSamFHbHVaeUJsZG1WdWRITXVYRzRnSUNBZ2RtRnlJRkJzZFdkcGJrMXZaSFZzWlNBOUlFVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNua3VaMlYwVUd4MVoybHVUVzlrZFd4bFJtOXlSWFpsYm5Rb1pYWmxiblFwTzF4dUlDQWdJR2xtSUNoUWJIVm5hVzVOYjJSMWJHVWdKaVlnVUd4MVoybHVUVzlrZFd4bExtVjRaV04xZEdWRWFYTndZWFJqYUNrZ2UxeHVJQ0FnSUNBZ1pYaGxZM1YwWlVScGMzQmhkR05vSUQwZ1VHeDFaMmx1VFc5a2RXeGxMbVY0WldOMWRHVkVhWE53WVhSamFEdGNiaUFnSUNCOVhHNGdJQ0FnUlhabGJuUlFiSFZuYVc1VmRHbHNjeTVsZUdWamRYUmxSR2x6Y0dGMFkyaGxjMGx1VDNKa1pYSW9aWFpsYm5Rc0lHVjRaV04xZEdWRWFYTndZWFJqYUNrN1hHNWNiaUFnSUNCcFppQW9JV1YyWlc1MExtbHpVR1Z5YzJsemRHVnVkQ2dwS1NCN1hHNGdJQ0FnSUNCbGRtVnVkQzVqYjI1emRISjFZM1J2Y2k1eVpXeGxZWE5sS0dWMlpXNTBLVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMDdYRzVjYmk4cUtseHVJQ29nTFNCZ1NXNXpkR0Z1WTJWSVlXNWtiR1ZnT2lCYmNtVnhkV2x5WldSZElFMXZaSFZzWlNCMGFHRjBJSEJsY21admNtMXpJR3h2WjJsallXd2dkSEpoZG1WeWMyRnNjeUJ2WmlCRVQwMWNiaUFxSUNBZ2FHbGxjbUZ5WTJoNUlHZHBkbVZ1SUdsa2N5QnZaaUIwYUdVZ2JHOW5hV05oYkNCRVQwMGdaV3hsYldWdWRITWdhVzUyYjJ4MlpXUXVYRzRnS2k5Y2JuWmhjaUJKYm5OMFlXNWpaVWhoYm1Sc1pTQTlJRzUxYkd3N1hHNWNibVoxYm1OMGFXOXVJSFpoYkdsa1lYUmxTVzV6ZEdGdVkyVklZVzVrYkdVb0tTQjdYRzRnSUhaaGNpQjJZV3hwWkNBOVhHNGdJQ0FnU1c1emRHRnVZMlZJWVc1a2JHVWdKaVpjYmlBZ0lDQkpibk4wWVc1alpVaGhibVJzWlM1MGNtRjJaWEp6WlZSM2IxQm9ZWE5sSUNZbVhHNGdJQ0FnU1c1emRHRnVZMlZJWVc1a2JHVXVkSEpoZG1WeWMyVkZiblJsY2t4bFlYWmxPMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJSFpoYkdsa0xGeHVJQ0FnSUNkSmJuTjBZVzVqWlVoaGJtUnNaU0J1YjNRZ2FXNXFaV04wWldRZ1ltVm1iM0psSUhWelpTRW5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9kbUZzYVdRcEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCVWFHbHpJR2x6SUdFZ2RXNXBabWxsWkNCcGJuUmxjbVpoWTJVZ1ptOXlJR1YyWlc1MElIQnNkV2RwYm5NZ2RHOGdZbVVnYVc1emRHRnNiR1ZrSUdGdVpDQmpiMjVtYVdkMWNtVmtMbHh1SUNwY2JpQXFJRVYyWlc1MElIQnNkV2RwYm5NZ1kyRnVJR2x0Y0d4bGJXVnVkQ0IwYUdVZ1ptOXNiRzkzYVc1bklIQnliM0JsY25ScFpYTTZYRzRnS2x4dUlDb2dJQ0JnWlhoMGNtRmpkRVYyWlc1MGMyQWdlMloxYm1OMGFXOXVLSE4wY21sdVp5d2dSRTlOUlhabGJuUlVZWEpuWlhRc0lITjBjbWx1Wnl3Z2IySnFaV04wS1RvZ0tuMWNiaUFxSUNBZ0lDQlNaWEYxYVhKbFpDNGdWMmhsYmlCaElIUnZjQzFzWlhabGJDQmxkbVZ1ZENCcGN5Qm1hWEpsWkN3Z2RHaHBjeUJ0WlhSb2IyUWdhWE1nWlhod1pXTjBaV1FnZEc5Y2JpQXFJQ0FnSUNCbGVIUnlZV04wSUhONWJuUm9aWFJwWXlCbGRtVnVkSE1nZEdoaGRDQjNhV3hzSUdsdUlIUjFjbTRnWW1VZ2NYVmxkV1ZrSUdGdVpDQmthWE53WVhSamFHVmtMbHh1SUNwY2JpQXFJQ0FnWUdWMlpXNTBWSGx3WlhOZ0lIdHZZbXBsWTNSOVhHNGdLaUFnSUNBZ1QzQjBhVzl1WVd3c0lIQnNkV2RwYm5NZ2RHaGhkQ0JtYVhKbElHVjJaVzUwY3lCdGRYTjBJSEIxWW14cGMyZ2dZU0J0WVhCd2FXNW5JRzltSUhKbFoybHpkSEpoZEdsdmJseHVJQ29nSUNBZ0lHNWhiV1Z6SUhSb1lYUWdZWEpsSUhWelpXUWdkRzhnY21WbmFYTjBaWElnYkdsemRHVnVaWEp6TGlCV1lXeDFaWE1nYjJZZ2RHaHBjeUJ0WVhCd2FXNW5JRzExYzNSY2JpQXFJQ0FnSUNCaVpTQnZZbXBsWTNSeklIUm9ZWFFnWTI5dWRHRnBiaUJnY21WbmFYTjBjbUYwYVc5dVRtRnRaV0FnYjNJZ1lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6WUM1Y2JpQXFYRzRnS2lBZ0lHQmxlR1ZqZFhSbFJHbHpjR0YwWTJoZ0lIdG1kVzVqZEdsdmJpaHZZbXBsWTNRc0lHWjFibU4wYVc5dUxDQnpkSEpwYm1jcGZWeHVJQ29nSUNBZ0lFOXdkR2x2Ym1Gc0xDQmhiR3h2ZDNNZ2NHeDFaMmx1Y3lCMGJ5QnZkbVZ5Y21sa1pTQm9iM2NnWVc0Z1pYWmxiblFnWjJWMGN5QmthWE53WVhSamFHVmtMaUJDZVZ4dUlDb2dJQ0FnSUdSbFptRjFiSFFzSUhSb1pTQnNhWE4wWlc1bGNpQnBjeUJ6YVcxd2JIa2dhVzUyYjJ0bFpDNWNiaUFxWEc0Z0tpQkZZV05vSUhCc2RXZHBiaUIwYUdGMElHbHpJR2x1YW1WamRHVmtJR2x1ZEc4Z1lFVjJaVzUwYzFCc2RXZHBia2gxWW1BZ2FYTWdhVzF0WldScFlYUmxiSGtnYjNCbGNtRmliR1V1WEc0Z0tseHVJQ29nUUhCMVlteHBZMXh1SUNvdlhHNTJZWElnUlhabGJuUlFiSFZuYVc1SWRXSWdQU0I3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRTFsZEdodlpITWdabTl5SUdsdWFtVmpkR2x1WnlCa1pYQmxibVJsYm1OcFpYTXVYRzRnSUNBcUwxeHVJQ0JwYm1wbFkzUnBiMjQ2SUh0Y2JseHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCSmJtcGxZM1JsWkUxdmRXNTBYRzRnSUNBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnSUNBcUwxeHVJQ0FnSUdsdWFtVmpkRTF2ZFc1ME9pQkZkbVZ1ZEZCc2RXZHBibFYwYVd4ekxtbHVhbVZqZEdsdmJpNXBibXBsWTNSTmIzVnVkQ3hjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JKYm1wbFkzUmxaRWx1YzNSaGJtTmxTR0Z1Wkd4bFhHNGdJQ0FnSUNvZ1FIQjFZbXhwWTF4dUlDQWdJQ0FxTDF4dUlDQWdJR2x1YW1WamRFbHVjM1JoYm1ObFNHRnVaR3hsT2lCbWRXNWpkR2x2YmloSmJtcGxZM1JsWkVsdWMzUmhibU5sU0dGdVpHeGxLU0I3WEc0Z0lDQWdJQ0JKYm5OMFlXNWpaVWhoYm1Sc1pTQTlJRWx1YW1WamRHVmtTVzV6ZEdGdVkyVklZVzVrYkdVN1hHNGdJQ0FnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNBZ0lIWmhiR2xrWVhSbFNXNXpkR0Z1WTJWSVlXNWtiR1VvS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnWjJWMFNXNXpkR0Z1WTJWSVlXNWtiR1U2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0lDQjJZV3hwWkdGMFpVbHVjM1JoYm1ObFNHRnVaR3hsS0NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnU1c1emRHRnVZMlZJWVc1a2JHVTdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQjdZWEp5WVhsOUlFbHVhbVZqZEdWa1JYWmxiblJRYkhWbmFXNVBjbVJsY2x4dUlDQWdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDQWdLaTljYmlBZ0lDQnBibXBsWTNSRmRtVnVkRkJzZFdkcGJrOXlaR1Z5T2lCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxtbHVhbVZqZEVWMlpXNTBVR3gxWjJsdVQzSmtaWElzWEc1Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYVc1cVpXTjBaV1JPWVcxbGMxUnZVR3gxWjJsdWN5Qk5ZWEFnWm5KdmJTQnVZVzFsY3lCMGJ5QndiSFZuYVc0Z2JXOWtkV3hsY3k1Y2JpQWdJQ0FnS2k5Y2JpQWdJQ0JwYm1wbFkzUkZkbVZ1ZEZCc2RXZHBibk5DZVU1aGJXVTZJRVYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbmt1YVc1cVpXTjBSWFpsYm5SUWJIVm5hVzV6UW5sT1lXMWxYRzVjYmlBZ2ZTeGNibHh1SUNCbGRtVnVkRTVoYldWRWFYTndZWFJqYUVOdmJtWnBaM002SUVWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rdVpYWmxiblJPWVcxbFJHbHpjR0YwWTJoRGIyNW1hV2R6TEZ4dVhHNGdJSEpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWek9pQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbkpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWekxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVGRHOXlaWE1nWUd4cGMzUmxibVZ5WUNCaGRDQmdiR2x6ZEdWdVpYSkNZVzVyVzNKbFoybHpkSEpoZEdsdmJrNWhiV1ZkVzJsa1hXQXVJRWx6SUdsa1pXMXdiM1JsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnBaQ0JKUkNCdlppQjBhR1VnUkU5TklHVnNaVzFsYm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J5WldkcGMzUnlZWFJwYjI1T1lXMWxJRTVoYldVZ2IyWWdiR2x6ZEdWdVpYSWdLR1V1Wnk0Z1lHOXVRMnhwWTJ0Z0tTNWNiaUFnSUNvZ1FIQmhjbUZ0SUhzL1puVnVZM1JwYjI1OUlHeHBjM1JsYm1WeUlGUm9aU0JqWVd4c1ltRmpheUIwYnlCemRHOXlaUzVjYmlBZ0lDb3ZYRzRnSUhCMWRFeHBjM1JsYm1WeU9pQm1kVzVqZEdsdmJpaHBaQ3dnY21WbmFYTjBjbUYwYVc5dVRtRnRaU3dnYkdsemRHVnVaWElwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJV3hwYzNSbGJtVnlJSHg4SUhSNWNHVnZaaUJzYVhOMFpXNWxjaUE5UFQwZ0oyWjFibU4wYVc5dUp5eGNiaUFnSUNBZ0lDZEZlSEJsWTNSbFpDQWxjeUJzYVhOMFpXNWxjaUIwYnlCaVpTQmhJR1oxYm1OMGFXOXVMQ0JwYm5OMFpXRmtJR2R2ZENCMGVYQmxJQ1Z6Snl4Y2JpQWdJQ0FnSUhKbFoybHpkSEpoZEdsdmJrNWhiV1VzSUhSNWNHVnZaaUJzYVhOMFpXNWxjbHh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVd4cGMzUmxibVZ5SUh4OElIUjVjR1Z2WmlCc2FYTjBaVzVsY2lBOVBUMGdKMloxYm1OMGFXOXVKeWtwTzF4dVhHNGdJQ0FnZG1GeUlHSmhibXRHYjNKU1pXZHBjM1J5WVhScGIyNU9ZVzFsSUQxY2JpQWdJQ0FnSUd4cGMzUmxibVZ5UW1GdWExdHlaV2RwYzNSeVlYUnBiMjVPWVcxbFhTQjhmQ0FvYkdsemRHVnVaWEpDWVc1clczSmxaMmx6ZEhKaGRHbHZiazVoYldWZElEMGdlMzBwTzF4dUlDQWdJR0poYm10R2IzSlNaV2RwYzNSeVlYUnBiMjVPWVcxbFcybGtYU0E5SUd4cGMzUmxibVZ5TzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2FXUWdTVVFnYjJZZ2RHaGxJRVJQVFNCbGJHVnRaVzUwTGx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjbVZuYVhOMGNtRjBhVzl1VG1GdFpTQk9ZVzFsSUc5bUlHeHBjM1JsYm1WeUlDaGxMbWN1SUdCdmJrTnNhV05yWUNrdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZXo5bWRXNWpkR2x2Ym4wZ1ZHaGxJSE4wYjNKbFpDQmpZV3hzWW1GamF5NWNiaUFnSUNvdlhHNGdJR2RsZEV4cGMzUmxibVZ5T2lCbWRXNWpkR2x2YmlocFpDd2djbVZuYVhOMGNtRjBhVzl1VG1GdFpTa2dlMXh1SUNBZ0lIWmhjaUJpWVc1clJtOXlVbVZuYVhOMGNtRjBhVzl1VG1GdFpTQTlJR3hwYzNSbGJtVnlRbUZ1YTF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFR0Y2JpQWdJQ0J5WlhSMWNtNGdZbUZ1YTBadmNsSmxaMmx6ZEhKaGRHbHZiazVoYldVZ0ppWWdZbUZ1YTBadmNsSmxaMmx6ZEhKaGRHbHZiazVoYldWYmFXUmRPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCRVpXeGxkR1Z6SUdFZ2JHbHpkR1Z1WlhJZ1puSnZiU0IwYUdVZ2NtVm5hWE4wY21GMGFXOXVJR0poYm1zdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnBaQ0JKUkNCdlppQjBhR1VnUkU5TklHVnNaVzFsYm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J5WldkcGMzUnlZWFJwYjI1T1lXMWxJRTVoYldVZ2IyWWdiR2x6ZEdWdVpYSWdLR1V1Wnk0Z1lHOXVRMnhwWTJ0Z0tTNWNiaUFnSUNvdlhHNGdJR1JsYkdWMFpVeHBjM1JsYm1WeU9pQm1kVzVqZEdsdmJpaHBaQ3dnY21WbmFYTjBjbUYwYVc5dVRtRnRaU2tnZTF4dUlDQWdJSFpoY2lCaVlXNXJSbTl5VW1WbmFYTjBjbUYwYVc5dVRtRnRaU0E5SUd4cGMzUmxibVZ5UW1GdWExdHlaV2RwYzNSeVlYUnBiMjVPWVcxbFhUdGNiaUFnSUNCcFppQW9ZbUZ1YTBadmNsSmxaMmx6ZEhKaGRHbHZiazVoYldVcElIdGNiaUFnSUNBZ0lHUmxiR1YwWlNCaVlXNXJSbTl5VW1WbmFYTjBjbUYwYVc5dVRtRnRaVnRwWkYwN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkVaV3hsZEdWeklHRnNiQ0JzYVhOMFpXNWxjbk1nWm05eUlIUm9aU0JFVDAwZ1pXeGxiV1Z1ZENCM2FYUm9JSFJvWlNCemRYQndiR2xsWkNCSlJDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR2xrSUVsRUlHOW1JSFJvWlNCRVQwMGdaV3hsYldWdWRDNWNiaUFnSUNvdlhHNGdJR1JsYkdWMFpVRnNiRXhwYzNSbGJtVnljem9nWm5WdVkzUnBiMjRvYVdRcElIdGNiaUFnSUNCbWIzSWdLSFpoY2lCeVpXZHBjM1J5WVhScGIyNU9ZVzFsSUdsdUlHeHBjM1JsYm1WeVFtRnVheWtnZTF4dUlDQWdJQ0FnWkdWc1pYUmxJR3hwYzNSbGJtVnlRbUZ1YTF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFZ0cFpGMDdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJCYkd4dmQzTWdjbVZuYVhOMFpYSmxaQ0J3YkhWbmFXNXpJR0Z1SUc5d2NHOXlkSFZ1YVhSNUlIUnZJR1Y0ZEhKaFkzUWdaWFpsYm5SeklHWnliMjBnZEc5d0xXeGxkbVZzWEc0Z0lDQXFJRzVoZEdsMlpTQmljbTkzYzJWeUlHVjJaVzUwY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUnZjRXhsZG1Wc1ZIbHdaU0JTWldOdmNtUWdabkp2YlNCZ1JYWmxiblJEYjI1emRHRnVkSE5nTGx4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWMlpXNTBWR0Z5WjJWMGZTQjBiM0JNWlhabGJGUmhjbWRsZENCVWFHVWdiR2x6ZEdWdWFXNW5JR052YlhCdmJtVnVkQ0J5YjI5MElHNXZaR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQjBiM0JNWlhabGJGUmhjbWRsZEVsRUlFbEVJRzltSUdCMGIzQk1aWFpsYkZSaGNtZGxkR0F1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnVZWFJwZG1WRmRtVnVkQ0JPWVhScGRtVWdZbkp2ZDNObGNpQmxkbVZ1ZEM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3S24wZ1FXNGdZV05qZFcxMWJHRjBhVzl1SUc5bUlITjViblJvWlhScFl5QmxkbVZ1ZEhNdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1pYaDBjbUZqZEVWMlpXNTBjem9nWm5WdVkzUnBiMjRvWEc0Z0lDQWdJQ0IwYjNCTVpYWmxiRlI1Y0dVc1hHNGdJQ0FnSUNCMGIzQk1aWFpsYkZSaGNtZGxkQ3hjYmlBZ0lDQWdJSFJ2Y0V4bGRtVnNWR0Z5WjJWMFNVUXNYRzRnSUNBZ0lDQnVZWFJwZG1WRmRtVnVkQ2tnZTF4dUlDQWdJSFpoY2lCbGRtVnVkSE03WEc0Z0lDQWdkbUZ5SUhCc2RXZHBibk1nUFNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxuQnNkV2RwYm5NN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQXNJR3dnUFNCd2JIVm5hVzV6TG14bGJtZDBhRHNnYVNBOElHdzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0x5OGdUbTkwSUdWMlpYSjVJSEJzZFdkcGJpQnBiaUIwYUdVZ2IzSmtaWEpwYm1jZ2JXRjVJR0psSUd4dllXUmxaQ0JoZENCeWRXNTBhVzFsTGx4dUlDQWdJQ0FnZG1GeUlIQnZjM05wWW14bFVHeDFaMmx1SUQwZ2NHeDFaMmx1YzF0cFhUdGNiaUFnSUNBZ0lHbG1JQ2h3YjNOemFXSnNaVkJzZFdkcGJpa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ1pYaDBjbUZqZEdWa1JYWmxiblJ6SUQwZ2NHOXpjMmxpYkdWUWJIVm5hVzR1WlhoMGNtRmpkRVYyWlc1MGN5aGNiaUFnSUNBZ0lDQWdJQ0IwYjNCTVpYWmxiRlI1Y0dVc1hHNGdJQ0FnSUNBZ0lDQWdkRzl3VEdWMlpXeFVZWEpuWlhRc1hHNGdJQ0FnSUNBZ0lDQWdkRzl3VEdWMlpXeFVZWEpuWlhSSlJDeGNiaUFnSUNBZ0lDQWdJQ0J1WVhScGRtVkZkbVZ1ZEZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvWlhoMGNtRmpkR1ZrUlhabGJuUnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1pYWmxiblJ6SUQwZ1lXTmpkVzExYkdGMFpVbHVkRzhvWlhabGJuUnpMQ0JsZUhSeVlXTjBaV1JGZG1WdWRITXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCbGRtVnVkSE03WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFVnVjWFZsZFdWeklHRWdjM2x1ZEdobGRHbGpJR1YyWlc1MElIUm9ZWFFnYzJodmRXeGtJR0psSUdScGMzQmhkR05vWldRZ2QyaGxibHh1SUNBZ0tpQmdjSEp2WTJWemMwVjJaVzUwVVhWbGRXVmdJR2x6SUdsdWRtOXJaV1F1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdaWFpsYm5SeklFRnVJR0ZqWTNWdGRXeGhkR2x2YmlCdlppQnplVzUwYUdWMGFXTWdaWFpsYm5SekxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHVnVjWFZsZFdWRmRtVnVkSE02SUdaMWJtTjBhVzl1S0dWMlpXNTBjeWtnZTF4dUlDQWdJR2xtSUNobGRtVnVkSE1wSUh0Y2JpQWdJQ0FnSUdWMlpXNTBVWFZsZFdVZ1BTQmhZMk4xYlhWc1lYUmxTVzUwYnlobGRtVnVkRkYxWlhWbExDQmxkbVZ1ZEhNcE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSR2x6Y0dGMFkyaGxjeUJoYkd3Z2MzbHVkR2hsZEdsaklHVjJaVzUwY3lCdmJpQjBhR1VnWlhabGJuUWdjWFZsZFdVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnY0hKdlkyVnpjMFYyWlc1MFVYVmxkV1U2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUM4dklGTmxkQ0JnWlhabGJuUlJkV1YxWldBZ2RHOGdiblZzYkNCaVpXWnZjbVVnY0hKdlkyVnpjMmx1WnlCcGRDQnpieUIwYUdGMElIZGxJR05oYmlCMFpXeHNJR2xtSUcxdmNtVmNiaUFnSUNBdkx5QmxkbVZ1ZEhNZ1oyVjBJR1Z1Y1hWbGRXVmtJSGRvYVd4bElIQnliMk5sYzNOcGJtY3VYRzRnSUNBZ2RtRnlJSEJ5YjJObGMzTnBibWRGZG1WdWRGRjFaWFZsSUQwZ1pYWmxiblJSZFdWMVpUdGNiaUFnSUNCbGRtVnVkRkYxWlhWbElEMGdiblZzYkR0Y2JpQWdJQ0JtYjNKRllXTm9RV05qZFcxMWJHRjBaV1FvY0hKdlkyVnpjMmx1WjBWMlpXNTBVWFZsZFdVc0lHVjRaV04xZEdWRWFYTndZWFJqYUdWelFXNWtVbVZzWldGelpTazdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNGbGRtVnVkRkYxWlhWbExGeHVJQ0FnSUNBZ0ozQnliMk5sYzNORmRtVnVkRkYxWlhWbEtDazZJRUZrWkdsMGFXOXVZV3dnWlhabGJuUnpJSGRsY21VZ1pXNXhkV1YxWldRZ2QyaHBiR1VnY0hKdlkyVnpjMmx1WnlBbklDdGNiaUFnSUNBZ0lDZGhiaUJsZG1WdWRDQnhkV1YxWlM0Z1UzVndjRzl5ZENCbWIzSWdkR2hwY3lCb1lYTWdibTkwSUhsbGRDQmlaV1Z1SUdsdGNHeGxiV1Z1ZEdWa0xpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLQ0ZsZG1WdWRGRjFaWFZsS1NrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlhObElHRnlaU0J1WldWa1pXUWdabTl5SUhSbGMzUnpJRzl1YkhrdUlFUnZJRzV2ZENCMWMyVWhYRzRnSUNBcUwxeHVJQ0JmWDNCMWNtZGxPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0JzYVhOMFpXNWxja0poYm1zZ1BTQjdmVHRjYmlBZ2ZTeGNibHh1SUNCZlgyZGxkRXhwYzNSbGJtVnlRbUZ1YXpvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUd4cGMzUmxibVZ5UW1GdWF6dGNiaUFnZlZ4dVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUVWMlpXNTBVR3gxWjJsdVNIVmlPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQbHVnaW5SZWdpc3RyeVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBvcmRlcmluZyBvZiBldmVudCBwbHVnaW5zLlxuICovXG52YXIgRXZlbnRQbHVnaW5PcmRlciA9IG51bGw7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBtYXBwaW5nIGZyb20gbmFtZXMgdG8gZXZlbnQgcGx1Z2luIG1vZHVsZXMuXG4gKi9cbnZhciBuYW1lc1RvUGx1Z2lucyA9IHt9O1xuXG4vKipcbiAqIFJlY29tcHV0ZXMgdGhlIHBsdWdpbiBsaXN0IHVzaW5nIHRoZSBpbmplY3RlZCBwbHVnaW5zIGFuZCBwbHVnaW4gb3JkZXJpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKSB7XG4gIGlmICghRXZlbnRQbHVnaW5PcmRlcikge1xuICAgIC8vIFdhaXQgdW50aWwgYW4gYEV2ZW50UGx1Z2luT3JkZXJgIGlzIGluamVjdGVkLlxuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIG5hbWVzVG9QbHVnaW5zKSB7XG4gICAgdmFyIFBsdWdpbk1vZHVsZSA9IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgIHZhciBwbHVnaW5JbmRleCA9IEV2ZW50UGx1Z2luT3JkZXIuaW5kZXhPZihwbHVnaW5OYW1lKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgcGx1Z2luSW5kZXggPiAtMSxcbiAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbnMgdGhhdCBkbyBub3QgZXhpc3QgaW4gJyArXG4gICAgICAndGhlIHBsdWdpbiBvcmRlcmluZywgYCVzYC4nLFxuICAgICAgcGx1Z2luTmFtZVxuICAgICkgOiBpbnZhcmlhbnQocGx1Z2luSW5kZXggPiAtMSkpO1xuICAgIGlmIChFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnNbcGx1Z2luSW5kZXhdKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIFBsdWdpbk1vZHVsZS5leHRyYWN0RXZlbnRzLFxuICAgICAgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IEV2ZW50IHBsdWdpbnMgbXVzdCBpbXBsZW1lbnQgYW4gYGV4dHJhY3RFdmVudHNgICcgK1xuICAgICAgJ21ldGhvZCwgYnV0IGAlc2AgZG9lcyBub3QuJyxcbiAgICAgIHBsdWdpbk5hbWVcbiAgICApIDogaW52YXJpYW50KFBsdWdpbk1vZHVsZS5leHRyYWN0RXZlbnRzKSk7XG4gICAgRXZlbnRQbHVnaW5SZWdpc3RyeS5wbHVnaW5zW3BsdWdpbkluZGV4XSA9IFBsdWdpbk1vZHVsZTtcbiAgICB2YXIgcHVibGlzaGVkRXZlbnRzID0gUGx1Z2luTW9kdWxlLmV2ZW50VHlwZXM7XG4gICAgZm9yICh2YXIgZXZlbnROYW1lIGluIHB1Ymxpc2hlZEV2ZW50cykge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgcHVibGlzaEV2ZW50Rm9yUGx1Z2luKFxuICAgICAgICAgIHB1Ymxpc2hlZEV2ZW50c1tldmVudE5hbWVdLFxuICAgICAgICAgIFBsdWdpbk1vZHVsZSxcbiAgICAgICAgICBldmVudE5hbWVcbiAgICAgICAgKSxcbiAgICAgICAgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IEZhaWxlZCB0byBwdWJsaXNoIGV2ZW50IGAlc2AgZm9yIHBsdWdpbiBgJXNgLicsXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgcGx1Z2luTmFtZVxuICAgICAgKSA6IGludmFyaWFudChwdWJsaXNoRXZlbnRGb3JQbHVnaW4oXG4gICAgICAgIHB1Ymxpc2hlZEV2ZW50c1tldmVudE5hbWVdLFxuICAgICAgICBQbHVnaW5Nb2R1bGUsXG4gICAgICAgIGV2ZW50TmFtZVxuICAgICAgKSkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFB1Ymxpc2hlcyBhbiBldmVudCBzbyB0aGF0IGl0IGNhbiBiZSBkaXNwYXRjaGVkIGJ5IHRoZSBzdXBwbGllZCBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIERpc3BhdGNoIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBldmVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBQbHVnaW5Nb2R1bGUgUGx1Z2luIHB1Ymxpc2hpbmcgdGhlIGV2ZW50LlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgd2FzIHN1Y2Nlc3NmdWxseSBwdWJsaXNoZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwdWJsaXNoRXZlbnRGb3JQbHVnaW4oZGlzcGF0Y2hDb25maWcsIFBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgIUV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSksXG4gICAgJ0V2ZW50UGx1Z2luSHViOiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICtcbiAgICAnZXZlbnQgbmFtZSwgYCVzYC4nLFxuICAgIGV2ZW50TmFtZVxuICApIDogaW52YXJpYW50KCFFdmVudFBsdWdpblJlZ2lzdHJ5LmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSk7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2ZW50TmFtZV0gPSBkaXNwYXRjaENvbmZpZztcblxuICB2YXIgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgPSBkaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcztcbiAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgZm9yICh2YXIgcGhhc2VOYW1lIGluIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkocGhhc2VOYW1lKSkge1xuICAgICAgICB2YXIgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZSA9IHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlTmFtZV07XG4gICAgICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKFxuICAgICAgICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICAgICAgUGx1Z2luTW9kdWxlLFxuICAgICAgICAgIGV2ZW50TmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgcHVibGlzaFJlZ2lzdHJhdGlvbk5hbWUoXG4gICAgICBkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lLFxuICAgICAgUGx1Z2luTW9kdWxlLFxuICAgICAgZXZlbnROYW1lXG4gICAgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUHVibGlzaGVzIGEgcmVnaXN0cmF0aW9uIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGRpc3BhdGNoZWQgZXZlbnRzIGFuZFxuICogY2FuIGJlIHVzZWQgd2l0aCBgRXZlbnRQbHVnaW5IdWIucHV0TGlzdGVuZXJgIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBSZWdpc3RyYXRpb24gbmFtZSB0byBhZGQuXG4gKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHJlZ2lzdHJhdGlvbk5hbWUsIFBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgIUV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0sXG4gICAgJ0V2ZW50UGx1Z2luSHViOiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICtcbiAgICAncmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJyxcbiAgICByZWdpc3RyYXRpb25OYW1lXG4gICkgOiBpbnZhcmlhbnQoIUV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0pKTtcbiAgRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSA9IFBsdWdpbk1vZHVsZTtcbiAgRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID1cbiAgICBQbHVnaW5Nb2R1bGUuZXZlbnRUeXBlc1tldmVudE5hbWVdLmRlcGVuZGVuY2llcztcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgcGx1Z2lucyBzbyB0aGF0IHRoZXkgY2FuIGV4dHJhY3QgYW5kIGRpc3BhdGNoIGV2ZW50cy5cbiAqXG4gKiBAc2VlIHtFdmVudFBsdWdpbkh1Yn1cbiAqL1xudmFyIEV2ZW50UGx1Z2luUmVnaXN0cnkgPSB7XG5cbiAgLyoqXG4gICAqIE9yZGVyZWQgbGlzdCBvZiBpbmplY3RlZCBwbHVnaW5zLlxuICAgKi9cbiAgcGx1Z2luczogW10sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBldmVudCBuYW1lIHRvIGRpc3BhdGNoIGNvbmZpZ1xuICAgKi9cbiAgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIHBsdWdpbiBtb2R1bGVcbiAgICovXG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIGV2ZW50IG5hbWVcbiAgICovXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHt9LFxuXG4gIC8qKlxuICAgKiBJbmplY3RzIGFuIG9yZGVyaW5nIG9mIHBsdWdpbnMgKGJ5IHBsdWdpbiBuYW1lKS4gVGhpcyBhbGxvd3MgdGhlIG9yZGVyaW5nXG4gICAqIHRvIGJlIGRlY291cGxlZCBmcm9tIGluamVjdGlvbiBvZiB0aGUgYWN0dWFsIHBsdWdpbnMgc28gdGhhdCBvcmRlcmluZyBpc1xuICAgKiBhbHdheXMgZGV0ZXJtaW5pc3RpYyByZWdhcmRsZXNzIG9mIHBhY2thZ2luZywgb24tdGhlLWZseSBpbmplY3Rpb24sIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gSW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5PcmRlcn1cbiAgICovXG4gIGluamVjdEV2ZW50UGx1Z2luT3JkZXI6IGZ1bmN0aW9uKEluamVjdGVkRXZlbnRQbHVnaW5PcmRlcikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhRXZlbnRQbHVnaW5PcmRlcixcbiAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IGV2ZW50IHBsdWdpbiBvcmRlcmluZyBtb3JlIHRoYW4gJyArXG4gICAgICAnb25jZS4gWW91IGFyZSBsaWtlbHkgdHJ5aW5nIHRvIGxvYWQgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0LidcbiAgICApIDogaW52YXJpYW50KCFFdmVudFBsdWdpbk9yZGVyKSk7XG4gICAgLy8gQ2xvbmUgdGhlIG9yZGVyaW5nIHNvIGl0IGNhbm5vdCBiZSBkeW5hbWljYWxseSBtdXRhdGVkLlxuICAgIEV2ZW50UGx1Z2luT3JkZXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpO1xuICAgIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEluamVjdHMgcGx1Z2lucyB0byBiZSB1c2VkIGJ5IGBFdmVudFBsdWdpbkh1YmAuIFRoZSBwbHVnaW4gbmFtZXMgbXVzdCBiZVxuICAgKiBpbiB0aGUgb3JkZXJpbmcgaW5qZWN0ZWQgYnkgYGluamVjdEV2ZW50UGx1Z2luT3JkZXJgLlxuICAgKlxuICAgKiBQbHVnaW5zIGNhbiBiZSBpbmplY3RlZCBhcyBwYXJ0IG9mIHBhZ2UgaW5pdGlhbGl6YXRpb24gb3Igb24tdGhlLWZseS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGluamVjdGVkTmFtZXNUb1BsdWdpbnMgTWFwIGZyb20gbmFtZXMgdG8gcGx1Z2luIG1vZHVsZXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lfVxuICAgKi9cbiAgaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOiBmdW5jdGlvbihpbmplY3RlZE5hbWVzVG9QbHVnaW5zKSB7XG4gICAgdmFyIGlzT3JkZXJpbmdEaXJ0eSA9IGZhbHNlO1xuICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgICAgaWYgKCFpbmplY3RlZE5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIFBsdWdpbk1vZHVsZSA9IGluamVjdGVkTmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07XG4gICAgICBpZiAoIW5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpIHx8XG4gICAgICAgICAgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0gIT09IFBsdWdpbk1vZHVsZSkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgICFuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSxcbiAgICAgICAgICAnRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCB0d28gZGlmZmVyZW50IGV2ZW50IHBsdWdpbnMgJyArXG4gICAgICAgICAgJ3VzaW5nIHRoZSBzYW1lIG5hbWUsIGAlc2AuJyxcbiAgICAgICAgICBwbHVnaW5OYW1lXG4gICAgICAgICkgOiBpbnZhcmlhbnQoIW5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdKSk7XG4gICAgICAgIG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdID0gUGx1Z2luTW9kdWxlO1xuICAgICAgICBpc09yZGVyaW5nRGlydHkgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNPcmRlcmluZ0RpcnR5KSB7XG4gICAgICByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogTG9va3MgdXAgdGhlIHBsdWdpbiBmb3IgdGhlIHN1cHBsaWVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgQSBzeW50aGV0aWMgZXZlbnQuXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFRoZSBwbHVnaW4gdGhhdCBjcmVhdGVkIHRoZSBzdXBwbGllZCBldmVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRQbHVnaW5Nb2R1bGVGb3JFdmVudDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgZGlzcGF0Y2hDb25maWcgPSBldmVudC5kaXNwYXRjaENvbmZpZztcbiAgICBpZiAoZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbXG4gICAgICAgIGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWVcbiAgICAgIF0gfHwgbnVsbDtcbiAgICB9XG4gICAgZm9yICh2YXIgcGhhc2UgaW4gZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICAgIGlmICghZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkocGhhc2UpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIFBsdWdpbk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbXG4gICAgICAgIGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlXVxuICAgICAgXTtcbiAgICAgIGlmIChQbHVnaW5Nb2R1bGUpIHtcbiAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIHVuaXQgdGVzdGluZy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXNldEV2ZW50UGx1Z2luczogZnVuY3Rpb24oKSB7XG4gICAgRXZlbnRQbHVnaW5PcmRlciA9IG51bGw7XG4gICAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBuYW1lc1RvUGx1Z2lucykge1xuICAgICAgaWYgKG5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgRXZlbnRQbHVnaW5SZWdpc3RyeS5wbHVnaW5zLmxlbmd0aCA9IDA7XG5cbiAgICB2YXIgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M7XG4gICAgZm9yICh2YXIgZXZlbnROYW1lIGluIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncykge1xuICAgICAgaWYgKGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3NbZXZlbnROYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzO1xuICAgIGZvciAodmFyIHJlZ2lzdHJhdGlvbk5hbWUgaW4gcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMpIHtcbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShyZWdpc3RyYXRpb25OYW1lKSkge1xuICAgICAgICBkZWxldGUgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRQbHVnaW5SZWdpc3RyeTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVYRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVMeW9xWEc0Z0tpQkpibXBsWTNSaFlteGxJRzl5WkdWeWFXNW5JRzltSUdWMlpXNTBJSEJzZFdkcGJuTXVYRzRnS2k5Y2JuWmhjaUJGZG1WdWRGQnNkV2RwYms5eVpHVnlJRDBnYm5Wc2JEdGNibHh1THlvcVhHNGdLaUJKYm1wbFkzUmhZbXhsSUcxaGNIQnBibWNnWm5KdmJTQnVZVzFsY3lCMGJ5QmxkbVZ1ZENCd2JIVm5hVzRnYlc5a2RXeGxjeTVjYmlBcUwxeHVkbUZ5SUc1aGJXVnpWRzlRYkhWbmFXNXpJRDBnZTMwN1hHNWNiaThxS2x4dUlDb2dVbVZqYjIxd2RYUmxjeUIwYUdVZ2NHeDFaMmx1SUd4cGMzUWdkWE5wYm1jZ2RHaGxJR2x1YW1WamRHVmtJSEJzZFdkcGJuTWdZVzVrSUhCc2RXZHBiaUJ2Y21SbGNtbHVaeTVjYmlBcVhHNGdLaUJBY0hKcGRtRjBaVnh1SUNvdlhHNW1kVzVqZEdsdmJpQnlaV052YlhCMWRHVlFiSFZuYVc1UGNtUmxjbWx1WnlncElIdGNiaUFnYVdZZ0tDRkZkbVZ1ZEZCc2RXZHBiazl5WkdWeUtTQjdYRzRnSUNBZ0x5OGdWMkZwZENCMWJuUnBiQ0JoYmlCZ1JYWmxiblJRYkhWbmFXNVBjbVJsY21BZ2FYTWdhVzVxWldOMFpXUXVYRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzRnSUdadmNpQW9kbUZ5SUhCc2RXZHBiazVoYldVZ2FXNGdibUZ0WlhOVWIxQnNkV2RwYm5NcElIdGNiaUFnSUNCMllYSWdVR3gxWjJsdVRXOWtkV3hsSUQwZ2JtRnRaWE5VYjFCc2RXZHBibk5iY0d4MVoybHVUbUZ0WlYwN1hHNGdJQ0FnZG1GeUlIQnNkV2RwYmtsdVpHVjRJRDBnUlhabGJuUlFiSFZuYVc1UGNtUmxjaTVwYm1SbGVFOW1LSEJzZFdkcGJrNWhiV1VwTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQndiSFZuYVc1SmJtUmxlQ0ErSUMweExGeHVJQ0FnSUNBZ0owVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNuazZJRU5oYm01dmRDQnBibXBsWTNRZ1pYWmxiblFnY0d4MVoybHVjeUIwYUdGMElHUnZJRzV2ZENCbGVHbHpkQ0JwYmlBbklDdGNiaUFnSUNBZ0lDZDBhR1VnY0d4MVoybHVJRzl5WkdWeWFXNW5MQ0JnSlhOZ0xpY3NYRzRnSUNBZ0lDQndiSFZuYVc1T1lXMWxYRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2h3YkhWbmFXNUpibVJsZUNBK0lDMHhLU2s3WEc0Z0lDQWdhV1lnS0VWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rdWNHeDFaMmx1YzF0d2JIVm5hVzVKYm1SbGVGMHBJSHRjYmlBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lIMWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnVUd4MVoybHVUVzlrZFd4bExtVjRkSEpoWTNSRmRtVnVkSE1zWEc0Z0lDQWdJQ0FuUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVRvZ1JYWmxiblFnY0d4MVoybHVjeUJ0ZFhOMElHbHRjR3hsYldWdWRDQmhiaUJnWlhoMGNtRmpkRVYyWlc1MGMyQWdKeUFyWEc0Z0lDQWdJQ0FuYldWMGFHOWtMQ0JpZFhRZ1lDVnpZQ0JrYjJWeklHNXZkQzRuTEZ4dUlDQWdJQ0FnY0d4MVoybHVUbUZ0WlZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1VHeDFaMmx1VFc5a2RXeGxMbVY0ZEhKaFkzUkZkbVZ1ZEhNcEtUdGNiaUFnSUNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxuQnNkV2RwYm5OYmNHeDFaMmx1U1c1a1pYaGRJRDBnVUd4MVoybHVUVzlrZFd4bE8xeHVJQ0FnSUhaaGNpQndkV0pzYVhOb1pXUkZkbVZ1ZEhNZ1BTQlFiSFZuYVc1TmIyUjFiR1V1WlhabGJuUlVlWEJsY3p0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJsZG1WdWRFNWhiV1VnYVc0Z2NIVmliR2x6YUdWa1JYWmxiblJ6S1NCN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSUNCd2RXSnNhWE5vUlhabGJuUkdiM0pRYkhWbmFXNG9YRzRnSUNBZ0lDQWdJQ0FnY0hWaWJHbHphR1ZrUlhabGJuUnpXMlYyWlc1MFRtRnRaVjBzWEc0Z0lDQWdJQ0FnSUNBZ1VHeDFaMmx1VFc5a2RXeGxMRnh1SUNBZ0lDQWdJQ0FnSUdWMlpXNTBUbUZ0WlZ4dUlDQWdJQ0FnSUNBcExGeHVJQ0FnSUNBZ0lDQW5SWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllVG9nUm1GcGJHVmtJSFJ2SUhCMVlteHBjMmdnWlhabGJuUWdZQ1Z6WUNCbWIzSWdjR3gxWjJsdUlHQWxjMkF1Snl4Y2JpQWdJQ0FnSUNBZ1pYWmxiblJPWVcxbExGeHVJQ0FnSUNBZ0lDQndiSFZuYVc1T1lXMWxYRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hCMVlteHBjMmhGZG1WdWRFWnZjbEJzZFdkcGJpaGNiaUFnSUNBZ0lDQWdjSFZpYkdsemFHVmtSWFpsYm5SelcyVjJaVzUwVG1GdFpWMHNYRzRnSUNBZ0lDQWdJRkJzZFdkcGJrMXZaSFZzWlN4Y2JpQWdJQ0FnSUNBZ1pYWmxiblJPWVcxbFhHNGdJQ0FnSUNBcEtTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dVSFZpYkdsemFHVnpJR0Z1SUdWMlpXNTBJSE52SUhSb1lYUWdhWFFnWTJGdUlHSmxJR1JwYzNCaGRHTm9aV1FnWW5rZ2RHaGxJSE4xY0hCc2FXVmtJSEJzZFdkcGJpNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ1pHbHpjR0YwWTJoRGIyNW1hV2NnUkdsemNHRjBZMmdnWTI5dVptbG5kWEpoZEdsdmJpQm1iM0lnZEdobElHVjJaVzUwTGx4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlGQnNkV2RwYmsxdlpIVnNaU0JRYkhWbmFXNGdjSFZpYkdsemFHbHVaeUIwYUdVZ1pYWmxiblF1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZTQlVjblZsSUdsbUlIUm9aU0JsZG1WdWRDQjNZWE1nYzNWalkyVnpjMloxYkd4NUlIQjFZbXhwYzJobFpDNWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVoxYm1OMGFXOXVJSEIxWW14cGMyaEZkbVZ1ZEVadmNsQnNkV2RwYmloa2FYTndZWFJqYUVOdmJtWnBaeXdnVUd4MVoybHVUVzlrZFd4bExDQmxkbVZ1ZEU1aGJXVXBJSHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FoUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1bGRtVnVkRTVoYldWRWFYTndZWFJqYUVOdmJtWnBaM011YUdGelQzZHVVSEp2Y0dWeWRIa29aWFpsYm5ST1lXMWxLU3hjYmlBZ0lDQW5SWFpsYm5SUWJIVm5hVzVJZFdJNklFMXZjbVVnZEdoaGJpQnZibVVnY0d4MVoybHVJR0YwZEdWdGNIUmxaQ0IwYnlCd2RXSnNhWE5vSUhSb1pTQnpZVzFsSUNjZ0sxeHVJQ0FnSUNkbGRtVnVkQ0J1WVcxbExDQmdKWE5nTGljc1hHNGdJQ0FnWlhabGJuUk9ZVzFsWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvSVVWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rdVpYWmxiblJPWVcxbFJHbHpjR0YwWTJoRGIyNW1hV2R6TG1oaGMwOTNibEJ5YjNCbGNuUjVLR1YyWlc1MFRtRnRaU2twS1R0Y2JpQWdSWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllUzVsZG1WdWRFNWhiV1ZFYVhOd1lYUmphRU52Ym1acFozTmJaWFpsYm5ST1lXMWxYU0E5SUdScGMzQmhkR05vUTI5dVptbG5PMXh1WEc0Z0lIWmhjaUJ3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN5QTlJR1JwYzNCaGRHTm9RMjl1Wm1sbkxuQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6TzF4dUlDQnBaaUFvY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTXBJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQndhR0Z6WlU1aGJXVWdhVzRnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTXBJSHRjYmlBZ0lDQWdJR2xtSUNod2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdhR0Z6WlU1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsSUQwZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE5iY0doaGMyVk9ZVzFsWFR0Y2JpQWdJQ0FnSUNBZ2NIVmliR2x6YUZKbFoybHpkSEpoZEdsdmJrNWhiV1VvWEc0Z0lDQWdJQ0FnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNCUWJIVm5hVzVOYjJSMWJHVXNYRzRnSUNBZ0lDQWdJQ0FnWlhabGJuUk9ZVzFsWEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQjlJR1ZzYzJVZ2FXWWdLR1JwYzNCaGRHTm9RMjl1Wm1sbkxuSmxaMmx6ZEhKaGRHbHZiazVoYldVcElIdGNiaUFnSUNCd2RXSnNhWE5vVW1WbmFYTjBjbUYwYVc5dVRtRnRaU2hjYmlBZ0lDQWdJR1JwYzNCaGRHTm9RMjl1Wm1sbkxuSmxaMmx6ZEhKaGRHbHZiazVoYldVc1hHNGdJQ0FnSUNCUWJIVm5hVzVOYjJSMWJHVXNYRzRnSUNBZ0lDQmxkbVZ1ZEU1aGJXVmNiaUFnSUNBcE8xeHVJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCbVlXeHpaVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlFkV0pzYVhOb1pYTWdZU0J5WldkcGMzUnlZWFJwYjI0Z2JtRnRaU0IwYUdGMElHbHpJSFZ6WldRZ2RHOGdhV1JsYm5ScFpua2daR2x6Y0dGMFkyaGxaQ0JsZG1WdWRITWdZVzVrWEc0Z0tpQmpZVzRnWW1VZ2RYTmxaQ0IzYVhSb0lHQkZkbVZ1ZEZCc2RXZHBia2gxWWk1d2RYUk1hWE4wWlc1bGNtQWdkRzhnY21WbmFYTjBaWElnYkdsemRHVnVaWEp6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J5WldkcGMzUnlZWFJwYjI1T1lXMWxJRkpsWjJsemRISmhkR2x2YmlCdVlXMWxJSFJ2SUdGa1pDNWNiaUFxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JRYkhWbmFXNU5iMlIxYkdVZ1VHeDFaMmx1SUhCMVlteHBjMmhwYm1jZ2RHaGxJR1YyWlc1MExseHVJQ29nUUhCeWFYWmhkR1ZjYmlBcUwxeHVablZ1WTNScGIyNGdjSFZpYkdsemFGSmxaMmx6ZEhKaGRHbHZiazVoYldVb2NtVm5hWE4wY21GMGFXOXVUbUZ0WlN3Z1VHeDFaMmx1VFc5a2RXeGxMQ0JsZG1WdWRFNWhiV1VwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBaFJYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTNXlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsYzF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFN4Y2JpQWdJQ0FuUlhabGJuUlFiSFZuYVc1SWRXSTZJRTF2Y21VZ2RHaGhiaUJ2Ym1VZ2NHeDFaMmx1SUdGMGRHVnRjSFJsWkNCMGJ5QndkV0pzYVhOb0lIUm9aU0J6WVcxbElDY2dLMXh1SUNBZ0lDZHlaV2RwYzNSeVlYUnBiMjRnYm1GdFpTd2dZQ1Z6WUM0bkxGeHVJQ0FnSUhKbFoybHpkSEpoZEdsdmJrNWhiV1ZjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2doUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1eVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjMXR5WldkcGMzUnlZWFJwYjI1T1lXMWxYU2twTzF4dUlDQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbkpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWelczSmxaMmx6ZEhKaGRHbHZiazVoYldWZElEMGdVR3gxWjJsdVRXOWtkV3hsTzF4dUlDQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbkpsWjJsemRISmhkR2x2Yms1aGJXVkVaWEJsYm1SbGJtTnBaWE5iY21WbmFYTjBjbUYwYVc5dVRtRnRaVjBnUFZ4dUlDQWdJRkJzZFdkcGJrMXZaSFZzWlM1bGRtVnVkRlI1Y0dWelcyVjJaVzUwVG1GdFpWMHVaR1Z3Wlc1a1pXNWphV1Z6TzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsWjJsemRHVnljeUJ3YkhWbmFXNXpJSE52SUhSb1lYUWdkR2hsZVNCallXNGdaWGgwY21GamRDQmhibVFnWkdsemNHRjBZMmdnWlhabGJuUnpMbHh1SUNwY2JpQXFJRUJ6WldVZ2UwVjJaVzUwVUd4MVoybHVTSFZpZlZ4dUlDb3ZYRzUyWVhJZ1JYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUM0prWlhKbFpDQnNhWE4wSUc5bUlHbHVhbVZqZEdWa0lIQnNkV2RwYm5NdVhHNGdJQ0FxTDF4dUlDQndiSFZuYVc1ek9pQmJYU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUV0Z3Y0dsdVp5Qm1jbTl0SUdWMlpXNTBJRzVoYldVZ2RHOGdaR2x6Y0dGMFkyZ2dZMjl1Wm1sblhHNGdJQ0FxTDF4dUlDQmxkbVZ1ZEU1aGJXVkVhWE53WVhSamFFTnZibVpwWjNNNklIdDlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQk5ZWEJ3YVc1bklHWnliMjBnY21WbmFYTjBjbUYwYVc5dUlHNWhiV1VnZEc4Z2NHeDFaMmx1SUcxdlpIVnNaVnh1SUNBZ0tpOWNiaUFnY21WbmFYTjBjbUYwYVc5dVRtRnRaVTF2WkhWc1pYTTZJSHQ5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJOWVhCd2FXNW5JR1p5YjIwZ2NtVm5hWE4wY21GMGFXOXVJRzVoYldVZ2RHOGdaWFpsYm5RZ2JtRnRaVnh1SUNBZ0tpOWNiaUFnY21WbmFYTjBjbUYwYVc5dVRtRnRaVVJsY0dWdVpHVnVZMmxsY3pvZ2UzMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFbHVhbVZqZEhNZ1lXNGdiM0prWlhKcGJtY2diMllnY0d4MVoybHVjeUFvWW5rZ2NHeDFaMmx1SUc1aGJXVXBMaUJVYUdseklHRnNiRzkzY3lCMGFHVWdiM0prWlhKcGJtZGNiaUFnSUNvZ2RHOGdZbVVnWkdWamIzVndiR1ZrSUdaeWIyMGdhVzVxWldOMGFXOXVJRzltSUhSb1pTQmhZM1IxWVd3Z2NHeDFaMmx1Y3lCemJ5QjBhR0YwSUc5eVpHVnlhVzVuSUdselhHNGdJQ0FxSUdGc2QyRjVjeUJrWlhSbGNtMXBibWx6ZEdsaklISmxaMkZ5Wkd4bGMzTWdiMllnY0dGamEyRm5hVzVuTENCdmJpMTBhR1V0Wm14NUlHbHVhbVZqZEdsdmJpd2daWFJqTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyRnljbUY1ZlNCSmJtcGxZM1JsWkVWMlpXNTBVR3gxWjJsdVQzSmtaWEpjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUlFQnpaV1VnZTBWMlpXNTBVR3gxWjJsdVNIVmlMbWx1YW1WamRHbHZiaTVwYm1wbFkzUkZkbVZ1ZEZCc2RXZHBiazl5WkdWeWZWeHVJQ0FnS2k5Y2JpQWdhVzVxWldOMFJYWmxiblJRYkhWbmFXNVBjbVJsY2pvZ1puVnVZM1JwYjI0b1NXNXFaV04wWldSRmRtVnVkRkJzZFdkcGJrOXlaR1Z5S1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0ZGZG1WdWRGQnNkV2RwYms5eVpHVnlMRnh1SUNBZ0lDQWdKMFYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbms2SUVOaGJtNXZkQ0JwYm1wbFkzUWdaWFpsYm5RZ2NHeDFaMmx1SUc5eVpHVnlhVzVuSUcxdmNtVWdkR2hoYmlBbklDdGNiaUFnSUNBZ0lDZHZibU5sTGlCWmIzVWdZWEpsSUd4cGEyVnNlU0IwY25scGJtY2dkRzhnYkc5aFpDQnRiM0psSUhSb1lXNGdiMjVsSUdOdmNIa2diMllnVW1WaFkzUXVKMXh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVVWMlpXNTBVR3gxWjJsdVQzSmtaWElwS1R0Y2JpQWdJQ0F2THlCRGJHOXVaU0IwYUdVZ2IzSmtaWEpwYm1jZ2MyOGdhWFFnWTJGdWJtOTBJR0psSUdSNWJtRnRhV05oYkd4NUlHMTFkR0YwWldRdVhHNGdJQ0FnUlhabGJuUlFiSFZuYVc1UGNtUmxjaUE5SUVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV6YkdsalpTNWpZV3hzS0VsdWFtVmpkR1ZrUlhabGJuUlFiSFZuYVc1UGNtUmxjaWs3WEc0Z0lDQWdjbVZqYjIxd2RYUmxVR3gxWjJsdVQzSmtaWEpwYm1jb0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nU1c1cVpXTjBjeUJ3YkhWbmFXNXpJSFJ2SUdKbElIVnpaV1FnWW5rZ1lFVjJaVzUwVUd4MVoybHVTSFZpWUM0Z1ZHaGxJSEJzZFdkcGJpQnVZVzFsY3lCdGRYTjBJR0psWEc0Z0lDQXFJR2x1SUhSb1pTQnZjbVJsY21sdVp5QnBibXBsWTNSbFpDQmllU0JnYVc1cVpXTjBSWFpsYm5SUWJIVm5hVzVQY21SbGNtQXVYRzRnSUNBcVhHNGdJQ0FxSUZCc2RXZHBibk1nWTJGdUlHSmxJR2x1YW1WamRHVmtJR0Z6SUhCaGNuUWdiMllnY0dGblpTQnBibWwwYVdGc2FYcGhkR2x2YmlCdmNpQnZiaTEwYUdVdFpteDVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYVc1cVpXTjBaV1JPWVcxbGMxUnZVR3gxWjJsdWN5Qk5ZWEFnWm5KdmJTQnVZVzFsY3lCMGJ5QndiSFZuYVc0Z2JXOWtkV3hsY3k1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFJRUJ6WldVZ2UwVjJaVzUwVUd4MVoybHVTSFZpTG1sdWFtVmpkR2x2Ymk1cGJtcGxZM1JGZG1WdWRGQnNkV2RwYm5OQ2VVNWhiV1Y5WEc0Z0lDQXFMMXh1SUNCcGJtcGxZM1JGZG1WdWRGQnNkV2RwYm5OQ2VVNWhiV1U2SUdaMWJtTjBhVzl1S0dsdWFtVmpkR1ZrVG1GdFpYTlViMUJzZFdkcGJuTXBJSHRjYmlBZ0lDQjJZWElnYVhOUGNtUmxjbWx1WjBScGNuUjVJRDBnWm1Gc2MyVTdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2NHeDFaMmx1VG1GdFpTQnBiaUJwYm1wbFkzUmxaRTVoYldWelZHOVFiSFZuYVc1ektTQjdYRzRnSUNBZ0lDQnBaaUFvSVdsdWFtVmpkR1ZrVG1GdFpYTlViMUJzZFdkcGJuTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NHeDFaMmx1VG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IyWVhJZ1VHeDFaMmx1VFc5a2RXeGxJRDBnYVc1cVpXTjBaV1JPWVcxbGMxUnZVR3gxWjJsdWMxdHdiSFZuYVc1T1lXMWxYVHRjYmlBZ0lDQWdJR2xtSUNnaGJtRnRaWE5VYjFCc2RXZHBibk11YUdGelQzZHVVSEp2Y0dWeWRIa29jR3gxWjJsdVRtRnRaU2tnZkh4Y2JpQWdJQ0FnSUNBZ0lDQnVZVzFsYzFSdlVHeDFaMmx1YzF0d2JIVm5hVzVPWVcxbFhTQWhQVDBnVUd4MVoybHVUVzlrZFd4bEtTQjdYRzRnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJQ0FnSVc1aGJXVnpWRzlRYkhWbmFXNXpXM0JzZFdkcGJrNWhiV1ZkTEZ4dUlDQWdJQ0FnSUNBZ0lDZEZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVPaUJEWVc1dWIzUWdhVzVxWldOMElIUjNieUJrYVdabVpYSmxiblFnWlhabGJuUWdjR3gxWjJsdWN5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbmRYTnBibWNnZEdobElITmhiV1VnYm1GdFpTd2dZQ1Z6WUM0bkxGeHVJQ0FnSUNBZ0lDQWdJSEJzZFdkcGJrNWhiV1ZjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDZ2hibUZ0WlhOVWIxQnNkV2RwYm5OYmNHeDFaMmx1VG1GdFpWMHBLVHRjYmlBZ0lDQWdJQ0FnYm1GdFpYTlViMUJzZFdkcGJuTmJjR3gxWjJsdVRtRnRaVjBnUFNCUWJIVm5hVzVOYjJSMWJHVTdYRzRnSUNBZ0lDQWdJR2x6VDNKa1pYSnBibWRFYVhKMGVTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNocGMwOXlaR1Z5YVc1blJHbHlkSGtwSUh0Y2JpQWdJQ0FnSUhKbFkyOXRjSFYwWlZCc2RXZHBiazl5WkdWeWFXNW5LQ2s3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCTWIyOXJjeUIxY0NCMGFHVWdjR3gxWjJsdUlHWnZjaUIwYUdVZ2MzVndjR3hwWldRZ1pYWmxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCbGRtVnVkQ0JCSUhONWJuUm9aWFJwWXlCbGRtVnVkQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdQMjlpYW1WamRIMGdWR2hsSUhCc2RXZHBiaUIwYUdGMElHTnlaV0YwWldRZ2RHaGxJSE4xY0hCc2FXVmtJR1YyWlc1MExseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHZGxkRkJzZFdkcGJrMXZaSFZzWlVadmNrVjJaVzUwT2lCbWRXNWpkR2x2YmlobGRtVnVkQ2tnZTF4dUlDQWdJSFpoY2lCa2FYTndZWFJqYUVOdmJtWnBaeUE5SUdWMlpXNTBMbVJwYzNCaGRHTm9RMjl1Wm1sbk8xeHVJQ0FnSUdsbUlDaGthWE53WVhSamFFTnZibVpwWnk1eVpXZHBjM1J5WVhScGIyNU9ZVzFsS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1eVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjMXRjYmlBZ0lDQWdJQ0FnWkdsemNHRjBZMmhEYjI1bWFXY3VjbVZuYVhOMGNtRjBhVzl1VG1GdFpWeHVJQ0FnSUNBZ1hTQjhmQ0J1ZFd4c08xeHVJQ0FnSUgxY2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3YUdGelpTQnBiaUJrYVhOd1lYUmphRU52Ym1acFp5NXdhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZrYVhOd1lYUmphRU52Ym1acFp5NXdhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3k1b1lYTlBkMjVRY205d1pYSjBlU2h3YUdGelpTa3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IyWVhJZ1VHeDFaMmx1VFc5a2RXeGxJRDBnUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1eVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjMXRjYmlBZ0lDQWdJQ0FnWkdsemNHRjBZMmhEYjI1bWFXY3VjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhOYmNHaGhjMlZkWEc0Z0lDQWdJQ0JkTzF4dUlDQWdJQ0FnYVdZZ0tGQnNkV2RwYmsxdlpIVnNaU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVUd4MVoybHVUVzlrZFd4bE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSWGh3YjNObFpDQm1iM0lnZFc1cGRDQjBaWE4wYVc1bkxseHVJQ0FnS2lCQWNISnBkbUYwWlZ4dUlDQWdLaTljYmlBZ1gzSmxjMlYwUlhabGJuUlFiSFZuYVc1ek9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQkZkbVZ1ZEZCc2RXZHBiazl5WkdWeUlEMGdiblZzYkR0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3YkhWbmFXNU9ZVzFsSUdsdUlHNWhiV1Z6Vkc5UWJIVm5hVzV6S1NCN1hHNGdJQ0FnSUNCcFppQW9ibUZ0WlhOVWIxQnNkV2RwYm5NdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0d4MVoybHVUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdaR1ZzWlhSbElHNWhiV1Z6Vkc5UWJIVm5hVzV6VzNCc2RXZHBiazVoYldWZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TG5Cc2RXZHBibk11YkdWdVozUm9JRDBnTUR0Y2JseHVJQ0FnSUhaaGNpQmxkbVZ1ZEU1aGJXVkVhWE53WVhSamFFTnZibVpwWjNNZ1BTQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbVYyWlc1MFRtRnRaVVJwYzNCaGRHTm9RMjl1Wm1sbmN6dGNiaUFnSUNCbWIzSWdLSFpoY2lCbGRtVnVkRTVoYldVZ2FXNGdaWFpsYm5ST1lXMWxSR2x6Y0dGMFkyaERiMjVtYVdkektTQjdYRzRnSUNBZ0lDQnBaaUFvWlhabGJuUk9ZVzFsUkdsemNHRjBZMmhEYjI1bWFXZHpMbWhoYzA5M2JsQnliM0JsY25SNUtHVjJaVzUwVG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnWkdWc1pYUmxJR1YyWlc1MFRtRnRaVVJwYzNCaGRHTm9RMjl1Wm1sbmMxdGxkbVZ1ZEU1aGJXVmRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJ5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGN5QTlJRVYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbmt1Y21WbmFYTjBjbUYwYVc5dVRtRnRaVTF2WkhWc1pYTTdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNCcGJpQnlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsY3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLSEpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWekxtaGhjMDkzYmxCeWIzQmxjblI1S0hKbFoybHpkSEpoZEdsdmJrNWhiV1VwS1NCN1hHNGdJQ0FnSUNBZ0lHUmxiR1YwWlNCeVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjMXR5WldkcGMzUnlZWFJwYjI1T1lXMWxYVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNU8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFdmVudFBsdWdpblV0aWxzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBJbmplY3RlZCBkZXBlbmRlbmNpZXM6XG4gKi9cblxuLyoqXG4gKiAtIGBNb3VudGA6IFtyZXF1aXJlZF0gTW9kdWxlIHRoYXQgY2FuIGNvbnZlcnQgYmV0d2VlbiBSZWFjdCBkb20gSURzIGFuZFxuICogICBhY3R1YWwgbm9kZSByZWZlcmVuY2VzLlxuICovXG52YXIgaW5qZWN0aW9uID0ge1xuICBNb3VudDogbnVsbCxcbiAgaW5qZWN0TW91bnQ6IGZ1bmN0aW9uKEluamVjdGVkTW91bnQpIHtcbiAgICBpbmplY3Rpb24uTW91bnQgPSBJbmplY3RlZE1vdW50O1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIEluamVjdGVkTW91bnQgJiYgSW5qZWN0ZWRNb3VudC5nZXROb2RlLFxuICAgICAgICAnRXZlbnRQbHVnaW5VdGlscy5pbmplY3Rpb24uaW5qZWN0TW91bnQoLi4uKTogSW5qZWN0ZWQgTW91bnQgbW9kdWxlICcgK1xuICAgICAgICAnaXMgbWlzc2luZyBnZXROb2RlLidcbiAgICAgICkgOiBpbnZhcmlhbnQoSW5qZWN0ZWRNb3VudCAmJiBJbmplY3RlZE1vdW50LmdldE5vZGUpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxuZnVuY3Rpb24gaXNFbmRpc2godG9wTGV2ZWxUeXBlKSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VVcCB8fFxuICAgICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoRW5kIHx8XG4gICAgICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wVG91Y2hDYW5jZWw7XG59XG5cbmZ1bmN0aW9uIGlzTW92ZWlzaCh0b3BMZXZlbFR5cGUpIHtcbiAgcmV0dXJuIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU1vdmUgfHxcbiAgICAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BUb3VjaE1vdmU7XG59XG5mdW5jdGlvbiBpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlRG93biB8fFxuICAgICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoU3RhcnQ7XG59XG5cblxudmFyIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzO1xuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICAgIHZhciBkaXNwYXRjaElEcyA9IGV2ZW50Ll9kaXNwYXRjaElEcztcblxuICAgIHZhciBsaXN0ZW5lcnNJc0FyciA9IEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpO1xuICAgIHZhciBpZHNJc0FyciA9IEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hJRHMpO1xuICAgIHZhciBJRHNMZW4gPSBpZHNJc0FyciA/IGRpc3BhdGNoSURzLmxlbmd0aCA6IGRpc3BhdGNoSURzID8gMSA6IDA7XG4gICAgdmFyIGxpc3RlbmVyc0xlbiA9IGxpc3RlbmVyc0lzQXJyID9cbiAgICAgIGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aCA6XG4gICAgICBkaXNwYXRjaExpc3RlbmVycyA/IDEgOiAwO1xuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGlkc0lzQXJyID09PSBsaXN0ZW5lcnNJc0FyciAmJiBJRHNMZW4gPT09IGxpc3RlbmVyc0xlbixcbiAgICAgICdFdmVudFBsdWdpblV0aWxzOiBJbnZhbGlkIGBldmVudGAuJ1xuICAgICkgOiBpbnZhcmlhbnQoaWRzSXNBcnIgPT09IGxpc3RlbmVyc0lzQXJyICYmIElEc0xlbiA9PT0gbGlzdGVuZXJzTGVuKSk7XG4gIH07XG59XG5cbi8qKlxuICogSW52b2tlcyBgY2IoZXZlbnQsIGxpc3RlbmVyLCBpZClgLiBBdm9pZHMgdXNpbmcgY2FsbCBpZiBubyBzY29wZSBpc1xuICogcHJvdmlkZWQuIFRoZSBgKGxpc3RlbmVyLGlkKWAgcGFpciBlZmZlY3RpdmVseSBmb3JtcyB0aGUgXCJkaXNwYXRjaFwiIGJ1dCBhcmVcbiAqIGtlcHQgc2VwYXJhdGUgdG8gY29uc2VydmUgbWVtb3J5LlxuICovXG5mdW5jdGlvbiBmb3JFYWNoRXZlbnREaXNwYXRjaChldmVudCwgY2IpIHtcbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICB2YXIgZGlzcGF0Y2hJRHMgPSBldmVudC5fZGlzcGF0Y2hJRHM7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBMaXN0ZW5lcnMgYW5kIElEcyBhcmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0aGF0IGFyZSBhbHdheXMgaW4gc3luYy5cbiAgICAgIGNiKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVyc1tpXSwgZGlzcGF0Y2hJRHNbaV0pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChkaXNwYXRjaExpc3RlbmVycykge1xuICAgIGNiKGV2ZW50LCBkaXNwYXRjaExpc3RlbmVycywgZGlzcGF0Y2hJRHMpO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBQbHVnaW5Nb2R1bGUuZXhlY3V0ZURpc3BhdGNoKCkuXG4gKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBTeW50aGV0aWNFdmVudCB0byBoYW5kbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IEFwcGxpY2F0aW9uLWxldmVsIGNhbGxiYWNrXG4gKiBAcGFyYW0ge3N0cmluZ30gZG9tSUQgRE9NIGlkIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBkb21JRCkge1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gaW5qZWN0aW9uLk1vdW50LmdldE5vZGUoZG9tSUQpO1xuICB2YXIgcmV0dXJuVmFsdWUgPSBsaXN0ZW5lcihldmVudCwgZG9tSUQpO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkL3NpbXBsZSBpdGVyYXRpb24gdGhyb3VnaCBhbiBldmVudCdzIGNvbGxlY3RlZCBkaXNwYXRjaGVzLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQsIGNiKSB7XG4gIGZvckVhY2hFdmVudERpc3BhdGNoKGV2ZW50LCBjYik7XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaElEcyA9IG51bGw7XG59XG5cbi8qKlxuICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJhdGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMsIGJ1dCBzdG9wc1xuICogYXQgdGhlIGZpcnN0IGRpc3BhdGNoIGV4ZWN1dGlvbiByZXR1cm5pbmcgdHJ1ZSwgYW5kIHJldHVybnMgdGhhdCBpZC5cbiAqXG4gKiBAcmV0dXJuIGlkIG9mIHRoZSBmaXJzdCBkaXNwYXRjaCBleGVjdXRpb24gd2hvJ3MgbGlzdGVuZXIgcmV0dXJucyB0cnVlLCBvclxuICogbnVsbCBpZiBubyBsaXN0ZW5lciByZXR1cm5lZCB0cnVlLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbChldmVudCkge1xuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaElEcyA9IGV2ZW50Ll9kaXNwYXRjaElEcztcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycykpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIExpc3RlbmVycyBhbmQgSURzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5jLlxuICAgICAgaWYgKGRpc3BhdGNoTGlzdGVuZXJzW2ldKGV2ZW50LCBkaXNwYXRjaElEc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoSURzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChkaXNwYXRjaExpc3RlbmVycykge1xuICAgIGlmIChkaXNwYXRjaExpc3RlbmVycyhldmVudCwgZGlzcGF0Y2hJRHMpKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hJRHM7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEBzZWUgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGxcbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZShldmVudCkge1xuICB2YXIgcmV0ID0gZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGwoZXZlbnQpO1xuICBldmVudC5fZGlzcGF0Y2hJRHMgPSBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEV4ZWN1dGlvbiBvZiBhIFwiZGlyZWN0XCIgZGlzcGF0Y2ggLSB0aGVyZSBtdXN0IGJlIGF0IG1vc3Qgb25lIGRpc3BhdGNoXG4gKiBhY2N1bXVsYXRlZCBvbiB0aGUgZXZlbnQgb3IgaXQgaXMgY29uc2lkZXJlZCBhbiBlcnJvci4gSXQgZG9lc24ndCByZWFsbHkgbWFrZVxuICogc2Vuc2UgZm9yIGFuIGV2ZW50IHdpdGggbXVsdGlwbGUgZGlzcGF0Y2hlcyAoYnViYmxlZCkgdG8ga2VlcCB0cmFjayBvZiB0aGVcbiAqIHJldHVybiB2YWx1ZXMgYXQgZWFjaCBkaXNwYXRjaCBleGVjdXRpb24sIGJ1dCBpdCBkb2VzIHRlbmQgdG8gbWFrZSBzZW5zZSB3aGVuXG4gKiBkZWFsaW5nIHdpdGggXCJkaXJlY3RcIiBkaXNwYXRjaGVzLlxuICpcbiAqIEByZXR1cm4gVGhlIHJldHVybiB2YWx1ZSBvZiBleGVjdXRpbmcgdGhlIHNpbmdsZSBkaXNwYXRjaC5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpcmVjdERpc3BhdGNoKGV2ZW50KSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1cbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXIgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaElEID0gZXZlbnQuX2Rpc3BhdGNoSURzO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICFBcnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXIpLFxuICAgICdleGVjdXRlRGlyZWN0RGlzcGF0Y2goLi4uKTogSW52YWxpZCBgZXZlbnRgLidcbiAgKSA6IGludmFyaWFudCghQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVyKSkpO1xuICB2YXIgcmVzID0gZGlzcGF0Y2hMaXN0ZW5lciA/XG4gICAgZGlzcGF0Y2hMaXN0ZW5lcihldmVudCwgZGlzcGF0Y2hJRCkgOlxuICAgIG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaElEcyA9IG51bGw7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqIEByZXR1cm4ge2Jvb2x9IFRydWUgaWZmIG51bWJlciBvZiBkaXNwYXRjaGVzIGFjY3VtdWxhdGVkIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5mdW5jdGlvbiBoYXNEaXNwYXRjaGVzKGV2ZW50KSB7XG4gIHJldHVybiAhIWV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbn1cblxuLyoqXG4gKiBHZW5lcmFsIHV0aWxpdGllcyB0aGF0IGFyZSB1c2VmdWwgaW4gY3JlYXRpbmcgY3VzdG9tIEV2ZW50IFBsdWdpbnMuXG4gKi9cbnZhciBFdmVudFBsdWdpblV0aWxzID0ge1xuICBpc0VuZGlzaDogaXNFbmRpc2gsXG4gIGlzTW92ZWlzaDogaXNNb3ZlaXNoLFxuICBpc1N0YXJ0aXNoOiBpc1N0YXJ0aXNoLFxuXG4gIGV4ZWN1dGVEaXJlY3REaXNwYXRjaDogZXhlY3V0ZURpcmVjdERpc3BhdGNoLFxuICBleGVjdXRlRGlzcGF0Y2g6IGV4ZWN1dGVEaXNwYXRjaCxcbiAgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyOiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIsXG4gIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWU6IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUsXG4gIGhhc0Rpc3BhdGNoZXM6IGhhc0Rpc3BhdGNoZXMsXG4gIGluamVjdGlvbjogaW5qZWN0aW9uLFxuICB1c2VUb3VjaEV2ZW50czogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRQbHVnaW5VdGlscztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJYWmxiblJRYkhWbmFXNVZkR2xzY3k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElFVjJaVzUwVUd4MVoybHVWWFJwYkhOY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQkZkbVZ1ZEVOdmJuTjBZVzUwY3lBOUlISmxjWFZwY21Vb1hDSXVMMFYyWlc1MFEyOXVjM1JoYm5SelhDSXBPMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc0dktpcGNiaUFxSUVsdWFtVmpkR1ZrSUdSbGNHVnVaR1Z1WTJsbGN6cGNiaUFxTDF4dVhHNHZLaXBjYmlBcUlDMGdZRTF2ZFc1MFlEb2dXM0psY1hWcGNtVmtYU0JOYjJSMWJHVWdkR2hoZENCallXNGdZMjl1ZG1WeWRDQmlaWFIzWldWdUlGSmxZV04wSUdSdmJTQkpSSE1nWVc1a1hHNGdLaUFnSUdGamRIVmhiQ0J1YjJSbElISmxabVZ5Wlc1alpYTXVYRzRnS2k5Y2JuWmhjaUJwYm1wbFkzUnBiMjRnUFNCN1hHNGdJRTF2ZFc1ME9pQnVkV3hzTEZ4dUlDQnBibXBsWTNSTmIzVnVkRG9nWm5WdVkzUnBiMjRvU1c1cVpXTjBaV1JOYjNWdWRDa2dlMXh1SUNBZ0lHbHVhbVZqZEdsdmJpNU5iM1Z1ZENBOUlFbHVhbVZqZEdWa1RXOTFiblE3WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdTVzVxWldOMFpXUk5iM1Z1ZENBbUppQkpibXBsWTNSbFpFMXZkVzUwTG1kbGRFNXZaR1VzWEc0Z0lDQWdJQ0FnSUNkRmRtVnVkRkJzZFdkcGJsVjBhV3h6TG1sdWFtVmpkR2x2Ymk1cGJtcGxZM1JOYjNWdWRDZ3VMaTRwT2lCSmJtcGxZM1JsWkNCTmIzVnVkQ0J0YjJSMWJHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNkcGN5QnRhWE56YVc1bklHZGxkRTV2WkdVdUoxeHVJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hKYm1wbFkzUmxaRTF2ZFc1MElDWW1JRWx1YW1WamRHVmtUVzkxYm5RdVoyVjBUbTlrWlNrcE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlR0Y2JseHVkbUZ5SUhSdmNFeGxkbVZzVkhsd1pYTWdQU0JGZG1WdWRFTnZibk4wWVc1MGN5NTBiM0JNWlhabGJGUjVjR1Z6TzF4dVhHNW1kVzVqZEdsdmJpQnBjMFZ1WkdsemFDaDBiM0JNWlhabGJGUjVjR1VwSUh0Y2JpQWdjbVYwZFhKdUlIUnZjRXhsZG1Wc1ZIbHdaU0E5UFQwZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCTmIzVnpaVlZ3SUh4OFhHNGdJQ0FnSUNBZ0lDQjBiM0JNWlhabGJGUjVjR1VnUFQwOUlIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1ZHOTFZMmhGYm1RZ2ZIeGNiaUFnSUNBZ0lDQWdJSFJ2Y0V4bGRtVnNWSGx3WlNBOVBUMGdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQlViM1ZqYUVOaGJtTmxiRHRjYm4xY2JseHVablZ1WTNScGIyNGdhWE5OYjNabGFYTm9LSFJ2Y0V4bGRtVnNWSGx3WlNrZ2UxeHVJQ0J5WlhSMWNtNGdkRzl3VEdWMlpXeFVlWEJsSUQwOVBTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFMXZkWE5sVFc5MlpTQjhmRnh1SUNBZ0lDQWdJQ0FnZEc5d1RHVjJaV3hVZVhCbElEMDlQU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRlJ2ZFdOb1RXOTJaVHRjYm4xY2JtWjFibU4wYVc5dUlHbHpVM1JoY25ScGMyZ29kRzl3VEdWMlpXeFVlWEJsS1NCN1hHNGdJSEpsZEhWeWJpQjBiM0JNWlhabGJGUjVjR1VnUFQwOUlIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1RXOTFjMlZFYjNkdUlIeDhYRzRnSUNBZ0lDQWdJQ0IwYjNCTVpYWmxiRlI1Y0dVZ1BUMDlJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdWRzkxWTJoVGRHRnlkRHRjYm4xY2JseHVYRzUyWVhJZ2RtRnNhV1JoZEdWRmRtVnVkRVJwYzNCaGRHTm9aWE03WEc1cFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJSFpoYkdsa1lYUmxSWFpsYm5SRWFYTndZWFJqYUdWeklEMGdablZ1WTNScGIyNG9aWFpsYm5RcElIdGNiaUFnSUNCMllYSWdaR2x6Y0dGMFkyaE1hWE4wWlc1bGNuTWdQU0JsZG1WdWRDNWZaR2x6Y0dGMFkyaE1hWE4wWlc1bGNuTTdYRzRnSUNBZ2RtRnlJR1JwYzNCaGRHTm9TVVJ6SUQwZ1pYWmxiblF1WDJScGMzQmhkR05vU1VSek8xeHVYRzRnSUNBZ2RtRnlJR3hwYzNSbGJtVnljMGx6UVhKeUlEMGdRWEp5WVhrdWFYTkJjbkpoZVNoa2FYTndZWFJqYUV4cGMzUmxibVZ5Y3lrN1hHNGdJQ0FnZG1GeUlHbGtjMGx6UVhKeUlEMGdRWEp5WVhrdWFYTkJjbkpoZVNoa2FYTndZWFJqYUVsRWN5azdYRzRnSUNBZ2RtRnlJRWxFYzB4bGJpQTlJR2xrYzBselFYSnlJRDhnWkdsemNHRjBZMmhKUkhNdWJHVnVaM1JvSURvZ1pHbHpjR0YwWTJoSlJITWdQeUF4SURvZ01EdGNiaUFnSUNCMllYSWdiR2x6ZEdWdVpYSnpUR1Z1SUQwZ2JHbHpkR1Z1WlhKelNYTkJjbklnUDF4dUlDQWdJQ0FnWkdsemNHRjBZMmhNYVhOMFpXNWxjbk11YkdWdVozUm9JRHBjYmlBZ0lDQWdJR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpJRDhnTVNBNklEQTdYRzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2FXUnpTWE5CY25JZ1BUMDlJR3hwYzNSbGJtVnljMGx6UVhKeUlDWW1JRWxFYzB4bGJpQTlQVDBnYkdsemRHVnVaWEp6VEdWdUxGeHVJQ0FnSUNBZ0owVjJaVzUwVUd4MVoybHVWWFJwYkhNNklFbHVkbUZzYVdRZ1lHVjJaVzUwWUM0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHBaSE5KYzBGeWNpQTlQVDBnYkdsemRHVnVaWEp6U1hOQmNuSWdKaVlnU1VSelRHVnVJRDA5UFNCc2FYTjBaVzVsY25OTVpXNHBLVHRjYmlBZ2ZUdGNibjFjYmx4dUx5b3FYRzRnS2lCSmJuWnZhMlZ6SUdCallpaGxkbVZ1ZEN3Z2JHbHpkR1Z1WlhJc0lHbGtLV0F1SUVGMmIybGtjeUIxYzJsdVp5QmpZV3hzSUdsbUlHNXZJSE5qYjNCbElHbHpYRzRnS2lCd2NtOTJhV1JsWkM0Z1ZHaGxJR0FvYkdsemRHVnVaWElzYVdRcFlDQndZV2x5SUdWbVptVmpkR2wyWld4NUlHWnZjbTF6SUhSb1pTQmNJbVJwYzNCaGRHTm9YQ0lnWW5WMElHRnlaVnh1SUNvZ2EyVndkQ0J6WlhCaGNtRjBaU0IwYnlCamIyNXpaWEoyWlNCdFpXMXZjbmt1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1p2Y2tWaFkyaEZkbVZ1ZEVScGMzQmhkR05vS0dWMlpXNTBMQ0JqWWlrZ2UxeHVJQ0IyWVhJZ1pHbHpjR0YwWTJoTWFYTjBaVzVsY25NZ1BTQmxkbVZ1ZEM1ZlpHbHpjR0YwWTJoTWFYTjBaVzVsY25NN1hHNGdJSFpoY2lCa2FYTndZWFJqYUVsRWN5QTlJR1YyWlc1MExsOWthWE53WVhSamFFbEVjenRjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUhaaGJHbGtZWFJsUlhabGJuUkVhWE53WVhSamFHVnpLR1YyWlc1MEtUdGNiaUFnZlZ4dUlDQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaGthWE53WVhSamFFeHBjM1JsYm1WeWN5a3BJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9aWFpsYm5RdWFYTlFjbTl3WVdkaGRHbHZibE4wYjNCd1pXUW9LU2tnZTF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJQzh2SUV4cGMzUmxibVZ5Y3lCaGJtUWdTVVJ6SUdGeVpTQjBkMjhnY0dGeVlXeHNaV3dnWVhKeVlYbHpJSFJvWVhRZ1lYSmxJR0ZzZDJGNWN5QnBiaUJ6ZVc1akxseHVJQ0FnSUNBZ1kySW9aWFpsYm5Rc0lHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKelcybGRMQ0JrYVhOd1lYUmphRWxFYzF0cFhTazdYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdhV1lnS0dScGMzQmhkR05vVEdsemRHVnVaWEp6S1NCN1hHNGdJQ0FnWTJJb1pYWmxiblFzSUdScGMzQmhkR05vVEdsemRHVnVaWEp6TENCa2FYTndZWFJqYUVsRWN5azdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJFWldaaGRXeDBJR2x0Y0d4bGJXVnVkR0YwYVc5dUlHOW1JRkJzZFdkcGJrMXZaSFZzWlM1bGVHVmpkWFJsUkdsemNHRjBZMmdvS1M1Y2JpQXFJRUJ3WVhKaGJTQjdVM2x1ZEdobGRHbGpSWFpsYm5SOUlGTjViblJvWlhScFkwVjJaVzUwSUhSdklHaGhibVJzWlZ4dUlDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdRWEJ3YkdsallYUnBiMjR0YkdWMlpXd2dZMkZzYkdKaFkydGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JrYjIxSlJDQkVUMDBnYVdRZ2RHOGdjR0Z6Y3lCMGJ5QjBhR1VnWTJGc2JHSmhZMnN1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1Y0WldOMWRHVkVhWE53WVhSamFDaGxkbVZ1ZEN3Z2JHbHpkR1Z1WlhJc0lHUnZiVWxFS1NCN1hHNGdJR1YyWlc1MExtTjFjbkpsYm5SVVlYSm5aWFFnUFNCcGJtcGxZM1JwYjI0dVRXOTFiblF1WjJWMFRtOWtaU2hrYjIxSlJDazdYRzRnSUhaaGNpQnlaWFIxY201V1lXeDFaU0E5SUd4cGMzUmxibVZ5S0dWMlpXNTBMQ0JrYjIxSlJDazdYRzRnSUdWMlpXNTBMbU4xY25KbGJuUlVZWEpuWlhRZ1BTQnVkV3hzTzF4dUlDQnlaWFIxY200Z2NtVjBkWEp1Vm1Gc2RXVTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1UzUmhibVJoY21RdmMybHRjR3hsSUdsMFpYSmhkR2x2YmlCMGFISnZkV2RvSUdGdUlHVjJaVzUwSjNNZ1kyOXNiR1ZqZEdWa0lHUnBjM0JoZEdOb1pYTXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHVjRaV04xZEdWRWFYTndZWFJqYUdWelNXNVBjbVJsY2lobGRtVnVkQ3dnWTJJcElIdGNiaUFnWm05eVJXRmphRVYyWlc1MFJHbHpjR0YwWTJnb1pYWmxiblFzSUdOaUtUdGNiaUFnWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpJRDBnYm5Wc2JEdGNiaUFnWlhabGJuUXVYMlJwYzNCaGRHTm9TVVJ6SUQwZ2JuVnNiRHRjYm4xY2JseHVMeW9xWEc0Z0tpQlRkR0Z1WkdGeVpDOXphVzF3YkdVZ2FYUmxjbUYwYVc5dUlIUm9jbTkxWjJnZ1lXNGdaWFpsYm5RbmN5QmpiMnhzWldOMFpXUWdaR2x6Y0dGMFkyaGxjeXdnWW5WMElITjBiM0J6WEc0Z0tpQmhkQ0IwYUdVZ1ptbHljM1FnWkdsemNHRjBZMmdnWlhobFkzVjBhVzl1SUhKbGRIVnlibWx1WnlCMGNuVmxMQ0JoYm1RZ2NtVjBkWEp1Y3lCMGFHRjBJR2xrTGx4dUlDcGNiaUFxSUVCeVpYUjFjbTRnYVdRZ2IyWWdkR2hsSUdacGNuTjBJR1JwYzNCaGRHTm9JR1Y0WldOMWRHbHZiaUIzYUc4bmN5QnNhWE4wWlc1bGNpQnlaWFIxY201eklIUnlkV1VzSUc5eVhHNGdLaUJ1ZFd4c0lHbG1JRzV2SUd4cGMzUmxibVZ5SUhKbGRIVnlibVZrSUhSeWRXVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHVjRaV04xZEdWRWFYTndZWFJqYUdWelNXNVBjbVJsY2xOMGIzQkJkRlJ5ZFdWSmJYQnNLR1YyWlc1MEtTQjdYRzRnSUhaaGNpQmthWE53WVhSamFFeHBjM1JsYm1WeWN5QTlJR1YyWlc1MExsOWthWE53WVhSamFFeHBjM1JsYm1WeWN6dGNiaUFnZG1GeUlHUnBjM0JoZEdOb1NVUnpJRDBnWlhabGJuUXVYMlJwYzNCaGRHTm9TVVJ6TzF4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ2RtRnNhV1JoZEdWRmRtVnVkRVJwYzNCaGRHTm9aWE1vWlhabGJuUXBPMXh1SUNCOVhHNGdJR2xtSUNoQmNuSmhlUzVwYzBGeWNtRjVLR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpLU2tnZTF4dUlDQWdJR1p2Y2lBb2RtRnlJR2tnUFNBd095QnBJRHdnWkdsemNHRjBZMmhNYVhOMFpXNWxjbk11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lHbG1JQ2hsZG1WdWRDNXBjMUJ5YjNCaFoyRjBhVzl1VTNSdmNIQmxaQ2dwS1NCN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnTHk4Z1RHbHpkR1Z1WlhKeklHRnVaQ0JKUkhNZ1lYSmxJSFIzYnlCd1lYSmhiR3hsYkNCaGNuSmhlWE1nZEdoaGRDQmhjbVVnWVd4M1lYbHpJR2x1SUhONWJtTXVYRzRnSUNBZ0lDQnBaaUFvWkdsemNHRjBZMmhNYVhOMFpXNWxjbk5iYVYwb1pYWmxiblFzSUdScGMzQmhkR05vU1VSelcybGRLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWkdsemNHRjBZMmhKUkhOYmFWMDdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdhV1lnS0dScGMzQmhkR05vVEdsemRHVnVaWEp6S1NCN1hHNGdJQ0FnYVdZZ0tHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKektHVjJaVzUwTENCa2FYTndZWFJqYUVsRWN5a3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmthWE53WVhSamFFbEVjenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHNTFiR3c3WEc1OVhHNWNiaThxS2x4dUlDb2dRSE5sWlNCbGVHVmpkWFJsUkdsemNHRjBZMmhsYzBsdVQzSmtaWEpUZEc5d1FYUlVjblZsU1cxd2JGeHVJQ292WEc1bWRXNWpkR2x2YmlCbGVHVmpkWFJsUkdsemNHRjBZMmhsYzBsdVQzSmtaWEpUZEc5d1FYUlVjblZsS0dWMlpXNTBLU0I3WEc0Z0lIWmhjaUJ5WlhRZ1BTQmxlR1ZqZFhSbFJHbHpjR0YwWTJobGMwbHVUM0prWlhKVGRHOXdRWFJVY25WbFNXMXdiQ2hsZG1WdWRDazdYRzRnSUdWMlpXNTBMbDlrYVhOd1lYUmphRWxFY3lBOUlHNTFiR3c3WEc0Z0lHVjJaVzUwTGw5a2FYTndZWFJqYUV4cGMzUmxibVZ5Y3lBOUlHNTFiR3c3WEc0Z0lISmxkSFZ5YmlCeVpYUTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1JYaGxZM1YwYVc5dUlHOW1JR0VnWENKa2FYSmxZM1JjSWlCa2FYTndZWFJqYUNBdElIUm9aWEpsSUcxMWMzUWdZbVVnWVhRZ2JXOXpkQ0J2Ym1VZ1pHbHpjR0YwWTJoY2JpQXFJR0ZqWTNWdGRXeGhkR1ZrSUc5dUlIUm9aU0JsZG1WdWRDQnZjaUJwZENCcGN5QmpiMjV6YVdSbGNtVmtJR0Z1SUdWeWNtOXlMaUJKZENCa2IyVnpiaWQwSUhKbFlXeHNlU0J0WVd0bFhHNGdLaUJ6Wlc1elpTQm1iM0lnWVc0Z1pYWmxiblFnZDJsMGFDQnRkV3gwYVhCc1pTQmthWE53WVhSamFHVnpJQ2hpZFdKaWJHVmtLU0IwYnlCclpXVndJSFJ5WVdOcklHOW1JSFJvWlZ4dUlDb2djbVYwZFhKdUlIWmhiSFZsY3lCaGRDQmxZV05vSUdScGMzQmhkR05vSUdWNFpXTjFkR2x2Yml3Z1luVjBJR2wwSUdSdlpYTWdkR1Z1WkNCMGJ5QnRZV3RsSUhObGJuTmxJSGRvWlc1Y2JpQXFJR1JsWVd4cGJtY2dkMmwwYUNCY0ltUnBjbVZqZEZ3aUlHUnBjM0JoZEdOb1pYTXVYRzRnS2x4dUlDb2dRSEpsZEhWeWJpQlVhR1VnY21WMGRYSnVJSFpoYkhWbElHOW1JR1Y0WldOMWRHbHVaeUIwYUdVZ2MybHVaMnhsSUdScGMzQmhkR05vTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJsZUdWamRYUmxSR2x5WldOMFJHbHpjR0YwWTJnb1pYWmxiblFwSUh0Y2JpQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lIWmhiR2xrWVhSbFJYWmxiblJFYVhOd1lYUmphR1Z6S0dWMlpXNTBLVHRjYmlBZ2ZWeHVJQ0IyWVhJZ1pHbHpjR0YwWTJoTWFYTjBaVzVsY2lBOUlHVjJaVzUwTGw5a2FYTndZWFJqYUV4cGMzUmxibVZ5Y3p0Y2JpQWdkbUZ5SUdScGMzQmhkR05vU1VRZ1BTQmxkbVZ1ZEM1ZlpHbHpjR0YwWTJoSlJITTdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJVUZ5Y21GNUxtbHpRWEp5WVhrb1pHbHpjR0YwWTJoTWFYTjBaVzVsY2lrc1hHNGdJQ0FnSjJWNFpXTjFkR1ZFYVhKbFkzUkVhWE53WVhSamFDZ3VMaTRwT2lCSmJuWmhiR2xrSUdCbGRtVnVkR0F1SjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0NGQmNuSmhlUzVwYzBGeWNtRjVLR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSXBLU2s3WEc0Z0lIWmhjaUJ5WlhNZ1BTQmthWE53WVhSamFFeHBjM1JsYm1WeUlEOWNiaUFnSUNCa2FYTndZWFJqYUV4cGMzUmxibVZ5S0dWMlpXNTBMQ0JrYVhOd1lYUmphRWxFS1NBNlhHNGdJQ0FnYm5Wc2JEdGNiaUFnWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpJRDBnYm5Wc2JEdGNiaUFnWlhabGJuUXVYMlJwYzNCaGRHTm9TVVJ6SUQwZ2JuVnNiRHRjYmlBZ2NtVjBkWEp1SUhKbGN6dGNibjFjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTFONWJuUm9aWFJwWTBWMlpXNTBmU0JsZG1WdWRGeHVJQ29nUUhKbGRIVnliaUI3WW05dmJIMGdWSEoxWlNCcFptWWdiblZ0WW1WeUlHOW1JR1JwYzNCaGRHTm9aWE1nWVdOamRXMTFiR0YwWldRZ2FYTWdaM0psWVhSbGNpQjBhR0Z1SURBdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdoaGMwUnBjM0JoZEdOb1pYTW9aWFpsYm5RcElIdGNiaUFnY21WMGRYSnVJQ0VoWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZGxibVZ5WVd3Z2RYUnBiR2wwYVdWeklIUm9ZWFFnWVhKbElIVnpaV1oxYkNCcGJpQmpjbVZoZEdsdVp5QmpkWE4wYjIwZ1JYWmxiblFnVUd4MVoybHVjeTVjYmlBcUwxeHVkbUZ5SUVWMlpXNTBVR3gxWjJsdVZYUnBiSE1nUFNCN1hHNGdJR2x6Ulc1a2FYTm9PaUJwYzBWdVpHbHphQ3hjYmlBZ2FYTk5iM1psYVhOb09pQnBjMDF2ZG1WcGMyZ3NYRzRnSUdselUzUmhjblJwYzJnNklHbHpVM1JoY25ScGMyZ3NYRzVjYmlBZ1pYaGxZM1YwWlVScGNtVmpkRVJwYzNCaGRHTm9PaUJsZUdWamRYUmxSR2x5WldOMFJHbHpjR0YwWTJnc1hHNGdJR1Y0WldOMWRHVkVhWE53WVhSamFEb2daWGhsWTNWMFpVUnBjM0JoZEdOb0xGeHVJQ0JsZUdWamRYUmxSR2x6Y0dGMFkyaGxjMGx1VDNKa1pYSTZJR1Y0WldOMWRHVkVhWE53WVhSamFHVnpTVzVQY21SbGNpeGNiaUFnWlhobFkzVjBaVVJwYzNCaGRHTm9aWE5KYms5eVpHVnlVM1J2Y0VGMFZISjFaVG9nWlhobFkzVjBaVVJwYzNCaGRHTm9aWE5KYms5eVpHVnlVM1J2Y0VGMFZISjFaU3hjYmlBZ2FHRnpSR2x6Y0dGMFkyaGxjem9nYUdGelJHbHpjR0YwWTJobGN5eGNiaUFnYVc1cVpXTjBhVzl1T2lCcGJtcGxZM1JwYjI0c1hHNGdJSFZ6WlZSdmRXTm9SWFpsYm5Sek9pQm1ZV3h6WlZ4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JGZG1WdWRGQnNkV2RwYmxWMGFXeHpPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQcm9wYWdhdG9yc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcblxudmFyIGFjY3VtdWxhdGVJbnRvID0gcmVxdWlyZShcIi4vYWNjdW11bGF0ZUludG9cIik7XG52YXIgZm9yRWFjaEFjY3VtdWxhdGVkID0gcmVxdWlyZShcIi4vZm9yRWFjaEFjY3VtdWxhdGVkXCIpO1xuXG52YXIgUHJvcGFnYXRpb25QaGFzZXMgPSBFdmVudENvbnN0YW50cy5Qcm9wYWdhdGlvblBoYXNlcztcbnZhciBnZXRMaXN0ZW5lciA9IEV2ZW50UGx1Z2luSHViLmdldExpc3RlbmVyO1xuXG4vKipcbiAqIFNvbWUgZXZlbnQgdHlwZXMgaGF2ZSBhIG5vdGlvbiBvZiBkaWZmZXJlbnQgcmVnaXN0cmF0aW9uIG5hbWVzIGZvciBkaWZmZXJlbnRcbiAqIFwicGhhc2VzXCIgb2YgcHJvcGFnYXRpb24uIFRoaXMgZmluZHMgbGlzdGVuZXJzIGJ5IGEgZ2l2ZW4gcGhhc2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RlbmVyQXRQaGFzZShpZCwgZXZlbnQsIHByb3BhZ2F0aW9uUGhhc2UpIHtcbiAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPVxuICAgIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3Byb3BhZ2F0aW9uUGhhc2VdO1xuICByZXR1cm4gZ2V0TGlzdGVuZXIoaWQsIHJlZ2lzdHJhdGlvbk5hbWUpO1xufVxuXG4vKipcbiAqIFRhZ3MgYSBgU3ludGhldGljRXZlbnRgIHdpdGggZGlzcGF0Y2hlZCBsaXN0ZW5lcnMuIENyZWF0aW5nIHRoaXMgZnVuY3Rpb25cbiAqIGhlcmUsIGFsbG93cyB1cyB0byBub3QgaGF2ZSB0byBiaW5kIG9yIGNyZWF0ZSBmdW5jdGlvbnMgZm9yIGVhY2ggZXZlbnQuXG4gKiBNdXRhdGluZyB0aGUgZXZlbnQncyBtZW1iZXJzIGFsbG93cyB1cyB0byBub3QgaGF2ZSB0byBjcmVhdGUgYSB3cmFwcGluZ1xuICogXCJkaXNwYXRjaFwiIG9iamVjdCB0aGF0IHBhaXJzIHRoZSBldmVudCB3aXRoIHRoZSBsaXN0ZW5lci5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyhkb21JRCwgdXB3YXJkcywgZXZlbnQpIHtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIGlmICghZG9tSUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzcGF0Y2hpbmcgaWQgbXVzdCBub3QgYmUgbnVsbCcpO1xuICAgIH1cbiAgfVxuICB2YXIgcGhhc2UgPSB1cHdhcmRzID8gUHJvcGFnYXRpb25QaGFzZXMuYnViYmxlZCA6IFByb3BhZ2F0aW9uUGhhc2VzLmNhcHR1cmVkO1xuICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lckF0UGhhc2UoZG9tSUQsIGV2ZW50LCBwaGFzZSk7XG4gIGlmIChsaXN0ZW5lcikge1xuICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9XG4gICAgICBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgICBldmVudC5fZGlzcGF0Y2hJRHMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hJRHMsIGRvbUlEKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgZGlzcGF0Y2hlcyAobXVzdCBiZSBlbnRpcmVseSBjb2xsZWN0ZWQgYmVmb3JlIGRpc3BhdGNoaW5nIC0gc2VlIHVuaXRcbiAqIHRlc3RzKS4gTGF6aWx5IGFsbG9jYXRlIHRoZSBhcnJheSB0byBjb25zZXJ2ZSBtZW1vcnkuICBXZSBtdXN0IGxvb3AgdGhyb3VnaFxuICogZWFjaCBldmVudCBhbmQgcGVyZm9ybSB0aGUgdHJhdmVyc2FsIGZvciBlYWNoIG9uZS4gV2UgY2FuIG5vdCBwZXJmb3JtIGFcbiAqIHNpbmdsZSB0cmF2ZXJzYWwgZm9yIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBvZiBldmVudHMgYmVjYXVzZSBlYWNoIGV2ZW50IG1heVxuICogaGF2ZSBhIGRpZmZlcmVudCB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmdldEluc3RhbmNlSGFuZGxlKCkudHJhdmVyc2VUd29QaGFzZShcbiAgICAgIGV2ZW50LmRpc3BhdGNoTWFya2VyLFxuICAgICAgYWNjdW11bGF0ZURpcmVjdGlvbmFsRGlzcGF0Y2hlcyxcbiAgICAgIGV2ZW50XG4gICAgKTtcbiAgfVxufVxuXG5cbi8qKlxuICogQWNjdW11bGF0ZXMgd2l0aG91dCByZWdhcmQgdG8gZGlyZWN0aW9uLCBkb2VzIG5vdCBsb29rIGZvciBwaGFzZWRcbiAqIHJlZ2lzdHJhdGlvbiBuYW1lcy4gU2FtZSBhcyBgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGVgIGJ1dCB3aXRob3V0XG4gKiByZXF1aXJpbmcgdGhhdCB0aGUgYGRpc3BhdGNoTWFya2VyYCBiZSB0aGUgc2FtZSBhcyB0aGUgZGlzcGF0Y2hlZCBJRC5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpc3BhdGNoZXMoaWQsIGlnbm9yZWREaXJlY3Rpb24sIGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lO1xuICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGlkLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICBpZiAobGlzdGVuZXIpIHtcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9XG4gICAgICAgIGFjY3VtdWxhdGVJbnRvKGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycywgbGlzdGVuZXIpO1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoSURzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoSURzLCBpZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjdW11bGF0ZXMgZGlzcGF0Y2hlcyBvbiBhbiBgU3ludGhldGljRXZlbnRgLCBidXQgb25seSBmb3IgdGhlXG4gKiBgZGlzcGF0Y2hNYXJrZXJgLlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICYmIGV2ZW50LmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICBhY2N1bXVsYXRlRGlzcGF0Y2hlcyhldmVudC5kaXNwYXRjaE1hcmtlciwgbnVsbCwgZXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnRzKSB7XG4gIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUpO1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXMobGVhdmUsIGVudGVyLCBmcm9tSUQsIHRvSUQpIHtcbiAgRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmdldEluc3RhbmNlSGFuZGxlKCkudHJhdmVyc2VFbnRlckxlYXZlKFxuICAgIGZyb21JRCxcbiAgICB0b0lELFxuICAgIGFjY3VtdWxhdGVEaXNwYXRjaGVzLFxuICAgIGxlYXZlLFxuICAgIGVudGVyXG4gICk7XG59XG5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXMoZXZlbnRzKSB7XG4gIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKTtcbn1cblxuXG5cbi8qKlxuICogQSBzbWFsbCBzZXQgb2YgcHJvcGFnYXRpb24gcGF0dGVybnMsIGVhY2ggb2Ygd2hpY2ggd2lsbCBhY2NlcHQgYSBzbWFsbCBhbW91bnRcbiAqIG9mIGluZm9ybWF0aW9uLCBhbmQgZ2VuZXJhdGUgYSBzZXQgb2YgXCJkaXNwYXRjaCByZWFkeSBldmVudCBvYmplY3RzXCIgLSB3aGljaFxuICogYXJlIHNldHMgb2YgZXZlbnRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYW5ub3RhdGVkIHdpdGggYSBzZXQgb2YgZGlzcGF0Y2hlZFxuICogbGlzdGVuZXIgZnVuY3Rpb25zL2lkcy4gVGhlIEFQSSBpcyBkZXNpZ25lZCB0aGlzIHdheSB0byBkaXNjb3VyYWdlIHRoZXNlXG4gKiBwcm9wYWdhdGlvbiBzdHJhdGVnaWVzIGZyb20gYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBkaXNwYXRjaGVzLCBzaW5jZSB3ZVxuICogYWx3YXlzIHdhbnQgdG8gY29sbGVjdCB0aGUgZW50aXJlIHNldCBvZiBkaXNwYXRjaGVzIGJlZm9yZSBleGVjdXRpbmcgZXZlbnQgYVxuICogc2luZ2xlIG9uZS5cbiAqXG4gKiBAY29uc3RydWN0b3IgRXZlbnRQcm9wYWdhdG9yc1xuICovXG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHtcbiAgYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlczogYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyxcbiAgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6IGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzLFxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXM6IGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFByb3BhZ2F0b3JzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UlhabGJuUlFjbTl3WVdkaGRHOXljeTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRmRtVnVkRkJ5YjNCaFoyRjBiM0p6WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1JYWmxiblJEYjI1emRHRnVkSE1nUFNCeVpYRjFhWEpsS0Z3aUxpOUZkbVZ1ZEVOdmJuTjBZVzUwYzF3aUtUdGNiblpoY2lCRmRtVnVkRkJzZFdkcGJraDFZaUE5SUhKbGNYVnBjbVVvWENJdUwwVjJaVzUwVUd4MVoybHVTSFZpWENJcE8xeHVYRzUyWVhJZ1lXTmpkVzExYkdGMFpVbHVkRzhnUFNCeVpYRjFhWEpsS0Z3aUxpOWhZMk4xYlhWc1lYUmxTVzUwYjF3aUtUdGNiblpoY2lCbWIzSkZZV05vUVdOamRXMTFiR0YwWldRZ1BTQnlaWEYxYVhKbEtGd2lMaTltYjNKRllXTm9RV05qZFcxMWJHRjBaV1JjSWlrN1hHNWNiblpoY2lCUWNtOXdZV2RoZEdsdmJsQm9ZWE5sY3lBOUlFVjJaVzUwUTI5dWMzUmhiblJ6TGxCeWIzQmhaMkYwYVc5dVVHaGhjMlZ6TzF4dWRtRnlJR2RsZEV4cGMzUmxibVZ5SUQwZ1JYWmxiblJRYkhWbmFXNUlkV0l1WjJWMFRHbHpkR1Z1WlhJN1hHNWNiaThxS2x4dUlDb2dVMjl0WlNCbGRtVnVkQ0IwZVhCbGN5Qm9ZWFpsSUdFZ2JtOTBhVzl1SUc5bUlHUnBabVpsY21WdWRDQnlaV2RwYzNSeVlYUnBiMjRnYm1GdFpYTWdabTl5SUdScFptWmxjbVZ1ZEZ4dUlDb2dYQ0p3YUdGelpYTmNJaUJ2WmlCd2NtOXdZV2RoZEdsdmJpNGdWR2hwY3lCbWFXNWtjeUJzYVhOMFpXNWxjbk1nWW5rZ1lTQm5hWFpsYmlCd2FHRnpaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdiR2x6ZEdWdVpYSkJkRkJvWVhObEtHbGtMQ0JsZG1WdWRDd2djSEp2Y0dGbllYUnBiMjVRYUdGelpTa2dlMXh1SUNCMllYSWdjbVZuYVhOMGNtRjBhVzl1VG1GdFpTQTlYRzRnSUNBZ1pYWmxiblF1WkdsemNHRjBZMmhEYjI1bWFXY3VjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhOYmNISnZjR0ZuWVhScGIyNVFhR0Z6WlYwN1hHNGdJSEpsZEhWeWJpQm5aWFJNYVhOMFpXNWxjaWhwWkN3Z2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNrN1hHNTlYRzVjYmk4cUtseHVJQ29nVkdGbmN5QmhJR0JUZVc1MGFHVjBhV05GZG1WdWRHQWdkMmwwYUNCa2FYTndZWFJqYUdWa0lHeHBjM1JsYm1WeWN5NGdRM0psWVhScGJtY2dkR2hwY3lCbWRXNWpkR2x2Ymx4dUlDb2dhR1Z5WlN3Z1lXeHNiM2R6SUhWeklIUnZJRzV2ZENCb1lYWmxJSFJ2SUdKcGJtUWdiM0lnWTNKbFlYUmxJR1oxYm1OMGFXOXVjeUJtYjNJZ1pXRmphQ0JsZG1WdWRDNWNiaUFxSUUxMWRHRjBhVzVuSUhSb1pTQmxkbVZ1ZENkeklHMWxiV0psY25NZ1lXeHNiM2R6SUhWeklIUnZJRzV2ZENCb1lYWmxJSFJ2SUdOeVpXRjBaU0JoSUhkeVlYQndhVzVuWEc0Z0tpQmNJbVJwYzNCaGRHTm9YQ0lnYjJKcVpXTjBJSFJvWVhRZ2NHRnBjbk1nZEdobElHVjJaVzUwSUhkcGRHZ2dkR2hsSUd4cGMzUmxibVZ5TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJoWTJOMWJYVnNZWFJsUkdseVpXTjBhVzl1WVd4RWFYTndZWFJqYUdWektHUnZiVWxFTENCMWNIZGhjbVJ6TENCbGRtVnVkQ2tnZTF4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ2FXWWdLQ0ZrYjIxSlJDa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZEVhWE53WVhSamFHbHVaeUJwWkNCdGRYTjBJRzV2ZENCaVpTQnVkV3hzSnlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhaaGNpQndhR0Z6WlNBOUlIVndkMkZ5WkhNZ1B5QlFjbTl3WVdkaGRHbHZibEJvWVhObGN5NWlkV0ppYkdWa0lEb2dVSEp2Y0dGbllYUnBiMjVRYUdGelpYTXVZMkZ3ZEhWeVpXUTdYRzRnSUhaaGNpQnNhWE4wWlc1bGNpQTlJR3hwYzNSbGJtVnlRWFJRYUdGelpTaGtiMjFKUkN3Z1pYWmxiblFzSUhCb1lYTmxLVHRjYmlBZ2FXWWdLR3hwYzNSbGJtVnlLU0I3WEc0Z0lDQWdaWFpsYm5RdVgyUnBjM0JoZEdOb1RHbHpkR1Z1WlhKeklEMWNiaUFnSUNBZ0lHRmpZM1Z0ZFd4aGRHVkpiblJ2S0dWMlpXNTBMbDlrYVhOd1lYUmphRXhwYzNSbGJtVnljeXdnYkdsemRHVnVaWElwTzF4dUlDQWdJR1YyWlc1MExsOWthWE53WVhSamFFbEVjeUE5SUdGalkzVnRkV3hoZEdWSmJuUnZLR1YyWlc1MExsOWthWE53WVhSamFFbEVjeXdnWkc5dFNVUXBPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nUTI5c2JHVmpkQ0JrYVhOd1lYUmphR1Z6SUNodGRYTjBJR0psSUdWdWRHbHlaV3g1SUdOdmJHeGxZM1JsWkNCaVpXWnZjbVVnWkdsemNHRjBZMmhwYm1jZ0xTQnpaV1VnZFc1cGRGeHVJQ29nZEdWemRITXBMaUJNWVhwcGJIa2dZV3hzYjJOaGRHVWdkR2hsSUdGeWNtRjVJSFJ2SUdOdmJuTmxjblpsSUcxbGJXOXllUzRnSUZkbElHMTFjM1FnYkc5dmNDQjBhSEp2ZFdkb1hHNGdLaUJsWVdOb0lHVjJaVzUwSUdGdVpDQndaWEptYjNKdElIUm9aU0IwY21GMlpYSnpZV3dnWm05eUlHVmhZMmdnYjI1bExpQlhaU0JqWVc0Z2JtOTBJSEJsY21admNtMGdZVnh1SUNvZ2MybHVaMnhsSUhSeVlYWmxjbk5oYkNCbWIzSWdkR2hsSUdWdWRHbHlaU0JqYjJ4c1pXTjBhVzl1SUc5bUlHVjJaVzUwY3lCaVpXTmhkWE5sSUdWaFkyZ2daWFpsYm5RZ2JXRjVYRzRnS2lCb1lYWmxJR0VnWkdsbVptVnlaVzUwSUhSaGNtZGxkQzVjYmlBcUwxeHVablZ1WTNScGIyNGdZV05qZFcxMWJHRjBaVlIzYjFCb1lYTmxSR2x6Y0dGMFkyaGxjMU5wYm1kc1pTaGxkbVZ1ZENrZ2UxeHVJQ0JwWmlBb1pYWmxiblFnSmlZZ1pYWmxiblF1WkdsemNHRjBZMmhEYjI1bWFXY3VjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNcElIdGNiaUFnSUNCRmRtVnVkRkJzZFdkcGJraDFZaTVwYm1wbFkzUnBiMjR1WjJWMFNXNXpkR0Z1WTJWSVlXNWtiR1VvS1M1MGNtRjJaWEp6WlZSM2IxQm9ZWE5sS0Z4dUlDQWdJQ0FnWlhabGJuUXVaR2x6Y0dGMFkyaE5ZWEpyWlhJc1hHNGdJQ0FnSUNCaFkyTjFiWFZzWVhSbFJHbHlaV04wYVc5dVlXeEVhWE53WVhSamFHVnpMRnh1SUNBZ0lDQWdaWFpsYm5SY2JpQWdJQ0FwTzF4dUlDQjlYRzU5WEc1Y2JseHVMeW9xWEc0Z0tpQkJZMk4xYlhWc1lYUmxjeUIzYVhSb2IzVjBJSEpsWjJGeVpDQjBieUJrYVhKbFkzUnBiMjRzSUdSdlpYTWdibTkwSUd4dmIyc2dabTl5SUhCb1lYTmxaRnh1SUNvZ2NtVm5hWE4wY21GMGFXOXVJRzVoYldWekxpQlRZVzFsSUdGeklHQmhZMk4xYlhWc1lYUmxSR2x5WldOMFJHbHpjR0YwWTJobGMxTnBibWRzWldBZ1luVjBJSGRwZEdodmRYUmNiaUFxSUhKbGNYVnBjbWx1WnlCMGFHRjBJSFJvWlNCZ1pHbHpjR0YwWTJoTllYSnJaWEpnSUdKbElIUm9aU0J6WVcxbElHRnpJSFJvWlNCa2FYTndZWFJqYUdWa0lFbEVMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmhZMk4xYlhWc1lYUmxSR2x6Y0dGMFkyaGxjeWhwWkN3Z2FXZHViM0psWkVScGNtVmpkR2x2Yml3Z1pYWmxiblFwSUh0Y2JpQWdhV1lnS0dWMlpXNTBJQ1ltSUdWMlpXNTBMbVJwYzNCaGRHTm9RMjl1Wm1sbkxuSmxaMmx6ZEhKaGRHbHZiazVoYldVcElIdGNiaUFnSUNCMllYSWdjbVZuYVhOMGNtRjBhVzl1VG1GdFpTQTlJR1YyWlc1MExtUnBjM0JoZEdOb1EyOXVabWxuTG5KbFoybHpkSEpoZEdsdmJrNWhiV1U3WEc0Z0lDQWdkbUZ5SUd4cGMzUmxibVZ5SUQwZ1oyVjBUR2x6ZEdWdVpYSW9hV1FzSUhKbFoybHpkSEpoZEdsdmJrNWhiV1VwTzF4dUlDQWdJR2xtSUNoc2FYTjBaVzVsY2lrZ2UxeHVJQ0FnSUNBZ1pYWmxiblF1WDJScGMzQmhkR05vVEdsemRHVnVaWEp6SUQxY2JpQWdJQ0FnSUNBZ1lXTmpkVzExYkdGMFpVbHVkRzhvWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpMQ0JzYVhOMFpXNWxjaWs3WEc0Z0lDQWdJQ0JsZG1WdWRDNWZaR2x6Y0dGMFkyaEpSSE1nUFNCaFkyTjFiWFZzWVhSbFNXNTBieWhsZG1WdWRDNWZaR2x6Y0dGMFkyaEpSSE1zSUdsa0tUdGNiaUFnSUNCOVhHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkJZMk4xYlhWc1lYUmxjeUJrYVhOd1lYUmphR1Z6SUc5dUlHRnVJR0JUZVc1MGFHVjBhV05GZG1WdWRHQXNJR0oxZENCdmJteDVJR1p2Y2lCMGFHVmNiaUFxSUdCa2FYTndZWFJqYUUxaGNtdGxjbUF1WEc0Z0tpQkFjR0Z5WVcwZ2UxTjViblJvWlhScFkwVjJaVzUwZlNCbGRtVnVkRnh1SUNvdlhHNW1kVzVqZEdsdmJpQmhZMk4xYlhWc1lYUmxSR2x5WldOMFJHbHpjR0YwWTJobGMxTnBibWRzWlNobGRtVnVkQ2tnZTF4dUlDQnBaaUFvWlhabGJuUWdKaVlnWlhabGJuUXVaR2x6Y0dGMFkyaERiMjVtYVdjdWNtVm5hWE4wY21GMGFXOXVUbUZ0WlNrZ2UxeHVJQ0FnSUdGalkzVnRkV3hoZEdWRWFYTndZWFJqYUdWektHVjJaVzUwTG1ScGMzQmhkR05vVFdGeWEyVnlMQ0J1ZFd4c0xDQmxkbVZ1ZENrN1hHNGdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdZV05qZFcxMWJHRjBaVlIzYjFCb1lYTmxSR2x6Y0dGMFkyaGxjeWhsZG1WdWRITXBJSHRjYmlBZ1ptOXlSV0ZqYUVGalkzVnRkV3hoZEdWa0tHVjJaVzUwY3l3Z1lXTmpkVzExYkdGMFpWUjNiMUJvWVhObFJHbHpjR0YwWTJobGMxTnBibWRzWlNrN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdGalkzVnRkV3hoZEdWRmJuUmxja3hsWVhabFJHbHpjR0YwWTJobGN5aHNaV0YyWlN3Z1pXNTBaWElzSUdaeWIyMUpSQ3dnZEc5SlJDa2dlMXh1SUNCRmRtVnVkRkJzZFdkcGJraDFZaTVwYm1wbFkzUnBiMjR1WjJWMFNXNXpkR0Z1WTJWSVlXNWtiR1VvS1M1MGNtRjJaWEp6WlVWdWRHVnlUR1ZoZG1Vb1hHNGdJQ0FnWm5KdmJVbEVMRnh1SUNBZ0lIUnZTVVFzWEc0Z0lDQWdZV05qZFcxMWJHRjBaVVJwYzNCaGRHTm9aWE1zWEc0Z0lDQWdiR1ZoZG1Vc1hHNGdJQ0FnWlc1MFpYSmNiaUFnS1R0Y2JuMWNibHh1WEc1bWRXNWpkR2x2YmlCaFkyTjFiWFZzWVhSbFJHbHlaV04wUkdsemNHRjBZMmhsY3lobGRtVnVkSE1wSUh0Y2JpQWdabTl5UldGamFFRmpZM1Z0ZFd4aGRHVmtLR1YyWlc1MGN5d2dZV05qZFcxMWJHRjBaVVJwY21WamRFUnBjM0JoZEdOb1pYTlRhVzVuYkdVcE8xeHVmVnh1WEc1Y2JseHVMeW9xWEc0Z0tpQkJJSE50WVd4c0lITmxkQ0J2WmlCd2NtOXdZV2RoZEdsdmJpQndZWFIwWlhKdWN5d2daV0ZqYUNCdlppQjNhR2xqYUNCM2FXeHNJR0ZqWTJWd2RDQmhJSE50WVd4c0lHRnRiM1Z1ZEZ4dUlDb2diMllnYVc1bWIzSnRZWFJwYjI0c0lHRnVaQ0JuWlc1bGNtRjBaU0JoSUhObGRDQnZaaUJjSW1ScGMzQmhkR05vSUhKbFlXUjVJR1YyWlc1MElHOWlhbVZqZEhOY0lpQXRJSGRvYVdOb1hHNGdLaUJoY21VZ2MyVjBjeUJ2WmlCbGRtVnVkSE1nZEdoaGRDQm9ZWFpsSUdGc2NtVmhaSGtnWW1WbGJpQmhibTV2ZEdGMFpXUWdkMmwwYUNCaElITmxkQ0J2WmlCa2FYTndZWFJqYUdWa1hHNGdLaUJzYVhOMFpXNWxjaUJtZFc1amRHbHZibk12YVdSekxpQlVhR1VnUVZCSklHbHpJR1JsYzJsbmJtVmtJSFJvYVhNZ2QyRjVJSFJ2SUdScGMyTnZkWEpoWjJVZ2RHaGxjMlZjYmlBcUlIQnliM0JoWjJGMGFXOXVJSE4wY21GMFpXZHBaWE1nWm5KdmJTQmhZM1IxWVd4c2VTQmxlR1ZqZFhScGJtY2dkR2hsSUdScGMzQmhkR05vWlhNc0lITnBibU5sSUhkbFhHNGdLaUJoYkhkaGVYTWdkMkZ1ZENCMGJ5QmpiMnhzWldOMElIUm9aU0JsYm5ScGNtVWdjMlYwSUc5bUlHUnBjM0JoZEdOb1pYTWdZbVZtYjNKbElHVjRaV04xZEdsdVp5QmxkbVZ1ZENCaFhHNGdLaUJ6YVc1bmJHVWdiMjVsTGx4dUlDcGNiaUFxSUVCamIyNXpkSEoxWTNSdmNpQkZkbVZ1ZEZCeWIzQmhaMkYwYjNKelhHNGdLaTljYm5aaGNpQkZkbVZ1ZEZCeWIzQmhaMkYwYjNKeklEMGdlMXh1SUNCaFkyTjFiWFZzWVhSbFZIZHZVR2hoYzJWRWFYTndZWFJqYUdWek9pQmhZMk4xYlhWc1lYUmxWSGR2VUdoaGMyVkVhWE53WVhSamFHVnpMRnh1SUNCaFkyTjFiWFZzWVhSbFJHbHlaV04wUkdsemNHRjBZMmhsY3pvZ1lXTmpkVzExYkdGMFpVUnBjbVZqZEVScGMzQmhkR05vWlhNc1hHNGdJR0ZqWTNWdGRXeGhkR1ZGYm5SbGNreGxZWFpsUkdsemNHRjBZMmhsY3pvZ1lXTmpkVzExYkdGMFpVVnVkR1Z5VEdWaGRtVkVhWE53WVhSamFHVnpYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlFVjJaVzUwVUhKdmNHRm5ZWFJ2Y25NN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV4ZWN1dGlvbkVudmlyb25tZW50XG4gKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGNhblVzZURPTSA9ICEhKFxuICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KVxuKTtcblxuLyoqXG4gKiBTaW1wbGUsIGxpZ2h0d2VpZ2h0IG1vZHVsZSBhc3Npc3Rpbmcgd2l0aCB0aGUgZGV0ZWN0aW9uIGFuZCBjb250ZXh0IG9mXG4gKiBXb3JrZXIuIEhlbHBzIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgYWxsb3dzIGNvZGUgdG8gcmVhc29uIGFib3V0XG4gKiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBpbiBhIFdvcmtlciwgZXZlbiBpZiB0aGV5IG5ldmVyIGluY2x1ZGUgdGhlIG1haW5cbiAqIGBSZWFjdFdvcmtlcmAgZGVwZW5kZW5jeS5cbiAqL1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0ge1xuXG4gIGNhblVzZURPTTogY2FuVXNlRE9NLFxuXG4gIGNhblVzZVdvcmtlcnM6IHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQnLFxuXG4gIGNhblVzZUV2ZW50TGlzdGVuZXJzOlxuICAgIGNhblVzZURPTSAmJiAhISh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCB3aW5kb3cuYXR0YWNoRXZlbnQpLFxuXG4gIGNhblVzZVZpZXdwb3J0OiBjYW5Vc2VET00gJiYgISF3aW5kb3cuc2NyZWVuLFxuXG4gIGlzSW5Xb3JrZXI6ICFjYW5Vc2VET00gLy8gRm9yIG5vdywgdGhpcyBpcyB0cnVlIC0gbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXhlY3V0aW9uRW52aXJvbm1lbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGdldFRleHRDb250ZW50QWNjZXNzb3IgPSByZXF1aXJlKFwiLi9nZXRUZXh0Q29udGVudEFjY2Vzc29yXCIpO1xuXG4vKipcbiAqIFRoaXMgaGVscGVyIGNsYXNzIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxhY2VtZW50LlxuICpcbiAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHJvb3RcbiAqL1xuZnVuY3Rpb24gRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlKHJvb3QpIHtcbiAgdGhpcy5fcm9vdCA9IHJvb3Q7XG4gIHRoaXMuX3N0YXJ0VGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xuICB0aGlzLl9mYWxsYmFja1RleHQgPSBudWxsO1xufVxuXG5hc3NpZ24oRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlLnByb3RvdHlwZSwge1xuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdGV4dCBvZiBpbnB1dC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0VGV4dDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCd2YWx1ZScgaW4gdGhpcy5fcm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yb290W2dldFRleHRDb250ZW50QWNjZXNzb3IoKV07XG4gIH0sXG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZGlmZmVyaW5nIHN1YnN0cmluZyBiZXR3ZWVuIHRoZSBpbml0aWFsbHkgc3RvcmVkXG4gICAqIHRleHQgY29udGVudCBhbmQgdGhlIGN1cnJlbnQgY29udGVudC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0RGF0YTogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2ZhbGxiYWNrVGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZhbGxiYWNrVGV4dDtcbiAgICB9XG5cbiAgICB2YXIgc3RhcnQ7XG4gICAgdmFyIHN0YXJ0VmFsdWUgPSB0aGlzLl9zdGFydFRleHQ7XG4gICAgdmFyIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGg7XG4gICAgdmFyIGVuZDtcbiAgICB2YXIgZW5kVmFsdWUgPSB0aGlzLmdldFRleHQoKTtcbiAgICB2YXIgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuXG4gICAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgc3RhcnRMZW5ndGg7IHN0YXJ0KyspIHtcbiAgICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0XSAhPT0gZW5kVmFsdWVbc3RhcnRdKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuICAgIGZvciAoZW5kID0gMTsgZW5kIDw9IG1pbkVuZDsgZW5kKyspIHtcbiAgICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0TGVuZ3RoIC0gZW5kXSAhPT0gZW5kVmFsdWVbZW5kTGVuZ3RoIC0gZW5kXSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2xpY2VUYWlsID0gZW5kID4gMSA/IDEgLSBlbmQgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZmFsbGJhY2tUZXh0ID0gZW5kVmFsdWUuc2xpY2Uoc3RhcnQsIHNsaWNlVGFpbCk7XG4gICAgcmV0dXJuIHRoaXMuX2ZhbGxiYWNrVGV4dDtcbiAgfVxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBIVE1MRE9NUHJvcGVydHlDb25maWdcbiAqL1xuXG4vKmpzbGludCBiaXR3aXNlOiB0cnVlKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgTVVTVF9VU0VfQVRUUklCVVRFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLk1VU1RfVVNFX0FUVFJJQlVURTtcbnZhciBNVVNUX1VTRV9QUk9QRVJUWSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWTtcbnZhciBIQVNfQk9PTEVBTl9WQUxVRSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfQk9PTEVBTl9WQUxVRTtcbnZhciBIQVNfU0lERV9FRkZFQ1RTID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19TSURFX0VGRkVDVFM7XG52YXIgSEFTX05VTUVSSUNfVkFMVUUgPSBET01Qcm9wZXJ0eS5pbmplY3Rpb24uSEFTX05VTUVSSUNfVkFMVUU7XG52YXIgSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUgPVxuICBET01Qcm9wZXJ0eS5pbmplY3Rpb24uSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUU7XG52YXIgSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSA9XG4gIERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfT1ZFUkxPQURFRF9CT09MRUFOX1ZBTFVFO1xuXG52YXIgaGFzU1ZHO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICB2YXIgaW1wbGVtZW50YXRpb24gPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbjtcbiAgaGFzU1ZHID0gKFxuICAgIGltcGxlbWVudGF0aW9uICYmXG4gICAgaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJlxuICAgIGltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoXG4gICAgICAnaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNCYXNpY1N0cnVjdHVyZScsXG4gICAgICAnMS4xJ1xuICAgIClcbiAgKTtcbn1cblxuXG52YXIgSFRNTERPTVByb3BlcnR5Q29uZmlnID0ge1xuICBpc0N1c3RvbUF0dHJpYnV0ZTogUmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQoXG4gICAgL14oZGF0YXxhcmlhKS1bYS16X11bYS16XFxkXy5cXC1dKiQvXG4gICksXG4gIFByb3BlcnRpZXM6IHtcbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBQcm9wZXJ0aWVzXG4gICAgICovXG4gICAgYWNjZXB0OiBudWxsLFxuICAgIGFjY2VwdENoYXJzZXQ6IG51bGwsXG4gICAgYWNjZXNzS2V5OiBudWxsLFxuICAgIGFjdGlvbjogbnVsbCxcbiAgICBhbGxvd0Z1bGxTY3JlZW46IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGFsbG93VHJhbnNwYXJlbmN5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgYWx0OiBudWxsLFxuICAgIGFzeW5jOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBhdXRvQ29tcGxldGU6IG51bGwsXG4gICAgLy8gYXV0b0ZvY3VzIGlzIHBvbHlmaWxsZWQvbm9ybWFsaXplZCBieSBBdXRvRm9jdXNNaXhpblxuICAgIC8vIGF1dG9Gb2N1czogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgYXV0b1BsYXk6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNlbGxQYWRkaW5nOiBudWxsLFxuICAgIGNlbGxTcGFjaW5nOiBudWxsLFxuICAgIGNoYXJTZXQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBjaGVja2VkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNsYXNzSUQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICAvLyBUbyBzZXQgY2xhc3NOYW1lIG9uIFNWRyBlbGVtZW50cywgaXQncyBuZWNlc3NhcnkgdG8gdXNlIC5zZXRBdHRyaWJ1dGU7XG4gICAgLy8gdGhpcyB3b3JrcyBvbiBIVE1MIGVsZW1lbnRzIHRvbyBpbiBhbGwgYnJvd3NlcnMgZXhjZXB0IElFOC4gQ29udmVuaWVudGx5LFxuICAgIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgU1ZHIGFuZCBzbyB3ZSBjYW4gc2ltcGx5IHVzZSB0aGUgYXR0cmlidXRlIGluXG4gICAgLy8gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IFNWRyBhbmQgdGhlIHByb3BlcnR5IGluIGJyb3dzZXJzIHRoYXQgZG9uJ3QsXG4gICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIEhUTUwgb3IgU1ZHLlxuICAgIGNsYXNzTmFtZTogaGFzU1ZHID8gTVVTVF9VU0VfQVRUUklCVVRFIDogTVVTVF9VU0VfUFJPUEVSVFksXG4gICAgY29sczogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgY29sU3BhbjogbnVsbCxcbiAgICBjb250ZW50OiBudWxsLFxuICAgIGNvbnRlbnRFZGl0YWJsZTogbnVsbCxcbiAgICBjb250ZXh0TWVudTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGNvbnRyb2xzOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNvb3JkczogbnVsbCxcbiAgICBjcm9zc09yaWdpbjogbnVsbCxcbiAgICBkYXRhOiBudWxsLCAvLyBGb3IgYDxvYmplY3QgLz5gIGFjdHMgYXMgYHNyY2AuXG4gICAgZGF0ZVRpbWU6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBkZWZlcjogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZGlyOiBudWxsLFxuICAgIGRpc2FibGVkOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBkb3dubG9hZDogSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSxcbiAgICBkcmFnZ2FibGU6IG51bGwsXG4gICAgZW5jVHlwZTogbnVsbCxcbiAgICBmb3JtOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZm9ybUFjdGlvbjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZvcm1FbmNUeXBlOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZm9ybU1ldGhvZDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZvcm1Ob1ZhbGlkYXRlOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBmb3JtVGFyZ2V0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZnJhbWVCb3JkZXI6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBoZWFkZXJzOiBudWxsLFxuICAgIGhlaWdodDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGhpZGRlbjogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgaGlnaDogbnVsbCxcbiAgICBocmVmOiBudWxsLFxuICAgIGhyZWZMYW5nOiBudWxsLFxuICAgIGh0bWxGb3I6IG51bGwsXG4gICAgaHR0cEVxdWl2OiBudWxsLFxuICAgIGljb246IG51bGwsXG4gICAgaWQ6IE1VU1RfVVNFX1BST1BFUlRZLFxuICAgIGxhYmVsOiBudWxsLFxuICAgIGxhbmc6IG51bGwsXG4gICAgbGlzdDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGxvb3A6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgbG93OiBudWxsLFxuICAgIG1hbmlmZXN0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWFyZ2luSGVpZ2h0OiBudWxsLFxuICAgIG1hcmdpbldpZHRoOiBudWxsLFxuICAgIG1heDogbnVsbCxcbiAgICBtYXhMZW5ndGg6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBtZWRpYTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIG1lZGlhR3JvdXA6IG51bGwsXG4gICAgbWV0aG9kOiBudWxsLFxuICAgIG1pbjogbnVsbCxcbiAgICBtdWx0aXBsZTogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBtdXRlZDogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBuYW1lOiBudWxsLFxuICAgIG5vVmFsaWRhdGU6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG9wZW46IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG9wdGltdW06IG51bGwsXG4gICAgcGF0dGVybjogbnVsbCxcbiAgICBwbGFjZWhvbGRlcjogbnVsbCxcbiAgICBwb3N0ZXI6IG51bGwsXG4gICAgcHJlbG9hZDogbnVsbCxcbiAgICByYWRpb0dyb3VwOiBudWxsLFxuICAgIHJlYWRPbmx5OiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHJlbDogbnVsbCxcbiAgICByZXF1aXJlZDogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgcm9sZTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHJvd3M6IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAgIHJvd1NwYW46IG51bGwsXG4gICAgc2FuZGJveDogbnVsbCxcbiAgICBzY29wZTogbnVsbCxcbiAgICBzY29wZWQ6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHNjcm9sbGluZzogbnVsbCxcbiAgICBzZWFtbGVzczogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgc2VsZWN0ZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgc2hhcGU6IG51bGwsXG4gICAgc2l6ZTogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgc2l6ZXM6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzcGFuOiBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgICBzcGVsbENoZWNrOiBudWxsLFxuICAgIHNyYzogbnVsbCxcbiAgICBzcmNEb2M6IE1VU1RfVVNFX1BST1BFUlRZLFxuICAgIHNyY1NldDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0YXJ0OiBIQVNfTlVNRVJJQ19WQUxVRSxcbiAgICBzdGVwOiBudWxsLFxuICAgIHN0eWxlOiBudWxsLFxuICAgIHRhYkluZGV4OiBudWxsLFxuICAgIHRhcmdldDogbnVsbCxcbiAgICB0aXRsZTogbnVsbCxcbiAgICB0eXBlOiBudWxsLFxuICAgIHVzZU1hcDogbnVsbCxcbiAgICB2YWx1ZTogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfU0lERV9FRkZFQ1RTLFxuICAgIHdpZHRoOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgd21vZGU6IE1VU1RfVVNFX0FUVFJJQlVURSxcblxuICAgIC8qKlxuICAgICAqIE5vbi1zdGFuZGFyZCBQcm9wZXJ0aWVzXG4gICAgICovXG4gICAgLy8gYXV0b0NhcGl0YWxpemUgYW5kIGF1dG9Db3JyZWN0IGFyZSBzdXBwb3J0ZWQgaW4gTW9iaWxlIFNhZmFyaSBmb3JcbiAgICAvLyBrZXlib2FyZCBoaW50cy5cbiAgICBhdXRvQ2FwaXRhbGl6ZTogbnVsbCxcbiAgICBhdXRvQ29ycmVjdDogbnVsbCxcbiAgICAvLyBpdGVtUHJvcCwgaXRlbVNjb3BlLCBpdGVtVHlwZSBhcmUgZm9yXG4gICAgLy8gTWljcm9kYXRhIHN1cHBvcnQuIFNlZSBodHRwOi8vc2NoZW1hLm9yZy9kb2NzL2dzLmh0bWxcbiAgICBpdGVtUHJvcDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGl0ZW1TY29wZTogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgaXRlbVR5cGU6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICAvLyBpdGVtSUQgYW5kIGl0ZW1SZWYgYXJlIGZvciBNaWNyb2RhdGEgc3VwcG9ydCBhcyB3ZWxsIGJ1dFxuICAgIC8vIG9ubHkgc3BlY2lmaWVkIGluIHRoZSB0aGUgV0hBVFdHIHNwZWMgZG9jdW1lbnQuIFNlZVxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL21pY3JvZGF0YS5odG1sI21pY3JvZGF0YS1kb20tYXBpXG4gICAgaXRlbUlEOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgaXRlbVJlZjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIC8vIHByb3BlcnR5IGlzIHN1cHBvcnRlZCBmb3IgT3BlbkdyYXBoIGluIG1ldGEgdGFncy5cbiAgICBwcm9wZXJ0eTogbnVsbCxcbiAgICAvLyBJRS1vbmx5IGF0dHJpYnV0ZSB0aGF0IGNvbnRyb2xzIGZvY3VzIGJlaGF2aW9yXG4gICAgdW5zZWxlY3RhYmxlOiBNVVNUX1VTRV9BVFRSSUJVVEVcbiAgfSxcbiAgRE9NQXR0cmlidXRlTmFtZXM6IHtcbiAgICBhY2NlcHRDaGFyc2V0OiAnYWNjZXB0LWNoYXJzZXQnLFxuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBodG1sRm9yOiAnZm9yJyxcbiAgICBodHRwRXF1aXY6ICdodHRwLWVxdWl2J1xuICB9LFxuICBET01Qcm9wZXJ0eU5hbWVzOiB7XG4gICAgYXV0b0NhcGl0YWxpemU6ICdhdXRvY2FwaXRhbGl6ZScsXG4gICAgYXV0b0NvbXBsZXRlOiAnYXV0b2NvbXBsZXRlJyxcbiAgICBhdXRvQ29ycmVjdDogJ2F1dG9jb3JyZWN0JyxcbiAgICBhdXRvRm9jdXM6ICdhdXRvZm9jdXMnLFxuICAgIGF1dG9QbGF5OiAnYXV0b3BsYXknLFxuICAgIC8vIGBlbmNvZGluZ2AgaXMgZXF1aXZhbGVudCB0byBgZW5jdHlwZWAsIElFOCBsYWNrcyBhbiBgZW5jdHlwZWAgc2V0dGVyLlxuICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Zvcm1zLmh0bWwjZG9tLWZzLWVuY29kaW5nXG4gICAgZW5jVHlwZTogJ2VuY29kaW5nJyxcbiAgICBocmVmTGFuZzogJ2hyZWZsYW5nJyxcbiAgICByYWRpb0dyb3VwOiAncmFkaW9ncm91cCcsXG4gICAgc3BlbGxDaGVjazogJ3NwZWxsY2hlY2snLFxuICAgIHNyY0RvYzogJ3NyY2RvYycsXG4gICAgc3JjU2V0OiAnc3Jjc2V0J1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhUTUxET01Qcm9wZXJ0eUNvbmZpZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBMaW5rZWRTdGF0ZU1peGluXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0TGluayA9IHJlcXVpcmUoXCIuL1JlYWN0TGlua1wiKTtcbnZhciBSZWFjdFN0YXRlU2V0dGVycyA9IHJlcXVpcmUoXCIuL1JlYWN0U3RhdGVTZXR0ZXJzXCIpO1xuXG4vKipcbiAqIEEgc2ltcGxlIG1peGluIGFyb3VuZCBSZWFjdExpbmsuZm9yU3RhdGUoKS5cbiAqL1xudmFyIExpbmtlZFN0YXRlTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBSZWFjdExpbmsgdGhhdCdzIGxpbmtlZCB0byBwYXJ0IG9mIHRoaXMgY29tcG9uZW50J3Mgc3RhdGUuIFRoZVxuICAgKiBSZWFjdExpbmsgd2lsbCBoYXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoaXMuc3RhdGVba2V5XSBhbmQgd2lsbCBjYWxsXG4gICAqIHNldFN0YXRlKCkgd2hlbiBhIGNoYW5nZSBpcyByZXF1ZXN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgc3RhdGUga2V5IHRvIHVwZGF0ZS4gTm90ZTogeW91IG1heSB3YW50IHRvIHVzZSBrZXlPZigpXG4gICAqIGlmIHlvdSdyZSB1c2luZyBHb29nbGUgQ2xvc3VyZSBDb21waWxlciBhZHZhbmNlZCBtb2RlLlxuICAgKiBAcmV0dXJuIHtSZWFjdExpbmt9IFJlYWN0TGluayBpbnN0YW5jZSBsaW5raW5nIHRvIHRoZSBzdGF0ZS5cbiAgICovXG4gIGxpbmtTdGF0ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG5ldyBSZWFjdExpbmsoXG4gICAgICB0aGlzLnN0YXRlW2tleV0sXG4gICAgICBSZWFjdFN0YXRlU2V0dGVycy5jcmVhdGVTdGF0ZUtleVNldHRlcih0aGlzLCBrZXkpXG4gICAgKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaW5rZWRTdGF0ZU1peGluO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBMaW5rZWRWYWx1ZVV0aWxzXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZXNcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICAnYnV0dG9uJzogdHJ1ZSxcbiAgJ2NoZWNrYm94JzogdHJ1ZSxcbiAgJ2ltYWdlJzogdHJ1ZSxcbiAgJ2hpZGRlbic6IHRydWUsXG4gICdyYWRpbyc6IHRydWUsXG4gICdyZXNldCc6IHRydWUsXG4gICdzdWJtaXQnOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBfYXNzZXJ0U2luZ2xlTGluayhpbnB1dCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlucHV0LnByb3BzLmNoZWNrZWRMaW5rID09IG51bGwgfHwgaW5wdXQucHJvcHMudmFsdWVMaW5rID09IG51bGwsXG4gICAgJ0Nhbm5vdCBwcm92aWRlIGEgY2hlY2tlZExpbmsgYW5kIGEgdmFsdWVMaW5rLiBJZiB5b3Ugd2FudCB0byB1c2UgJyArXG4gICAgJ2NoZWNrZWRMaW5rLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSB2YWx1ZUxpbmsgYW5kIHZpY2UgdmVyc2EuJ1xuICApIDogaW52YXJpYW50KGlucHV0LnByb3BzLmNoZWNrZWRMaW5rID09IG51bGwgfHwgaW5wdXQucHJvcHMudmFsdWVMaW5rID09IG51bGwpKTtcbn1cbmZ1bmN0aW9uIF9hc3NlcnRWYWx1ZUxpbmsoaW5wdXQpIHtcbiAgX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXQpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlucHV0LnByb3BzLnZhbHVlID09IG51bGwgJiYgaW5wdXQucHJvcHMub25DaGFuZ2UgPT0gbnVsbCxcbiAgICAnQ2Fubm90IHByb3ZpZGUgYSB2YWx1ZUxpbmsgYW5kIGEgdmFsdWUgb3Igb25DaGFuZ2UgZXZlbnQuIElmIHlvdSB3YW50ICcgK1xuICAgICd0byB1c2UgdmFsdWUgb3Igb25DaGFuZ2UsIHlvdSBwcm9iYWJseSBkb25cXCd0IHdhbnQgdG8gdXNlIHZhbHVlTGluay4nXG4gICkgOiBpbnZhcmlhbnQoaW5wdXQucHJvcHMudmFsdWUgPT0gbnVsbCAmJiBpbnB1dC5wcm9wcy5vbkNoYW5nZSA9PSBudWxsKSk7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRDaGVja2VkTGluayhpbnB1dCkge1xuICBfYXNzZXJ0U2luZ2xlTGluayhpbnB1dCk7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgaW5wdXQucHJvcHMuY2hlY2tlZCA9PSBudWxsICYmIGlucHV0LnByb3BzLm9uQ2hhbmdlID09IG51bGwsXG4gICAgJ0Nhbm5vdCBwcm92aWRlIGEgY2hlY2tlZExpbmsgYW5kIGEgY2hlY2tlZCBwcm9wZXJ0eSBvciBvbkNoYW5nZSBldmVudC4gJyArXG4gICAgJ0lmIHlvdSB3YW50IHRvIHVzZSBjaGVja2VkIG9yIG9uQ2hhbmdlLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvICcgK1xuICAgICd1c2UgY2hlY2tlZExpbmsnXG4gICkgOiBpbnZhcmlhbnQoaW5wdXQucHJvcHMuY2hlY2tlZCA9PSBudWxsICYmIGlucHV0LnByb3BzLm9uQ2hhbmdlID09IG51bGwpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBlIGNoYW5nZSBldmVudCB0byBoYW5kbGVcbiAqL1xuZnVuY3Rpb24gX2hhbmRsZUxpbmtlZFZhbHVlQ2hhbmdlKGUpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdGhpcy5wcm9wcy52YWx1ZUxpbmsucmVxdWVzdENoYW5nZShlLnRhcmdldC52YWx1ZSk7XG59XG5cbi8qKlxuICAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGUgY2hhbmdlIGV2ZW50IHRvIGhhbmRsZVxuICAqL1xuZnVuY3Rpb24gX2hhbmRsZUxpbmtlZENoZWNrQ2hhbmdlKGUpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdGhpcy5wcm9wcy5jaGVja2VkTGluay5yZXF1ZXN0Q2hhbmdlKGUudGFyZ2V0LmNoZWNrZWQpO1xufVxuXG4vKipcbiAqIFByb3ZpZGUgYSBsaW5rZWQgYHZhbHVlYCBhdHRyaWJ1dGUgZm9yIGNvbnRyb2xsZWQgZm9ybXMuIFlvdSBzaG91bGQgbm90IHVzZVxuICogdGhpcyBvdXRzaWRlIG9mIHRoZSBSZWFjdERPTSBjb250cm9sbGVkIGZvcm0gY29tcG9uZW50cy5cbiAqL1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSB7XG4gIE1peGluOiB7XG4gICAgcHJvcFR5cGVzOiB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGlmICghcHJvcHNbcHJvcE5hbWVdIHx8XG4gICAgICAgICAgICBoYXNSZWFkT25seVZhbHVlW3Byb3BzLnR5cGVdIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkNoYW5nZSB8fFxuICAgICAgICAgICAgcHJvcHMucmVhZE9ubHkgfHxcbiAgICAgICAgICAgIHByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgICAnWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgK1xuICAgICAgICAgICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgK1xuICAgICAgICAgICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsICcgK1xuICAgICAgICAgICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgY2hlY2tlZDogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGlmICghcHJvcHNbcHJvcE5hbWVdIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkNoYW5nZSB8fFxuICAgICAgICAgICAgcHJvcHMucmVhZE9ubHkgfHxcbiAgICAgICAgICAgIHByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgICAnWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArXG4gICAgICAgICAgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArXG4gICAgICAgICAgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCAnICtcbiAgICAgICAgICAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJ1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9uQ2hhbmdlOiBSZWFjdFByb3BUeXBlcy5mdW5jXG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnB1dCBGb3JtIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHsqfSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpbnB1dCBlaXRoZXIgZnJvbSB2YWx1ZSBwcm9wIG9yIGxpbmsuXG4gICAqL1xuICBnZXRWYWx1ZTogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQucHJvcHMudmFsdWVMaW5rKSB7XG4gICAgICBfYXNzZXJ0VmFsdWVMaW5rKGlucHV0KTtcbiAgICAgIHJldHVybiBpbnB1dC5wcm9wcy52YWx1ZUxpbmsudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5wcm9wcy52YWx1ZTtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW5wdXQgRm9ybSBjb21wb25lbnRcbiAgICogQHJldHVybiB7Kn0gY3VycmVudCBjaGVja2VkIHN0YXR1cyBvZiB0aGUgaW5wdXQgZWl0aGVyIGZyb20gY2hlY2tlZCBwcm9wXG4gICAqICAgICAgICAgICAgIG9yIGxpbmsuXG4gICAqL1xuICBnZXRDaGVja2VkOiBmdW5jdGlvbihpbnB1dCkge1xuICAgIGlmIChpbnB1dC5wcm9wcy5jaGVja2VkTGluaykge1xuICAgICAgX2Fzc2VydENoZWNrZWRMaW5rKGlucHV0KTtcbiAgICAgIHJldHVybiBpbnB1dC5wcm9wcy5jaGVja2VkTGluay52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0LnByb3BzLmNoZWNrZWQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGlucHV0IEZvcm0gY29tcG9uZW50XG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBjaGFuZ2UgY2FsbGJhY2sgZWl0aGVyIGZyb20gb25DaGFuZ2UgcHJvcCBvciBsaW5rLlxuICAgKi9cbiAgZ2V0T25DaGFuZ2U6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnByb3BzLnZhbHVlTGluaykge1xuICAgICAgX2Fzc2VydFZhbHVlTGluayhpbnB1dCk7XG4gICAgICByZXR1cm4gX2hhbmRsZUxpbmtlZFZhbHVlQ2hhbmdlO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQucHJvcHMuY2hlY2tlZExpbmspIHtcbiAgICAgIF9hc3NlcnRDaGVja2VkTGluayhpbnB1dCk7XG4gICAgICByZXR1cm4gX2hhbmRsZUxpbmtlZENoZWNrQ2hhbmdlO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQucHJvcHMub25DaGFuZ2U7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTGlua2VkVmFsdWVVdGlscztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlRHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzYzF4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEZCeWIzQlVlWEJsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVISnZjRlI1Y0dWelhDSXBPMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc1MllYSWdhR0Z6VW1WaFpFOXViSGxXWVd4MVpTQTlJSHRjYmlBZ0oySjFkSFJ2YmljNklIUnlkV1VzWEc0Z0lDZGphR1ZqYTJKdmVDYzZJSFJ5ZFdVc1hHNGdJQ2RwYldGblpTYzZJSFJ5ZFdVc1hHNGdJQ2RvYVdSa1pXNG5PaUIwY25WbExGeHVJQ0FuY21Ga2FXOG5PaUIwY25WbExGeHVJQ0FuY21WelpYUW5PaUIwY25WbExGeHVJQ0FuYzNWaWJXbDBKem9nZEhKMVpWeHVmVHRjYmx4dVpuVnVZM1JwYjI0Z1gyRnpjMlZ5ZEZOcGJtZHNaVXhwYm1zb2FXNXdkWFFwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCcGJuQjFkQzV3Y205d2N5NWphR1ZqYTJWa1RHbHVheUE5UFNCdWRXeHNJSHg4SUdsdWNIVjBMbkJ5YjNCekxuWmhiSFZsVEdsdWF5QTlQU0J1ZFd4c0xGeHVJQ0FnSUNkRFlXNXViM1FnY0hKdmRtbGtaU0JoSUdOb1pXTnJaV1JNYVc1cklHRnVaQ0JoSUhaaGJIVmxUR2x1YXk0Z1NXWWdlVzkxSUhkaGJuUWdkRzhnZFhObElDY2dLMXh1SUNBZ0lDZGphR1ZqYTJWa1RHbHVheXdnZVc5MUlIQnliMkpoWW14NUlHUnZibHhjSjNRZ2QyRnVkQ0IwYnlCMWMyVWdkbUZzZFdWTWFXNXJJR0Z1WkNCMmFXTmxJSFpsY25OaExpZGNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaHBibkIxZEM1d2NtOXdjeTVqYUdWamEyVmtUR2x1YXlBOVBTQnVkV3hzSUh4OElHbHVjSFYwTG5CeWIzQnpMblpoYkhWbFRHbHVheUE5UFNCdWRXeHNLU2s3WEc1OVhHNW1kVzVqZEdsdmJpQmZZWE56WlhKMFZtRnNkV1ZNYVc1cktHbHVjSFYwS1NCN1hHNGdJRjloYzNObGNuUlRhVzVuYkdWTWFXNXJLR2x1Y0hWMEtUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQnBibkIxZEM1d2NtOXdjeTUyWVd4MVpTQTlQU0J1ZFd4c0lDWW1JR2x1Y0hWMExuQnliM0J6TG05dVEyaGhibWRsSUQwOUlHNTFiR3dzWEc0Z0lDQWdKME5oYm01dmRDQndjbTkyYVdSbElHRWdkbUZzZFdWTWFXNXJJR0Z1WkNCaElIWmhiSFZsSUc5eUlHOXVRMmhoYm1kbElHVjJaVzUwTGlCSlppQjViM1VnZDJGdWRDQW5JQ3RjYmlBZ0lDQW5kRzhnZFhObElIWmhiSFZsSUc5eUlHOXVRMmhoYm1kbExDQjViM1VnY0hKdlltRmliSGtnWkc5dVhGd25kQ0IzWVc1MElIUnZJSFZ6WlNCMllXeDFaVXhwYm1zdUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHbHVjSFYwTG5CeWIzQnpMblpoYkhWbElEMDlJRzUxYkd3Z0ppWWdhVzV3ZFhRdWNISnZjSE11YjI1RGFHRnVaMlVnUFQwZ2JuVnNiQ2twTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJmWVhOelpYSjBRMmhsWTJ0bFpFeHBibXNvYVc1d2RYUXBJSHRjYmlBZ1gyRnpjMlZ5ZEZOcGJtZHNaVXhwYm1zb2FXNXdkWFFwTzF4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUdsdWNIVjBMbkJ5YjNCekxtTm9aV05yWldRZ1BUMGdiblZzYkNBbUppQnBibkIxZEM1d2NtOXdjeTV2YmtOb1lXNW5aU0E5UFNCdWRXeHNMRnh1SUNBZ0lDZERZVzV1YjNRZ2NISnZkbWxrWlNCaElHTm9aV05yWldSTWFXNXJJR0Z1WkNCaElHTm9aV05yWldRZ2NISnZjR1Z5ZEhrZ2IzSWdiMjVEYUdGdVoyVWdaWFpsYm5RdUlDY2dLMXh1SUNBZ0lDZEpaaUI1YjNVZ2QyRnVkQ0IwYnlCMWMyVWdZMmhsWTJ0bFpDQnZjaUJ2YmtOb1lXNW5aU3dnZVc5MUlIQnliMkpoWW14NUlHUnZibHhjSjNRZ2QyRnVkQ0IwYnlBbklDdGNiaUFnSUNBbmRYTmxJR05vWldOclpXUk1hVzVySjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0dsdWNIVjBMbkJ5YjNCekxtTm9aV05yWldRZ1BUMGdiblZzYkNBbUppQnBibkIxZEM1d2NtOXdjeTV2YmtOb1lXNW5aU0E5UFNCdWRXeHNLU2s3WEc1OVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdFRlVzUwYUdWMGFXTkZkbVZ1ZEgwZ1pTQmphR0Z1WjJVZ1pYWmxiblFnZEc4Z2FHRnVaR3hsWEc0Z0tpOWNibVoxYm1OMGFXOXVJRjlvWVc1a2JHVk1hVzVyWldSV1lXeDFaVU5vWVc1blpTaGxLU0I3WEc0Z0lDOHFhbk5vYVc1MElIWmhiR2xrZEdocGN6cDBjblZsSUNvdlhHNGdJSFJvYVhNdWNISnZjSE11ZG1Gc2RXVk1hVzVyTG5KbGNYVmxjM1JEYUdGdVoyVW9aUzUwWVhKblpYUXVkbUZzZFdVcE8xeHVmVnh1WEc0dktpcGNiaUFnS2lCQWNHRnlZVzBnZTFONWJuUm9aWFJwWTBWMlpXNTBmU0JsSUdOb1lXNW5aU0JsZG1WdWRDQjBieUJvWVc1a2JHVmNiaUFnS2k5Y2JtWjFibU4wYVc5dUlGOW9ZVzVrYkdWTWFXNXJaV1JEYUdWamEwTm9ZVzVuWlNobEtTQjdYRzRnSUM4cWFuTm9hVzUwSUhaaGJHbGtkR2hwY3pwMGNuVmxJQ292WEc0Z0lIUm9hWE11Y0hKdmNITXVZMmhsWTJ0bFpFeHBibXN1Y21WeGRXVnpkRU5vWVc1blpTaGxMblJoY21kbGRDNWphR1ZqYTJWa0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCUWNtOTJhV1JsSUdFZ2JHbHVhMlZrSUdCMllXeDFaV0FnWVhSMGNtbGlkWFJsSUdadmNpQmpiMjUwY205c2JHVmtJR1p2Y20xekxpQlpiM1VnYzJodmRXeGtJRzV2ZENCMWMyVmNiaUFxSUhSb2FYTWdiM1YwYzJsa1pTQnZaaUIwYUdVZ1VtVmhZM1JFVDAwZ1kyOXVkSEp2Ykd4bFpDQm1iM0p0SUdOdmJYQnZibVZ1ZEhNdVhHNGdLaTljYm5aaGNpQk1hVzVyWldSV1lXeDFaVlYwYVd4eklEMGdlMXh1SUNCTmFYaHBiam9nZTF4dUlDQWdJSEJ5YjNCVWVYQmxjem9nZTF4dUlDQWdJQ0FnZG1Gc2RXVTZJR1oxYm1OMGFXOXVLSEJ5YjNCekxDQndjbTl3VG1GdFpTd2dZMjl0Y0c5dVpXNTBUbUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVhCeWIzQnpXM0J5YjNCT1lXMWxYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdhR0Z6VW1WaFpFOXViSGxXWVd4MVpWdHdjbTl3Y3k1MGVYQmxYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2Y0hNdWIyNURhR0Z1WjJVZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUhCeWIzQnpMbkpsWVdSUGJteDVJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQndjbTl3Y3k1a2FYTmhZbXhsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lDQWdKMWx2ZFNCd2NtOTJhV1JsWkNCaElHQjJZV3gxWldBZ2NISnZjQ0IwYnlCaElHWnZjbTBnWm1sbGJHUWdkMmwwYUc5MWRDQmhiaUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5ZRzl1UTJoaGJtZGxZQ0JvWVc1a2JHVnlMaUJVYUdseklIZHBiR3dnY21WdVpHVnlJR0VnY21WaFpDMXZibXg1SUdacFpXeGtMaUJKWmlBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuZEdobElHWnBaV3hrSUhOb2IzVnNaQ0JpWlNCdGRYUmhZbXhsSUhWelpTQmdaR1ZtWVhWc2RGWmhiSFZsWUM0Z1QzUm9aWEozYVhObExDQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbmMyVjBJR1ZwZEdobGNpQmdiMjVEYUdGdVoyVmdJRzl5SUdCeVpXRmtUMjVzZVdBdUoxeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdmU3hjYmlBZ0lDQWdJR05vWldOclpXUTZJR1oxYm1OMGFXOXVLSEJ5YjNCekxDQndjbTl3VG1GdFpTd2dZMjl0Y0c5dVpXNTBUbUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVhCeWIzQnpXM0J5YjNCT1lXMWxYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2Y0hNdWIyNURhR0Z1WjJVZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUhCeWIzQnpMbkpsWVdSUGJteDVJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQndjbTl3Y3k1a2FYTmhZbXhsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lDQWdKMWx2ZFNCd2NtOTJhV1JsWkNCaElHQmphR1ZqYTJWa1lDQndjbTl3SUhSdklHRWdabTl5YlNCbWFXVnNaQ0IzYVhSb2IzVjBJR0Z1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RnYjI1RGFHRnVaMlZnSUdoaGJtUnNaWEl1SUZSb2FYTWdkMmxzYkNCeVpXNWtaWElnWVNCeVpXRmtMVzl1YkhrZ1ptbGxiR1F1SUVsbUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkMGFHVWdabWxsYkdRZ2MyaHZkV3hrSUdKbElHMTFkR0ZpYkdVZ2RYTmxJR0JrWldaaGRXeDBRMmhsWTJ0bFpHQXVJRTkwYUdWeWQybHpaU3dnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM05sZENCbGFYUm9aWElnWUc5dVEyaGhibWRsWUNCdmNpQmdjbVZoWkU5dWJIbGdMaWRjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCdmJrTm9ZVzVuWlRvZ1VtVmhZM1JRY205d1ZIbHdaWE11Wm5WdVkxeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ2FXNXdkWFFnUm05eWJTQmpiMjF3YjI1bGJuUmNiaUFnSUNvZ1FISmxkSFZ5YmlCN0tuMGdZM1Z5Y21WdWRDQjJZV3gxWlNCdlppQjBhR1VnYVc1d2RYUWdaV2wwYUdWeUlHWnliMjBnZG1Gc2RXVWdjSEp2Y0NCdmNpQnNhVzVyTGx4dUlDQWdLaTljYmlBZ1oyVjBWbUZzZFdVNklHWjFibU4wYVc5dUtHbHVjSFYwS1NCN1hHNGdJQ0FnYVdZZ0tHbHVjSFYwTG5CeWIzQnpMblpoYkhWbFRHbHVheWtnZTF4dUlDQWdJQ0FnWDJGemMyVnlkRlpoYkhWbFRHbHVheWhwYm5CMWRDazdYRzRnSUNBZ0lDQnlaWFIxY200Z2FXNXdkWFF1Y0hKdmNITXVkbUZzZFdWTWFXNXJMblpoYkhWbE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdhVzV3ZFhRdWNISnZjSE11ZG1Gc2RXVTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUkRiMjF3YjI1bGJuUjlJR2x1Y0hWMElFWnZjbTBnWTI5dGNHOXVaVzUwWEc0Z0lDQXFJRUJ5WlhSMWNtNGdleXA5SUdOMWNuSmxiblFnWTJobFkydGxaQ0J6ZEdGMGRYTWdiMllnZEdobElHbHVjSFYwSUdWcGRHaGxjaUJtY205dElHTm9aV05yWldRZ2NISnZjRnh1SUNBZ0tpQWdJQ0FnSUNBZ0lDQWdJQ0J2Y2lCc2FXNXJMbHh1SUNBZ0tpOWNiaUFnWjJWMFEyaGxZMnRsWkRvZ1puVnVZM1JwYjI0b2FXNXdkWFFwSUh0Y2JpQWdJQ0JwWmlBb2FXNXdkWFF1Y0hKdmNITXVZMmhsWTJ0bFpFeHBibXNwSUh0Y2JpQWdJQ0FnSUY5aGMzTmxjblJEYUdWamEyVmtUR2x1YXlocGJuQjFkQ2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhVzV3ZFhRdWNISnZjSE11WTJobFkydGxaRXhwYm1zdWRtRnNkV1U3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCcGJuQjFkQzV3Y205d2N5NWphR1ZqYTJWa08xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQnBibkIxZENCR2IzSnRJR052YlhCdmJtVnVkRnh1SUNBZ0tpQkFjbVYwZFhKdUlIdG1kVzVqZEdsdmJuMGdZMmhoYm1kbElHTmhiR3hpWVdOcklHVnBkR2hsY2lCbWNtOXRJRzl1UTJoaGJtZGxJSEJ5YjNBZ2IzSWdiR2x1YXk1Y2JpQWdJQ292WEc0Z0lHZGxkRTl1UTJoaGJtZGxPaUJtZFc1amRHbHZiaWhwYm5CMWRDa2dlMXh1SUNBZ0lHbG1JQ2hwYm5CMWRDNXdjbTl3Y3k1MllXeDFaVXhwYm1zcElIdGNiaUFnSUNBZ0lGOWhjM05sY25SV1lXeDFaVXhwYm1zb2FXNXdkWFFwTzF4dUlDQWdJQ0FnY21WMGRYSnVJRjlvWVc1a2JHVk1hVzVyWldSV1lXeDFaVU5vWVc1blpUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHbHVjSFYwTG5CeWIzQnpMbU5vWldOclpXUk1hVzVyS1NCN1hHNGdJQ0FnSUNCZllYTnpaWEowUTJobFkydGxaRXhwYm1zb2FXNXdkWFFwTzF4dUlDQWdJQ0FnY21WMGRYSnVJRjlvWVc1a2JHVk1hVzVyWldSRGFHVmphME5vWVc1blpUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR2x1Y0hWMExuQnliM0J6TG05dVEyaGhibWRsTzF4dUlDQjlYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlFeHBibXRsWkZaaGJIVmxWWFJwYkhNN1hHNGlYWDA9IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBMb2NhbEV2ZW50VHJhcE1peGluXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xuXG52YXIgYWNjdW11bGF0ZUludG8gPSByZXF1aXJlKFwiLi9hY2N1bXVsYXRlSW50b1wiKTtcbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSByZXF1aXJlKFwiLi9mb3JFYWNoQWNjdW11bGF0ZWRcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG5mdW5jdGlvbiByZW1vdmUoZXZlbnQpIHtcbiAgZXZlbnQucmVtb3ZlKCk7XG59XG5cbnZhciBMb2NhbEV2ZW50VHJhcE1peGluID0ge1xuICB0cmFwQnViYmxlZEV2ZW50OmZ1bmN0aW9uKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudCh0aGlzLmlzTW91bnRlZCgpLCAnTXVzdCBiZSBtb3VudGVkIHRvIHRyYXAgZXZlbnRzJykgOiBpbnZhcmlhbnQodGhpcy5pc01vdW50ZWQoKSkpO1xuICAgIC8vIElmIGEgY29tcG9uZW50IHJlbmRlcnMgdG8gbnVsbCBvciBpZiBhbm90aGVyIGNvbXBvbmVudCBmYXRhbHMgYW5kIGNhdXNlc1xuICAgIC8vIHRoZSBzdGF0ZSBvZiB0aGUgdHJlZSB0byBiZSBjb3JydXB0ZWQsIGBub2RlYCBoZXJlIGNhbiBiZSBudWxsLlxuICAgIHZhciBub2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIG5vZGUsXG4gICAgICAnTG9jYWxFdmVudFRyYXBNaXhpbi50cmFwQnViYmxlZEV2ZW50KC4uLik6IFJlcXVpcmVzIG5vZGUgdG8gYmUgcmVuZGVyZWQuJ1xuICAgICkgOiBpbnZhcmlhbnQobm9kZSkpO1xuICAgIHZhciBsaXN0ZW5lciA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgbm9kZVxuICAgICk7XG4gICAgdGhpcy5fbG9jYWxFdmVudExpc3RlbmVycyA9XG4gICAgICBhY2N1bXVsYXRlSW50byh0aGlzLl9sb2NhbEV2ZW50TGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH0sXG5cbiAgLy8gdHJhcENhcHR1cmVkRXZlbnQgd291bGQgbG9vayBuZWFybHkgaWRlbnRpY2FsLiBXZSBkb24ndCBpbXBsZW1lbnQgdGhhdFxuICAvLyBtZXRob2QgYmVjYXVzZSBpdCBpc24ndCBjdXJyZW50bHkgbmVlZGVkLlxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OmZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9sb2NhbEV2ZW50TGlzdGVuZXJzKSB7XG4gICAgICBmb3JFYWNoQWNjdW11bGF0ZWQodGhpcy5fbG9jYWxFdmVudExpc3RlbmVycywgcmVtb3ZlKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTG9jYWxFdmVudFRyYXBNaXhpbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlRHOWpZV3hGZG1WdWRGUnlZWEJOYVhocGJpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERTBMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdURzlqWVd4RmRtVnVkRlJ5WVhCTmFYaHBibHh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUZKbFlXTjBRbkp2ZDNObGNrVjJaVzUwUlcxcGRIUmxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2x3aUtUdGNibHh1ZG1GeUlHRmpZM1Z0ZFd4aGRHVkpiblJ2SUQwZ2NtVnhkV2x5WlNoY0lpNHZZV05qZFcxMWJHRjBaVWx1ZEc5Y0lpazdYRzUyWVhJZ1ptOXlSV0ZqYUVGalkzVnRkV3hoZEdWa0lEMGdjbVZ4ZFdseVpTaGNJaTR2Wm05eVJXRmphRUZqWTNWdGRXeGhkR1ZrWENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVablZ1WTNScGIyNGdjbVZ0YjNabEtHVjJaVzUwS1NCN1hHNGdJR1YyWlc1MExuSmxiVzkyWlNncE8xeHVmVnh1WEc1MllYSWdURzlqWVd4RmRtVnVkRlJ5WVhCTmFYaHBiaUE5SUh0Y2JpQWdkSEpoY0VKMVltSnNaV1JGZG1WdWREcG1kVzVqZEdsdmJpaDBiM0JNWlhabGJGUjVjR1VzSUdoaGJtUnNaWEpDWVhObFRtRnRaU2tnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9kR2hwY3k1cGMwMXZkVzUwWldRb0tTd2dKMDExYzNRZ1ltVWdiVzkxYm5SbFpDQjBieUIwY21Gd0lHVjJaVzUwY3ljcElEb2dhVzUyWVhKcFlXNTBLSFJvYVhNdWFYTk5iM1Z1ZEdWa0tDa3BLVHRjYmlBZ0lDQXZMeUJKWmlCaElHTnZiWEJ2Ym1WdWRDQnlaVzVrWlhKeklIUnZJRzUxYkd3Z2IzSWdhV1lnWVc1dmRHaGxjaUJqYjIxd2IyNWxiblFnWm1GMFlXeHpJR0Z1WkNCallYVnpaWE5jYmlBZ0lDQXZMeUIwYUdVZ2MzUmhkR1VnYjJZZ2RHaGxJSFJ5WldVZ2RHOGdZbVVnWTI5eWNuVndkR1ZrTENCZ2JtOWtaV0FnYUdWeVpTQmpZVzRnWW1VZ2JuVnNiQzVjYmlBZ0lDQjJZWElnYm05a1pTQTlJSFJvYVhNdVoyVjBSRTlOVG05a1pTZ3BPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCdWIyUmxMRnh1SUNBZ0lDQWdKMHh2WTJGc1JYWmxiblJVY21Gd1RXbDRhVzR1ZEhKaGNFSjFZbUpzWldSRmRtVnVkQ2d1TGk0cE9pQlNaWEYxYVhKbGN5QnViMlJsSUhSdklHSmxJSEpsYm1SbGNtVmtMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0c1dlpHVXBLVHRjYmlBZ0lDQjJZWElnYkdsemRHVnVaWElnUFNCU1pXRmpkRUp5YjNkelpYSkZkbVZ1ZEVWdGFYUjBaWEl1ZEhKaGNFSjFZbUpzWldSRmRtVnVkQ2hjYmlBZ0lDQWdJSFJ2Y0V4bGRtVnNWSGx3WlN4Y2JpQWdJQ0FnSUdoaGJtUnNaWEpDWVhObFRtRnRaU3hjYmlBZ0lDQWdJRzV2WkdWY2JpQWdJQ0FwTzF4dUlDQWdJSFJvYVhNdVgyeHZZMkZzUlhabGJuUk1hWE4wWlc1bGNuTWdQVnh1SUNBZ0lDQWdZV05qZFcxMWJHRjBaVWx1ZEc4b2RHaHBjeTVmYkc5allXeEZkbVZ1ZEV4cGMzUmxibVZ5Y3l3Z2JHbHpkR1Z1WlhJcE8xeHVJQ0I5TEZ4dVhHNGdJQzh2SUhSeVlYQkRZWEIwZFhKbFpFVjJaVzUwSUhkdmRXeGtJR3h2YjJzZ2JtVmhjbXg1SUdsa1pXNTBhV05oYkM0Z1YyVWdaRzl1SjNRZ2FXMXdiR1Z0Wlc1MElIUm9ZWFJjYmlBZ0x5OGdiV1YwYUc5a0lHSmxZMkYxYzJVZ2FYUWdhWE51SjNRZ1kzVnljbVZ1ZEd4NUlHNWxaV1JsWkM1Y2JseHVJQ0JqYjIxd2IyNWxiblJYYVd4c1ZXNXRiM1Z1ZERwbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCcFppQW9kR2hwY3k1ZmJHOWpZV3hGZG1WdWRFeHBjM1JsYm1WeWN5a2dlMXh1SUNBZ0lDQWdabTl5UldGamFFRmpZM1Z0ZFd4aGRHVmtLSFJvYVhNdVgyeHZZMkZzUlhabGJuUk1hWE4wWlc1bGNuTXNJSEpsYlc5MlpTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRXh2WTJGc1JYWmxiblJVY21Gd1RXbDRhVzQ3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpblxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxuLyoqXG4gKiBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvbiBub24taW50ZXJhY3RpdmVcbiAqIGVsZW1lbnRzLCB3aGljaCBtZWFucyBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXJzIGRvIG5vdCBmaXJlLiBUaGUgd29ya2Fyb3VuZFxuICogZm9yIHRoaXMgYnVnIGludm9sdmVzIGF0dGFjaGluZyBhbiBlbXB0eSBjbGljayBsaXN0ZW5lciBvbiB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhpcyBwYXJ0aWN1bGFyIHBsdWdpbiB3b3JrcyBhcm91bmQgdGhlIGJ1ZyBieSBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2tcbiAqIGxpc3RlbmVyIG9uIGB0b3VjaHN0YXJ0YCAod2hpY2ggZG9lcyBmaXJlIG9uIGV2ZXJ5IGVsZW1lbnQpLlxuICovXG52YXIgTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbiA9IHtcblxuICBldmVudFR5cGVzOiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50c31cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnQpIHtcbiAgICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoU3RhcnQpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQ7XG4gICAgICBpZiAodGFyZ2V0ICYmICF0YXJnZXQub25jbGljaykge1xuICAgICAgICB0YXJnZXQub25jbGljayA9IGVtcHR5RnVuY3Rpb247XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBPYmplY3QuYXNzaWduXG4gKi9cblxuLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLW9iamVjdC5hc3NpZ25cblxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2VzKSB7XG4gIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gdGFyZ2V0IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCcpO1xuICB9XG5cbiAgdmFyIHRvID0gT2JqZWN0KHRhcmdldCk7XG4gIHZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbiAgZm9yICh2YXIgbmV4dEluZGV4ID0gMTsgbmV4dEluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgbmV4dEluZGV4KyspIHtcbiAgICB2YXIgbmV4dFNvdXJjZSA9IGFyZ3VtZW50c1tuZXh0SW5kZXhdO1xuICAgIGlmIChuZXh0U291cmNlID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBmcm9tID0gT2JqZWN0KG5leHRTb3VyY2UpO1xuXG4gICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgYWNjZXNzb3JzIG5vciBwcm94aWVzLiBUaGVyZWZvcmUgdGhpc1xuICAgIC8vIGNvcHkgY2Fubm90IHRocm93LiBJZiB3ZSBldmVyIHN1cHBvcnRlZCB0aGlzIHRoZW4gd2UgbXVzdCBoYW5kbGVcbiAgICAvLyBleGNlcHRpb25zIGFuZCBzaWRlLWVmZmVjdHMuIFdlIGRvbid0IHN1cHBvcnQgc3ltYm9scyBzbyB0aGV5IHdvbid0XG4gICAgLy8gYmUgdHJhbnNmZXJyZWQuXG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ247XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFBvb2xlZENsYXNzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIFN0YXRpYyBwb29sZXJzLiBTZXZlcmFsIGN1c3RvbSB2ZXJzaW9ucyBmb3IgZWFjaCBwb3RlbnRpYWwgbnVtYmVyIG9mXG4gKiBhcmd1bWVudHMuIEEgY29tcGxldGVseSBnZW5lcmljIHBvb2xlciBpcyBlYXN5IHRvIGltcGxlbWVudCwgYnV0IHdvdWxkXG4gKiByZXF1aXJlIGFjY2Vzc2luZyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBJbiBlYWNoIG9mIHRoZXNlLCBgdGhpc2AgcmVmZXJzIHRvXG4gKiB0aGUgQ2xhc3MgaXRzZWxmLCBub3QgYW4gaW5zdGFuY2UuIElmIGFueSBvdGhlcnMgYXJlIG5lZWRlZCwgc2ltcGx5IGFkZCB0aGVtXG4gKiBoZXJlLCBvciBpbiB0aGVpciBvd24gZmlsZXMuXG4gKi9cbnZhciBvbmVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uKGNvcHlGaWVsZHNGcm9tKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVsZHNGcm9tKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhjb3B5RmllbGRzRnJvbSk7XG4gIH1cbn07XG5cbnZhciB0d29Bcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uKGExLCBhMikge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMik7XG4gIH1cbn07XG5cbnZhciB0aHJlZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24oYTEsIGEyLCBhMykge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIsIGEzKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzKTtcbiAgfVxufTtcblxudmFyIGZpdmVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uKGExLCBhMiwgYTMsIGE0LCBhNSkge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIsIGEzLCBhNCwgYTUpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMsIGE0LCBhNSk7XG4gIH1cbn07XG5cbnZhciBzdGFuZGFyZFJlbGVhc2VyID0gZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpbnN0YW5jZSBpbnN0YW5jZW9mIEtsYXNzLFxuICAgICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLidcbiAgKSA6IGludmFyaWFudChpbnN0YW5jZSBpbnN0YW5jZW9mIEtsYXNzKSk7XG4gIGlmIChpbnN0YW5jZS5kZXN0cnVjdG9yKSB7XG4gICAgaW5zdGFuY2UuZGVzdHJ1Y3RvcigpO1xuICB9XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoIDwgS2xhc3MucG9vbFNpemUpIHtcbiAgICBLbGFzcy5pbnN0YW5jZVBvb2wucHVzaChpbnN0YW5jZSk7XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX1BPT0xfU0laRSA9IDEwO1xudmFyIERFRkFVTFRfUE9PTEVSID0gb25lQXJndW1lbnRQb29sZXI7XG5cbi8qKlxuICogQXVnbWVudHMgYENvcHlDb25zdHJ1Y3RvcmAgdG8gYmUgYSBwb29sYWJsZSBjbGFzcywgYXVnbWVudGluZyBvbmx5IHRoZSBjbGFzc1xuICogaXRzZWxmIChzdGF0aWNhbGx5KSBub3QgYWRkaW5nIGFueSBwcm90b3R5cGljYWwgZmllbGRzLiBBbnkgQ29weUNvbnN0cnVjdG9yXG4gKiB5b3UgZ2l2ZSB0aGlzIG1heSBoYXZlIGEgYHBvb2xTaXplYCBwcm9wZXJ0eSwgYW5kIHdpbGwgbG9vayBmb3IgYVxuICogcHJvdG90eXBpY2FsIGBkZXN0cnVjdG9yYCBvbiBpbnN0YW5jZXMgKG9wdGlvbmFsKS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBDb3B5Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUgcG9vbGVyLlxuICovXG52YXIgYWRkUG9vbGluZ1RvID0gZnVuY3Rpb24oQ29weUNvbnN0cnVjdG9yLCBwb29sZXIpIHtcbiAgdmFyIE5ld0tsYXNzID0gQ29weUNvbnN0cnVjdG9yO1xuICBOZXdLbGFzcy5pbnN0YW5jZVBvb2wgPSBbXTtcbiAgTmV3S2xhc3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERFRkFVTFRfUE9PTEVSO1xuICBpZiAoIU5ld0tsYXNzLnBvb2xTaXplKSB7XG4gICAgTmV3S2xhc3MucG9vbFNpemUgPSBERUZBVUxUX1BPT0xfU0laRTtcbiAgfVxuICBOZXdLbGFzcy5yZWxlYXNlID0gc3RhbmRhcmRSZWxlYXNlcjtcbiAgcmV0dXJuIE5ld0tsYXNzO1xufTtcblxudmFyIFBvb2xlZENsYXNzID0ge1xuICBhZGRQb29saW5nVG86IGFkZFBvb2xpbmdUbyxcbiAgb25lQXJndW1lbnRQb29sZXI6IG9uZUFyZ3VtZW50UG9vbGVyLFxuICB0d29Bcmd1bWVudFBvb2xlcjogdHdvQXJndW1lbnRQb29sZXIsXG4gIHRocmVlQXJndW1lbnRQb29sZXI6IHRocmVlQXJndW1lbnRQb29sZXIsXG4gIGZpdmVBcmd1bWVudFBvb2xlcjogZml2ZUFyZ3VtZW50UG9vbGVyXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xlZENsYXNzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VUc5dmJHVmtRMnhoYzNNdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCUWIyOXNaV1JEYkdGemMxeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYmx4dUx5b3FYRzRnS2lCVGRHRjBhV01nY0c5dmJHVnljeTRnVTJWMlpYSmhiQ0JqZFhOMGIyMGdkbVZ5YzJsdmJuTWdabTl5SUdWaFkyZ2djRzkwWlc1MGFXRnNJRzUxYldKbGNpQnZabHh1SUNvZ1lYSm5kVzFsYm5SekxpQkJJR052YlhCc1pYUmxiSGtnWjJWdVpYSnBZeUJ3YjI5c1pYSWdhWE1nWldGemVTQjBieUJwYlhCc1pXMWxiblFzSUdKMWRDQjNiM1ZzWkZ4dUlDb2djbVZ4ZFdseVpTQmhZMk5sYzNOcGJtY2dkR2hsSUdCaGNtZDFiV1Z1ZEhOZ0lHOWlhbVZqZEM0Z1NXNGdaV0ZqYUNCdlppQjBhR1Z6WlN3Z1lIUm9hWE5nSUhKbFptVnljeUIwYjF4dUlDb2dkR2hsSUVOc1lYTnpJR2wwYzJWc1ppd2dibTkwSUdGdUlHbHVjM1JoYm1ObExpQkpaaUJoYm5rZ2IzUm9aWEp6SUdGeVpTQnVaV1ZrWldRc0lITnBiWEJzZVNCaFpHUWdkR2hsYlZ4dUlDb2dhR1Z5WlN3Z2IzSWdhVzRnZEdobGFYSWdiM2R1SUdacGJHVnpMbHh1SUNvdlhHNTJZWElnYjI1bFFYSm5kVzFsYm5SUWIyOXNaWElnUFNCbWRXNWpkR2x2YmloamIzQjVSbWxsYkdSelJuSnZiU2tnZTF4dUlDQjJZWElnUzJ4aGMzTWdQU0IwYUdsek8xeHVJQ0JwWmlBb1MyeGhjM011YVc1emRHRnVZMlZRYjI5c0xteGxibWQwYUNrZ2UxeHVJQ0FnSUhaaGNpQnBibk4wWVc1alpTQTlJRXRzWVhOekxtbHVjM1JoYm1ObFVHOXZiQzV3YjNBb0tUdGNiaUFnSUNCTGJHRnpjeTVqWVd4c0tHbHVjM1JoYm1ObExDQmpiM0I1Um1sbGJHUnpSbkp2YlNrN1hHNGdJQ0FnY21WMGRYSnVJR2x1YzNSaGJtTmxPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnUzJ4aGMzTW9ZMjl3ZVVacFpXeGtjMFp5YjIwcE8xeHVJQ0I5WEc1OU8xeHVYRzUyWVhJZ2RIZHZRWEpuZFcxbGJuUlFiMjlzWlhJZ1BTQm1kVzVqZEdsdmJpaGhNU3dnWVRJcElIdGNiaUFnZG1GeUlFdHNZWE56SUQwZ2RHaHBjenRjYmlBZ2FXWWdLRXRzWVhOekxtbHVjM1JoYm1ObFVHOXZiQzVzWlc1bmRHZ3BJSHRjYmlBZ0lDQjJZWElnYVc1emRHRnVZMlVnUFNCTGJHRnpjeTVwYm5OMFlXNWpaVkJ2YjJ3dWNHOXdLQ2s3WEc0Z0lDQWdTMnhoYzNNdVkyRnNiQ2hwYm5OMFlXNWpaU3dnWVRFc0lHRXlLVHRjYmlBZ0lDQnlaWFIxY200Z2FXNXpkR0Z1WTJVN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QkxiR0Z6Y3loaE1Td2dZVElwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnZEdoeVpXVkJjbWQxYldWdWRGQnZiMnhsY2lBOUlHWjFibU4wYVc5dUtHRXhMQ0JoTWl3Z1lUTXBJSHRjYmlBZ2RtRnlJRXRzWVhOeklEMGdkR2hwY3p0Y2JpQWdhV1lnS0V0c1lYTnpMbWx1YzNSaGJtTmxVRzl2YkM1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IyWVhJZ2FXNXpkR0Z1WTJVZ1BTQkxiR0Z6Y3k1cGJuTjBZVzVqWlZCdmIyd3VjRzl3S0NrN1hHNGdJQ0FnUzJ4aGMzTXVZMkZzYkNocGJuTjBZVzVqWlN3Z1lURXNJR0V5TENCaE15azdYRzRnSUNBZ2NtVjBkWEp1SUdsdWMzUmhibU5sTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1MyeGhjM01vWVRFc0lHRXlMQ0JoTXlrN1hHNGdJSDFjYm4wN1hHNWNiblpoY2lCbWFYWmxRWEpuZFcxbGJuUlFiMjlzWlhJZ1BTQm1kVzVqZEdsdmJpaGhNU3dnWVRJc0lHRXpMQ0JoTkN3Z1lUVXBJSHRjYmlBZ2RtRnlJRXRzWVhOeklEMGdkR2hwY3p0Y2JpQWdhV1lnS0V0c1lYTnpMbWx1YzNSaGJtTmxVRzl2YkM1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IyWVhJZ2FXNXpkR0Z1WTJVZ1BTQkxiR0Z6Y3k1cGJuTjBZVzVqWlZCdmIyd3VjRzl3S0NrN1hHNGdJQ0FnUzJ4aGMzTXVZMkZzYkNocGJuTjBZVzVqWlN3Z1lURXNJR0V5TENCaE15d2dZVFFzSUdFMUtUdGNiaUFnSUNCeVpYUjFjbTRnYVc1emRHRnVZMlU3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCTGJHRnpjeWhoTVN3Z1lUSXNJR0V6TENCaE5Dd2dZVFVwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnYzNSaGJtUmhjbVJTWld4bFlYTmxjaUE5SUdaMWJtTjBhVzl1S0dsdWMzUmhibU5sS1NCN1hHNGdJSFpoY2lCTGJHRnpjeUE5SUhSb2FYTTdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdhVzV6ZEdGdVkyVWdhVzV6ZEdGdVkyVnZaaUJMYkdGemN5eGNiaUFnSUNBblZISjVhVzVuSUhSdklISmxiR1ZoYzJVZ1lXNGdhVzV6ZEdGdVkyVWdhVzUwYnlCaElIQnZiMndnYjJZZ1lTQmthV1ptWlhKbGJuUWdkSGx3WlM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2FXNXpkR0Z1WTJVZ2FXNXpkR0Z1WTJWdlppQkxiR0Z6Y3lrcE8xeHVJQ0JwWmlBb2FXNXpkR0Z1WTJVdVpHVnpkSEoxWTNSdmNpa2dlMXh1SUNBZ0lHbHVjM1JoYm1ObExtUmxjM1J5ZFdOMGIzSW9LVHRjYmlBZ2ZWeHVJQ0JwWmlBb1MyeGhjM011YVc1emRHRnVZMlZRYjI5c0xteGxibWQwYUNBOElFdHNZWE56TG5CdmIyeFRhWHBsS1NCN1hHNGdJQ0FnUzJ4aGMzTXVhVzV6ZEdGdVkyVlFiMjlzTG5CMWMyZ29hVzV6ZEdGdVkyVXBPMXh1SUNCOVhHNTlPMXh1WEc1MllYSWdSRVZHUVZWTVZGOVFUMDlNWDFOSldrVWdQU0F4TUR0Y2JuWmhjaUJFUlVaQlZVeFVYMUJQVDB4RlVpQTlJRzl1WlVGeVozVnRaVzUwVUc5dmJHVnlPMXh1WEc0dktpcGNiaUFxSUVGMVoyMWxiblJ6SUdCRGIzQjVRMjl1YzNSeWRXTjBiM0pnSUhSdklHSmxJR0VnY0c5dmJHRmliR1VnWTJ4aGMzTXNJR0YxWjIxbGJuUnBibWNnYjI1c2VTQjBhR1VnWTJ4aGMzTmNiaUFxSUdsMGMyVnNaaUFvYzNSaGRHbGpZV3hzZVNrZ2JtOTBJR0ZrWkdsdVp5QmhibmtnY0hKdmRHOTBlWEJwWTJGc0lHWnBaV3hrY3k0Z1FXNTVJRU52Y0hsRGIyNXpkSEoxWTNSdmNseHVJQ29nZVc5MUlHZHBkbVVnZEdocGN5QnRZWGtnYUdGMlpTQmhJR0J3YjI5c1UybDZaV0FnY0hKdmNHVnlkSGtzSUdGdVpDQjNhV3hzSUd4dmIyc2dabTl5SUdGY2JpQXFJSEJ5YjNSdmRIbHdhV05oYkNCZ1pHVnpkSEoxWTNSdmNtQWdiMjRnYVc1emRHRnVZMlZ6SUNodmNIUnBiMjVoYkNrdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0R2RXNWpkR2x2Ym4wZ1EyOXdlVU52Ym5OMGNuVmpkRzl5SUVOdmJuTjBjblZqZEc5eUlIUm9ZWFFnWTJGdUlHSmxJSFZ6WldRZ2RHOGdjbVZ6WlhRdVhHNGdLaUJBY0dGeVlXMGdlMFoxYm1OMGFXOXVmU0J3YjI5c1pYSWdRM1Z6ZEc5dGFYcGhZbXhsSUhCdmIyeGxjaTVjYmlBcUwxeHVkbUZ5SUdGa1pGQnZiMnhwYm1kVWJ5QTlJR1oxYm1OMGFXOXVLRU52Y0hsRGIyNXpkSEoxWTNSdmNpd2djRzl2YkdWeUtTQjdYRzRnSUhaaGNpQk9aWGRMYkdGemN5QTlJRU52Y0hsRGIyNXpkSEoxWTNSdmNqdGNiaUFnVG1WM1MyeGhjM011YVc1emRHRnVZMlZRYjI5c0lEMGdXMTA3WEc0Z0lFNWxkMHRzWVhOekxtZGxkRkJ2YjJ4bFpDQTlJSEJ2YjJ4bGNpQjhmQ0JFUlVaQlZVeFVYMUJQVDB4RlVqdGNiaUFnYVdZZ0tDRk9aWGRMYkdGemN5NXdiMjlzVTJsNlpTa2dlMXh1SUNBZ0lFNWxkMHRzWVhOekxuQnZiMnhUYVhwbElEMGdSRVZHUVZWTVZGOVFUMDlNWDFOSldrVTdYRzRnSUgxY2JpQWdUbVYzUzJ4aGMzTXVjbVZzWldGelpTQTlJSE4wWVc1a1lYSmtVbVZzWldGelpYSTdYRzRnSUhKbGRIVnliaUJPWlhkTGJHRnpjenRjYm4wN1hHNWNiblpoY2lCUWIyOXNaV1JEYkdGemN5QTlJSHRjYmlBZ1lXUmtVRzl2YkdsdVoxUnZPaUJoWkdSUWIyOXNhVzVuVkc4c1hHNGdJRzl1WlVGeVozVnRaVzUwVUc5dmJHVnlPaUJ2Ym1WQmNtZDFiV1Z1ZEZCdmIyeGxjaXhjYmlBZ2RIZHZRWEpuZFcxbGJuUlFiMjlzWlhJNklIUjNiMEZ5WjNWdFpXNTBVRzl2YkdWeUxGeHVJQ0IwYUhKbFpVRnlaM1Z0Wlc1MFVHOXZiR1Z5T2lCMGFISmxaVUZ5WjNWdFpXNTBVRzl2YkdWeUxGeHVJQ0JtYVhabFFYSm5kVzFsYm5SUWIyOXNaWEk2SUdacGRtVkJjbWQxYldWdWRGQnZiMnhsY2x4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JRYjI5c1pXUkRiR0Z6Y3p0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFxuICovXG5cbi8qIGdsb2JhbHMgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQbHVnaW5VdGlscyA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luVXRpbHNcIik7XG52YXIgUmVhY3RDaGlsZHJlbiA9IHJlcXVpcmUoXCIuL1JlYWN0Q2hpbGRyZW5cIik7XG52YXIgUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudFwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdENvbnRleHQgPSByZXF1aXJlKFwiLi9SZWFjdENvbnRleHRcIik7XG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKFwiLi9SZWFjdEN1cnJlbnRPd25lclwiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50VmFsaWRhdG9yXCIpO1xudmFyIFJlYWN0RE9NID0gcmVxdWlyZShcIi4vUmVhY3RET01cIik7XG52YXIgUmVhY3RET01UZXh0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RET01UZXh0Q29tcG9uZW50XCIpO1xudmFyIFJlYWN0RGVmYXVsdEluamVjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0RGVmYXVsdEluamVjdGlvblwiKTtcbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzXCIpO1xudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKFwiLi9SZWFjdE1vdW50XCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFByb3BUeXBlcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVzXCIpO1xudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlclwiKTtcbnZhciBSZWFjdFNlcnZlclJlbmRlcmluZyA9IHJlcXVpcmUoXCIuL1JlYWN0U2VydmVyUmVuZGVyaW5nXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBmaW5kRE9NTm9kZSA9IHJlcXVpcmUoXCIuL2ZpbmRET01Ob2RlXCIpO1xudmFyIG9ubHlDaGlsZCA9IHJlcXVpcmUoXCIuL29ubHlDaGlsZFwiKTtcblxuUmVhY3REZWZhdWx0SW5qZWN0aW9uLmluamVjdCgpO1xuXG52YXIgY3JlYXRlRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50O1xudmFyIGNyZWF0ZUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeTtcbnZhciBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50O1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudDtcbiAgY3JlYXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5O1xuICBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2xvbmVFbGVtZW50O1xufVxuXG52YXIgcmVuZGVyID0gUmVhY3RQZXJmLm1lYXN1cmUoJ1JlYWN0JywgJ3JlbmRlcicsIFJlYWN0TW91bnQucmVuZGVyKTtcblxudmFyIFJlYWN0ID0ge1xuICBDaGlsZHJlbjoge1xuICAgIG1hcDogUmVhY3RDaGlsZHJlbi5tYXAsXG4gICAgZm9yRWFjaDogUmVhY3RDaGlsZHJlbi5mb3JFYWNoLFxuICAgIGNvdW50OiBSZWFjdENoaWxkcmVuLmNvdW50LFxuICAgIG9ubHk6IG9ubHlDaGlsZFxuICB9LFxuICBDb21wb25lbnQ6IFJlYWN0Q29tcG9uZW50LFxuICBET006IFJlYWN0RE9NLFxuICBQcm9wVHlwZXM6IFJlYWN0UHJvcFR5cGVzLFxuICBpbml0aWFsaXplVG91Y2hFdmVudHM6IGZ1bmN0aW9uKHNob3VsZFVzZVRvdWNoKSB7XG4gICAgRXZlbnRQbHVnaW5VdGlscy51c2VUb3VjaEV2ZW50cyA9IHNob3VsZFVzZVRvdWNoO1xuICB9LFxuICBjcmVhdGVDbGFzczogUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyxcbiAgY3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCxcbiAgY2xvbmVFbGVtZW50OiBjbG9uZUVsZW1lbnQsXG4gIGNyZWF0ZUZhY3Rvcnk6IGNyZWF0ZUZhY3RvcnksXG4gIGNyZWF0ZU1peGluOiBmdW5jdGlvbihtaXhpbikge1xuICAgIC8vIEN1cnJlbnRseSBhIG5vb3AuIFdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdHJhY2UgbWl4aW5zLlxuICAgIHJldHVybiBtaXhpbjtcbiAgfSxcbiAgY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50OiBSZWFjdE1vdW50LmNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudCxcbiAgY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50QnlJRDogUmVhY3RNb3VudC5jb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnRCeUlELFxuICBmaW5kRE9NTm9kZTogZmluZERPTU5vZGUsXG4gIHJlbmRlcjogcmVuZGVyLFxuICByZW5kZXJUb1N0cmluZzogUmVhY3RTZXJ2ZXJSZW5kZXJpbmcucmVuZGVyVG9TdHJpbmcsXG4gIHJlbmRlclRvU3RhdGljTWFya3VwOiBSZWFjdFNlcnZlclJlbmRlcmluZy5yZW5kZXJUb1N0YXRpY01hcmt1cCxcbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZTogUmVhY3RNb3VudC51bm1vdW50Q29tcG9uZW50QXROb2RlLFxuICBpc1ZhbGlkRWxlbWVudDogUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50LFxuICB3aXRoQ29udGV4dDogUmVhY3RDb250ZXh0LndpdGhDb250ZXh0LFxuXG4gIC8vIEhvb2sgZm9yIEpTWCBzcHJlYWQsIGRvbid0IHVzZSB0aGlzIGZvciBhbnl0aGluZyBlbHNlLlxuICBfX3NwcmVhZDogYXNzaWduXG59O1xuXG4vLyBJbmplY3QgdGhlIHJ1bnRpbWUgaW50byBhIGRldnRvb2xzIGdsb2JhbCBob29rIHJlZ2FyZGxlc3Mgb2YgYnJvd3Nlci5cbi8vIEFsbG93cyBmb3IgZGVidWdnaW5nIHdoZW4gdGhlIGhvb2sgaXMgaW5qZWN0ZWQgb24gdGhlIHBhZ2UuXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uaW5qZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3Qoe1xuICAgIEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gICAgSW5zdGFuY2VIYW5kbGVzOiBSZWFjdEluc3RhbmNlSGFuZGxlcyxcbiAgICBNb3VudDogUmVhY3RNb3VudCxcbiAgICBSZWNvbmNpbGVyOiBSZWFjdFJlY29uY2lsZXIsXG4gICAgVGV4dENvbXBvbmVudDogUmVhY3RET01UZXh0Q29tcG9uZW50XG4gIH0pO1xufVxuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuICBpZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG5cbiAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUsIGxvb2sgZm9yIHRoZSBkZXZ0b29scyBtYXJrZXIgYW5kIHByb3ZpZGUgYSBkb3dubG9hZFxuICAgIC8vIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA+IC0xKSB7XG4gICAgICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgICAnRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOiAnICtcbiAgICAgICAgICAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXhwZWN0ZWRGZWF0dXJlcyA9IFtcbiAgICAgIC8vIHNoaW1zXG4gICAgICBBcnJheS5pc0FycmF5LFxuICAgICAgQXJyYXkucHJvdG90eXBlLmV2ZXJ5LFxuICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2gsXG4gICAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZixcbiAgICAgIEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgICBEYXRlLm5vdyxcbiAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLFxuICAgICAgT2JqZWN0LmtleXMsXG4gICAgICBTdHJpbmcucHJvdG90eXBlLnNwbGl0LFxuICAgICAgU3RyaW5nLnByb3RvdHlwZS50cmltLFxuXG4gICAgICAvLyBzaGFtc1xuICAgICAgT2JqZWN0LmNyZWF0ZSxcbiAgICAgIE9iamVjdC5mcmVlemVcbiAgICBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZEZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWV4cGVjdGVkRmVhdHVyZXNbaV0pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnT25lIG9yIG1vcmUgRVM1IHNoaW0vc2hhbXMgZXhwZWN0ZWQgYnkgUmVhY3QgYXJlIG5vdCBhdmFpbGFibGU6ICcgK1xuICAgICAgICAgICdodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmctcG9seWZpbGxzJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVhY3QudmVyc2lvbiA9ICcwLjEzLjMnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlNaV0ZqZEZ4dUlDb3ZYRzVjYmk4cUlHZHNiMkpoYkhNZ1gxOVNSVUZEVkY5RVJWWlVUMDlNVTE5SFRFOUNRVXhmU0U5UFMxOWZLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdSWFpsYm5SUWJIVm5hVzVWZEdsc2N5QTlJSEpsY1hWcGNtVW9YQ0l1TDBWMlpXNTBVR3gxWjJsdVZYUnBiSE5jSWlrN1hHNTJZWElnVW1WaFkzUkRhR2xzWkhKbGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRMmhwYkdSeVpXNWNJaWs3WEc1MllYSWdVbVZoWTNSRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVOc1lYTnpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEYkdGemMxd2lLVHRjYm5aaGNpQlNaV0ZqZEVOdmJuUmxlSFFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOdmJuUmxlSFJjSWlrN1hHNTJZWElnVW1WaFkzUkRkWEp5Wlc1MFQzZHVaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOMWNuSmxiblJQZDI1bGNsd2lLVHRjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eVhDSXBPMXh1ZG1GeUlGSmxZV04wUkU5TklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkVUMDFjSWlrN1hHNTJZWElnVW1WaFkzUkVUMDFVWlhoMFEyOXRjRzl1Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkVUMDFVWlhoMFEyOXRjRzl1Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wUkdWbVlYVnNkRWx1YW1WamRHbHZiaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUkdWbVlYVnNkRWx1YW1WamRHbHZibHdpS1R0Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBUVzkxYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFMXZkVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBVR1Z5WmlBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVHVnlabHdpS1R0Y2JuWmhjaUJTWldGamRGQnliM0JVZVhCbGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVnpYQ0lwTzF4dWRtRnlJRkpsWVdOMFVtVmpiMjVqYVd4bGNpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVbVZqYjI1amFXeGxjbHdpS1R0Y2JuWmhjaUJTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFUyVnlkbVZ5VW1WdVpHVnlhVzVuWENJcE8xeHVYRzUyWVhJZ1lYTnphV2R1SUQwZ2NtVnhkV2x5WlNoY0lpNHZUMkpxWldOMExtRnpjMmxuYmx3aUtUdGNiblpoY2lCbWFXNWtSRTlOVG05a1pTQTlJSEpsY1hWcGNtVW9YQ0l1TDJacGJtUkVUMDFPYjJSbFhDSXBPMXh1ZG1GeUlHOXViSGxEYUdsc1pDQTlJSEpsY1hWcGNtVW9YQ0l1TDI5dWJIbERhR2xzWkZ3aUtUdGNibHh1VW1WaFkzUkVaV1poZFd4MFNXNXFaV04wYVc5dUxtbHVhbVZqZENncE8xeHVYRzUyWVhJZ1kzSmxZWFJsUld4bGJXVnVkQ0E5SUZKbFlXTjBSV3hsYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwTzF4dWRtRnlJR055WldGMFpVWmhZM1J2Y25rZ1BTQlNaV0ZqZEVWc1pXMWxiblF1WTNKbFlYUmxSbUZqZEc5eWVUdGNiblpoY2lCamJHOXVaVVZzWlcxbGJuUWdQU0JTWldGamRFVnNaVzFsYm5RdVkyeHZibVZGYkdWdFpXNTBPMXh1WEc1cFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJR055WldGMFpVVnNaVzFsYm5RZ1BTQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0l1WTNKbFlYUmxSV3hsYldWdWREdGNiaUFnWTNKbFlYUmxSbUZqZEc5eWVTQTlJRkpsWVdOMFJXeGxiV1Z1ZEZaaGJHbGtZWFJ2Y2k1amNtVmhkR1ZHWVdOMGIzSjVPMXh1SUNCamJHOXVaVVZzWlcxbGJuUWdQU0JTWldGamRFVnNaVzFsYm5SV1lXeHBaR0YwYjNJdVkyeHZibVZGYkdWdFpXNTBPMXh1ZlZ4dVhHNTJZWElnY21WdVpHVnlJRDBnVW1WaFkzUlFaWEptTG0xbFlYTjFjbVVvSjFKbFlXTjBKeXdnSjNKbGJtUmxjaWNzSUZKbFlXTjBUVzkxYm5RdWNtVnVaR1Z5S1R0Y2JseHVkbUZ5SUZKbFlXTjBJRDBnZTF4dUlDQkRhR2xzWkhKbGJqb2dlMXh1SUNBZ0lHMWhjRG9nVW1WaFkzUkRhR2xzWkhKbGJpNXRZWEFzWEc0Z0lDQWdabTl5UldGamFEb2dVbVZoWTNSRGFHbHNaSEpsYmk1bWIzSkZZV05vTEZ4dUlDQWdJR052ZFc1ME9pQlNaV0ZqZEVOb2FXeGtjbVZ1TG1OdmRXNTBMRnh1SUNBZ0lHOXViSGs2SUc5dWJIbERhR2xzWkZ4dUlDQjlMRnh1SUNCRGIyMXdiMjVsYm5RNklGSmxZV04wUTI5dGNHOXVaVzUwTEZ4dUlDQkVUMDA2SUZKbFlXTjBSRTlOTEZ4dUlDQlFjbTl3Vkhsd1pYTTZJRkpsWVdOMFVISnZjRlI1Y0dWekxGeHVJQ0JwYm1sMGFXRnNhWHBsVkc5MVkyaEZkbVZ1ZEhNNklHWjFibU4wYVc5dUtITm9iM1ZzWkZWelpWUnZkV05vS1NCN1hHNGdJQ0FnUlhabGJuUlFiSFZuYVc1VmRHbHNjeTUxYzJWVWIzVmphRVYyWlc1MGN5QTlJSE5vYjNWc1pGVnpaVlJ2ZFdOb08xeHVJQ0I5TEZ4dUlDQmpjbVZoZEdWRGJHRnpjem9nVW1WaFkzUkRiR0Z6Y3k1amNtVmhkR1ZEYkdGemN5eGNiaUFnWTNKbFlYUmxSV3hsYldWdWREb2dZM0psWVhSbFJXeGxiV1Z1ZEN4Y2JpQWdZMnh2Ym1WRmJHVnRaVzUwT2lCamJHOXVaVVZzWlcxbGJuUXNYRzRnSUdOeVpXRjBaVVpoWTNSdmNuazZJR055WldGMFpVWmhZM1J2Y25rc1hHNGdJR055WldGMFpVMXBlR2x1T2lCbWRXNWpkR2x2YmlodGFYaHBiaWtnZTF4dUlDQWdJQzh2SUVOMWNuSmxiblJzZVNCaElHNXZiM0F1SUZkcGJHd2dZbVVnZFhObFpDQjBieUIyWVd4cFpHRjBaU0JoYm1RZ2RISmhZMlVnYldsNGFXNXpMbHh1SUNBZ0lISmxkSFZ5YmlCdGFYaHBianRjYmlBZ2ZTeGNiaUFnWTI5dWMzUnlkV04wUVc1a1VtVnVaR1Z5UTI5dGNHOXVaVzUwT2lCU1pXRmpkRTF2ZFc1MExtTnZibk4wY25WamRFRnVaRkpsYm1SbGNrTnZiWEJ2Ym1WdWRDeGNiaUFnWTI5dWMzUnlkV04wUVc1a1VtVnVaR1Z5UTI5dGNHOXVaVzUwUW5sSlJEb2dVbVZoWTNSTmIzVnVkQzVqYjI1emRISjFZM1JCYm1SU1pXNWtaWEpEYjIxd2IyNWxiblJDZVVsRUxGeHVJQ0JtYVc1a1JFOU5UbTlrWlRvZ1ptbHVaRVJQVFU1dlpHVXNYRzRnSUhKbGJtUmxjam9nY21WdVpHVnlMRnh1SUNCeVpXNWtaWEpVYjFOMGNtbHVaem9nVW1WaFkzUlRaWEoyWlhKU1pXNWtaWEpwYm1jdWNtVnVaR1Z5Vkc5VGRISnBibWNzWEc0Z0lISmxibVJsY2xSdlUzUmhkR2xqVFdGeWEzVndPaUJTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1Wnk1eVpXNWtaWEpVYjFOMFlYUnBZMDFoY210MWNDeGNiaUFnZFc1dGIzVnVkRU52YlhCdmJtVnVkRUYwVG05a1pUb2dVbVZoWTNSTmIzVnVkQzUxYm0xdmRXNTBRMjl0Y0c5dVpXNTBRWFJPYjJSbExGeHVJQ0JwYzFaaGJHbGtSV3hsYldWdWREb2dVbVZoWTNSRmJHVnRaVzUwTG1selZtRnNhV1JGYkdWdFpXNTBMRnh1SUNCM2FYUm9RMjl1ZEdWNGREb2dVbVZoWTNSRGIyNTBaWGgwTG5kcGRHaERiMjUwWlhoMExGeHVYRzRnSUM4dklFaHZiMnNnWm05eUlFcFRXQ0J6Y0hKbFlXUXNJR1J2YmlkMElIVnpaU0IwYUdseklHWnZjaUJoYm5sMGFHbHVaeUJsYkhObExseHVJQ0JmWDNOd2NtVmhaRG9nWVhOemFXZHVYRzU5TzF4dVhHNHZMeUJKYm1wbFkzUWdkR2hsSUhKMWJuUnBiV1VnYVc1MGJ5QmhJR1JsZG5SdmIyeHpJR2RzYjJKaGJDQm9iMjlySUhKbFoyRnlaR3hsYzNNZ2IyWWdZbkp2ZDNObGNpNWNiaTh2SUVGc2JHOTNjeUJtYjNJZ1pHVmlkV2RuYVc1bklIZG9aVzRnZEdobElHaHZiMnNnYVhNZ2FXNXFaV04wWldRZ2IyNGdkR2hsSUhCaFoyVXVYRzVwWmlBb1hHNGdJSFI1Y0dWdlppQmZYMUpGUVVOVVgwUkZWbFJQVDB4VFgwZE1UMEpCVEY5SVQwOUxYMThnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltWEc0Z0lIUjVjR1Z2WmlCZlgxSkZRVU5VWDBSRlZsUlBUMHhUWDBkTVQwSkJURjlJVDA5TFgxOHVhVzVxWldOMElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJRjlmVWtWQlExUmZSRVZXVkU5UFRGTmZSMHhQUWtGTVgwaFBUMHRmWHk1cGJtcGxZM1FvZTF4dUlDQWdJRU4xY25KbGJuUlBkMjVsY2pvZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJc1hHNGdJQ0FnU1c1emRHRnVZMlZJWVc1a2JHVnpPaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3l4Y2JpQWdJQ0JOYjNWdWREb2dVbVZoWTNSTmIzVnVkQ3hjYmlBZ0lDQlNaV052Ym1OcGJHVnlPaUJTWldGamRGSmxZMjl1WTJsc1pYSXNYRzRnSUNBZ1ZHVjRkRU52YlhCdmJtVnVkRG9nVW1WaFkzUkVUMDFVWlhoMFEyOXRjRzl1Wlc1MFhHNGdJSDBwTzF4dWZWeHVYRzVwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lIWmhjaUJGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMFY0WldOMWRHbHZia1Z1ZG1seWIyNXRaVzUwWENJcE8xeHVJQ0JwWmlBb1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUXVZMkZ1VlhObFJFOU5JQ1ltSUhkcGJtUnZkeTUwYjNBZ1BUMDlJSGRwYm1SdmR5NXpaV3htS1NCN1hHNWNiaUFnSUNBdkx5QkpaaUIzWlNkeVpTQnBiaUJEYUhKdmJXVXNJR3h2YjJzZ1ptOXlJSFJvWlNCa1pYWjBiMjlzY3lCdFlYSnJaWElnWVc1a0lIQnliM1pwWkdVZ1lTQmtiM2R1Ykc5aFpGeHVJQ0FnSUM4dklHeHBibXNnYVdZZ2JtOTBJR2x1YzNSaGJHeGxaQzVjYmlBZ0lDQnBaaUFvYm1GMmFXZGhkRzl5TG5WelpYSkJaMlZ1ZEM1cGJtUmxlRTltS0NkRGFISnZiV1VuS1NBK0lDMHhLU0I3WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUY5ZlVrVkJRMVJmUkVWV1ZFOVBURk5mUjB4UFFrRk1YMGhQVDB0Zlh5QTlQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWtaV0oxWnloY2JpQWdJQ0FnSUNBZ0lDQW5SRzkzYm14dllXUWdkR2hsSUZKbFlXTjBJRVJsZGxSdmIyeHpJR1p2Y2lCaElHSmxkSFJsY2lCa1pYWmxiRzl3YldWdWRDQmxlSEJsY21sbGJtTmxPaUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5hSFIwY0hNNkx5OW1ZaTV0WlM5eVpXRmpkQzFrWlhaMGIyOXNjeWRjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ1pYaHdaV04wWldSR1pXRjBkWEpsY3lBOUlGdGNiaUFnSUNBZ0lDOHZJSE5vYVcxelhHNGdJQ0FnSUNCQmNuSmhlUzVwYzBGeWNtRjVMRnh1SUNBZ0lDQWdRWEp5WVhrdWNISnZkRzkwZVhCbExtVjJaWEo1TEZ4dUlDQWdJQ0FnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbVp2Y2tWaFkyZ3NYRzRnSUNBZ0lDQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdWFXNWtaWGhQWml4Y2JpQWdJQ0FnSUVGeWNtRjVMbkJ5YjNSdmRIbHdaUzV0WVhBc1hHNGdJQ0FnSUNCRVlYUmxMbTV2ZHl4Y2JpQWdJQ0FnSUVaMWJtTjBhVzl1TG5CeWIzUnZkSGx3WlM1aWFXNWtMRnh1SUNBZ0lDQWdUMkpxWldOMExtdGxlWE1zWEc0Z0lDQWdJQ0JUZEhKcGJtY3VjSEp2ZEc5MGVYQmxMbk53YkdsMExGeHVJQ0FnSUNBZ1UzUnlhVzVuTG5CeWIzUnZkSGx3WlM1MGNtbHRMRnh1WEc0Z0lDQWdJQ0F2THlCemFHRnRjMXh1SUNBZ0lDQWdUMkpxWldOMExtTnlaV0YwWlN4Y2JpQWdJQ0FnSUU5aWFtVmpkQzVtY21WbGVtVmNiaUFnSUNCZE8xeHVYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQmxlSEJsWTNSbFpFWmxZWFIxY21WekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lXVjRjR1ZqZEdWa1JtVmhkSFZ5WlhOYmFWMHBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpaGNiaUFnSUNBZ0lDQWdJQ0FuVDI1bElHOXlJRzF2Y21VZ1JWTTFJSE5vYVcwdmMyaGhiWE1nWlhod1pXTjBaV1FnWW5rZ1VtVmhZM1FnWVhKbElHNXZkQ0JoZG1GcGJHRmliR1U2SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RvZEhSd2N6b3ZMMlppTG0xbEwzSmxZV04wTFhkaGNtNXBibWN0Y0c5c2VXWnBiR3h6SjF4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibjFjYmx4dVVtVmhZM1F1ZG1WeWMybHZiaUE5SUNjd0xqRXpMak1uTzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBmaW5kRE9NTm9kZSA9IHJlcXVpcmUoXCIuL2ZpbmRET01Ob2RlXCIpO1xuXG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBET00gbm9kZSByZW5kZXJlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybiB7RE9NRWxlbWVudH0gVGhlIHJvb3Qgbm9kZSBvZiB0aGlzIGNvbXBvbmVudC5cbiAgICogQGZpbmFsXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIGdldERPTU5vZGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kRE9NTm9kZSh0aGlzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luSHViXCIpO1xudmFyIEV2ZW50UGx1Z2luUmVnaXN0cnkgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpblJlZ2lzdHJ5XCIpO1xudmFyIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEV2ZW50RW1pdHRlck1peGluXCIpO1xudmFyIFZpZXdwb3J0TWV0cmljcyA9IHJlcXVpcmUoXCIuL1ZpZXdwb3J0TWV0cmljc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaXNFdmVudFN1cHBvcnRlZCA9IHJlcXVpcmUoXCIuL2lzRXZlbnRTdXBwb3J0ZWRcIik7XG5cbi8qKlxuICogU3VtbWFyeSBvZiBgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyYCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgLSBUb3AtbGV2ZWwgZGVsZWdhdGlvbiBpcyB1c2VkIHRvIHRyYXAgbW9zdCBuYXRpdmUgYnJvd3NlciBldmVudHMuIFRoaXNcbiAqICAgIG1heSBvbmx5IG9jY3VyIGluIHRoZSBtYWluIHRocmVhZCBhbmQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mXG4gKiAgICBSZWFjdEV2ZW50TGlzdGVuZXIsIHdoaWNoIGlzIGluamVjdGVkIGFuZCBjYW4gdGhlcmVmb3JlIHN1cHBvcnQgcGx1Z2dhYmxlXG4gKiAgICBldmVudCBzb3VyY2VzLiBUaGlzIGlzIHRoZSBvbmx5IHdvcmsgdGhhdCBvY2N1cnMgaW4gdGhlIG1haW4gdGhyZWFkLlxuICpcbiAqICAtIFdlIG5vcm1hbGl6ZSBhbmQgZGUtZHVwbGljYXRlIGV2ZW50cyB0byBhY2NvdW50IGZvciBicm93c2VyIHF1aXJrcy4gVGhpc1xuICogICAgbWF5IGJlIGRvbmUgaW4gdGhlIHdvcmtlciB0aHJlYWQuXG4gKlxuICogIC0gRm9yd2FyZCB0aGVzZSBuYXRpdmUgZXZlbnRzICh3aXRoIHRoZSBhc3NvY2lhdGVkIHRvcC1sZXZlbCB0eXBlIHVzZWQgdG9cbiAqICAgIHRyYXAgaXQpIHRvIGBFdmVudFBsdWdpbkh1YmAsIHdoaWNoIGluIHR1cm4gd2lsbCBhc2sgcGx1Z2lucyBpZiB0aGV5IHdhbnRcbiAqICAgIHRvIGV4dHJhY3QgYW55IHN5bnRoZXRpYyBldmVudHMuXG4gKlxuICogIC0gVGhlIGBFdmVudFBsdWdpbkh1YmAgd2lsbCB0aGVuIHByb2Nlc3MgZWFjaCBldmVudCBieSBhbm5vdGF0aW5nIHRoZW0gd2l0aFxuICogICAgXCJkaXNwYXRjaGVzXCIsIGEgc2VxdWVuY2Ugb2YgbGlzdGVuZXJzIGFuZCBJRHMgdGhhdCBjYXJlIGFib3V0IHRoYXQgZXZlbnQuXG4gKlxuICogIC0gVGhlIGBFdmVudFBsdWdpbkh1YmAgdGhlbiBkaXNwYXRjaGVzIHRoZSBldmVudHMuXG4gKlxuICogT3ZlcnZpZXcgb2YgUmVhY3QgYW5kIHRoZSBldmVudCBzeXN0ZW06XG4gKlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogfCAgICBET00gICAgIHwgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogICAgICAgfCAgICAgICAgICAgLlxuICogICAgICAgdiAgICAgICAgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogfCBSZWFjdEV2ZW50IHwgICAgLlxuICogfCAgTGlzdGVuZXIgIHwgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgICAgICAgKy0tLS0tLS0tK3xTaW1wbGVFdmVudHxcbiAqICAgICAgIHwgICAgICAgICAgIC4gICAgICAgICAgICAgICB8ICAgICAgICAgfFBsdWdpbiAgICAgfFxuICogKy0tLS0tfC0tLS0tLSsgICAgLiAgICAgICAgICAgICAgIHYgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiB8ICAgICB8ICAgICAgfCAgICAuICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rXG4gKiB8ICAgICArLS0tLS0tLS0tLS0uLS0tPnxFdmVudFBsdWdpbkh1YnwgICAgICAgICAgICAgICAgICAgIHwgICAgRXZlbnQgICB8XG4gKiB8ICAgICAgICAgICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgIHwgUHJvcGFnYXRvcnN8XG4gKiB8IFJlYWN0RXZlbnQgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgIHxUYXBFdmVudCAgIHwgIHwtLS0tLS0tLS0tLS18XG4gKiB8ICBFbWl0dGVyICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHw8LS0tK3xQbHVnaW4gICAgIHwgIHxvdGhlciBwbHVnaW58XG4gKiB8ICAgICAgICAgICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgIHwgIHV0aWxpdGllcyB8XG4gKiB8ICAgICArLS0tLS0tLS0tLS0uLS0tPnwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rXG4gKiB8ICAgICB8ICAgICAgfCAgICAuICAgICstLS0tLS0tLS0tLS0tLStcbiAqICstLS0tLXwtLS0tLS0rICAgIC4gICAgICAgICAgICAgICAgXiAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgICB8ICAgICAgICB8RW50ZXIvTGVhdmV8XG4gKiAgICAgICArICAgICAgICAgICAuICAgICAgICAgICAgICAgICstLS0tLS0tK3xQbHVnaW4gICAgIHxcbiAqICstLS0tLS0tLS0tLS0tKyAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogfCBhcHBsaWNhdGlvbiB8ICAgLlxuICogfC0tLS0tLS0tLS0tLS18ICAgLlxuICogfCAgICAgICAgICAgICB8ICAgLlxuICogfCAgICAgICAgICAgICB8ICAgLlxuICogKy0tLS0tLS0tLS0tLS0rICAgLlxuICogICAgICAgICAgICAgICAgICAgLlxuICogICAgUmVhY3QgQ29yZSAgICAgLiAgR2VuZXJhbCBQdXJwb3NlIEV2ZW50IFBsdWdpbiBTeXN0ZW1cbiAqL1xuXG52YXIgYWxyZWFkeUxpc3RlbmluZ1RvID0ge307XG52YXIgaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUgPSBmYWxzZTtcbnZhciByZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIgPSAwO1xuXG4vLyBGb3IgZXZlbnRzIGxpa2UgJ3N1Ym1pdCcgd2hpY2ggZG9uJ3QgY29uc2lzdGVudGx5IGJ1YmJsZSAod2hpY2ggd2UgdHJhcCBhdCBhXG4vLyBsb3dlciBub2RlIHRoYW4gYGRvY3VtZW50YCksIGJpbmRpbmcgYXQgYGRvY3VtZW50YCB3b3VsZCBjYXVzZSBkdXBsaWNhdGVcbi8vIGV2ZW50cyBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaGVyZVxudmFyIHRvcEV2ZW50TWFwcGluZyA9IHtcbiAgdG9wQmx1cjogJ2JsdXInLFxuICB0b3BDaGFuZ2U6ICdjaGFuZ2UnLFxuICB0b3BDbGljazogJ2NsaWNrJyxcbiAgdG9wQ29tcG9zaXRpb25FbmQ6ICdjb21wb3NpdGlvbmVuZCcsXG4gIHRvcENvbXBvc2l0aW9uU3RhcnQ6ICdjb21wb3NpdGlvbnN0YXJ0JyxcbiAgdG9wQ29tcG9zaXRpb25VcGRhdGU6ICdjb21wb3NpdGlvbnVwZGF0ZScsXG4gIHRvcENvbnRleHRNZW51OiAnY29udGV4dG1lbnUnLFxuICB0b3BDb3B5OiAnY29weScsXG4gIHRvcEN1dDogJ2N1dCcsXG4gIHRvcERvdWJsZUNsaWNrOiAnZGJsY2xpY2snLFxuICB0b3BEcmFnOiAnZHJhZycsXG4gIHRvcERyYWdFbmQ6ICdkcmFnZW5kJyxcbiAgdG9wRHJhZ0VudGVyOiAnZHJhZ2VudGVyJyxcbiAgdG9wRHJhZ0V4aXQ6ICdkcmFnZXhpdCcsXG4gIHRvcERyYWdMZWF2ZTogJ2RyYWdsZWF2ZScsXG4gIHRvcERyYWdPdmVyOiAnZHJhZ292ZXInLFxuICB0b3BEcmFnU3RhcnQ6ICdkcmFnc3RhcnQnLFxuICB0b3BEcm9wOiAnZHJvcCcsXG4gIHRvcEZvY3VzOiAnZm9jdXMnLFxuICB0b3BJbnB1dDogJ2lucHV0JyxcbiAgdG9wS2V5RG93bjogJ2tleWRvd24nLFxuICB0b3BLZXlQcmVzczogJ2tleXByZXNzJyxcbiAgdG9wS2V5VXA6ICdrZXl1cCcsXG4gIHRvcE1vdXNlRG93bjogJ21vdXNlZG93bicsXG4gIHRvcE1vdXNlTW92ZTogJ21vdXNlbW92ZScsXG4gIHRvcE1vdXNlT3V0OiAnbW91c2VvdXQnLFxuICB0b3BNb3VzZU92ZXI6ICdtb3VzZW92ZXInLFxuICB0b3BNb3VzZVVwOiAnbW91c2V1cCcsXG4gIHRvcFBhc3RlOiAncGFzdGUnLFxuICB0b3BTY3JvbGw6ICdzY3JvbGwnLFxuICB0b3BTZWxlY3Rpb25DaGFuZ2U6ICdzZWxlY3Rpb25jaGFuZ2UnLFxuICB0b3BUZXh0SW5wdXQ6ICd0ZXh0SW5wdXQnLFxuICB0b3BUb3VjaENhbmNlbDogJ3RvdWNoY2FuY2VsJyxcbiAgdG9wVG91Y2hFbmQ6ICd0b3VjaGVuZCcsXG4gIHRvcFRvdWNoTW92ZTogJ3RvdWNobW92ZScsXG4gIHRvcFRvdWNoU3RhcnQ6ICd0b3VjaHN0YXJ0JyxcbiAgdG9wV2hlZWw6ICd3aGVlbCdcbn07XG5cbi8qKlxuICogVG8gZW5zdXJlIG5vIGNvbmZsaWN0cyB3aXRoIG90aGVyIHBvdGVudGlhbCBSZWFjdCBpbnN0YW5jZXMgb24gdGhlIHBhZ2VcbiAqL1xudmFyIHRvcExpc3RlbmVyc0lES2V5ID0gJ19yZWFjdExpc3RlbmVyc0lEJyArIFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKTtcblxuZnVuY3Rpb24gZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQobW91bnRBdCkge1xuICAvLyBJbiBJRTgsIGBtb3VudEF0YCBpcyBhIGhvc3Qgb2JqZWN0IGFuZCBkb2Vzbid0IGhhdmUgYGhhc093blByb3BlcnR5YFxuICAvLyBkaXJlY3RseS5cbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW91bnRBdCwgdG9wTGlzdGVuZXJzSURLZXkpKSB7XG4gICAgbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV0gPSByZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIrKztcbiAgICBhbHJlYWR5TGlzdGVuaW5nVG9bbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV1dID0ge307XG4gIH1cbiAgcmV0dXJuIGFscmVhZHlMaXN0ZW5pbmdUb1ttb3VudEF0W3RvcExpc3RlbmVyc0lES2V5XV07XG59XG5cbi8qKlxuICogYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgaXMgdXNlZCB0byBhdHRhY2ggdG9wLWxldmVsIGV2ZW50IGxpc3RlbmVycy4gRm9yXG4gKiBleGFtcGxlOlxuICpcbiAqICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnB1dExpc3RlbmVyKCdteUlEJywgJ29uQ2xpY2snLCBteUZ1bmN0aW9uKTtcbiAqXG4gKiBUaGlzIHdvdWxkIGFsbG9jYXRlIGEgXCJyZWdpc3RyYXRpb25cIiBvZiBgKCdvbkNsaWNrJywgbXlGdW5jdGlvbilgIG9uICdteUlEJy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IGFzc2lnbih7fSwgUmVhY3RFdmVudEVtaXR0ZXJNaXhpbiwge1xuXG4gIC8qKlxuICAgKiBJbmplY3RhYmxlIGV2ZW50IGJhY2tlbmRcbiAgICovXG4gIFJlYWN0RXZlbnRMaXN0ZW5lcjogbnVsbCxcblxuICBpbmplY3Rpb246IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gUmVhY3RFdmVudExpc3RlbmVyXG4gICAgICovXG4gICAgaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyOiBmdW5jdGlvbihSZWFjdEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5zZXRIYW5kbGVUb3BMZXZlbChcbiAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmhhbmRsZVRvcExldmVsXG4gICAgICApO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lciA9IFJlYWN0RXZlbnRMaXN0ZW5lcjtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgd2hldGhlciBvciBub3QgYW55IGNyZWF0ZWQgY2FsbGJhY2tzIHNob3VsZCBiZSBlbmFibGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgVHJ1ZSBpZiBjYWxsYmFja3Mgc2hvdWxkIGJlIGVuYWJsZWQuXG4gICAqL1xuICBzZXRFbmFibGVkOiBmdW5jdGlvbihlbmFibGVkKSB7XG4gICAgaWYgKFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIuc2V0RW5hYmxlZChlbmFibGVkKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgY2FsbGJhY2tzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgaXNFbmFibGVkOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gISEoXG4gICAgICAoUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lciAmJiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLmlzRW5hYmxlZCgpKVxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdlIGxpc3RlbiBmb3IgYnViYmxlZCB0b3VjaCBldmVudHMgb24gdGhlIGRvY3VtZW50IG9iamVjdC5cbiAgICpcbiAgICogRmlyZWZveCB2OC4wMSAoYW5kIHBvc3NpYmx5IG90aGVycykgZXhoaWJpdGVkIHN0cmFuZ2UgYmVoYXZpb3Igd2hlblxuICAgKiBtb3VudGluZyBgb25tb3VzZW1vdmVgIGV2ZW50cyBhdCBzb21lIG5vZGUgdGhhdCB3YXMgbm90IHRoZSBkb2N1bWVudFxuICAgKiBlbGVtZW50LiBUaGUgc3ltcHRvbXMgd2VyZSB0aGF0IGlmIHlvdXIgbW91c2UgaXMgbm90IG1vdmluZyBvdmVyIHNvbWV0aGluZ1xuICAgKiBjb250YWluZWQgd2l0aGluIHRoYXQgbW91bnQgcG9pbnQgKGZvciBleGFtcGxlIG9uIHRoZSBiYWNrZ3JvdW5kKSB0aGVcbiAgICogdG9wLWxldmVsIGxpc3RlbmVycyBmb3IgYG9ubW91c2Vtb3ZlYCB3b24ndCBiZSBjYWxsZWQuIEhvd2V2ZXIsIGlmIHlvdVxuICAgKiByZWdpc3RlciB0aGUgYG1vdXNlbW92ZWAgb24gdGhlIGRvY3VtZW50IG9iamVjdCwgdGhlbiBpdCB3aWxsIG9mIGNvdXJzZVxuICAgKiBjYXRjaCBhbGwgYG1vdXNlbW92ZWBzLiBUaGlzIGFsb25nIHdpdGggaU9TIHF1aXJrcywganVzdGlmaWVzIHJlc3RyaWN0aW5nXG4gICAqIHRvcC1sZXZlbCBsaXN0ZW5lcnMgdG8gdGhlIGRvY3VtZW50IG9iamVjdCBvbmx5LCBhdCBsZWFzdCBmb3IgdGhlc2VcbiAgICogbW92ZW1lbnQgdHlwZXMgb2YgZXZlbnRzIGFuZCBwb3NzaWJseSBhbGwgZXZlbnRzLlxuICAgKlxuICAgKiBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gICAqXG4gICAqIEFsc28sIGBrZXl1cGAvYGtleXByZXNzYC9ga2V5ZG93bmAgZG8gbm90IGJ1YmJsZSB0byB0aGUgd2luZG93IG9uIElFLCBidXRcbiAgICogdGhleSBidWJibGUgdG8gZG9jdW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRlbnREb2N1bWVudEhhbmRsZSBEb2N1bWVudCB3aGljaCBvd25zIHRoZSBjb250YWluZXJcbiAgICovXG4gIGxpc3RlblRvOiBmdW5jdGlvbihyZWdpc3RyYXRpb25OYW1lLCBjb250ZW50RG9jdW1lbnRIYW5kbGUpIHtcbiAgICB2YXIgbW91bnRBdCA9IGNvbnRlbnREb2N1bWVudEhhbmRsZTtcbiAgICB2YXIgaXNMaXN0ZW5pbmcgPSBnZXRMaXN0ZW5pbmdGb3JEb2N1bWVudChtb3VudEF0KTtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5cbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgICB2YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBkZXBlbmRlbmNpZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY2llc1tpXTtcbiAgICAgIGlmICghKFxuICAgICAgICAgICAgKGlzTGlzdGVuaW5nLmhhc093blByb3BlcnR5KGRlcGVuZGVuY3kpICYmIGlzTGlzdGVuaW5nW2RlcGVuZGVuY3ldKVxuICAgICAgICAgICkpIHtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09IHRvcExldmVsVHlwZXMudG9wV2hlZWwpIHtcbiAgICAgICAgICBpZiAoaXNFdmVudFN1cHBvcnRlZCgnd2hlZWwnKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFdoZWVsLFxuICAgICAgICAgICAgICAnd2hlZWwnLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNFdmVudFN1cHBvcnRlZCgnbW91c2V3aGVlbCcpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wV2hlZWwsXG4gICAgICAgICAgICAgICdtb3VzZXdoZWVsJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmlyZWZveCBuZWVkcyB0byBjYXB0dXJlIGEgZGlmZmVyZW50IG1vdXNlIHNjcm9sbCBldmVudC5cbiAgICAgICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vZXZlbnRzL3Rlc3RzL3Njcm9sbC5odG1sXG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wV2hlZWwsXG4gICAgICAgICAgICAgICdET01Nb3VzZVNjcm9sbCcsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09IHRvcExldmVsVHlwZXMudG9wU2Nyb2xsKSB7XG5cbiAgICAgICAgICBpZiAoaXNFdmVudFN1cHBvcnRlZCgnc2Nyb2xsJywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wU2Nyb2xsLFxuICAgICAgICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFNjcm9sbCxcbiAgICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIuV0lORE9XX0hBTkRMRVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGVwZW5kZW5jeSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BGb2N1cyB8fFxuICAgICAgICAgICAgZGVwZW5kZW5jeSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BCbHVyKSB7XG5cbiAgICAgICAgICBpZiAoaXNFdmVudFN1cHBvcnRlZCgnZm9jdXMnLCB0cnVlKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQ2FwdHVyZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BGb2N1cyxcbiAgICAgICAgICAgICAgJ2ZvY3VzJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgICAgICAgICAgJ2JsdXInLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNFdmVudFN1cHBvcnRlZCgnZm9jdXNpbicpKSB7XG4gICAgICAgICAgICAvLyBJRSBoYXMgYGZvY3VzaW5gIGFuZCBgZm9jdXNvdXRgIGV2ZW50cyB3aGljaCBidWJibGUuXG4gICAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDA4LzA0L2RlbGVnYXRpbmdfdGhlLmh0bWxcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BGb2N1cyxcbiAgICAgICAgICAgICAgJ2ZvY3VzaW4nLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcEJsdXIsXG4gICAgICAgICAgICAgICdmb2N1c291dCcsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIGJsdXIgYW5kIGZvY3VzIGV2ZW50IGxpc3RlbmVycyBhcmUgb25seSBhdHRhY2hlZCBvbmNlXG4gICAgICAgICAgaXNMaXN0ZW5pbmdbdG9wTGV2ZWxUeXBlcy50b3BCbHVyXSA9IHRydWU7XG4gICAgICAgICAgaXNMaXN0ZW5pbmdbdG9wTGV2ZWxUeXBlcy50b3BGb2N1c10gPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRvcEV2ZW50TWFwcGluZy5oYXNPd25Qcm9wZXJ0eShkZXBlbmRlbmN5KSkge1xuICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgIGRlcGVuZGVuY3ksXG4gICAgICAgICAgICB0b3BFdmVudE1hcHBpbmdbZGVwZW5kZW5jeV0sXG4gICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzTGlzdGVuaW5nW2RlcGVuZGVuY3ldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdHJhcEJ1YmJsZWRFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHJldHVybiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICBoYW5kbGVyQmFzZU5hbWUsXG4gICAgICBoYW5kbGVcbiAgICApO1xuICB9LFxuXG4gIHRyYXBDYXB0dXJlZEV2ZW50OiBmdW5jdGlvbih0b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSwgaGFuZGxlKSB7XG4gICAgcmV0dXJuIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICBoYW5kbGVyQmFzZU5hbWUsXG4gICAgICBoYW5kbGVcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIHRvIHdpbmRvdyBzY3JvbGwgYW5kIHJlc2l6ZSBldmVudHMuIFdlIGNhY2hlIHNjcm9sbCB2YWx1ZXMgc28gdGhhdFxuICAgKiBhcHBsaWNhdGlvbiBjb2RlIGNhbiBhY2Nlc3MgdGhlbSB3aXRob3V0IHRyaWdnZXJpbmcgcmVmbG93cy5cbiAgICpcbiAgICogTk9URTogU2Nyb2xsIGV2ZW50cyBkbyBub3QgYnViYmxlLlxuICAgKlxuICAgKiBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL2V2ZW50cy9zY3JvbGwuaHRtbFxuICAgKi9cbiAgZW5zdXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoIWlzTW9uaXRvcmluZ1Njcm9sbFZhbHVlKSB7XG4gICAgICB2YXIgcmVmcmVzaCA9IFZpZXdwb3J0TWV0cmljcy5yZWZyZXNoU2Nyb2xsVmFsdWVzO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci5tb25pdG9yU2Nyb2xsVmFsdWUocmVmcmVzaCk7XG4gICAgICBpc01vbml0b3JpbmdTY3JvbGxWYWx1ZSA9IHRydWU7XG4gICAgfVxuICB9LFxuXG4gIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnczogRXZlbnRQbHVnaW5IdWIuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLFxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzOiBFdmVudFBsdWdpbkh1Yi5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcyxcblxuICBwdXRMaXN0ZW5lcjogRXZlbnRQbHVnaW5IdWIucHV0TGlzdGVuZXIsXG5cbiAgZ2V0TGlzdGVuZXI6IEV2ZW50UGx1Z2luSHViLmdldExpc3RlbmVyLFxuXG4gIGRlbGV0ZUxpc3RlbmVyOiBFdmVudFBsdWdpbkh1Yi5kZWxldGVMaXN0ZW5lcixcblxuICBkZWxldGVBbGxMaXN0ZW5lcnM6IEV2ZW50UGx1Z2luSHViLmRlbGV0ZUFsbExpc3RlbmVyc1xuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKFwiLi9SZWFjdFwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG5cbnZhciBSZWFjdFRyYW5zaXRpb25Hcm91cCA9IFJlYWN0LmNyZWF0ZUZhY3RvcnkoXG4gIHJlcXVpcmUoXCIuL1JlYWN0VHJhbnNpdGlvbkdyb3VwXCIpXG4pO1xudmFyIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQgPSBSZWFjdC5jcmVhdGVGYWN0b3J5KFxuICByZXF1aXJlKFwiLi9SZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkXCIpXG4pO1xuXG52YXIgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAnLFxuXG4gIHByb3BUeXBlczoge1xuICAgIHRyYW5zaXRpb25OYW1lOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdHJhbnNpdGlvbkFwcGVhcjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gICAgdHJhbnNpdGlvbkVudGVyOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgICB0cmFuc2l0aW9uTGVhdmU6IFJlYWN0LlByb3BUeXBlcy5ib29sXG4gIH0sXG5cbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNpdGlvbkFwcGVhcjogZmFsc2UsXG4gICAgICB0cmFuc2l0aW9uRW50ZXI6IHRydWUsXG4gICAgICB0cmFuc2l0aW9uTGVhdmU6IHRydWVcbiAgICB9O1xuICB9LFxuXG4gIF93cmFwQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgLy8gV2UgbmVlZCB0byBwcm92aWRlIHRoaXMgY2hpbGRGYWN0b3J5IHNvIHRoYXRcbiAgICAvLyBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkIGNhbiByZWNlaXZlIHVwZGF0ZXMgdG8gbmFtZSwgZW50ZXIsIGFuZFxuICAgIC8vIGxlYXZlIHdoaWxlIGl0IGlzIGxlYXZpbmcuXG4gICAgcmV0dXJuIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IHRoaXMucHJvcHMudHJhbnNpdGlvbk5hbWUsXG4gICAgICAgIGFwcGVhcjogdGhpcy5wcm9wcy50cmFuc2l0aW9uQXBwZWFyLFxuICAgICAgICBlbnRlcjogdGhpcy5wcm9wcy50cmFuc2l0aW9uRW50ZXIsXG4gICAgICAgIGxlYXZlOiB0aGlzLnByb3BzLnRyYW5zaXRpb25MZWF2ZVxuICAgICAgfSxcbiAgICAgIGNoaWxkXG4gICAgKTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICBSZWFjdFRyYW5zaXRpb25Hcm91cChcbiAgICAgICAgYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7Y2hpbGRGYWN0b3J5OiB0aGlzLl93cmFwQ2hpbGR9KVxuICAgICAgKVxuICAgICk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIi4vUmVhY3RcIik7XG5cbnZhciBDU1NDb3JlID0gcmVxdWlyZShcIi4vQ1NTQ29yZVwiKTtcbnZhciBSZWFjdFRyYW5zaXRpb25FdmVudHMgPSByZXF1aXJlKFwiLi9SZWFjdFRyYW5zaXRpb25FdmVudHNcIik7XG5cbnZhciBvbmx5Q2hpbGQgPSByZXF1aXJlKFwiLi9vbmx5Q2hpbGRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbi8vIFdlIGRvbid0IHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHRoZSBET00gdW50aWwgd2UgcmVjZWl2ZSBhbiBhbmltYXRpb25lbmQgb3Jcbi8vIHRyYW5zaXRpb25lbmQgZXZlbnQuIElmIHRoZSB1c2VyIHNjcmV3cyB1cCBhbmQgZm9yZ2V0cyB0byBhZGQgYW4gYW5pbWF0aW9uXG4vLyB0aGVpciBub2RlIHdpbGwgYmUgc3R1Y2sgaW4gdGhlIERPTSBmb3JldmVyLCBzbyB3ZSBkZXRlY3QgaWYgYW4gYW5pbWF0aW9uXG4vLyBkb2VzIG5vdCBzdGFydCBhbmQgaWYgaXQgZG9lc24ndCwgd2UganVzdCBjYWxsIHRoZSBlbmQgbGlzdGVuZXIgaW1tZWRpYXRlbHkuXG52YXIgVElDSyA9IDE3O1xudmFyIE5PX0VWRU5UX1RJTUVPVVQgPSA1MDAwO1xuXG52YXIgbm9FdmVudExpc3RlbmVyID0gbnVsbDtcblxuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIG5vRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgZmFsc2UsXG4gICAgICAndHJhbnNpdGlvbigpOiB0cmllZCB0byBwZXJmb3JtIGFuIGFuaW1hdGlvbiB3aXRob3V0ICcgK1xuICAgICAgJ2FuIGFuaW1hdGlvbmVuZCBvciB0cmFuc2l0aW9uZW5kIGV2ZW50IGFmdGVyIHRpbWVvdXQgKCcgK1xuICAgICAgJyVzbXMpLiBZb3Ugc2hvdWxkIGVpdGhlciBkaXNhYmxlIHRoaXMgJyArXG4gICAgICAndHJhbnNpdGlvbiBpbiBKUyBvciBhZGQgYSBDU1MgYW5pbWF0aW9uL3RyYW5zaXRpb24uJyxcbiAgICAgIE5PX0VWRU5UX1RJTUVPVVRcbiAgICApIDogbnVsbCk7XG4gIH07XG59XG5cbnZhciBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQnLFxuXG4gIHRyYW5zaXRpb246IGZ1bmN0aW9uKGFuaW1hdGlvblR5cGUsIGZpbmlzaENhbGxiYWNrKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5uYW1lICsgJy0nICsgYW5pbWF0aW9uVHlwZTtcbiAgICB2YXIgYWN0aXZlQ2xhc3NOYW1lID0gY2xhc3NOYW1lICsgJy1hY3RpdmUnO1xuICAgIHZhciBub0V2ZW50VGltZW91dCA9IG51bGw7XG5cbiAgICB2YXIgZW5kTGlzdGVuZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gbm9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChub0V2ZW50VGltZW91dCk7XG4gICAgICB9XG5cbiAgICAgIENTU0NvcmUucmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcbiAgICAgIENTU0NvcmUucmVtb3ZlQ2xhc3Mobm9kZSwgYWN0aXZlQ2xhc3NOYW1lKTtcblxuICAgICAgUmVhY3RUcmFuc2l0aW9uRXZlbnRzLnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIpO1xuXG4gICAgICAvLyBVc3VhbGx5IHRoaXMgb3B0aW9uYWwgY2FsbGJhY2sgaXMgdXNlZCBmb3IgaW5mb3JtaW5nIGFuIG93bmVyIG9mXG4gICAgICAvLyBhIGxlYXZlIGFuaW1hdGlvbiBhbmQgdGVsbGluZyBpdCB0byByZW1vdmUgdGhlIGNoaWxkLlxuICAgICAgaWYgKGZpbmlzaENhbGxiYWNrKSB7XG4gICAgICAgIGZpbmlzaENhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFJlYWN0VHJhbnNpdGlvbkV2ZW50cy5hZGRFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTtcblxuICAgIENTU0NvcmUuYWRkQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcblxuICAgIC8vIE5lZWQgdG8gZG8gdGhpcyB0byBhY3R1YWxseSB0cmlnZ2VyIGEgdHJhbnNpdGlvbi5cbiAgICB0aGlzLnF1ZXVlQ2xhc3MoYWN0aXZlQ2xhc3NOYW1lKTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIG5vRXZlbnRUaW1lb3V0ID0gc2V0VGltZW91dChub0V2ZW50TGlzdGVuZXIsIE5PX0VWRU5UX1RJTUVPVVQpO1xuICAgIH1cbiAgfSxcblxuICBxdWV1ZUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUpIHtcbiAgICB0aGlzLmNsYXNzTmFtZVF1ZXVlLnB1c2goY2xhc3NOYW1lKTtcblxuICAgIGlmICghdGhpcy50aW1lb3V0KSB7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuZmx1c2hDbGFzc05hbWVRdWV1ZSwgVElDSyk7XG4gICAgfVxuICB9LFxuXG4gIGZsdXNoQ2xhc3NOYW1lUXVldWU6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzTW91bnRlZCgpKSB7XG4gICAgICB0aGlzLmNsYXNzTmFtZVF1ZXVlLmZvckVhY2goXG4gICAgICAgIENTU0NvcmUuYWRkQ2xhc3MuYmluZChDU1NDb3JlLCB0aGlzLmdldERPTU5vZGUoKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUubGVuZ3RoID0gMDtcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbGFzc05hbWVRdWV1ZSA9IFtdO1xuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbEFwcGVhcjogZnVuY3Rpb24oZG9uZSkge1xuICAgIGlmICh0aGlzLnByb3BzLmFwcGVhcikge1xuICAgICAgdGhpcy50cmFuc2l0aW9uKCdhcHBlYXInLCBkb25lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZSgpO1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRXaWxsRW50ZXI6IGZ1bmN0aW9uKGRvbmUpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5lbnRlcikge1xuICAgICAgdGhpcy50cmFuc2l0aW9uKCdlbnRlcicsIGRvbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb25lKCk7XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxMZWF2ZTogZnVuY3Rpb24oZG9uZSkge1xuICAgIGlmICh0aGlzLnByb3BzLmxlYXZlKSB7XG4gICAgICB0aGlzLnRyYW5zaXRpb24oJ2xlYXZlJywgZG9uZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbmUoKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb25seUNoaWxkKHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRVMU5VY21GdWMybDBhVzl1UjNKdmRYQkRhR2xzWkM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCMGVYQmxZMmhsWTJ0elhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRFUxTlVjbUZ1YzJsMGFXOXVSM0p2ZFhCRGFHbHNaRnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUZKbFlXTjBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JjSWlrN1hHNWNiblpoY2lCRFUxTkRiM0psSUQwZ2NtVnhkV2x5WlNoY0lpNHZRMU5UUTI5eVpWd2lLVHRjYm5aaGNpQlNaV0ZqZEZSeVlXNXphWFJwYjI1RmRtVnVkSE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZSeVlXNXphWFJwYjI1RmRtVnVkSE5jSWlrN1hHNWNiblpoY2lCdmJteDVRMmhwYkdRZ1BTQnlaWEYxYVhKbEtGd2lMaTl2Ym14NVEyaHBiR1JjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYmk4dklGZGxJR1J2YmlkMElISmxiVzkyWlNCMGFHVWdaV3hsYldWdWRDQm1jbTl0SUhSb1pTQkVUMDBnZFc1MGFXd2dkMlVnY21WalpXbDJaU0JoYmlCaGJtbHRZWFJwYjI1bGJtUWdiM0pjYmk4dklIUnlZVzV6YVhScGIyNWxibVFnWlhabGJuUXVJRWxtSUhSb1pTQjFjMlZ5SUhOamNtVjNjeUIxY0NCaGJtUWdabTl5WjJWMGN5QjBieUJoWkdRZ1lXNGdZVzVwYldGMGFXOXVYRzR2THlCMGFHVnBjaUJ1YjJSbElIZHBiR3dnWW1VZ2MzUjFZMnNnYVc0Z2RHaGxJRVJQVFNCbWIzSmxkbVZ5TENCemJ5QjNaU0JrWlhSbFkzUWdhV1lnWVc0Z1lXNXBiV0YwYVc5dVhHNHZMeUJrYjJWeklHNXZkQ0J6ZEdGeWRDQmhibVFnYVdZZ2FYUWdaRzlsYzI0bmRDd2dkMlVnYW5WemRDQmpZV3hzSUhSb1pTQmxibVFnYkdsemRHVnVaWElnYVcxdFpXUnBZWFJsYkhrdVhHNTJZWElnVkVsRFN5QTlJREUzTzF4dWRtRnlJRTVQWDBWV1JVNVVYMVJKVFVWUFZWUWdQU0ExTURBd08xeHVYRzUyWVhJZ2JtOUZkbVZ1ZEV4cGMzUmxibVZ5SUQwZ2JuVnNiRHRjYmx4dVhHNXBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUc1dlJYWmxiblJNYVhOMFpXNWxjaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBbmRISmhibk5wZEdsdmJpZ3BPaUIwY21sbFpDQjBieUJ3WlhKbWIzSnRJR0Z1SUdGdWFXMWhkR2x2YmlCM2FYUm9iM1YwSUNjZ0sxeHVJQ0FnSUNBZ0oyRnVJR0Z1YVcxaGRHbHZibVZ1WkNCdmNpQjBjbUZ1YzJsMGFXOXVaVzVrSUdWMlpXNTBJR0ZtZEdWeUlIUnBiV1Z2ZFhRZ0tDY2dLMXh1SUNBZ0lDQWdKeVZ6YlhNcExpQlpiM1VnYzJodmRXeGtJR1ZwZEdobGNpQmthWE5oWW14bElIUm9hWE1nSnlBclhHNGdJQ0FnSUNBbmRISmhibk5wZEdsdmJpQnBiaUJLVXlCdmNpQmhaR1FnWVNCRFUxTWdZVzVwYldGMGFXOXVMM1J5WVc1emFYUnBiMjR1Snl4Y2JpQWdJQ0FnSUU1UFgwVldSVTVVWDFSSlRVVlBWVlJjYmlBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUgwN1hHNTlYRzVjYm5aaGNpQlNaV0ZqZEVOVFUxUnlZVzV6YVhScGIyNUhjbTkxY0VOb2FXeGtJRDBnVW1WaFkzUXVZM0psWVhSbFEyeGhjM01vZTF4dUlDQmthWE53YkdGNVRtRnRaVG9nSjFKbFlXTjBRMU5UVkhKaGJuTnBkR2x2YmtkeWIzVndRMmhwYkdRbkxGeHVYRzRnSUhSeVlXNXphWFJwYjI0NklHWjFibU4wYVc5dUtHRnVhVzFoZEdsdmJsUjVjR1VzSUdacGJtbHphRU5oYkd4aVlXTnJLU0I3WEc0Z0lDQWdkbUZ5SUc1dlpHVWdQU0IwYUdsekxtZGxkRVJQVFU1dlpHVW9LVHRjYmlBZ0lDQjJZWElnWTJ4aGMzTk9ZVzFsSUQwZ2RHaHBjeTV3Y205d2N5NXVZVzFsSUNzZ0p5MG5JQ3NnWVc1cGJXRjBhVzl1Vkhsd1pUdGNiaUFnSUNCMllYSWdZV04wYVhabFEyeGhjM05PWVcxbElEMGdZMnhoYzNOT1lXMWxJQ3NnSnkxaFkzUnBkbVVuTzF4dUlDQWdJSFpoY2lCdWIwVjJaVzUwVkdsdFpXOTFkQ0E5SUc1MWJHdzdYRzVjYmlBZ0lDQjJZWElnWlc1a1RHbHpkR1Z1WlhJZ1BTQm1kVzVqZEdsdmJpaGxLU0I3WEc0Z0lDQWdJQ0JwWmlBb1pTQW1KaUJsTG5SaGNtZGxkQ0FoUFQwZ2JtOWtaU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0FnSUdOc1pXRnlWR2x0Wlc5MWRDaHViMFYyWlc1MFZHbHRaVzkxZENrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lFTlRVME52Y21VdWNtVnRiM1psUTJ4aGMzTW9ibTlrWlN3Z1kyeGhjM05PWVcxbEtUdGNiaUFnSUNBZ0lFTlRVME52Y21VdWNtVnRiM1psUTJ4aGMzTW9ibTlrWlN3Z1lXTjBhWFpsUTJ4aGMzTk9ZVzFsS1R0Y2JseHVJQ0FnSUNBZ1VtVmhZM1JVY21GdWMybDBhVzl1UlhabGJuUnpMbkpsYlc5MlpVVnVaRVYyWlc1MFRHbHpkR1Z1WlhJb2JtOWtaU3dnWlc1a1RHbHpkR1Z1WlhJcE8xeHVYRzRnSUNBZ0lDQXZMeUJWYzNWaGJHeDVJSFJvYVhNZ2IzQjBhVzl1WVd3Z1kyRnNiR0poWTJzZ2FYTWdkWE5sWkNCbWIzSWdhVzVtYjNKdGFXNW5JR0Z1SUc5M2JtVnlJRzltWEc0Z0lDQWdJQ0F2THlCaElHeGxZWFpsSUdGdWFXMWhkR2x2YmlCaGJtUWdkR1ZzYkdsdVp5QnBkQ0IwYnlCeVpXMXZkbVVnZEdobElHTm9hV3hrTGx4dUlDQWdJQ0FnYVdZZ0tHWnBibWx6YUVOaGJHeGlZV05yS1NCN1hHNGdJQ0FnSUNBZ0lHWnBibWx6YUVOaGJHeGlZV05yS0NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlR0Y2JseHVJQ0FnSUZKbFlXTjBWSEpoYm5OcGRHbHZia1YyWlc1MGN5NWhaR1JGYm1SRmRtVnVkRXhwYzNSbGJtVnlLRzV2WkdVc0lHVnVaRXhwYzNSbGJtVnlLVHRjYmx4dUlDQWdJRU5UVTBOdmNtVXVZV1JrUTJ4aGMzTW9ibTlrWlN3Z1kyeGhjM05PWVcxbEtUdGNibHh1SUNBZ0lDOHZJRTVsWldRZ2RHOGdaRzhnZEdocGN5QjBieUJoWTNSMVlXeHNlU0IwY21sbloyVnlJR0VnZEhKaGJuTnBkR2x2Ymk1Y2JpQWdJQ0IwYUdsekxuRjFaWFZsUTJ4aGMzTW9ZV04wYVhabFEyeGhjM05PWVcxbEtUdGNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lHNXZSWFpsYm5SVWFXMWxiM1YwSUQwZ2MyVjBWR2x0Wlc5MWRDaHViMFYyWlc1MFRHbHpkR1Z1WlhJc0lFNVBYMFZXUlU1VVgxUkpUVVZQVlZRcE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQnhkV1YxWlVOc1lYTnpPaUJtZFc1amRHbHZiaWhqYkdGemMwNWhiV1VwSUh0Y2JpQWdJQ0IwYUdsekxtTnNZWE56VG1GdFpWRjFaWFZsTG5CMWMyZ29ZMnhoYzNOT1lXMWxLVHRjYmx4dUlDQWdJR2xtSUNnaGRHaHBjeTUwYVcxbGIzVjBLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuUnBiV1Z2ZFhRZ1BTQnpaWFJVYVcxbGIzVjBLSFJvYVhNdVpteDFjMmhEYkdGemMwNWhiV1ZSZFdWMVpTd2dWRWxEU3lrN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lHWnNkWE5vUTJ4aGMzTk9ZVzFsVVhWbGRXVTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbWx6VFc5MWJuUmxaQ2dwS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbU5zWVhOelRtRnRaVkYxWlhWbExtWnZja1ZoWTJnb1hHNGdJQ0FnSUNBZ0lFTlRVME52Y21VdVlXUmtRMnhoYzNNdVltbHVaQ2hEVTFORGIzSmxMQ0IwYUdsekxtZGxkRVJQVFU1dlpHVW9LU2xjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11WTJ4aGMzTk9ZVzFsVVhWbGRXVXViR1Z1WjNSb0lEMGdNRHRjYmlBZ0lDQjBhR2x6TG5ScGJXVnZkWFFnUFNCdWRXeHNPMXh1SUNCOUxGeHVYRzRnSUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZERvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2RHaHBjeTVqYkdGemMwNWhiV1ZSZFdWMVpTQTlJRnRkTzF4dUlDQjlMRnh1WEc0Z0lHTnZiWEJ2Ym1WdWRGZHBiR3hWYm0xdmRXNTBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTUwYVcxbGIzVjBLU0I3WEc0Z0lDQWdJQ0JqYkdWaGNsUnBiV1Z2ZFhRb2RHaHBjeTUwYVcxbGIzVjBLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnWTI5dGNHOXVaVzUwVjJsc2JFRndjR1ZoY2pvZ1puVnVZM1JwYjI0b1pHOXVaU2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbkJ5YjNCekxtRndjR1ZoY2lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTUwY21GdWMybDBhVzl1S0NkaGNIQmxZWEluTENCa2IyNWxLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1pHOXVaU2dwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNCamIyMXdiMjVsYm5SWGFXeHNSVzUwWlhJNklHWjFibU4wYVc5dUtHUnZibVVwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV3Y205d2N5NWxiblJsY2lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTUwY21GdWMybDBhVzl1S0NkbGJuUmxjaWNzSUdSdmJtVXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCa2IyNWxLQ2s3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUdOdmJYQnZibVZ1ZEZkcGJHeE1aV0YyWlRvZ1puVnVZM1JwYjI0b1pHOXVaU2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbkJ5YjNCekxteGxZWFpsS1NCN1hHNGdJQ0FnSUNCMGFHbHpMblJ5WVc1emFYUnBiMjRvSjJ4bFlYWmxKeXdnWkc5dVpTazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdSdmJtVW9LVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnY21WdVpHVnlPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdiMjVzZVVOb2FXeGtLSFJvYVhNdWNISnZjSE11WTJocGJHUnlaVzRwTzF4dUlDQjlYRzU5S1R0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQlNaV0ZqZEVOVFUxUnlZVzV6YVhScGIyNUhjbTkxY0VOb2FXeGtPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENoaWxkUmVjb25jaWxlclxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdFJlY29uY2lsZXJcIik7XG5cbnZhciBmbGF0dGVuQ2hpbGRyZW4gPSByZXF1aXJlKFwiLi9mbGF0dGVuQ2hpbGRyZW5cIik7XG52YXIgaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnRcIik7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9zaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudFwiKTtcblxuLyoqXG4gKiBSZWFjdENoaWxkUmVjb25jaWxlciBwcm92aWRlcyBoZWxwZXJzIGZvciBpbml0aWFsaXppbmcgb3IgdXBkYXRpbmcgYSBzZXQgb2ZcbiAqIGNoaWxkcmVuLiBJdHMgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBwYXNzaW5nIGl0IG9udG8gUmVhY3RNdWx0aUNoaWxkIHdoaWNoXG4gKiBkb2VzIGRpZmZlZCByZW9yZGVyaW5nIGFuZCBpbnNlcnRpb24uXG4gKi9cbnZhciBSZWFjdENoaWxkUmVjb25jaWxlciA9IHtcblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgXCJtb3VudCBpbWFnZVwiIGZvciBlYWNoIG9mIHRoZSBzdXBwbGllZCBjaGlsZHJlbi4gSW4gdGhlIGNhc2VcbiAgICogb2YgYFJlYWN0RE9NQ29tcG9uZW50YCwgYSBtb3VudCBpbWFnZSBpcyBhIHN0cmluZyBvZiBtYXJrdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmVzdGVkQ2hpbGROb2RlcyBOZXN0ZWQgY2hpbGQgbWFwcy5cbiAgICogQHJldHVybiB7P29iamVjdH0gQSBzZXQgb2YgY2hpbGQgaW5zdGFuY2VzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGluc3RhbnRpYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKG5lc3RlZENoaWxkTm9kZXMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZmxhdHRlbkNoaWxkcmVuKG5lc3RlZENoaWxkTm9kZXMpO1xuICAgIGZvciAodmFyIG5hbWUgaW4gY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltuYW1lXTtcbiAgICAgICAgLy8gVGhlIHJlbmRlcmVkIGNoaWxkcmVuIG11c3QgYmUgdHVybmVkIGludG8gaW5zdGFuY2VzIGFzIHRoZXkncmVcbiAgICAgICAgLy8gbW91bnRlZC5cbiAgICAgICAgdmFyIGNoaWxkSW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KGNoaWxkLCBudWxsKTtcbiAgICAgICAgY2hpbGRyZW5bbmFtZV0gPSBjaGlsZEluc3RhbmNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbmRlcmVkIGNoaWxkcmVuIGFuZCByZXR1cm5zIGEgbmV3IHNldCBvZiBjaGlsZHJlbi5cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2Q2hpbGRyZW4gUHJldmlvdXNseSBpbml0aWFsaXplZCBzZXQgb2YgY2hpbGRyZW4uXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dE5lc3RlZENoaWxkTm9kZXMgTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7P29iamVjdH0gQSBuZXcgc2V0IG9mIGNoaWxkIGluc3RhbmNlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24oXG4gICAgcHJldkNoaWxkcmVuLFxuICAgIG5leHROZXN0ZWRDaGlsZE5vZGVzLFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIGNvbnRleHQpIHtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZSBhIHdheSB0byB0cmFjayBtb3ZlcyBoZXJlIGJ1dCBpZiB3ZSB1c2UgaXRlcmF0b3JzXG4gICAgLy8gaW5zdGVhZCBvZiBmb3IuLmluIHdlIGNhbiB6aXAgdGhlIGl0ZXJhdG9ycyBhbmQgY2hlY2sgaWYgYW4gaXRlbSBoYXNcbiAgICAvLyBtb3ZlZC5cbiAgICAvLyBUT0RPOiBJZiBub3RoaW5nIGhhcyBjaGFuZ2VkLCByZXR1cm4gdGhlIHByZXZDaGlsZHJlbiBvYmplY3Qgc28gdGhhdCB3ZVxuICAgIC8vIGNhbiBxdWlja2x5IGJhaWxvdXQgaWYgbm90aGluZyBoYXMgY2hhbmdlZC5cbiAgICB2YXIgbmV4dENoaWxkcmVuID0gZmxhdHRlbkNoaWxkcmVuKG5leHROZXN0ZWRDaGlsZE5vZGVzKTtcbiAgICBpZiAoIW5leHRDaGlsZHJlbiAmJiAhcHJldkNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG5hbWU7XG4gICAgZm9yIChuYW1lIGluIG5leHRDaGlsZHJlbikge1xuICAgICAgaWYgKCFuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkcmVuICYmIHByZXZDaGlsZHJlbltuYW1lXTtcbiAgICAgIHZhciBwcmV2RWxlbWVudCA9IHByZXZDaGlsZCAmJiBwcmV2Q2hpbGQuX2N1cnJlbnRFbGVtZW50O1xuICAgICAgdmFyIG5leHRFbGVtZW50ID0gbmV4dENoaWxkcmVuW25hbWVdO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCkpIHtcbiAgICAgICAgUmVhY3RSZWNvbmNpbGVyLnJlY2VpdmVDb21wb25lbnQoXG4gICAgICAgICAgcHJldkNoaWxkLCBuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgICAgbmV4dENoaWxkcmVuW25hbWVdID0gcHJldkNoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByZXZDaGlsZCkge1xuICAgICAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHByZXZDaGlsZCwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIGNoaWxkIG11c3QgYmUgaW5zdGFudGlhdGVkIGJlZm9yZSBpdCdzIG1vdW50ZWQuXG4gICAgICAgIHZhciBuZXh0Q2hpbGRJbnN0YW5jZSA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoXG4gICAgICAgICAgbmV4dEVsZW1lbnQsXG4gICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgICBuZXh0Q2hpbGRyZW5bbmFtZV0gPSBuZXh0Q2hpbGRJbnN0YW5jZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVW5tb3VudCBjaGlsZHJlbiB0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudC5cbiAgICBmb3IgKG5hbWUgaW4gcHJldkNoaWxkcmVuKSB7XG4gICAgICBpZiAocHJldkNoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgICAgIShuZXh0Q2hpbGRyZW4gJiYgbmV4dENoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSkge1xuICAgICAgICBSZWFjdFJlY29uY2lsZXIudW5tb3VudENvbXBvbmVudChwcmV2Q2hpbGRyZW5bbmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dENoaWxkcmVuO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVbm1vdW50cyBhbGwgcmVuZGVyZWQgY2hpbGRyZW4uIFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gY2xlYW4gdXAgY2hpbGRyZW5cbiAgICogd2hlbiB0aGlzIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcmVuZGVyZWRDaGlsZHJlbiBQcmV2aW91c2x5IGluaXRpYWxpemVkIHNldCBvZiBjaGlsZHJlbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bm1vdW50Q2hpbGRyZW46IGZ1bmN0aW9uKHJlbmRlcmVkQ2hpbGRyZW4pIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHJlbmRlcmVkQ2hpbGRyZW4pIHtcbiAgICAgIHZhciByZW5kZXJlZENoaWxkID0gcmVuZGVyZWRDaGlsZHJlbltuYW1lXTtcbiAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHJlbmRlcmVkQ2hpbGQpO1xuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q2hpbGRSZWNvbmNpbGVyO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENoaWxkcmVuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcbnZhciBSZWFjdEZyYWdtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RGcmFnbWVudFwiKTtcblxudmFyIHRyYXZlcnNlQWxsQ2hpbGRyZW4gPSByZXF1aXJlKFwiLi90cmF2ZXJzZUFsbENoaWxkcmVuXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgdHdvQXJndW1lbnRQb29sZXIgPSBQb29sZWRDbGFzcy50d29Bcmd1bWVudFBvb2xlcjtcbnZhciB0aHJlZUFyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MudGhyZWVBcmd1bWVudFBvb2xlcjtcblxuLyoqXG4gKiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5nIGEgY2hpbGRcbiAqIHRyYXZlcnNhbC4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLlxuICpcbiAqIEBjb25zdHJ1Y3RvciBGb3JFYWNoQm9va0tlZXBpbmdcbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBmb3JFYWNoRnVuY3Rpb24gRnVuY3Rpb24gdG8gcGVyZm9ybSB0cmF2ZXJzYWwgd2l0aC5cbiAqIEBwYXJhbSB7Pyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgdG8gcGVyZm9ybSBjb250ZXh0IHdpdGguXG4gKi9cbmZ1bmN0aW9uIEZvckVhY2hCb29rS2VlcGluZyhmb3JFYWNoRnVuY3Rpb24sIGZvckVhY2hDb250ZXh0KSB7XG4gIHRoaXMuZm9yRWFjaEZ1bmN0aW9uID0gZm9yRWFjaEZ1bmN0aW9uO1xuICB0aGlzLmZvckVhY2hDb250ZXh0ID0gZm9yRWFjaENvbnRleHQ7XG59XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oRm9yRWFjaEJvb2tLZWVwaW5nLCB0d29Bcmd1bWVudFBvb2xlcik7XG5cbmZ1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZCh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lLCBpKSB7XG4gIHZhciBmb3JFYWNoQm9va0tlZXBpbmcgPSB0cmF2ZXJzZUNvbnRleHQ7XG4gIGZvckVhY2hCb29rS2VlcGluZy5mb3JFYWNoRnVuY3Rpb24uY2FsbChcbiAgICBmb3JFYWNoQm9va0tlZXBpbmcuZm9yRWFjaENvbnRleHQsIGNoaWxkLCBpKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyB0aHJvdWdoIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmMuXG4gKiBAcGFyYW0geyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgZm9yIGZvckVhY2hDb250ZXh0LlxuICovXG5mdW5jdGlvbiBmb3JFYWNoQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciB0cmF2ZXJzZUNvbnRleHQgPVxuICAgIEZvckVhY2hCb29rS2VlcGluZy5nZXRQb29sZWQoZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KTtcbiAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaFNpbmdsZUNoaWxkLCB0cmF2ZXJzZUNvbnRleHQpO1xuICBGb3JFYWNoQm9va0tlZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpO1xufVxuXG4vKipcbiAqIFBvb2xlZENsYXNzIHJlcHJlc2VudGluZyB0aGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRoIHBlcmZvcm1pbmcgYSBjaGlsZFxuICogbWFwcGluZy4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLlxuICpcbiAqIEBjb25zdHJ1Y3RvciBNYXBCb29rS2VlcGluZ1xuICogQHBhcmFtIHshKn0gbWFwUmVzdWx0IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLlxuICogQHBhcmFtIHshZnVuY3Rpb259IG1hcEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gbWFwcGluZyB3aXRoLlxuICogQHBhcmFtIHs/Kn0gbWFwQ29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0gbWFwcGluZyB3aXRoLlxuICovXG5mdW5jdGlvbiBNYXBCb29rS2VlcGluZyhtYXBSZXN1bHQsIG1hcEZ1bmN0aW9uLCBtYXBDb250ZXh0KSB7XG4gIHRoaXMubWFwUmVzdWx0ID0gbWFwUmVzdWx0O1xuICB0aGlzLm1hcEZ1bmN0aW9uID0gbWFwRnVuY3Rpb247XG4gIHRoaXMubWFwQ29udGV4dCA9IG1hcENvbnRleHQ7XG59XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oTWFwQm9va0tlZXBpbmcsIHRocmVlQXJndW1lbnRQb29sZXIpO1xuXG5mdW5jdGlvbiBtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0KHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUsIGkpIHtcbiAgdmFyIG1hcEJvb2tLZWVwaW5nID0gdHJhdmVyc2VDb250ZXh0O1xuICB2YXIgbWFwUmVzdWx0ID0gbWFwQm9va0tlZXBpbmcubWFwUmVzdWx0O1xuXG4gIHZhciBrZXlVbmlxdWUgPSAhbWFwUmVzdWx0Lmhhc093blByb3BlcnR5KG5hbWUpO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBrZXlVbmlxdWUsXG4gICAgICAnUmVhY3RDaGlsZHJlbi5tYXAoLi4uKTogRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCAnICtcbiAgICAgICdgJXNgLiBDaGlsZCBrZXlzIG11c3QgYmUgdW5pcXVlOyB3aGVuIHR3byBjaGlsZHJlbiBzaGFyZSBhIGtleSwgb25seSAnICtcbiAgICAgICd0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSB1c2VkLicsXG4gICAgICBuYW1lXG4gICAgKSA6IG51bGwpO1xuICB9XG5cbiAgaWYgKGtleVVuaXF1ZSkge1xuICAgIHZhciBtYXBwZWRDaGlsZCA9XG4gICAgICBtYXBCb29rS2VlcGluZy5tYXBGdW5jdGlvbi5jYWxsKG1hcEJvb2tLZWVwaW5nLm1hcENvbnRleHQsIGNoaWxkLCBpKTtcbiAgICBtYXBSZXN1bHRbbmFtZV0gPSBtYXBwZWRDaGlsZDtcbiAgfVxufVxuXG4vKipcbiAqIE1hcHMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwga2V5LCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogVE9ETzogVGhpcyBtYXkgbGlrZWx5IGJyZWFrIGFueSBjYWxscyB0byBgUmVhY3RDaGlsZHJlbi5tYXBgIHRoYXQgd2VyZVxuICogcHJldmlvdXNseSByZWx5aW5nIG9uIHRoZSBmYWN0IHRoYXQgd2UgZ3VhcmRlZCBhZ2FpbnN0IG51bGwgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IG1hcEZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBtYXBDb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgbWFwUmVzdWx0ID0ge307XG4gIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBNYXBCb29rS2VlcGluZy5nZXRQb29sZWQobWFwUmVzdWx0LCBmdW5jLCBjb250ZXh0KTtcbiAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCwgdHJhdmVyc2VDb250ZXh0KTtcbiAgTWFwQm9va0tlZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpO1xuICByZXR1cm4gUmVhY3RGcmFnbWVudC5jcmVhdGUobWFwUmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaFNpbmdsZUNoaWxkRHVtbXkodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSwgaSkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXNcbiAqIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGlsZER1bW15LCBudWxsKTtcbn1cblxudmFyIFJlYWN0Q2hpbGRyZW4gPSB7XG4gIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbixcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgY291bnQ6IGNvdW50Q2hpbGRyZW5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDaGlsZHJlbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JEYUdsc1pISmxiaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JEYUdsc1pISmxibHh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUZCdmIyeGxaRU5zWVhOeklEMGdjbVZ4ZFdseVpTaGNJaTR2VUc5dmJHVmtRMnhoYzNOY0lpazdYRzUyWVhJZ1VtVmhZM1JHY21GbmJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUm5KaFoyMWxiblJjSWlrN1hHNWNiblpoY2lCMGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdUlEMGdjbVZ4ZFdseVpTaGNJaTR2ZEhKaGRtVnljMlZCYkd4RGFHbHNaSEpsYmx3aUtUdGNiblpoY2lCM1lYSnVhVzVuSUQwZ2NtVnhkV2x5WlNoY0lpNHZkMkZ5Ym1sdVoxd2lLVHRjYmx4dWRtRnlJSFIzYjBGeVozVnRaVzUwVUc5dmJHVnlJRDBnVUc5dmJHVmtRMnhoYzNNdWRIZHZRWEpuZFcxbGJuUlFiMjlzWlhJN1hHNTJZWElnZEdoeVpXVkJjbWQxYldWdWRGQnZiMnhsY2lBOUlGQnZiMnhsWkVOc1lYTnpMblJvY21WbFFYSm5kVzFsYm5SUWIyOXNaWEk3WEc1Y2JpOHFLbHh1SUNvZ1VHOXZiR1ZrUTJ4aGMzTWdjbVZ3Y21WelpXNTBhVzVuSUhSb1pTQmliMjlyYTJWbGNHbHVaeUJoYzNOdlkybGhkR1ZrSUhkcGRHZ2djR1Z5Wm05eWJXbHVaeUJoSUdOb2FXeGtYRzRnS2lCMGNtRjJaWEp6WVd3dUlFRnNiRzkzY3lCaGRtOXBaR2x1WnlCaWFXNWthVzVuSUdOaGJHeGlZV05yY3k1Y2JpQXFYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSWdSbTl5UldGamFFSnZiMnRMWldWd2FXNW5YRzRnS2lCQWNHRnlZVzBnZXlGbWRXNWpkR2x2Ym4wZ1ptOXlSV0ZqYUVaMWJtTjBhVzl1SUVaMWJtTjBhVzl1SUhSdklIQmxjbVp2Y20wZ2RISmhkbVZ5YzJGc0lIZHBkR2d1WEc0Z0tpQkFjR0Z5WVcwZ2V6OHFmU0JtYjNKRllXTm9RMjl1ZEdWNGRDQkRiMjUwWlhoMElIUnZJSEJsY21admNtMGdZMjl1ZEdWNGRDQjNhWFJvTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJHYjNKRllXTm9RbTl2YTB0bFpYQnBibWNvWm05eVJXRmphRVoxYm1OMGFXOXVMQ0JtYjNKRllXTm9RMjl1ZEdWNGRDa2dlMXh1SUNCMGFHbHpMbVp2Y2tWaFkyaEdkVzVqZEdsdmJpQTlJR1p2Y2tWaFkyaEdkVzVqZEdsdmJqdGNiaUFnZEdocGN5NW1iM0pGWVdOb1EyOXVkR1Y0ZENBOUlHWnZja1ZoWTJoRGIyNTBaWGgwTzF4dWZWeHVVRzl2YkdWa1EyeGhjM011WVdSa1VHOXZiR2x1WjFSdktFWnZja1ZoWTJoQ2IyOXJTMlZsY0dsdVp5d2dkSGR2UVhKbmRXMWxiblJRYjI5c1pYSXBPMXh1WEc1bWRXNWpkR2x2YmlCbWIzSkZZV05vVTJsdVoyeGxRMmhwYkdRb2RISmhkbVZ5YzJWRGIyNTBaWGgwTENCamFHbHNaQ3dnYm1GdFpTd2dhU2tnZTF4dUlDQjJZWElnWm05eVJXRmphRUp2YjJ0TFpXVndhVzVuSUQwZ2RISmhkbVZ5YzJWRGIyNTBaWGgwTzF4dUlDQm1iM0pGWVdOb1FtOXZhMHRsWlhCcGJtY3VabTl5UldGamFFWjFibU4wYVc5dUxtTmhiR3dvWEc0Z0lDQWdabTl5UldGamFFSnZiMnRMWldWd2FXNW5MbVp2Y2tWaFkyaERiMjUwWlhoMExDQmphR2xzWkN3Z2FTazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1NYUmxjbUYwWlhNZ2RHaHliM1ZuYUNCamFHbHNaSEpsYmlCMGFHRjBJR0Z5WlNCMGVYQnBZMkZzYkhrZ2MzQmxZMmxtYVdWa0lHRnpJR0J3Y205d2N5NWphR2xzWkhKbGJtQXVYRzRnS2x4dUlDb2dWR2hsSUhCeWIzWnBaR1ZrSUdadmNrVmhZMmhHZFc1aktHTm9hV3hrTENCcGJtUmxlQ2tnZDJsc2JDQmlaU0JqWVd4c1pXUWdabTl5SUdWaFkyaGNiaUFxSUd4bFlXWWdZMmhwYkdRdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUhzL0tuMGdZMmhwYkdSeVpXNGdRMmhwYkdSeVpXNGdkSEpsWlNCamIyNTBZV2x1WlhJdVhHNGdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVLQ29zSUdsdWRDbDlJR1p2Y2tWaFkyaEdkVzVqTGx4dUlDb2dRSEJoY21GdElIc3FmU0JtYjNKRllXTm9RMjl1ZEdWNGRDQkRiMjUwWlhoMElHWnZjaUJtYjNKRllXTm9RMjl1ZEdWNGRDNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1ptOXlSV0ZqYUVOb2FXeGtjbVZ1S0dOb2FXeGtjbVZ1TENCbWIzSkZZV05vUm5WdVl5d2dabTl5UldGamFFTnZiblJsZUhRcElIdGNiaUFnYVdZZ0tHTm9hV3hrY21WdUlEMDlJRzUxYkd3cElIdGNiaUFnSUNCeVpYUjFjbTRnWTJocGJHUnlaVzQ3WEc0Z0lIMWNibHh1SUNCMllYSWdkSEpoZG1WeWMyVkRiMjUwWlhoMElEMWNiaUFnSUNCR2IzSkZZV05vUW05dmEwdGxaWEJwYm1jdVoyVjBVRzl2YkdWa0tHWnZja1ZoWTJoR2RXNWpMQ0JtYjNKRllXTm9RMjl1ZEdWNGRDazdYRzRnSUhSeVlYWmxjbk5sUVd4c1EyaHBiR1J5Wlc0b1kyaHBiR1J5Wlc0c0lHWnZja1ZoWTJoVGFXNW5iR1ZEYUdsc1pDd2dkSEpoZG1WeWMyVkRiMjUwWlhoMEtUdGNiaUFnUm05eVJXRmphRUp2YjJ0TFpXVndhVzVuTG5KbGJHVmhjMlVvZEhKaGRtVnljMlZEYjI1MFpYaDBLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlFiMjlzWldSRGJHRnpjeUJ5WlhCeVpYTmxiblJwYm1jZ2RHaGxJR0p2YjJ0clpXVndhVzVuSUdGemMyOWphV0YwWldRZ2QybDBhQ0J3WlhKbWIzSnRhVzVuSUdFZ1kyaHBiR1JjYmlBcUlHMWhjSEJwYm1jdUlFRnNiRzkzY3lCaGRtOXBaR2x1WnlCaWFXNWthVzVuSUdOaGJHeGlZV05yY3k1Y2JpQXFYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSWdUV0Z3UW05dmEwdGxaWEJwYm1kY2JpQXFJRUJ3WVhKaGJTQjdJU3A5SUcxaGNGSmxjM1ZzZENCUFltcGxZM1FnWTI5dWRHRnBibWx1WnlCMGFHVWdiM0prWlhKbFpDQnRZWEFnYjJZZ2NtVnpkV3gwY3k1Y2JpQXFJRUJ3WVhKaGJTQjdJV1oxYm1OMGFXOXVmU0J0WVhCR2RXNWpkR2x2YmlCR2RXNWpkR2x2YmlCMGJ5QndaWEptYjNKdElHMWhjSEJwYm1jZ2QybDBhQzVjYmlBcUlFQndZWEpoYlNCN1B5cDlJRzFoY0VOdmJuUmxlSFFnUTI5dWRHVjRkQ0IwYnlCd1pYSm1iM0p0SUcxaGNIQnBibWNnZDJsMGFDNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1RXRndRbTl2YTB0bFpYQnBibWNvYldGd1VtVnpkV3gwTENCdFlYQkdkVzVqZEdsdmJpd2diV0Z3UTI5dWRHVjRkQ2tnZTF4dUlDQjBhR2x6TG0xaGNGSmxjM1ZzZENBOUlHMWhjRkpsYzNWc2REdGNiaUFnZEdocGN5NXRZWEJHZFc1amRHbHZiaUE5SUcxaGNFWjFibU4wYVc5dU8xeHVJQ0IwYUdsekxtMWhjRU52Ym5SbGVIUWdQU0J0WVhCRGIyNTBaWGgwTzF4dWZWeHVVRzl2YkdWa1EyeGhjM011WVdSa1VHOXZiR2x1WjFSdktFMWhjRUp2YjJ0TFpXVndhVzVuTENCMGFISmxaVUZ5WjNWdFpXNTBVRzl2YkdWeUtUdGNibHh1Wm5WdVkzUnBiMjRnYldGd1UybHVaMnhsUTJocGJHUkpiblJ2UTI5dWRHVjRkQ2gwY21GMlpYSnpaVU52Ym5SbGVIUXNJR05vYVd4a0xDQnVZVzFsTENCcEtTQjdYRzRnSUhaaGNpQnRZWEJDYjI5clMyVmxjR2x1WnlBOUlIUnlZWFpsY25ObFEyOXVkR1Y0ZER0Y2JpQWdkbUZ5SUcxaGNGSmxjM1ZzZENBOUlHMWhjRUp2YjJ0TFpXVndhVzVuTG0xaGNGSmxjM1ZzZER0Y2JseHVJQ0IyWVhJZ2EyVjVWVzVwY1hWbElEMGdJVzFoY0ZKbGMzVnNkQzVvWVhOUGQyNVFjbTl3WlhKMGVTaHVZVzFsS1R0Y2JpQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnYTJWNVZXNXBjWFZsTEZ4dUlDQWdJQ0FnSjFKbFlXTjBRMmhwYkdSeVpXNHViV0Z3S0M0dUxpazZJRVZ1WTI5MWJuUmxjbVZrSUhSM2J5QmphR2xzWkhKbGJpQjNhWFJvSUhSb1pTQnpZVzFsSUd0bGVTd2dKeUFyWEc0Z0lDQWdJQ0FuWUNWellDNGdRMmhwYkdRZ2EyVjVjeUJ0ZFhOMElHSmxJSFZ1YVhGMVpUc2dkMmhsYmlCMGQyOGdZMmhwYkdSeVpXNGdjMmhoY21VZ1lTQnJaWGtzSUc5dWJIa2dKeUFyWEc0Z0lDQWdJQ0FuZEdobElHWnBjbk4wSUdOb2FXeGtJSGRwYkd3Z1ltVWdkWE5sWkM0bkxGeHVJQ0FnSUNBZ2JtRnRaVnh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnZlZ4dVhHNGdJR2xtSUNoclpYbFZibWx4ZFdVcElIdGNiaUFnSUNCMllYSWdiV0Z3Y0dWa1EyaHBiR1FnUFZ4dUlDQWdJQ0FnYldGd1FtOXZhMHRsWlhCcGJtY3ViV0Z3Um5WdVkzUnBiMjR1WTJGc2JDaHRZWEJDYjI5clMyVmxjR2x1Wnk1dFlYQkRiMjUwWlhoMExDQmphR2xzWkN3Z2FTazdYRzRnSUNBZ2JXRndVbVZ6ZFd4MFcyNWhiV1ZkSUQwZ2JXRndjR1ZrUTJocGJHUTdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJOWVhCeklHTm9hV3hrY21WdUlIUm9ZWFFnWVhKbElIUjVjR2xqWVd4c2VTQnpjR1ZqYVdacFpXUWdZWE1nWUhCeWIzQnpMbU5vYVd4a2NtVnVZQzVjYmlBcVhHNGdLaUJVYUdVZ2NISnZkbWxrWldRZ2JXRndSblZ1WTNScGIyNG9ZMmhwYkdRc0lHdGxlU3dnYVc1a1pYZ3BJSGRwYkd3Z1ltVWdZMkZzYkdWa0lHWnZjaUJsWVdOb1hHNGdLaUJzWldGbUlHTm9hV3hrTGx4dUlDcGNiaUFxSUZSUFJFODZJRlJvYVhNZ2JXRjVJR3hwYTJWc2VTQmljbVZoYXlCaGJua2dZMkZzYkhNZ2RHOGdZRkpsWVdOMFEyaHBiR1J5Wlc0dWJXRndZQ0IwYUdGMElIZGxjbVZjYmlBcUlIQnlaWFpwYjNWemJIa2djbVZzZVdsdVp5QnZiaUIwYUdVZ1ptRmpkQ0IwYUdGMElIZGxJR2QxWVhKa1pXUWdZV2RoYVc1emRDQnVkV3hzSUdOb2FXeGtjbVZ1TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3UHlwOUlHTm9hV3hrY21WdUlFTm9hV3hrY21WdUlIUnlaV1VnWTI5dWRHRnBibVZ5TGx4dUlDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJpZ3FMQ0JwYm5RcGZTQnRZWEJHZFc1amRHbHZiaTVjYmlBcUlFQndZWEpoYlNCN0tuMGdiV0Z3UTI5dWRHVjRkQ0JEYjI1MFpYaDBJR1p2Y2lCdFlYQkdkVzVqZEdsdmJpNWNiaUFxSUVCeVpYUjFjbTRnZTI5aWFtVmpkSDBnVDJKcVpXTjBJR052Ym5SaGFXNXBibWNnZEdobElHOXlaR1Z5WldRZ2JXRndJRzltSUhKbGMzVnNkSE11WEc0Z0tpOWNibVoxYm1OMGFXOXVJRzFoY0VOb2FXeGtjbVZ1S0dOb2FXeGtjbVZ1TENCbWRXNWpMQ0JqYjI1MFpYaDBLU0I3WEc0Z0lHbG1JQ2hqYUdsc1pISmxiaUE5UFNCdWRXeHNLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHTm9hV3hrY21WdU8xeHVJQ0I5WEc1Y2JpQWdkbUZ5SUcxaGNGSmxjM1ZzZENBOUlIdDlPMXh1SUNCMllYSWdkSEpoZG1WeWMyVkRiMjUwWlhoMElEMGdUV0Z3UW05dmEwdGxaWEJwYm1jdVoyVjBVRzl2YkdWa0tHMWhjRkpsYzNWc2RDd2dablZ1WXl3Z1kyOXVkR1Y0ZENrN1hHNGdJSFJ5WVhabGNuTmxRV3hzUTJocGJHUnlaVzRvWTJocGJHUnlaVzRzSUcxaGNGTnBibWRzWlVOb2FXeGtTVzUwYjBOdmJuUmxlSFFzSUhSeVlYWmxjbk5sUTI5dWRHVjRkQ2s3WEc0Z0lFMWhjRUp2YjJ0TFpXVndhVzVuTG5KbGJHVmhjMlVvZEhKaGRtVnljMlZEYjI1MFpYaDBLVHRjYmlBZ2NtVjBkWEp1SUZKbFlXTjBSbkpoWjIxbGJuUXVZM0psWVhSbEtHMWhjRkpsYzNWc2RDazdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHWnZja1ZoWTJoVGFXNW5iR1ZEYUdsc1pFUjFiVzE1S0hSeVlYWmxjbk5sUTI5dWRHVjRkQ3dnWTJocGJHUXNJRzVoYldVc0lHa3BJSHRjYmlBZ2NtVjBkWEp1SUc1MWJHdzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyOTFiblFnZEdobElHNTFiV0psY2lCdlppQmphR2xzWkhKbGJpQjBhR0YwSUdGeVpTQjBlWEJwWTJGc2JIa2djM0JsWTJsbWFXVmtJR0Z6WEc0Z0tpQmdjSEp2Y0hNdVkyaHBiR1J5Wlc1Z0xseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1B5cDlJR05vYVd4a2NtVnVJRU5vYVd4a2NtVnVJSFJ5WldVZ1kyOXVkR0ZwYm1WeUxseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmU0JVYUdVZ2JuVnRZbVZ5SUc5bUlHTm9hV3hrY21WdUxseHVJQ292WEc1bWRXNWpkR2x2YmlCamIzVnVkRU5vYVd4a2NtVnVLR05vYVd4a2NtVnVMQ0JqYjI1MFpYaDBLU0I3WEc0Z0lISmxkSFZ5YmlCMGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdUtHTm9hV3hrY21WdUxDQm1iM0pGWVdOb1UybHVaMnhsUTJocGJHUkVkVzF0ZVN3Z2JuVnNiQ2s3WEc1OVhHNWNiblpoY2lCU1pXRmpkRU5vYVd4a2NtVnVJRDBnZTF4dUlDQm1iM0pGWVdOb09pQm1iM0pGWVdOb1EyaHBiR1J5Wlc0c1hHNGdJRzFoY0RvZ2JXRndRMmhwYkdSeVpXNHNYRzRnSUdOdmRXNTBPaUJqYjNWdWRFTm9hV3hrY21WdVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBRMmhwYkdSeVpXNDdYRzRpWFgwPSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDbGFzc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RDb21wb25lbnRcIik7XG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKFwiLi9SZWFjdEN1cnJlbnRPd25lclwiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RFcnJvclV0aWxzID0gcmVxdWlyZShcIi4vUmVhY3RFcnJvclV0aWxzXCIpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlTWFwXCIpO1xudmFyIFJlYWN0TGlmZUN5Y2xlID0gcmVxdWlyZShcIi4vUmVhY3RMaWZlQ3ljbGVcIik7XG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbnNcIik7XG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSByZXF1aXJlKFwiLi9SZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1wiKTtcbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVRdWV1ZVwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIGtleU1pcnJvciA9IHJlcXVpcmUoXCIuL2tleU1pcnJvclwiKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgTUlYSU5TX0tFWSA9IGtleU9mKHttaXhpbnM6IG51bGx9KTtcblxuLyoqXG4gKiBQb2xpY2llcyB0aGF0IGRlc2NyaWJlIG1ldGhvZHMgaW4gYFJlYWN0Q2xhc3NJbnRlcmZhY2VgLlxuICovXG52YXIgU3BlY1BvbGljeSA9IGtleU1pcnJvcih7XG4gIC8qKlxuICAgKiBUaGVzZSBtZXRob2RzIG1heSBiZSBkZWZpbmVkIG9ubHkgb25jZSBieSB0aGUgY2xhc3Mgc3BlY2lmaWNhdGlvbiBvciBtaXhpbi5cbiAgICovXG4gIERFRklORV9PTkNFOiBudWxsLFxuICAvKipcbiAgICogVGhlc2UgbWV0aG9kcyBtYXkgYmUgZGVmaW5lZCBieSBib3RoIHRoZSBjbGFzcyBzcGVjaWZpY2F0aW9uIGFuZCBtaXhpbnMuXG4gICAqIFN1YnNlcXVlbnQgZGVmaW5pdGlvbnMgd2lsbCBiZSBjaGFpbmVkLiBUaGVzZSBtZXRob2RzIG11c3QgcmV0dXJuIHZvaWQuXG4gICAqL1xuICBERUZJTkVfTUFOWTogbnVsbCxcbiAgLyoqXG4gICAqIFRoZXNlIG1ldGhvZHMgYXJlIG92ZXJyaWRpbmcgdGhlIGJhc2UgY2xhc3MuXG4gICAqL1xuICBPVkVSUklERV9CQVNFOiBudWxsLFxuICAvKipcbiAgICogVGhlc2UgbWV0aG9kcyBhcmUgc2ltaWxhciB0byBERUZJTkVfTUFOWSwgZXhjZXB0IHdlIGFzc3VtZSB0aGV5IHJldHVyblxuICAgKiBvYmplY3RzLiBXZSB0cnkgdG8gbWVyZ2UgdGhlIGtleXMgb2YgdGhlIHJldHVybiB2YWx1ZXMgb2YgYWxsIHRoZSBtaXhlZCBpblxuICAgKiBmdW5jdGlvbnMuIElmIHRoZXJlIGlzIGEga2V5IGNvbmZsaWN0IHdlIHRocm93LlxuICAgKi9cbiAgREVGSU5FX01BTllfTUVSR0VEOiBudWxsXG59KTtcblxuXG52YXIgaW5qZWN0ZWRNaXhpbnMgPSBbXTtcblxuLyoqXG4gKiBDb21wb3NpdGUgY29tcG9uZW50cyBhcmUgaGlnaGVyLWxldmVsIGNvbXBvbmVudHMgdGhhdCBjb21wb3NlIG90aGVyIGNvbXBvc2l0ZVxuICogb3IgbmF0aXZlIGNvbXBvbmVudHMuXG4gKlxuICogVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YgYFJlYWN0Q2xhc3NgLCBwYXNzIGEgc3BlY2lmaWNhdGlvbiBvZlxuICogeW91ciBuZXcgY2xhc3MgdG8gYFJlYWN0LmNyZWF0ZUNsYXNzYC4gVGhlIG9ubHkgcmVxdWlyZW1lbnQgb2YgeW91ciBjbGFzc1xuICogc3BlY2lmaWNhdGlvbiBpcyB0aGF0IHlvdSBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuXG4gKlxuICogICB2YXIgTXlDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgIHJldHVybiA8ZGl2PkhlbGxvIFdvcmxkPC9kaXY+O1xuICogICAgIH1cbiAqICAgfSk7XG4gKlxuICogVGhlIGNsYXNzIHNwZWNpZmljYXRpb24gc3VwcG9ydHMgYSBzcGVjaWZpYyBwcm90b2NvbCBvZiBtZXRob2RzIHRoYXQgaGF2ZVxuICogc3BlY2lhbCBtZWFuaW5nIChlLmcuIGByZW5kZXJgKS4gU2VlIGBSZWFjdENsYXNzSW50ZXJmYWNlYCBmb3JcbiAqIG1vcmUgdGhlIGNvbXByZWhlbnNpdmUgcHJvdG9jb2wuIEFueSBvdGhlciBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGluIHRoZVxuICogY2xhc3Mgc3BlY2lmaWNhdGlvbiB3aWxsIGF2YWlsYWJsZSBvbiB0aGUgcHJvdG90eXBlLlxuICpcbiAqIEBpbnRlcmZhY2UgUmVhY3RDbGFzc0ludGVyZmFjZVxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdENsYXNzSW50ZXJmYWNlID0ge1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBNaXhpbiBvYmplY3RzIHRvIGluY2x1ZGUgd2hlbiBkZWZpbmluZyB5b3VyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge2FycmF5fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIG1peGluczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBhbmQgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIG9uXG4gICAqIHRoZSBjb21wb25lbnQncyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIGl0cyBwcm90b3R5cGUgKHN0YXRpYyBtZXRob2RzKS5cbiAgICpcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBzdGF0aWNzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBEZWZpbml0aW9uIG9mIHByb3AgdHlwZXMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKlxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIHByb3BUeXBlczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogRGVmaW5pdGlvbiBvZiBjb250ZXh0IHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjb250ZXh0VHlwZXM6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyB0aGlzIGNvbXBvbmVudCBzZXRzIGZvciBpdHMgY2hpbGRyZW4uXG4gICAqXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY2hpbGRDb250ZXh0VHlwZXM6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLy8gPT09PSBEZWZpbml0aW9uIG1ldGhvZHMgPT09PVxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLiBWYWx1ZXMgaW4gdGhlIG1hcHBpbmcgd2lsbCBiZSBzZXQgb25cbiAgICogYHRoaXMucHJvcHNgIGlmIHRoYXQgcHJvcCBpcyBub3Qgc3BlY2lmaWVkIChpLmUuIHVzaW5nIGFuIGBpbmAgY2hlY2spLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJlZm9yZSBgZ2V0SW5pdGlhbFN0YXRlYCBhbmQgdGhlcmVmb3JlIGNhbm5vdCByZWx5XG4gICAqIG9uIGB0aGlzLnN0YXRlYCBvciB1c2UgYHRoaXMuc2V0U3RhdGVgLlxuICAgKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgZ2V0RGVmYXVsdFByb3BzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCxcblxuICAvKipcbiAgICogSW52b2tlZCBvbmNlIGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB1c2VkXG4gICAqIGFzIHRoZSBpbml0aWFsIHZhbHVlIG9mIGB0aGlzLnN0YXRlYC5cbiAgICpcbiAgICogICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgKiAgICAgcmV0dXJuIHtcbiAgICogICAgICAgaXNPbjogZmFsc2UsXG4gICAqICAgICAgIGZvb0JhejogbmV3IEJhekZvbygpXG4gICAqICAgICB9XG4gICAqICAgfVxuICAgKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgZ2V0SW5pdGlhbFN0YXRlOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCxcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGdldENoaWxkQ29udGV4dDogU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQsXG5cbiAgLyoqXG4gICAqIFVzZXMgcHJvcHMgZnJvbSBgdGhpcy5wcm9wc2AgYW5kIHN0YXRlIGZyb20gYHRoaXMuc3RhdGVgIHRvIHJlbmRlciB0aGVcbiAgICogc3RydWN0dXJlIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIE5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgYWJvdXQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCwgc29cbiAgICogaXQgbXVzdCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuXG4gICAqXG4gICAqICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICogICAgIHZhciBuYW1lID0gdGhpcy5wcm9wcy5uYW1lO1xuICAgKiAgICAgcmV0dXJuIDxkaXY+SGVsbG8sIHtuYW1lfSE8L2Rpdj47XG4gICAqICAgfVxuICAgKlxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH1cbiAgICogQG5vc2lkZWVmZmVjdHNcbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICByZW5kZXI6IFNwZWNQb2xpY3kuREVGSU5FX09OQ0UsXG5cblxuXG4gIC8vID09PT0gRGVsZWdhdGUgbWV0aG9kcyA9PT09XG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseSBjcmVhdGVkIGFuZCBhYm91dCB0byBiZSBtb3VudGVkLlxuICAgKiBUaGlzIG1heSBoYXZlIHNpZGUgZWZmZWN0cywgYnV0IGFueSBleHRlcm5hbCBzdWJzY3JpcHRpb25zIG9yIGRhdGEgY3JlYXRlZFxuICAgKiBieSB0aGlzIG1ldGhvZCBtdXN0IGJlIGNsZWFuZWQgdXAgaW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YC5cbiAgICpcbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjb21wb25lbnRXaWxsTW91bnQ6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIG1vdW50ZWQgYW5kIGhhcyBhIERPTSByZXByZXNlbnRhdGlvbi5cbiAgICogSG93ZXZlciwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIERPTSBub2RlIGlzIGluIHRoZSBkb2N1bWVudC5cbiAgICpcbiAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXNcbiAgICogYmVlbiBtb3VudGVkIChpbml0aWFsaXplZCBhbmQgcmVuZGVyZWQpIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudC5cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjb21wb25lbnREaWRNb3VudDogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogSW52b2tlZCBiZWZvcmUgdGhlIGNvbXBvbmVudCByZWNlaXZlcyBuZXcgcHJvcHMuXG4gICAqXG4gICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHJlYWN0IHRvIGEgcHJvcCB0cmFuc2l0aW9uIGJ5IHVwZGF0aW5nIHRoZVxuICAgKiBzdGF0ZSB1c2luZyBgdGhpcy5zZXRTdGF0ZWAuIEN1cnJlbnQgcHJvcHMgYXJlIGFjY2Vzc2VkIHZpYSBgdGhpcy5wcm9wc2AuXG4gICAqXG4gICAqICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0Q29udGV4dCkge1xuICAgKiAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAqICAgICAgIGxpa2VzSW5jcmVhc2luZzogbmV4dFByb3BzLmxpa2VDb3VudCA+IHRoaXMucHJvcHMubGlrZUNvdW50XG4gICAqICAgICB9KTtcbiAgICogICB9XG4gICAqXG4gICAqIE5PVEU6IFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgYGNvbXBvbmVudFdpbGxSZWNlaXZlU3RhdGVgLiBBbiBpbmNvbWluZyBwcm9wXG4gICAqIHRyYW5zaXRpb24gbWF5IGNhdXNlIGEgc3RhdGUgY2hhbmdlLCBidXQgdGhlIG9wcG9zaXRlIGlzIG5vdCB0cnVlLiBJZiB5b3VcbiAgICogbmVlZCBpdCwgeW91IGFyZSBwcm9iYWJseSBsb29raW5nIGZvciBgY29tcG9uZW50V2lsbFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoaWxlIGRlY2lkaW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgYSByZXN1bHQgb2ZcbiAgICogcmVjZWl2aW5nIG5ldyBwcm9wcywgc3RhdGUgYW5kL29yIGNvbnRleHQuXG4gICAqXG4gICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGByZXR1cm4gZmFsc2VgIHdoZW4geW91J3JlIGNlcnRhaW4gdGhhdCB0aGVcbiAgICogdHJhbnNpdGlvbiB0byB0aGUgbmV3IHByb3BzL3N0YXRlL2NvbnRleHQgd2lsbCBub3QgcmVxdWlyZSBhIGNvbXBvbmVudFxuICAgKiB1cGRhdGUuXG4gICAqXG4gICAqICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbihuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpIHtcbiAgICogICAgIHJldHVybiAhZXF1YWwobmV4dFByb3BzLCB0aGlzLnByb3BzKSB8fFxuICAgKiAgICAgICAhZXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fFxuICAgKiAgICAgICAhZXF1YWwobmV4dENvbnRleHQsIHRoaXMuY29udGV4dCk7XG4gICAqICAgfVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUuXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlOiBTcGVjUG9saWN5LkRFRklORV9PTkNFLFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byB1cGRhdGUgZHVlIHRvIGEgdHJhbnNpdGlvbiBmcm9tXG4gICAqIGB0aGlzLnByb3BzYCwgYHRoaXMuc3RhdGVgIGFuZCBgdGhpcy5jb250ZXh0YCB0byBgbmV4dFByb3BzYCwgYG5leHRTdGF0ZWBcbiAgICogYW5kIGBuZXh0Q29udGV4dGAuXG4gICAqXG4gICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHBlcmZvcm0gcHJlcGFyYXRpb24gYmVmb3JlIGFuIHVwZGF0ZSBvY2N1cnMuXG4gICAqXG4gICAqIE5PVEU6IFlvdSAqKmNhbm5vdCoqIHVzZSBgdGhpcy5zZXRTdGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRDb250ZXh0XG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjb21wb25lbnRXaWxsVXBkYXRlOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCdzIERPTSByZXByZXNlbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkLlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVyYXRlIG9uIHRoZSBET00gd2hlbiB0aGUgY29tcG9uZW50IGhhc1xuICAgKiBiZWVuIHVwZGF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2UHJvcHNcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2U3RhdGVcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2Q29udGV4dFxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50LlxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGNvbXBvbmVudERpZFVwZGF0ZTogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tIGl0cyBwYXJlbnQgYW5kIGhhdmVcbiAgICogaXRzIERPTSByZXByZXNlbnRhdGlvbiBkZXN0cm95ZWQuXG4gICAqXG4gICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGRlYWxsb2NhdGUgYW55IGV4dGVybmFsIHJlc291cmNlcy5cbiAgICpcbiAgICogTk9URTogVGhlcmUgaXMgbm8gYGNvbXBvbmVudERpZFVubW91bnRgIHNpbmNlIHlvdXIgY29tcG9uZW50IHdpbGwgaGF2ZSBiZWVuXG4gICAqIGRlc3Ryb3llZCBieSB0aGF0IHBvaW50LlxuICAgKlxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG5cblxuICAvLyA9PT09IEFkdmFuY2VkIG1ldGhvZHMgPT09PVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb21wb25lbnQncyBjdXJyZW50bHkgbW91bnRlZCBET00gcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgaW1wbGVtZW50cyBSZWFjdCdzIHJlbmRlcmluZyBhbmQgcmVjb25jaWxpYXRpb24gYWxnb3JpdGhtLlxuICAgKiBTb3BoaXN0aWNhdGVkIGNsaWVudHMgbWF5IHdpc2ggdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICogQG92ZXJyaWRhYmxlXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnQ6IFNwZWNQb2xpY3kuT1ZFUlJJREVfQkFTRVxuXG59O1xuXG4vKipcbiAqIE1hcHBpbmcgZnJvbSBjbGFzcyBzcGVjaWZpY2F0aW9uIGtleXMgdG8gc3BlY2lhbCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy5cbiAqXG4gKiBBbHRob3VnaCB0aGVzZSBhcmUgZGVjbGFyZWQgbGlrZSBpbnN0YW5jZSBwcm9wZXJ0aWVzIGluIHRoZSBzcGVjaWZpY2F0aW9uXG4gKiB3aGVuIGRlZmluaW5nIGNsYXNzZXMgdXNpbmcgYFJlYWN0LmNyZWF0ZUNsYXNzYCwgdGhleSBhcmUgYWN0dWFsbHkgc3RhdGljXG4gKiBhbmQgYXJlIGFjY2Vzc2libGUgb24gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgdGhlIHByb3RvdHlwZS4gRGVzcGl0ZVxuICogYmVpbmcgc3RhdGljLCB0aGV5IG11c3QgYmUgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSBcInN0YXRpY3NcIiBrZXkgdW5kZXJcbiAqIHdoaWNoIGFsbCBvdGhlciBzdGF0aWMgbWV0aG9kcyBhcmUgZGVmaW5lZC5cbiAqL1xudmFyIFJFU0VSVkVEX1NQRUNfS0VZUyA9IHtcbiAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBkaXNwbGF5TmFtZSkge1xuICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gIH0sXG4gIG1peGluczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIG1peGlucykge1xuICAgIGlmIChtaXhpbnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWl4aW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBtaXhpbnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY2hpbGRDb250ZXh0VHlwZXM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBjaGlsZENvbnRleHRUeXBlcykge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHZhbGlkYXRlVHlwZURlZihcbiAgICAgICAgQ29uc3RydWN0b3IsXG4gICAgICAgIGNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLmNoaWxkQ29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gICAgQ29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMgPSBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgY2hpbGRDb250ZXh0VHlwZXNcbiAgICApO1xuICB9LFxuICBjb250ZXh0VHlwZXM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBjb250ZXh0VHlwZXMpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YWxpZGF0ZVR5cGVEZWYoXG4gICAgICAgIENvbnN0cnVjdG9yLFxuICAgICAgICBjb250ZXh0VHlwZXMsXG4gICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMuY29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gICAgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzID0gYXNzaWduKFxuICAgICAge30sXG4gICAgICBDb25zdHJ1Y3Rvci5jb250ZXh0VHlwZXMsXG4gICAgICBjb250ZXh0VHlwZXNcbiAgICApO1xuICB9LFxuICAvKipcbiAgICogU3BlY2lhbCBjYXNlIGdldERlZmF1bHRQcm9wcyB3aGljaCBzaG91bGQgbW92ZSBpbnRvIHN0YXRpY3MgYnV0IHJlcXVpcmVzXG4gICAqIGF1dG9tYXRpYyBtZXJnaW5nLlxuICAgKi9cbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcykge1xuICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24oXG4gICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyxcbiAgICAgICAgZ2V0RGVmYXVsdFByb3BzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMgPSBnZXREZWZhdWx0UHJvcHM7XG4gICAgfVxuICB9LFxuICBwcm9wVHlwZXM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBwcm9wVHlwZXMpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YWxpZGF0ZVR5cGVEZWYoXG4gICAgICAgIENvbnN0cnVjdG9yLFxuICAgICAgICBwcm9wVHlwZXMsXG4gICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMucHJvcFxuICAgICAgKTtcbiAgICB9XG4gICAgQ29uc3RydWN0b3IucHJvcFR5cGVzID0gYXNzaWduKFxuICAgICAge30sXG4gICAgICBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMsXG4gICAgICBwcm9wVHlwZXNcbiAgICApO1xuICB9LFxuICBzdGF0aWNzOiBmdW5jdGlvbihDb25zdHJ1Y3Rvciwgc3RhdGljcykge1xuICAgIG1peFN0YXRpY1NwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzdGF0aWNzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCB0eXBlRGVmLCBsb2NhdGlvbikge1xuICBmb3IgKHZhciBwcm9wTmFtZSBpbiB0eXBlRGVmKSB7XG4gICAgaWYgKHR5cGVEZWYuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAvLyB1c2UgYSB3YXJuaW5nIGluc3RlYWQgb2YgYW4gaW52YXJpYW50IHNvIGNvbXBvbmVudHNcbiAgICAgIC8vIGRvbid0IHNob3cgdXAgaW4gcHJvZCBidXQgbm90IGluIF9fREVWX19cbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICB0eXBlb2YgdHlwZURlZltwcm9wTmFtZV0gPT09ICdmdW5jdGlvbicsXG4gICAgICAgICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgK1xuICAgICAgICAnUmVhY3QuUHJvcFR5cGVzLicsXG4gICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENsYXNzJyxcbiAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLFxuICAgICAgICBwcm9wTmFtZVxuICAgICAgKSA6IG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKHByb3RvLCBuYW1lKSB7XG4gIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/XG4gICAgUmVhY3RDbGFzc0ludGVyZmFjZVtuYW1lXSA6XG4gICAgbnVsbDtcblxuICAvLyBEaXNhbGxvdyBvdmVycmlkaW5nIG9mIGJhc2UgY2xhc3MgbWV0aG9kcyB1bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLlxuICBpZiAoUmVhY3RDbGFzc01peGluLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuT1ZFUlJJREVfQkFTRSxcbiAgICAgICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gb3ZlcnJpZGUgJyArXG4gICAgICAnYCVzYCBmcm9tIHlvdXIgY2xhc3Mgc3BlY2lmaWNhdGlvbi4gRW5zdXJlIHRoYXQgeW91ciBtZXRob2QgbmFtZXMgJyArXG4gICAgICAnZG8gbm90IG92ZXJsYXAgd2l0aCBSZWFjdCBtZXRob2RzLicsXG4gICAgICBuYW1lXG4gICAgKSA6IGludmFyaWFudChzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5Lk9WRVJSSURFX0JBU0UpKTtcbiAgfVxuXG4gIC8vIERpc2FsbG93IGRlZmluaW5nIG1ldGhvZHMgbW9yZSB0aGFuIG9uY2UgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC5cbiAgaWYgKHByb3RvLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTlkgfHxcbiAgICAgIHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTllfTUVSR0VELFxuICAgICAgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgJyArXG4gICAgICAnYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgZHVlICcgK1xuICAgICAgJ3RvIGEgbWl4aW4uJyxcbiAgICAgIG5hbWVcbiAgICApIDogaW52YXJpYW50KHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTlkgfHxcbiAgICBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCkpO1xuICB9XG59XG5cbi8qKlxuICogTWl4aW4gaGVscGVyIHdoaWNoIGhhbmRsZXMgcG9saWN5IHZhbGlkYXRpb24gYW5kIHJlc2VydmVkXG4gKiBzcGVjaWZpY2F0aW9uIGtleXMgd2hlbiBidWlsZGluZyBSZWFjdCBjbGFzc3Nlcy5cbiAqL1xuZnVuY3Rpb24gbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMpIHtcbiAgaWYgKCFzcGVjKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICB0eXBlb2Ygc3BlYyAhPT0gJ2Z1bmN0aW9uJyxcbiAgICAnUmVhY3RDbGFzczogWW91XFwncmUgYXR0ZW1wdGluZyB0byAnICtcbiAgICAndXNlIGEgY29tcG9uZW50IGNsYXNzIGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVndWxhciBvYmplY3QuJ1xuICApIDogaW52YXJpYW50KHR5cGVvZiBzcGVjICE9PSAnZnVuY3Rpb24nKSk7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgIVJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChzcGVjKSxcbiAgICAnUmVhY3RDbGFzczogWW91XFwncmUgYXR0ZW1wdGluZyB0byAnICtcbiAgICAndXNlIGEgY29tcG9uZW50IGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVndWxhciBvYmplY3QuJ1xuICApIDogaW52YXJpYW50KCFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoc3BlYykpKTtcblxuICB2YXIgcHJvdG8gPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgLy8gQnkgaGFuZGxpbmcgbWl4aW5zIGJlZm9yZSBhbnkgb3RoZXIgcHJvcGVydGllcywgd2UgZW5zdXJlIHRoZSBzYW1lXG4gIC8vIGNoYWluaW5nIG9yZGVyIGlzIGFwcGxpZWQgdG8gbWV0aG9kcyB3aXRoIERFRklORV9NQU5ZIHBvbGljeSwgd2hldGhlclxuICAvLyBtaXhpbnMgYXJlIGxpc3RlZCBiZWZvcmUgb3IgYWZ0ZXIgdGhlc2UgbWV0aG9kcyBpbiB0aGUgc3BlYy5cbiAgaWYgKHNwZWMuaGFzT3duUHJvcGVydHkoTUlYSU5TX0tFWSkpIHtcbiAgICBSRVNFUlZFRF9TUEVDX0tFWVMubWl4aW5zKENvbnN0cnVjdG9yLCBzcGVjLm1peGlucyk7XG4gIH1cblxuICBmb3IgKHZhciBuYW1lIGluIHNwZWMpIHtcbiAgICBpZiAoIXNwZWMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChuYW1lID09PSBNSVhJTlNfS0VZKSB7XG4gICAgICAvLyBXZSBoYXZlIGFscmVhZHkgaGFuZGxlZCBtaXhpbnMgaW4gYSBzcGVjaWFsIGNhc2UgYWJvdmVcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0eSA9IHNwZWNbbmFtZV07XG4gICAgdmFsaWRhdGVNZXRob2RPdmVycmlkZShwcm90bywgbmFtZSk7XG5cbiAgICBpZiAoUkVTRVJWRURfU1BFQ19LRVlTLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBSRVNFUlZFRF9TUEVDX0tFWVNbbmFtZV0oQ29uc3RydWN0b3IsIHByb3BlcnR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2V0dXAgbWV0aG9kcyBvbiBwcm90b3R5cGU6XG4gICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciBtZXRob2RzIHNob3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBib3VuZDpcbiAgICAgIC8vIDEuIEV4cGVjdGVkIFJlYWN0Q2xhc3MgbWV0aG9kcyAoaW4gdGhlIFwiaW50ZXJmYWNlXCIpLlxuICAgICAgLy8gMi4gT3ZlcnJpZGRlbiBtZXRob2RzICh0aGF0IHdlcmUgbWl4ZWQgaW4pLlxuICAgICAgdmFyIGlzUmVhY3RDbGFzc01ldGhvZCA9XG4gICAgICAgIFJlYWN0Q2xhc3NJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gICAgICB2YXIgaXNBbHJlYWR5RGVmaW5lZCA9IHByb3RvLmhhc093blByb3BlcnR5KG5hbWUpO1xuICAgICAgdmFyIG1hcmtlZERvbnRCaW5kID0gcHJvcGVydHkgJiYgcHJvcGVydHkuX19yZWFjdERvbnRCaW5kO1xuICAgICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbic7XG4gICAgICB2YXIgc2hvdWxkQXV0b0JpbmQgPVxuICAgICAgICBpc0Z1bmN0aW9uICYmXG4gICAgICAgICFpc1JlYWN0Q2xhc3NNZXRob2QgJiZcbiAgICAgICAgIWlzQWxyZWFkeURlZmluZWQgJiZcbiAgICAgICAgIW1hcmtlZERvbnRCaW5kO1xuXG4gICAgICBpZiAoc2hvdWxkQXV0b0JpbmQpIHtcbiAgICAgICAgaWYgKCFwcm90by5fX3JlYWN0QXV0b0JpbmRNYXApIHtcbiAgICAgICAgICBwcm90by5fX3JlYWN0QXV0b0JpbmRNYXAgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBwcm90by5fX3JlYWN0QXV0b0JpbmRNYXBbbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0FscmVhZHlEZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHNwZWNQb2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdO1xuXG4gICAgICAgICAgLy8gVGhlc2UgY2FzZXMgc2hvdWxkIGFscmVhZHkgYmUgY2F1Z2h0IGJ5IHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGVcbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgICAgaXNSZWFjdENsYXNzTWV0aG9kICYmIChcbiAgICAgICAgICAgICAgKHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTllfTUVSR0VEIHx8IHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTlkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgJ1JlYWN0Q2xhc3M6IFVuZXhwZWN0ZWQgc3BlYyBwb2xpY3kgJXMgZm9yIGtleSAlcyAnICtcbiAgICAgICAgICAgICd3aGVuIG1peGluZyBpbiBjb21wb25lbnQgc3BlY3MuJyxcbiAgICAgICAgICAgIHNwZWNQb2xpY3ksXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKSA6IGludmFyaWFudChpc1JlYWN0Q2xhc3NNZXRob2QgJiYgKFxuICAgICAgICAgICAgKHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTllfTUVSR0VEIHx8IHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTlkpXG4gICAgICAgICAgKSkpO1xuXG4gICAgICAgICAgLy8gRm9yIG1ldGhvZHMgd2hpY2ggYXJlIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UsIGNhbGwgdGhlIGV4aXN0aW5nXG4gICAgICAgICAgLy8gbWV0aG9kcyBiZWZvcmUgY2FsbGluZyB0aGUgbmV3IHByb3BlcnR5LCBtZXJnaW5nIGlmIGFwcHJvcHJpYXRlLlxuICAgICAgICAgIGlmIChzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCkge1xuICAgICAgICAgICAgcHJvdG9bbmFtZV0gPSBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWSkge1xuICAgICAgICAgICAgcHJvdG9bbmFtZV0gPSBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3BlcnR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgICAgICAvLyBBZGQgdmVyYm9zZSBkaXNwbGF5TmFtZSB0byB0aGUgZnVuY3Rpb24sIHdoaWNoIGhlbHBzIHdoZW4gbG9va2luZ1xuICAgICAgICAgICAgLy8gYXQgcHJvZmlsaW5nIHRvb2xzLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJyAmJiBzcGVjLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICAgIHByb3RvW25hbWVdLmRpc3BsYXlOYW1lID0gc3BlYy5kaXNwbGF5TmFtZSArICdfJyArIG5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1peFN0YXRpY1NwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7XG4gIGlmICghc3RhdGljcykge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBuYW1lIGluIHN0YXRpY3MpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBzdGF0aWNzW25hbWVdO1xuICAgIGlmICghc3RhdGljcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGlzUmVzZXJ2ZWQgPSBuYW1lIGluIFJFU0VSVkVEX1NQRUNfS0VZUztcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIWlzUmVzZXJ2ZWQsXG4gICAgICAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBhIHJlc2VydmVkICcgK1xuICAgICAgJ3Byb3BlcnR5LCBgJXNgLCB0aGF0IHNob3VsZG5cXCd0IGJlIG9uIHRoZSBcInN0YXRpY3NcIiBrZXkuIERlZmluZSBpdCAnICtcbiAgICAgICdhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBpbnN0ZWFkOyBpdCB3aWxsIHN0aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlICcgK1xuICAgICAgJ2NvbnN0cnVjdG9yLicsXG4gICAgICBuYW1lXG4gICAgKSA6IGludmFyaWFudCghaXNSZXNlcnZlZCkpO1xuXG4gICAgdmFyIGlzSW5oZXJpdGVkID0gbmFtZSBpbiBDb25zdHJ1Y3RvcjtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIWlzSW5oZXJpdGVkLFxuICAgICAgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgJyArXG4gICAgICAnYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgJyArXG4gICAgICAnZHVlIHRvIGEgbWl4aW4uJyxcbiAgICAgIG5hbWVcbiAgICApIDogaW52YXJpYW50KCFpc0luaGVyaXRlZCkpO1xuICAgIENvbnN0cnVjdG9yW25hbWVdID0gcHJvcGVydHk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb2JqZWN0cywgYnV0IHRocm93IGlmIGJvdGggY29udGFpbiB0aGUgc2FtZSBrZXkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9uZSBUaGUgZmlyc3Qgb2JqZWN0LCB3aGljaCBpcyBtdXRhdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IHR3byBUaGUgc2Vjb25kIG9iamVjdFxuICogQHJldHVybiB7b2JqZWN0fSBvbmUgYWZ0ZXIgaXQgaGFzIGJlZW4gbXV0YXRlZCB0byBjb250YWluIGV2ZXJ5dGhpbmcgaW4gdHdvLlxuICovXG5mdW5jdGlvbiBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKG9uZSwgdHdvKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgb25lICYmIHR3byAmJiB0eXBlb2Ygb25lID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdHdvID09PSAnb2JqZWN0JyxcbiAgICAnbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cygpOiBDYW5ub3QgbWVyZ2Ugbm9uLW9iamVjdHMuJ1xuICApIDogaW52YXJpYW50KG9uZSAmJiB0d28gJiYgdHlwZW9mIG9uZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcpKTtcblxuICBmb3IgKHZhciBrZXkgaW4gdHdvKSB7XG4gICAgaWYgKHR3by5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBvbmVba2V5XSA9PT0gdW5kZWZpbmVkLFxuICAgICAgICAnbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cygpOiAnICtcbiAgICAgICAgJ1RyaWVkIHRvIG1lcmdlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5OiBgJXNgLiBUaGlzIGNvbmZsaWN0ICcgK1xuICAgICAgICAnbWF5IGJlIGR1ZSB0byBhIG1peGluOyBpbiBwYXJ0aWN1bGFyLCB0aGlzIG1heSBiZSBjYXVzZWQgYnkgdHdvICcgK1xuICAgICAgICAnZ2V0SW5pdGlhbFN0YXRlKCkgb3IgZ2V0RGVmYXVsdFByb3BzKCkgbWV0aG9kcyByZXR1cm5pbmcgb2JqZWN0cyAnICtcbiAgICAgICAgJ3dpdGggY2xhc2hpbmcga2V5cy4nLFxuICAgICAgICBrZXlcbiAgICAgICkgOiBpbnZhcmlhbnQob25lW2tleV0gPT09IHVuZGVmaW5lZCkpO1xuICAgICAgb25lW2tleV0gPSB0d29ba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9uZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIG1lcmdlcyB0aGVpciByZXR1cm4gdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3byBhcmd1bWVudCBmdW5jdGlvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihvbmUsIHR3bykge1xuICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkUmVzdWx0KCkge1xuICAgIHZhciBhID0gb25lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGIgPSB0d28uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoYSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9IGVsc2UgaWYgKGIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuICAgIHZhciBjID0ge307XG4gICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBhKTtcbiAgICBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGIpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgaWdub3JlcyB0aGVpciByZXR1cm4gdmFsZXMuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gb25lIEZ1bmN0aW9uIHRvIGludm9rZSBmaXJzdC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLlxuICogQHJldHVybiB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50IGZ1bmN0aW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNoYWluZWRGdW5jdGlvbihvbmUsIHR3bykge1xuICByZXR1cm4gZnVuY3Rpb24gY2hhaW5lZEZ1bmN0aW9uKCkge1xuICAgIG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHR3by5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEJpbmRzIGEgbWV0aG9kIHRvIHRoZSBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGJvdW5kLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kIE1ldGhvZCB0byBiZSBib3VuZC5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgYm91bmQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBiaW5kQXV0b0JpbmRNZXRob2QoY29tcG9uZW50LCBtZXRob2QpIHtcbiAgdmFyIGJvdW5kTWV0aG9kID0gbWV0aG9kLmJpbmQoY29tcG9uZW50KTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZENvbnRleHQgPSBjb21wb25lbnQ7XG4gICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kO1xuICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyA9IG51bGw7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnQuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7XG4gICAgdmFyIF9iaW5kID0gYm91bmRNZXRob2QuYmluZDtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBibG9jay1zY29wZWQtdmFyLCBuby11bmRlZiAqL1xuICAgIGJvdW5kTWV0aG9kLmJpbmQgPSBmdW5jdGlvbihuZXdUaGlzICkge2ZvciAodmFyIGFyZ3M9W10sJF9fMD0xLCRfXzE9YXJndW1lbnRzLmxlbmd0aDskX18wPCRfXzE7JF9fMCsrKSBhcmdzLnB1c2goYXJndW1lbnRzWyRfXzBdKTtcbiAgICAgIC8vIFVzZXIgaXMgdHJ5aW5nIHRvIGJpbmQoKSBhbiBhdXRvYm91bmQgbWV0aG9kOyB3ZSBlZmZlY3RpdmVseSB3aWxsXG4gICAgICAvLyBpZ25vcmUgdGhlIHZhbHVlIG9mIFwidGhpc1wiIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHVzZSwgc29cbiAgICAgIC8vIGxldCdzIHdhcm4uXG4gICAgICBpZiAobmV3VGhpcyAhPT0gY29tcG9uZW50ICYmIG5ld1RoaXMgIT09IG51bGwpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ2JpbmQoKTogUmVhY3QgY29tcG9uZW50IG1ldGhvZHMgbWF5IG9ubHkgYmUgYm91bmQgdG8gdGhlICcgK1xuICAgICAgICAgICdjb21wb25lbnQgaW5zdGFuY2UuIFNlZSAlcycsXG4gICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICApIDogbnVsbCk7XG4gICAgICB9IGVsc2UgaWYgKCFhcmdzLmxlbmd0aCkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnYmluZCgpOiBZb3UgYXJlIGJpbmRpbmcgYSBjb21wb25lbnQgbWV0aG9kIHRvIHRoZSBjb21wb25lbnQuICcgK1xuICAgICAgICAgICdSZWFjdCBkb2VzIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGlnaC1wZXJmb3JtYW5jZSAnICtcbiAgICAgICAgICAnd2F5LCBzbyB5b3UgY2FuIHNhZmVseSByZW1vdmUgdGhpcyBjYWxsLiBTZWUgJXMnLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICByZXR1cm4gYm91bmRNZXRob2Q7XG4gICAgICB9XG4gICAgICB2YXIgcmVib3VuZE1ldGhvZCA9IF9iaW5kLmFwcGx5KGJvdW5kTWV0aG9kLCBhcmd1bWVudHMpO1xuICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRDb250ZXh0ID0gY29tcG9uZW50O1xuICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRNZXRob2QgPSBtZXRob2Q7XG4gICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyA9IGFyZ3M7XG4gICAgICByZXR1cm4gcmVib3VuZE1ldGhvZDtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB9O1xuICB9XG4gIHJldHVybiBib3VuZE1ldGhvZDtcbn1cblxuLyoqXG4gKiBCaW5kcyBhbGwgYXV0by1ib3VuZCBtZXRob2RzIGluIGEgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb21wb25lbnQgQ29tcG9uZW50IHdob3NlIG1ldGhvZCBpcyBnb2luZyB0byBiZSBib3VuZC5cbiAqL1xuZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kcyhjb21wb25lbnQpIHtcbiAgZm9yICh2YXIgYXV0b0JpbmRLZXkgaW4gY29tcG9uZW50Ll9fcmVhY3RBdXRvQmluZE1hcCkge1xuICAgIGlmIChjb21wb25lbnQuX19yZWFjdEF1dG9CaW5kTWFwLmhhc093blByb3BlcnR5KGF1dG9CaW5kS2V5KSkge1xuICAgICAgdmFyIG1ldGhvZCA9IGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRNYXBbYXV0b0JpbmRLZXldO1xuICAgICAgY29tcG9uZW50W2F1dG9CaW5kS2V5XSA9IGJpbmRBdXRvQmluZE1ldGhvZChcbiAgICAgICAgY29tcG9uZW50LFxuICAgICAgICBSZWFjdEVycm9yVXRpbHMuZ3VhcmQoXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGNvbXBvbmVudC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSArICcuJyArIGF1dG9CaW5kS2V5XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbnZhciB0eXBlRGVwcmVjYXRpb25EZXNjcmlwdG9yID0ge1xuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGlzcGxheU5hbWUgPSB0aGlzLmRpc3BsYXlOYW1lIHx8IHRoaXMubmFtZSB8fCAnQ29tcG9uZW50JztcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIGZhbHNlLFxuICAgICAgJyVzLnR5cGUgaXMgZGVwcmVjYXRlZC4gVXNlICVzIGRpcmVjdGx5IHRvIGFjY2VzcyB0aGUgY2xhc3MuJyxcbiAgICAgIGRpc3BsYXlOYW1lLFxuICAgICAgZGlzcGxheU5hbWVcbiAgICApIDogbnVsbCk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0eXBlJywge1xuICAgICAgdmFsdWU6IHRoaXNcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcblxuLyoqXG4gKiBBZGQgbW9yZSB0byB0aGUgUmVhY3RDbGFzcyBiYXNlIGNsYXNzLiBUaGVzZSBhcmUgYWxsIGxlZ2FjeSBmZWF0dXJlcyBhbmRcbiAqIHRoZXJlZm9yZSBub3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBtb2Rlcm4gUmVhY3RDb21wb25lbnQuXG4gKi9cbnZhciBSZWFjdENsYXNzTWl4aW4gPSB7XG5cbiAgLyoqXG4gICAqIFRPRE86IFRoaXMgd2lsbCBiZSBkZXByZWNhdGVkIGJlY2F1c2Ugc3RhdGUgc2hvdWxkIGFsd2F5cyBrZWVwIGEgY29uc2lzdGVudFxuICAgKiB0eXBlIHNpZ25hdHVyZSBhbmQgdGhlIG9ubHkgdXNlIGNhc2UgZm9yIHRoaXMsIGlzIHRvIGF2b2lkIHRoYXQuXG4gICAqL1xuICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uKG5ld1N0YXRlLCBjYWxsYmFjaykge1xuICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0aGlzLCBuZXdTdGF0ZSk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjayk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNNb3VudGVkOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgICAgaWYgKG93bmVyICE9PSBudWxsKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIG93bmVyLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcixcbiAgICAgICAgICAnJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICtcbiAgICAgICAgICAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArXG4gICAgICAgICAgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgK1xuICAgICAgICAgICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICAgIG93bmVyLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgb3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgICByZXR1cm4gKFxuICAgICAgaW50ZXJuYWxJbnN0YW5jZSAmJlxuICAgICAgaW50ZXJuYWxJbnN0YW5jZSAhPT0gUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5TW91bnRpbmdJbnN0YW5jZVxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHByb3BzLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFByb3BzIFN1YnNldCBvZiB0aGUgbmV4dCBwcm9wcy5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBwcm9wcyBhcmUgdXBkYXRlZC5cbiAgICogQGZpbmFsXG4gICAqIEBwdWJsaWNcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHNldFByb3BzOiBmdW5jdGlvbihwYXJ0aWFsUHJvcHMsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlU2V0UHJvcHModGhpcywgcGFydGlhbFByb3BzKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYWxsIHRoZSBwcm9wcy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1Byb3BzIFN1YnNldCBvZiB0aGUgbmV4dCBwcm9wcy5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBwcm9wcyBhcmUgdXBkYXRlZC5cbiAgICogQGZpbmFsXG4gICAqIEBwdWJsaWNcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHJlcGxhY2VQcm9wczogZnVuY3Rpb24obmV3UHJvcHMsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlUmVwbGFjZVByb3BzKHRoaXMsIG5ld1Byb3BzKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBSZWFjdENsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24oKSB7fTtcbmFzc2lnbihcbiAgUmVhY3RDbGFzc0NvbXBvbmVudC5wcm90b3R5cGUsXG4gIFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSxcbiAgUmVhY3RDbGFzc01peGluXG4pO1xuXG4vKipcbiAqIE1vZHVsZSBmb3IgY3JlYXRpbmcgY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gKlxuICogQGNsYXNzIFJlYWN0Q2xhc3NcbiAqL1xudmFyIFJlYWN0Q2xhc3MgPSB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb21wb3NpdGUgY29tcG9uZW50IGNsYXNzIGdpdmVuIGEgY2xhc3Mgc3BlY2lmaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHNwZWMgQ2xhc3Mgc3BlY2lmaWNhdGlvbiAod2hpY2ggbXVzdCBkZWZpbmUgYHJlbmRlcmApLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gQ29tcG9uZW50IGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICAgKiBAcHVibGljXG4gICAqL1xuICBjcmVhdGVDbGFzczogZnVuY3Rpb24oc3BlYykge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIG92ZXJyaWRkZW4gYnkgbW9ja3MuIFRoZSBhcmd1bWVudCBpcyB1c2VkXG4gICAgICAvLyBieSBtb2NrcyB0byBhc3NlcnQgb24gd2hhdCBnZXRzIG1vdW50ZWQuXG5cbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgdGhpcyBpbnN0YW5jZW9mIENvbnN0cnVjdG9yLFxuICAgICAgICAgICdTb21ldGhpbmcgaXMgY2FsbGluZyBhIFJlYWN0IGNvbXBvbmVudCBkaXJlY3RseS4gVXNlIGEgZmFjdG9yeSBvciAnICtcbiAgICAgICAgICAnSlNYIGluc3RlYWQuIFNlZTogaHR0cHM6Ly9mYi5tZS9yZWFjdC1sZWdhY3lmYWN0b3J5J1xuICAgICAgICApIDogbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdpcmUgdXAgYXV0by1iaW5kaW5nXG4gICAgICBpZiAodGhpcy5fX3JlYWN0QXV0b0JpbmRNYXApIHtcbiAgICAgICAgYmluZEF1dG9CaW5kTWV0aG9kcyh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHRoaXMuc3RhdGUgPSBudWxsO1xuXG4gICAgICAvLyBSZWFjdENsYXNzZXMgZG9lc24ndCBoYXZlIGNvbnN0cnVjdG9ycy4gSW5zdGVhZCwgdGhleSB1c2UgdGhlXG4gICAgICAvLyBnZXRJbml0aWFsU3RhdGUgYW5kIGNvbXBvbmVudFdpbGxNb3VudCBtZXRob2RzIGZvciBpbml0aWFsaXphdGlvbi5cblxuICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IHRoaXMuZ2V0SW5pdGlhbFN0YXRlID8gdGhpcy5nZXRJbml0aWFsU3RhdGUoKSA6IG51bGw7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0aGV5J3JlIHJldHVybmluZyBudWxsLlxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHRoaXMuZ2V0SW5pdGlhbFN0YXRlLl9pc01vY2tGdW5jdGlvbikge1xuICAgICAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmFkIHByYWN0aWNlLiBDb25zaWRlciB3YXJuaW5nIGhlcmUgYW5kXG4gICAgICAgICAgLy8gZGVwcmVjYXRpbmcgdGhpcyBjb252ZW5pZW5jZS5cbiAgICAgICAgICBpbml0aWFsU3RhdGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICB0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpbml0aWFsU3RhdGUpLFxuICAgICAgICAnJXMuZ2V0SW5pdGlhbFN0YXRlKCk6IG11c3QgcmV0dXJuIGFuIG9iamVjdCBvciBudWxsJyxcbiAgICAgICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50J1xuICAgICAgKSA6IGludmFyaWFudCh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpbml0aWFsU3RhdGUpKSk7XG5cbiAgICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgfTtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBuZXcgUmVhY3RDbGFzc0NvbXBvbmVudCgpO1xuICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuXG4gICAgaW5qZWN0ZWRNaXhpbnMuZm9yRWFjaChcbiAgICAgIG1peFNwZWNJbnRvQ29tcG9uZW50LmJpbmQobnVsbCwgQ29uc3RydWN0b3IpXG4gICAgKTtcblxuICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzcGVjKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGRlZmF1bHRQcm9wcyBwcm9wZXJ0eSBhZnRlciBhbGwgbWl4aW5zIGhhdmUgYmVlbiBtZXJnZWRcbiAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICBDb25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMgPSBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMoKTtcbiAgICB9XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgdGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHVzZSBvZiB0aGVzZSBtZXRob2QgbmFtZXMgaXMgb2ssXG4gICAgICAvLyBzaW5jZSBpdCdzIHVzZWQgd2l0aCBjcmVhdGVDbGFzcy4gSWYgaXQncyBub3QsIHRoZW4gaXQncyBsaWtlbHkgYVxuICAgICAgLy8gbWlzdGFrZSBzbyB3ZSdsbCB3YXJuIHlvdSB0byB1c2UgdGhlIHN0YXRpYyBwcm9wZXJ0eSwgcHJvcGVydHlcbiAgICAgIC8vIGluaXRpYWxpemVyIG9yIGNvbnN0cnVjdG9yIHJlc3BlY3RpdmVseS5cbiAgICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZSkge1xuICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307XG4gICAgICB9XG4gICAgfVxuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXIsXG4gICAgICAnY3JlYXRlQ2xhc3MoLi4uKTogQ2xhc3Mgc3BlY2lmaWNhdGlvbiBtdXN0IGltcGxlbWVudCBhIGByZW5kZXJgIG1ldGhvZC4nXG4gICAgKSA6IGludmFyaWFudChDb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyKSk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb21wb25lbnRTaG91bGRVcGRhdGUsXG4gICAgICAgICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgK1xuICAgICAgICAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArXG4gICAgICAgICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArXG4gICAgICAgICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLFxuICAgICAgICBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG5cbiAgICAvLyBSZWR1Y2UgdGltZSBzcGVudCBkb2luZyBsb29rdXBzIGJ5IHNldHRpbmcgdGhlc2Ugb24gdGhlIHByb3RvdHlwZS5cbiAgICBmb3IgKHZhciBtZXRob2ROYW1lIGluIFJlYWN0Q2xhc3NJbnRlcmZhY2UpIHtcbiAgICAgIGlmICghQ29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGhvb2tcbiAgICBDb25zdHJ1Y3Rvci50eXBlID0gQ29uc3RydWN0b3I7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCAndHlwZScsIHR5cGVEZXByZWNhdGlvbkRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAvLyBJRSB3aWxsIGZhaWwgb24gZGVmaW5lUHJvcGVydHkgKGVzNS1zaGltL3NoYW0gdG9vKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcblxuICBpbmplY3Rpb246IHtcbiAgICBpbmplY3RNaXhpbjogZnVuY3Rpb24obWl4aW4pIHtcbiAgICAgIGluamVjdGVkTWl4aW5zLnB1c2gobWl4aW4pO1xuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q2xhc3M7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRGJHRnpjeTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFTnNZWE56WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1VtVmhZM1JEYjIxd2IyNWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOdmJYQnZibVZ1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRVZ5Y205eVZYUnBiSE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWeWNtOXlWWFJwYkhOY0lpazdYRzUyWVhJZ1VtVmhZM1JKYm5OMFlXNWpaVTFoY0NBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFNXNXpkR0Z1WTJWTllYQmNJaWs3WEc1MllYSWdVbVZoWTNSTWFXWmxRM2xqYkdVZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFeHBabVZEZVdOc1pWd2lLVHRjYm5aaGNpQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjV6SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1YzF3aUtUdGNiblpoY2lCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Yms1aGJXVnpYQ0lwTzF4dWRtRnlJRkpsWVdOMFZYQmtZWFJsVVhWbGRXVWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRlZ3WkdGMFpWRjFaWFZsWENJcE8xeHVYRzUyWVhJZ1lYTnphV2R1SUQwZ2NtVnhkV2x5WlNoY0lpNHZUMkpxWldOMExtRnpjMmxuYmx3aUtUdGNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNTJZWElnYTJWNVRXbHljbTl5SUQwZ2NtVnhkV2x5WlNoY0lpNHZhMlY1VFdseWNtOXlYQ0lwTzF4dWRtRnlJR3RsZVU5bUlEMGdjbVZ4ZFdseVpTaGNJaTR2YTJWNVQyWmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiblpoY2lCTlNWaEpUbE5mUzBWWklEMGdhMlY1VDJZb2UyMXBlR2x1Y3pvZ2JuVnNiSDBwTzF4dVhHNHZLaXBjYmlBcUlGQnZiR2xqYVdWeklIUm9ZWFFnWkdWelkzSnBZbVVnYldWMGFHOWtjeUJwYmlCZ1VtVmhZM1JEYkdGemMwbHVkR1Z5Wm1GalpXQXVYRzRnS2k5Y2JuWmhjaUJUY0dWalVHOXNhV041SUQwZ2EyVjVUV2x5Y205eUtIdGNiaUFnTHlvcVhHNGdJQ0FxSUZSb1pYTmxJRzFsZEdodlpITWdiV0Y1SUdKbElHUmxabWx1WldRZ2IyNXNlU0J2Ym1ObElHSjVJSFJvWlNCamJHRnpjeUJ6Y0dWamFXWnBZMkYwYVc5dUlHOXlJRzFwZUdsdUxseHVJQ0FnS2k5Y2JpQWdSRVZHU1U1RlgwOU9RMFU2SUc1MWJHd3NYRzRnSUM4cUtseHVJQ0FnS2lCVWFHVnpaU0J0WlhSb2IyUnpJRzFoZVNCaVpTQmtaV1pwYm1Wa0lHSjVJR0p2ZEdnZ2RHaGxJR05zWVhOeklITndaV05wWm1sallYUnBiMjRnWVc1a0lHMXBlR2x1Y3k1Y2JpQWdJQ29nVTNWaWMyVnhkV1Z1ZENCa1pXWnBibWwwYVc5dWN5QjNhV3hzSUdKbElHTm9ZV2x1WldRdUlGUm9aWE5sSUcxbGRHaHZaSE1nYlhWemRDQnlaWFIxY200Z2RtOXBaQzVjYmlBZ0lDb3ZYRzRnSUVSRlJrbE9SVjlOUVU1Wk9pQnVkV3hzTEZ4dUlDQXZLaXBjYmlBZ0lDb2dWR2hsYzJVZ2JXVjBhRzlrY3lCaGNtVWdiM1psY25KcFpHbHVaeUIwYUdVZ1ltRnpaU0JqYkdGemN5NWNiaUFnSUNvdlhHNGdJRTlXUlZKU1NVUkZYMEpCVTBVNklHNTFiR3dzWEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1Z6WlNCdFpYUm9iMlJ6SUdGeVpTQnphVzFwYkdGeUlIUnZJRVJGUmtsT1JWOU5RVTVaTENCbGVHTmxjSFFnZDJVZ1lYTnpkVzFsSUhSb1pYa2djbVYwZFhKdVhHNGdJQ0FxSUc5aWFtVmpkSE11SUZkbElIUnllU0IwYnlCdFpYSm5aU0IwYUdVZ2EyVjVjeUJ2WmlCMGFHVWdjbVYwZFhKdUlIWmhiSFZsY3lCdlppQmhiR3dnZEdobElHMXBlR1ZrSUdsdVhHNGdJQ0FxSUdaMWJtTjBhVzl1Y3k0Z1NXWWdkR2hsY21VZ2FYTWdZU0JyWlhrZ1kyOXVabXhwWTNRZ2QyVWdkR2h5YjNjdVhHNGdJQ0FxTDF4dUlDQkVSVVpKVGtWZlRVRk9XVjlOUlZKSFJVUTZJRzUxYkd4Y2JuMHBPMXh1WEc1Y2JuWmhjaUJwYm1wbFkzUmxaRTFwZUdsdWN5QTlJRnRkTzF4dVhHNHZLaXBjYmlBcUlFTnZiWEJ2YzJsMFpTQmpiMjF3YjI1bGJuUnpJR0Z5WlNCb2FXZG9aWEl0YkdWMlpXd2dZMjl0Y0c5dVpXNTBjeUIwYUdGMElHTnZiWEJ2YzJVZ2IzUm9aWElnWTI5dGNHOXphWFJsWEc0Z0tpQnZjaUJ1WVhScGRtVWdZMjl0Y0c5dVpXNTBjeTVjYmlBcVhHNGdLaUJVYnlCamNtVmhkR1VnWVNCdVpYY2dkSGx3WlNCdlppQmdVbVZoWTNSRGJHRnpjMkFzSUhCaGMzTWdZU0J6Y0dWamFXWnBZMkYwYVc5dUlHOW1YRzRnS2lCNWIzVnlJRzVsZHlCamJHRnpjeUIwYnlCZ1VtVmhZM1F1WTNKbFlYUmxRMnhoYzNOZ0xpQlVhR1VnYjI1c2VTQnlaWEYxYVhKbGJXVnVkQ0J2WmlCNWIzVnlJR05zWVhOelhHNGdLaUJ6Y0dWamFXWnBZMkYwYVc5dUlHbHpJSFJvWVhRZ2VXOTFJR2x0Y0d4bGJXVnVkQ0JoSUdCeVpXNWtaWEpnSUcxbGRHaHZaQzVjYmlBcVhHNGdLaUFnSUhaaGNpQk5lVU52YlhCdmJtVnVkQ0E5SUZKbFlXTjBMbU55WldGMFpVTnNZWE56S0h0Y2JpQXFJQ0FnSUNCeVpXNWtaWEk2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ29nSUNBZ0lDQWdjbVYwZFhKdUlEeGthWFkrU0dWc2JHOGdWMjl5YkdROEwyUnBkajQ3WEc0Z0tpQWdJQ0FnZlZ4dUlDb2dJQ0I5S1R0Y2JpQXFYRzRnS2lCVWFHVWdZMnhoYzNNZ2MzQmxZMmxtYVdOaGRHbHZiaUJ6ZFhCd2IzSjBjeUJoSUhOd1pXTnBabWxqSUhCeWIzUnZZMjlzSUc5bUlHMWxkR2h2WkhNZ2RHaGhkQ0JvWVhabFhHNGdLaUJ6Y0dWamFXRnNJRzFsWVc1cGJtY2dLR1V1Wnk0Z1lISmxibVJsY21BcExpQlRaV1VnWUZKbFlXTjBRMnhoYzNOSmJuUmxjbVpoWTJWZ0lHWnZjbHh1SUNvZ2JXOXlaU0IwYUdVZ1kyOXRjSEpsYUdWdWMybDJaU0J3Y205MGIyTnZiQzRnUVc1NUlHOTBhR1Z5SUhCeWIzQmxjblJwWlhNZ1lXNWtJRzFsZEdodlpITWdhVzRnZEdobFhHNGdLaUJqYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1SUhkcGJHd2dZWFpoYVd4aFlteGxJRzl1SUhSb1pTQndjbTkwYjNSNWNHVXVYRzRnS2x4dUlDb2dRR2x1ZEdWeVptRmpaU0JTWldGamRFTnNZWE56U1c1MFpYSm1ZV05sWEc0Z0tpQkFhVzUwWlhKdVlXeGNiaUFxTDF4dWRtRnlJRkpsWVdOMFEyeGhjM05KYm5SbGNtWmhZMlVnUFNCN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVGdUlHRnljbUY1SUc5bUlFMXBlR2x1SUc5aWFtVmpkSE1nZEc4Z2FXNWpiSFZrWlNCM2FHVnVJR1JsWm1sdWFXNW5JSGx2ZFhJZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBZEhsd1pTQjdZWEp5WVhsOVhHNGdJQ0FxSUVCdmNIUnBiMjVoYkZ4dUlDQWdLaTljYmlBZ2JXbDRhVzV6T2lCVGNHVmpVRzlzYVdONUxrUkZSa2xPUlY5TlFVNVpMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkJiaUJ2WW1wbFkzUWdZMjl1ZEdGcGJtbHVaeUJ3Y205d1pYSjBhV1Z6SUdGdVpDQnRaWFJvYjJSeklIUm9ZWFFnYzJodmRXeGtJR0psSUdSbFptbHVaV1FnYjI1Y2JpQWdJQ29nZEdobElHTnZiWEJ2Ym1WdWRDZHpJR052Ym5OMGNuVmpkRzl5SUdsdWMzUmxZV1FnYjJZZ2FYUnpJSEJ5YjNSdmRIbHdaU0FvYzNSaGRHbGpJRzFsZEdodlpITXBMbHh1SUNBZ0tseHVJQ0FnS2lCQWRIbHdaU0I3YjJKcVpXTjBmVnh1SUNBZ0tpQkFiM0IwYVc5dVlXeGNiaUFnSUNvdlhHNGdJSE4wWVhScFkzTTZJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDFCVGxrc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVSbFptbHVhWFJwYjI0Z2IyWWdjSEp2Y0NCMGVYQmxjeUJtYjNJZ2RHaHBjeUJqYjIxd2IyNWxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQjBlWEJsSUh0dlltcGxZM1I5WEc0Z0lDQXFJRUJ2Y0hScGIyNWhiRnh1SUNBZ0tpOWNiaUFnY0hKdmNGUjVjR1Z6T2lCVGNHVmpVRzlzYVdONUxrUkZSa2xPUlY5TlFVNVpMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkVaV1pwYm1sMGFXOXVJRzltSUdOdmJuUmxlSFFnZEhsd1pYTWdabTl5SUhSb2FYTWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCQWRIbHdaU0I3YjJKcVpXTjBmVnh1SUNBZ0tpQkFiM0IwYVc5dVlXeGNiaUFnSUNvdlhHNGdJR052Ym5SbGVIUlVlWEJsY3pvZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSR1ZtYVc1cGRHbHZiaUJ2WmlCamIyNTBaWGgwSUhSNWNHVnpJSFJvYVhNZ1kyOXRjRzl1Wlc1MElITmxkSE1nWm05eUlHbDBjeUJqYUdsc1pISmxiaTVjYmlBZ0lDcGNiaUFnSUNvZ1FIUjVjR1VnZTI5aWFtVmpkSDFjYmlBZ0lDb2dRRzl3ZEdsdmJtRnNYRzRnSUNBcUwxeHVJQ0JqYUdsc1pFTnZiblJsZUhSVWVYQmxjem9nVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTeGNibHh1SUNBdkx5QTlQVDA5SUVSbFptbHVhWFJwYjI0Z2JXVjBhRzlrY3lBOVBUMDlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFbHVkbTlyWldRZ2QyaGxiaUIwYUdVZ1kyOXRjRzl1Wlc1MElHbHpJRzF2ZFc1MFpXUXVJRlpoYkhWbGN5QnBiaUIwYUdVZ2JXRndjR2x1WnlCM2FXeHNJR0psSUhObGRDQnZibHh1SUNBZ0tpQmdkR2hwY3k1d2NtOXdjMkFnYVdZZ2RHaGhkQ0J3Y205d0lHbHpJRzV2ZENCemNHVmphV1pwWldRZ0tHa3VaUzRnZFhOcGJtY2dZVzRnWUdsdVlDQmphR1ZqYXlrdVhHNGdJQ0FxWEc0Z0lDQXFJRlJvYVhNZ2JXVjBhRzlrSUdseklHbHVkbTlyWldRZ1ltVm1iM0psSUdCblpYUkpibWwwYVdGc1UzUmhkR1ZnSUdGdVpDQjBhR1Z5WldadmNtVWdZMkZ1Ym05MElISmxiSGxjYmlBZ0lDb2diMjRnWUhSb2FYTXVjM1JoZEdWZ0lHOXlJSFZ6WlNCZ2RHaHBjeTV6WlhSVGRHRjBaV0F1WEc0Z0lDQXFYRzRnSUNBcUlFQnlaWFIxY200Z2UyOWlhbVZqZEgxY2JpQWdJQ29nUUc5d2RHbHZibUZzWEc0Z0lDQXFMMXh1SUNCblpYUkVaV1poZFd4MFVISnZjSE02SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsbGZUVVZTUjBWRUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCSmJuWnZhMlZrSUc5dVkyVWdZbVZtYjNKbElIUm9aU0JqYjIxd2IyNWxiblFnYVhNZ2JXOTFiblJsWkM0Z1ZHaGxJSEpsZEhWeWJpQjJZV3gxWlNCM2FXeHNJR0psSUhWelpXUmNiaUFnSUNvZ1lYTWdkR2hsSUdsdWFYUnBZV3dnZG1Gc2RXVWdiMllnWUhSb2FYTXVjM1JoZEdWZ0xseHVJQ0FnS2x4dUlDQWdLaUFnSUdkbGRFbHVhWFJwWVd4VGRHRjBaVG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FxSUNBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnS2lBZ0lDQWdJQ0JwYzA5dU9pQm1ZV3h6WlN4Y2JpQWdJQ29nSUNBZ0lDQWdabTl2UW1GNk9pQnVaWGNnUW1GNlJtOXZLQ2xjYmlBZ0lDb2dJQ0FnSUgxY2JpQWdJQ29nSUNCOVhHNGdJQ0FxWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMjlpYW1WamRIMWNiaUFnSUNvZ1FHOXdkR2x2Ym1Gc1hHNGdJQ0FxTDF4dUlDQm5aWFJKYm1sMGFXRnNVM1JoZEdVNklGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGxmVFVWU1IwVkVMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdHZZbXBsWTNSOVhHNGdJQ0FxSUVCdmNIUnBiMjVoYkZ4dUlDQWdLaTljYmlBZ1oyVjBRMmhwYkdSRGIyNTBaWGgwT2lCVGNHVmpVRzlzYVdONUxrUkZSa2xPUlY5TlFVNVpYMDFGVWtkRlJDeGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZYTmxjeUJ3Y205d2N5Qm1jbTl0SUdCMGFHbHpMbkJ5YjNCellDQmhibVFnYzNSaGRHVWdabkp2YlNCZ2RHaHBjeTV6ZEdGMFpXQWdkRzhnY21WdVpHVnlJSFJvWlZ4dUlDQWdLaUJ6ZEhKMVkzUjFjbVVnYjJZZ2RHaGxJR052YlhCdmJtVnVkQzVjYmlBZ0lDcGNiaUFnSUNvZ1RtOGdaM1ZoY21GdWRHVmxjeUJoY21VZ2JXRmtaU0JoWW05MWRDQjNhR1Z1SUc5eUlHaHZkeUJ2Wm5SbGJpQjBhR2x6SUcxbGRHaHZaQ0JwY3lCcGJuWnZhMlZrTENCemIxeHVJQ0FnS2lCcGRDQnRkWE4wSUc1dmRDQm9ZWFpsSUhOcFpHVWdaV1ptWldOMGN5NWNiaUFnSUNwY2JpQWdJQ29nSUNCeVpXNWtaWEk2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnS2lBZ0lDQWdkbUZ5SUc1aGJXVWdQU0IwYUdsekxuQnliM0J6TG01aGJXVTdYRzRnSUNBcUlDQWdJQ0J5WlhSMWNtNGdQR1JwZGo1SVpXeHNieXdnZTI1aGJXVjlJVHd2WkdsMlBqdGNiaUFnSUNvZ0lDQjlYRzRnSUNBcVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmVnh1SUNBZ0tpQkFibTl6YVdSbFpXWm1aV04wYzF4dUlDQWdLaUJBY21WeGRXbHlaV1JjYmlBZ0lDb3ZYRzRnSUhKbGJtUmxjam9nVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVDA1RFJTeGNibHh1WEc1Y2JpQWdMeThnUFQwOVBTQkVaV3hsWjJGMFpTQnRaWFJvYjJSeklEMDlQVDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzUyYjJ0bFpDQjNhR1Z1SUhSb1pTQmpiMjF3YjI1bGJuUWdhWE1nYVc1cGRHbGhiR3g1SUdOeVpXRjBaV1FnWVc1a0lHRmliM1YwSUhSdklHSmxJRzF2ZFc1MFpXUXVYRzRnSUNBcUlGUm9hWE1nYldGNUlHaGhkbVVnYzJsa1pTQmxabVpsWTNSekxDQmlkWFFnWVc1NUlHVjRkR1Z5Ym1Gc0lITjFZbk5qY21sd2RHbHZibk1nYjNJZ1pHRjBZU0JqY21WaGRHVmtYRzRnSUNBcUlHSjVJSFJvYVhNZ2JXVjBhRzlrSUcxMWMzUWdZbVVnWTJ4bFlXNWxaQ0IxY0NCcGJpQmdZMjl0Y0c5dVpXNTBWMmxzYkZWdWJXOTFiblJnTGx4dUlDQWdLbHh1SUNBZ0tpQkFiM0IwYVc5dVlXeGNiaUFnSUNvdlhHNGdJR052YlhCdmJtVnVkRmRwYkd4TmIzVnVkRG9nVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1NXNTJiMnRsWkNCM2FHVnVJSFJvWlNCamIyMXdiMjVsYm5RZ2FHRnpJR0psWlc0Z2JXOTFiblJsWkNCaGJtUWdhR0Z6SUdFZ1JFOU5JSEpsY0hKbGMyVnVkR0YwYVc5dUxseHVJQ0FnS2lCSWIzZGxkbVZ5TENCMGFHVnlaU0JwY3lCdWJ5Qm5kV0Z5WVc1MFpXVWdkR2hoZENCMGFHVWdSRTlOSUc1dlpHVWdhWE1nYVc0Z2RHaGxJR1J2WTNWdFpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCVmMyVWdkR2hwY3lCaGN5QmhiaUJ2Y0hCdmNuUjFibWwwZVNCMGJ5QnZjR1Z5WVhSbElHOXVJSFJvWlNCRVQwMGdkMmhsYmlCMGFHVWdZMjl0Y0c5dVpXNTBJR2hoYzF4dUlDQWdLaUJpWldWdUlHMXZkVzUwWldRZ0tHbHVhWFJwWVd4cGVtVmtJR0Z1WkNCeVpXNWtaWEpsWkNrZ1ptOXlJSFJvWlNCbWFYSnpkQ0IwYVcxbExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUhKdmIzUk9iMlJsSUVSUFRTQmxiR1Z0Wlc1MElISmxjSEpsYzJWdWRHbHVaeUIwYUdVZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2lCQWIzQjBhVzl1WVd4Y2JpQWdJQ292WEc0Z0lHTnZiWEJ2Ym1WdWRFUnBaRTF2ZFc1ME9pQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm5admEyVmtJR0psWm05eVpTQjBhR1VnWTI5dGNHOXVaVzUwSUhKbFkyVnBkbVZ6SUc1bGR5QndjbTl3Y3k1Y2JpQWdJQ3BjYmlBZ0lDb2dWWE5sSUhSb2FYTWdZWE1nWVc0Z2IzQndiM0owZFc1cGRIa2dkRzhnY21WaFkzUWdkRzhnWVNCd2NtOXdJSFJ5WVc1emFYUnBiMjRnWW5rZ2RYQmtZWFJwYm1jZ2RHaGxYRzRnSUNBcUlITjBZWFJsSUhWemFXNW5JR0IwYUdsekxuTmxkRk4wWVhSbFlDNGdRM1Z5Y21WdWRDQndjbTl3Y3lCaGNtVWdZV05qWlhOelpXUWdkbWxoSUdCMGFHbHpMbkJ5YjNCellDNWNiaUFnSUNwY2JpQWdJQ29nSUNCamIyMXdiMjVsYm5SWGFXeHNVbVZqWldsMlpWQnliM0J6T2lCbWRXNWpkR2x2YmlodVpYaDBVSEp2Y0hNc0lHNWxlSFJEYjI1MFpYaDBLU0I3WEc0Z0lDQXFJQ0FnSUNCMGFHbHpMbk5sZEZOMFlYUmxLSHRjYmlBZ0lDb2dJQ0FnSUNBZ2JHbHJaWE5KYm1OeVpXRnphVzVuT2lCdVpYaDBVSEp2Y0hNdWJHbHJaVU52ZFc1MElENGdkR2hwY3k1d2NtOXdjeTVzYVd0bFEyOTFiblJjYmlBZ0lDb2dJQ0FnSUgwcE8xeHVJQ0FnS2lBZ0lIMWNiaUFnSUNwY2JpQWdJQ29nVGs5VVJUb2dWR2hsY21VZ2FYTWdibThnWlhGMWFYWmhiR1Z1ZENCZ1kyOXRjRzl1Wlc1MFYybHNiRkpsWTJWcGRtVlRkR0YwWldBdUlFRnVJR2x1WTI5dGFXNW5JSEJ5YjNCY2JpQWdJQ29nZEhKaGJuTnBkR2x2YmlCdFlYa2dZMkYxYzJVZ1lTQnpkR0YwWlNCamFHRnVaMlVzSUdKMWRDQjBhR1VnYjNCd2IzTnBkR1VnYVhNZ2JtOTBJSFJ5ZFdVdUlFbG1JSGx2ZFZ4dUlDQWdLaUJ1WldWa0lHbDBMQ0I1YjNVZ1lYSmxJSEJ5YjJKaFlteDVJR3h2YjJ0cGJtY2dabTl5SUdCamIyMXdiMjVsYm5SWGFXeHNWWEJrWVhSbFlDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJRzVsZUhSUWNtOXdjMXh1SUNBZ0tpQkFiM0IwYVc5dVlXeGNiaUFnSUNvdlhHNGdJR052YlhCdmJtVnVkRmRwYkd4U1pXTmxhWFpsVUhKdmNITTZJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDFCVGxrc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWRtOXJaV1FnZDJocGJHVWdaR1ZqYVdScGJtY2dhV1lnZEdobElHTnZiWEJ2Ym1WdWRDQnphRzkxYkdRZ1ltVWdkWEJrWVhSbFpDQmhjeUJoSUhKbGMzVnNkQ0J2Wmx4dUlDQWdLaUJ5WldObGFYWnBibWNnYm1WM0lIQnliM0J6TENCemRHRjBaU0JoYm1RdmIzSWdZMjl1ZEdWNGRDNWNiaUFnSUNwY2JpQWdJQ29nVlhObElIUm9hWE1nWVhNZ1lXNGdiM0J3YjNKMGRXNXBkSGtnZEc4Z1lISmxkSFZ5YmlCbVlXeHpaV0FnZDJobGJpQjViM1VuY21VZ1kyVnlkR0ZwYmlCMGFHRjBJSFJvWlZ4dUlDQWdLaUIwY21GdWMybDBhVzl1SUhSdklIUm9aU0J1WlhjZ2NISnZjSE12YzNSaGRHVXZZMjl1ZEdWNGRDQjNhV3hzSUc1dmRDQnlaWEYxYVhKbElHRWdZMjl0Y0c5dVpXNTBYRzRnSUNBcUlIVndaR0YwWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dJQ0J6YUc5MWJHUkRiMjF3YjI1bGJuUlZjR1JoZEdVNklHWjFibU4wYVc5dUtHNWxlSFJRY205d2N5d2dibVY0ZEZOMFlYUmxMQ0J1WlhoMFEyOXVkR1Y0ZENrZ2UxeHVJQ0FnS2lBZ0lDQWdjbVYwZFhKdUlDRmxjWFZoYkNodVpYaDBVSEp2Y0hNc0lIUm9hWE11Y0hKdmNITXBJSHg4WEc0Z0lDQXFJQ0FnSUNBZ0lDRmxjWFZoYkNodVpYaDBVM1JoZEdVc0lIUm9hWE11YzNSaGRHVXBJSHg4WEc0Z0lDQXFJQ0FnSUNBZ0lDRmxjWFZoYkNodVpYaDBRMjl1ZEdWNGRDd2dkR2hwY3k1amIyNTBaWGgwS1R0Y2JpQWdJQ29nSUNCOVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnVaWGgwVUhKdmNITmNiaUFnSUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCdVpYaDBVM1JoZEdWY2JpQWdJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J1WlhoMFEyOXVkR1Y0ZEZ4dUlDQWdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmU0JVY25WbElHbG1JSFJvWlNCamIyMXdiMjVsYm5RZ2MyaHZkV3hrSUhWd1pHRjBaUzVjYmlBZ0lDb2dRRzl3ZEdsdmJtRnNYRzRnSUNBcUwxeHVJQ0J6YUc5MWJHUkRiMjF3YjI1bGJuUlZjR1JoZEdVNklGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwOU9RMFVzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1ZG05clpXUWdkMmhsYmlCMGFHVWdZMjl0Y0c5dVpXNTBJR2x6SUdGaWIzVjBJSFJ2SUhWd1pHRjBaU0JrZFdVZ2RHOGdZU0IwY21GdWMybDBhVzl1SUdaeWIyMWNiaUFnSUNvZ1lIUm9hWE11Y0hKdmNITmdMQ0JnZEdocGN5NXpkR0YwWldBZ1lXNWtJR0IwYUdsekxtTnZiblJsZUhSZ0lIUnZJR0J1WlhoMFVISnZjSE5nTENCZ2JtVjRkRk4wWVhSbFlGeHVJQ0FnS2lCaGJtUWdZRzVsZUhSRGIyNTBaWGgwWUM1Y2JpQWdJQ3BjYmlBZ0lDb2dWWE5sSUhSb2FYTWdZWE1nWVc0Z2IzQndiM0owZFc1cGRIa2dkRzhnY0dWeVptOXliU0J3Y21Wd1lYSmhkR2x2YmlCaVpXWnZjbVVnWVc0Z2RYQmtZWFJsSUc5alkzVnljeTVjYmlBZ0lDcGNiaUFnSUNvZ1RrOVVSVG9nV1c5MUlDb3FZMkZ1Ym05MEtpb2dkWE5sSUdCMGFHbHpMbk5sZEZOMFlYUmxLQ2xnSUdsdUlIUm9hWE1nYldWMGFHOWtMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYm1WNGRGQnliM0J6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdQMjlpYW1WamRIMGdibVY0ZEZOMFlYUmxYRzRnSUNBcUlFQndZWEpoYlNCN1AyOWlhbVZqZEgwZ2JtVjRkRU52Ym5SbGVIUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1ZlNCMGNtRnVjMkZqZEdsdmJseHVJQ0FnS2lCQWIzQjBhVzl1WVd4Y2JpQWdJQ292WEc0Z0lHTnZiWEJ2Ym1WdWRGZHBiR3hWY0dSaGRHVTZJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDFCVGxrc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWRtOXJaV1FnZDJobGJpQjBhR1VnWTI5dGNHOXVaVzUwSjNNZ1JFOU5JSEpsY0hKbGMyVnVkR0YwYVc5dUlHaGhjeUJpWldWdUlIVndaR0YwWldRdVhHNGdJQ0FxWEc0Z0lDQXFJRlZ6WlNCMGFHbHpJR0Z6SUdGdUlHOXdjRzl5ZEhWdWFYUjVJSFJ2SUc5d1pYSmhkR1VnYjI0Z2RHaGxJRVJQVFNCM2FHVnVJSFJvWlNCamIyMXdiMjVsYm5RZ2FHRnpYRzRnSUNBcUlHSmxaVzRnZFhCa1lYUmxaQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhCeVpYWlFjbTl3YzF4dUlDQWdLaUJBY0dGeVlXMGdlejl2WW1wbFkzUjlJSEJ5WlhaVGRHRjBaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2V6OXZZbXBsWTNSOUlIQnlaWFpEYjI1MFpYaDBYRzRnSUNBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdjbTl2ZEU1dlpHVWdSRTlOSUdWc1pXMWxiblFnY21Wd2NtVnpaVzUwYVc1bklIUm9aU0JqYjIxd2IyNWxiblF1WEc0Z0lDQXFJRUJ2Y0hScGIyNWhiRnh1SUNBZ0tpOWNiaUFnWTI5dGNHOXVaVzUwUkdsa1ZYQmtZWFJsT2lCVGNHVmpVRzlzYVdONUxrUkZSa2xPUlY5TlFVNVpMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkpiblp2YTJWa0lIZG9aVzRnZEdobElHTnZiWEJ2Ym1WdWRDQnBjeUJoWW05MWRDQjBieUJpWlNCeVpXMXZkbVZrSUdaeWIyMGdhWFJ6SUhCaGNtVnVkQ0JoYm1RZ2FHRjJaVnh1SUNBZ0tpQnBkSE1nUkU5TklISmxjSEpsYzJWdWRHRjBhVzl1SUdSbGMzUnliM2xsWkM1Y2JpQWdJQ3BjYmlBZ0lDb2dWWE5sSUhSb2FYTWdZWE1nWVc0Z2IzQndiM0owZFc1cGRIa2dkRzhnWkdWaGJHeHZZMkYwWlNCaGJua2daWGgwWlhKdVlXd2djbVZ6YjNWeVkyVnpMbHh1SUNBZ0tseHVJQ0FnS2lCT1QxUkZPaUJVYUdWeVpTQnBjeUJ1YnlCZ1kyOXRjRzl1Wlc1MFJHbGtWVzV0YjNWdWRHQWdjMmx1WTJVZ2VXOTFjaUJqYjIxd2IyNWxiblFnZDJsc2JDQm9ZWFpsSUdKbFpXNWNiaUFnSUNvZ1pHVnpkSEp2ZVdWa0lHSjVJSFJvWVhRZ2NHOXBiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQnZjSFJwYjI1aGJGeHVJQ0FnS2k5Y2JpQWdZMjl0Y0c5dVpXNTBWMmxzYkZWdWJXOTFiblE2SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsa3NYRzVjYmx4dVhHNGdJQzh2SUQwOVBUMGdRV1IyWVc1alpXUWdiV1YwYUc5a2N5QTlQVDA5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlZ3WkdGMFpYTWdkR2hsSUdOdmJYQnZibVZ1ZENkeklHTjFjbkpsYm5Sc2VTQnRiM1Z1ZEdWa0lFUlBUU0J5WlhCeVpYTmxiblJoZEdsdmJpNWNiaUFnSUNwY2JpQWdJQ29nUW5rZ1pHVm1ZWFZzZEN3Z2RHaHBjeUJwYlhCc1pXMWxiblJ6SUZKbFlXTjBKM01nY21WdVpHVnlhVzVuSUdGdVpDQnlaV052Ym1OcGJHbGhkR2x2YmlCaGJHZHZjbWwwYUcwdVhHNGdJQ0FxSUZOdmNHaHBjM1JwWTJGMFpXUWdZMnhwWlc1MGN5QnRZWGtnZDJsemFDQjBieUJ2ZG1WeWNtbGtaU0IwYUdsekxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNTlJSFJ5WVc1ellXTjBhVzl1WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpQkFiM1psY25KcFpHRmliR1ZjYmlBZ0lDb3ZYRzRnSUhWd1pHRjBaVU52YlhCdmJtVnVkRG9nVTNCbFkxQnZiR2xqZVM1UFZrVlNVa2xFUlY5Q1FWTkZYRzVjYm4wN1hHNWNiaThxS2x4dUlDb2dUV0Z3Y0dsdVp5Qm1jbTl0SUdOc1lYTnpJSE53WldOcFptbGpZWFJwYjI0Z2EyVjVjeUIwYnlCemNHVmphV0ZzSUhCeWIyTmxjM05wYm1jZ1puVnVZM1JwYjI1ekxseHVJQ3BjYmlBcUlFRnNkR2h2ZFdkb0lIUm9aWE5sSUdGeVpTQmtaV05zWVhKbFpDQnNhV3RsSUdsdWMzUmhibU5sSUhCeWIzQmxjblJwWlhNZ2FXNGdkR2hsSUhOd1pXTnBabWxqWVhScGIyNWNiaUFxSUhkb1pXNGdaR1ZtYVc1cGJtY2dZMnhoYzNObGN5QjFjMmx1WnlCZ1VtVmhZM1F1WTNKbFlYUmxRMnhoYzNOZ0xDQjBhR1Y1SUdGeVpTQmhZM1IxWVd4c2VTQnpkR0YwYVdOY2JpQXFJR0Z1WkNCaGNtVWdZV05qWlhOemFXSnNaU0J2YmlCMGFHVWdZMjl1YzNSeWRXTjBiM0lnYVc1emRHVmhaQ0J2WmlCMGFHVWdjSEp2ZEc5MGVYQmxMaUJFWlhOd2FYUmxYRzRnS2lCaVpXbHVaeUJ6ZEdGMGFXTXNJSFJvWlhrZ2JYVnpkQ0JpWlNCa1pXWnBibVZrSUc5MWRITnBaR1VnYjJZZ2RHaGxJRndpYzNSaGRHbGpjMXdpSUd0bGVTQjFibVJsY2x4dUlDb2dkMmhwWTJnZ1lXeHNJRzkwYUdWeUlITjBZWFJwWXlCdFpYUm9iMlJ6SUdGeVpTQmtaV1pwYm1Wa0xseHVJQ292WEc1MllYSWdVa1ZUUlZKV1JVUmZVMUJGUTE5TFJWbFRJRDBnZTF4dUlDQmthWE53YkdGNVRtRnRaVG9nWm5WdVkzUnBiMjRvUTI5dWMzUnlkV04wYjNJc0lHUnBjM0JzWVhsT1lXMWxLU0I3WEc0Z0lDQWdRMjl1YzNSeWRXTjBiM0l1WkdsemNHeGhlVTVoYldVZ1BTQmthWE53YkdGNVRtRnRaVHRjYmlBZ2ZTeGNiaUFnYldsNGFXNXpPaUJtZFc1amRHbHZiaWhEYjI1emRISjFZM1J2Y2l3Z2JXbDRhVzV6S1NCN1hHNGdJQ0FnYVdZZ0tHMXBlR2x1Y3lrZ2UxeHVJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQnRhWGhwYm5NdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnYldsNFUzQmxZMGx1ZEc5RGIyMXdiMjVsYm5Rb1EyOXVjM1J5ZFdOMGIzSXNJRzFwZUdsdWMxdHBYU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOUxGeHVJQ0JqYUdsc1pFTnZiblJsZUhSVWVYQmxjem9nWm5WdVkzUnBiMjRvUTI5dWMzUnlkV04wYjNJc0lHTm9hV3hrUTI5dWRHVjRkRlI1Y0dWektTQjdYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ2RtRnNhV1JoZEdWVWVYQmxSR1ZtS0Z4dUlDQWdJQ0FnSUNCRGIyNXpkSEoxWTNSdmNpeGNiaUFnSUNBZ0lDQWdZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTXNYRzRnSUNBZ0lDQWdJRkpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Ym5NdVkyaHBiR1JEYjI1MFpYaDBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNiaUFnSUNCRGIyNXpkSEoxWTNSdmNpNWphR2xzWkVOdmJuUmxlSFJVZVhCbGN5QTlJR0Z6YzJsbmJpaGNiaUFnSUNBZ0lIdDlMRnh1SUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0l1WTJocGJHUkRiMjUwWlhoMFZIbHdaWE1zWEc0Z0lDQWdJQ0JqYUdsc1pFTnZiblJsZUhSVWVYQmxjMXh1SUNBZ0lDazdYRzRnSUgwc1hHNGdJR052Ym5SbGVIUlVlWEJsY3pvZ1puVnVZM1JwYjI0b1EyOXVjM1J5ZFdOMGIzSXNJR052Ym5SbGVIUlVlWEJsY3lrZ2UxeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhaaGJHbGtZWFJsVkhsd1pVUmxaaWhjYmlBZ0lDQWdJQ0FnUTI5dWMzUnlkV04wYjNJc1hHNGdJQ0FnSUNBZ0lHTnZiblJsZUhSVWVYQmxjeXhjYmlBZ0lDQWdJQ0FnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWN5NWpiMjUwWlhoMFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JpQWdJQ0JEYjI1emRISjFZM1J2Y2k1amIyNTBaWGgwVkhsd1pYTWdQU0JoYzNOcFoyNG9YRzRnSUNBZ0lDQjdmU3hjYmlBZ0lDQWdJRU52Ym5OMGNuVmpkRzl5TG1OdmJuUmxlSFJVZVhCbGN5eGNiaUFnSUNBZ0lHTnZiblJsZUhSVWVYQmxjMXh1SUNBZ0lDazdYRzRnSUgwc1hHNGdJQzhxS2x4dUlDQWdLaUJUY0dWamFXRnNJR05oYzJVZ1oyVjBSR1ZtWVhWc2RGQnliM0J6SUhkb2FXTm9JSE5vYjNWc1pDQnRiM1psSUdsdWRHOGdjM1JoZEdsamN5QmlkWFFnY21WeGRXbHlaWE5jYmlBZ0lDb2dZWFYwYjIxaGRHbGpJRzFsY21kcGJtY3VYRzRnSUNBcUwxeHVJQ0JuWlhSRVpXWmhkV3gwVUhKdmNITTZJR1oxYm1OMGFXOXVLRU52Ym5OMGNuVmpkRzl5TENCblpYUkVaV1poZFd4MFVISnZjSE1wSUh0Y2JpQWdJQ0JwWmlBb1EyOXVjM1J5ZFdOMGIzSXVaMlYwUkdWbVlYVnNkRkJ5YjNCektTQjdYRzRnSUNBZ0lDQkRiMjV6ZEhKMVkzUnZjaTVuWlhSRVpXWmhkV3gwVUhKdmNITWdQU0JqY21WaGRHVk5aWEpuWldSU1pYTjFiSFJHZFc1amRHbHZiaWhjYmlBZ0lDQWdJQ0FnUTI5dWMzUnlkV04wYjNJdVoyVjBSR1ZtWVhWc2RGQnliM0J6TEZ4dUlDQWdJQ0FnSUNCblpYUkVaV1poZFd4MFVISnZjSE5jYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lFTnZibk4wY25WamRHOXlMbWRsZEVSbFptRjFiSFJRY205d2N5QTlJR2RsZEVSbFptRjFiSFJRY205d2N6dGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lIQnliM0JVZVhCbGN6b2dablZ1WTNScGIyNG9RMjl1YzNSeWRXTjBiM0lzSUhCeWIzQlVlWEJsY3lrZ2UxeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhaaGJHbGtZWFJsVkhsd1pVUmxaaWhjYmlBZ0lDQWdJQ0FnUTI5dWMzUnlkV04wYjNJc1hHNGdJQ0FnSUNBZ0lIQnliM0JVZVhCbGN5eGNiaUFnSUNBZ0lDQWdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1Y3k1d2NtOXdYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNiaUFnSUNCRGIyNXpkSEoxWTNSdmNpNXdjbTl3Vkhsd1pYTWdQU0JoYzNOcFoyNG9YRzRnSUNBZ0lDQjdmU3hjYmlBZ0lDQWdJRU52Ym5OMGNuVmpkRzl5TG5CeWIzQlVlWEJsY3l4Y2JpQWdJQ0FnSUhCeWIzQlVlWEJsYzF4dUlDQWdJQ2s3WEc0Z0lIMHNYRzRnSUhOMFlYUnBZM002SUdaMWJtTjBhVzl1S0VOdmJuTjBjblZqZEc5eUxDQnpkR0YwYVdOektTQjdYRzRnSUNBZ2JXbDRVM1JoZEdsalUzQmxZMGx1ZEc5RGIyMXdiMjVsYm5Rb1EyOXVjM1J5ZFdOMGIzSXNJSE4wWVhScFkzTXBPMXh1SUNCOVhHNTlPMXh1WEc1bWRXNWpkR2x2YmlCMllXeHBaR0YwWlZSNWNHVkVaV1lvUTI5dWMzUnlkV04wYjNJc0lIUjVjR1ZFWldZc0lHeHZZMkYwYVc5dUtTQjdYRzRnSUdadmNpQW9kbUZ5SUhCeWIzQk9ZVzFsSUdsdUlIUjVjR1ZFWldZcElIdGNiaUFnSUNCcFppQW9kSGx3WlVSbFppNW9ZWE5QZDI1UWNtOXdaWEowZVNod2NtOXdUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDOHZJSFZ6WlNCaElIZGhjbTVwYm1jZ2FXNXpkR1ZoWkNCdlppQmhiaUJwYm5aaGNtbGhiblFnYzI4Z1kyOXRjRzl1Wlc1MGMxeHVJQ0FnSUNBZ0x5OGdaRzl1SjNRZ2MyaHZkeUIxY0NCcGJpQndjbTlrSUdKMWRDQnViM1FnYVc0Z1gxOUVSVlpmWDF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJSFI1Y0dWdlppQjBlWEJsUkdWbVczQnliM0JPWVcxbFhTQTlQVDBnSjJaMWJtTjBhVzl1Snl4Y2JpQWdJQ0FnSUNBZ0p5VnpPaUFsY3lCMGVYQmxJR0FsYzJBZ2FYTWdhVzUyWVd4cFpEc2dhWFFnYlhWemRDQmlaU0JoSUdaMWJtTjBhVzl1TENCMWMzVmhiR3g1SUdaeWIyMGdKeUFyWEc0Z0lDQWdJQ0FnSUNkU1pXRmpkQzVRY205d1ZIbHdaWE11Snl4Y2JpQWdJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXVaR2x6Y0d4aGVVNWhiV1VnZkh3Z0oxSmxZV04wUTJ4aGMzTW5MRnh1SUNBZ0lDQWdJQ0JTWldGamRGQnliM0JVZVhCbFRHOWpZWFJwYjI1T1lXMWxjMXRzYjJOaGRHbHZibDBzWEc0Z0lDQWdJQ0FnSUhCeWIzQk9ZVzFsWEc0Z0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUhaaGJHbGtZWFJsVFdWMGFHOWtUM1psY25KcFpHVW9jSEp2ZEc4c0lHNWhiV1VwSUh0Y2JpQWdkbUZ5SUhOd1pXTlFiMnhwWTNrZ1BTQlNaV0ZqZEVOc1lYTnpTVzUwWlhKbVlXTmxMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwSUQ5Y2JpQWdJQ0JTWldGamRFTnNZWE56U1c1MFpYSm1ZV05sVzI1aGJXVmRJRHBjYmlBZ0lDQnVkV3hzTzF4dVhHNGdJQzh2SUVScGMyRnNiRzkzSUc5MlpYSnlhV1JwYm1jZ2IyWWdZbUZ6WlNCamJHRnpjeUJ0WlhSb2IyUnpJSFZ1YkdWemN5QmxlSEJzYVdOcGRHeDVJR0ZzYkc5M1pXUXVYRzRnSUdsbUlDaFNaV0ZqZEVOc1lYTnpUV2w0YVc0dWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa3BJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1UFZrVlNVa2xFUlY5Q1FWTkZMRnh1SUNBZ0lDQWdKMUpsWVdOMFEyeGhjM05KYm5SbGNtWmhZMlU2SUZsdmRTQmhjbVVnWVhSMFpXMXdkR2x1WnlCMGJ5QnZkbVZ5Y21sa1pTQW5JQ3RjYmlBZ0lDQWdJQ2RnSlhOZ0lHWnliMjBnZVc5MWNpQmpiR0Z6Y3lCemNHVmphV1pwWTJGMGFXOXVMaUJGYm5OMWNtVWdkR2hoZENCNWIzVnlJRzFsZEdodlpDQnVZVzFsY3lBbklDdGNiaUFnSUNBZ0lDZGtieUJ1YjNRZ2IzWmxjbXhoY0NCM2FYUm9JRkpsWVdOMElHMWxkR2h2WkhNdUp5eGNiaUFnSUNBZ0lHNWhiV1ZjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hOd1pXTlFiMnhwWTNrZ1BUMDlJRk53WldOUWIyeHBZM2t1VDFaRlVsSkpSRVZmUWtGVFJTa3BPMXh1SUNCOVhHNWNiaUFnTHk4Z1JHbHpZV3hzYjNjZ1pHVm1hVzVwYm1jZ2JXVjBhRzlrY3lCdGIzSmxJSFJvWVc0Z2IyNWpaU0IxYm14bGMzTWdaWGh3YkdsamFYUnNlU0JoYkd4dmQyVmtMbHh1SUNCcFppQW9jSEp2ZEc4dWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa3BJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTQjhmRnh1SUNBZ0lDQWdjM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XVjlOUlZKSFJVUXNYRzRnSUNBZ0lDQW5VbVZoWTNSRGJHRnpjMGx1ZEdWeVptRmpaVG9nV1c5MUlHRnlaU0JoZEhSbGJYQjBhVzVuSUhSdklHUmxabWx1WlNBbklDdGNiaUFnSUNBZ0lDZGdKWE5nSUc5dUlIbHZkWElnWTI5dGNHOXVaVzUwSUcxdmNtVWdkR2hoYmlCdmJtTmxMaUJVYUdseklHTnZibVpzYVdOMElHMWhlU0JpWlNCa2RXVWdKeUFyWEc0Z0lDQWdJQ0FuZEc4Z1lTQnRhWGhwYmk0bkxGeHVJQ0FnSUNBZ2JtRnRaVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1NCOGZGeHVJQ0FnSUhOd1pXTlFiMnhwWTNrZ1BUMDlJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDFCVGxsZlRVVlNSMFZFS1NrN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQk5hWGhwYmlCb1pXeHdaWElnZDJocFkyZ2dhR0Z1Wkd4bGN5QndiMnhwWTNrZ2RtRnNhV1JoZEdsdmJpQmhibVFnY21WelpYSjJaV1JjYmlBcUlITndaV05wWm1sallYUnBiMjRnYTJWNWN5QjNhR1Z1SUdKMWFXeGthVzVuSUZKbFlXTjBJR05zWVhOemMyVnpMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQnRhWGhUY0dWalNXNTBiME52YlhCdmJtVnVkQ2hEYjI1emRISjFZM1J2Y2l3Z2MzQmxZeWtnZTF4dUlDQnBaaUFvSVhOd1pXTXBJSHRjYmlBZ0lDQnlaWFIxY200N1hHNGdJSDFjYmx4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUhSNWNHVnZaaUJ6Y0dWaklDRTlQU0FuWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ2RTWldGamRFTnNZWE56T2lCWmIzVmNYQ2R5WlNCaGRIUmxiWEIwYVc1bklIUnZJQ2NnSzF4dUlDQWdJQ2QxYzJVZ1lTQmpiMjF3YjI1bGJuUWdZMnhoYzNNZ1lYTWdZU0J0YVhocGJpNGdTVzV6ZEdWaFpDd2dhblZ6ZENCMWMyVWdZU0J5WldkMWJHRnlJRzlpYW1WamRDNG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9kSGx3Wlc5bUlITndaV01nSVQwOUlDZG1kVzVqZEdsdmJpY3BLVHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FoVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0hOd1pXTXBMRnh1SUNBZ0lDZFNaV0ZqZEVOc1lYTnpPaUJaYjNWY1hDZHlaU0JoZEhSbGJYQjBhVzVuSUhSdklDY2dLMXh1SUNBZ0lDZDFjMlVnWVNCamIyMXdiMjVsYm5RZ1lYTWdZU0J0YVhocGJpNGdTVzV6ZEdWaFpDd2dhblZ6ZENCMWMyVWdZU0J5WldkMWJHRnlJRzlpYW1WamRDNG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9JVkpsWVdOMFJXeGxiV1Z1ZEM1cGMxWmhiR2xrUld4bGJXVnVkQ2h6Y0dWaktTa3BPMXh1WEc0Z0lIWmhjaUJ3Y205MGJ5QTlJRU52Ym5OMGNuVmpkRzl5TG5CeWIzUnZkSGx3WlR0Y2JseHVJQ0F2THlCQ2VTQm9ZVzVrYkdsdVp5QnRhWGhwYm5NZ1ltVm1iM0psSUdGdWVTQnZkR2hsY2lCd2NtOXdaWEowYVdWekxDQjNaU0JsYm5OMWNtVWdkR2hsSUhOaGJXVmNiaUFnTHk4Z1kyaGhhVzVwYm1jZ2IzSmtaWElnYVhNZ1lYQndiR2xsWkNCMGJ5QnRaWFJvYjJSeklIZHBkR2dnUkVWR1NVNUZYMDFCVGxrZ2NHOXNhV041TENCM2FHVjBhR1Z5WEc0Z0lDOHZJRzFwZUdsdWN5QmhjbVVnYkdsemRHVmtJR0psWm05eVpTQnZjaUJoWm5SbGNpQjBhR1Z6WlNCdFpYUm9iMlJ6SUdsdUlIUm9aU0J6Y0dWakxseHVJQ0JwWmlBb2MzQmxZeTVvWVhOUGQyNVFjbTl3WlhKMGVTaE5TVmhKVGxOZlMwVlpLU2tnZTF4dUlDQWdJRkpGVTBWU1ZrVkVYMU5RUlVOZlMwVlpVeTV0YVhocGJuTW9RMjl1YzNSeWRXTjBiM0lzSUhOd1pXTXViV2w0YVc1ektUdGNiaUFnZlZ4dVhHNGdJR1p2Y2lBb2RtRnlJRzVoYldVZ2FXNGdjM0JsWXlrZ2UxeHVJQ0FnSUdsbUlDZ2hjM0JsWXk1b1lYTlBkMjVRY205d1pYSjBlU2h1WVcxbEtTa2dlMXh1SUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzVoYldVZ1BUMDlJRTFKV0VsT1UxOUxSVmtwSUh0Y2JpQWdJQ0FnSUM4dklGZGxJR2hoZG1VZ1lXeHlaV0ZrZVNCb1lXNWtiR1ZrSUcxcGVHbHVjeUJwYmlCaElITndaV05wWVd3Z1kyRnpaU0JoWW05MlpWeHVJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZG1GeUlIQnliM0JsY25SNUlEMGdjM0JsWTF0dVlXMWxYVHRjYmlBZ0lDQjJZV3hwWkdGMFpVMWxkR2h2WkU5MlpYSnlhV1JsS0hCeWIzUnZMQ0J1WVcxbEtUdGNibHh1SUNBZ0lHbG1JQ2hTUlZORlVsWkZSRjlUVUVWRFgwdEZXVk11YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrcElIdGNiaUFnSUNBZ0lGSkZVMFZTVmtWRVgxTlFSVU5mUzBWWlUxdHVZVzFsWFNoRGIyNXpkSEoxWTNSdmNpd2djSEp2Y0dWeWRIa3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QlRaWFIxY0NCdFpYUm9iMlJ6SUc5dUlIQnliM1J2ZEhsd1pUcGNiaUFnSUNBZ0lDOHZJRlJvWlNCbWIyeHNiM2RwYm1jZ2JXVnRZbVZ5SUcxbGRHaHZaSE1nYzJodmRXeGtJRzV2ZENCaVpTQmhkWFJ2YldGMGFXTmhiR3g1SUdKdmRXNWtPbHh1SUNBZ0lDQWdMeThnTVM0Z1JYaHdaV04wWldRZ1VtVmhZM1JEYkdGemN5QnRaWFJvYjJSeklDaHBiaUIwYUdVZ1hDSnBiblJsY21aaFkyVmNJaWt1WEc0Z0lDQWdJQ0F2THlBeUxpQlBkbVZ5Y21sa1pHVnVJRzFsZEdodlpITWdLSFJvWVhRZ2QyVnlaU0J0YVhobFpDQnBiaWt1WEc0Z0lDQWdJQ0IyWVhJZ2FYTlNaV0ZqZEVOc1lYTnpUV1YwYUc5a0lEMWNiaUFnSUNBZ0lDQWdVbVZoWTNSRGJHRnpjMGx1ZEdWeVptRmpaUzVvWVhOUGQyNVFjbTl3WlhKMGVTaHVZVzFsS1R0Y2JpQWdJQ0FnSUhaaGNpQnBjMEZzY21WaFpIbEVaV1pwYm1Wa0lEMGdjSEp2ZEc4dWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTazdYRzRnSUNBZ0lDQjJZWElnYldGeWEyVmtSRzl1ZEVKcGJtUWdQU0J3Y205d1pYSjBlU0FtSmlCd2NtOXdaWEowZVM1ZlgzSmxZV04wUkc5dWRFSnBibVE3WEc0Z0lDQWdJQ0IyWVhJZ2FYTkdkVzVqZEdsdmJpQTlJSFI1Y0dWdlppQndjbTl3WlhKMGVTQTlQVDBnSjJaMWJtTjBhVzl1Snp0Y2JpQWdJQ0FnSUhaaGNpQnphRzkxYkdSQmRYUnZRbWx1WkNBOVhHNGdJQ0FnSUNBZ0lHbHpSblZ1WTNScGIyNGdKaVpjYmlBZ0lDQWdJQ0FnSVdselVtVmhZM1JEYkdGemMwMWxkR2h2WkNBbUpseHVJQ0FnSUNBZ0lDQWhhWE5CYkhKbFlXUjVSR1ZtYVc1bFpDQW1KbHh1SUNBZ0lDQWdJQ0FoYldGeWEyVmtSRzl1ZEVKcGJtUTdYRzVjYmlBZ0lDQWdJR2xtSUNoemFHOTFiR1JCZFhSdlFtbHVaQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9JWEJ5YjNSdkxsOWZjbVZoWTNSQmRYUnZRbWx1WkUxaGNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhCeWIzUnZMbDlmY21WaFkzUkJkWFJ2UW1sdVpFMWhjQ0E5SUh0OU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEJ5YjNSdkxsOWZjbVZoWTNSQmRYUnZRbWx1WkUxaGNGdHVZVzFsWFNBOUlIQnliM0JsY25SNU8xeHVJQ0FnSUNBZ0lDQndjbTkwYjF0dVlXMWxYU0E5SUhCeWIzQmxjblI1TzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHbHpRV3h5WldGa2VVUmxabWx1WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0IyWVhJZ2MzQmxZMUJ2YkdsamVTQTlJRkpsWVdOMFEyeGhjM05KYm5SbGNtWmhZMlZiYm1GdFpWMDdYRzVjYmlBZ0lDQWdJQ0FnSUNBdkx5QlVhR1Z6WlNCallYTmxjeUJ6YUc5MWJHUWdZV3h5WldGa2VTQmlaU0JqWVhWbmFIUWdZbmtnZG1Gc2FXUmhkR1ZOWlhSb2IyUlBkbVZ5Y21sa1pWeHVJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJQ0FnSUNCcGMxSmxZV04wUTJ4aGMzTk5aWFJvYjJRZ0ppWWdLRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQW9jM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XVjlOUlZKSFJVUWdmSHdnYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5VbVZoWTNSRGJHRnpjem9nVlc1bGVIQmxZM1JsWkNCemNHVmpJSEJ2YkdsamVTQWxjeUJtYjNJZ2EyVjVJQ1Z6SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSjNkb1pXNGdiV2w0YVc1bklHbHVJR052YlhCdmJtVnVkQ0J6Y0dWamN5NG5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MzQmxZMUJ2YkdsamVTeGNiaUFnSUNBZ0lDQWdJQ0FnSUc1aGJXVmNiaUFnSUNBZ0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHbHpVbVZoWTNSRGJHRnpjMDFsZEdodlpDQW1KaUFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQW9jM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XVjlOUlZKSFJVUWdmSHdnYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1NsY2JpQWdJQ0FnSUNBZ0lDQXBLU2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJHYjNJZ2JXVjBhRzlrY3lCM2FHbGphQ0JoY21VZ1pHVm1hVzVsWkNCdGIzSmxJSFJvWVc0Z2IyNWpaU3dnWTJGc2JDQjBhR1VnWlhocGMzUnBibWRjYmlBZ0lDQWdJQ0FnSUNBdkx5QnRaWFJvYjJSeklHSmxabTl5WlNCallXeHNhVzVuSUhSb1pTQnVaWGNnY0hKdmNHVnlkSGtzSUcxbGNtZHBibWNnYVdZZ1lYQndjbTl3Y21saGRHVXVYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tITndaV05RYjJ4cFkza2dQVDA5SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsbGZUVVZTUjBWRUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCd2NtOTBiMXR1WVcxbFhTQTlJR055WldGMFpVMWxjbWRsWkZKbGMzVnNkRVoxYm1OMGFXOXVLSEJ5YjNSdlcyNWhiV1ZkTENCd2NtOXdaWEowZVNrN1hHNGdJQ0FnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h6Y0dWalVHOXNhV041SUQwOVBTQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3Y205MGIxdHVZVzFsWFNBOUlHTnlaV0YwWlVOb1lXbHVaV1JHZFc1amRHbHZiaWh3Y205MGIxdHVZVzFsWFN3Z2NISnZjR1Z5ZEhrcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCd2NtOTBiMXR1WVcxbFhTQTlJSEJ5YjNCbGNuUjVPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUVGa1pDQjJaWEppYjNObElHUnBjM0JzWVhsT1lXMWxJSFJ2SUhSb1pTQm1kVzVqZEdsdmJpd2dkMmhwWTJnZ2FHVnNjSE1nZDJobGJpQnNiMjlyYVc1blhHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCaGRDQndjbTltYVd4cGJtY2dkRzl2YkhNdVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhCeWIzQmxjblI1SUQwOVBTQW5ablZ1WTNScGIyNG5JQ1ltSUhOd1pXTXVaR2x6Y0d4aGVVNWhiV1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY0hKdmRHOWJibUZ0WlYwdVpHbHpjR3hoZVU1aGJXVWdQU0J6Y0dWakxtUnBjM0JzWVhsT1lXMWxJQ3NnSjE4bklDc2dibUZ0WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYm4xY2JseHVablZ1WTNScGIyNGdiV2w0VTNSaGRHbGpVM0JsWTBsdWRHOURiMjF3YjI1bGJuUW9RMjl1YzNSeWRXTjBiM0lzSUhOMFlYUnBZM01wSUh0Y2JpQWdhV1lnS0NGemRHRjBhV056S1NCN1hHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNGdJR1p2Y2lBb2RtRnlJRzVoYldVZ2FXNGdjM1JoZEdsamN5a2dlMXh1SUNBZ0lIWmhjaUJ3Y205d1pYSjBlU0E5SUhOMFlYUnBZM05iYm1GdFpWMDdYRzRnSUNBZ2FXWWdLQ0Z6ZEdGMGFXTnpMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwS1NCN1hHNGdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ2FYTlNaWE5sY25abFpDQTlJRzVoYldVZ2FXNGdVa1ZUUlZKV1JVUmZVMUJGUTE5TFJWbFRPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBaGFYTlNaWE5sY25abFpDeGNiaUFnSUNBZ0lDZFNaV0ZqZEVOc1lYTnpPaUJaYjNVZ1lYSmxJR0YwZEdWdGNIUnBibWNnZEc4Z1pHVm1hVzVsSUdFZ2NtVnpaWEoyWldRZ0p5QXJYRzRnSUNBZ0lDQW5jSEp2Y0dWeWRIa3NJR0FsYzJBc0lIUm9ZWFFnYzJodmRXeGtibHhjSjNRZ1ltVWdiMjRnZEdobElGd2ljM1JoZEdsamMxd2lJR3RsZVM0Z1JHVm1hVzVsSUdsMElDY2dLMXh1SUNBZ0lDQWdKMkZ6SUdGdUlHbHVjM1JoYm1ObElIQnliM0JsY25SNUlHbHVjM1JsWVdRN0lHbDBJSGRwYkd3Z2MzUnBiR3dnWW1VZ1lXTmpaWE56YVdKc1pTQnZiaUIwYUdVZ0p5QXJYRzRnSUNBZ0lDQW5ZMjl1YzNSeWRXTjBiM0l1Snl4Y2JpQWdJQ0FnSUc1aGJXVmNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLQ0ZwYzFKbGMyVnlkbVZrS1NrN1hHNWNiaUFnSUNCMllYSWdhWE5KYm1obGNtbDBaV1FnUFNCdVlXMWxJR2x1SUVOdmJuTjBjblZqZEc5eU8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FoYVhOSmJtaGxjbWwwWldRc1hHNGdJQ0FnSUNBblVtVmhZM1JEYkdGemN6b2dXVzkxSUdGeVpTQmhkSFJsYlhCMGFXNW5JSFJ2SUdSbFptbHVaU0FuSUN0Y2JpQWdJQ0FnSUNkZ0pYTmdJRzl1SUhsdmRYSWdZMjl0Y0c5dVpXNTBJRzF2Y21VZ2RHaGhiaUJ2Ym1ObExpQlVhR2x6SUdOdmJtWnNhV04wSUcxaGVTQmlaU0FuSUN0Y2JpQWdJQ0FnSUNka2RXVWdkRzhnWVNCdGFYaHBiaTRuTEZ4dUlDQWdJQ0FnYm1GdFpWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JV2x6U1c1b1pYSnBkR1ZrS1NrN1hHNGdJQ0FnUTI5dWMzUnlkV04wYjNKYmJtRnRaVjBnUFNCd2NtOXdaWEowZVR0Y2JpQWdmVnh1ZlZ4dVhHNHZLaXBjYmlBcUlFMWxjbWRsSUhSM2J5QnZZbXBsWTNSekxDQmlkWFFnZEdoeWIzY2dhV1lnWW05MGFDQmpiMjUwWVdsdUlIUm9aU0J6WVcxbElHdGxlUzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdiMjVsSUZSb1pTQm1hWEp6ZENCdlltcGxZM1FzSUhkb2FXTm9JR2x6SUcxMWRHRjBaV1F1WEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2RIZHZJRlJvWlNCelpXTnZibVFnYjJKcVpXTjBYRzRnS2lCQWNtVjBkWEp1SUh0dlltcGxZM1I5SUc5dVpTQmhablJsY2lCcGRDQm9ZWE1nWW1WbGJpQnRkWFJoZEdWa0lIUnZJR052Ym5SaGFXNGdaWFpsY25sMGFHbHVaeUJwYmlCMGQyOHVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHMWxjbWRsU1c1MGIxZHBkR2hPYjBSMWNHeHBZMkYwWlV0bGVYTW9iMjVsTENCMGQyOHBJSHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0J2Ym1VZ0ppWWdkSGR2SUNZbUlIUjVjR1Z2WmlCdmJtVWdQVDA5SUNkdlltcGxZM1FuSUNZbUlIUjVjR1Z2WmlCMGQyOGdQVDA5SUNkdlltcGxZM1FuTEZ4dUlDQWdJQ2R0WlhKblpVbHVkRzlYYVhSb1RtOUVkWEJzYVdOaGRHVkxaWGx6S0NrNklFTmhibTV2ZENCdFpYSm5aU0J1YjI0dGIySnFaV04wY3k0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2IyNWxJQ1ltSUhSM2J5QW1KaUIwZVhCbGIyWWdiMjVsSUQwOVBTQW5iMkpxWldOMEp5QW1KaUIwZVhCbGIyWWdkSGR2SUQwOVBTQW5iMkpxWldOMEp5a3BPMXh1WEc0Z0lHWnZjaUFvZG1GeUlHdGxlU0JwYmlCMGQyOHBJSHRjYmlBZ0lDQnBaaUFvZEhkdkxtaGhjMDkzYmxCeWIzQmxjblI1S0d0bGVTa3BJSHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJRzl1WlZ0clpYbGRJRDA5UFNCMWJtUmxabWx1WldRc1hHNGdJQ0FnSUNBZ0lDZHRaWEpuWlVsdWRHOVhhWFJvVG05RWRYQnNhV05oZEdWTFpYbHpLQ2s2SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5WSEpwWldRZ2RHOGdiV1Z5WjJVZ2RIZHZJRzlpYW1WamRITWdkMmwwYUNCMGFHVWdjMkZ0WlNCclpYazZJR0FsYzJBdUlGUm9hWE1nWTI5dVpteHBZM1FnSnlBclhHNGdJQ0FnSUNBZ0lDZHRZWGtnWW1VZ1pIVmxJSFJ2SUdFZ2JXbDRhVzQ3SUdsdUlIQmhjblJwWTNWc1lYSXNJSFJvYVhNZ2JXRjVJR0psSUdOaGRYTmxaQ0JpZVNCMGQyOGdKeUFyWEc0Z0lDQWdJQ0FnSUNkblpYUkpibWwwYVdGc1UzUmhkR1VvS1NCdmNpQm5aWFJFWldaaGRXeDBVSEp2Y0hNb0tTQnRaWFJvYjJSeklISmxkSFZ5Ym1sdVp5QnZZbXBsWTNSeklDY2dLMXh1SUNBZ0lDQWdJQ0FuZDJsMGFDQmpiR0Z6YUdsdVp5QnJaWGx6TGljc1hHNGdJQ0FnSUNBZ0lHdGxlVnh1SUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENodmJtVmJhMlY1WFNBOVBUMGdkVzVrWldacGJtVmtLU2s3WEc0Z0lDQWdJQ0J2Ym1WYmEyVjVYU0E5SUhSM2IxdHJaWGxkTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiMjVsTzF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZU0JtZFc1amRHbHZiaUIwYUdGMElHbHVkbTlyWlhNZ2RIZHZJR1oxYm1OMGFXOXVjeUJoYm1RZ2JXVnlaMlZ6SUhSb1pXbHlJSEpsZEhWeWJpQjJZV3gxWlhNdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ2IyNWxJRVoxYm1OMGFXOXVJSFJ2SUdsdWRtOXJaU0JtYVhKemRDNWNiaUFxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjU5SUhSM2J5QkdkVzVqZEdsdmJpQjBieUJwYm5admEyVWdjMlZqYjI1a0xseHVJQ29nUUhKbGRIVnliaUI3Wm5WdVkzUnBiMjU5SUVaMWJtTjBhVzl1SUhSb1lYUWdhVzUyYjJ0bGN5QjBhR1VnZEhkdklHRnlaM1Z0Wlc1MElHWjFibU4wYVc5dWN5NWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVoxYm1OMGFXOXVJR055WldGMFpVMWxjbWRsWkZKbGMzVnNkRVoxYm1OMGFXOXVLRzl1WlN3Z2RIZHZLU0I3WEc0Z0lISmxkSFZ5YmlCbWRXNWpkR2x2YmlCdFpYSm5aV1JTWlhOMWJIUW9LU0I3WEc0Z0lDQWdkbUZ5SUdFZ1BTQnZibVV1WVhCd2JIa29kR2hwY3l3Z1lYSm5kVzFsYm5SektUdGNiaUFnSUNCMllYSWdZaUE5SUhSM2J5NWhjSEJzZVNoMGFHbHpMQ0JoY21kMWJXVnVkSE1wTzF4dUlDQWdJR2xtSUNoaElEMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCaU8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1lpQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1lUdGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHTWdQU0I3ZlR0Y2JpQWdJQ0J0WlhKblpVbHVkRzlYYVhSb1RtOUVkWEJzYVdOaGRHVkxaWGx6S0dNc0lHRXBPMXh1SUNBZ0lHMWxjbWRsU1c1MGIxZHBkR2hPYjBSMWNHeHBZMkYwWlV0bGVYTW9ZeXdnWWlrN1hHNGdJQ0FnY21WMGRYSnVJR003WEc0Z0lIMDdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EzSmxZWFJsY3lCaElHWjFibU4wYVc5dUlIUm9ZWFFnYVc1MmIydGxjeUIwZDI4Z1puVnVZM1JwYjI1eklHRnVaQ0JwWjI1dmNtVnpJSFJvWldseUlISmxkSFZ5YmlCMllXeGxjeTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0J2Ym1VZ1JuVnVZM1JwYjI0Z2RHOGdhVzUyYjJ0bElHWnBjbk4wTGx4dUlDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdkSGR2SUVaMWJtTjBhVzl1SUhSdklHbHVkbTlyWlNCelpXTnZibVF1WEc0Z0tpQkFjbVYwZFhKdUlIdG1kVzVqZEdsdmJuMGdSblZ1WTNScGIyNGdkR2hoZENCcGJuWnZhMlZ6SUhSb1pTQjBkMjhnWVhKbmRXMWxiblFnWm5WdVkzUnBiMjV6TGx4dUlDb2dRSEJ5YVhaaGRHVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1kzSmxZWFJsUTJoaGFXNWxaRVoxYm1OMGFXOXVLRzl1WlN3Z2RIZHZLU0I3WEc0Z0lISmxkSFZ5YmlCbWRXNWpkR2x2YmlCamFHRnBibVZrUm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnYjI1bExtRndjR3g1S0hSb2FYTXNJR0Z5WjNWdFpXNTBjeWs3WEc0Z0lDQWdkSGR2TG1Gd2NHeDVLSFJvYVhNc0lHRnlaM1Z0Wlc1MGN5azdYRzRnSUgwN1hHNTlYRzVjYmk4cUtseHVJQ29nUW1sdVpITWdZU0J0WlhSb2IyUWdkRzhnZEdobElHTnZiWEJ2Ym1WdWRDNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ1kyOXRjRzl1Wlc1MElFTnZiWEJ2Ym1WdWRDQjNhRzl6WlNCdFpYUm9iMlFnYVhNZ1oyOXBibWNnZEc4Z1ltVWdZbTkxYm1RdVhHNGdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0J0WlhSb2IyUWdUV1YwYUc5a0lIUnZJR0psSUdKdmRXNWtMbHh1SUNvZ1FISmxkSFZ5YmlCN1puVnVZM1JwYjI1OUlGUm9aU0JpYjNWdVpDQnRaWFJvYjJRdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdKcGJtUkJkWFJ2UW1sdVpFMWxkR2h2WkNoamIyMXdiMjVsYm5Rc0lHMWxkR2h2WkNrZ2UxeHVJQ0IyWVhJZ1ltOTFibVJOWlhSb2IyUWdQU0J0WlhSb2IyUXVZbWx1WkNoamIyMXdiMjVsYm5RcE8xeHVJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdZbTkxYm1STlpYUm9iMlF1WDE5eVpXRmpkRUp2ZFc1a1EyOXVkR1Y0ZENBOUlHTnZiWEJ2Ym1WdWREdGNiaUFnSUNCaWIzVnVaRTFsZEdodlpDNWZYM0psWVdOMFFtOTFibVJOWlhSb2IyUWdQU0J0WlhSb2IyUTdYRzRnSUNBZ1ltOTFibVJOWlhSb2IyUXVYMTl5WldGamRFSnZkVzVrUVhKbmRXMWxiblJ6SUQwZ2JuVnNiRHRjYmlBZ0lDQjJZWElnWTI5dGNHOXVaVzUwVG1GdFpTQTlJR052YlhCdmJtVnVkQzVqYjI1emRISjFZM1J2Y2k1a2FYTndiR0Y1VG1GdFpUdGNiaUFnSUNCMllYSWdYMkpwYm1RZ1BTQmliM1Z1WkUxbGRHaHZaQzVpYVc1a08xeHVJQ0FnSUM4cUlHVnpiR2x1ZEMxa2FYTmhZbXhsSUdKc2IyTnJMWE5qYjNCbFpDMTJZWElzSUc1dkxYVnVaR1ZtSUNvdlhHNGdJQ0FnWW05MWJtUk5aWFJvYjJRdVltbHVaQ0E5SUdaMWJtTjBhVzl1S0c1bGQxUm9hWE1nS1NCN1ptOXlJQ2gyWVhJZ1lYSm5jejFiWFN3a1gxOHdQVEVzSkY5Zk1UMWhjbWQxYldWdWRITXViR1Z1WjNSb095UmZYekE4SkY5Zk1Uc2tYMTh3S3lzcElHRnlaM011Y0hWemFDaGhjbWQxYldWdWRITmJKRjlmTUYwcE8xeHVJQ0FnSUNBZ0x5OGdWWE5sY2lCcGN5QjBjbmxwYm1jZ2RHOGdZbWx1WkNncElHRnVJR0YxZEc5aWIzVnVaQ0J0WlhSb2IyUTdJSGRsSUdWbVptVmpkR2wyWld4NUlIZHBiR3hjYmlBZ0lDQWdJQzh2SUdsbmJtOXlaU0IwYUdVZ2RtRnNkV1VnYjJZZ1hDSjBhR2x6WENJZ2RHaGhkQ0IwYUdVZ2RYTmxjaUJwY3lCMGNubHBibWNnZEc4Z2RYTmxMQ0J6YjF4dUlDQWdJQ0FnTHk4Z2JHVjBKM01nZDJGeWJpNWNiaUFnSUNBZ0lHbG1JQ2h1WlhkVWFHbHpJQ0U5UFNCamIyMXdiMjVsYm5RZ0ppWWdibVYzVkdocGN5QWhQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdJQ0JtWVd4elpTeGNiaUFnSUNBZ0lDQWdJQ0FuWW1sdVpDZ3BPaUJTWldGamRDQmpiMjF3YjI1bGJuUWdiV1YwYUc5a2N5QnRZWGtnYjI1c2VTQmlaU0JpYjNWdVpDQjBieUIwYUdVZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjJOdmJYQnZibVZ1ZENCcGJuTjBZVzVqWlM0Z1UyVmxJQ1Z6Snl4Y2JpQWdJQ0FnSUNBZ0lDQmpiMjF3YjI1bGJuUk9ZVzFsWEc0Z0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb0lXRnlaM011YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0FnSUNkaWFXNWtLQ2s2SUZsdmRTQmhjbVVnWW1sdVpHbHVaeUJoSUdOdmJYQnZibVZ1ZENCdFpYUm9iMlFnZEc4Z2RHaGxJR052YlhCdmJtVnVkQzRnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMUpsWVdOMElHUnZaWE1nZEdocGN5Qm1iM0lnZVc5MUlHRjFkRzl0WVhScFkyRnNiSGtnYVc0Z1lTQm9hV2RvTFhCbGNtWnZjbTFoYm1ObElDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkM1lYa3NJSE52SUhsdmRTQmpZVzRnYzJGbVpXeDVJSEpsYlc5MlpTQjBhR2x6SUdOaGJHd3VJRk5sWlNBbGN5Y3NYRzRnSUNBZ0lDQWdJQ0FnWTI5dGNHOXVaVzUwVG1GdFpWeHVJQ0FnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmliM1Z1WkUxbGRHaHZaRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFpoY2lCeVpXSnZkVzVrVFdWMGFHOWtJRDBnWDJKcGJtUXVZWEJ3Ykhrb1ltOTFibVJOWlhSb2IyUXNJR0Z5WjNWdFpXNTBjeWs3WEc0Z0lDQWdJQ0J5WldKdmRXNWtUV1YwYUc5a0xsOWZjbVZoWTNSQ2IzVnVaRU52Ym5SbGVIUWdQU0JqYjIxd2IyNWxiblE3WEc0Z0lDQWdJQ0J5WldKdmRXNWtUV1YwYUc5a0xsOWZjbVZoWTNSQ2IzVnVaRTFsZEdodlpDQTlJRzFsZEdodlpEdGNiaUFnSUNBZ0lISmxZbTkxYm1STlpYUm9iMlF1WDE5eVpXRmpkRUp2ZFc1a1FYSm5kVzFsYm5SeklEMGdZWEpuY3p0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ5WldKdmRXNWtUV1YwYUc5a08xeHVJQ0FnSUNBZ0x5b2daWE5zYVc1MExXVnVZV0pzWlNBcUwxeHVJQ0FnSUgwN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUdKdmRXNWtUV1YwYUc5a08xeHVmVnh1WEc0dktpcGNiaUFxSUVKcGJtUnpJR0ZzYkNCaGRYUnZMV0p2ZFc1a0lHMWxkR2h2WkhNZ2FXNGdZU0JqYjIxd2IyNWxiblF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJR052YlhCdmJtVnVkQ0JEYjIxd2IyNWxiblFnZDJodmMyVWdiV1YwYUc5a0lHbHpJR2R2YVc1bklIUnZJR0psSUdKdmRXNWtMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmlhVzVrUVhWMGIwSnBibVJOWlhSb2IyUnpLR052YlhCdmJtVnVkQ2tnZTF4dUlDQm1iM0lnS0haaGNpQmhkWFJ2UW1sdVpFdGxlU0JwYmlCamIyMXdiMjVsYm5RdVgxOXlaV0ZqZEVGMWRHOUNhVzVrVFdGd0tTQjdYRzRnSUNBZ2FXWWdLR052YlhCdmJtVnVkQzVmWDNKbFlXTjBRWFYwYjBKcGJtUk5ZWEF1YUdGelQzZHVVSEp2Y0dWeWRIa29ZWFYwYjBKcGJtUkxaWGtwS1NCN1hHNGdJQ0FnSUNCMllYSWdiV1YwYUc5a0lEMGdZMjl0Y0c5dVpXNTBMbDlmY21WaFkzUkJkWFJ2UW1sdVpFMWhjRnRoZFhSdlFtbHVaRXRsZVYwN1hHNGdJQ0FnSUNCamIyMXdiMjVsYm5SYllYVjBiMEpwYm1STFpYbGRJRDBnWW1sdVpFRjFkRzlDYVc1a1RXVjBhRzlrS0Z4dUlDQWdJQ0FnSUNCamIyMXdiMjVsYm5Rc1hHNGdJQ0FnSUNBZ0lGSmxZV04wUlhKeWIzSlZkR2xzY3k1bmRXRnlaQ2hjYmlBZ0lDQWdJQ0FnSUNCdFpYUm9iMlFzWEc0Z0lDQWdJQ0FnSUNBZ1kyOXRjRzl1Wlc1MExtTnZibk4wY25WamRHOXlMbVJwYzNCc1lYbE9ZVzFsSUNzZ0p5NG5JQ3NnWVhWMGIwSnBibVJMWlhsY2JpQWdJQ0FnSUNBZ0tWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDFjYm4xY2JseHVkbUZ5SUhSNWNHVkVaWEJ5WldOaGRHbHZia1JsYzJOeWFYQjBiM0lnUFNCN1hHNGdJR1Z1ZFcxbGNtRmliR1U2SUdaaGJITmxMRnh1SUNCblpYUTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSFpoY2lCa2FYTndiR0Y1VG1GdFpTQTlJSFJvYVhNdVpHbHpjR3hoZVU1aGJXVWdmSHdnZEdocGN5NXVZVzFsSUh4OElDZERiMjF3YjI1bGJuUW5PMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQW5KWE11ZEhsd1pTQnBjeUJrWlhCeVpXTmhkR1ZrTGlCVmMyVWdKWE1nWkdseVpXTjBiSGtnZEc4Z1lXTmpaWE56SUhSb1pTQmpiR0Z6Y3k0bkxGeHVJQ0FnSUNBZ1pHbHpjR3hoZVU1aGJXVXNYRzRnSUNBZ0lDQmthWE53YkdGNVRtRnRaVnh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kR2hwY3l3Z0ozUjVjR1VuTENCN1hHNGdJQ0FnSUNCMllXeDFaVG9nZEdocGMxeHVJQ0FnSUgwcE8xeHVJQ0FnSUhKbGRIVnliaUIwYUdsek8xeHVJQ0I5WEc1OU8xeHVYRzR2S2lwY2JpQXFJRUZrWkNCdGIzSmxJSFJ2SUhSb1pTQlNaV0ZqZEVOc1lYTnpJR0poYzJVZ1kyeGhjM011SUZSb1pYTmxJR0Z5WlNCaGJHd2diR1ZuWVdONUlHWmxZWFIxY21WeklHRnVaRnh1SUNvZ2RHaGxjbVZtYjNKbElHNXZkQ0JoYkhKbFlXUjVJSEJoY25RZ2IyWWdkR2hsSUcxdlpHVnliaUJTWldGamRFTnZiWEJ2Ym1WdWRDNWNiaUFxTDF4dWRtRnlJRkpsWVdOMFEyeGhjM05OYVhocGJpQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWRTlFVHpvZ1ZHaHBjeUIzYVd4c0lHSmxJR1JsY0hKbFkyRjBaV1FnWW1WallYVnpaU0J6ZEdGMFpTQnphRzkxYkdRZ1lXeDNZWGx6SUd0bFpYQWdZU0JqYjI1emFYTjBaVzUwWEc0Z0lDQXFJSFI1Y0dVZ2MybG5ibUYwZFhKbElHRnVaQ0IwYUdVZ2IyNXNlU0IxYzJVZ1kyRnpaU0JtYjNJZ2RHaHBjeXdnYVhNZ2RHOGdZWFp2YVdRZ2RHaGhkQzVjYmlBZ0lDb3ZYRzRnSUhKbGNHeGhZMlZUZEdGMFpUb2dablZ1WTNScGIyNG9ibVYzVTNSaGRHVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFVtVndiR0ZqWlZOMFlYUmxLSFJvYVhNc0lHNWxkMU4wWVhSbEtUdGNiaUFnSUNCcFppQW9ZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQWdJRkpsWVdOMFZYQmtZWFJsVVhWbGRXVXVaVzV4ZFdWMVpVTmhiR3hpWVdOcktIUm9hWE1zSUdOaGJHeGlZV05yS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFTm9aV05yY3lCM2FHVjBhR1Z5SUc5eUlHNXZkQ0IwYUdseklHTnZiWEJ2YzJsMFpTQmpiMjF3YjI1bGJuUWdhWE1nYlc5MWJuUmxaQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMGdWSEoxWlNCcFppQnRiM1Z1ZEdWa0xDQm1ZV3h6WlNCdmRHaGxjbmRwYzJVdVhHNGdJQ0FxSUVCd2NtOTBaV04wWldSY2JpQWdJQ29nUUdacGJtRnNYRzRnSUNBcUwxeHVJQ0JwYzAxdmRXNTBaV1E2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhaaGNpQnZkMjVsY2lBOUlGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUxtTjFjbkpsYm5RN1hHNGdJQ0FnSUNCcFppQW9iM2R1WlhJZ0lUMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lDQWdiM2R1WlhJdVgzZGhjbTVsWkVGaWIzVjBVbVZtYzBsdVVtVnVaR1Z5TEZ4dUlDQWdJQ0FnSUNBZ0lDY2xjeUJwY3lCaFkyTmxjM05wYm1jZ2FYTk5iM1Z1ZEdWa0lHbHVjMmxrWlNCcGRITWdjbVZ1WkdWeUtDa2dablZ1WTNScGIyNHVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZHlaVzVrWlhJb0tTQnphRzkxYkdRZ1ltVWdZU0J3ZFhKbElHWjFibU4wYVc5dUlHOW1JSEJ5YjNCeklHRnVaQ0J6ZEdGMFpTNGdTWFFnYzJodmRXeGtJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZHVaWFpsY2lCaFkyTmxjM01nYzI5dFpYUm9hVzVuSUhSb1lYUWdjbVZ4ZFdseVpYTWdjM1JoYkdVZ1pHRjBZU0JtY205dElIUm9aU0J3Y21WMmFXOTFjeUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5jbVZ1WkdWeUxDQnpkV05vSUdGeklISmxabk11SUUxdmRtVWdkR2hwY3lCc2IyZHBZeUIwYnlCamIyMXdiMjVsYm5SRWFXUk5iM1Z1ZENCaGJtUWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oyTnZiWEJ2Ym1WdWRFUnBaRlZ3WkdGMFpTQnBibk4wWldGa0xpY3NYRzRnSUNBZ0lDQWdJQ0FnYjNkdVpYSXVaMlYwVG1GdFpTZ3BJSHg4SUNkQklHTnZiWEJ2Ym1WdWRDZGNiaUFnSUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdJQ0J2ZDI1bGNpNWZkMkZ5Ym1Wa1FXSnZkWFJTWldaelNXNVNaVzVrWlhJZ1BTQjBjblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQjJZWElnYVc1MFpYSnVZV3hKYm5OMFlXNWpaU0E5SUZKbFlXTjBTVzV6ZEdGdVkyVk5ZWEF1WjJWMEtIUm9hWE1wTzF4dUlDQWdJSEpsZEhWeWJpQW9YRzRnSUNBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObElDWW1YRzRnSUNBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObElDRTlQU0JTWldGamRFeHBabVZEZVdOc1pTNWpkWEp5Wlc1MGJIbE5iM1Z1ZEdsdVowbHVjM1JoYm1ObFhHNGdJQ0FnS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVMlYwY3lCaElITjFZbk5sZENCdlppQjBhR1VnY0hKdmNITXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J3WVhKMGFXRnNVSEp2Y0hNZ1UzVmljMlYwSUc5bUlIUm9aU0J1WlhoMElIQnliM0J6TGx4dUlDQWdLaUJBY0dGeVlXMGdlejltZFc1amRHbHZibjBnWTJGc2JHSmhZMnNnUTJGc2JHVmtJR0ZtZEdWeUlIQnliM0J6SUdGeVpTQjFjR1JoZEdWa0xseHVJQ0FnS2lCQVptbHVZV3hjYmlBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnS2lCQVpHVndjbVZqWVhSbFpGeHVJQ0FnS2k5Y2JpQWdjMlYwVUhKdmNITTZJR1oxYm1OMGFXOXVLSEJoY25ScFlXeFFjbTl3Y3l3Z1kyRnNiR0poWTJzcElIdGNiaUFnSUNCU1pXRmpkRlZ3WkdGMFpWRjFaWFZsTG1WdWNYVmxkV1ZUWlhSUWNtOXdjeWgwYUdsekxDQndZWEowYVdGc1VISnZjSE1wTzF4dUlDQWdJR2xtSUNoallXeHNZbUZqYXlrZ2UxeHVJQ0FnSUNBZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1bGJuRjFaWFZsUTJGc2JHSmhZMnNvZEdocGN5d2dZMkZzYkdKaFkyc3BPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1Wd2JHRmpaU0JoYkd3Z2RHaGxJSEJ5YjNCekxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdibVYzVUhKdmNITWdVM1ZpYzJWMElHOW1JSFJvWlNCdVpYaDBJSEJ5YjNCekxseHVJQ0FnS2lCQWNHRnlZVzBnZXo5bWRXNWpkR2x2Ym4wZ1kyRnNiR0poWTJzZ1EyRnNiR1ZrSUdGbWRHVnlJSEJ5YjNCeklHRnlaU0IxY0dSaGRHVmtMbHh1SUNBZ0tpQkFabWx1WVd4Y2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFaR1Z3Y21WallYUmxaRnh1SUNBZ0tpOWNiaUFnY21Wd2JHRmpaVkJ5YjNCek9pQm1kVzVqZEdsdmJpaHVaWGRRY205d2N5d2dZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQlNaV0ZqZEZWd1pHRjBaVkYxWlhWbExtVnVjWFZsZFdWU1pYQnNZV05sVUhKdmNITW9kR2hwY3l3Z2JtVjNVSEp2Y0hNcE8xeHVJQ0FnSUdsbUlDaGpZV3hzWW1GamF5a2dlMXh1SUNBZ0lDQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFEyRnNiR0poWTJzb2RHaHBjeXdnWTJGc2JHSmhZMnNwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVmVHRjYmx4dWRtRnlJRkpsWVdOMFEyeGhjM05EYjIxd2IyNWxiblFnUFNCbWRXNWpkR2x2YmlncElIdDlPMXh1WVhOemFXZHVLRnh1SUNCU1pXRmpkRU5zWVhOelEyOXRjRzl1Wlc1MExuQnliM1J2ZEhsd1pTeGNiaUFnVW1WaFkzUkRiMjF3YjI1bGJuUXVjSEp2ZEc5MGVYQmxMRnh1SUNCU1pXRmpkRU5zWVhOelRXbDRhVzVjYmlrN1hHNWNiaThxS2x4dUlDb2dUVzlrZFd4bElHWnZjaUJqY21WaGRHbHVaeUJqYjIxd2IzTnBkR1VnWTI5dGNHOXVaVzUwY3k1Y2JpQXFYRzRnS2lCQVkyeGhjM01nVW1WaFkzUkRiR0Z6YzF4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JEYkdGemN5QTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRM0psWVhSbGN5QmhJR052YlhCdmMybDBaU0JqYjIxd2IyNWxiblFnWTJ4aGMzTWdaMmwyWlc0Z1lTQmpiR0Z6Y3lCemNHVmphV1pwWTJGMGFXOXVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYzNCbFl5QkRiR0Z6Y3lCemNHVmphV1pwWTJGMGFXOXVJQ2gzYUdsamFDQnRkWE4wSUdSbFptbHVaU0JnY21WdVpHVnlZQ2t1WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMloxYm1OMGFXOXVmU0JEYjIxd2IyNWxiblFnWTI5dWMzUnlkV04wYjNJZ1puVnVZM1JwYjI0dVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb3ZYRzRnSUdOeVpXRjBaVU5zWVhOek9pQm1kVzVqZEdsdmJpaHpjR1ZqS1NCN1hHNGdJQ0FnZG1GeUlFTnZibk4wY25WamRHOXlJRDBnWm5WdVkzUnBiMjRvY0hKdmNITXNJR052Ym5SbGVIUXBJSHRjYmlBZ0lDQWdJQzh2SUZSb2FYTWdZMjl1YzNSeWRXTjBiM0lnYVhNZ2IzWmxjbkpwWkdSbGJpQmllU0J0YjJOcmN5NGdWR2hsSUdGeVozVnRaVzUwSUdseklIVnpaV1JjYmlBZ0lDQWdJQzh2SUdKNUlHMXZZMnR6SUhSdklHRnpjMlZ5ZENCdmJpQjNhR0YwSUdkbGRITWdiVzkxYm5SbFpDNWNibHh1SUNBZ0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdJQ0IwYUdseklHbHVjM1JoYm1ObGIyWWdRMjl1YzNSeWRXTjBiM0lzWEc0Z0lDQWdJQ0FnSUNBZ0oxTnZiV1YwYUdsdVp5QnBjeUJqWVd4c2FXNW5JR0VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBJR1JwY21WamRHeDVMaUJWYzJVZ1lTQm1ZV04wYjNKNUlHOXlJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZEtVMWdnYVc1emRHVmhaQzRnVTJWbE9pQm9kSFJ3Y3pvdkwyWmlMbTFsTDNKbFlXTjBMV3hsWjJGamVXWmhZM1J2Y25rblhHNGdJQ0FnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdMeThnVjJseVpTQjFjQ0JoZFhSdkxXSnBibVJwYm1kY2JpQWdJQ0FnSUdsbUlDaDBhR2x6TGw5ZmNtVmhZM1JCZFhSdlFtbHVaRTFoY0NrZ2UxeHVJQ0FnSUNBZ0lDQmlhVzVrUVhWMGIwSnBibVJOWlhSb2IyUnpLSFJvYVhNcE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQjBhR2x6TG5CeWIzQnpJRDBnY0hKdmNITTdYRzRnSUNBZ0lDQjBhR2x6TG1OdmJuUmxlSFFnUFNCamIyNTBaWGgwTzF4dUlDQWdJQ0FnZEdocGN5NXpkR0YwWlNBOUlHNTFiR3c3WEc1Y2JpQWdJQ0FnSUM4dklGSmxZV04wUTJ4aGMzTmxjeUJrYjJWemJpZDBJR2hoZG1VZ1kyOXVjM1J5ZFdOMGIzSnpMaUJKYm5OMFpXRmtMQ0IwYUdWNUlIVnpaU0IwYUdWY2JpQWdJQ0FnSUM4dklHZGxkRWx1YVhScFlXeFRkR0YwWlNCaGJtUWdZMjl0Y0c5dVpXNTBWMmxzYkUxdmRXNTBJRzFsZEdodlpITWdabTl5SUdsdWFYUnBZV3hwZW1GMGFXOXVMbHh1WEc0Z0lDQWdJQ0IyWVhJZ2FXNXBkR2xoYkZOMFlYUmxJRDBnZEdocGN5NW5aWFJKYm1sMGFXRnNVM1JoZEdVZ1B5QjBhR2x6TG1kbGRFbHVhWFJwWVd4VGRHRjBaU2dwSURvZ2JuVnNiRHRjYmlBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1YyVWdZV3hzYjNjZ1lYVjBieTF0YjJOcmN5QjBieUJ3Y205alpXVmtJR0Z6SUdsbUlIUm9aWGtuY21VZ2NtVjBkWEp1YVc1bklHNTFiR3d1WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2FXNXBkR2xoYkZOMFlYUmxJRDA5UFNBbmRXNWtaV1pwYm1Wa0p5QW1KbHh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVuWlhSSmJtbDBhV0ZzVTNSaGRHVXVYMmx6VFc5amEwWjFibU4wYVc5dUtTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ZHaHBjeUJwY3lCd2NtOWlZV0pzZVNCaVlXUWdjSEpoWTNScFkyVXVJRU52Ym5OcFpHVnlJSGRoY201cGJtY2dhR1Z5WlNCaGJtUmNiaUFnSUNBZ0lDQWdJQ0F2THlCa1pYQnlaV05oZEdsdVp5QjBhR2x6SUdOdmJuWmxibWxsYm1ObExseHVJQ0FnSUNBZ0lDQWdJR2x1YVhScFlXeFRkR0YwWlNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUhSNWNHVnZaaUJwYm1sMGFXRnNVM1JoZEdVZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUNGQmNuSmhlUzVwYzBGeWNtRjVLR2x1YVhScFlXeFRkR0YwWlNrc1hHNGdJQ0FnSUNBZ0lDY2xjeTVuWlhSSmJtbDBhV0ZzVTNSaGRHVW9LVG9nYlhWemRDQnlaWFIxY200Z1lXNGdiMkpxWldOMElHOXlJRzUxYkd3bkxGeHVJQ0FnSUNBZ0lDQkRiMjV6ZEhKMVkzUnZjaTVrYVhOd2JHRjVUbUZ0WlNCOGZDQW5VbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5RblhHNGdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLSFI1Y0dWdlppQnBibWwwYVdGc1UzUmhkR1VnUFQwOUlDZHZZbXBsWTNRbklDWW1JQ0ZCY25KaGVTNXBjMEZ5Y21GNUtHbHVhWFJwWVd4VGRHRjBaU2twS1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTV6ZEdGMFpTQTlJR2x1YVhScFlXeFRkR0YwWlR0Y2JpQWdJQ0I5TzF4dUlDQWdJRU52Ym5OMGNuVmpkRzl5TG5CeWIzUnZkSGx3WlNBOUlHNWxkeUJTWldGamRFTnNZWE56UTI5dGNHOXVaVzUwS0NrN1hHNGdJQ0FnUTI5dWMzUnlkV04wYjNJdWNISnZkRzkwZVhCbExtTnZibk4wY25WamRHOXlJRDBnUTI5dWMzUnlkV04wYjNJN1hHNWNiaUFnSUNCcGJtcGxZM1JsWkUxcGVHbHVjeTVtYjNKRllXTm9LRnh1SUNBZ0lDQWdiV2w0VTNCbFkwbHVkRzlEYjIxd2IyNWxiblF1WW1sdVpDaHVkV3hzTENCRGIyNXpkSEoxWTNSdmNpbGNiaUFnSUNBcE8xeHVYRzRnSUNBZ2JXbDRVM0JsWTBsdWRHOURiMjF3YjI1bGJuUW9RMjl1YzNSeWRXTjBiM0lzSUhOd1pXTXBPMXh1WEc0Z0lDQWdMeThnU1c1cGRHbGhiR2w2WlNCMGFHVWdaR1ZtWVhWc2RGQnliM0J6SUhCeWIzQmxjblI1SUdGbWRHVnlJR0ZzYkNCdGFYaHBibk1nYUdGMlpTQmlaV1Z1SUcxbGNtZGxaRnh1SUNBZ0lHbG1JQ2hEYjI1emRISjFZM1J2Y2k1blpYUkVaV1poZFd4MFVISnZjSE1wSUh0Y2JpQWdJQ0FnSUVOdmJuTjBjblZqZEc5eUxtUmxabUYxYkhSUWNtOXdjeUE5SUVOdmJuTjBjblZqZEc5eUxtZGxkRVJsWm1GMWJIUlFjbTl3Y3lncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUM4dklGUm9hWE1nYVhNZ1lTQjBZV2NnZEc4Z2FXNWthV05oZEdVZ2RHaGhkQ0IwYUdVZ2RYTmxJRzltSUhSb1pYTmxJRzFsZEdodlpDQnVZVzFsY3lCcGN5QnZheXhjYmlBZ0lDQWdJQzh2SUhOcGJtTmxJR2wwSjNNZ2RYTmxaQ0IzYVhSb0lHTnlaV0YwWlVOc1lYTnpMaUJKWmlCcGRDZHpJRzV2ZEN3Z2RHaGxiaUJwZENkeklHeHBhMlZzZVNCaFhHNGdJQ0FnSUNBdkx5QnRhWE4wWVd0bElITnZJSGRsSjJ4c0lIZGhjbTRnZVc5MUlIUnZJSFZ6WlNCMGFHVWdjM1JoZEdsaklIQnliM0JsY25SNUxDQndjbTl3WlhKMGVWeHVJQ0FnSUNBZ0x5OGdhVzVwZEdsaGJHbDZaWElnYjNJZ1kyOXVjM1J5ZFdOMGIzSWdjbVZ6Y0dWamRHbDJaV3g1TGx4dUlDQWdJQ0FnYVdZZ0tFTnZibk4wY25WamRHOXlMbWRsZEVSbFptRjFiSFJRY205d2N5a2dlMXh1SUNBZ0lDQWdJQ0JEYjI1emRISjFZM1J2Y2k1blpYUkVaV1poZFd4MFVISnZjSE11YVhOU1pXRmpkRU5zWVhOelFYQndjbTkyWldRZ1BTQjdmVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoRGIyNXpkSEoxWTNSdmNpNXdjbTkwYjNSNWNHVXVaMlYwU1c1cGRHbGhiRk4wWVhSbEtTQjdYRzRnSUNBZ0lDQWdJRU52Ym5OMGNuVmpkRzl5TG5CeWIzUnZkSGx3WlM1blpYUkpibWwwYVdGc1UzUmhkR1V1YVhOU1pXRmpkRU5zWVhOelFYQndjbTkyWldRZ1BTQjdmVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXVjSEp2ZEc5MGVYQmxMbkpsYm1SbGNpeGNiaUFnSUNBZ0lDZGpjbVZoZEdWRGJHRnpjeWd1TGk0cE9pQkRiR0Z6Y3lCemNHVmphV1pwWTJGMGFXOXVJRzExYzNRZ2FXMXdiR1Z0Wlc1MElHRWdZSEpsYm1SbGNtQWdiV1YwYUc5a0xpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRU52Ym5OMGNuVmpkRzl5TG5CeWIzUnZkSGx3WlM1eVpXNWtaWElwS1R0Y2JseHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FoUTI5dWMzUnlkV04wYjNJdWNISnZkRzkwZVhCbExtTnZiWEJ2Ym1WdWRGTm9iM1ZzWkZWd1pHRjBaU3hjYmlBZ0lDQWdJQ0FnSnlWeklHaGhjeUJoSUcxbGRHaHZaQ0JqWVd4c1pXUWdKeUFyWEc0Z0lDQWdJQ0FnSUNkamIyMXdiMjVsYm5SVGFHOTFiR1JWY0dSaGRHVW9LUzRnUkdsa0lIbHZkU0J0WldGdUlITm9iM1ZzWkVOdmJYQnZibVZ1ZEZWd1pHRjBaU2dwUHlBbklDdGNiaUFnSUNBZ0lDQWdKMVJvWlNCdVlXMWxJR2x6SUhCb2NtRnpaV1FnWVhNZ1lTQnhkV1Z6ZEdsdmJpQmlaV05oZFhObElIUm9aU0JtZFc1amRHbHZiaUJwY3lBbklDdGNiaUFnSUNBZ0lDQWdKMlY0Y0dWamRHVmtJSFJ2SUhKbGRIVnliaUJoSUhaaGJIVmxMaWNzWEc0Z0lDQWdJQ0FnSUhOd1pXTXVaR2x6Y0d4aGVVNWhiV1VnZkh3Z0owRWdZMjl0Y0c5dVpXNTBKMXh1SUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRkpsWkhWalpTQjBhVzFsSUhOd1pXNTBJR1J2YVc1bklHeHZiMnQxY0hNZ1lua2djMlYwZEdsdVp5QjBhR1Z6WlNCdmJpQjBhR1VnY0hKdmRHOTBlWEJsTGx4dUlDQWdJR1p2Y2lBb2RtRnlJRzFsZEdodlpFNWhiV1VnYVc0Z1VtVmhZM1JEYkdGemMwbHVkR1Z5Wm1GalpTa2dlMXh1SUNBZ0lDQWdhV1lnS0NGRGIyNXpkSEoxWTNSdmNpNXdjbTkwYjNSNWNHVmJiV1YwYUc5a1RtRnRaVjBwSUh0Y2JpQWdJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXVjSEp2ZEc5MGVYQmxXMjFsZEdodlpFNWhiV1ZkSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJNWldkaFkza2dhRzl2YTF4dUlDQWdJRU52Ym5OMGNuVmpkRzl5TG5SNWNHVWdQU0JEYjI1emRISjFZM1J2Y2p0Y2JpQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvUTI5dWMzUnlkV04wYjNJc0lDZDBlWEJsSnl3Z2RIbHdaVVJsY0hKbFkyRjBhVzl1UkdWelkzSnBjSFJ2Y2lrN1hHNGdJQ0FnSUNCOUlHTmhkR05vSUNoNEtTQjdYRzRnSUNBZ0lDQWdJQzh2SUVsRklIZHBiR3dnWm1GcGJDQnZiaUJrWldacGJtVlFjbTl3WlhKMGVTQW9aWE0xTFhOb2FXMHZjMmhoYlNCMGIyOHBYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUVOdmJuTjBjblZqZEc5eU8xeHVJQ0I5TEZ4dVhHNGdJR2x1YW1WamRHbHZiam9nZTF4dUlDQWdJR2x1YW1WamRFMXBlR2x1T2lCbWRXNWpkR2x2YmlodGFYaHBiaWtnZTF4dUlDQWdJQ0FnYVc1cVpXTjBaV1JOYVhocGJuTXVjSFZ6YUNodGFYaHBiaWs3WEc0Z0lDQWdmVnh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JEYkdGemN6dGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDb21wb25lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVRdWV1ZVwiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gUmVhY3RDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG4vKipcbiAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgdG8gbXV0YXRlXG4gKiBzdGF0ZS4gWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICpcbiAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNhbGxzIHRvIGBzZXRTdGF0ZWAgd2lsbCBydW4gc3luY2hyb25vdXNseSxcbiAqIGFzIHRoZXkgbWF5IGV2ZW50dWFsbHkgYmUgYmF0Y2hlZCB0b2dldGhlci4gIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbFxuICogY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGNhbGwgdG8gc2V0U3RhdGUgaXMgYWN0dWFsbHlcbiAqIGNvbXBsZXRlZC5cbiAqXG4gKiBXaGVuIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gc2V0U3RhdGUsIGl0IHdpbGwgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgaW5cbiAqIHRoZSBmdXR1cmUgKG5vdCBzeW5jaHJvbm91c2x5KS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgdXAgdG8gZGF0ZVxuICogY29tcG9uZW50IGFyZ3VtZW50cyAoc3RhdGUsIHByb3BzLCBjb250ZXh0KS4gVGhlc2UgdmFsdWVzIGNhbiBiZSBkaWZmZXJlbnRcbiAqIGZyb20gdGhpcy4qIGJlY2F1c2UgeW91ciBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIHJlY2VpdmVQcm9wcyBidXQgYmVmb3JlXG4gKiBzaG91bGRDb21wb25lbnRVcGRhdGUsIGFuZCB0aGlzIG5ldyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHdpbGwgbm90IHlldCBiZVxuICogYXNzaWduZWQgdG8gdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbn0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSBvciBmdW5jdGlvbiB0b1xuICogICAgICAgIHByb2R1Y2UgbmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUmVhY3RDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24ocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8XG4gICAgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgIHBhcnRpYWxTdGF0ZSA9PSBudWxsLFxuICAgICdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhICcgK1xuICAgICdmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuJ1xuICApIDogaW52YXJpYW50KHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8XG4gIHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHxcbiAgcGFydGlhbFN0YXRlID09IG51bGwpKTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgcGFydGlhbFN0YXRlICE9IG51bGwsXG4gICAgICAnc2V0U3RhdGUoLi4uKTogWW91IHBhc3NlZCBhbiB1bmRlZmluZWQgb3IgbnVsbCBzdGF0ZSBvYmplY3Q7ICcgK1xuICAgICAgJ2luc3RlYWQsIHVzZSBmb3JjZVVwZGF0ZSgpLidcbiAgICApIDogbnVsbCk7XG4gIH1cbiAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlKTtcbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2spO1xuICB9XG59O1xuXG4vKipcbiAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICpcbiAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyk7XG4gIGlmIChjYWxsYmFjaykge1xuICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGdldERPTU5vZGU6IFtcbiAgICAgICdnZXRET01Ob2RlJyxcbiAgICAgICdVc2UgUmVhY3QuZmluZERPTU5vZGUoY29tcG9uZW50KSBpbnN0ZWFkLidcbiAgICBdLFxuICAgIGlzTW91bnRlZDogW1xuICAgICAgJ2lzTW91bnRlZCcsXG4gICAgICAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArXG4gICAgICAnY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ1xuICAgIF0sXG4gICAgcmVwbGFjZVByb3BzOiBbXG4gICAgICAncmVwbGFjZVByb3BzJyxcbiAgICAgICdJbnN0ZWFkLCBjYWxsIFJlYWN0LnJlbmRlciBhZ2FpbiBhdCB0aGUgdG9wIGxldmVsLidcbiAgICBdLFxuICAgIHJlcGxhY2VTdGF0ZTogW1xuICAgICAgJ3JlcGxhY2VTdGF0ZScsXG4gICAgICAnUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArXG4gICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXG4gICAgXSxcbiAgICBzZXRQcm9wczogW1xuICAgICAgJ3NldFByb3BzJyxcbiAgICAgICdJbnN0ZWFkLCBjYWxsIFJlYWN0LnJlbmRlciBhZ2FpbiBhdCB0aGUgdG9wIGxldmVsLidcbiAgICBdXG4gIH07XG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFjdENvbXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJyxcbiAgICAgICAgICAgIGluZm9bMF0sXG4gICAgICAgICAgICBpbmZvWzFdXG4gICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgIC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eSAoZXM1LXNoaW0vc2hhbSB0b28pXG4gICAgfVxuICB9O1xuICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkge1xuICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRGIyMXdiMjVsYm5RdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JEYjIxd2IyNWxiblJjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRlZ3WkdGMFpWRjFaWFZsSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSVmNHUmhkR1ZSZFdWMVpWd2lLVHRjYmx4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVMeW9xWEc0Z0tpQkNZWE5sSUdOc1lYTnpJR2hsYkhCbGNuTWdabTl5SUhSb1pTQjFjR1JoZEdsdVp5QnpkR0YwWlNCdlppQmhJR052YlhCdmJtVnVkQzVjYmlBcUwxeHVablZ1WTNScGIyNGdVbVZoWTNSRGIyMXdiMjVsYm5Rb2NISnZjSE1zSUdOdmJuUmxlSFFwSUh0Y2JpQWdkR2hwY3k1d2NtOXdjeUE5SUhCeWIzQnpPMXh1SUNCMGFHbHpMbU52Ym5SbGVIUWdQU0JqYjI1MFpYaDBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGTmxkSE1nWVNCemRXSnpaWFFnYjJZZ2RHaGxJSE4wWVhSbExpQkJiSGRoZVhNZ2RYTmxJSFJvYVhNZ2RHOGdiWFYwWVhSbFhHNGdLaUJ6ZEdGMFpTNGdXVzkxSUhOb2IzVnNaQ0IwY21WaGRDQmdkR2hwY3k1emRHRjBaV0FnWVhNZ2FXMXRkWFJoWW14bExseHVJQ3BjYmlBcUlGUm9aWEpsSUdseklHNXZJR2QxWVhKaGJuUmxaU0IwYUdGMElHQjBhR2x6TG5OMFlYUmxZQ0IzYVd4c0lHSmxJR2x0YldWa2FXRjBaV3g1SUhWd1pHRjBaV1FzSUhOdlhHNGdLaUJoWTJObGMzTnBibWNnWUhSb2FYTXVjM1JoZEdWZ0lHRm1kR1Z5SUdOaGJHeHBibWNnZEdocGN5QnRaWFJvYjJRZ2JXRjVJSEpsZEhWeWJpQjBhR1VnYjJ4a0lIWmhiSFZsTGx4dUlDcGNiaUFxSUZSb1pYSmxJR2x6SUc1dklHZDFZWEpoYm5SbFpTQjBhR0YwSUdOaGJHeHpJSFJ2SUdCelpYUlRkR0YwWldBZ2QybHNiQ0J5ZFc0Z2MzbHVZMmh5YjI1dmRYTnNlU3hjYmlBcUlHRnpJSFJvWlhrZ2JXRjVJR1YyWlc1MGRXRnNiSGtnWW1VZ1ltRjBZMmhsWkNCMGIyZGxkR2hsY2k0Z0lGbHZkU0JqWVc0Z2NISnZkbWxrWlNCaGJpQnZjSFJwYjI1aGJGeHVJQ29nWTJGc2JHSmhZMnNnZEdoaGRDQjNhV3hzSUdKbElHVjRaV04xZEdWa0lIZG9aVzRnZEdobElHTmhiR3dnZEc4Z2MyVjBVM1JoZEdVZ2FYTWdZV04wZFdGc2JIbGNiaUFxSUdOdmJYQnNaWFJsWkM1Y2JpQXFYRzRnS2lCWGFHVnVJR0VnWm5WdVkzUnBiMjRnYVhNZ2NISnZkbWxrWldRZ2RHOGdjMlYwVTNSaGRHVXNJR2wwSUhkcGJHd2dZbVVnWTJGc2JHVmtJR0YwSUhOdmJXVWdjRzlwYm5RZ2FXNWNiaUFxSUhSb1pTQm1kWFIxY21VZ0tHNXZkQ0J6ZVc1amFISnZibTkxYzJ4NUtTNGdTWFFnZDJsc2JDQmlaU0JqWVd4c1pXUWdkMmwwYUNCMGFHVWdkWEFnZEc4Z1pHRjBaVnh1SUNvZ1kyOXRjRzl1Wlc1MElHRnlaM1Z0Wlc1MGN5QW9jM1JoZEdVc0lIQnliM0J6TENCamIyNTBaWGgwS1M0Z1ZHaGxjMlVnZG1Gc2RXVnpJR05oYmlCaVpTQmthV1ptWlhKbGJuUmNiaUFxSUdaeWIyMGdkR2hwY3k0cUlHSmxZMkYxYzJVZ2VXOTFjaUJtZFc1amRHbHZiaUJ0WVhrZ1ltVWdZMkZzYkdWa0lHRm1kR1Z5SUhKbFkyVnBkbVZRY205d2N5QmlkWFFnWW1WbWIzSmxYRzRnS2lCemFHOTFiR1JEYjIxd2IyNWxiblJWY0dSaGRHVXNJR0Z1WkNCMGFHbHpJRzVsZHlCemRHRjBaU3dnY0hKdmNITXNJR0Z1WkNCamIyNTBaWGgwSUhkcGJHd2dibTkwSUhsbGRDQmlaVnh1SUNvZ1lYTnphV2R1WldRZ2RHOGdkR2hwY3k1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSHhtZFc1amRHbHZibjBnY0dGeWRHbGhiRk4wWVhSbElFNWxlSFFnY0dGeWRHbGhiQ0J6ZEdGMFpTQnZjaUJtZFc1amRHbHZiaUIwYjF4dUlDb2dJQ0FnSUNBZ0lIQnliMlIxWTJVZ2JtVjRkQ0J3WVhKMGFXRnNJSE4wWVhSbElIUnZJR0psSUcxbGNtZGxaQ0IzYVhSb0lHTjFjbkpsYm5RZ2MzUmhkR1V1WEc0Z0tpQkFjR0Z5WVcwZ2V6OW1kVzVqZEdsdmJuMGdZMkZzYkdKaFkyc2dRMkZzYkdWa0lHRm1kR1Z5SUhOMFlYUmxJR2x6SUhWd1pHRjBaV1F1WEc0Z0tpQkFabWx1WVd4Y2JpQXFJRUJ3Y205MFpXTjBaV1JjYmlBcUwxeHVVbVZoWTNSRGIyMXdiMjVsYm5RdWNISnZkRzkwZVhCbExuTmxkRk4wWVhSbElEMGdablZ1WTNScGIyNG9jR0Z5ZEdsaGJGTjBZWFJsTENCallXeHNZbUZqYXlrZ2UxeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lIUjVjR1Z2WmlCd1lYSjBhV0ZzVTNSaGRHVWdQVDA5SUNkdlltcGxZM1FuSUh4OFhHNGdJQ0FnZEhsd1pXOW1JSEJoY25ScFlXeFRkR0YwWlNBOVBUMGdKMloxYm1OMGFXOXVKeUI4ZkZ4dUlDQWdJSEJoY25ScFlXeFRkR0YwWlNBOVBTQnVkV3hzTEZ4dUlDQWdJQ2R6WlhSVGRHRjBaU2d1TGk0cE9pQjBZV3RsY3lCaGJpQnZZbXBsWTNRZ2IyWWdjM1JoZEdVZ2RtRnlhV0ZpYkdWeklIUnZJSFZ3WkdGMFpTQnZjaUJoSUNjZ0sxeHVJQ0FnSUNkbWRXNWpkR2x2YmlCM2FHbGphQ0J5WlhSMWNtNXpJR0Z1SUc5aWFtVmpkQ0J2WmlCemRHRjBaU0IyWVhKcFlXSnNaWE11SjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0hSNWNHVnZaaUJ3WVhKMGFXRnNVM1JoZEdVZ1BUMDlJQ2R2WW1wbFkzUW5JSHg4WEc0Z0lIUjVjR1Z2WmlCd1lYSjBhV0ZzVTNSaGRHVWdQVDA5SUNkbWRXNWpkR2x2YmljZ2ZIeGNiaUFnY0dGeWRHbGhiRk4wWVhSbElEMDlJRzUxYkd3cEtUdGNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2NHRnlkR2xoYkZOMFlYUmxJQ0U5SUc1MWJHd3NYRzRnSUNBZ0lDQW5jMlYwVTNSaGRHVW9MaTR1S1RvZ1dXOTFJSEJoYzNObFpDQmhiaUIxYm1SbFptbHVaV1FnYjNJZ2JuVnNiQ0J6ZEdGMFpTQnZZbXBsWTNRN0lDY2dLMXh1SUNBZ0lDQWdKMmx1YzNSbFlXUXNJSFZ6WlNCbWIzSmpaVlZ3WkdGMFpTZ3BMaWRjYmlBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUgxY2JpQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFUyVjBVM1JoZEdVb2RHaHBjeXdnY0dGeWRHbGhiRk4wWVhSbEtUdGNiaUFnYVdZZ0tHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1bGJuRjFaWFZsUTJGc2JHSmhZMnNvZEdocGN5d2dZMkZzYkdKaFkyc3BPMXh1SUNCOVhHNTlPMXh1WEc0dktpcGNiaUFxSUVadmNtTmxjeUJoYmlCMWNHUmhkR1V1SUZSb2FYTWdjMmh2ZFd4a0lHOXViSGtnWW1VZ2FXNTJiMnRsWkNCM2FHVnVJR2wwSUdseklHdHViM2R1SUhkcGRHaGNiaUFxSUdObGNuUmhhVzUwZVNCMGFHRjBJSGRsSUdGeVpTQXFLbTV2ZENvcUlHbHVJR0VnUkU5TklIUnlZVzV6WVdOMGFXOXVMbHh1SUNwY2JpQXFJRmx2ZFNCdFlYa2dkMkZ1ZENCMGJ5QmpZV3hzSUhSb2FYTWdkMmhsYmlCNWIzVWdhMjV2ZHlCMGFHRjBJSE52YldVZ1pHVmxjR1Z5SUdGemNHVmpkQ0J2WmlCMGFHVmNiaUFxSUdOdmJYQnZibVZ1ZENkeklITjBZWFJsSUdoaGN5QmphR0Z1WjJWa0lHSjFkQ0JnYzJWMFUzUmhkR1ZnSUhkaGN5QnViM1FnWTJGc2JHVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2QybHNiQ0J1YjNRZ2FXNTJiMnRsSUdCemFHOTFiR1JEYjIxd2IyNWxiblJWY0dSaGRHVmdMQ0JpZFhRZ2FYUWdkMmxzYkNCcGJuWnZhMlZjYmlBcUlHQmpiMjF3YjI1bGJuUlhhV3hzVlhCa1lYUmxZQ0JoYm1RZ1lHTnZiWEJ2Ym1WdWRFUnBaRlZ3WkdGMFpXQXVYRzRnS2x4dUlDb2dRSEJoY21GdElIcy9ablZ1WTNScGIyNTlJR05oYkd4aVlXTnJJRU5oYkd4bFpDQmhablJsY2lCMWNHUmhkR1VnYVhNZ1kyOXRjR3hsZEdVdVhHNGdLaUJBWm1sdVlXeGNiaUFxSUVCd2NtOTBaV04wWldSY2JpQXFMMXh1VW1WaFkzUkRiMjF3YjI1bGJuUXVjSEp2ZEc5MGVYQmxMbVp2Y21ObFZYQmtZWFJsSUQwZ1puVnVZM1JwYjI0b1kyRnNiR0poWTJzcElIdGNiaUFnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxSbTl5WTJWVmNHUmhkR1VvZEdocGN5azdYRzRnSUdsbUlDaGpZV3hzWW1GamF5a2dlMXh1SUNBZ0lGSmxZV04wVlhCa1lYUmxVWFZsZFdVdVpXNXhkV1YxWlVOaGJHeGlZV05yS0hSb2FYTXNJR05oYkd4aVlXTnJLVHRjYmlBZ2ZWeHVmVHRjYmx4dUx5b3FYRzRnS2lCRVpYQnlaV05oZEdWa0lFRlFTWE11SUZSb1pYTmxJRUZRU1hNZ2RYTmxaQ0IwYnlCbGVHbHpkQ0J2YmlCamJHRnpjMmxqSUZKbFlXTjBJR05zWVhOelpYTWdZblYwSUhOcGJtTmxYRzRnS2lCM1pTQjNiM1ZzWkNCc2FXdGxJSFJ2SUdSbGNISmxZMkYwWlNCMGFHVnRMQ0IzWlNkeVpTQnViM1FnWjI5cGJtY2dkRzhnYlc5MlpTQjBhR1Z0SUc5MlpYSWdkRzhnZEdocGMxeHVJQ29nYlc5a1pYSnVJR0poYzJVZ1kyeGhjM011SUVsdWMzUmxZV1FzSUhkbElHUmxabWx1WlNCaElHZGxkSFJsY2lCMGFHRjBJSGRoY201eklHbG1JR2wwSjNNZ1lXTmpaWE56WldRdVhHNGdLaTljYm1sbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdkbUZ5SUdSbGNISmxZMkYwWldSQlVFbHpJRDBnZTF4dUlDQWdJR2RsZEVSUFRVNXZaR1U2SUZ0Y2JpQWdJQ0FnSUNkblpYUkVUMDFPYjJSbEp5eGNiaUFnSUNBZ0lDZFZjMlVnVW1WaFkzUXVabWx1WkVSUFRVNXZaR1VvWTI5dGNHOXVaVzUwS1NCcGJuTjBaV0ZrTGlkY2JpQWdJQ0JkTEZ4dUlDQWdJR2x6VFc5MWJuUmxaRG9nVzF4dUlDQWdJQ0FnSjJselRXOTFiblJsWkNjc1hHNGdJQ0FnSUNBblNXNXpkR1ZoWkN3Z2JXRnJaU0J6ZFhKbElIUnZJR05zWldGdUlIVndJSE4xWW5OamNtbHdkR2x2Ym5NZ1lXNWtJSEJsYm1ScGJtY2djbVZ4ZFdWemRITWdhVzRnSnlBclhHNGdJQ0FnSUNBblkyOXRjRzl1Wlc1MFYybHNiRlZ1Ylc5MWJuUWdkRzhnY0hKbGRtVnVkQ0J0WlcxdmNua2diR1ZoYTNNdUoxeHVJQ0FnSUYwc1hHNGdJQ0FnY21Wd2JHRmpaVkJ5YjNCek9pQmJYRzRnSUNBZ0lDQW5jbVZ3YkdGalpWQnliM0J6Snl4Y2JpQWdJQ0FnSUNkSmJuTjBaV0ZrTENCallXeHNJRkpsWVdOMExuSmxibVJsY2lCaFoyRnBiaUJoZENCMGFHVWdkRzl3SUd4bGRtVnNMaWRjYmlBZ0lDQmRMRnh1SUNBZ0lISmxjR3hoWTJWVGRHRjBaVG9nVzF4dUlDQWdJQ0FnSjNKbGNHeGhZMlZUZEdGMFpTY3NYRzRnSUNBZ0lDQW5VbVZtWVdOMGIzSWdlVzkxY2lCamIyUmxJSFJ2SUhWelpTQnpaWFJUZEdGMFpTQnBibk4wWldGa0lDaHpaV1VnSnlBclhHNGdJQ0FnSUNBbmFIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwyWmhZMlZpYjI5ckwzSmxZV04wTDJsemMzVmxjeTh6TWpNMktTNG5YRzRnSUNBZ1hTeGNiaUFnSUNCelpYUlFjbTl3Y3pvZ1cxeHVJQ0FnSUNBZ0ozTmxkRkJ5YjNCekp5eGNiaUFnSUNBZ0lDZEpibk4wWldGa0xDQmpZV3hzSUZKbFlXTjBMbkpsYm1SbGNpQmhaMkZwYmlCaGRDQjBhR1VnZEc5d0lHeGxkbVZzTGlkY2JpQWdJQ0JkWEc0Z0lIMDdYRzRnSUhaaGNpQmtaV1pwYm1WRVpYQnlaV05oZEdsdmJsZGhjbTVwYm1jZ1BTQm1kVzVqZEdsdmJpaHRaWFJvYjJST1lXMWxMQ0JwYm1adktTQjdYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoU1pXRmpkRU52YlhCdmJtVnVkQzV3Y205MGIzUjVjR1VzSUcxbGRHaHZaRTVoYldVc0lIdGNiaUFnSUNBZ0lDQWdaMlYwT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdJQ0FnSUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0p5VnpLQzR1TGlrZ2FYTWdaR1Z3Y21WallYUmxaQ0JwYmlCd2JHRnBiaUJLWVhaaFUyTnlhWEIwSUZKbFlXTjBJR05zWVhOelpYTXVJQ1Z6Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJR2x1Wm05Yk1GMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCcGJtWnZXekZkWEc0Z0lDQWdJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDBnWTJGMFkyZ2dLSGdwSUh0Y2JpQWdJQ0FnSUM4dklFbEZJSGRwYkd3Z1ptRnBiQ0J2YmlCa1pXWnBibVZRY205d1pYSjBlU0FvWlhNMUxYTm9hVzB2YzJoaGJTQjBiMjhwWEc0Z0lDQWdmVnh1SUNCOU8xeHVJQ0JtYjNJZ0tIWmhjaUJtYms1aGJXVWdhVzRnWkdWd2NtVmpZWFJsWkVGUVNYTXBJSHRjYmlBZ0lDQnBaaUFvWkdWd2NtVmpZWFJsWkVGUVNYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb1ptNU9ZVzFsS1NrZ2UxeHVJQ0FnSUNBZ1pHVm1hVzVsUkdWd2NtVmpZWFJwYjI1WFlYSnVhVzVuS0dadVRtRnRaU3dnWkdWd2NtVmpZWFJsWkVGUVNYTmJabTVPWVcxbFhTazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRGIyMXdiMjVsYm5RN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50XG4gKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdERPTUlET3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NSURPcGVyYXRpb25zXCIpO1xudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKFwiLi9SZWFjdE1vdW50XCIpO1xuXG4vKipcbiAqIEFic3RyYWN0cyBhd2F5IGFsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSByZWNvbmNpbGVyIHRoYXQgcmVxdWlyZXMga25vd2xlZGdlIG9mXG4gKiB0aGUgYnJvd3NlciBjb250ZXh0LiBUT0RPOiBUaGVzZSBjYWxsZXJzIHNob3VsZCBiZSByZWZhY3RvcmVkIHRvIGF2b2lkIHRoZVxuICogbmVlZCBmb3IgdGhpcyBpbmplY3Rpb24uXG4gKi9cbnZhciBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCA9IHtcblxuICBwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOlxuICAgIFJlYWN0RE9NSURPcGVyYXRpb25zLmRhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyxcblxuICByZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEOlxuICAgIFJlYWN0RE9NSURPcGVyYXRpb25zLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRCxcblxuICAvKipcbiAgICogSWYgYSBwYXJ0aWN1bGFyIGVudmlyb25tZW50IHJlcXVpcmVzIHRoYXQgc29tZSByZXNvdXJjZXMgYmUgY2xlYW5lZCB1cCxcbiAgICogc3BlY2lmeSB0aGlzIGluIHRoZSBpbmplY3RlZCBNaXhpbi4gSW4gdGhlIERPTSwgd2Ugd291bGQgbGlrZWx5IHdhbnQgdG9cbiAgICogcHVyZ2UgYW55IGNhY2hlZCBub2RlIElEIGxvb2t1cHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1bm1vdW50SURGcm9tRW52aXJvbm1lbnQ6IGZ1bmN0aW9uKHJvb3ROb2RlSUQpIHtcbiAgICBSZWFjdE1vdW50LnB1cmdlSUQocm9vdE5vZGVJRCk7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxudmFyIGluamVjdGVkID0gZmFsc2U7XG5cbnZhciBSZWFjdENvbXBvbmVudEVudmlyb25tZW50ID0ge1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGluamVjdGFibGUgZW52aXJvbm1lbnQgZGVwZW5kZW50IGNsZWFudXAgaG9vay4gKHNlcnZlciB2cy5cbiAgICogYnJvd3NlciBldGMpLiBFeGFtcGxlOiBBIGJyb3dzZXIgc3lzdGVtIGNhY2hlcyBET00gbm9kZXMgYmFzZWQgb24gY29tcG9uZW50XG4gICAqIElEIGFuZCBtdXN0IHJlbW92ZSB0aGF0IGNhY2hlIGVudHJ5IHdoZW4gdGhpcyBpbnN0YW5jZSBpcyB1bm1vdW50ZWQuXG4gICAqL1xuICB1bm1vdW50SURGcm9tRW52aXJvbm1lbnQ6IG51bGwsXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgaW5qZWN0YWJsZSBob29rIGZvciBzd2FwcGluZyBvdXQgbW91bnQgaW1hZ2VzIGluIHRoZSBtaWRkbGUgb2ZcbiAgICogdGhlIHRyZWUuXG4gICAqL1xuICByZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEOiBudWxsLFxuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGluamVjdGFibGUgaG9vayBmb3IgcHJvY2Vzc2luZyBhIHF1ZXVlIG9mIGNoaWxkIHVwZGF0ZXMuIFdpbGxcbiAgICogbGF0ZXIgbW92ZSBpbnRvIE11bHRpQ2hpbGRDb21wb25lbnRzLlxuICAgKi9cbiAgcHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogbnVsbCxcblxuICBpbmplY3Rpb246IHtcbiAgICBpbmplY3RFbnZpcm9ubWVudDogZnVuY3Rpb24oZW52aXJvbm1lbnQpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICFpbmplY3RlZCxcbiAgICAgICAgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50OiBpbmplY3RFbnZpcm9ubWVudCgpIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLidcbiAgICAgICkgOiBpbnZhcmlhbnQoIWluamVjdGVkKSk7XG4gICAgICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnVubW91bnRJREZyb21FbnZpcm9ubWVudCA9XG4gICAgICAgIGVudmlyb25tZW50LnVubW91bnRJREZyb21FbnZpcm9ubWVudDtcbiAgICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQucmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRCA9XG4gICAgICAgIGVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQ7XG4gICAgICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXMgPVxuICAgICAgICBlbnZpcm9ubWVudC5wcm9jZXNzQ2hpbGRyZW5VcGRhdGVzO1xuICAgICAgaW5qZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRGIyMXdiMjVsYm5SRmJuWnBjbTl1YldWdWRDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVFF0TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFTnZiWEJ2Ym1WdWRFVnVkbWx5YjI1dFpXNTBYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNTJZWElnYVc1cVpXTjBaV1FnUFNCbVlXeHpaVHRjYmx4dWRtRnlJRkpsWVdOMFEyOXRjRzl1Wlc1MFJXNTJhWEp2Ym0xbGJuUWdQU0I3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRTl3ZEdsdmJtRnNiSGtnYVc1cVpXTjBZV0pzWlNCbGJuWnBjbTl1YldWdWRDQmtaWEJsYm1SbGJuUWdZMnhsWVc1MWNDQm9iMjlyTGlBb2MyVnlkbVZ5SUhaekxseHVJQ0FnS2lCaWNtOTNjMlZ5SUdWMFl5a3VJRVY0WVcxd2JHVTZJRUVnWW5KdmQzTmxjaUJ6ZVhOMFpXMGdZMkZqYUdWeklFUlBUU0J1YjJSbGN5QmlZWE5sWkNCdmJpQmpiMjF3YjI1bGJuUmNiaUFnSUNvZ1NVUWdZVzVrSUcxMWMzUWdjbVZ0YjNabElIUm9ZWFFnWTJGamFHVWdaVzUwY25rZ2QyaGxiaUIwYUdseklHbHVjM1JoYm1ObElHbHpJSFZ1Ylc5MWJuUmxaQzVjYmlBZ0lDb3ZYRzRnSUhWdWJXOTFiblJKUkVaeWIyMUZiblpwY205dWJXVnVkRG9nYm5Wc2JDeGNibHh1SUNBdktpcGNiaUFnSUNvZ1QzQjBhVzl1WVd4c2VTQnBibXBsWTNSaFlteGxJR2h2YjJzZ1ptOXlJSE4zWVhCd2FXNW5JRzkxZENCdGIzVnVkQ0JwYldGblpYTWdhVzRnZEdobElHMXBaR1JzWlNCdlpseHVJQ0FnS2lCMGFHVWdkSEpsWlM1Y2JpQWdJQ292WEc0Z0lISmxjR3hoWTJWT2IyUmxWMmwwYUUxaGNtdDFjRUo1U1VRNklHNTFiR3dzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRTl3ZEdsdmJtRnNiSGtnYVc1cVpXTjBZV0pzWlNCb2IyOXJJR1p2Y2lCd2NtOWpaWE56YVc1bklHRWdjWFZsZFdVZ2IyWWdZMmhwYkdRZ2RYQmtZWFJsY3k0Z1YybHNiRnh1SUNBZ0tpQnNZWFJsY2lCdGIzWmxJR2x1ZEc4Z1RYVnNkR2xEYUdsc1pFTnZiWEJ2Ym1WdWRITXVYRzRnSUNBcUwxeHVJQ0J3Y205alpYTnpRMmhwYkdSeVpXNVZjR1JoZEdWek9pQnVkV3hzTEZ4dVhHNGdJR2x1YW1WamRHbHZiam9nZTF4dUlDQWdJR2x1YW1WamRFVnVkbWx5YjI1dFpXNTBPaUJtZFc1amRHbHZiaWhsYm5acGNtOXViV1Z1ZENrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lXbHVhbVZqZEdWa0xGeHVJQ0FnSUNBZ0lDQW5VbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5RNklHbHVhbVZqZEVWdWRtbHliMjV0Wlc1MEtDa2dZMkZ1SUc5dWJIa2dZbVVnWTJGc2JHVmtJRzl1WTJVdUoxeHVJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2doYVc1cVpXTjBaV1FwS1R0Y2JpQWdJQ0FnSUZKbFlXTjBRMjl0Y0c5dVpXNTBSVzUyYVhKdmJtMWxiblF1ZFc1dGIzVnVkRWxFUm5KdmJVVnVkbWx5YjI1dFpXNTBJRDFjYmlBZ0lDQWdJQ0FnWlc1MmFYSnZibTFsYm5RdWRXNXRiM1Z1ZEVsRVJuSnZiVVZ1ZG1seWIyNXRaVzUwTzF4dUlDQWdJQ0FnVW1WaFkzUkRiMjF3YjI1bGJuUkZiblpwY205dWJXVnVkQzV5WlhCc1lXTmxUbTlrWlZkcGRHaE5ZWEpyZFhCQ2VVbEVJRDFjYmlBZ0lDQWdJQ0FnWlc1MmFYSnZibTFsYm5RdWNtVndiR0ZqWlU1dlpHVlhhWFJvVFdGeWEzVndRbmxKUkR0Y2JpQWdJQ0FnSUZKbFlXTjBRMjl0Y0c5dVpXNTBSVzUyYVhKdmJtMWxiblF1Y0hKdlkyVnpjME5vYVd4a2NtVnVWWEJrWVhSbGN5QTlYRzRnSUNBZ0lDQWdJR1Z1ZG1seWIyNXRaVzUwTG5CeWIyTmxjM05EYUdsc1pISmxibFZ3WkdGMFpYTTdYRzRnSUNBZ0lDQnBibXBsWTNSbFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRGIyMXdiMjVsYm5SRmJuWnBjbTl1YldWdWREdGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpblxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2hhbGxvd0VxdWFsID0gcmVxdWlyZShcIi4vc2hhbGxvd0VxdWFsXCIpO1xuXG4vKipcbiAqIElmIHlvdXIgUmVhY3QgY29tcG9uZW50J3MgcmVuZGVyIGZ1bmN0aW9uIGlzIFwicHVyZVwiLCBlLmcuIGl0IHdpbGwgcmVuZGVyIHRoZVxuICogc2FtZSByZXN1bHQgZ2l2ZW4gdGhlIHNhbWUgcHJvcHMgYW5kIHN0YXRlLCBwcm92aWRlIHRoaXMgTWl4aW4gZm9yIGFcbiAqIGNvbnNpZGVyYWJsZSBwZXJmb3JtYW5jZSBib29zdC5cbiAqXG4gKiBNb3N0IFJlYWN0IGNvbXBvbmVudHMgaGF2ZSBwdXJlIHJlbmRlciBmdW5jdGlvbnMuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgIHZhciBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4gPVxuICogICAgIHJlcXVpcmUoJ1JlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpbicpO1xuICogICBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICAgbWl4aW5zOiBbUmVhY3RDb21wb25lbnRXaXRoUHVyZVJlbmRlck1peGluXSxcbiAqXG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9PmZvbzwvZGl2PjtcbiAqICAgICB9XG4gKiAgIH0pO1xuICpcbiAqIE5vdGU6IFRoaXMgb25seSBjaGVja3Mgc2hhbGxvdyBlcXVhbGl0eSBmb3IgcHJvcHMgYW5kIHN0YXRlLiBJZiB0aGVzZSBjb250YWluXG4gKiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGlzIG1peGluIG1heSBoYXZlIGZhbHNlLW5lZ2F0aXZlcyBmb3IgZGVlcGVyXG4gKiBkaWZmZXJlbmNlcy4gT25seSBtaXhpbiB0byBjb21wb25lbnRzIHdoaWNoIGhhdmUgc2ltcGxlIHByb3BzIGFuZCBzdGF0ZSwgb3JcbiAqIHVzZSBgZm9yY2VVcGRhdGUoKWAgd2hlbiB5b3Uga25vdyBkZWVwIGRhdGEgc3RydWN0dXJlcyBoYXZlIGNoYW5nZWQuXG4gKi9cbnZhciBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4gPSB7XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbCh0aGlzLnByb3BzLCBuZXh0UHJvcHMpIHx8XG4gICAgICAgICAgICFzaGFsbG93RXF1YWwodGhpcy5zdGF0ZSwgbmV4dFN0YXRlKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW47XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50RW52aXJvbm1lbnRcIik7XG52YXIgUmVhY3RDb250ZXh0ID0gcmVxdWlyZShcIi4vUmVhY3RDb250ZXh0XCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZU1hcFwiKTtcbnZhciBSZWFjdExpZmVDeWNsZSA9IHJlcXVpcmUoXCIuL1JlYWN0TGlmZUN5Y2xlXCIpO1xudmFyIFJlYWN0TmF0aXZlQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3ROYXRpdmVDb21wb25lbnRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMgPSByZXF1aXJlKFwiLi9SZWFjdFByb3BUeXBlTG9jYXRpb25zXCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNcIik7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZShcIi4vUmVhY3RSZWNvbmNpbGVyXCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlPYmplY3QgPSByZXF1aXJlKFwiLi9lbXB0eU9iamVjdFwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9zaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKGNvbXBvbmVudCkge1xuICB2YXIgb3duZXIgPSBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50Ll9vd25lciB8fCBudWxsO1xuICBpZiAob3duZXIpIHtcbiAgICB2YXIgbmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLSBUaGUgTGlmZS1DeWNsZSBvZiBhIENvbXBvc2l0ZSBDb21wb25lbnQgLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICogLSBjb25zdHJ1Y3RvcjogSW5pdGlhbGl6YXRpb24gb2Ygc3RhdGUuIFRoZSBpbnN0YW5jZSBpcyBub3cgcmV0YWluZWQuXG4gKiAgIC0gY29tcG9uZW50V2lsbE1vdW50XG4gKiAgIC0gcmVuZGVyXG4gKiAgIC0gW2NoaWxkcmVuJ3MgY29uc3RydWN0b3JzXVxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29tcG9uZW50V2lsbE1vdW50IGFuZCByZW5kZXJdXG4gKiAgICAgLSBbY2hpbGRyZW4ncyBjb21wb25lbnREaWRNb3VudF1cbiAqICAgICAtIGNvbXBvbmVudERpZE1vdW50XG4gKlxuICogICAgICAgVXBkYXRlIFBoYXNlczpcbiAqICAgICAgIC0gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAob25seSBjYWxsZWQgaWYgcGFyZW50IHVwZGF0ZWQpXG4gKiAgICAgICAtIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuICogICAgICAgICAtIGNvbXBvbmVudFdpbGxVcGRhdGVcbiAqICAgICAgICAgICAtIHJlbmRlclxuICogICAgICAgICAgIC0gW2NoaWxkcmVuJ3MgY29uc3RydWN0b3JzIG9yIHJlY2VpdmUgcHJvcHMgcGhhc2VzXVxuICogICAgICAgICAtIGNvbXBvbmVudERpZFVwZGF0ZVxuICpcbiAqICAgICAtIGNvbXBvbmVudFdpbGxVbm1vdW50XG4gKiAgICAgLSBbY2hpbGRyZW4ncyBjb21wb25lbnRXaWxsVW5tb3VudF1cbiAqICAgLSBbY2hpbGRyZW4gZGVzdHJveWVkXVxuICogLSAoZGVzdHJveWVkKTogVGhlIGluc3RhbmNlIGlzIG5vdyBibGFuaywgcmVsZWFzZWQgYnkgUmVhY3QgYW5kIHJlYWR5IGZvciBHQy5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQW4gaW5jcmVtZW50aW5nIElEIGFzc2lnbmVkIHRvIGVhY2ggY29tcG9uZW50IHdoZW4gaXQgaXMgbW91bnRlZC4gVGhpcyBpc1xuICogdXNlZCB0byBlbmZvcmNlIHRoZSBvcmRlciBpbiB3aGljaCBgUmVhY3RVcGRhdGVzYCB1cGRhdGVzIGRpcnR5IGNvbXBvbmVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudmFyIG5leHRNb3VudElEID0gMTtcblxuLyoqXG4gKiBAbGVuZHMge1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LnByb3RvdHlwZX1cbiAqL1xudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50TWl4aW4gPSB7XG5cbiAgLyoqXG4gICAqIEJhc2UgY29uc3RydWN0b3IgZm9yIGFsbCBjb21wb3NpdGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG4gICAgdGhpcy5faW5zdGFuY2UgPSBudWxsO1xuXG4gICAgLy8gU2VlIFJlYWN0VXBkYXRlUXVldWVcbiAgICB0aGlzLl9wZW5kaW5nRWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcblxuICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuX21vdW50T3JkZXIgPSAwO1xuICAgIHRoaXMuX2lzVG9wTGV2ZWwgPSBmYWxzZTtcblxuICAgIC8vIFNlZSBSZWFjdFVwZGF0ZXMgYW5kIFJlYWN0VXBkYXRlUXVldWUuXG4gICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrcyA9IG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJlbmRlcnMgbWFya3VwLCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IFJlbmRlcmVkIG1hcmt1cCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihyb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5fbW91bnRPcmRlciA9IG5leHRNb3VudElEKys7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IHJvb3RJRDtcblxuICAgIHZhciBwdWJsaWNQcm9wcyA9IHRoaXMuX3Byb2Nlc3NQcm9wcyh0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyk7XG4gICAgdmFyIHB1YmxpY0NvbnRleHQgPSB0aGlzLl9wcm9jZXNzQ29udGV4dCh0aGlzLl9jdXJyZW50RWxlbWVudC5fY29udGV4dCk7XG5cbiAgICB2YXIgQ29tcG9uZW50ID0gUmVhY3ROYXRpdmVDb21wb25lbnQuZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KFxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnRcbiAgICApO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHVibGljIGNsYXNzXG4gICAgdmFyIGluc3QgPSBuZXcgQ29tcG9uZW50KHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0KTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBsYXRlciBpbiBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50LCBidXQgYWRkIGFuIGVhcmx5XG4gICAgICAvLyB3YXJuaW5nIG5vdyB0byBoZWxwIGRlYnVnZ2luZ1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIGluc3QucmVuZGVyICE9IG51bGwsXG4gICAgICAgICclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICtcbiAgICAgICAgJ2luc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYCBpbiB5b3VyICcgK1xuICAgICAgICAnY29tcG9uZW50IG9yIHlvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgdHJpZWQgdG8gcmVuZGVyIGFuIGVsZW1lbnQgJyArXG4gICAgICAgICd3aG9zZSB0eXBlIGlzIGEgZnVuY3Rpb24gdGhhdCBpc25cXCd0IGEgUmVhY3QgY29tcG9uZW50LicsXG4gICAgICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgIH1cblxuICAgIC8vIFRoZXNlIHNob3VsZCBiZSBzZXQgdXAgaW4gdGhlIGNvbnN0cnVjdG9yLCBidXQgYXMgYSBjb252ZW5pZW5jZSBmb3JcbiAgICAvLyBzaW1wbGVyIGNsYXNzIGFic3RyYWN0aW9ucywgd2Ugc2V0IHRoZW0gdXAgYWZ0ZXIgdGhlIGZhY3QuXG4gICAgaW5zdC5wcm9wcyA9IHB1YmxpY1Byb3BzO1xuICAgIGluc3QuY29udGV4dCA9IHB1YmxpY0NvbnRleHQ7XG4gICAgaW5zdC5yZWZzID0gZW1wdHlPYmplY3Q7XG5cbiAgICB0aGlzLl9pbnN0YW5jZSA9IGluc3Q7XG5cbiAgICAvLyBTdG9yZSBhIHJlZmVyZW5jZSBmcm9tIHRoZSBpbnN0YW5jZSBiYWNrIHRvIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvblxuICAgIFJlYWN0SW5zdGFuY2VNYXAuc2V0KGluc3QsIHRoaXMpO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdGhpcy5fd2FybklmQ29udGV4dHNEaWZmZXIodGhpcy5fY3VycmVudEVsZW1lbnQuX2NvbnRleHQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIFNpbmNlIHBsYWluIEpTIGNsYXNzZXMgYXJlIGRlZmluZWQgd2l0aG91dCBhbnkgc3BlY2lhbCBpbml0aWFsaXphdGlvblxuICAgICAgLy8gbG9naWMsIHdlIGNhbiBub3QgY2F0Y2ggY29tbW9uIGVycm9ycyBlYXJseS4gVGhlcmVmb3JlLCB3ZSBoYXZlIHRvXG4gICAgICAvLyBjYXRjaCB0aGVtIGhlcmUsIGF0IGluaXRpYWxpemF0aW9uIHRpbWUsIGluc3RlYWQuXG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgIWluc3QuZ2V0SW5pdGlhbFN0YXRlIHx8XG4gICAgICAgIGluc3QuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkLFxuICAgICAgICAnZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgK1xuICAgICAgICAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICtcbiAgICAgICAgJ0RpZCB5b3UgbWVhbiB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkPycsXG4gICAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAhaW5zdC5nZXREZWZhdWx0UHJvcHMgfHxcbiAgICAgICAgaW5zdC5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQsXG4gICAgICAgICdnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArXG4gICAgICAgICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgK1xuICAgICAgICAnVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC4nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgIWluc3QucHJvcFR5cGVzLFxuICAgICAgICAncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArXG4gICAgICAgICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ2EgY29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICFpbnN0LmNvbnRleHRUeXBlcyxcbiAgICAgICAgJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgJyArXG4gICAgICAgICdzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsXG4gICAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICB0eXBlb2YgaW5zdC5jb21wb25lbnRTaG91bGRVcGRhdGUgIT09ICdmdW5jdGlvbicsXG4gICAgICAgICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgK1xuICAgICAgICAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArXG4gICAgICAgICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArXG4gICAgICAgICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLFxuICAgICAgICAodGhpcy5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JylcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbFN0YXRlID0gaW5zdC5zdGF0ZTtcbiAgICBpZiAoaW5pdGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGluc3Quc3RhdGUgPSBpbml0aWFsU3RhdGUgPSBudWxsO1xuICAgIH1cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSxcbiAgICAgICclcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGwnLFxuICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50J1xuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkpO1xuXG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICAgIHZhciBjaGlsZENvbnRleHQ7XG4gICAgdmFyIHJlbmRlcmVkRWxlbWVudDtcblxuICAgIHZhciBwcmV2aW91c2x5TW91bnRpbmcgPSBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlNb3VudGluZ0luc3RhbmNlO1xuICAgIFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2UgPSB0aGlzO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaW5zdC5jb21wb25lbnRXaWxsTW91bnQpIHtcbiAgICAgICAgaW5zdC5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgICAgLy8gV2hlbiBtb3VudGluZywgY2FsbHMgdG8gYHNldFN0YXRlYCBieSBgY29tcG9uZW50V2lsbE1vdW50YCB3aWxsIHNldFxuICAgICAgICAvLyBgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWVgIHdpdGhvdXQgdHJpZ2dlcmluZyBhIHJlLXJlbmRlci5cbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlKSB7XG4gICAgICAgICAgaW5zdC5zdGF0ZSA9IHRoaXMuX3Byb2Nlc3NQZW5kaW5nU3RhdGUoaW5zdC5wcm9wcywgaW5zdC5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGlsZENvbnRleHQgPSB0aGlzLl9nZXRWYWxpZGF0ZWRDaGlsZENvbnRleHQoY29udGV4dCk7XG4gICAgICByZW5kZXJlZEVsZW1lbnQgPSB0aGlzLl9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQoY2hpbGRDb250ZXh0KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5TW91bnRpbmdJbnN0YW5jZSA9IHByZXZpb3VzbHlNb3VudGluZztcbiAgICB9XG5cbiAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IHRoaXMuX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoXG4gICAgICByZW5kZXJlZEVsZW1lbnQsXG4gICAgICB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlIC8vIFRoZSB3cmFwcGluZyB0eXBlXG4gICAgKTtcblxuICAgIHZhciBtYXJrdXAgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoXG4gICAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCxcbiAgICAgIHJvb3RJRCxcbiAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgdGhpcy5fbWVyZ2VDaGlsZENvbnRleHQoY29udGV4dCwgY2hpbGRDb250ZXh0KVxuICAgICk7XG4gICAgaWYgKGluc3QuY29tcG9uZW50RGlkTW91bnQpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoaW5zdC5jb21wb25lbnREaWRNb3VudCwgaW5zdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfSxcblxuICAvKipcbiAgICogUmVsZWFzZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgYG1vdW50Q29tcG9uZW50YC5cbiAgICpcbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIGlmIChpbnN0LmNvbXBvbmVudFdpbGxVbm1vdW50KSB7XG4gICAgICB2YXIgcHJldmlvdXNseVVubW91bnRpbmcgPSBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2U7XG4gICAgICBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2UgPSB0aGlzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5VW5tb3VudGluZ0luc3RhbmNlID0gcHJldmlvdXNseVVubW91bnRpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQodGhpcy5fcmVuZGVyZWRDb21wb25lbnQpO1xuICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcblxuICAgIC8vIFJlc2V0IHBlbmRpbmcgZmllbGRzXG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgICAvLyBUaGVzZSBmaWVsZHMgZG8gbm90IHJlYWxseSBuZWVkIHRvIGJlIHJlc2V0IHNpbmNlIHRoaXMgb2JqZWN0IGlzIG5vXG4gICAgLy8gbG9uZ2VyIGFjY2Vzc2libGUuXG4gICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG5cbiAgICAvLyBEZWxldGUgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBpbnN0YW5jZSB0byB0aGlzIGludGVybmFsIHJlcHJlc2VudGF0aW9uXG4gICAgLy8gd2hpY2ggYWxsb3cgdGhlIGludGVybmFscyB0byBiZSBwcm9wZXJseSBjbGVhbmVkIHVwIGV2ZW4gaWYgdGhlIHVzZXJcbiAgICAvLyBsZWFrcyBhIHJlZmVyZW5jZSB0byB0aGUgcHVibGljIGluc3RhbmNlLlxuICAgIFJlYWN0SW5zdGFuY2VNYXAucmVtb3ZlKGluc3QpO1xuXG4gICAgLy8gU29tZSBleGlzdGluZyBjb21wb25lbnRzIHJlbHkgb24gaW5zdC5wcm9wcyBldmVuIGFmdGVyIHRoZXkndmUgYmVlblxuICAgIC8vIGRlc3Ryb3llZCAoaW4gZXZlbnQgaGFuZGxlcnMpLlxuICAgIC8vIFRPRE86IGluc3QucHJvcHMgPSBudWxsO1xuICAgIC8vIFRPRE86IGluc3Quc3RhdGUgPSBudWxsO1xuICAgIC8vIFRPRE86IGluc3QuY29udGV4dCA9IG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIGEgcGFydGlhbCB1cGRhdGUgdG8gdGhlIHByb3BzLiBPbmx5IHVzZWQgZm9yIGludGVybmFsIHRlc3RpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsUHJvcHMgU3Vic2V0IG9mIHRoZSBuZXh0IHByb3BzLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHByb3BzIGFyZSB1cGRhdGVkLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfc2V0UHJvcHNJbnRlcm5hbDogZnVuY3Rpb24ocGFydGlhbFByb3BzLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgaXMgYSBkZW9wdGltaXplZCBwYXRoLiBXZSBvcHRpbWl6ZSBmb3IgYWx3YXlzIGhhdmluZyBhbiBlbGVtZW50LlxuICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBleHRyYSBpbnRlcm5hbCBlbGVtZW50LlxuICAgIHZhciBlbGVtZW50ID0gdGhpcy5fcGVuZGluZ0VsZW1lbnQgfHwgdGhpcy5fY3VycmVudEVsZW1lbnQ7XG4gICAgdGhpcy5fcGVuZGluZ0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlUHJvcHMoXG4gICAgICBlbGVtZW50LFxuICAgICAgYXNzaWduKHt9LCBlbGVtZW50LnByb3BzLCBwYXJ0aWFsUHJvcHMpXG4gICAgKTtcbiAgICBSZWFjdFVwZGF0ZXMuZW5xdWV1ZVVwZGF0ZSh0aGlzLCBjYWxsYmFjayk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgdGhlIGNvbnRleHQgb2JqZWN0IHRvIG9ubHkgY29udGFpbiBrZXlzIHNwZWNpZmllZCBpblxuICAgKiBgY29udGV4dFR5cGVzYFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21hc2tDb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIG1hc2tlZENvbnRleHQgPSBudWxsO1xuICAgIC8vIFRoaXMgcmVhbGx5IHNob3VsZCBiZSBnZXR0aW5nIHRoZSBjb21wb25lbnQgY2xhc3MgZm9yIHRoZSBlbGVtZW50LFxuICAgIC8vIGJ1dCB3ZSBrbm93IHRoYXQgd2UncmUgbm90IGdvaW5nIHRvIG5lZWQgaXQgZm9yIGJ1aWx0LWlucy5cbiAgICBpZiAodHlwZW9mIHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZW1wdHlPYmplY3Q7XG4gICAgfVxuICAgIHZhciBjb250ZXh0VHlwZXMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLmNvbnRleHRUeXBlcztcbiAgICBpZiAoIWNvbnRleHRUeXBlcykge1xuICAgICAgcmV0dXJuIGVtcHR5T2JqZWN0O1xuICAgIH1cbiAgICBtYXNrZWRDb250ZXh0ID0ge307XG4gICAgZm9yICh2YXIgY29udGV4dE5hbWUgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBtYXNrZWRDb250ZXh0W2NvbnRleHROYW1lXSA9IGNvbnRleHRbY29udGV4dE5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gbWFza2VkQ29udGV4dDtcbiAgfSxcblxuICAvKipcbiAgICogRmlsdGVycyB0aGUgY29udGV4dCBvYmplY3QgdG8gb25seSBjb250YWluIGtleXMgc3BlY2lmaWVkIGluXG4gICAqIGBjb250ZXh0VHlwZXNgLCBhbmQgYXNzZXJ0cyB0aGF0IHRoZXkgYXJlIHZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NDb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgdmFyIG1hc2tlZENvbnRleHQgPSB0aGlzLl9tYXNrQ29udGV4dChjb250ZXh0KTtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YXIgQ29tcG9uZW50ID0gUmVhY3ROYXRpdmVDb21wb25lbnQuZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudFxuICAgICAgKTtcbiAgICAgIGlmIChDb21wb25lbnQuY29udGV4dFR5cGVzKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgIENvbXBvbmVudC5jb250ZXh0VHlwZXMsXG4gICAgICAgICAgbWFza2VkQ29udGV4dCxcbiAgICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLmNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hc2tlZENvbnRleHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjdXJyZW50Q29udGV4dFxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsaWRhdGVkQ2hpbGRDb250ZXh0OiBmdW5jdGlvbihjdXJyZW50Q29udGV4dCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3QuZ2V0Q2hpbGRDb250ZXh0ICYmIGluc3QuZ2V0Q2hpbGRDb250ZXh0KCk7XG4gICAgaWYgKGNoaWxkQ29udGV4dCkge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgdHlwZW9mIGluc3QuY29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMgPT09ICdvYmplY3QnLFxuICAgICAgICAnJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byAnICtcbiAgICAgICAgJ3VzZSBnZXRDaGlsZENvbnRleHQoKS4nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnXG4gICAgICApIDogaW52YXJpYW50KHR5cGVvZiBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID09PSAnb2JqZWN0JykpO1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICB0aGlzLl9jaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICAgIGNoaWxkQ29udGV4dCxcbiAgICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLmNoaWxkQ29udGV4dFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbmFtZSBpbiBjaGlsZENvbnRleHQpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICBuYW1lIGluIGluc3QuY29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMsXG4gICAgICAgICAgJyVzLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXCIlc1wiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLicsXG4gICAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JyxcbiAgICAgICAgICBuYW1lXG4gICAgICAgICkgOiBpbnZhcmlhbnQobmFtZSBpbiBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hpbGRDb250ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICBfbWVyZ2VDaGlsZENvbnRleHQ6IGZ1bmN0aW9uKGN1cnJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpIHtcbiAgICBpZiAoY2hpbGRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gYXNzaWduKHt9LCBjdXJyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRDb250ZXh0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgcHJvcHMgYnkgc2V0dGluZyBkZWZhdWx0IHZhbHVlcyBmb3IgdW5zcGVjaWZpZWQgcHJvcHMgYW5kXG4gICAqIGFzc2VydGluZyB0aGF0IHRoZSBwcm9wcyBhcmUgdmFsaWQuIERvZXMgbm90IG11dGF0ZSBpdHMgYXJndW1lbnQ7IHJldHVybnNcbiAgICogYSBuZXcgcHJvcHMgb2JqZWN0IHdpdGggZGVmYXVsdHMgbWVyZ2VkIGluLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3UHJvcHNcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NQcm9wczogZnVuY3Rpb24obmV3UHJvcHMpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YXIgQ29tcG9uZW50ID0gUmVhY3ROYXRpdmVDb21wb25lbnQuZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudFxuICAgICAgKTtcbiAgICAgIGlmIChDb21wb25lbnQucHJvcFR5cGVzKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrUHJvcFR5cGVzKFxuICAgICAgICAgIENvbXBvbmVudC5wcm9wVHlwZXMsXG4gICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5wcm9wXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdQcm9wcztcbiAgfSxcblxuICAvKipcbiAgICogQXNzZXJ0IHRoYXQgdGhlIHByb3BzIGFyZSB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcFR5cGVzIE1hcCBvZiBwcm9wIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tQcm9wVHlwZXM6IGZ1bmN0aW9uKHByb3BUeXBlcywgcHJvcHMsIGxvY2F0aW9uKSB7XG4gICAgLy8gVE9ETzogU3RvcCB2YWxpZGF0aW5nIHByb3AgdHlwZXMgaGVyZSBhbmQgb25seSB1c2UgdGhlIGVsZW1lbnRcbiAgICAvLyB2YWxpZGF0aW9uLlxuICAgIHZhciBjb21wb25lbnROYW1lID0gdGhpcy5nZXROYW1lKCk7XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gcHJvcFR5cGVzKSB7XG4gICAgICBpZiAocHJvcFR5cGVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgICB0eXBlb2YgcHJvcFR5cGVzW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSAnICtcbiAgICAgICAgICAgICdmcm9tIFJlYWN0LlByb3BUeXBlcy4nLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLFxuICAgICAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLFxuICAgICAgICAgICAgcHJvcE5hbWVcbiAgICAgICAgICApIDogaW52YXJpYW50KHR5cGVvZiBwcm9wVHlwZXNbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nKSk7XG4gICAgICAgICAgZXJyb3IgPSBwcm9wVHlwZXNbcHJvcE5hbWVdKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBleHRlbmQgdGhpcyBsb2dpYyBmb3Igc2ltaWxhciBlcnJvcnMgaW5cbiAgICAgICAgICAvLyBSZWFjdC5yZW5kZXIgY2FsbHMsIHNvIEknbSBhYnN0cmFjdGluZyBpdCBhd2F5IGludG9cbiAgICAgICAgICAvLyBhIGZ1bmN0aW9uIHRvIG1pbmltaXplIHJlZmFjdG9yaW5nIGluIHRoZSBmdXR1cmVcbiAgICAgICAgICB2YXIgYWRkZW5kdW0gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0odGhpcyk7XG5cbiAgICAgICAgICBpZiAobG9jYXRpb24gPT09IFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMucHJvcCkge1xuICAgICAgICAgICAgLy8gUHJlZmFjZSBnaXZlcyB1cyBzb21ldGhpbmcgdG8gYmxhY2tsaXN0IGluIHdhcm5pbmcgbW9kdWxlXG4gICAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICdGYWlsZWQgQ29tcG9zaXRlIHByb3BUeXBlOiAlcyVzJyxcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgYWRkZW5kdW1cbiAgICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnRmFpbGVkIENvbnRleHQgVHlwZXM6ICVzJXMnLFxuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICBhZGRlbmR1bVxuICAgICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZWNlaXZlQ29tcG9uZW50OiBmdW5jdGlvbihuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIG5leHRDb250ZXh0KSB7XG4gICAgdmFyIHByZXZFbGVtZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIHByZXZDb250ZXh0ID0gdGhpcy5fY29udGV4dDtcblxuICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KFxuICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICBwcmV2RWxlbWVudCxcbiAgICAgIG5leHRFbGVtZW50LFxuICAgICAgcHJldkNvbnRleHQsXG4gICAgICBuZXh0Q29udGV4dFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIElmIGFueSBvZiBgX3BlbmRpbmdFbGVtZW50YCwgYF9wZW5kaW5nU3RhdGVRdWV1ZWAsIG9yIGBfcGVuZGluZ0ZvcmNlVXBkYXRlYFxuICAgKiBpcyBzZXQsIHVwZGF0ZSB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbih0cmFuc2FjdGlvbikge1xuICAgIGlmICh0aGlzLl9wZW5kaW5nRWxlbWVudCAhPSBudWxsKSB7XG4gICAgICBSZWFjdFJlY29uY2lsZXIucmVjZWl2ZUNvbXBvbmVudChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5fcGVuZGluZ0VsZW1lbnQgfHwgdGhpcy5fY3VycmVudEVsZW1lbnQsXG4gICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICB0aGlzLl9jb250ZXh0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSAhPT0gbnVsbCB8fCB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNoZWNrQW5kV2FybkZvck11dGF0ZWRQcm9wcyhcbiAgICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudChcbiAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50LFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudCxcbiAgICAgICAgdGhpcy5fY29udGV4dCxcbiAgICAgICAgdGhpcy5fY29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIGNvbnRleHRzLCB3YXJuaW5nIGlmIHRoZXkgYXJlIGRpZmZlcmVudFxuICAgKiBUT0RPOiBSZW1vdmUgdGhpcyBjaGVjayB3aGVuIG93bmVyLWNvbnRleHQgaXMgcmVtb3ZlZFxuICAgKi9cbiAgIF93YXJuSWZDb250ZXh0c0RpZmZlcjogZnVuY3Rpb24ob3duZXJCYXNlZENvbnRleHQsIHBhcmVudEJhc2VkQ29udGV4dCkge1xuICAgIG93bmVyQmFzZWRDb250ZXh0ID0gdGhpcy5fbWFza0NvbnRleHQob3duZXJCYXNlZENvbnRleHQpO1xuICAgIHBhcmVudEJhc2VkQ29udGV4dCA9IHRoaXMuX21hc2tDb250ZXh0KHBhcmVudEJhc2VkQ29udGV4dCk7XG4gICAgdmFyIHBhcmVudEtleXMgPSBPYmplY3Qua2V5cyhwYXJlbnRCYXNlZENvbnRleHQpLnNvcnQoKTtcbiAgICB2YXIgZGlzcGxheU5hbWUgPSB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50S2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhcmVudEtleXNbaV07XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgb3duZXJCYXNlZENvbnRleHRba2V5XSA9PT0gcGFyZW50QmFzZWRDb250ZXh0W2tleV0sXG4gICAgICAgICdvd25lci1iYXNlZCBhbmQgcGFyZW50LWJhc2VkIGNvbnRleHRzIGRpZmZlciAnICArXG4gICAgICAgICcodmFsdWVzOiBgJXNgIHZzIGAlc2ApIGZvciBrZXkgKCVzKSB3aGlsZSBtb3VudGluZyAlcyAnICtcbiAgICAgICAgJyhzZWU6IGh0dHA6Ly9mYi5tZS9yZWFjdC1jb250ZXh0LWJ5LXBhcmVudCknLFxuICAgICAgICBvd25lckJhc2VkQ29udGV4dFtrZXldLFxuICAgICAgICBwYXJlbnRCYXNlZENvbnRleHRba2V5XSxcbiAgICAgICAga2V5LFxuICAgICAgICBkaXNwbGF5TmFtZVxuICAgICAgKSA6IG51bGwpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUGVyZm9ybSBhbiB1cGRhdGUgdG8gYSBtb3VudGVkIGNvbXBvbmVudC4gVGhlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgYW5kXG4gICAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSBtZXRob2RzIGFyZSBjYWxsZWQsIHRoZW4gKGFzc3VtaW5nIHRoZSB1cGRhdGUgaXNuJ3RcbiAgICogc2tpcHBlZCkgdGhlIHJlbWFpbmluZyB1cGRhdGUgbGlmZWN5Y2xlIG1ldGhvZHMgYXJlIGNhbGxlZCBhbmQgdGhlIERPTVxuICAgKiByZXByZXNlbnRhdGlvbiBpcyB1cGRhdGVkLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIGltcGxlbWVudHMgUmVhY3QncyByZW5kZXJpbmcgYW5kIHJlY29uY2lsaWF0aW9uIGFsZ29yaXRobS5cbiAgICogU29waGlzdGljYXRlZCBjbGllbnRzIG1heSB3aXNoIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IHByZXZQYXJlbnRFbGVtZW50XG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0UGFyZW50RWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICogQG92ZXJyaWRhYmxlXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uKFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIHByZXZQYXJlbnRFbGVtZW50LFxuICAgIG5leHRQYXJlbnRFbGVtZW50LFxuICAgIHByZXZVbm1hc2tlZENvbnRleHQsXG4gICAgbmV4dFVubWFza2VkQ29udGV4dFxuICApIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuXG4gICAgdmFyIG5leHRDb250ZXh0ID0gaW5zdC5jb250ZXh0O1xuICAgIHZhciBuZXh0UHJvcHMgPSBpbnN0LnByb3BzO1xuXG4gICAgLy8gRGlzdGluZ3Vpc2ggYmV0d2VlbiBhIHByb3BzIHVwZGF0ZSB2ZXJzdXMgYSBzaW1wbGUgc3RhdGUgdXBkYXRlXG4gICAgaWYgKHByZXZQYXJlbnRFbGVtZW50ICE9PSBuZXh0UGFyZW50RWxlbWVudCkge1xuICAgICAgbmV4dENvbnRleHQgPSB0aGlzLl9wcm9jZXNzQ29udGV4dChuZXh0UGFyZW50RWxlbWVudC5fY29udGV4dCk7XG4gICAgICBuZXh0UHJvcHMgPSB0aGlzLl9wcm9jZXNzUHJvcHMobmV4dFBhcmVudEVsZW1lbnQucHJvcHMpO1xuXG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIGlmIChuZXh0VW5tYXNrZWRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl93YXJuSWZDb250ZXh0c0RpZmZlcihcbiAgICAgICAgICAgIG5leHRQYXJlbnRFbGVtZW50Ll9jb250ZXh0LFxuICAgICAgICAgICAgbmV4dFVubWFza2VkQ29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQW4gdXBkYXRlIGhlcmUgd2lsbCBzY2hlZHVsZSBhbiB1cGRhdGUgYnV0IGltbWVkaWF0ZWx5IHNldFxuICAgICAgLy8gX3BlbmRpbmdTdGF0ZVF1ZXVlIHdoaWNoIHdpbGwgZW5zdXJlIHRoYXQgYW55IHN0YXRlIHVwZGF0ZXMgZ2V0c1xuICAgICAgLy8gaW1tZWRpYXRlbHkgcmVjb25jaWxlZCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBuZXh0IGJhdGNoLlxuXG4gICAgICBpZiAoaW5zdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV4dFN0YXRlID0gdGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShuZXh0UHJvcHMsIG5leHRDb250ZXh0KTtcblxuICAgIHZhciBzaG91bGRVcGRhdGUgPVxuICAgICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlIHx8XG4gICAgICAhaW5zdC5zaG91bGRDb21wb25lbnRVcGRhdGUgfHxcbiAgICAgIGluc3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgdHlwZW9mIHNob3VsZFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICAgICclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSAnICtcbiAgICAgICAgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7XG4gICAgICAvLyBXaWxsIHNldCBgdGhpcy5wcm9wc2AsIGB0aGlzLnN0YXRlYCBhbmQgYHRoaXMuY29udGV4dGAuXG4gICAgICB0aGlzLl9wZXJmb3JtQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICBuZXh0UGFyZW50RWxlbWVudCxcbiAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIG5leHRDb250ZXh0LFxuICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgbmV4dFVubWFza2VkQ29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgaXQncyBkZXRlcm1pbmVkIHRoYXQgYSBjb21wb25lbnQgc2hvdWxkIG5vdCB1cGRhdGUsIHdlIHN0aWxsIHdhbnRcbiAgICAgIC8vIHRvIHNldCBwcm9wcyBhbmQgc3RhdGUgYnV0IHdlIHNob3J0Y3V0IHRoZSByZXN0IG9mIHRoZSB1cGRhdGUuXG4gICAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IG5leHRQYXJlbnRFbGVtZW50O1xuICAgICAgdGhpcy5fY29udGV4dCA9IG5leHRVbm1hc2tlZENvbnRleHQ7XG4gICAgICBpbnN0LnByb3BzID0gbmV4dFByb3BzO1xuICAgICAgaW5zdC5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIGluc3QuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBfcHJvY2Vzc1BlbmRpbmdTdGF0ZTogZnVuY3Rpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciBxdWV1ZSA9IHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlO1xuICAgIHZhciByZXBsYWNlID0gdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZTtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuXG4gICAgaWYgKCFxdWV1ZSkge1xuICAgICAgcmV0dXJuIGluc3Quc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHJlcGxhY2UgJiYgcXVldWUubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gcXVldWVbMF07XG4gICAgfVxuXG4gICAgdmFyIG5leHRTdGF0ZSA9IGFzc2lnbih7fSwgcmVwbGFjZSA/IHF1ZXVlWzBdIDogaW5zdC5zdGF0ZSk7XG4gICAgZm9yICh2YXIgaSA9IHJlcGxhY2UgPyAxIDogMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHF1ZXVlW2ldO1xuICAgICAgYXNzaWduKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIHR5cGVvZiBwYXJ0aWFsID09PSAnZnVuY3Rpb24nID9cbiAgICAgICAgICBwYXJ0aWFsLmNhbGwoaW5zdCwgbmV4dFN0YXRlLCBwcm9wcywgY29udGV4dCkgOlxuICAgICAgICAgIHBhcnRpYWxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfSxcblxuICAvKipcbiAgICogTWVyZ2VzIG5ldyBwcm9wcyBhbmQgc3RhdGUsIG5vdGlmaWVzIGRlbGVnYXRlIG1ldGhvZHMgb2YgdXBkYXRlIGFuZFxuICAgKiBwZXJmb3JtcyB1cGRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBOZXh0IGVsZW1lbnRcbiAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcyBOZXh0IHB1YmxpYyBvYmplY3QgdG8gc2V0IGFzIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlIE5leHQgb2JqZWN0IHRvIHNldCBhcyBzdGF0ZS5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dCBOZXh0IHB1YmxpYyBvYmplY3QgdG8gc2V0IGFzIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHs/b2JqZWN0fSB1bm1hc2tlZENvbnRleHRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbihcbiAgICBuZXh0RWxlbWVudCxcbiAgICBuZXh0UHJvcHMsXG4gICAgbmV4dFN0YXRlLFxuICAgIG5leHRDb250ZXh0LFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIHVubWFza2VkQ29udGV4dFxuICApIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuXG4gICAgdmFyIHByZXZQcm9wcyA9IGluc3QucHJvcHM7XG4gICAgdmFyIHByZXZTdGF0ZSA9IGluc3Quc3RhdGU7XG4gICAgdmFyIHByZXZDb250ZXh0ID0gaW5zdC5jb250ZXh0O1xuXG4gICAgaWYgKGluc3QuY29tcG9uZW50V2lsbFVwZGF0ZSkge1xuICAgICAgaW5zdC5jb21wb25lbnRXaWxsVXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0RWxlbWVudDtcbiAgICB0aGlzLl9jb250ZXh0ID0gdW5tYXNrZWRDb250ZXh0O1xuICAgIGluc3QucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgaW5zdC5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICBpbnN0LmNvbnRleHQgPSBuZXh0Q29udGV4dDtcblxuICAgIHRoaXMuX3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50KHRyYW5zYWN0aW9uLCB1bm1hc2tlZENvbnRleHQpO1xuXG4gICAgaWYgKGluc3QuY29tcG9uZW50RGlkVXBkYXRlKSB7XG4gICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKFxuICAgICAgICBpbnN0LmNvbXBvbmVudERpZFVwZGF0ZS5iaW5kKGluc3QsIHByZXZQcm9wcywgcHJldlN0YXRlLCBwcmV2Q29udGV4dCksXG4gICAgICAgIGluc3RcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBjb21wb25lbnQncyBgcmVuZGVyYCBtZXRob2QgYW5kIHVwZGF0ZSB0aGUgRE9NIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50OiBmdW5jdGlvbih0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBwcmV2Q29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLl9yZW5kZXJlZENvbXBvbmVudDtcbiAgICB2YXIgcHJldlJlbmRlcmVkRWxlbWVudCA9IHByZXZDb21wb25lbnRJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIGNoaWxkQ29udGV4dCA9IHRoaXMuX2dldFZhbGlkYXRlZENoaWxkQ29udGV4dCgpO1xuICAgIHZhciBuZXh0UmVuZGVyZWRFbGVtZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KGNoaWxkQ29udGV4dCk7XG4gICAgaWYgKHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZSZW5kZXJlZEVsZW1lbnQsIG5leHRSZW5kZXJlZEVsZW1lbnQpKSB7XG4gICAgICBSZWFjdFJlY29uY2lsZXIucmVjZWl2ZUNvbXBvbmVudChcbiAgICAgICAgcHJldkNvbXBvbmVudEluc3RhbmNlLFxuICAgICAgICBuZXh0UmVuZGVyZWRFbGVtZW50LFxuICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgdGhpcy5fbWVyZ2VDaGlsZENvbnRleHQoY29udGV4dCwgY2hpbGRDb250ZXh0KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlc2UgdHdvIElEcyBhcmUgYWN0dWFsbHkgdGhlIHNhbWUhIEJ1dCBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoYXQuXG4gICAgICB2YXIgdGhpc0lEID0gdGhpcy5fcm9vdE5vZGVJRDtcbiAgICAgIHZhciBwcmV2Q29tcG9uZW50SUQgPSBwcmV2Q29tcG9uZW50SW5zdGFuY2UuX3Jvb3ROb2RlSUQ7XG4gICAgICBSZWFjdFJlY29uY2lsZXIudW5tb3VudENvbXBvbmVudChwcmV2Q29tcG9uZW50SW5zdGFuY2UpO1xuXG4gICAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IHRoaXMuX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoXG4gICAgICAgIG5leHRSZW5kZXJlZEVsZW1lbnQsXG4gICAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGVcbiAgICAgICk7XG4gICAgICB2YXIgbmV4dE1hcmt1cCA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChcbiAgICAgICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQsXG4gICAgICAgIHRoaXNJRCxcbiAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgIHRoaXMuX21lcmdlQ2hpbGRDb250ZXh0KGNvbnRleHQsIGNoaWxkQ29udGV4dClcbiAgICAgICk7XG4gICAgICB0aGlzLl9yZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEKHByZXZDb21wb25lbnRJRCwgbmV4dE1hcmt1cCk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBfcmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDogZnVuY3Rpb24ocHJldkNvbXBvbmVudElELCBuZXh0TWFya3VwKSB7XG4gICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5yZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEKFxuICAgICAgcHJldkNvbXBvbmVudElELFxuICAgICAgbmV4dE1hcmt1cFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgdmFyIHJlbmRlcmVkQ29tcG9uZW50ID0gaW5zdC5yZW5kZXIoKTtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgIGlmICh0eXBlb2YgcmVuZGVyZWRDb21wb25lbnQgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgaW5zdC5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmFkIHByYWN0aWNlLiBDb25zaWRlciB3YXJuaW5nIGhlcmUgYW5kXG4gICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuXG4gICAgICAgIHJlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyZWRDb21wb25lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50OiBmdW5jdGlvbihjaGlsZENvbnRleHQpIHtcbiAgICB2YXIgcmVuZGVyZWRDb21wb25lbnQ7XG4gICAgdmFyIHByZXZpb3VzQ29udGV4dCA9IFJlYWN0Q29udGV4dC5jdXJyZW50O1xuICAgIFJlYWN0Q29udGV4dC5jdXJyZW50ID0gdGhpcy5fbWVyZ2VDaGlsZENvbnRleHQoXG4gICAgICB0aGlzLl9jdXJyZW50RWxlbWVudC5fY29udGV4dCxcbiAgICAgIGNoaWxkQ29udGV4dFxuICAgICk7XG4gICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IHRoaXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlcmVkQ29tcG9uZW50ID1cbiAgICAgICAgdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q29udGV4dC5jdXJyZW50ID0gcHJldmlvdXNDb250ZXh0O1xuICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAvLyBUT0RPOiBBbiBgaXNWYWxpZE5vZGVgIGZ1bmN0aW9uIHdvdWxkIHByb2JhYmx5IGJlIG1vcmUgYXBwcm9wcmlhdGVcbiAgICAgIHJlbmRlcmVkQ29tcG9uZW50ID09PSBudWxsIHx8IHJlbmRlcmVkQ29tcG9uZW50ID09PSBmYWxzZSB8fFxuICAgICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHJlbmRlcmVkQ29tcG9uZW50KSxcbiAgICAgICclcy5yZW5kZXIoKTogQSB2YWxpZCBSZWFjdENvbXBvbmVudCBtdXN0IGJlIHJldHVybmVkLiBZb3UgbWF5IGhhdmUgJyArXG4gICAgICAgICdyZXR1cm5lZCB1bmRlZmluZWQsIGFuIGFycmF5IG9yIHNvbWUgb3RoZXIgaW52YWxpZCBvYmplY3QuJyxcbiAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdcbiAgICApIDogaW52YXJpYW50KC8vIFRPRE86IEFuIGBpc1ZhbGlkTm9kZWAgZnVuY3Rpb24gd291bGQgcHJvYmFibHkgYmUgbW9yZSBhcHByb3ByaWF0ZVxuICAgIHJlbmRlcmVkQ29tcG9uZW50ID09PSBudWxsIHx8IHJlbmRlcmVkQ29tcG9uZW50ID09PSBmYWxzZSB8fFxuICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChyZW5kZXJlZENvbXBvbmVudCkpKTtcbiAgICByZXR1cm4gcmVuZGVyZWRDb21wb25lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExhemlseSBhbGxvY2F0ZXMgdGhlIHJlZnMgb2JqZWN0IGFuZCBzdG9yZXMgYGNvbXBvbmVudGAgYXMgYHJlZmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWYgUmVmZXJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7Y29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIHN0b3JlIGFzIGByZWZgLlxuICAgKiBAZmluYWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGF0dGFjaFJlZjogZnVuY3Rpb24ocmVmLCBjb21wb25lbnQpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICB2YXIgcmVmcyA9IGluc3QucmVmcyA9PT0gZW1wdHlPYmplY3QgPyAoaW5zdC5yZWZzID0ge30pIDogaW5zdC5yZWZzO1xuICAgIHJlZnNbcmVmXSA9IGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZXRhY2hlcyBhIHJlZmVyZW5jZSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgdG8gZGVyZWZlcmVuY2UuXG4gICAqIEBmaW5hbFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGV0YWNoUmVmOiBmdW5jdGlvbihyZWYpIHtcbiAgICB2YXIgcmVmcyA9IHRoaXMuZ2V0UHVibGljSW5zdGFuY2UoKS5yZWZzO1xuICAgIGRlbGV0ZSByZWZzW3JlZl07XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhIHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGNvbXBvbmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGl0XG4gICAqIGluIGVycm9yIG1lc3NhZ2VzLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9yIG51bGwuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0TmFtZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHR5cGUgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHRoaXMuX2luc3RhbmNlICYmIHRoaXMuX2luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlLmRpc3BsYXlOYW1lIHx8IChjb25zdHJ1Y3RvciAmJiBjb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSkgfHxcbiAgICAgIHR5cGUubmFtZSB8fCAoY29uc3RydWN0b3IgJiYgY29uc3RydWN0b3IubmFtZSkgfHxcbiAgICAgIG51bGxcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBjb21wb25lbnQgLSBpLmUuIHdoYXRcbiAgICogaXMgZXhwb3NlZCBieSByZWZzIGFuZCByZXR1cm5lZCBieSBSZWFjdC5yZW5kZXIuIENhbiBiZSBudWxsIGZvciBzdGF0ZWxlc3NcbiAgICogY29tcG9uZW50cy5cbiAgICpcbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IHRoZSBwdWJsaWMgY29tcG9uZW50IGluc3RhbmNlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFB1YmxpY0luc3RhbmNlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH0sXG5cbiAgLy8gU3R1YlxuICBfaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudDogbnVsbFxuXG59O1xuXG5SZWFjdFBlcmYubWVhc3VyZU1ldGhvZHMoXG4gIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50TWl4aW4sXG4gICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcsXG4gIHtcbiAgICBtb3VudENvbXBvbmVudDogJ21vdW50Q29tcG9uZW50JyxcbiAgICB1cGRhdGVDb21wb25lbnQ6ICd1cGRhdGVDb21wb25lbnQnLFxuICAgIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQ6ICdfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50J1xuICB9XG4pO1xuXG52YXIgUmVhY3RDb21wb3NpdGVDb21wb25lbnQgPSB7XG5cbiAgTWl4aW46IFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50TWl4aW5cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5SY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVOdmJYQnZibVZ1ZEVWdWRtbHliMjV0Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkRiMjF3YjI1bGJuUkZiblpwY205dWJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFTnZiblJsZUhRZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiblJsZUhSY0lpazdYRzUyWVhJZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTjFjbkpsYm5SUGQyNWxjbHdpS1R0Y2JuWmhjaUJTWldGamRFVnNaVzFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnNaVzFsYm5SY0lpazdYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlYQ0lwTzF4dWRtRnlJRkpsWVdOMFNXNXpkR0Z1WTJWTllYQWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRWx1YzNSaGJtTmxUV0Z3WENJcE8xeHVkbUZ5SUZKbFlXTjBUR2xtWlVONVkyeGxJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JNYVdabFEzbGpiR1ZjSWlrN1hHNTJZWElnVW1WaFkzUk9ZWFJwZG1WRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRkJsY21ZZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGQmxjbVpjSWlrN1hHNTJZWElnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJuTmNJaWs3WEc1MllYSWdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1VG1GdFpYTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF3aUtUdGNiblpoY2lCU1pXRmpkRkpsWTI5dVkybHNaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZKbFkyOXVZMmxzWlhKY0lpazdYRzUyWVhJZ1VtVmhZM1JWY0dSaGRHVnpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JWY0dSaGRHVnpYQ0lwTzF4dVhHNTJZWElnWVhOemFXZHVJRDBnY21WeGRXbHlaU2hjSWk0dlQySnFaV04wTG1GemMybG5ibHdpS1R0Y2JuWmhjaUJsYlhCMGVVOWlhbVZqZENBOUlISmxjWFZwY21Vb1hDSXVMMlZ0Y0hSNVQySnFaV04wWENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUJ6YUc5MWJHUlZjR1JoZEdWU1pXRmpkRU52YlhCdmJtVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwzTm9iM1ZzWkZWd1pHRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MFhDSXBPMXh1ZG1GeUlIZGhjbTVwYm1jZ1BTQnlaWEYxYVhKbEtGd2lMaTkzWVhKdWFXNW5YQ0lwTzF4dVhHNW1kVzVqZEdsdmJpQm5aWFJFWldOc1lYSmhkR2x2YmtWeWNtOXlRV1JrWlc1a2RXMG9ZMjl0Y0c5dVpXNTBLU0I3WEc0Z0lIWmhjaUJ2ZDI1bGNpQTlJR052YlhCdmJtVnVkQzVmWTNWeWNtVnVkRVZzWlcxbGJuUXVYMjkzYm1WeUlIeDhJRzUxYkd3N1hHNGdJR2xtSUNodmQyNWxjaWtnZTF4dUlDQWdJSFpoY2lCdVlXMWxJRDBnYjNkdVpYSXVaMlYwVG1GdFpTZ3BPMXh1SUNBZ0lHbG1JQ2h1WVcxbEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z0p5QkRhR1ZqYXlCMGFHVWdjbVZ1WkdWeUlHMWxkR2h2WkNCdlppQmdKeUFySUc1aGJXVWdLeUFuWUM0bk8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnSnljN1hHNTlYRzVjYmk4cUtseHVJQ29nTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0SUZSb1pTQk1hV1psTFVONVkyeGxJRzltSUdFZ1EyOXRjRzl6YVhSbElFTnZiWEJ2Ym1WdWRDQXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNiaUFxWEc0Z0tpQXRJR052Ym5OMGNuVmpkRzl5T2lCSmJtbDBhV0ZzYVhwaGRHbHZiaUJ2WmlCemRHRjBaUzRnVkdobElHbHVjM1JoYm1ObElHbHpJRzV2ZHlCeVpYUmhhVzVsWkM1Y2JpQXFJQ0FnTFNCamIyMXdiMjVsYm5SWGFXeHNUVzkxYm5SY2JpQXFJQ0FnTFNCeVpXNWtaWEpjYmlBcUlDQWdMU0JiWTJocGJHUnlaVzRuY3lCamIyNXpkSEoxWTNSdmNuTmRYRzRnS2lBZ0lDQWdMU0JiWTJocGJHUnlaVzRuY3lCamIyMXdiMjVsYm5SWGFXeHNUVzkxYm5RZ1lXNWtJSEpsYm1SbGNsMWNiaUFxSUNBZ0lDQXRJRnRqYUdsc1pISmxiaWR6SUdOdmJYQnZibVZ1ZEVScFpFMXZkVzUwWFZ4dUlDb2dJQ0FnSUMwZ1kyOXRjRzl1Wlc1MFJHbGtUVzkxYm5SY2JpQXFYRzRnS2lBZ0lDQWdJQ0JWY0dSaGRHVWdVR2hoYzJWek9seHVJQ29nSUNBZ0lDQWdMU0JqYjIxd2IyNWxiblJYYVd4c1VtVmpaV2wyWlZCeWIzQnpJQ2h2Ym14NUlHTmhiR3hsWkNCcFppQndZWEpsYm5RZ2RYQmtZWFJsWkNsY2JpQXFJQ0FnSUNBZ0lDMGdjMmh2ZFd4a1EyOXRjRzl1Wlc1MFZYQmtZWFJsWEc0Z0tpQWdJQ0FnSUNBZ0lDMGdZMjl0Y0c5dVpXNTBWMmxzYkZWd1pHRjBaVnh1SUNvZ0lDQWdJQ0FnSUNBZ0lDMGdjbVZ1WkdWeVhHNGdLaUFnSUNBZ0lDQWdJQ0FnTFNCYlkyaHBiR1J5Wlc0bmN5QmpiMjV6ZEhKMVkzUnZjbk1nYjNJZ2NtVmpaV2wyWlNCd2NtOXdjeUJ3YUdGelpYTmRYRzRnS2lBZ0lDQWdJQ0FnSUMwZ1kyOXRjRzl1Wlc1MFJHbGtWWEJrWVhSbFhHNGdLbHh1SUNvZ0lDQWdJQzBnWTI5dGNHOXVaVzUwVjJsc2JGVnViVzkxYm5SY2JpQXFJQ0FnSUNBdElGdGphR2xzWkhKbGJpZHpJR052YlhCdmJtVnVkRmRwYkd4VmJtMXZkVzUwWFZ4dUlDb2dJQ0F0SUZ0amFHbHNaSEpsYmlCa1pYTjBjbTk1WldSZFhHNGdLaUF0SUNoa1pYTjBjbTk1WldRcE9pQlVhR1VnYVc1emRHRnVZMlVnYVhNZ2JtOTNJR0pzWVc1ckxDQnlaV3hsWVhObFpDQmllU0JTWldGamRDQmhibVFnY21WaFpIa2dabTl5SUVkRExseHVJQ3BjYmlBcUlDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0WEc0Z0tpOWNibHh1THlvcVhHNGdLaUJCYmlCcGJtTnlaVzFsYm5ScGJtY2dTVVFnWVhOemFXZHVaV1FnZEc4Z1pXRmphQ0JqYjIxd2IyNWxiblFnZDJobGJpQnBkQ0JwY3lCdGIzVnVkR1ZrTGlCVWFHbHpJR2x6WEc0Z0tpQjFjMlZrSUhSdklHVnVabTl5WTJVZ2RHaGxJRzl5WkdWeUlHbHVJSGRvYVdOb0lHQlNaV0ZqZEZWd1pHRjBaWE5nSUhWd1pHRjBaWE1nWkdseWRIa2dZMjl0Y0c5dVpXNTBjeTVjYmlBcVhHNGdLaUJBY0hKcGRtRjBaVnh1SUNvdlhHNTJZWElnYm1WNGRFMXZkVzUwU1VRZ1BTQXhPMXh1WEc0dktpcGNiaUFxSUVCc1pXNWtjeUI3VW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUXVjSEp2ZEc5MGVYQmxmVnh1SUNvdlhHNTJZWElnVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUk5hWGhwYmlBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1FtRnpaU0JqYjI1emRISjFZM1J2Y2lCbWIzSWdZV3hzSUdOdmJYQnZjMmwwWlNCamIyMXdiMjVsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRmJHVnRaVzUwZlNCbGJHVnRaVzUwWEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHTnZibk4wY25WamREb2dablZ1WTNScGIyNG9aV3hsYldWdWRDa2dlMXh1SUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBJRDBnWld4bGJXVnVkRHRjYmlBZ0lDQjBhR2x6TGw5eWIyOTBUbTlrWlVsRUlEMGdiblZzYkR0Y2JpQWdJQ0IwYUdsekxsOXBibk4wWVc1alpTQTlJRzUxYkd3N1hHNWNiaUFnSUNBdkx5QlRaV1VnVW1WaFkzUlZjR1JoZEdWUmRXVjFaVnh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWRGYkdWdFpXNTBJRDBnYm5Wc2JEdGNiaUFnSUNCMGFHbHpMbDl3Wlc1a2FXNW5VM1JoZEdWUmRXVjFaU0E5SUc1MWJHdzdYRzRnSUNBZ2RHaHBjeTVmY0dWdVpHbHVaMUpsY0d4aFkyVlRkR0YwWlNBOUlHWmhiSE5sTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kR2IzSmpaVlZ3WkdGMFpTQTlJR1poYkhObE8xeHVYRzRnSUNBZ2RHaHBjeTVmY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFNCdWRXeHNPMXh1WEc0Z0lDQWdkR2hwY3k1ZlkyOXVkR1Y0ZENBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZmJXOTFiblJQY21SbGNpQTlJREE3WEc0Z0lDQWdkR2hwY3k1ZmFYTlViM0JNWlhabGJDQTlJR1poYkhObE8xeHVYRzRnSUNBZ0x5OGdVMlZsSUZKbFlXTjBWWEJrWVhSbGN5QmhibVFnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVjYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuUTJGc2JHSmhZMnR6SUQwZ2JuVnNiRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1NXNXBkR2xoYkdsNlpYTWdkR2hsSUdOdmJYQnZibVZ1ZEN3Z2NtVnVaR1Z5Y3lCdFlYSnJkWEFzSUdGdVpDQnlaV2RwYzNSbGNuTWdaWFpsYm5RZ2JHbHpkR1Z1WlhKekxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjbTl2ZEVsRUlFUlBUU0JKUkNCdlppQjBhR1VnY205dmRDQnViMlJsTGx4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNThVbVZoWTNSVFpYSjJaWEpTWlc1a1pYSnBibWRVY21GdWMyRmpkR2x2Ym4wZ2RISmhibk5oWTNScGIyNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1AzTjBjbWx1WjMwZ1VtVnVaR1Z5WldRZ2JXRnlhM1Z3SUhSdklHSmxJR2x1YzJWeWRHVmtJR2x1ZEc4Z2RHaGxJRVJQVFM1Y2JpQWdJQ29nUUdacGJtRnNYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdiVzkxYm5SRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtISnZiM1JKUkN3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjBhR2x6TGw5amIyNTBaWGgwSUQwZ1kyOXVkR1Y0ZER0Y2JpQWdJQ0IwYUdsekxsOXRiM1Z1ZEU5eVpHVnlJRDBnYm1WNGRFMXZkVzUwU1VRckt6dGNiaUFnSUNCMGFHbHpMbDl5YjI5MFRtOWtaVWxFSUQwZ2NtOXZkRWxFTzF4dVhHNGdJQ0FnZG1GeUlIQjFZbXhwWTFCeWIzQnpJRDBnZEdocGN5NWZjSEp2WTJWemMxQnliM0J6S0hSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuQnliM0J6S1R0Y2JpQWdJQ0IyWVhJZ2NIVmliR2xqUTI5dWRHVjRkQ0E5SUhSb2FYTXVYM0J5YjJObGMzTkRiMjUwWlhoMEtIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMbDlqYjI1MFpYaDBLVHRjYmx4dUlDQWdJSFpoY2lCRGIyMXdiMjVsYm5RZ1BTQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkQzVuWlhSRGIyMXdiMjVsYm5SRGJHRnpjMFp2Y2tWc1pXMWxiblFvWEc0Z0lDQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZEZ4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0F2THlCSmJtbDBhV0ZzYVhwbElIUm9aU0J3ZFdKc2FXTWdZMnhoYzNOY2JpQWdJQ0IyWVhJZ2FXNXpkQ0E5SUc1bGR5QkRiMjF3YjI1bGJuUW9jSFZpYkdsalVISnZjSE1zSUhCMVlteHBZME52Ym5SbGVIUXBPMXh1WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdMeThnVkdocGN5QjNhV3hzSUhSb2NtOTNJR3hoZEdWeUlHbHVJRjl5Wlc1a1pYSldZV3hwWkdGMFpXUkRiMjF3YjI1bGJuUXNJR0oxZENCaFpHUWdZVzRnWldGeWJIbGNiaUFnSUNBZ0lDOHZJSGRoY201cGJtY2dibTkzSUhSdklHaGxiSEFnWkdWaWRXZG5hVzVuWEc0Z0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdhVzV6ZEM1eVpXNWtaWElnSVQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ0FnSnlWektDNHVMaWs2SUU1dklHQnlaVzVrWlhKZ0lHMWxkR2h2WkNCbWIzVnVaQ0J2YmlCMGFHVWdjbVYwZFhKdVpXUWdZMjl0Y0c5dVpXNTBJQ2NnSzF4dUlDQWdJQ0FnSUNBbmFXNXpkR0Z1WTJVNklIbHZkU0J0WVhrZ2FHRjJaU0JtYjNKbmIzUjBaVzRnZEc4Z1pHVm1hVzVsSUdCeVpXNWtaWEpnSUdsdUlIbHZkWElnSnlBclhHNGdJQ0FnSUNBZ0lDZGpiMjF3YjI1bGJuUWdiM0lnZVc5MUlHMWhlU0JvWVhabElHRmpZMmxrWlc1MFlXeHNlU0IwY21sbFpDQjBieUJ5Wlc1a1pYSWdZVzRnWld4bGJXVnVkQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0ozZG9iM05sSUhSNWNHVWdhWE1nWVNCbWRXNWpkR2x2YmlCMGFHRjBJR2x6Ymx4Y0ozUWdZU0JTWldGamRDQmpiMjF3YjI1bGJuUXVKeXhjYmlBZ0lDQWdJQ0FnUTI5dGNHOXVaVzUwTG1ScGMzQnNZWGxPWVcxbElIeDhJRU52YlhCdmJtVnVkQzV1WVcxbElIeDhJQ2REYjIxd2IyNWxiblFuWEc0Z0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnVkdobGMyVWdjMmh2ZFd4a0lHSmxJSE5sZENCMWNDQnBiaUIwYUdVZ1kyOXVjM1J5ZFdOMGIzSXNJR0oxZENCaGN5QmhJR052Ym5abGJtbGxibU5sSUdadmNseHVJQ0FnSUM4dklITnBiWEJzWlhJZ1kyeGhjM01nWVdKemRISmhZM1JwYjI1ekxDQjNaU0J6WlhRZ2RHaGxiU0IxY0NCaFpuUmxjaUIwYUdVZ1ptRmpkQzVjYmlBZ0lDQnBibk4wTG5CeWIzQnpJRDBnY0hWaWJHbGpVSEp2Y0hNN1hHNGdJQ0FnYVc1emRDNWpiMjUwWlhoMElEMGdjSFZpYkdsalEyOXVkR1Y0ZER0Y2JpQWdJQ0JwYm5OMExuSmxabk1nUFNCbGJYQjBlVTlpYW1WamREdGNibHh1SUNBZ0lIUm9hWE11WDJsdWMzUmhibU5sSUQwZ2FXNXpkRHRjYmx4dUlDQWdJQzh2SUZOMGIzSmxJR0VnY21WbVpYSmxibU5sSUdaeWIyMGdkR2hsSUdsdWMzUmhibU5sSUdKaFkyc2dkRzhnZEdobElHbHVkR1Z5Ym1Gc0lISmxjSEpsYzJWdWRHRjBhVzl1WEc0Z0lDQWdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNXpaWFFvYVc1emRDd2dkR2hwY3lrN1hHNWNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbDkzWVhKdVNXWkRiMjUwWlhoMGMwUnBabVpsY2loMGFHbHpMbDlqZFhKeVpXNTBSV3hsYldWdWRDNWZZMjl1ZEdWNGRDd2dZMjl1ZEdWNGRDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0x5OGdVMmx1WTJVZ2NHeGhhVzRnU2xNZ1kyeGhjM05sY3lCaGNtVWdaR1ZtYVc1bFpDQjNhWFJvYjNWMElHRnVlU0J6Y0dWamFXRnNJR2x1YVhScFlXeHBlbUYwYVc5dVhHNGdJQ0FnSUNBdkx5QnNiMmRwWXl3Z2QyVWdZMkZ1SUc1dmRDQmpZWFJqYUNCamIyMXRiMjRnWlhKeWIzSnpJR1ZoY214NUxpQlVhR1Z5WldadmNtVXNJSGRsSUdoaGRtVWdkRzljYmlBZ0lDQWdJQzh2SUdOaGRHTm9JSFJvWlcwZ2FHVnlaU3dnWVhRZ2FXNXBkR2xoYkdsNllYUnBiMjRnZEdsdFpTd2dhVzV6ZEdWaFpDNWNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBaGFXNXpkQzVuWlhSSmJtbDBhV0ZzVTNSaGRHVWdmSHhjYmlBZ0lDQWdJQ0FnYVc1emRDNW5aWFJKYm1sMGFXRnNVM1JoZEdVdWFYTlNaV0ZqZEVOc1lYTnpRWEJ3Y205MlpXUXNYRzRnSUNBZ0lDQWdJQ2RuWlhSSmJtbDBhV0ZzVTNSaGRHVWdkMkZ6SUdSbFptbHVaV1FnYjI0Z0pYTXNJR0VnY0d4aGFXNGdTbUYyWVZOamNtbHdkQ0JqYkdGemN5NGdKeUFyWEc0Z0lDQWdJQ0FnSUNkVWFHbHpJR2x6SUc5dWJIa2djM1Z3Y0c5eWRHVmtJR1p2Y2lCamJHRnpjMlZ6SUdOeVpXRjBaV1FnZFhOcGJtY2dVbVZoWTNRdVkzSmxZWFJsUTJ4aGMzTXVJQ2NnSzF4dUlDQWdJQ0FnSUNBblJHbGtJSGx2ZFNCdFpXRnVJSFJ2SUdSbFptbHVaU0JoSUhOMFlYUmxJSEJ5YjNCbGNuUjVJR2x1YzNSbFlXUS9KeXhjYmlBZ0lDQWdJQ0FnZEdocGN5NW5aWFJPWVcxbEtDa2dmSHdnSjJFZ1kyOXRjRzl1Wlc1MEoxeHVJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUNGcGJuTjBMbWRsZEVSbFptRjFiSFJRY205d2N5QjhmRnh1SUNBZ0lDQWdJQ0JwYm5OMExtZGxkRVJsWm1GMWJIUlFjbTl3Y3k1cGMxSmxZV04wUTJ4aGMzTkJjSEJ5YjNabFpDeGNiaUFnSUNBZ0lDQWdKMmRsZEVSbFptRjFiSFJRY205d2N5QjNZWE1nWkdWbWFXNWxaQ0J2YmlBbGN5d2dZU0J3YkdGcGJpQktZWFpoVTJOeWFYQjBJR05zWVhOekxpQW5JQ3RjYmlBZ0lDQWdJQ0FnSjFSb2FYTWdhWE1nYjI1c2VTQnpkWEJ3YjNKMFpXUWdabTl5SUdOc1lYTnpaWE1nWTNKbFlYUmxaQ0IxYzJsdVp5QlNaV0ZqZEM1amNtVmhkR1ZEYkdGemN5NGdKeUFyWEc0Z0lDQWdJQ0FnSUNkVmMyVWdZU0J6ZEdGMGFXTWdjSEp2Y0dWeWRIa2dkRzhnWkdWbWFXNWxJR1JsWm1GMWJIUlFjbTl3Y3lCcGJuTjBaV0ZrTGljc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WjJWMFRtRnRaU2dwSUh4OElDZGhJR052YlhCdmJtVnVkQ2RjYmlBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWhhVzV6ZEM1d2NtOXdWSGx3WlhNc1hHNGdJQ0FnSUNBZ0lDZHdjbTl3Vkhsd1pYTWdkMkZ6SUdSbFptbHVaV1FnWVhNZ1lXNGdhVzV6ZEdGdVkyVWdjSEp2Y0dWeWRIa2diMjRnSlhNdUlGVnpaU0JoSUhOMFlYUnBZeUFuSUN0Y2JpQWdJQ0FnSUNBZ0ozQnliM0JsY25SNUlIUnZJR1JsWm1sdVpTQndjbTl3Vkhsd1pYTWdhVzV6ZEdWaFpDNG5MRnh1SUNBZ0lDQWdJQ0IwYUdsekxtZGxkRTVoYldVb0tTQjhmQ0FuWVNCamIyMXdiMjVsYm5RblhHNGdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSVdsdWMzUXVZMjl1ZEdWNGRGUjVjR1Z6TEZ4dUlDQWdJQ0FnSUNBblkyOXVkR1Y0ZEZSNWNHVnpJSGRoY3lCa1pXWnBibVZrSUdGeklHRnVJR2x1YzNSaGJtTmxJSEJ5YjNCbGNuUjVJRzl1SUNWekxpQlZjMlVnWVNBbklDdGNiaUFnSUNBZ0lDQWdKM04wWVhScFl5QndjbTl3WlhKMGVTQjBieUJrWldacGJtVWdZMjl1ZEdWNGRGUjVjR1Z6SUdsdWMzUmxZV1F1Snl4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVuWlhST1lXMWxLQ2tnZkh3Z0oyRWdZMjl0Y0c5dVpXNTBKMXh1SUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lIUjVjR1Z2WmlCcGJuTjBMbU52YlhCdmJtVnVkRk5vYjNWc1pGVndaR0YwWlNBaFBUMGdKMloxYm1OMGFXOXVKeXhjYmlBZ0lDQWdJQ0FnSnlWeklHaGhjeUJoSUcxbGRHaHZaQ0JqWVd4c1pXUWdKeUFyWEc0Z0lDQWdJQ0FnSUNkamIyMXdiMjVsYm5SVGFHOTFiR1JWY0dSaGRHVW9LUzRnUkdsa0lIbHZkU0J0WldGdUlITm9iM1ZzWkVOdmJYQnZibVZ1ZEZWd1pHRjBaU2dwUHlBbklDdGNiaUFnSUNBZ0lDQWdKMVJvWlNCdVlXMWxJR2x6SUhCb2NtRnpaV1FnWVhNZ1lTQnhkV1Z6ZEdsdmJpQmlaV05oZFhObElIUm9aU0JtZFc1amRHbHZiaUJwY3lBbklDdGNiaUFnSUNBZ0lDQWdKMlY0Y0dWamRHVmtJSFJ2SUhKbGRIVnliaUJoSUhaaGJIVmxMaWNzWEc0Z0lDQWdJQ0FnSUNoMGFHbHpMbWRsZEU1aGJXVW9LU0I4ZkNBblFTQmpiMjF3YjI1bGJuUW5LVnh1SUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJwYm1sMGFXRnNVM1JoZEdVZ1BTQnBibk4wTG5OMFlYUmxPMXh1SUNBZ0lHbG1JQ2hwYm1sMGFXRnNVM1JoZEdVZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnYVc1emRDNXpkR0YwWlNBOUlHbHVhWFJwWVd4VGRHRjBaU0E5SUc1MWJHdzdYRzRnSUNBZ2ZWeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0IwZVhCbGIyWWdhVzVwZEdsaGJGTjBZWFJsSUQwOVBTQW5iMkpxWldOMEp5QW1KaUFoUVhKeVlYa3VhWE5CY25KaGVTaHBibWwwYVdGc1UzUmhkR1VwTEZ4dUlDQWdJQ0FnSnlWekxuTjBZWFJsT2lCdGRYTjBJR0psSUhObGRDQjBieUJoYmlCdlltcGxZM1FnYjNJZ2JuVnNiQ2NzWEc0Z0lDQWdJQ0IwYUdsekxtZGxkRTVoYldVb0tTQjhmQ0FuVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUW5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2gwZVhCbGIyWWdhVzVwZEdsaGJGTjBZWFJsSUQwOVBTQW5iMkpxWldOMEp5QW1KaUFoUVhKeVlYa3VhWE5CY25KaGVTaHBibWwwYVdGc1UzUmhkR1VwS1NrN1hHNWNiaUFnSUNCMGFHbHpMbDl3Wlc1a2FXNW5VM1JoZEdWUmRXVjFaU0E5SUc1MWJHdzdYRzRnSUNBZ2RHaHBjeTVmY0dWdVpHbHVaMUpsY0d4aFkyVlRkR0YwWlNBOUlHWmhiSE5sTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kR2IzSmpaVlZ3WkdGMFpTQTlJR1poYkhObE8xeHVYRzRnSUNBZ2RtRnlJR05vYVd4a1EyOXVkR1Y0ZER0Y2JpQWdJQ0IyWVhJZ2NtVnVaR1Z5WldSRmJHVnRaVzUwTzF4dVhHNGdJQ0FnZG1GeUlIQnlaWFpwYjNWemJIbE5iM1Z1ZEdsdVp5QTlJRkpsWVdOMFRHbG1aVU41WTJ4bExtTjFjbkpsYm5Sc2VVMXZkVzUwYVc1blNXNXpkR0Z1WTJVN1hHNGdJQ0FnVW1WaFkzUk1hV1psUTNsamJHVXVZM1Z5Y21WdWRHeDVUVzkxYm5ScGJtZEpibk4wWVc1alpTQTlJSFJvYVhNN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2hwYm5OMExtTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JwYm5OMExtTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWRDZ3BPMXh1SUNBZ0lDQWdJQ0F2THlCWGFHVnVJRzF2ZFc1MGFXNW5MQ0JqWVd4c2N5QjBieUJnYzJWMFUzUmhkR1ZnSUdKNUlHQmpiMjF3YjI1bGJuUlhhV3hzVFc5MWJuUmdJSGRwYkd3Z2MyVjBYRzRnSUNBZ0lDQWdJQzh2SUdCMGFHbHpMbDl3Wlc1a2FXNW5VM1JoZEdWUmRXVjFaV0FnZDJsMGFHOTFkQ0IwY21sbloyVnlhVzVuSUdFZ2NtVXRjbVZ1WkdWeUxseHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NWZjR1Z1WkdsdVoxTjBZWFJsVVhWbGRXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCcGJuTjBMbk4wWVhSbElEMGdkR2hwY3k1ZmNISnZZMlZ6YzFCbGJtUnBibWRUZEdGMFpTaHBibk4wTG5CeWIzQnpMQ0JwYm5OMExtTnZiblJsZUhRcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR05vYVd4a1EyOXVkR1Y0ZENBOUlIUm9hWE11WDJkbGRGWmhiR2xrWVhSbFpFTm9hV3hrUTI5dWRHVjRkQ2hqYjI1MFpYaDBLVHRjYmlBZ0lDQWdJSEpsYm1SbGNtVmtSV3hsYldWdWRDQTlJSFJvYVhNdVgzSmxibVJsY2xaaGJHbGtZWFJsWkVOdmJYQnZibVZ1ZENoamFHbHNaRU52Ym5SbGVIUXBPMXh1SUNBZ0lIMGdabWx1WVd4c2VTQjdYRzRnSUNBZ0lDQlNaV0ZqZEV4cFptVkRlV05zWlM1amRYSnlaVzUwYkhsTmIzVnVkR2x1WjBsdWMzUmhibU5sSUQwZ2NISmxkbWx2ZFhOc2VVMXZkVzUwYVc1bk8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVYM0psYm1SbGNtVmtRMjl0Y0c5dVpXNTBJRDBnZEdocGN5NWZhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDaGNiaUFnSUNBZ0lISmxibVJsY21Wa1JXeGxiV1Z1ZEN4Y2JpQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuUjVjR1VnTHk4Z1ZHaGxJSGR5WVhCd2FXNW5JSFI1Y0dWY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnZG1GeUlHMWhjbXQxY0NBOUlGSmxZV04wVW1WamIyNWphV3hsY2k1dGIzVnVkRU52YlhCdmJtVnVkQ2hjYmlBZ0lDQWdJSFJvYVhNdVgzSmxibVJsY21Wa1EyOXRjRzl1Wlc1MExGeHVJQ0FnSUNBZ2NtOXZkRWxFTEZ4dUlDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0c1hHNGdJQ0FnSUNCMGFHbHpMbDl0WlhKblpVTm9hV3hrUTI5dWRHVjRkQ2hqYjI1MFpYaDBMQ0JqYUdsc1pFTnZiblJsZUhRcFhHNGdJQ0FnS1R0Y2JpQWdJQ0JwWmlBb2FXNXpkQzVqYjIxd2IyNWxiblJFYVdSTmIzVnVkQ2tnZTF4dUlDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0dVoyVjBVbVZoWTNSTmIzVnVkRkpsWVdSNUtDa3VaVzV4ZFdWMVpTaHBibk4wTG1OdmJYQnZibVZ1ZEVScFpFMXZkVzUwTENCcGJuTjBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2JXRnlhM1Z3TzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaV3hsWVhObGN5QmhibmtnY21WemIzVnlZMlZ6SUdGc2JHOWpZWFJsWkNCaWVTQmdiVzkxYm5SRGIyMXdiMjVsYm5SZ0xseHVJQ0FnS2x4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjFibTF2ZFc1MFEyOXRjRzl1Wlc1ME9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjJZWElnYVc1emRDQTlJSFJvYVhNdVgybHVjM1JoYm1ObE8xeHVYRzRnSUNBZ2FXWWdLR2x1YzNRdVkyOXRjRzl1Wlc1MFYybHNiRlZ1Ylc5MWJuUXBJSHRjYmlBZ0lDQWdJSFpoY2lCd2NtVjJhVzkxYzJ4NVZXNXRiM1Z1ZEdsdVp5QTlJRkpsWVdOMFRHbG1aVU41WTJ4bExtTjFjbkpsYm5Sc2VWVnViVzkxYm5ScGJtZEpibk4wWVc1alpUdGNiaUFnSUNBZ0lGSmxZV04wVEdsbVpVTjVZMnhsTG1OMWNuSmxiblJzZVZWdWJXOTFiblJwYm1kSmJuTjBZVzVqWlNBOUlIUm9hWE03WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnBibk4wTG1OdmJYQnZibVZ1ZEZkcGJHeFZibTF2ZFc1MEtDazdYRzRnSUNBZ0lDQjlJR1pwYm1Gc2JIa2dlMXh1SUNBZ0lDQWdJQ0JTWldGamRFeHBabVZEZVdOc1pTNWpkWEp5Wlc1MGJIbFZibTF2ZFc1MGFXNW5TVzV6ZEdGdVkyVWdQU0J3Y21WMmFXOTFjMng1Vlc1dGIzVnVkR2x1Wnp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JTWldGamRGSmxZMjl1WTJsc1pYSXVkVzV0YjNWdWRFTnZiWEJ2Ym1WdWRDaDBhR2x6TGw5eVpXNWtaWEpsWkVOdmJYQnZibVZ1ZENrN1hHNGdJQ0FnZEdocGN5NWZjbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQU0J1ZFd4c08xeHVYRzRnSUNBZ0x5OGdVbVZ6WlhRZ2NHVnVaR2x1WnlCbWFXVnNaSE5jYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuVTNSaGRHVlJkV1YxWlNBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZmNHVnVaR2x1WjFKbGNHeGhZMlZUZEdGMFpTQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU0E5SUdaaGJITmxPMXh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWREWVd4c1ltRmphM01nUFNCdWRXeHNPMXh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWRGYkdWdFpXNTBJRDBnYm5Wc2JEdGNibHh1SUNBZ0lDOHZJRlJvWlhObElHWnBaV3hrY3lCa2J5QnViM1FnY21WaGJHeDVJRzVsWldRZ2RHOGdZbVVnY21WelpYUWdjMmx1WTJVZ2RHaHBjeUJ2WW1wbFkzUWdhWE1nYm05Y2JpQWdJQ0F2THlCc2IyNW5aWElnWVdOalpYTnphV0pzWlM1Y2JpQWdJQ0IwYUdsekxsOWpiMjUwWlhoMElEMGdiblZzYkR0Y2JpQWdJQ0IwYUdsekxsOXliMjkwVG05a1pVbEVJRDBnYm5Wc2JEdGNibHh1SUNBZ0lDOHZJRVJsYkdWMFpTQjBhR1VnY21WbVpYSmxibU5sSUdaeWIyMGdkR2hsSUdsdWMzUmhibU5sSUhSdklIUm9hWE1nYVc1MFpYSnVZV3dnY21Wd2NtVnpaVzUwWVhScGIyNWNiaUFnSUNBdkx5QjNhR2xqYUNCaGJHeHZkeUIwYUdVZ2FXNTBaWEp1WVd4eklIUnZJR0psSUhCeWIzQmxjbXg1SUdOc1pXRnVaV1FnZFhBZ1pYWmxiaUJwWmlCMGFHVWdkWE5sY2x4dUlDQWdJQzh2SUd4bFlXdHpJR0VnY21WbVpYSmxibU5sSUhSdklIUm9aU0J3ZFdKc2FXTWdhVzV6ZEdGdVkyVXVYRzRnSUNBZ1VtVmhZM1JKYm5OMFlXNWpaVTFoY0M1eVpXMXZkbVVvYVc1emRDazdYRzVjYmlBZ0lDQXZMeUJUYjIxbElHVjRhWE4wYVc1bklHTnZiWEJ2Ym1WdWRITWdjbVZzZVNCdmJpQnBibk4wTG5CeWIzQnpJR1YyWlc0Z1lXWjBaWElnZEdobGVTZDJaU0JpWldWdVhHNGdJQ0FnTHk4Z1pHVnpkSEp2ZVdWa0lDaHBiaUJsZG1WdWRDQm9ZVzVrYkdWeWN5a3VYRzRnSUNBZ0x5OGdWRTlFVHpvZ2FXNXpkQzV3Y205d2N5QTlJRzUxYkd3N1hHNGdJQ0FnTHk4Z1ZFOUVUem9nYVc1emRDNXpkR0YwWlNBOUlHNTFiR3c3WEc0Z0lDQWdMeThnVkU5RVR6b2dhVzV6ZEM1amIyNTBaWGgwSUQwZ2JuVnNiRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1UyTm9aV1IxYkdVZ1lTQndZWEowYVdGc0lIVndaR0YwWlNCMGJ5QjBhR1VnY0hKdmNITXVJRTl1YkhrZ2RYTmxaQ0JtYjNJZ2FXNTBaWEp1WVd3Z2RHVnpkR2x1Wnk1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlIQmhjblJwWVd4UWNtOXdjeUJUZFdKelpYUWdiMllnZEdobElHNWxlSFFnY0hKdmNITXVYRzRnSUNBcUlFQndZWEpoYlNCN1AyWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5QkRZV3hzWldRZ1lXWjBaWElnY0hKdmNITWdZWEpsSUhWd1pHRjBaV1F1WEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lGOXpaWFJRY205d2MwbHVkR1Z5Ym1Gc09pQm1kVzVqZEdsdmJpaHdZWEowYVdGc1VISnZjSE1zSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnTHk4Z1ZHaHBjeUJwY3lCaElHUmxiM0IwYVcxcGVtVmtJSEJoZEdndUlGZGxJRzl3ZEdsdGFYcGxJR1p2Y2lCaGJIZGhlWE1nYUdGMmFXNW5JR0Z1SUdWc1pXMWxiblF1WEc0Z0lDQWdMeThnVkdocGN5QmpjbVZoZEdWeklHRnVJR1Y0ZEhKaElHbHVkR1Z5Ym1Gc0lHVnNaVzFsYm5RdVhHNGdJQ0FnZG1GeUlHVnNaVzFsYm5RZ1BTQjBhR2x6TGw5d1pXNWthVzVuUld4bGJXVnVkQ0I4ZkNCMGFHbHpMbDlqZFhKeVpXNTBSV3hsYldWdWREdGNiaUFnSUNCMGFHbHpMbDl3Wlc1a2FXNW5SV3hsYldWdWRDQTlJRkpsWVdOMFJXeGxiV1Z1ZEM1amJHOXVaVUZ1WkZKbGNHeGhZMlZRY205d2N5aGNiaUFnSUNBZ0lHVnNaVzFsYm5Rc1hHNGdJQ0FnSUNCaGMzTnBaMjRvZTMwc0lHVnNaVzFsYm5RdWNISnZjSE1zSUhCaGNuUnBZV3hRY205d2N5bGNiaUFnSUNBcE8xeHVJQ0FnSUZKbFlXTjBWWEJrWVhSbGN5NWxibkYxWlhWbFZYQmtZWFJsS0hSb2FYTXNJR05oYkd4aVlXTnJLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1JtbHNkR1Z5Y3lCMGFHVWdZMjl1ZEdWNGRDQnZZbXBsWTNRZ2RHOGdiMjVzZVNCamIyNTBZV2x1SUd0bGVYTWdjM0JsWTJsbWFXVmtJR2x1WEc0Z0lDQXFJR0JqYjI1MFpYaDBWSGx3WlhOZ1hHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQmpiMjUwWlhoMFhHNGdJQ0FxSUVCeVpYUjFjbTRnZXo5dlltcGxZM1I5WEc0Z0lDQXFJRUJ3Y21sMllYUmxYRzRnSUNBcUwxeHVJQ0JmYldGemEwTnZiblJsZUhRNklHWjFibU4wYVc5dUtHTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdiV0Z6YTJWa1EyOXVkR1Y0ZENBOUlHNTFiR3c3WEc0Z0lDQWdMeThnVkdocGN5QnlaV0ZzYkhrZ2MyaHZkV3hrSUdKbElHZGxkSFJwYm1jZ2RHaGxJR052YlhCdmJtVnVkQ0JqYkdGemN5Qm1iM0lnZEdobElHVnNaVzFsYm5Rc1hHNGdJQ0FnTHk4Z1luVjBJSGRsSUd0dWIzY2dkR2hoZENCM1pTZHlaU0J1YjNRZ1oyOXBibWNnZEc4Z2JtVmxaQ0JwZENCbWIzSWdZblZwYkhRdGFXNXpMbHh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdkR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1ZEhsd1pTQTlQVDBnSjNOMGNtbHVaeWNwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJsYlhCMGVVOWlhbVZqZER0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdOdmJuUmxlSFJVZVhCbGN5QTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTG5SNWNHVXVZMjl1ZEdWNGRGUjVjR1Z6TzF4dUlDQWdJR2xtSUNnaFkyOXVkR1Y0ZEZSNWNHVnpLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdaVzF3ZEhsUFltcGxZM1E3WEc0Z0lDQWdmVnh1SUNBZ0lHMWhjMnRsWkVOdmJuUmxlSFFnUFNCN2ZUdGNiaUFnSUNCbWIzSWdLSFpoY2lCamIyNTBaWGgwVG1GdFpTQnBiaUJqYjI1MFpYaDBWSGx3WlhNcElIdGNiaUFnSUNBZ0lHMWhjMnRsWkVOdmJuUmxlSFJiWTI5dWRHVjRkRTVoYldWZElEMGdZMjl1ZEdWNGRGdGpiMjUwWlhoMFRtRnRaVjA3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdFlYTnJaV1JEYjI1MFpYaDBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCR2FXeDBaWEp6SUhSb1pTQmpiMjUwWlhoMElHOWlhbVZqZENCMGJ5QnZibXg1SUdOdmJuUmhhVzRnYTJWNWN5QnpjR1ZqYVdacFpXUWdhVzVjYmlBZ0lDb2dZR052Ym5SbGVIUlVlWEJsYzJBc0lHRnVaQ0JoYzNObGNuUnpJSFJvWVhRZ2RHaGxlU0JoY21VZ2RtRnNhV1F1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCamIyNTBaWGgwWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlejl2WW1wbFkzUjlYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxTDF4dUlDQmZjSEp2WTJWemMwTnZiblJsZUhRNklHWjFibU4wYVc5dUtHTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdiV0Z6YTJWa1EyOXVkR1Y0ZENBOUlIUm9hWE11WDIxaGMydERiMjUwWlhoMEtHTnZiblJsZUhRcE8xeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhaaGNpQkRiMjF3YjI1bGJuUWdQU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEM1blpYUkRiMjF3YjI1bGJuUkRiR0Z6YzBadmNrVnNaVzFsYm5Rb1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdhV1lnS0VOdmJYQnZibVZ1ZEM1amIyNTBaWGgwVkhsd1pYTXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWZZMmhsWTJ0UWNtOXdWSGx3WlhNb1hHNGdJQ0FnSUNBZ0lDQWdRMjl0Y0c5dVpXNTBMbU52Ym5SbGVIUlVlWEJsY3l4Y2JpQWdJQ0FnSUNBZ0lDQnRZWE5yWldSRGIyNTBaWGgwTEZ4dUlDQWdJQ0FnSUNBZ0lGSmxZV04wVUhKdmNGUjVjR1ZNYjJOaGRHbHZibk11WTI5dWRHVjRkRnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2JXRnphMlZrUTI5dWRHVjRkRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUdOMWNuSmxiblJEYjI1MFpYaDBYRzRnSUNBcUlFQnlaWFIxY200Z2UyOWlhbVZqZEgxY2JpQWdJQ29nUUhCeWFYWmhkR1ZjYmlBZ0lDb3ZYRzRnSUY5blpYUldZV3hwWkdGMFpXUkRhR2xzWkVOdmJuUmxlSFE2SUdaMWJtTjBhVzl1S0dOMWNuSmxiblJEYjI1MFpYaDBLU0I3WEc0Z0lDQWdkbUZ5SUdsdWMzUWdQU0IwYUdsekxsOXBibk4wWVc1alpUdGNiaUFnSUNCMllYSWdZMmhwYkdSRGIyNTBaWGgwSUQwZ2FXNXpkQzVuWlhSRGFHbHNaRU52Ym5SbGVIUWdKaVlnYVc1emRDNW5aWFJEYUdsc1pFTnZiblJsZUhRb0tUdGNiaUFnSUNCcFppQW9ZMmhwYkdSRGIyNTBaWGgwS1NCN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSUNCMGVYQmxiMllnYVc1emRDNWpiMjV6ZEhKMVkzUnZjaTVqYUdsc1pFTnZiblJsZUhSVWVYQmxjeUE5UFQwZ0oyOWlhbVZqZENjc1hHNGdJQ0FnSUNBZ0lDY2xjeTVuWlhSRGFHbHNaRU52Ym5SbGVIUW9LVG9nWTJocGJHUkRiMjUwWlhoMFZIbHdaWE1nYlhWemRDQmlaU0JrWldacGJtVmtJR2x1SUc5eVpHVnlJSFJ2SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5kWE5sSUdkbGRFTm9hV3hrUTI5dWRHVjRkQ2dwTGljc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WjJWMFRtRnRaU2dwSUh4OElDZFNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZENkY2JpQWdJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9kSGx3Wlc5bUlHbHVjM1F1WTI5dWMzUnlkV04wYjNJdVkyaHBiR1JEYjI1MFpYaDBWSGx3WlhNZ1BUMDlJQ2R2WW1wbFkzUW5LU2s3WEc0Z0lDQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMk5vWldOclVISnZjRlI1Y0dWektGeHVJQ0FnSUNBZ0lDQWdJR2x1YzNRdVkyOXVjM1J5ZFdOMGIzSXVZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTXNYRzRnSUNBZ0lDQWdJQ0FnWTJocGJHUkRiMjUwWlhoMExGeHVJQ0FnSUNBZ0lDQWdJRkpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Ym5NdVkyaHBiR1JEYjI1MFpYaDBYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJ1WVcxbElHbHVJR05vYVd4a1EyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQWdJRzVoYldVZ2FXNGdhVzV6ZEM1amIyNXpkSEoxWTNSdmNpNWphR2xzWkVOdmJuUmxlSFJVZVhCbGN5eGNiaUFnSUNBZ0lDQWdJQ0FuSlhNdVoyVjBRMmhwYkdSRGIyNTBaWGgwS0NrNklHdGxlU0JjSWlWelhDSWdhWE1nYm05MElHUmxabWx1WldRZ2FXNGdZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTXVKeXhjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbWRsZEU1aGJXVW9LU0I4ZkNBblVtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblFuTEZ4dUlDQWdJQ0FnSUNBZ0lHNWhiV1ZjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHVZVzFsSUdsdUlHbHVjM1F1WTI5dWMzUnlkV04wYjNJdVkyaHBiR1JEYjI1MFpYaDBWSGx3WlhNcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCamFHbHNaRU52Ym5SbGVIUTdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0I5TEZ4dVhHNGdJRjl0WlhKblpVTm9hV3hrUTI5dWRHVjRkRG9nWm5WdVkzUnBiMjRvWTNWeWNtVnVkRU52Ym5SbGVIUXNJR05vYVd4a1EyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUdsbUlDaGphR2xzWkVOdmJuUmxlSFFwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJoYzNOcFoyNG9lMzBzSUdOMWNuSmxiblJEYjI1MFpYaDBMQ0JqYUdsc1pFTnZiblJsZUhRcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdZM1Z5Y21WdWRFTnZiblJsZUhRN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkJ5YjJObGMzTmxjeUJ3Y205d2N5QmllU0J6WlhSMGFXNW5JR1JsWm1GMWJIUWdkbUZzZFdWeklHWnZjaUIxYm5Od1pXTnBabWxsWkNCd2NtOXdjeUJoYm1SY2JpQWdJQ29nWVhOelpYSjBhVzVuSUhSb1lYUWdkR2hsSUhCeWIzQnpJR0Z5WlNCMllXeHBaQzRnUkc5bGN5QnViM1FnYlhWMFlYUmxJR2wwY3lCaGNtZDFiV1Z1ZERzZ2NtVjBkWEp1YzF4dUlDQWdLaUJoSUc1bGR5QndjbTl3Y3lCdlltcGxZM1FnZDJsMGFDQmtaV1poZFd4MGN5QnRaWEpuWldRZ2FXNHVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J1WlhkUWNtOXdjMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdHZZbXBsWTNSOVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFMMXh1SUNCZmNISnZZMlZ6YzFCeWIzQnpPaUJtZFc1amRHbHZiaWh1WlhkUWNtOXdjeWtnZTF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSFpoY2lCRGIyMXdiMjVsYm5RZ1BTQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkQzVuWlhSRGIyMXdiMjVsYm5SRGJHRnpjMFp2Y2tWc1pXMWxiblFvWEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2FXWWdLRU52YlhCdmJtVnVkQzV3Y205d1ZIbHdaWE1wSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVmWTJobFkydFFjbTl3Vkhsd1pYTW9YRzRnSUNBZ0lDQWdJQ0FnUTI5dGNHOXVaVzUwTG5CeWIzQlVlWEJsY3l4Y2JpQWdJQ0FnSUNBZ0lDQnVaWGRRY205d2N5eGNiaUFnSUNBZ0lDQWdJQ0JTWldGamRGQnliM0JVZVhCbFRHOWpZWFJwYjI1ekxuQnliM0JjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHNWxkMUJ5YjNCek8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJCYzNObGNuUWdkR2hoZENCMGFHVWdjSEp2Y0hNZ1lYSmxJSFpoYkdsa1hHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQndjbTl3Vkhsd1pYTWdUV0Z3SUc5bUlIQnliM0FnYm1GdFpTQjBieUJoSUZKbFlXTjBVSEp2Y0ZSNWNHVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhCeWIzQnpYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCc2IyTmhkR2x2YmlCbExtY3VJRndpY0hKdmNGd2lMQ0JjSW1OdmJuUmxlSFJjSWl3Z1hDSmphR2xzWkNCamIyNTBaWGgwWENKY2JpQWdJQ29nUUhCeWFYWmhkR1ZjYmlBZ0lDb3ZYRzRnSUY5amFHVmphMUJ5YjNCVWVYQmxjem9nWm5WdVkzUnBiMjRvY0hKdmNGUjVjR1Z6TENCd2NtOXdjeXdnYkc5allYUnBiMjRwSUh0Y2JpQWdJQ0F2THlCVVQwUlBPaUJUZEc5d0lIWmhiR2xrWVhScGJtY2djSEp2Y0NCMGVYQmxjeUJvWlhKbElHRnVaQ0J2Ym14NUlIVnpaU0IwYUdVZ1pXeGxiV1Z1ZEZ4dUlDQWdJQzh2SUhaaGJHbGtZWFJwYjI0dVhHNGdJQ0FnZG1GeUlHTnZiWEJ2Ym1WdWRFNWhiV1VnUFNCMGFHbHpMbWRsZEU1aGJXVW9LVHRjYmlBZ0lDQm1iM0lnS0haaGNpQndjbTl3VG1GdFpTQnBiaUJ3Y205d1ZIbHdaWE1wSUh0Y2JpQWdJQ0FnSUdsbUlDaHdjbTl3Vkhsd1pYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRTVoYldVcEtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCbGNuSnZjanRjYmlBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCVWFHbHpJR2x6SUdsdWRHVnVkR2x2Ym1Gc2JIa2dZVzRnYVc1MllYSnBZVzUwSUhSb1lYUWdaMlYwY3lCallYVm5hSFF1SUVsMEozTWdkR2hsSUhOaGJXVmNiaUFnSUNBZ0lDQWdJQ0F2THlCaVpXaGhkbWx2Y2lCaGN5QjNhWFJvYjNWMElIUm9hWE1nYzNSaGRHVnRaVzUwSUdWNFkyVndkQ0IzYVhSb0lHRWdZbVYwZEdWeUlHMWxjM05oWjJVdVhHNGdJQ0FnSUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdJQ0FnSUhSNWNHVnZaaUJ3Y205d1ZIbHdaWE5iY0hKdmNFNWhiV1ZkSUQwOVBTQW5ablZ1WTNScGIyNG5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0p5VnpPaUFsY3lCMGVYQmxJR0FsYzJBZ2FYTWdhVzUyWVd4cFpEc2dhWFFnYlhWemRDQmlaU0JoSUdaMWJtTjBhVzl1TENCMWMzVmhiR3g1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSjJaeWIyMGdVbVZoWTNRdVVISnZjRlI1Y0dWekxpY3NYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiMjVsYm5ST1lXMWxJSHg4SUNkU1pXRmpkQ0JqYkdGemN5Y3NYRzRnSUNBZ0lDQWdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF0c2IyTmhkR2x2Ymwwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J3Y205d1RtRnRaVnh1SUNBZ0lDQWdJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9kSGx3Wlc5bUlIQnliM0JVZVhCbGMxdHdjbTl3VG1GdFpWMGdQVDA5SUNkbWRXNWpkR2x2YmljcEtUdGNiaUFnSUNBZ0lDQWdJQ0JsY25KdmNpQTlJSEJ5YjNCVWVYQmxjMXR3Y205d1RtRnRaVjBvY0hKdmNITXNJSEJ5YjNCT1lXMWxMQ0JqYjIxd2IyNWxiblJPWVcxbExDQnNiMk5oZEdsdmJpazdYRzRnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1Y0S1NCN1hHNGdJQ0FnSUNBZ0lDQWdaWEp5YjNJZ1BTQmxlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCcFppQW9aWEp5YjNJZ2FXNXpkR0Z1WTJWdlppQkZjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUZkbElHMWhlU0IzWVc1MElIUnZJR1Y0ZEdWdVpDQjBhR2x6SUd4dloybGpJR1p2Y2lCemFXMXBiR0Z5SUdWeWNtOXljeUJwYmx4dUlDQWdJQ0FnSUNBZ0lDOHZJRkpsWVdOMExuSmxibVJsY2lCallXeHNjeXdnYzI4Z1NTZHRJR0ZpYzNSeVlXTjBhVzVuSUdsMElHRjNZWGtnYVc1MGIxeHVJQ0FnSUNBZ0lDQWdJQzh2SUdFZ1puVnVZM1JwYjI0Z2RHOGdiV2x1YVcxcGVtVWdjbVZtWVdOMGIzSnBibWNnYVc0Z2RHaGxJR1oxZEhWeVpWeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCaFpHUmxibVIxYlNBOUlHZGxkRVJsWTJ4aGNtRjBhVzl1UlhKeWIzSkJaR1JsYm1SMWJTaDBhR2x6S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJR2xtSUNoc2IyTmhkR2x2YmlBOVBUMGdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1Y3k1d2NtOXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJRY21WbVlXTmxJR2RwZG1WeklIVnpJSE52YldWMGFHbHVaeUIwYnlCaWJHRmphMnhwYzNRZ2FXNGdkMkZ5Ym1sdVp5QnRiMlIxYkdWY2JpQWdJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdKMFpoYVd4bFpDQkRiMjF3YjNOcGRHVWdjSEp2Y0ZSNWNHVTZJQ1Z6SlhNbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZjaTV0WlhOellXZGxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmhaR1JsYm1SMWJWeHVJQ0FnSUNBZ0lDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ2RHWVdsc1pXUWdRMjl1ZEdWNGRDQlVlWEJsY3pvZ0pYTWxjeWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR1Z5Y205eUxtMWxjM05oWjJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdGa1pHVnVaSFZ0WEc0Z0lDQWdJQ0FnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lISmxZMlZwZG1WRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtHNWxlSFJGYkdWdFpXNTBMQ0IwY21GdWMyRmpkR2x2Yml3Z2JtVjRkRU52Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnY0hKbGRrVnNaVzFsYm5RZ1BTQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQjJZWElnY0hKbGRrTnZiblJsZUhRZ1BTQjBhR2x6TGw5amIyNTBaWGgwTzF4dVhHNGdJQ0FnZEdocGN5NWZjR1Z1WkdsdVowVnNaVzFsYm5RZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnZEdocGN5NTFjR1JoZEdWRGIyMXdiMjVsYm5Rb1hHNGdJQ0FnSUNCMGNtRnVjMkZqZEdsdmJpeGNiaUFnSUNBZ0lIQnlaWFpGYkdWdFpXNTBMRnh1SUNBZ0lDQWdibVY0ZEVWc1pXMWxiblFzWEc0Z0lDQWdJQ0J3Y21WMlEyOXVkR1Y0ZEN4Y2JpQWdJQ0FnSUc1bGVIUkRiMjUwWlhoMFhHNGdJQ0FnS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTV1lnWVc1NUlHOW1JR0JmY0dWdVpHbHVaMFZzWlcxbGJuUmdMQ0JnWDNCbGJtUnBibWRUZEdGMFpWRjFaWFZsWUN3Z2IzSWdZRjl3Wlc1a2FXNW5SbTl5WTJWVmNHUmhkR1ZnWEc0Z0lDQXFJR2x6SUhObGRDd2dkWEJrWVhSbElIUm9aU0JqYjIxd2IyNWxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ym4wZ2RISmhibk5oWTNScGIyNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQndaWEptYjNKdFZYQmtZWFJsU1daT1pXTmxjM05oY25rNklHWjFibU4wYVc5dUtIUnlZVzV6WVdOMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYM0JsYm1ScGJtZEZiR1Z0Wlc1MElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lGSmxZV04wVW1WamIyNWphV3hsY2k1eVpXTmxhWFpsUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNCMGFHbHpMRnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXdaVzVrYVc1blJXeGxiV1Z1ZENCOGZDQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQ3hjYmlBZ0lDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0c1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOdmJuUmxlSFJjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVYM0JsYm1ScGJtZFRkR0YwWlZGMVpYVmxJQ0U5UFNCdWRXeHNJSHg4SUhSb2FYTXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU2tnZTF4dUlDQWdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnSUNCU1pXRmpkRVZzWlcxbGJuUldZV3hwWkdGMGIzSXVZMmhsWTJ0QmJtUlhZWEp1Um05eVRYVjBZWFJsWkZCeWIzQnpLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJSFJvYVhNdWRYQmtZWFJsUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNCMGNtRnVjMkZqZEdsdmJpeGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblFzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExGeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5amIyNTBaWGgwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbDlqYjI1MFpYaDBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5dGNHRnlaU0IwZDI4Z1kyOXVkR1Y0ZEhNc0lIZGhjbTVwYm1jZ2FXWWdkR2hsZVNCaGNtVWdaR2xtWm1WeVpXNTBYRzRnSUNBcUlGUlBSRTg2SUZKbGJXOTJaU0IwYUdseklHTm9aV05ySUhkb1pXNGdiM2R1WlhJdFkyOXVkR1Y0ZENCcGN5QnlaVzF2ZG1Wa1hHNGdJQ0FxTDF4dUlDQWdYM2RoY201SlprTnZiblJsZUhSelJHbG1abVZ5T2lCbWRXNWpkR2x2YmlodmQyNWxja0poYzJWa1EyOXVkR1Y0ZEN3Z2NHRnlaVzUwUW1GelpXUkRiMjUwWlhoMEtTQjdYRzRnSUNBZ2IzZHVaWEpDWVhObFpFTnZiblJsZUhRZ1BTQjBhR2x6TGw5dFlYTnJRMjl1ZEdWNGRDaHZkMjVsY2tKaGMyVmtRMjl1ZEdWNGRDazdYRzRnSUNBZ2NHRnlaVzUwUW1GelpXUkRiMjUwWlhoMElEMGdkR2hwY3k1ZmJXRnphME52Ym5SbGVIUW9jR0Z5Wlc1MFFtRnpaV1JEYjI1MFpYaDBLVHRjYmlBZ0lDQjJZWElnY0dGeVpXNTBTMlY1Y3lBOUlFOWlhbVZqZEM1clpYbHpLSEJoY21WdWRFSmhjMlZrUTI5dWRHVjRkQ2t1YzI5eWRDZ3BPMXh1SUNBZ0lIWmhjaUJrYVhOd2JHRjVUbUZ0WlNBOUlIUm9hWE11WjJWMFRtRnRaU2dwSUh4OElDZFNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZENjN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCd1lYSmxiblJMWlhsekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2EyVjVJRDBnY0dGeVpXNTBTMlY1YzF0cFhUdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNCdmQyNWxja0poYzJWa1EyOXVkR1Y0ZEZ0clpYbGRJRDA5UFNCd1lYSmxiblJDWVhObFpFTnZiblJsZUhSYmEyVjVYU3hjYmlBZ0lDQWdJQ0FnSjI5M2JtVnlMV0poYzJWa0lHRnVaQ0J3WVhKbGJuUXRZbUZ6WldRZ1kyOXVkR1Y0ZEhNZ1pHbG1abVZ5SUNjZ0lDdGNiaUFnSUNBZ0lDQWdKeWgyWVd4MVpYTTZJR0FsYzJBZ2RuTWdZQ1Z6WUNrZ1ptOXlJR3RsZVNBb0pYTXBJSGRvYVd4bElHMXZkVzUwYVc1bklDVnpJQ2NnSzF4dUlDQWdJQ0FnSUNBbktITmxaVG9nYUhSMGNEb3ZMMlppTG0xbEwzSmxZV04wTFdOdmJuUmxlSFF0WW5rdGNHRnlaVzUwS1Njc1hHNGdJQ0FnSUNBZ0lHOTNibVZ5UW1GelpXUkRiMjUwWlhoMFcydGxlVjBzWEc0Z0lDQWdJQ0FnSUhCaGNtVnVkRUpoYzJWa1EyOXVkR1Y0ZEZ0clpYbGRMRnh1SUNBZ0lDQWdJQ0JyWlhrc1hHNGdJQ0FnSUNBZ0lHUnBjM0JzWVhsT1lXMWxYRzRnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJRWlhKbWIzSnRJR0Z1SUhWd1pHRjBaU0IwYnlCaElHMXZkVzUwWldRZ1kyOXRjRzl1Wlc1MExpQlVhR1VnWTI5dGNHOXVaVzUwVjJsc2JGSmxZMlZwZG1WUWNtOXdjeUJoYm1SY2JpQWdJQ29nYzJodmRXeGtRMjl0Y0c5dVpXNTBWWEJrWVhSbElHMWxkR2h2WkhNZ1lYSmxJR05oYkd4bFpDd2dkR2hsYmlBb1lYTnpkVzFwYm1jZ2RHaGxJSFZ3WkdGMFpTQnBjMjRuZEZ4dUlDQWdLaUJ6YTJsd2NHVmtLU0IwYUdVZ2NtVnRZV2x1YVc1bklIVndaR0YwWlNCc2FXWmxZM2xqYkdVZ2JXVjBhRzlrY3lCaGNtVWdZMkZzYkdWa0lHRnVaQ0IwYUdVZ1JFOU5YRzRnSUNBcUlISmxjSEpsYzJWdWRHRjBhVzl1SUdseklIVndaR0YwWldRdVhHNGdJQ0FxWEc0Z0lDQXFJRUo1SUdSbFptRjFiSFFzSUhSb2FYTWdhVzF3YkdWdFpXNTBjeUJTWldGamRDZHpJSEpsYm1SbGNtbHVaeUJoYm1RZ2NtVmpiMjVqYVd4cFlYUnBiMjRnWVd4bmIzSnBkR2h0TGx4dUlDQWdLaUJUYjNCb2FYTjBhV05oZEdWa0lHTnNhV1Z1ZEhNZ2JXRjVJSGRwYzJnZ2RHOGdiM1psY25KcFpHVWdkR2hwY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dWZTQjBjbUZ1YzJGamRHbHZibHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnY0hKbGRsQmhjbVZ1ZEVWc1pXMWxiblJjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUc1bGVIUlFZWEpsYm5SRmJHVnRaVzUwWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpQkFiM1psY25KcFpHRmliR1ZjYmlBZ0lDb3ZYRzRnSUhWd1pHRjBaVU52YlhCdmJtVnVkRG9nWm5WdVkzUnBiMjRvWEc0Z0lDQWdkSEpoYm5OaFkzUnBiMjRzWEc0Z0lDQWdjSEpsZGxCaGNtVnVkRVZzWlcxbGJuUXNYRzRnSUNBZ2JtVjRkRkJoY21WdWRFVnNaVzFsYm5Rc1hHNGdJQ0FnY0hKbGRsVnViV0Z6YTJWa1EyOXVkR1Y0ZEN4Y2JpQWdJQ0J1WlhoMFZXNXRZWE5yWldSRGIyNTBaWGgwWEc0Z0lDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMElEMGdkR2hwY3k1ZmFXNXpkR0Z1WTJVN1hHNWNiaUFnSUNCMllYSWdibVY0ZEVOdmJuUmxlSFFnUFNCcGJuTjBMbU52Ym5SbGVIUTdYRzRnSUNBZ2RtRnlJRzVsZUhSUWNtOXdjeUE5SUdsdWMzUXVjSEp2Y0hNN1hHNWNiaUFnSUNBdkx5QkVhWE4wYVc1bmRXbHphQ0JpWlhSM1pXVnVJR0VnY0hKdmNITWdkWEJrWVhSbElIWmxjbk4xY3lCaElITnBiWEJzWlNCemRHRjBaU0IxY0dSaGRHVmNiaUFnSUNCcFppQW9jSEpsZGxCaGNtVnVkRVZzWlcxbGJuUWdJVDA5SUc1bGVIUlFZWEpsYm5SRmJHVnRaVzUwS1NCN1hHNGdJQ0FnSUNCdVpYaDBRMjl1ZEdWNGRDQTlJSFJvYVhNdVgzQnliMk5sYzNORGIyNTBaWGgwS0c1bGVIUlFZWEpsYm5SRmJHVnRaVzUwTGw5amIyNTBaWGgwS1R0Y2JpQWdJQ0FnSUc1bGVIUlFjbTl3Y3lBOUlIUm9hWE11WDNCeWIyTmxjM05RY205d2N5aHVaWGgwVUdGeVpXNTBSV3hsYldWdWRDNXdjbTl3Y3lrN1hHNWNiaUFnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdhV1lnS0c1bGVIUlZibTFoYzJ0bFpFTnZiblJsZUhRZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzZGhjbTVKWmtOdmJuUmxlSFJ6UkdsbVptVnlLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRkJoY21WdWRFVnNaVzFsYm5RdVgyTnZiblJsZUhRc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFZXNXRZWE5yWldSRGIyNTBaWGgwWEc0Z0lDQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0F2THlCQmJpQjFjR1JoZEdVZ2FHVnlaU0IzYVd4c0lITmphR1ZrZFd4bElHRnVJSFZ3WkdGMFpTQmlkWFFnYVcxdFpXUnBZWFJsYkhrZ2MyVjBYRzRnSUNBZ0lDQXZMeUJmY0dWdVpHbHVaMU4wWVhSbFVYVmxkV1VnZDJocFkyZ2dkMmxzYkNCbGJuTjFjbVVnZEdoaGRDQmhibmtnYzNSaGRHVWdkWEJrWVhSbGN5Qm5aWFJ6WEc0Z0lDQWdJQ0F2THlCcGJXMWxaR2xoZEdWc2VTQnlaV052Ym1OcGJHVmtJR2x1YzNSbFlXUWdiMllnZDJGcGRHbHVaeUJtYjNJZ2RHaGxJRzVsZUhRZ1ltRjBZMmd1WEc1Y2JpQWdJQ0FnSUdsbUlDaHBibk4wTG1OdmJYQnZibVZ1ZEZkcGJHeFNaV05sYVhabFVISnZjSE1wSUh0Y2JpQWdJQ0FnSUNBZ2FXNXpkQzVqYjIxd2IyNWxiblJYYVd4c1VtVmpaV2wyWlZCeWIzQnpLRzVsZUhSUWNtOXdjeXdnYm1WNGRFTnZiblJsZUhRcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhaaGNpQnVaWGgwVTNSaGRHVWdQU0IwYUdsekxsOXdjbTlqWlhOelVHVnVaR2x1WjFOMFlYUmxLRzVsZUhSUWNtOXdjeXdnYm1WNGRFTnZiblJsZUhRcE8xeHVYRzRnSUNBZ2RtRnlJSE5vYjNWc1pGVndaR0YwWlNBOVhHNGdJQ0FnSUNCMGFHbHpMbDl3Wlc1a2FXNW5SbTl5WTJWVmNHUmhkR1VnZkh4Y2JpQWdJQ0FnSUNGcGJuTjBMbk5vYjNWc1pFTnZiWEJ2Ym1WdWRGVndaR0YwWlNCOGZGeHVJQ0FnSUNBZ2FXNXpkQzV6YUc5MWJHUkRiMjF3YjI1bGJuUlZjR1JoZEdVb2JtVjRkRkJ5YjNCekxDQnVaWGgwVTNSaGRHVXNJRzVsZUhSRGIyNTBaWGgwS1R0Y2JseHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0IwZVhCbGIyWWdjMmh2ZFd4a1ZYQmtZWFJsSUNFOVBTQW5kVzVrWldacGJtVmtKeXhjYmlBZ0lDQWdJQ0FnSnlWekxuTm9iM1ZzWkVOdmJYQnZibVZ1ZEZWd1pHRjBaU2dwT2lCU1pYUjFjbTVsWkNCMWJtUmxabWx1WldRZ2FXNXpkR1ZoWkNCdlppQmhJQ2NnSzF4dUlDQWdJQ0FnSUNBblltOXZiR1ZoYmlCMllXeDFaUzRnVFdGclpTQnpkWEpsSUhSdklISmxkSFZ5YmlCMGNuVmxJRzl5SUdaaGJITmxMaWNzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVaMlYwVG1GdFpTZ3BJSHg4SUNkU1pXRmpkRU52YlhCdmMybDBaVU52YlhCdmJtVnVkQ2RjYmlBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYzJodmRXeGtWWEJrWVhSbEtTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5d1pXNWthVzVuUm05eVkyVlZjR1JoZEdVZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0FnSUM4dklGZHBiR3dnYzJWMElHQjBhR2x6TG5CeWIzQnpZQ3dnWUhSb2FYTXVjM1JoZEdWZ0lHRnVaQ0JnZEdocGN5NWpiMjUwWlhoMFlDNWNiaUFnSUNBZ0lIUm9hWE11WDNCbGNtWnZjbTFEYjIxd2IyNWxiblJWY0dSaGRHVW9YRzRnSUNBZ0lDQWdJRzVsZUhSUVlYSmxiblJGYkdWdFpXNTBMRnh1SUNBZ0lDQWdJQ0J1WlhoMFVISnZjSE1zWEc0Z0lDQWdJQ0FnSUc1bGVIUlRkR0YwWlN4Y2JpQWdJQ0FnSUNBZ2JtVjRkRU52Ym5SbGVIUXNYRzRnSUNBZ0lDQWdJSFJ5WVc1ellXTjBhVzl1TEZ4dUlDQWdJQ0FnSUNCdVpYaDBWVzV0WVhOclpXUkRiMjUwWlhoMFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0F2THlCSlppQnBkQ2R6SUdSbGRHVnliV2x1WldRZ2RHaGhkQ0JoSUdOdmJYQnZibVZ1ZENCemFHOTFiR1FnYm05MElIVndaR0YwWlN3Z2QyVWdjM1JwYkd3Z2QyRnVkRnh1SUNBZ0lDQWdMeThnZEc4Z2MyVjBJSEJ5YjNCeklHRnVaQ0J6ZEdGMFpTQmlkWFFnZDJVZ2MyaHZjblJqZFhRZ2RHaGxJSEpsYzNRZ2IyWWdkR2hsSUhWd1pHRjBaUzVjYmlBZ0lDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwSUQwZ2JtVjRkRkJoY21WdWRFVnNaVzFsYm5RN1hHNGdJQ0FnSUNCMGFHbHpMbDlqYjI1MFpYaDBJRDBnYm1WNGRGVnViV0Z6YTJWa1EyOXVkR1Y0ZER0Y2JpQWdJQ0FnSUdsdWMzUXVjSEp2Y0hNZ1BTQnVaWGgwVUhKdmNITTdYRzRnSUNBZ0lDQnBibk4wTG5OMFlYUmxJRDBnYm1WNGRGTjBZWFJsTzF4dUlDQWdJQ0FnYVc1emRDNWpiMjUwWlhoMElEMGdibVY0ZEVOdmJuUmxlSFE3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUY5d2NtOWpaWE56VUdWdVpHbHVaMU4wWVhSbE9pQm1kVzVqZEdsdmJpaHdjbTl3Y3l3Z1kyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUhaaGNpQnBibk4wSUQwZ2RHaHBjeTVmYVc1emRHRnVZMlU3WEc0Z0lDQWdkbUZ5SUhGMVpYVmxJRDBnZEdocGN5NWZjR1Z1WkdsdVoxTjBZWFJsVVhWbGRXVTdYRzRnSUNBZ2RtRnlJSEpsY0d4aFkyVWdQU0IwYUdsekxsOXdaVzVrYVc1blVtVndiR0ZqWlZOMFlYUmxPMXh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWRTWlhCc1lXTmxVM1JoZEdVZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0IwYUdsekxsOXdaVzVrYVc1blUzUmhkR1ZSZFdWMVpTQTlJRzUxYkd3N1hHNWNiaUFnSUNCcFppQW9JWEYxWlhWbEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2FXNXpkQzV6ZEdGMFpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9jbVZ3YkdGalpTQW1KaUJ4ZFdWMVpTNXNaVzVuZEdnZ1BUMDlJREVwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ4ZFdWMVpWc3dYVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjJZWElnYm1WNGRGTjBZWFJsSUQwZ1lYTnphV2R1S0h0OUxDQnlaWEJzWVdObElEOGdjWFZsZFdWYk1GMGdPaUJwYm5OMExuTjBZWFJsS1R0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ2NtVndiR0ZqWlNBL0lERWdPaUF3T3lCcElEd2djWFZsZFdVdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJSFpoY2lCd1lYSjBhV0ZzSUQwZ2NYVmxkV1ZiYVYwN1hHNGdJQ0FnSUNCaGMzTnBaMjRvWEc0Z0lDQWdJQ0FnSUc1bGVIUlRkR0YwWlN4Y2JpQWdJQ0FnSUNBZ2RIbHdaVzltSUhCaGNuUnBZV3dnUFQwOUlDZG1kVzVqZEdsdmJpY2dQMXh1SUNBZ0lDQWdJQ0FnSUhCaGNuUnBZV3d1WTJGc2JDaHBibk4wTENCdVpYaDBVM1JoZEdVc0lIQnliM0J6TENCamIyNTBaWGgwS1NBNlhHNGdJQ0FnSUNBZ0lDQWdjR0Z5ZEdsaGJGeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnYm1WNGRGTjBZWFJsTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQk5aWEpuWlhNZ2JtVjNJSEJ5YjNCeklHRnVaQ0J6ZEdGMFpTd2dibTkwYVdacFpYTWdaR1ZzWldkaGRHVWdiV1YwYUc5a2N5QnZaaUIxY0dSaGRHVWdZVzVrWEc0Z0lDQXFJSEJsY21admNtMXpJSFZ3WkdGMFpTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHNWxlSFJGYkdWdFpXNTBJRTVsZUhRZ1pXeGxiV1Z1ZEZ4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdibVY0ZEZCeWIzQnpJRTVsZUhRZ2NIVmliR2xqSUc5aWFtVmpkQ0IwYnlCelpYUWdZWE1nY0hKdmNHVnlkR2xsY3k1Y2JpQWdJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J1WlhoMFUzUmhkR1VnVG1WNGRDQnZZbXBsWTNRZ2RHOGdjMlYwSUdGeklITjBZWFJsTGx4dUlDQWdLaUJBY0dGeVlXMGdlejl2WW1wbFkzUjlJRzVsZUhSRGIyNTBaWGgwSUU1bGVIUWdjSFZpYkdsaklHOWlhbVZqZENCMGJ5QnpaWFFnWVhNZ1kyOXVkR1Y0ZEM1Y2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVmU0IwY21GdWMyRmpkR2x2Ymx4dUlDQWdLaUJBY0dGeVlXMGdlejl2WW1wbFkzUjlJSFZ1YldGemEyVmtRMjl1ZEdWNGRGeHVJQ0FnS2lCQWNISnBkbUYwWlZ4dUlDQWdLaTljYmlBZ1gzQmxjbVp2Y20xRGIyMXdiMjVsYm5SVmNHUmhkR1U2SUdaMWJtTjBhVzl1S0Z4dUlDQWdJRzVsZUhSRmJHVnRaVzUwTEZ4dUlDQWdJRzVsZUhSUWNtOXdjeXhjYmlBZ0lDQnVaWGgwVTNSaGRHVXNYRzRnSUNBZ2JtVjRkRU52Ym5SbGVIUXNYRzRnSUNBZ2RISmhibk5oWTNScGIyNHNYRzRnSUNBZ2RXNXRZWE5yWldSRGIyNTBaWGgwWEc0Z0lDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMElEMGdkR2hwY3k1ZmFXNXpkR0Z1WTJVN1hHNWNiaUFnSUNCMllYSWdjSEpsZGxCeWIzQnpJRDBnYVc1emRDNXdjbTl3Y3p0Y2JpQWdJQ0IyWVhJZ2NISmxkbE4wWVhSbElEMGdhVzV6ZEM1emRHRjBaVHRjYmlBZ0lDQjJZWElnY0hKbGRrTnZiblJsZUhRZ1BTQnBibk4wTG1OdmJuUmxlSFE3WEc1Y2JpQWdJQ0JwWmlBb2FXNXpkQzVqYjIxd2IyNWxiblJYYVd4c1ZYQmtZWFJsS1NCN1hHNGdJQ0FnSUNCcGJuTjBMbU52YlhCdmJtVnVkRmRwYkd4VmNHUmhkR1VvYm1WNGRGQnliM0J6TENCdVpYaDBVM1JoZEdVc0lHNWxlSFJEYjI1MFpYaDBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQ0E5SUc1bGVIUkZiR1Z0Wlc1ME8xeHVJQ0FnSUhSb2FYTXVYMk52Ym5SbGVIUWdQU0IxYm0xaGMydGxaRU52Ym5SbGVIUTdYRzRnSUNBZ2FXNXpkQzV3Y205d2N5QTlJRzVsZUhSUWNtOXdjenRjYmlBZ0lDQnBibk4wTG5OMFlYUmxJRDBnYm1WNGRGTjBZWFJsTzF4dUlDQWdJR2x1YzNRdVkyOXVkR1Y0ZENBOUlHNWxlSFJEYjI1MFpYaDBPMXh1WEc0Z0lDQWdkR2hwY3k1ZmRYQmtZWFJsVW1WdVpHVnlaV1JEYjIxd2IyNWxiblFvZEhKaGJuTmhZM1JwYjI0c0lIVnViV0Z6YTJWa1EyOXVkR1Y0ZENrN1hHNWNiaUFnSUNCcFppQW9hVzV6ZEM1amIyMXdiMjVsYm5SRWFXUlZjR1JoZEdVcElIdGNiaUFnSUNBZ0lIUnlZVzV6WVdOMGFXOXVMbWRsZEZKbFlXTjBUVzkxYm5SU1pXRmtlU2dwTG1WdWNYVmxkV1VvWEc0Z0lDQWdJQ0FnSUdsdWMzUXVZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxMbUpwYm1Rb2FXNXpkQ3dnY0hKbGRsQnliM0J6TENCd2NtVjJVM1JoZEdVc0lIQnlaWFpEYjI1MFpYaDBLU3hjYmlBZ0lDQWdJQ0FnYVc1emRGeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU5oYkd3Z2RHaGxJR052YlhCdmJtVnVkQ2R6SUdCeVpXNWtaWEpnSUcxbGRHaHZaQ0JoYm1RZ2RYQmtZWFJsSUhSb1pTQkVUMDBnWVdOamIzSmthVzVuYkhrdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JmZFhCa1lYUmxVbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLSFJ5WVc1ellXTjBhVzl1TENCamIyNTBaWGgwS1NCN1hHNGdJQ0FnZG1GeUlIQnlaWFpEYjIxd2IyNWxiblJKYm5OMFlXNWpaU0E5SUhSb2FYTXVYM0psYm1SbGNtVmtRMjl0Y0c5dVpXNTBPMXh1SUNBZ0lIWmhjaUJ3Y21WMlVtVnVaR1Z5WldSRmJHVnRaVzUwSUQwZ2NISmxka052YlhCdmJtVnVkRWx1YzNSaGJtTmxMbDlqZFhKeVpXNTBSV3hsYldWdWREdGNiaUFnSUNCMllYSWdZMmhwYkdSRGIyNTBaWGgwSUQwZ2RHaHBjeTVmWjJWMFZtRnNhV1JoZEdWa1EyaHBiR1JEYjI1MFpYaDBLQ2s3WEc0Z0lDQWdkbUZ5SUc1bGVIUlNaVzVrWlhKbFpFVnNaVzFsYm5RZ1BTQjBhR2x6TGw5eVpXNWtaWEpXWVd4cFpHRjBaV1JEYjIxd2IyNWxiblFvWTJocGJHUkRiMjUwWlhoMEtUdGNiaUFnSUNCcFppQW9jMmh2ZFd4a1ZYQmtZWFJsVW1WaFkzUkRiMjF3YjI1bGJuUW9jSEpsZGxKbGJtUmxjbVZrUld4bGJXVnVkQ3dnYm1WNGRGSmxibVJsY21Wa1JXeGxiV1Z1ZENrcElIdGNiaUFnSUNBZ0lGSmxZV04wVW1WamIyNWphV3hsY2k1eVpXTmxhWFpsUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNCd2NtVjJRMjl0Y0c5dVpXNTBTVzV6ZEdGdVkyVXNYRzRnSUNBZ0lDQWdJRzVsZUhSU1pXNWtaWEpsWkVWc1pXMWxiblFzWEc0Z0lDQWdJQ0FnSUhSeVlXNXpZV04wYVc5dUxGeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5dFpYSm5aVU5vYVd4a1EyOXVkR1Y0ZENoamIyNTBaWGgwTENCamFHbHNaRU52Ym5SbGVIUXBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QlVhR1Z6WlNCMGQyOGdTVVJ6SUdGeVpTQmhZM1IxWVd4c2VTQjBhR1VnYzJGdFpTRWdRblYwSUc1dmRHaHBibWNnYzJodmRXeGtJSEpsYkhrZ2IyNGdkR2hoZEM1Y2JpQWdJQ0FnSUhaaGNpQjBhR2x6U1VRZ1BTQjBhR2x6TGw5eWIyOTBUbTlrWlVsRU8xeHVJQ0FnSUNBZ2RtRnlJSEJ5WlhaRGIyMXdiMjVsYm5SSlJDQTlJSEJ5WlhaRGIyMXdiMjVsYm5SSmJuTjBZVzVqWlM1ZmNtOXZkRTV2WkdWSlJEdGNiaUFnSUNBZ0lGSmxZV04wVW1WamIyNWphV3hsY2k1MWJtMXZkVzUwUTI5dGNHOXVaVzUwS0hCeVpYWkRiMjF3YjI1bGJuUkpibk4wWVc1alpTazdYRzVjYmlBZ0lDQWdJSFJvYVhNdVgzSmxibVJsY21Wa1EyOXRjRzl1Wlc1MElEMGdkR2hwY3k1ZmFXNXpkR0Z1ZEdsaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZENoY2JpQWdJQ0FnSUNBZ2JtVjRkRkpsYm1SbGNtVmtSV3hsYldWdWRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1ZEhsd1pWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIWmhjaUJ1WlhoMFRXRnlhM1Z3SUQwZ1VtVmhZM1JTWldOdmJtTnBiR1Z5TG0xdmRXNTBRMjl0Y0c5dVpXNTBLRnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXlaVzVrWlhKbFpFTnZiWEJ2Ym1WdWRDeGNiaUFnSUNBZ0lDQWdkR2hwYzBsRUxGeHVJQ0FnSUNBZ0lDQjBjbUZ1YzJGamRHbHZiaXhjYmlBZ0lDQWdJQ0FnZEdocGN5NWZiV1Z5WjJWRGFHbHNaRU52Ym5SbGVIUW9ZMjl1ZEdWNGRDd2dZMmhwYkdSRGIyNTBaWGgwS1Z4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUhSb2FYTXVYM0psY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0VKNVNVUW9jSEpsZGtOdmJYQnZibVZ1ZEVsRUxDQnVaWGgwVFdGeWEzVndLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCd2NtOTBaV04wWldSY2JpQWdJQ292WEc0Z0lGOXlaWEJzWVdObFRtOWtaVmRwZEdoTllYSnJkWEJDZVVsRU9pQm1kVzVqZEdsdmJpaHdjbVYyUTI5dGNHOXVaVzUwU1VRc0lHNWxlSFJOWVhKcmRYQXBJSHRjYmlBZ0lDQlNaV0ZqZEVOdmJYQnZibVZ1ZEVWdWRtbHliMjV0Wlc1MExuSmxjR3hoWTJWT2IyUmxWMmwwYUUxaGNtdDFjRUo1U1VRb1hHNGdJQ0FnSUNCd2NtVjJRMjl0Y0c5dVpXNTBTVVFzWEc0Z0lDQWdJQ0J1WlhoMFRXRnlhM1Z3WEc0Z0lDQWdLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FIQnliM1JsWTNSbFpGeHVJQ0FnS2k5Y2JpQWdYM0psYm1SbGNsWmhiR2xrWVhSbFpFTnZiWEJ2Ym1WdWRGZHBkR2h2ZFhSUGQyNWxjazl5UTI5dWRHVjRkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZG1GeUlHbHVjM1FnUFNCMGFHbHpMbDlwYm5OMFlXNWpaVHRjYmlBZ0lDQjJZWElnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFNCcGJuTjBMbkpsYm1SbGNpZ3BPMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDOHZJRmRsSUdGc2JHOTNJR0YxZEc4dGJXOWphM01nZEc4Z2NISnZZMlZsWkNCaGN5QnBaaUIwYUdWNUozSmxJSEpsZEhWeWJtbHVaeUJ1ZFd4c0xseHVJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnlaVzVrWlhKbFpFTnZiWEJ2Ym1WdWRDQTlQVDBnSjNWdVpHVm1hVzVsWkNjZ0ppWmNiaUFnSUNBZ0lDQWdJQ0JwYm5OMExuSmxibVJsY2k1ZmFYTk5iMk5yUm5WdVkzUnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdWR2hwY3lCcGN5QndjbTlpWVdKc2VTQmlZV1FnY0hKaFkzUnBZMlV1SUVOdmJuTnBaR1Z5SUhkaGNtNXBibWNnYUdWeVpTQmhibVJjYmlBZ0lDQWdJQ0FnTHk4Z1pHVndjbVZqWVhScGJtY2dkR2hwY3lCamIyNTJaVzVwWlc1alpTNWNiaUFnSUNBZ0lDQWdjbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJ5Wlc1a1pYSmxaRU52YlhCdmJtVnVkRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ292WEc0Z0lGOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtHTm9hV3hrUTI5dWRHVjRkQ2tnZTF4dUlDQWdJSFpoY2lCeVpXNWtaWEpsWkVOdmJYQnZibVZ1ZER0Y2JpQWdJQ0IyWVhJZ2NISmxkbWx2ZFhORGIyNTBaWGgwSUQwZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUTdYRzRnSUNBZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUWdQU0IwYUdsekxsOXRaWEpuWlVOb2FXeGtRMjl1ZEdWNGRDaGNiaUFnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMbDlqYjI1MFpYaDBMRnh1SUNBZ0lDQWdZMmhwYkdSRGIyNTBaWGgwWEc0Z0lDQWdLVHRjYmlBZ0lDQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpNWpkWEp5Wlc1MElEMGdkR2hwY3p0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5eVpXNWtaWEpXWVd4cFpHRjBaV1JEYjIxd2IyNWxiblJYYVhSb2IzVjBUM2R1WlhKUGNrTnZiblJsZUhRb0tUdGNiaUFnSUNCOUlHWnBibUZzYkhrZ2UxeHVJQ0FnSUNBZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUWdQU0J3Y21WMmFXOTFjME52Ym5SbGVIUTdYRzRnSUNBZ0lDQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpNWpkWEp5Wlc1MElEMGdiblZzYkR0Y2JpQWdJQ0I5WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDOHZJRlJQUkU4NklFRnVJR0JwYzFaaGJHbGtUbTlrWldBZ1puVnVZM1JwYjI0Z2QyOTFiR1FnY0hKdlltRmliSGtnWW1VZ2JXOXlaU0JoY0hCeWIzQnlhV0YwWlZ4dUlDQWdJQ0FnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFQwOUlHNTFiR3dnZkh3Z2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BUMDlJR1poYkhObElIeDhYRzRnSUNBZ0lDQlNaV0ZqZEVWc1pXMWxiblF1YVhOV1lXeHBaRVZzWlcxbGJuUW9jbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUXBMRnh1SUNBZ0lDQWdKeVZ6TG5KbGJtUmxjaWdwT2lCQklIWmhiR2xrSUZKbFlXTjBRMjl0Y0c5dVpXNTBJRzExYzNRZ1ltVWdjbVYwZFhKdVpXUXVJRmx2ZFNCdFlYa2dhR0YyWlNBbklDdGNiaUFnSUNBZ0lDQWdKM0psZEhWeWJtVmtJSFZ1WkdWbWFXNWxaQ3dnWVc0Z1lYSnlZWGtnYjNJZ2MyOXRaU0J2ZEdobGNpQnBiblpoYkdsa0lHOWlhbVZqZEM0bkxGeHVJQ0FnSUNBZ2RHaHBjeTVuWlhST1lXMWxLQ2tnZkh3Z0oxSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0x5OGdWRTlFVHpvZ1FXNGdZR2x6Vm1Gc2FXUk9iMlJsWUNCbWRXNWpkR2x2YmlCM2IzVnNaQ0J3Y205aVlXSnNlU0JpWlNCdGIzSmxJR0Z3Y0hKdmNISnBZWFJsWEc0Z0lDQWdjbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQVDA5SUc1MWJHd2dmSHdnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFQwOUlHWmhiSE5sSUh4OFhHNGdJQ0FnVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0hKbGJtUmxjbVZrUTI5dGNHOXVaVzUwS1NrcE8xeHVJQ0FnSUhKbGRIVnliaUJ5Wlc1a1pYSmxaRU52YlhCdmJtVnVkRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RHRjZhV3g1SUdGc2JHOWpZWFJsY3lCMGFHVWdjbVZtY3lCdlltcGxZM1FnWVc1a0lITjBiM0psY3lCZ1kyOXRjRzl1Wlc1MFlDQmhjeUJnY21WbVlDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSEpsWmlCU1pXWmxjbVZ1WTJVZ2JtRnRaUzVjYmlBZ0lDb2dRSEJoY21GdElIdGpiMjF3YjI1bGJuUjlJR052YlhCdmJtVnVkQ0JEYjIxd2IyNWxiblFnZEc4Z2MzUnZjbVVnWVhNZ1lISmxabUF1WEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWNISnBkbUYwWlZ4dUlDQWdLaTljYmlBZ1lYUjBZV05vVW1WbU9pQm1kVzVqZEdsdmJpaHlaV1lzSUdOdmJYQnZibVZ1ZENrZ2UxeHVJQ0FnSUhaaGNpQnBibk4wSUQwZ2RHaHBjeTVuWlhSUWRXSnNhV05KYm5OMFlXNWpaU2dwTzF4dUlDQWdJSFpoY2lCeVpXWnpJRDBnYVc1emRDNXlaV1p6SUQwOVBTQmxiWEIwZVU5aWFtVmpkQ0EvSUNocGJuTjBMbkpsWm5NZ1BTQjdmU2tnT2lCcGJuTjBMbkpsWm5NN1hHNGdJQ0FnY21WbWMxdHlaV1pkSUQwZ1kyOXRjRzl1Wlc1MExtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVSbGRHRmphR1Z6SUdFZ2NtVm1aWEpsYm1ObElHNWhiV1V1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCeVpXWWdUbUZ0WlNCMGJ5QmtaWEpsWm1WeVpXNWpaUzVjYmlBZ0lDb2dRR1pwYm1Gc1hHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFMMXh1SUNCa1pYUmhZMmhTWldZNklHWjFibU4wYVc5dUtISmxaaWtnZTF4dUlDQWdJSFpoY2lCeVpXWnpJRDBnZEdocGN5NW5aWFJRZFdKc2FXTkpibk4wWVc1alpTZ3BMbkpsWm5NN1hHNGdJQ0FnWkdWc1pYUmxJSEpsWm5OYmNtVm1YVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1IyVjBJR0VnZEdWNGRDQmtaWE5qY21sd2RHbHZiaUJ2WmlCMGFHVWdZMjl0Y0c5dVpXNTBJSFJvWVhRZ1kyRnVJR0psSUhWelpXUWdkRzhnYVdSbGJuUnBabmtnYVhSY2JpQWdJQ29nYVc0Z1pYSnliM0lnYldWemMyRm5aWE11WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdWR2hsSUc1aGJXVWdiM0lnYm5Wc2JDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQm5aWFJPWVcxbE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjJZWElnZEhsd1pTQTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTG5SNWNHVTdYRzRnSUNBZ2RtRnlJR052Ym5OMGNuVmpkRzl5SUQwZ2RHaHBjeTVmYVc1emRHRnVZMlVnSmlZZ2RHaHBjeTVmYVc1emRHRnVZMlV1WTI5dWMzUnlkV04wYjNJN1hHNGdJQ0FnY21WMGRYSnVJQ2hjYmlBZ0lDQWdJSFI1Y0dVdVpHbHpjR3hoZVU1aGJXVWdmSHdnS0dOdmJuTjBjblZqZEc5eUlDWW1JR052Ym5OMGNuVmpkRzl5TG1ScGMzQnNZWGxPWVcxbEtTQjhmRnh1SUNBZ0lDQWdkSGx3WlM1dVlXMWxJSHg4SUNoamIyNXpkSEoxWTNSdmNpQW1KaUJqYjI1emRISjFZM1J2Y2k1dVlXMWxLU0I4ZkZ4dUlDQWdJQ0FnYm5Wc2JGeHVJQ0FnSUNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsZENCMGFHVWdjSFZpYkdsamJIa2dZV05qWlhOemFXSnNaU0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdseklHTnZiWEJ2Ym1WdWRDQXRJR2t1WlM0Z2QyaGhkRnh1SUNBZ0tpQnBjeUJsZUhCdmMyVmtJR0o1SUhKbFpuTWdZVzVrSUhKbGRIVnlibVZrSUdKNUlGSmxZV04wTG5KbGJtUmxjaTRnUTJGdUlHSmxJRzUxYkd3Z1ptOXlJSE4wWVhSbGJHVnpjMXh1SUNBZ0tpQmpiMjF3YjI1bGJuUnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNtVjBkWEp1SUh0U1pXRmpkRU52YlhCdmJtVnVkSDBnZEdobElIQjFZbXhwWXlCamIyMXdiMjVsYm5RZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1oyVjBVSFZpYkdsalNXNXpkR0Z1WTJVNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDlwYm5OMFlXNWpaVHRjYmlBZ2ZTeGNibHh1SUNBdkx5QlRkSFZpWEc0Z0lGOXBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1ME9pQnVkV3hzWEc1Y2JuMDdYRzVjYmxKbFlXTjBVR1Z5Wmk1dFpXRnpkWEpsVFdWMGFHOWtjeWhjYmlBZ1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblJOYVhocGJpeGNiaUFnSjFKbFlXTjBRMjl0Y0c5emFYUmxRMjl0Y0c5dVpXNTBKeXhjYmlBZ2UxeHVJQ0FnSUcxdmRXNTBRMjl0Y0c5dVpXNTBPaUFuYlc5MWJuUkRiMjF3YjI1bGJuUW5MRnh1SUNBZ0lIVndaR0YwWlVOdmJYQnZibVZ1ZERvZ0ozVndaR0YwWlVOdmJYQnZibVZ1ZENjc1hHNGdJQ0FnWDNKbGJtUmxjbFpoYkdsa1lYUmxaRU52YlhCdmJtVnVkRG9nSjE5eVpXNWtaWEpXWVd4cFpHRjBaV1JEYjIxd2IyNWxiblFuWEc0Z0lIMWNiaWs3WEc1Y2JuWmhjaUJTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRDQTlJSHRjYmx4dUlDQk5hWGhwYmpvZ1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblJOYVhocGJseHVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwTzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29udGV4dFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlPYmplY3QgPSByZXF1aXJlKFwiLi9lbXB0eU9iamVjdFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIGRpZFdhcm4gPSBmYWxzZTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBjb250ZXh0LlxuICpcbiAqIFRoZSBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgcGFzc2VkIGRvd24gdGhlIGNvbXBvbmVudCBvd25lcnNoaXAgaGllcmFyY2h5XG4gKiBhbmQgaXMgYWNjZXNzaWJsZSB2aWEgYHRoaXMuY29udGV4dGAgb24gUmVhY3RDb21wb3NpdGVDb21wb25lbnRzLlxuICovXG52YXIgUmVhY3RDb250ZXh0ID0ge1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge29iamVjdH1cbiAgICovXG4gIGN1cnJlbnQ6IGVtcHR5T2JqZWN0LFxuXG4gIC8qKlxuICAgKiBUZW1wb3JhcmlseSBleHRlbmRzIHRoZSBjdXJyZW50IGNvbnRleHQgd2hpbGUgZXhlY3V0aW5nIHNjb3BlZENhbGxiYWNrLlxuICAgKlxuICAgKiBBIHR5cGljYWwgdXNlIGNhc2UgbWlnaHQgbG9vayBsaWtlXG4gICAqXG4gICAqICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgKiAgICB2YXIgY2hpbGRyZW4gPSBSZWFjdENvbnRleHQud2l0aENvbnRleHQoe2ZvbzogJ2Zvbyd9LCAoKSA9PiAoXG4gICAqXG4gICAqICAgICkpO1xuICAgKiAgICByZXR1cm4gPGRpdj57Y2hpbGRyZW59PC9kaXY+O1xuICAgKiAgfVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3Q29udGV4dCBOZXcgY29udGV4dCB0byBtZXJnZSBpbnRvIHRoZSBleGlzdGluZyBjb250ZXh0XG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHNjb3BlZENhbGxiYWNrIENhbGxiYWNrIHRvIHJ1biB3aXRoIHRoZSBuZXcgY29udGV4dFxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudHxhcnJheTxSZWFjdENvbXBvbmVudD59XG4gICAqL1xuICB3aXRoQ29udGV4dDogZnVuY3Rpb24obmV3Q29udGV4dCwgc2NvcGVkQ2FsbGJhY2spIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgZGlkV2FybixcbiAgICAgICAgJ3dpdGhDb250ZXh0IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAnICtcbiAgICAgICAgJ1VzZSBhIHdyYXBwZXIgY29tcG9uZW50IHdpdGggZ2V0Q2hpbGRDb250ZXh0IGluc3RlYWQuJ1xuICAgICAgKSA6IG51bGwpO1xuXG4gICAgICBkaWRXYXJuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0O1xuICAgIHZhciBwcmV2aW91c0NvbnRleHQgPSBSZWFjdENvbnRleHQuY3VycmVudDtcbiAgICBSZWFjdENvbnRleHQuY3VycmVudCA9IGFzc2lnbih7fSwgcHJldmlvdXNDb250ZXh0LCBuZXdDb250ZXh0KTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gc2NvcGVkQ2FsbGJhY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDb250ZXh0LmN1cnJlbnQgPSBwcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbnRleHQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRGIyNTBaWGgwTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFTnZiblJsZUhSY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQmhjM05wWjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlQWW1wbFkzUXVZWE56YVdkdVhDSXBPMXh1ZG1GeUlHVnRjSFI1VDJKcVpXTjBJRDBnY21WeGRXbHlaU2hjSWk0dlpXMXdkSGxQWW1wbFkzUmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiblpoY2lCa2FXUlhZWEp1SUQwZ1ptRnNjMlU3WEc1Y2JpOHFLbHh1SUNvZ1MyVmxjSE1nZEhKaFkyc2diMllnZEdobElHTjFjbkpsYm5RZ1kyOXVkR1Y0ZEM1Y2JpQXFYRzRnS2lCVWFHVWdZMjl1ZEdWNGRDQnBjeUJoZFhSdmJXRjBhV05oYkd4NUlIQmhjM05sWkNCa2IzZHVJSFJvWlNCamIyMXdiMjVsYm5RZ2IzZHVaWEp6YUdsd0lHaHBaWEpoY21Ob2VWeHVJQ29nWVc1a0lHbHpJR0ZqWTJWemMybGliR1VnZG1saElHQjBhR2x6TG1OdmJuUmxlSFJnSUc5dUlGSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwY3k1Y2JpQXFMMXh1ZG1GeUlGSmxZV04wUTI5dWRHVjRkQ0E5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFJRUIwZVhCbElIdHZZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQmpkWEp5Wlc1ME9pQmxiWEIwZVU5aWFtVmpkQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWR1Z0Y0c5eVlYSnBiSGtnWlhoMFpXNWtjeUIwYUdVZ1kzVnljbVZ1ZENCamIyNTBaWGgwSUhkb2FXeGxJR1Y0WldOMWRHbHVaeUJ6WTI5d1pXUkRZV3hzWW1GamF5NWNiaUFnSUNwY2JpQWdJQ29nUVNCMGVYQnBZMkZzSUhWelpTQmpZWE5sSUcxcFoyaDBJR3h2YjJzZ2JHbHJaVnh1SUNBZ0tseHVJQ0FnS2lBZ2NtVnVaR1Z5T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNvZ0lDQWdkbUZ5SUdOb2FXeGtjbVZ1SUQwZ1VtVmhZM1JEYjI1MFpYaDBMbmRwZEdoRGIyNTBaWGgwS0h0bWIyODZJQ2RtYjI4bmZTd2dLQ2tnUFQ0Z0tGeHVJQ0FnS2x4dUlDQWdLaUFnSUNBcEtUdGNiaUFnSUNvZ0lDQWdjbVYwZFhKdUlEeGthWFkrZTJOb2FXeGtjbVZ1ZlR3dlpHbDJQanRjYmlBZ0lDb2dJSDFjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUc1bGQwTnZiblJsZUhRZ1RtVjNJR052Ym5SbGVIUWdkRzhnYldWeVoyVWdhVzUwYnlCMGFHVWdaWGhwYzNScGJtY2dZMjl1ZEdWNGRGeHVJQ0FnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCelkyOXdaV1JEWVd4c1ltRmpheUJEWVd4c1ltRmpheUIwYnlCeWRXNGdkMmwwYUNCMGFHVWdibVYzSUdOdmJuUmxlSFJjYmlBZ0lDb2dRSEpsZEhWeWJpQjdVbVZoWTNSRGIyMXdiMjVsYm5SOFlYSnlZWGs4VW1WaFkzUkRiMjF3YjI1bGJuUStmVnh1SUNBZ0tpOWNiaUFnZDJsMGFFTnZiblJsZUhRNklHWjFibU4wYVc5dUtHNWxkME52Ym5SbGVIUXNJSE5qYjNCbFpFTmhiR3hpWVdOcktTQjdYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUdScFpGZGhjbTRzWEc0Z0lDQWdJQ0FnSUNkM2FYUm9RMjl1ZEdWNGRDQnBjeUJrWlhCeVpXTmhkR1ZrSUdGdVpDQjNhV3hzSUdKbElISmxiVzkyWldRZ2FXNGdZU0JtZFhSMWNtVWdkbVZ5YzJsdmJpNGdKeUFyWEc0Z0lDQWdJQ0FnSUNkVmMyVWdZU0IzY21Gd2NHVnlJR052YlhCdmJtVnVkQ0IzYVhSb0lHZGxkRU5vYVd4a1EyOXVkR1Y0ZENCcGJuTjBaV0ZrTGlkY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JseHVJQ0FnSUNBZ1pHbGtWMkZ5YmlBOUlIUnlkV1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkbUZ5SUhKbGMzVnNkRHRjYmlBZ0lDQjJZWElnY0hKbGRtbHZkWE5EYjI1MFpYaDBJRDBnVW1WaFkzUkRiMjUwWlhoMExtTjFjbkpsYm5RN1hHNGdJQ0FnVW1WaFkzUkRiMjUwWlhoMExtTjFjbkpsYm5RZ1BTQmhjM05wWjI0b2UzMHNJSEJ5WlhacGIzVnpRMjl1ZEdWNGRDd2dibVYzUTI5dWRHVjRkQ2s3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUhKbGMzVnNkQ0E5SUhOamIzQmxaRU5oYkd4aVlXTnJLQ2s3WEc0Z0lDQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQWdJRkpsWVdOMFEyOXVkR1Y0ZEM1amRYSnlaVzUwSUQwZ2NISmxkbWx2ZFhORGIyNTBaWGgwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRGIyNTBaWGgwTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDdXJyZW50T3duZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgb3duZXIuXG4gKlxuICogVGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIGNvbXBvbmVudCB3aG8gc2hvdWxkIG93biBhbnkgY29tcG9uZW50cyB0aGF0IGFyZVxuICogY3VycmVudGx5IGJlaW5nIGNvbnN0cnVjdGVkLlxuICpcbiAqIFRoZSBkZXB0aCBpbmRpY2F0ZSBob3cgbWFueSBjb21wb3NpdGUgY29tcG9uZW50cyBhcmUgYWJvdmUgdGhpcyByZW5kZXIgbGV2ZWwuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEN1cnJlbnRPd25lcjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcblxudmFyIG1hcE9iamVjdCA9IHJlcXVpcmUoXCIuL21hcE9iamVjdFwiKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBIVE1MIHRhZyBlbGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRhZyBuYW1lIChlLmcuIGBkaXZgKS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURPTUZhY3RvcnkodGFnKSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUZhY3RvcnkodGFnKTtcbiAgfVxuICByZXR1cm4gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkodGFnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIHN1cHBvcnRlZCBIVE1MIHRhZ3MgdG8gYFJlYWN0RE9NQ29tcG9uZW50YCBjbGFzc2VzLlxuICogVGhpcyBpcyBhbHNvIGFjY2Vzc2libGUgdmlhIGBSZWFjdC5ET01gLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFJlYWN0RE9NID0gbWFwT2JqZWN0KHtcbiAgYTogJ2EnLFxuICBhYmJyOiAnYWJicicsXG4gIGFkZHJlc3M6ICdhZGRyZXNzJyxcbiAgYXJlYTogJ2FyZWEnLFxuICBhcnRpY2xlOiAnYXJ0aWNsZScsXG4gIGFzaWRlOiAnYXNpZGUnLFxuICBhdWRpbzogJ2F1ZGlvJyxcbiAgYjogJ2InLFxuICBiYXNlOiAnYmFzZScsXG4gIGJkaTogJ2JkaScsXG4gIGJkbzogJ2JkbycsXG4gIGJpZzogJ2JpZycsXG4gIGJsb2NrcXVvdGU6ICdibG9ja3F1b3RlJyxcbiAgYm9keTogJ2JvZHknLFxuICBicjogJ2JyJyxcbiAgYnV0dG9uOiAnYnV0dG9uJyxcbiAgY2FudmFzOiAnY2FudmFzJyxcbiAgY2FwdGlvbjogJ2NhcHRpb24nLFxuICBjaXRlOiAnY2l0ZScsXG4gIGNvZGU6ICdjb2RlJyxcbiAgY29sOiAnY29sJyxcbiAgY29sZ3JvdXA6ICdjb2xncm91cCcsXG4gIGRhdGE6ICdkYXRhJyxcbiAgZGF0YWxpc3Q6ICdkYXRhbGlzdCcsXG4gIGRkOiAnZGQnLFxuICBkZWw6ICdkZWwnLFxuICBkZXRhaWxzOiAnZGV0YWlscycsXG4gIGRmbjogJ2RmbicsXG4gIGRpYWxvZzogJ2RpYWxvZycsXG4gIGRpdjogJ2RpdicsXG4gIGRsOiAnZGwnLFxuICBkdDogJ2R0JyxcbiAgZW06ICdlbScsXG4gIGVtYmVkOiAnZW1iZWQnLFxuICBmaWVsZHNldDogJ2ZpZWxkc2V0JyxcbiAgZmlnY2FwdGlvbjogJ2ZpZ2NhcHRpb24nLFxuICBmaWd1cmU6ICdmaWd1cmUnLFxuICBmb290ZXI6ICdmb290ZXInLFxuICBmb3JtOiAnZm9ybScsXG4gIGgxOiAnaDEnLFxuICBoMjogJ2gyJyxcbiAgaDM6ICdoMycsXG4gIGg0OiAnaDQnLFxuICBoNTogJ2g1JyxcbiAgaDY6ICdoNicsXG4gIGhlYWQ6ICdoZWFkJyxcbiAgaGVhZGVyOiAnaGVhZGVyJyxcbiAgaHI6ICdocicsXG4gIGh0bWw6ICdodG1sJyxcbiAgaTogJ2knLFxuICBpZnJhbWU6ICdpZnJhbWUnLFxuICBpbWc6ICdpbWcnLFxuICBpbnB1dDogJ2lucHV0JyxcbiAgaW5zOiAnaW5zJyxcbiAga2JkOiAna2JkJyxcbiAga2V5Z2VuOiAna2V5Z2VuJyxcbiAgbGFiZWw6ICdsYWJlbCcsXG4gIGxlZ2VuZDogJ2xlZ2VuZCcsXG4gIGxpOiAnbGknLFxuICBsaW5rOiAnbGluaycsXG4gIG1haW46ICdtYWluJyxcbiAgbWFwOiAnbWFwJyxcbiAgbWFyazogJ21hcmsnLFxuICBtZW51OiAnbWVudScsXG4gIG1lbnVpdGVtOiAnbWVudWl0ZW0nLFxuICBtZXRhOiAnbWV0YScsXG4gIG1ldGVyOiAnbWV0ZXInLFxuICBuYXY6ICduYXYnLFxuICBub3NjcmlwdDogJ25vc2NyaXB0JyxcbiAgb2JqZWN0OiAnb2JqZWN0JyxcbiAgb2w6ICdvbCcsXG4gIG9wdGdyb3VwOiAnb3B0Z3JvdXAnLFxuICBvcHRpb246ICdvcHRpb24nLFxuICBvdXRwdXQ6ICdvdXRwdXQnLFxuICBwOiAncCcsXG4gIHBhcmFtOiAncGFyYW0nLFxuICBwaWN0dXJlOiAncGljdHVyZScsXG4gIHByZTogJ3ByZScsXG4gIHByb2dyZXNzOiAncHJvZ3Jlc3MnLFxuICBxOiAncScsXG4gIHJwOiAncnAnLFxuICBydDogJ3J0JyxcbiAgcnVieTogJ3J1YnknLFxuICBzOiAncycsXG4gIHNhbXA6ICdzYW1wJyxcbiAgc2NyaXB0OiAnc2NyaXB0JyxcbiAgc2VjdGlvbjogJ3NlY3Rpb24nLFxuICBzZWxlY3Q6ICdzZWxlY3QnLFxuICBzbWFsbDogJ3NtYWxsJyxcbiAgc291cmNlOiAnc291cmNlJyxcbiAgc3BhbjogJ3NwYW4nLFxuICBzdHJvbmc6ICdzdHJvbmcnLFxuICBzdHlsZTogJ3N0eWxlJyxcbiAgc3ViOiAnc3ViJyxcbiAgc3VtbWFyeTogJ3N1bW1hcnknLFxuICBzdXA6ICdzdXAnLFxuICB0YWJsZTogJ3RhYmxlJyxcbiAgdGJvZHk6ICd0Ym9keScsXG4gIHRkOiAndGQnLFxuICB0ZXh0YXJlYTogJ3RleHRhcmVhJyxcbiAgdGZvb3Q6ICd0Zm9vdCcsXG4gIHRoOiAndGgnLFxuICB0aGVhZDogJ3RoZWFkJyxcbiAgdGltZTogJ3RpbWUnLFxuICB0aXRsZTogJ3RpdGxlJyxcbiAgdHI6ICd0cicsXG4gIHRyYWNrOiAndHJhY2snLFxuICB1OiAndScsXG4gIHVsOiAndWwnLFxuICAndmFyJzogJ3ZhcicsXG4gIHZpZGVvOiAndmlkZW8nLFxuICB3YnI6ICd3YnInLFxuXG4gIC8vIFNWR1xuICBjaXJjbGU6ICdjaXJjbGUnLFxuICBjbGlwUGF0aDogJ2NsaXBQYXRoJyxcbiAgZGVmczogJ2RlZnMnLFxuICBlbGxpcHNlOiAnZWxsaXBzZScsXG4gIGc6ICdnJyxcbiAgbGluZTogJ2xpbmUnLFxuICBsaW5lYXJHcmFkaWVudDogJ2xpbmVhckdyYWRpZW50JyxcbiAgbWFzazogJ21hc2snLFxuICBwYXRoOiAncGF0aCcsXG4gIHBhdHRlcm46ICdwYXR0ZXJuJyxcbiAgcG9seWdvbjogJ3BvbHlnb24nLFxuICBwb2x5bGluZTogJ3BvbHlsaW5lJyxcbiAgcmFkaWFsR3JhZGllbnQ6ICdyYWRpYWxHcmFkaWVudCcsXG4gIHJlY3Q6ICdyZWN0JyxcbiAgc3RvcDogJ3N0b3AnLFxuICBzdmc6ICdzdmcnLFxuICB0ZXh0OiAndGV4dCcsXG4gIHRzcGFuOiAndHNwYW4nXG5cbn0sIGNyZWF0ZURPTUZhY3RvcnkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDB1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFUlBUVnh1SUNvZ1FIUjVjR1ZqYUdWamEzTWdjM1JoZEdsakxXOXViSGxjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5WENJcE8xeHVYRzUyWVhJZ2JXRndUMkpxWldOMElEMGdjbVZ4ZFdseVpTaGNJaTR2YldGd1QySnFaV04wWENJcE8xeHVYRzR2S2lwY2JpQXFJRU55WldGMFpTQmhJR1poWTNSdmNua2dkR2hoZENCamNtVmhkR1Z6SUVoVVRVd2dkR0ZuSUdWc1pXMWxiblJ6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IwWVdjZ1ZHRm5JRzVoYldVZ0tHVXVaeTRnWUdScGRtQXBMbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWTNKbFlYUmxSRTlOUm1GamRHOXllU2gwWVdjcElIdGNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJSEpsZEhWeWJpQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0l1WTNKbFlYUmxSbUZqZEc5eWVTaDBZV2NwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUm1GamRHOXllU2gwWVdjcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCdFlYQndhVzVuSUdaeWIyMGdjM1Z3Y0c5eWRHVmtJRWhVVFV3Z2RHRm5jeUIwYnlCZ1VtVmhZM1JFVDAxRGIyMXdiMjVsYm5SZ0lHTnNZWE56WlhNdVhHNGdLaUJVYUdseklHbHpJR0ZzYzI4Z1lXTmpaWE56YVdKc1pTQjJhV0VnWUZKbFlXTjBMa1JQVFdBdVhHNGdLbHh1SUNvZ1FIQjFZbXhwWTF4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JFVDAwZ1BTQnRZWEJQWW1wbFkzUW9lMXh1SUNCaE9pQW5ZU2NzWEc0Z0lHRmlZbkk2SUNkaFltSnlKeXhjYmlBZ1lXUmtjbVZ6Y3pvZ0oyRmtaSEpsYzNNbkxGeHVJQ0JoY21WaE9pQW5ZWEpsWVNjc1hHNGdJR0Z5ZEdsamJHVTZJQ2RoY25ScFkyeGxKeXhjYmlBZ1lYTnBaR1U2SUNkaGMybGtaU2NzWEc0Z0lHRjFaR2x2T2lBbllYVmthVzhuTEZ4dUlDQmlPaUFuWWljc1hHNGdJR0poYzJVNklDZGlZWE5sSnl4Y2JpQWdZbVJwT2lBblltUnBKeXhjYmlBZ1ltUnZPaUFuWW1Sdkp5eGNiaUFnWW1sbk9pQW5ZbWxuSnl4Y2JpQWdZbXh2WTJ0eGRXOTBaVG9nSjJKc2IyTnJjWFZ2ZEdVbkxGeHVJQ0JpYjJSNU9pQW5ZbTlrZVNjc1hHNGdJR0p5T2lBblluSW5MRnh1SUNCaWRYUjBiMjQ2SUNkaWRYUjBiMjRuTEZ4dUlDQmpZVzUyWVhNNklDZGpZVzUyWVhNbkxGeHVJQ0JqWVhCMGFXOXVPaUFuWTJGd2RHbHZiaWNzWEc0Z0lHTnBkR1U2SUNkamFYUmxKeXhjYmlBZ1kyOWtaVG9nSjJOdlpHVW5MRnh1SUNCamIydzZJQ2RqYjJ3bkxGeHVJQ0JqYjJ4bmNtOTFjRG9nSjJOdmJHZHliM1Z3Snl4Y2JpQWdaR0YwWVRvZ0oyUmhkR0VuTEZ4dUlDQmtZWFJoYkdsemREb2dKMlJoZEdGc2FYTjBKeXhjYmlBZ1pHUTZJQ2RrWkNjc1hHNGdJR1JsYkRvZ0oyUmxiQ2NzWEc0Z0lHUmxkR0ZwYkhNNklDZGtaWFJoYVd4ekp5eGNiaUFnWkdadU9pQW5aR1p1Snl4Y2JpQWdaR2xoYkc5bk9pQW5aR2xoYkc5bkp5eGNiaUFnWkdsMk9pQW5aR2wySnl4Y2JpQWdaR3c2SUNka2JDY3NYRzRnSUdSME9pQW5aSFFuTEZ4dUlDQmxiVG9nSjJWdEp5eGNiaUFnWlcxaVpXUTZJQ2RsYldKbFpDY3NYRzRnSUdacFpXeGtjMlYwT2lBblptbGxiR1J6WlhRbkxGeHVJQ0JtYVdkallYQjBhVzl1T2lBblptbG5ZMkZ3ZEdsdmJpY3NYRzRnSUdacFozVnlaVG9nSjJacFozVnlaU2NzWEc0Z0lHWnZiM1JsY2pvZ0oyWnZiM1JsY2ljc1hHNGdJR1p2Y20wNklDZG1iM0p0Snl4Y2JpQWdhREU2SUNkb01TY3NYRzRnSUdneU9pQW5hREluTEZ4dUlDQm9Nem9nSjJnekp5eGNiaUFnYURRNklDZG9OQ2NzWEc0Z0lHZzFPaUFuYURVbkxGeHVJQ0JvTmpvZ0oyZzJKeXhjYmlBZ2FHVmhaRG9nSjJobFlXUW5MRnh1SUNCb1pXRmtaWEk2SUNkb1pXRmtaWEluTEZ4dUlDQm9jam9nSjJoeUp5eGNiaUFnYUhSdGJEb2dKMmgwYld3bkxGeHVJQ0JwT2lBbmFTY3NYRzRnSUdsbWNtRnRaVG9nSjJsbWNtRnRaU2NzWEc0Z0lHbHRaem9nSjJsdFp5Y3NYRzRnSUdsdWNIVjBPaUFuYVc1d2RYUW5MRnh1SUNCcGJuTTZJQ2RwYm5NbkxGeHVJQ0JyWW1RNklDZHJZbVFuTEZ4dUlDQnJaWGxuWlc0NklDZHJaWGxuWlc0bkxGeHVJQ0JzWVdKbGJEb2dKMnhoWW1Wc0p5eGNiaUFnYkdWblpXNWtPaUFuYkdWblpXNWtKeXhjYmlBZ2JHazZJQ2RzYVNjc1hHNGdJR3hwYm1zNklDZHNhVzVySnl4Y2JpQWdiV0ZwYmpvZ0oyMWhhVzRuTEZ4dUlDQnRZWEE2SUNkdFlYQW5MRnh1SUNCdFlYSnJPaUFuYldGeWF5Y3NYRzRnSUcxbGJuVTZJQ2R0Wlc1MUp5eGNiaUFnYldWdWRXbDBaVzA2SUNkdFpXNTFhWFJsYlNjc1hHNGdJRzFsZEdFNklDZHRaWFJoSnl4Y2JpQWdiV1YwWlhJNklDZHRaWFJsY2ljc1hHNGdJRzVoZGpvZ0oyNWhkaWNzWEc0Z0lHNXZjMk55YVhCME9pQW5ibTl6WTNKcGNIUW5MRnh1SUNCdlltcGxZM1E2SUNkdlltcGxZM1FuTEZ4dUlDQnZiRG9nSjI5c0p5eGNiaUFnYjNCMFozSnZkWEE2SUNkdmNIUm5jbTkxY0Njc1hHNGdJRzl3ZEdsdmJqb2dKMjl3ZEdsdmJpY3NYRzRnSUc5MWRIQjFkRG9nSjI5MWRIQjFkQ2NzWEc0Z0lIQTZJQ2R3Snl4Y2JpQWdjR0Z5WVcwNklDZHdZWEpoYlNjc1hHNGdJSEJwWTNSMWNtVTZJQ2R3YVdOMGRYSmxKeXhjYmlBZ2NISmxPaUFuY0hKbEp5eGNiaUFnY0hKdlozSmxjM002SUNkd2NtOW5jbVZ6Y3ljc1hHNGdJSEU2SUNkeEp5eGNiaUFnY25BNklDZHljQ2NzWEc0Z0lISjBPaUFuY25RbkxGeHVJQ0J5ZFdKNU9pQW5jblZpZVNjc1hHNGdJSE02SUNkekp5eGNiaUFnYzJGdGNEb2dKM05oYlhBbkxGeHVJQ0J6WTNKcGNIUTZJQ2R6WTNKcGNIUW5MRnh1SUNCelpXTjBhVzl1T2lBbmMyVmpkR2x2Ymljc1hHNGdJSE5sYkdWamREb2dKM05sYkdWamRDY3NYRzRnSUhOdFlXeHNPaUFuYzIxaGJHd25MRnh1SUNCemIzVnlZMlU2SUNkemIzVnlZMlVuTEZ4dUlDQnpjR0Z1T2lBbmMzQmhiaWNzWEc0Z0lITjBjbTl1WnpvZ0ozTjBjbTl1Wnljc1hHNGdJSE4wZVd4bE9pQW5jM1I1YkdVbkxGeHVJQ0J6ZFdJNklDZHpkV0luTEZ4dUlDQnpkVzF0WVhKNU9pQW5jM1Z0YldGeWVTY3NYRzRnSUhOMWNEb2dKM04xY0Njc1hHNGdJSFJoWW14bE9pQW5kR0ZpYkdVbkxGeHVJQ0IwWW05a2VUb2dKM1JpYjJSNUp5eGNiaUFnZEdRNklDZDBaQ2NzWEc0Z0lIUmxlSFJoY21WaE9pQW5kR1Y0ZEdGeVpXRW5MRnh1SUNCMFptOXZkRG9nSjNSbWIyOTBKeXhjYmlBZ2RHZzZJQ2QwYUNjc1hHNGdJSFJvWldGa09pQW5kR2hsWVdRbkxGeHVJQ0IwYVcxbE9pQW5kR2x0WlNjc1hHNGdJSFJwZEd4bE9pQW5kR2wwYkdVbkxGeHVJQ0IwY2pvZ0ozUnlKeXhjYmlBZ2RISmhZMnM2SUNkMGNtRmpheWNzWEc0Z0lIVTZJQ2QxSnl4Y2JpQWdkV3c2SUNkMWJDY3NYRzRnSUNkMllYSW5PaUFuZG1GeUp5eGNiaUFnZG1sa1pXODZJQ2QyYVdSbGJ5Y3NYRzRnSUhkaWNqb2dKM2RpY2ljc1hHNWNiaUFnTHk4Z1UxWkhYRzRnSUdOcGNtTnNaVG9nSjJOcGNtTnNaU2NzWEc0Z0lHTnNhWEJRWVhSb09pQW5ZMnhwY0ZCaGRHZ25MRnh1SUNCa1pXWnpPaUFuWkdWbWN5Y3NYRzRnSUdWc2JHbHdjMlU2SUNkbGJHeHBjSE5sSnl4Y2JpQWdaem9nSjJjbkxGeHVJQ0JzYVc1bE9pQW5iR2x1WlNjc1hHNGdJR3hwYm1WaGNrZHlZV1JwWlc1ME9pQW5iR2x1WldGeVIzSmhaR2xsYm5RbkxGeHVJQ0J0WVhOck9pQW5iV0Z6YXljc1hHNGdJSEJoZEdnNklDZHdZWFJvSnl4Y2JpQWdjR0YwZEdWeWJqb2dKM0JoZEhSbGNtNG5MRnh1SUNCd2IyeDVaMjl1T2lBbmNHOXNlV2R2Ymljc1hHNGdJSEJ2Ykhsc2FXNWxPaUFuY0c5c2VXeHBibVVuTEZ4dUlDQnlZV1JwWVd4SGNtRmthV1Z1ZERvZ0ozSmhaR2xoYkVkeVlXUnBaVzUwSnl4Y2JpQWdjbVZqZERvZ0ozSmxZM1FuTEZ4dUlDQnpkRzl3T2lBbmMzUnZjQ2NzWEc0Z0lITjJaem9nSjNOMlp5Y3NYRzRnSUhSbGVIUTZJQ2QwWlhoMEp5eGNiaUFnZEhOd1lXNDZJQ2QwYzNCaGJpZGNibHh1ZlN3Z1kzSmxZWFJsUkU5TlJtRmpkRzl5ZVNrN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRVQwMDdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUJ1dHRvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEF1dG9Gb2N1c01peGluID0gcmVxdWlyZShcIi4vQXV0b0ZvY3VzTWl4aW5cIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciBrZXlNaXJyb3IgPSByZXF1aXJlKFwiLi9rZXlNaXJyb3JcIik7XG5cbnZhciBidXR0b24gPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnYnV0dG9uJyk7XG5cbnZhciBtb3VzZUxpc3RlbmVyTmFtZXMgPSBrZXlNaXJyb3Ioe1xuICBvbkNsaWNrOiB0cnVlLFxuICBvbkRvdWJsZUNsaWNrOiB0cnVlLFxuICBvbk1vdXNlRG93bjogdHJ1ZSxcbiAgb25Nb3VzZU1vdmU6IHRydWUsXG4gIG9uTW91c2VVcDogdHJ1ZSxcbiAgb25DbGlja0NhcHR1cmU6IHRydWUsXG4gIG9uRG91YmxlQ2xpY2tDYXB0dXJlOiB0cnVlLFxuICBvbk1vdXNlRG93bkNhcHR1cmU6IHRydWUsXG4gIG9uTW91c2VNb3ZlQ2FwdHVyZTogdHJ1ZSxcbiAgb25Nb3VzZVVwQ2FwdHVyZTogdHJ1ZVxufSk7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDxidXR0b24+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBkb2VzIG5vdCByZWNlaXZlIG1vdXNlIGV2ZW50c1xuICogd2hlbiBgZGlzYWJsZWRgIGlzIHNldC5cbiAqL1xudmFyIFJlYWN0RE9NQnV0dG9uID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RET01CdXR0b24nLFxuICB0YWdOYW1lOiAnQlVUVE9OJyxcblxuICBtaXhpbnM6IFtBdXRvRm9jdXNNaXhpbiwgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5dLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHByb3BzID0ge307XG5cbiAgICAvLyBDb3B5IHRoZSBwcm9wczsgZXhjZXB0IHRoZSBtb3VzZSBsaXN0ZW5lcnMgaWYgd2UncmUgZGlzYWJsZWRcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wcykge1xuICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICghdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCAhbW91c2VMaXN0ZW5lck5hbWVzW2tleV0pKSB7XG4gICAgICAgIHByb3BzW2tleV0gPSB0aGlzLnByb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1dHRvbihwcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH1cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01CdXR0b247XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NQ29tcG9uZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbi8qIGdsb2JhbCBoYXNPd25Qcm9wZXJ0eTp0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENTU1Byb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0NTU1Byb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xudmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcIik7XG52YXIgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPVxuICByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdE11bHRpQ2hpbGQgPSByZXF1aXJlKFwiLi9SZWFjdE11bHRpQ2hpbGRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJlKFwiLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXJcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKFwiLi9pc0V2ZW50U3VwcG9ydGVkXCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBkZWxldGVMaXN0ZW5lciA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5kZWxldGVMaXN0ZW5lcjtcbnZhciBsaXN0ZW5UbyA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5saXN0ZW5UbztcbnZhciByZWdpc3RyYXRpb25OYW1lTW9kdWxlcyA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcztcblxuLy8gRm9yIHF1aWNrbHkgbWF0Y2hpbmcgY2hpbGRyZW4gdHlwZSwgdG8gdGVzdCBpZiBjYW4gYmUgdHJlYXRlZCBhcyBjb250ZW50LlxudmFyIENPTlRFTlRfVFlQRVMgPSB7J3N0cmluZyc6IHRydWUsICdudW1iZXInOiB0cnVlfTtcblxudmFyIFNUWUxFID0ga2V5T2Yoe3N0eWxlOiBudWxsfSk7XG5cbnZhciBFTEVNRU5UX05PREVfVFlQRSA9IDE7XG5cbi8qKlxuICogT3B0aW9uYWxseSBpbmplY3RhYmxlIG9wZXJhdGlvbnMgZm9yIG11dGF0aW5nIHRoZSBET01cbiAqL1xudmFyIEJhY2tlbmRJRE9wZXJhdGlvbnMgPSBudWxsO1xuXG4vKipcbiAqIEBwYXJhbSB7P29iamVjdH0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyhwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIE5vdGUgdGhlIHVzZSBvZiBgPT1gIHdoaWNoIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWQuXG4gIGlmIChwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHByb3BzLmNoaWxkcmVuID09IG51bGwsXG4gICAgICAnQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuJ1xuICAgICkgOiBpbnZhcmlhbnQocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmXG4gICAgICAnX19odG1sJyBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCxcbiAgICAgICdgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiAnICtcbiAgICAgICdQbGVhc2UgdmlzaXQgaHR0cHM6Ly9mYi5tZS9yZWFjdC1pbnZhcmlhbnQtZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgJyArXG4gICAgICAnZm9yIG1vcmUgaW5mb3JtYXRpb24uJ1xuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJlxuICAgICdfX2h0bWwnIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSk7XG4gIH1cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgcHJvcHMuaW5uZXJIVE1MID09IG51bGwsXG4gICAgICAnRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiAnICtcbiAgICAgICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nXG4gICAgKSA6IG51bGwpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgIXByb3BzLmNvbnRlbnRFZGl0YWJsZSB8fCBwcm9wcy5jaGlsZHJlbiA9PSBudWxsLFxuICAgICAgJ0EgY29tcG9uZW50IGlzIGBjb250ZW50RWRpdGFibGVgIGFuZCBjb250YWlucyBgY2hpbGRyZW5gIG1hbmFnZWQgYnkgJyArXG4gICAgICAnUmVhY3QuIEl0IGlzIG5vdyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IG5vbmUgb2YgJyArXG4gICAgICAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgK1xuICAgICAgJ3Byb2JhYmx5IG5vdCBpbnRlbnRpb25hbC4nXG4gICAgKSA6IG51bGwpO1xuICB9XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgcHJvcHMuc3R5bGUgPT0gbnVsbCB8fCB0eXBlb2YgcHJvcHMuc3R5bGUgPT09ICdvYmplY3QnLFxuICAgICdUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsICcgK1xuICAgICdub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgXFwnZW1cXCd9fSB3aGVuICcgK1xuICAgICd1c2luZyBKU1guJ1xuICApIDogaW52YXJpYW50KHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JykpO1xufVxuXG5mdW5jdGlvbiBwdXRMaXN0ZW5lcihpZCwgcmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIsIHRyYW5zYWN0aW9uKSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAvLyBJRTggaGFzIG5vIEFQSSBmb3IgZXZlbnQgY2FwdHVyaW5nIGFuZCB0aGUgYG9uU2Nyb2xsYCBldmVudCBkb2Vzbid0XG4gICAgLy8gYnViYmxlLlxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgcmVnaXN0cmF0aW9uTmFtZSAhPT0gJ29uU2Nyb2xsJyB8fCBpc0V2ZW50U3VwcG9ydGVkKCdzY3JvbGwnLCB0cnVlKSxcbiAgICAgICdUaGlzIGJyb3dzZXIgZG9lc25cXCd0IHN1cHBvcnQgdGhlIGBvblNjcm9sbGAgZXZlbnQnXG4gICAgKSA6IG51bGwpO1xuICB9XG4gIHZhciBjb250YWluZXIgPSBSZWFjdE1vdW50LmZpbmRSZWFjdENvbnRhaW5lckZvcklEKGlkKTtcbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIHZhciBkb2MgPSBjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFID9cbiAgICAgIGNvbnRhaW5lci5vd25lckRvY3VtZW50IDpcbiAgICAgIGNvbnRhaW5lcjtcbiAgICBsaXN0ZW5UbyhyZWdpc3RyYXRpb25OYW1lLCBkb2MpO1xuICB9XG4gIHRyYW5zYWN0aW9uLmdldFB1dExpc3RlbmVyUXVldWUoKS5lbnF1ZXVlUHV0TGlzdGVuZXIoXG4gICAgaWQsXG4gICAgcmVnaXN0cmF0aW9uTmFtZSxcbiAgICBsaXN0ZW5lclxuICApO1xufVxuXG4vLyBGb3IgSFRNTCwgY2VydGFpbiB0YWdzIHNob3VsZCBvbWl0IHRoZWlyIGNsb3NlIHRhZy4gV2Uga2VlcCBhIHdoaXRlbGlzdCBmb3Jcbi8vIHRob3NlIHNwZWNpYWwgY2FzZWQgdGFncy5cblxudmFyIG9taXR0ZWRDbG9zZVRhZ3MgPSB7XG4gICdhcmVhJzogdHJ1ZSxcbiAgJ2Jhc2UnOiB0cnVlLFxuICAnYnInOiB0cnVlLFxuICAnY29sJzogdHJ1ZSxcbiAgJ2VtYmVkJzogdHJ1ZSxcbiAgJ2hyJzogdHJ1ZSxcbiAgJ2ltZyc6IHRydWUsXG4gICdpbnB1dCc6IHRydWUsXG4gICdrZXlnZW4nOiB0cnVlLFxuICAnbGluayc6IHRydWUsXG4gICdtZXRhJzogdHJ1ZSxcbiAgJ3BhcmFtJzogdHJ1ZSxcbiAgJ3NvdXJjZSc6IHRydWUsXG4gICd0cmFjayc6IHRydWUsXG4gICd3YnInOiB0cnVlXG4gIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG59O1xuXG4vLyBXZSBhY2NlcHQgYW55IHRhZyB0byBiZSByZW5kZXJlZCBidXQgc2luY2UgdGhpcyBnZXRzIGluamVjdGVkIGludG8gYWJpdHJhcnlcbi8vIEhUTUwsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgaXQncyBhIHNhZmUgdGFnLlxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC8jTlQtTmFtZVxuXG52YXIgVkFMSURfVEFHX1JFR0VYID0gL15bYS16QS1aXVthLXpBLVo6X1xcLlxcLVxcZF0qJC87IC8vIFNpbXBsaWZpZWQgc3Vic2V0XG52YXIgdmFsaWRhdGVkVGFnQ2FjaGUgPSB7fTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZURhbmdlcm91c1RhZyh0YWcpIHtcbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZFRhZ0NhY2hlLCB0YWcpKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChWQUxJRF9UQUdfUkVHRVgudGVzdCh0YWcpLCAnSW52YWxpZCB0YWc6ICVzJywgdGFnKSA6IGludmFyaWFudChWQUxJRF9UQUdfUkVHRVgudGVzdCh0YWcpKSk7XG4gICAgdmFsaWRhdGVkVGFnQ2FjaGVbdGFnXSA9IHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFJlYWN0IGNsYXNzIHRoYXQgaXMgaWRlbXBvdGVudCBhbmQgY2FwYWJsZSBvZiBjb250YWluaW5nIG90aGVyXG4gKiBSZWFjdCBjb21wb25lbnRzLiBJdCBhY2NlcHRzIGV2ZW50IGxpc3RlbmVycyBhbmQgRE9NIHByb3BlcnRpZXMgdGhhdCBhcmVcbiAqIHZhbGlkIGFjY29yZGluZyB0byBgRE9NUHJvcGVydHlgLlxuICpcbiAqICAtIEV2ZW50IGxpc3RlbmVyczogYG9uQ2xpY2tgLCBgb25Nb3VzZURvd25gLCBldGMuXG4gKiAgLSBET00gcHJvcGVydGllczogYGNsYXNzTmFtZWAsIGBuYW1lYCwgYHRpdGxlYCwgZXRjLlxuICpcbiAqIFRoZSBgc3R5bGVgIHByb3BlcnR5IGZ1bmN0aW9ucyBkaWZmZXJlbnRseSBmcm9tIHRoZSBET00gQVBJLiBJdCBhY2NlcHRzIGFuXG4gKiBvYmplY3QgbWFwcGluZyBvZiBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcy5cbiAqXG4gKiBAY29uc3RydWN0b3IgUmVhY3RET01Db21wb25lbnRcbiAqIEBleHRlbmRzIFJlYWN0TXVsdGlDaGlsZFxuICovXG5mdW5jdGlvbiBSZWFjdERPTUNvbXBvbmVudCh0YWcpIHtcbiAgdmFsaWRhdGVEYW5nZXJvdXNUYWcodGFnKTtcbiAgdGhpcy5fdGFnID0gdGFnO1xuICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBudWxsO1xuICB0aGlzLl9yb290Tm9kZUlEID0gbnVsbDtcbn1cblxuUmVhY3RET01Db21wb25lbnQuZGlzcGxheU5hbWUgPSAnUmVhY3RET01Db21wb25lbnQnO1xuXG5SZWFjdERPTUNvbXBvbmVudC5NaXhpbiA9IHtcblxuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyByb290IHRhZyBtYXJrdXAgdGhlbiByZWN1cnNlcy4gVGhpcyBtZXRob2QgaGFzIHNpZGUgZWZmZWN0cyBhbmRcbiAgICogaXMgbm90IGlkZW1wb3RlbnQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIFRoZSByb290IERPTSBJRCBmb3IgdGhpcyBub2RlLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY29tcHV0ZWQgbWFya3VwLlxuICAgKi9cbiAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKHJvb3RJRCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB0aGlzLl9yb290Tm9kZUlEID0gcm9vdElEO1xuICAgIGFzc2VydFZhbGlkUHJvcHModGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMpO1xuICAgIHZhciBjbG9zZVRhZyA9IG9taXR0ZWRDbG9zZVRhZ3NbdGhpcy5fdGFnXSA/ICcnIDogJzwvJyArIHRoaXMuX3RhZyArICc+JztcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVycyh0cmFuc2FjdGlvbikgK1xuICAgICAgdGhpcy5fY3JlYXRlQ29udGVudE1hcmt1cCh0cmFuc2FjdGlvbiwgY29udGV4dCkgK1xuICAgICAgY2xvc2VUYWdcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIG9wZW4gdGFnIGFuZCBhbGwgYXR0cmlidXRlcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaGFzIHNpZGUgZWZmZWN0cyBiZWNhdXNlIGV2ZW50cyBnZXQgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogSXRlcmF0aW5nIG92ZXIgb2JqZWN0IHByb3BlcnRpZXMgaXMgZmFzdGVyIHRoYW4gaXRlcmF0aW5nIG92ZXIgYXJyYXlzLlxuICAgKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL29iai12cy1hcnItaXRlcmF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBvZiBvcGVuaW5nIHRhZy5cbiAgICovXG4gIF9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJzOiBmdW5jdGlvbih0cmFuc2FjdGlvbikge1xuICAgIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIHZhciByZXQgPSAnPCcgKyB0aGlzLl90YWc7XG5cbiAgICBmb3IgKHZhciBwcm9wS2V5IGluIHByb3BzKSB7XG4gICAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BLZXldO1xuICAgICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIHB1dExpc3RlbmVyKHRoaXMuX3Jvb3ROb2RlSUQsIHByb3BLZXksIHByb3BWYWx1ZSwgdHJhbnNhY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgICAgaWYgKHByb3BWYWx1ZSkge1xuICAgICAgICAgICAgcHJvcFZhbHVlID0gdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBhc3NpZ24oe30sIHByb3BzLnN0eWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvcFZhbHVlID0gQ1NTUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclN0eWxlcyhwcm9wVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtYXJrdXAgPVxuICAgICAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JQcm9wZXJ0eShwcm9wS2V5LCBwcm9wVmFsdWUpO1xuICAgICAgICBpZiAobWFya3VwKSB7XG4gICAgICAgICAgcmV0ICs9ICcgJyArIG1hcmt1cDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvciBzdGF0aWMgcGFnZXMsIG5vIG5lZWQgdG8gcHV0IFJlYWN0IElEIGFuZCBjaGVja3N1bS4gU2F2ZXMgbG90cyBvZlxuICAgIC8vIGJ5dGVzLlxuICAgIGlmICh0cmFuc2FjdGlvbi5yZW5kZXJUb1N0YXRpY01hcmt1cCkge1xuICAgICAgcmV0dXJuIHJldCArICc+JztcbiAgICB9XG5cbiAgICB2YXIgbWFya3VwRm9ySUQgPSBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9ySUQodGhpcy5fcm9vdE5vZGVJRCk7XG4gICAgcmV0dXJuIHJldCArICcgJyArIG1hcmt1cEZvcklEICsgJz4nO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIGNvbnRlbnQgYmV0d2VlbiB0aGUgdGFncy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4ge3N0cmluZ30gQ29udGVudCBtYXJrdXAuXG4gICAqL1xuICBfY3JlYXRlQ29udGVudE1hcmt1cDogZnVuY3Rpb24odHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgcHJlZml4ID0gJyc7XG4gICAgaWYgKHRoaXMuX3RhZyA9PT0gJ2xpc3RpbmcnIHx8XG4gICAgICAgIHRoaXMuX3RhZyA9PT0gJ3ByZScgfHxcbiAgICAgICAgdGhpcy5fdGFnID09PSAndGV4dGFyZWEnKSB7XG4gICAgICAvLyBBZGQgYW4gaW5pdGlhbCBuZXdsaW5lIGJlY2F1c2UgYnJvd3NlcnMgaWdub3JlIHRoZSBmaXJzdCBuZXdsaW5lIGluXG4gICAgICAvLyBhIDxsaXN0aW5nPiwgPHByZT4sIG9yIDx0ZXh0YXJlYT4gYXMgYW4gXCJhdXRob3JpbmcgY29udmVuaWVuY2VcIiAtLSBzZWVcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHkuXG4gICAgICBwcmVmaXggPSAnXFxuJztcbiAgICB9XG5cbiAgICB2YXIgcHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIC8vIEludGVudGlvbmFsIHVzZSBvZiAhPSB0byBhdm9pZCBjYXRjaGluZyB6ZXJvL2ZhbHNlLlxuICAgIHZhciBpbm5lckhUTUwgPSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTDtcbiAgICBpZiAoaW5uZXJIVE1MICE9IG51bGwpIHtcbiAgICAgIGlmIChpbm5lckhUTUwuX19odG1sICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGlubmVySFRNTC5fX2h0bWw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb250ZW50VG9Vc2UgPVxuICAgICAgICBDT05URU5UX1RZUEVTW3R5cGVvZiBwcm9wcy5jaGlsZHJlbl0gPyBwcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgICB2YXIgY2hpbGRyZW5Ub1VzZSA9IGNvbnRlbnRUb1VzZSAhPSBudWxsID8gbnVsbCA6IHByb3BzLmNoaWxkcmVuO1xuICAgICAgaWYgKGNvbnRlbnRUb1VzZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIoY29udGVudFRvVXNlKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW5Ub1VzZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBtb3VudEltYWdlcyA9IHRoaXMubW91bnRDaGlsZHJlbihcbiAgICAgICAgICBjaGlsZHJlblRvVXNlLFxuICAgICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArIG1vdW50SW1hZ2VzLmpvaW4oJycpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9LFxuXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uKG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50O1xuICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgdGhpcy51cGRhdGVDb21wb25lbnQodHJhbnNhY3Rpb24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBuYXRpdmUgRE9NIGNvbXBvbmVudCBhZnRlciBpdCBoYXMgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCBhbmRcbiAgICogYXR0YWNoZWQgdG8gdGhlIERPTS4gUmVjb25jaWxlcyB0aGUgcm9vdCBET00gbm9kZSwgdGhlbiByZWN1cnNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gcHJldkVsZW1lbnRcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50XG4gICAqIEBpbnRlcm5hbFxuICAgKiBAb3ZlcnJpZGFibGVcbiAgICovXG4gIHVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24odHJhbnNhY3Rpb24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCkge1xuICAgIGFzc2VydFZhbGlkUHJvcHModGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMpO1xuICAgIHRoaXMuX3VwZGF0ZURPTVByb3BlcnRpZXMocHJldkVsZW1lbnQucHJvcHMsIHRyYW5zYWN0aW9uKTtcbiAgICB0aGlzLl91cGRhdGVET01DaGlsZHJlbihwcmV2RWxlbWVudC5wcm9wcywgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGVzIHRoZSBwcm9wZXJ0aWVzIGJ5IGRldGVjdGluZyBkaWZmZXJlbmNlcyBpbiBwcm9wZXJ0eSB2YWx1ZXMgYW5kXG4gICAqIHVwZGF0aW5nIHRoZSBET00gYXMgbmVjZXNzYXJ5LiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBzaW5nbGUgbW9zdFxuICAgKiBjcml0aWNhbCBwYXRoIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFRPRE86IEJlbmNobWFyayB3aGV0aGVyIGNoZWNraW5nIGZvciBjaGFuZ2VkIHZhbHVlcyBpbiBtZW1vcnkgYWN0dWFsbHlcbiAgICogICAgICAgaW1wcm92ZXMgcGVyZm9ybWFuY2UgKGVzcGVjaWFsbHkgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnRzKS5cbiAgICogVE9ETzogQmVuY2htYXJrIHRoZSBlZmZlY3RzIG9mIHB1dHRpbmcgdGhpcyBhdCB0aGUgdG9wIHNpbmNlIDk5JSBvZiBwcm9wc1xuICAgKiAgICAgICBkbyBub3QgY2hhbmdlIGZvciBhIGdpdmVuIHJlY29uY2lsaWF0aW9uLlxuICAgKiBUT0RPOiBCZW5jaG1hcmsgYXJlYXMgdGhhdCBjYW4gYmUgaW1wcm92ZWQgd2l0aCBjYWNoaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbGFzdFByb3BzXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICovXG4gIF91cGRhdGVET01Qcm9wZXJ0aWVzOiBmdW5jdGlvbihsYXN0UHJvcHMsIHRyYW5zYWN0aW9uKSB7XG4gICAgdmFyIG5leHRQcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIHZhciBwcm9wS2V5O1xuICAgIHZhciBzdHlsZU5hbWU7XG4gICAgdmFyIHN0eWxlVXBkYXRlcztcbiAgICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgICBpZiAobmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8XG4gICAgICAgICAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIHZhciBsYXN0U3R5bGUgPSB0aGlzLl9wcmV2aW91c1N0eWxlQ29weTtcbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFN0eWxlKSB7XG4gICAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGRlbGV0ZUxpc3RlbmVyKHRoaXMuX3Jvb3ROb2RlSUQsIHByb3BLZXkpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtwcm9wS2V5XSB8fFxuICAgICAgICAgIERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKHByb3BLZXkpKSB7XG4gICAgICAgIEJhY2tlbmRJRE9wZXJhdGlvbnMuZGVsZXRlUHJvcGVydHlCeUlEKFxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgICAgcHJvcEtleVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG4gICAgICB2YXIgbGFzdFByb3AgPSBwcm9wS2V5ID09PSBTVFlMRSA/XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5IDpcbiAgICAgICAgbGFzdFByb3BzW3Byb3BLZXldO1xuICAgICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIG5leHRQcm9wID0gdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBhc3NpZ24oe30sIG5leHRQcm9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RQcm9wKSB7XG4gICAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICAgICghbmV4dFByb3AgfHwgIW5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHN0eWxlVXBkYXRlcyB8fCB7fTtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVXBkYXRlIHN0eWxlcyB0aGF0IGNoYW5nZWQgc2luY2UgYGxhc3RQcm9wYC5cbiAgICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgICAgaWYgKG5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiZcbiAgICAgICAgICAgICAgICBsYXN0UHJvcFtzdHlsZU5hbWVdICE9PSBuZXh0UHJvcFtzdHlsZU5hbWVdKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHN0eWxlVXBkYXRlcyB8fCB7fTtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSBuZXh0UHJvcFtzdHlsZU5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBuZXh0UHJvcDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBwdXRMaXN0ZW5lcih0aGlzLl9yb290Tm9kZUlELCBwcm9wS2V5LCBuZXh0UHJvcCwgdHJhbnNhY3Rpb24pO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtwcm9wS2V5XSB8fFxuICAgICAgICAgIERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKHByb3BLZXkpKSB7XG4gICAgICAgIEJhY2tlbmRJRE9wZXJhdGlvbnMudXBkYXRlUHJvcGVydHlCeUlEKFxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICBuZXh0UHJvcFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3R5bGVVcGRhdGVzKSB7XG4gICAgICBCYWNrZW5kSURPcGVyYXRpb25zLnVwZGF0ZVN0eWxlc0J5SUQoXG4gICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgIHN0eWxlVXBkYXRlc1xuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZXMgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHZhcmlvdXMgcHJvcGVydGllcyB0aGF0IGFmZmVjdCB0aGVcbiAgICogY2hpbGRyZW4gY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGxhc3RQcm9wc1xuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqL1xuICBfdXBkYXRlRE9NQ2hpbGRyZW46IGZ1bmN0aW9uKGxhc3RQcm9wcywgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgbmV4dFByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICB2YXIgbGFzdENvbnRlbnQgPVxuICAgICAgQ09OVEVOVF9UWVBFU1t0eXBlb2YgbGFzdFByb3BzLmNoaWxkcmVuXSA/IGxhc3RQcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgdmFyIG5leHRDb250ZW50ID1cbiAgICAgIENPTlRFTlRfVFlQRVNbdHlwZW9mIG5leHRQcm9wcy5jaGlsZHJlbl0gPyBuZXh0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuXG4gICAgdmFyIGxhc3RIdG1sID1cbiAgICAgIGxhc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgbGFzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbDtcbiAgICB2YXIgbmV4dEh0bWwgPVxuICAgICAgbmV4dFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmXG4gICAgICBuZXh0UHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sO1xuXG4gICAgLy8gTm90ZSB0aGUgdXNlIG9mIGAhPWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cbiAgICB2YXIgbGFzdENoaWxkcmVuID0gbGFzdENvbnRlbnQgIT0gbnVsbCA/IG51bGwgOiBsYXN0UHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRDb250ZW50ICE9IG51bGwgPyBudWxsIDogbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgLy8gSWYgd2UncmUgc3dpdGNoaW5nIGZyb20gY2hpbGRyZW4gdG8gY29udGVudC9odG1sIG9yIHZpY2UgdmVyc2EsIHJlbW92ZVxuICAgIC8vIHRoZSBvbGQgY29udGVudFxuICAgIHZhciBsYXN0SGFzQ29udGVudE9ySHRtbCA9IGxhc3RDb250ZW50ICE9IG51bGwgfHwgbGFzdEh0bWwgIT0gbnVsbDtcbiAgICB2YXIgbmV4dEhhc0NvbnRlbnRPckh0bWwgPSBuZXh0Q29udGVudCAhPSBudWxsIHx8IG5leHRIdG1sICE9IG51bGw7XG4gICAgaWYgKGxhc3RDaGlsZHJlbiAhPSBudWxsICYmIG5leHRDaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKG51bGwsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKGxhc3RIYXNDb250ZW50T3JIdG1sICYmICFuZXh0SGFzQ29udGVudE9ySHRtbCkge1xuICAgICAgdGhpcy51cGRhdGVUZXh0Q29udGVudCgnJyk7XG4gICAgfVxuXG4gICAgaWYgKG5leHRDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIGlmIChsYXN0Q29udGVudCAhPT0gbmV4dENvbnRlbnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZXh0Q29udGVudCgnJyArIG5leHRDb250ZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgIGlmIChsYXN0SHRtbCAhPT0gbmV4dEh0bWwpIHtcbiAgICAgICAgQmFja2VuZElET3BlcmF0aW9ucy51cGRhdGVJbm5lckhUTUxCeUlEKFxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgICAgbmV4dEh0bWxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRDaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKG5leHRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGVzdHJveXMgYWxsIGV2ZW50IHJlZ2lzdHJhdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UuIERvZXMgbm90IHJlbW92ZSBmcm9tXG4gICAqIHRoZSBET00uIFRoYXQgbXVzdCBiZSBkb25lIGJ5IHRoZSBwYXJlbnQuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy51bm1vdW50Q2hpbGRyZW4oKTtcbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuZGVsZXRlQWxsTGlzdGVuZXJzKHRoaXMuX3Jvb3ROb2RlSUQpO1xuICAgIFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50LnVubW91bnRJREZyb21FbnZpcm9ubWVudCh0aGlzLl9yb290Tm9kZUlEKTtcbiAgICB0aGlzLl9yb290Tm9kZUlEID0gbnVsbDtcbiAgfVxuXG59O1xuXG5SZWFjdFBlcmYubWVhc3VyZU1ldGhvZHMoUmVhY3RET01Db21wb25lbnQsICdSZWFjdERPTUNvbXBvbmVudCcsIHtcbiAgbW91bnRDb21wb25lbnQ6ICdtb3VudENvbXBvbmVudCcsXG4gIHVwZGF0ZUNvbXBvbmVudDogJ3VwZGF0ZUNvbXBvbmVudCdcbn0pO1xuXG5hc3NpZ24oXG4gIFJlYWN0RE9NQ29tcG9uZW50LnByb3RvdHlwZSxcbiAgUmVhY3RET01Db21wb25lbnQuTWl4aW4sXG4gIFJlYWN0TXVsdGlDaGlsZC5NaXhpblxuKTtcblxuUmVhY3RET01Db21wb25lbnQuaW5qZWN0aW9uID0ge1xuICBpbmplY3RJRE9wZXJhdGlvbnM6IGZ1bmN0aW9uKElET3BlcmF0aW9ucykge1xuICAgIFJlYWN0RE9NQ29tcG9uZW50LkJhY2tlbmRJRE9wZXJhdGlvbnMgPSBCYWNrZW5kSURPcGVyYXRpb25zID0gSURPcGVyYXRpb25zO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NQ29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDFEYjIxd2IyNWxiblF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBYRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvdlhHNWNiaThxSUdkc2IySmhiQ0JvWVhOUGQyNVFjbTl3WlhKMGVUcDBjblZsSUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUVOVFUxQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBOVFUxQnliM0JsY25SNVQzQmxjbUYwYVc5dWMxd2lLVHRjYm5aaGNpQkVUMDFRY205d1pYSjBlU0E5SUhKbGNYVnBjbVVvWENJdUwwUlBUVkJ5YjNCbGNuUjVYQ0lwTzF4dWRtRnlJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMFJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1YzF3aUtUdGNiblpoY2lCU1pXRmpkRUp5YjNkelpYSkZkbVZ1ZEVWdGFYUjBaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVKeWIzZHpaWEpGZG1WdWRFVnRhWFIwWlhKY0lpazdYRzUyWVhJZ1VtVmhZM1JEYjIxd2IyNWxiblJDY205M2MyVnlSVzUyYVhKdmJtMWxiblFnUFZ4dUlDQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiWEJ2Ym1WdWRFSnliM2R6WlhKRmJuWnBjbTl1YldWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEUxdmRXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JOYjNWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEUxMWJIUnBRMmhwYkdRZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFMTFiSFJwUTJocGJHUmNJaWs3WEc1MllYSWdVbVZoWTNSUVpYSm1JRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JRWlhKbVhDSXBPMXh1WEc1MllYSWdZWE56YVdkdUlEMGdjbVZ4ZFdseVpTaGNJaTR2VDJKcVpXTjBMbUZ6YzJsbmJsd2lLVHRjYm5aaGNpQmxjMk5oY0dWVVpYaDBRMjl1ZEdWdWRFWnZja0p5YjNkelpYSWdQU0J5WlhGMWFYSmxLRndpTGk5bGMyTmhjR1ZVWlhoMFEyOXVkR1Z1ZEVadmNrSnliM2R6WlhKY0lpazdYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVkbUZ5SUdselJYWmxiblJUZFhCd2IzSjBaV1FnUFNCeVpYRjFhWEpsS0Z3aUxpOXBjMFYyWlc1MFUzVndjRzl5ZEdWa1hDSXBPMXh1ZG1GeUlHdGxlVTltSUQwZ2NtVnhkV2x5WlNoY0lpNHZhMlY1VDJaY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JuWmhjaUJrWld4bGRHVk1hWE4wWlc1bGNpQTlJRkpsWVdOMFFuSnZkM05sY2tWMlpXNTBSVzFwZEhSbGNpNWtaV3hsZEdWTWFYTjBaVzVsY2p0Y2JuWmhjaUJzYVhOMFpXNVVieUE5SUZKbFlXTjBRbkp2ZDNObGNrVjJaVzUwUlcxcGRIUmxjaTVzYVhOMFpXNVVienRjYm5aaGNpQnlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsY3lBOUlGSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2k1eVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjenRjYmx4dUx5OGdSbTl5SUhGMWFXTnJiSGtnYldGMFkyaHBibWNnWTJocGJHUnlaVzRnZEhsd1pTd2dkRzhnZEdWemRDQnBaaUJqWVc0Z1ltVWdkSEpsWVhSbFpDQmhjeUJqYjI1MFpXNTBMbHh1ZG1GeUlFTlBUbFJGVGxSZlZGbFFSVk1nUFNCN0ozTjBjbWx1WnljNklIUnlkV1VzSUNkdWRXMWlaWEluT2lCMGNuVmxmVHRjYmx4dWRtRnlJRk5VV1V4RklEMGdhMlY1VDJZb2UzTjBlV3hsT2lCdWRXeHNmU2s3WEc1Y2JuWmhjaUJGVEVWTlJVNVVYMDVQUkVWZlZGbFFSU0E5SURFN1hHNWNiaThxS2x4dUlDb2dUM0IwYVc5dVlXeHNlU0JwYm1wbFkzUmhZbXhsSUc5d1pYSmhkR2x2Ym5NZ1ptOXlJRzExZEdGMGFXNW5JSFJvWlNCRVQwMWNiaUFxTDF4dWRtRnlJRUpoWTJ0bGJtUkpSRTl3WlhKaGRHbHZibk1nUFNCdWRXeHNPMXh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3UDI5aWFtVmpkSDBnY0hKdmNITmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1lYTnpaWEowVm1Gc2FXUlFjbTl3Y3lod2NtOXdjeWtnZTF4dUlDQnBaaUFvSVhCeWIzQnpLU0I3WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc0Z0lDOHZJRTV2ZEdVZ2RHaGxJSFZ6WlNCdlppQmdQVDFnSUhkb2FXTm9JR05vWldOcmN5Qm1iM0lnYm5Wc2JDQnZjaUIxYm1SbFptbHVaV1F1WEc0Z0lHbG1JQ2h3Y205d2N5NWtZVzVuWlhKdmRYTnNlVk5sZEVsdWJtVnlTRlJOVENBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJSEJ5YjNCekxtTm9hV3hrY21WdUlEMDlJRzUxYkd3c1hHNGdJQ0FnSUNBblEyRnVJRzl1YkhrZ2MyVjBJRzl1WlNCdlppQmdZMmhwYkdSeVpXNWdJRzl5SUdCd2NtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRHQXVKMXh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvY0hKdmNITXVZMmhwYkdSeVpXNGdQVDBnYm5Wc2JDa3BPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCMGVYQmxiMllnY0hKdmNITXVaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV3Z1BUMDlJQ2R2WW1wbFkzUW5JQ1ltWEc0Z0lDQWdJQ0FuWDE5b2RHMXNKeUJwYmlCd2NtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRDeGNiaUFnSUNBZ0lDZGdjSEp2Y0hNdVpHRnVaMlZ5YjNWemJIbFRaWFJKYm01bGNraFVUVXhnSUcxMWMzUWdZbVVnYVc0Z2RHaGxJR1p2Y20wZ1lIdGZYMmgwYld3NklDNHVMbjFnTGlBbklDdGNiaUFnSUNBZ0lDZFFiR1ZoYzJVZ2RtbHphWFFnYUhSMGNITTZMeTltWWk1dFpTOXlaV0ZqZEMxcGJuWmhjbWxoYm5RdFpHRnVaMlZ5YjNWemJIa3RjMlYwTFdsdWJtVnlMV2gwYld3Z0p5QXJYRzRnSUNBZ0lDQW5abTl5SUcxdmNtVWdhVzVtYjNKdFlYUnBiMjR1SjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2RIbHdaVzltSUhCeWIzQnpMbVJoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTUlEMDlQU0FuYjJKcVpXTjBKeUFtSmx4dUlDQWdJQ2RmWDJoMGJXd25JR2x1SUhCeWIzQnpMbVJoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTUtTazdYRzRnSUgxY2JpQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnY0hKdmNITXVhVzV1WlhKSVZFMU1JRDA5SUc1MWJHd3NYRzRnSUNBZ0lDQW5SR2x5WldOMGJIa2djMlYwZEdsdVp5QndjbTl3WlhKMGVTQmdhVzV1WlhKSVZFMU1ZQ0JwY3lCdWIzUWdjR1Z5YldsMGRHVmtMaUFuSUN0Y2JpQWdJQ0FnSUNkR2IzSWdiVzl5WlNCcGJtWnZjbTFoZEdsdmJpd2diRzl2YTNWd0lHUnZZM1Z0Wlc1MFlYUnBiMjRnYjI0Z1lHUmhibWRsY205MWMyeDVVMlYwU1c1dVpYSklWRTFNWUM0blhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lYQnliM0J6TG1OdmJuUmxiblJGWkdsMFlXSnNaU0I4ZkNCd2NtOXdjeTVqYUdsc1pISmxiaUE5UFNCdWRXeHNMRnh1SUNBZ0lDQWdKMEVnWTI5dGNHOXVaVzUwSUdseklHQmpiMjUwWlc1MFJXUnBkR0ZpYkdWZ0lHRnVaQ0JqYjI1MFlXbHVjeUJnWTJocGJHUnlaVzVnSUcxaGJtRm5aV1FnWW5rZ0p5QXJYRzRnSUNBZ0lDQW5VbVZoWTNRdUlFbDBJR2x6SUc1dmR5QjViM1Z5SUhKbGMzQnZibk5wWW1sc2FYUjVJSFJ2SUdkMVlYSmhiblJsWlNCMGFHRjBJRzV2Ym1VZ2IyWWdKeUFyWEc0Z0lDQWdJQ0FuZEdodmMyVWdibTlrWlhNZ1lYSmxJSFZ1Wlhod1pXTjBaV1JzZVNCdGIyUnBabWxsWkNCdmNpQmtkWEJzYVdOaGRHVmtMaUJVYUdseklHbHpJQ2NnSzF4dUlDQWdJQ0FnSjNCeWIySmhZbXg1SUc1dmRDQnBiblJsYm5ScGIyNWhiQzRuWEc0Z0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNCOVhHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ2NISnZjSE11YzNSNWJHVWdQVDBnYm5Wc2JDQjhmQ0IwZVhCbGIyWWdjSEp2Y0hNdWMzUjViR1VnUFQwOUlDZHZZbXBsWTNRbkxGeHVJQ0FnSUNkVWFHVWdZSE4wZVd4bFlDQndjbTl3SUdWNGNHVmpkSE1nWVNCdFlYQndhVzVuSUdaeWIyMGdjM1I1YkdVZ2NISnZjR1Z5ZEdsbGN5QjBieUIyWVd4MVpYTXNJQ2NnSzF4dUlDQWdJQ2R1YjNRZ1lTQnpkSEpwYm1jdUlFWnZjaUJsZUdGdGNHeGxMQ0J6ZEhsc1pUMTdlMjFoY21kcGJsSnBaMmgwT2lCemNHRmphVzVuSUNzZ1hGd25aVzFjWENkOWZTQjNhR1Z1SUNjZ0sxeHVJQ0FnSUNkMWMybHVaeUJLVTFndUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIQnliM0J6TG5OMGVXeGxJRDA5SUc1MWJHd2dmSHdnZEhsd1pXOW1JSEJ5YjNCekxuTjBlV3hsSUQwOVBTQW5iMkpxWldOMEp5a3BPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQndkWFJNYVhOMFpXNWxjaWhwWkN3Z2NtVm5hWE4wY21GMGFXOXVUbUZ0WlN3Z2JHbHpkR1Z1WlhJc0lIUnlZVzV6WVdOMGFXOXVLU0I3WEc0Z0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBdkx5QkpSVGdnYUdGeklHNXZJRUZRU1NCbWIzSWdaWFpsYm5RZ1kyRndkSFZ5YVc1bklHRnVaQ0IwYUdVZ1lHOXVVMk55YjJ4c1lDQmxkbVZ1ZENCa2IyVnpiaWQwWEc0Z0lDQWdMeThnWW5WaVlteGxMbHh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnY21WbmFYTjBjbUYwYVc5dVRtRnRaU0FoUFQwZ0oyOXVVMk55YjJ4c0p5QjhmQ0JwYzBWMlpXNTBVM1Z3Y0c5eWRHVmtLQ2R6WTNKdmJHd25MQ0IwY25WbEtTeGNiaUFnSUNBZ0lDZFVhR2x6SUdKeWIzZHpaWElnWkc5bGMyNWNYQ2QwSUhOMWNIQnZjblFnZEdobElHQnZibE5qY205c2JHQWdaWFpsYm5RblhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQjlYRzRnSUhaaGNpQmpiMjUwWVdsdVpYSWdQU0JTWldGamRFMXZkVzUwTG1acGJtUlNaV0ZqZEVOdmJuUmhhVzVsY2tadmNrbEVLR2xrS1R0Y2JpQWdhV1lnS0dOdmJuUmhhVzVsY2lrZ2UxeHVJQ0FnSUhaaGNpQmtiMk1nUFNCamIyNTBZV2x1WlhJdWJtOWtaVlI1Y0dVZ1BUMDlJRVZNUlUxRlRsUmZUazlFUlY5VVdWQkZJRDljYmlBZ0lDQWdJR052Ym5SaGFXNWxjaTV2ZDI1bGNrUnZZM1Z0Wlc1MElEcGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNqdGNiaUFnSUNCc2FYTjBaVzVVYnloeVpXZHBjM1J5WVhScGIyNU9ZVzFsTENCa2IyTXBPMXh1SUNCOVhHNGdJSFJ5WVc1ellXTjBhVzl1TG1kbGRGQjFkRXhwYzNSbGJtVnlVWFZsZFdVb0tTNWxibkYxWlhWbFVIVjBUR2x6ZEdWdVpYSW9YRzRnSUNBZ2FXUXNYRzRnSUNBZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlN4Y2JpQWdJQ0JzYVhOMFpXNWxjbHh1SUNBcE8xeHVmVnh1WEc0dkx5QkdiM0lnU0ZSTlRDd2dZMlZ5ZEdGcGJpQjBZV2R6SUhOb2IzVnNaQ0J2YldsMElIUm9aV2x5SUdOc2IzTmxJSFJoWnk0Z1YyVWdhMlZsY0NCaElIZG9hWFJsYkdsemRDQm1iM0pjYmk4dklIUm9iM05sSUhOd1pXTnBZV3dnWTJGelpXUWdkR0ZuY3k1Y2JseHVkbUZ5SUc5dGFYUjBaV1JEYkc5elpWUmhaM01nUFNCN1hHNGdJQ2RoY21WaEp6b2dkSEoxWlN4Y2JpQWdKMkpoYzJVbk9pQjBjblZsTEZ4dUlDQW5ZbkluT2lCMGNuVmxMRnh1SUNBblkyOXNKem9nZEhKMVpTeGNiaUFnSjJWdFltVmtKem9nZEhKMVpTeGNiaUFnSjJoeUp6b2dkSEoxWlN4Y2JpQWdKMmx0WnljNklIUnlkV1VzWEc0Z0lDZHBibkIxZENjNklIUnlkV1VzWEc0Z0lDZHJaWGxuWlc0bk9pQjBjblZsTEZ4dUlDQW5iR2x1YXljNklIUnlkV1VzWEc0Z0lDZHRaWFJoSnpvZ2RISjFaU3hjYmlBZ0ozQmhjbUZ0SnpvZ2RISjFaU3hjYmlBZ0ozTnZkWEpqWlNjNklIUnlkV1VzWEc0Z0lDZDBjbUZqYXljNklIUnlkV1VzWEc0Z0lDZDNZbkluT2lCMGNuVmxYRzRnSUM4dklFNVBWRVU2SUcxbGJuVnBkR1Z0SjNNZ1kyeHZjMlVnZEdGbklITm9iM1ZzWkNCaVpTQnZiV2wwZEdWa0xDQmlkWFFnZEdoaGRDQmpZWFZ6WlhNZ2NISnZZbXhsYlhNdVhHNTlPMXh1WEc0dkx5QlhaU0JoWTJObGNIUWdZVzU1SUhSaFp5QjBieUJpWlNCeVpXNWtaWEpsWkNCaWRYUWdjMmx1WTJVZ2RHaHBjeUJuWlhSeklHbHVhbVZqZEdWa0lHbHVkRzhnWVdKcGRISmhjbmxjYmk4dklFaFVUVXdzSUhkbElIZGhiblFnZEc4Z2JXRnJaU0J6ZFhKbElIUm9ZWFFnYVhRbmN5QmhJSE5oWm1VZ2RHRm5MbHh1THk4Z2FIUjBjRG92TDNkM2R5NTNNeTV2Y21jdlZGSXZVa1ZETFhodGJDOGpUbFF0VG1GdFpWeHVYRzUyWVhJZ1ZrRk1TVVJmVkVGSFgxSkZSMFZZSUQwZ0wxNWJZUzE2UVMxYVhWdGhMWHBCTFZvNlgxeGNMbHhjTFZ4Y1pGMHFKQzg3SUM4dklGTnBiWEJzYVdacFpXUWdjM1ZpYzJWMFhHNTJZWElnZG1Gc2FXUmhkR1ZrVkdGblEyRmphR1VnUFNCN2ZUdGNiblpoY2lCb1lYTlBkMjVRY205d1pYSjBlU0E5SUh0OUxtaGhjMDkzYmxCeWIzQmxjblI1TzF4dVhHNW1kVzVqZEdsdmJpQjJZV3hwWkdGMFpVUmhibWRsY205MWMxUmhaeWgwWVdjcElIdGNiaUFnYVdZZ0tDRm9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLSFpoYkdsa1lYUmxaRlJoWjBOaFkyaGxMQ0IwWVdjcEtTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoV1FVeEpSRjlVUVVkZlVrVkhSVmd1ZEdWemRDaDBZV2NwTENBblNXNTJZV3hwWkNCMFlXYzZJQ1Z6Snl3Z2RHRm5LU0E2SUdsdWRtRnlhV0Z1ZENoV1FVeEpSRjlVUVVkZlVrVkhSVmd1ZEdWemRDaDBZV2NwS1NrN1hHNGdJQ0FnZG1Gc2FXUmhkR1ZrVkdGblEyRmphR1ZiZEdGblhTQTlJSFJ5ZFdVN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdWeklHRWdibVYzSUZKbFlXTjBJR05zWVhOeklIUm9ZWFFnYVhNZ2FXUmxiWEJ2ZEdWdWRDQmhibVFnWTJGd1lXSnNaU0J2WmlCamIyNTBZV2x1YVc1bklHOTBhR1Z5WEc0Z0tpQlNaV0ZqZENCamIyMXdiMjVsYm5SekxpQkpkQ0JoWTJObGNIUnpJR1YyWlc1MElHeHBjM1JsYm1WeWN5QmhibVFnUkU5TklIQnliM0JsY25ScFpYTWdkR2hoZENCaGNtVmNiaUFxSUhaaGJHbGtJR0ZqWTI5eVpHbHVaeUIwYnlCZ1JFOU5VSEp2Y0dWeWRIbGdMbHh1SUNwY2JpQXFJQ0F0SUVWMlpXNTBJR3hwYzNSbGJtVnljem9nWUc5dVEyeHBZMnRnTENCZ2IyNU5iM1Z6WlVSdmQyNWdMQ0JsZEdNdVhHNGdLaUFnTFNCRVQwMGdjSEp2Y0dWeWRHbGxjem9nWUdOc1lYTnpUbUZ0WldBc0lHQnVZVzFsWUN3Z1lIUnBkR3hsWUN3Z1pYUmpMbHh1SUNwY2JpQXFJRlJvWlNCZ2MzUjViR1ZnSUhCeWIzQmxjblI1SUdaMWJtTjBhVzl1Y3lCa2FXWm1aWEpsYm5Sc2VTQm1jbTl0SUhSb1pTQkVUMDBnUVZCSkxpQkpkQ0JoWTJObGNIUnpJR0Z1WEc0Z0tpQnZZbXBsWTNRZ2JXRndjR2x1WnlCdlppQnpkSGxzWlNCd2NtOXdaWEowYVdWeklIUnZJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0lnVW1WaFkzUkVUMDFEYjIxd2IyNWxiblJjYmlBcUlFQmxlSFJsYm1SeklGSmxZV04wVFhWc2RHbERhR2xzWkZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJTWldGamRFUlBUVU52YlhCdmJtVnVkQ2gwWVdjcElIdGNiaUFnZG1Gc2FXUmhkR1ZFWVc1blpYSnZkWE5VWVdjb2RHRm5LVHRjYmlBZ2RHaHBjeTVmZEdGbklEMGdkR0ZuTzF4dUlDQjBhR2x6TGw5eVpXNWtaWEpsWkVOb2FXeGtjbVZ1SUQwZ2JuVnNiRHRjYmlBZ2RHaHBjeTVmY0hKbGRtbHZkWE5UZEhsc1pVTnZjSGtnUFNCdWRXeHNPMXh1SUNCMGFHbHpMbDl5YjI5MFRtOWtaVWxFSUQwZ2JuVnNiRHRjYm4xY2JseHVVbVZoWTNSRVQwMURiMjF3YjI1bGJuUXVaR2x6Y0d4aGVVNWhiV1VnUFNBblVtVmhZM1JFVDAxRGIyMXdiMjVsYm5Rbk8xeHVYRzVTWldGamRFUlBUVU52YlhCdmJtVnVkQzVOYVhocGJpQTlJSHRjYmx4dUlDQmpiMjV6ZEhKMVkzUTZJR1oxYm1OMGFXOXVLR1ZzWlcxbGJuUXBJSHRjYmlBZ0lDQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQ0E5SUdWc1pXMWxiblE3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFZGxibVZ5WVhSbGN5QnliMjkwSUhSaFp5QnRZWEpyZFhBZ2RHaGxiaUJ5WldOMWNuTmxjeTRnVkdocGN5QnRaWFJvYjJRZ2FHRnpJSE5wWkdVZ1pXWm1aV04wY3lCaGJtUmNiaUFnSUNvZ2FYTWdibTkwSUdsa1pXMXdiM1JsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NtOXZkRWxFSUZSb1pTQnliMjkwSUVSUFRTQkpSQ0JtYjNJZ2RHaHBjeUJ1YjJSbExseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU4VW1WaFkzUlRaWEoyWlhKU1pXNWtaWEpwYm1kVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZTQlVhR1VnWTI5dGNIVjBaV1FnYldGeWEzVndMbHh1SUNBZ0tpOWNiaUFnYlc5MWJuUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLSEp2YjNSSlJDd2dkSEpoYm5OaFkzUnBiMjRzSUdOdmJuUmxlSFFwSUh0Y2JpQWdJQ0IwYUdsekxsOXliMjkwVG05a1pVbEVJRDBnY205dmRFbEVPMXh1SUNBZ0lHRnpjMlZ5ZEZaaGJHbGtVSEp2Y0hNb2RHaHBjeTVmWTNWeWNtVnVkRVZzWlcxbGJuUXVjSEp2Y0hNcE8xeHVJQ0FnSUhaaGNpQmpiRzl6WlZSaFp5QTlJRzl0YVhSMFpXUkRiRzl6WlZSaFozTmJkR2hwY3k1ZmRHRm5YU0EvSUNjbklEb2dKend2SnlBcklIUm9hWE11WDNSaFp5QXJJQ2MrSnp0Y2JpQWdJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lDQWdkR2hwY3k1ZlkzSmxZWFJsVDNCbGJsUmhaMDFoY210MWNFRnVaRkIxZEV4cGMzUmxibVZ5Y3loMGNtRnVjMkZqZEdsdmJpa2dLMXh1SUNBZ0lDQWdkR2hwY3k1ZlkzSmxZWFJsUTI5dWRHVnVkRTFoY210MWNDaDBjbUZ1YzJGamRHbHZiaXdnWTI5dWRHVjRkQ2tnSzF4dUlDQWdJQ0FnWTJ4dmMyVlVZV2RjYmlBZ0lDQXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGNtVmhkR1Z6SUcxaGNtdDFjQ0JtYjNJZ2RHaGxJRzl3Wlc0Z2RHRm5JR0Z1WkNCaGJHd2dZWFIwY21saWRYUmxjeTVjYmlBZ0lDcGNiaUFnSUNvZ1ZHaHBjeUJ0WlhSb2IyUWdhR0Z6SUhOcFpHVWdaV1ptWldOMGN5QmlaV05oZFhObElHVjJaVzUwY3lCblpYUWdjbVZuYVhOMFpYSmxaQzVjYmlBZ0lDcGNiaUFnSUNvZ1NYUmxjbUYwYVc1bklHOTJaWElnYjJKcVpXTjBJSEJ5YjNCbGNuUnBaWE1nYVhNZ1ptRnpkR1Z5SUhSb1lXNGdhWFJsY21GMGFXNW5JRzkyWlhJZ1lYSnlZWGx6TGx4dUlDQWdLaUJBYzJWbElHaDBkSEE2THk5cWMzQmxjbVl1WTI5dEwyOWlhaTEyY3kxaGNuSXRhWFJsY21GMGFXOXVYRzRnSUNBcVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJueFNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1ZlNCMGNtRnVjMkZqZEdsdmJseHVJQ0FnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5SUUxaGNtdDFjQ0J2WmlCdmNHVnVhVzVuSUhSaFp5NWNiaUFnSUNvdlhHNGdJRjlqY21WaGRHVlBjR1Z1VkdGblRXRnlhM1Z3UVc1a1VIVjBUR2x6ZEdWdVpYSnpPaUJtZFc1amRHbHZiaWgwY21GdWMyRmpkR2x2YmlrZ2UxeHVJQ0FnSUhaaGNpQndjbTl3Y3lBOUlIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMbkJ5YjNCek8xeHVJQ0FnSUhaaGNpQnlaWFFnUFNBblBDY2dLeUIwYUdsekxsOTBZV2M3WEc1Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3Y205d1MyVjVJR2x1SUhCeWIzQnpLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lYQnliM0J6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZG1GeUlIQnliM0JXWVd4MVpTQTlJSEJ5YjNCelczQnliM0JMWlhsZE8xeHVJQ0FnSUNBZ2FXWWdLSEJ5YjNCV1lXeDFaU0E5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tISmxaMmx6ZEhKaGRHbHZiazVoYldWTmIyUjFiR1Z6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUhCMWRFeHBjM1JsYm1WeUtIUm9hWE11WDNKdmIzUk9iMlJsU1VRc0lIQnliM0JMWlhrc0lIQnliM0JXWVd4MVpTd2dkSEpoYm5OaFkzUnBiMjRwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIQnliM0JMWlhrZ1BUMDlJRk5VV1V4RktTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tIQnliM0JXWVd4MVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NISnZjRlpoYkhWbElEMGdkR2hwY3k1ZmNISmxkbWx2ZFhOVGRIbHNaVU52Y0hrZ1BTQmhjM05wWjI0b2UzMHNJSEJ5YjNCekxuTjBlV3hsS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNGWmhiSFZsSUQwZ1ExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpMbU55WldGMFpVMWhjbXQxY0VadmNsTjBlV3hsY3lod2NtOXdWbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFpoY2lCdFlYSnJkWEFnUFZ4dUlDQWdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVUM0JsY21GMGFXOXVjeTVqY21WaGRHVk5ZWEpyZFhCR2IzSlFjbTl3WlhKMGVTaHdjbTl3UzJWNUxDQndjbTl3Vm1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0JwWmlBb2JXRnlhM1Z3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwSUNzOUlDY2dKeUFySUcxaGNtdDFjRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUVadmNpQnpkR0YwYVdNZ2NHRm5aWE1zSUc1dklHNWxaV1FnZEc4Z2NIVjBJRkpsWVdOMElFbEVJR0Z1WkNCamFHVmphM04xYlM0Z1UyRjJaWE1nYkc5MGN5QnZabHh1SUNBZ0lDOHZJR0o1ZEdWekxseHVJQ0FnSUdsbUlDaDBjbUZ1YzJGamRHbHZiaTV5Wlc1a1pYSlViMU4wWVhScFkwMWhjbXQxY0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhKbGRDQXJJQ2MrSnp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ2JXRnlhM1Z3Um05eVNVUWdQU0JFVDAxUWNtOXdaWEowZVU5d1pYSmhkR2x2Ym5NdVkzSmxZWFJsVFdGeWEzVndSbTl5U1VRb2RHaHBjeTVmY205dmRFNXZaR1ZKUkNrN1hHNGdJQ0FnY21WMGRYSnVJSEpsZENBcklDY2dKeUFySUcxaGNtdDFjRVp2Y2tsRUlDc2dKejRuTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdWeklHMWhjbXQxY0NCbWIzSWdkR2hsSUdOdmJuUmxiblFnWW1WMGQyVmxiaUIwYUdVZ2RHRm5jeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVmRkpsWVdOMFUyVnlkbVZ5VW1WdVpHVnlhVzVuVkhKaGJuTmhZM1JwYjI1OUlIUnlZVzV6WVdOMGFXOXVYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCamIyNTBaWGgwWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdRMjl1ZEdWdWRDQnRZWEpyZFhBdVhHNGdJQ0FxTDF4dUlDQmZZM0psWVhSbFEyOXVkR1Z1ZEUxaGNtdDFjRG9nWm5WdVkzUnBiMjRvZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdjSEpsWm1sNElEMGdKeWM3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYM1JoWnlBOVBUMGdKMnhwYzNScGJtY25JSHg4WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYM1JoWnlBOVBUMGdKM0J5WlNjZ2ZIeGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmRHRm5JRDA5UFNBbmRHVjRkR0Z5WldFbktTQjdYRzRnSUNBZ0lDQXZMeUJCWkdRZ1lXNGdhVzVwZEdsaGJDQnVaWGRzYVc1bElHSmxZMkYxYzJVZ1luSnZkM05sY25NZ2FXZHViM0psSUhSb1pTQm1hWEp6ZENCdVpYZHNhVzVsSUdsdVhHNGdJQ0FnSUNBdkx5QmhJRHhzYVhOMGFXNW5QaXdnUEhCeVpUNHNJRzl5SUR4MFpYaDBZWEpsWVQ0Z1lYTWdZVzRnWENKaGRYUm9iM0pwYm1jZ1kyOXVkbVZ1YVdWdVkyVmNJaUF0TFNCelpXVmNiaUFnSUNBZ0lDOHZJR2gwZEhCek9pOHZhSFJ0YkM1emNHVmpMbmRvWVhSM1p5NXZjbWN2YlhWc2RHbHdZV2RsTDNONWJuUmhlQzVvZEcxc0kzQmhjbk5wYm1jdGJXRnBiaTFwYm1KdlpIa3VYRzRnSUNBZ0lDQndjbVZtYVhnZ1BTQW5YRnh1Snp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ2NISnZjSE1nUFNCMGFHbHpMbDlqZFhKeVpXNTBSV3hsYldWdWRDNXdjbTl3Y3p0Y2JseHVJQ0FnSUM4dklFbHVkR1Z1ZEdsdmJtRnNJSFZ6WlNCdlppQWhQU0IwYnlCaGRtOXBaQ0JqWVhSamFHbHVaeUI2WlhKdkwyWmhiSE5sTGx4dUlDQWdJSFpoY2lCcGJtNWxja2hVVFV3Z1BTQndjbTl3Y3k1a1lXNW5aWEp2ZFhOc2VWTmxkRWx1Ym1WeVNGUk5URHRjYmlBZ0lDQnBaaUFvYVc1dVpYSklWRTFNSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUdsbUlDaHBibTVsY2toVVRVd3VYMTlvZEcxc0lDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIQnlaV1pwZUNBcklHbHVibVZ5U0ZSTlRDNWZYMmgwYld3N1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFpoY2lCamIyNTBaVzUwVkc5VmMyVWdQVnh1SUNBZ0lDQWdJQ0JEVDA1VVJVNVVYMVJaVUVWVFczUjVjR1Z2WmlCd2NtOXdjeTVqYUdsc1pISmxibDBnUHlCd2NtOXdjeTVqYUdsc1pISmxiaUE2SUc1MWJHdzdYRzRnSUNBZ0lDQjJZWElnWTJocGJHUnlaVzVVYjFWelpTQTlJR052Ym5SbGJuUlViMVZ6WlNBaFBTQnVkV3hzSUQ4Z2JuVnNiQ0E2SUhCeWIzQnpMbU5vYVd4a2NtVnVPMXh1SUNBZ0lDQWdhV1lnS0dOdmJuUmxiblJVYjFWelpTQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQndjbVZtYVhnZ0t5QmxjMk5oY0dWVVpYaDBRMjl1ZEdWdWRFWnZja0p5YjNkelpYSW9ZMjl1ZEdWdWRGUnZWWE5sS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1kyaHBiR1J5Wlc1VWIxVnpaU0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnRiM1Z1ZEVsdFlXZGxjeUE5SUhSb2FYTXViVzkxYm5SRGFHbHNaSEpsYmloY2JpQWdJQ0FnSUNBZ0lDQmphR2xzWkhKbGJsUnZWWE5sTEZ4dUlDQWdJQ0FnSUNBZ0lIUnlZVzV6WVdOMGFXOXVMRnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmxlSFJjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhCeVpXWnBlQ0FySUcxdmRXNTBTVzFoWjJWekxtcHZhVzRvSnljcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjSEpsWm1sNE8xeHVJQ0I5TEZ4dVhHNGdJSEpsWTJWcGRtVkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLRzVsZUhSRmJHVnRaVzUwTENCMGNtRnVjMkZqZEdsdmJpd2dZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lIWmhjaUJ3Y21WMlJXeGxiV1Z1ZENBOUlIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBPMXh1SUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBJRDBnYm1WNGRFVnNaVzFsYm5RN1hHNGdJQ0FnZEdocGN5NTFjR1JoZEdWRGIyMXdiMjVsYm5Rb2RISmhibk5oWTNScGIyNHNJSEJ5WlhaRmJHVnRaVzUwTENCdVpYaDBSV3hsYldWdWRDd2dZMjl1ZEdWNGRDazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWd1pHRjBaWE1nWVNCdVlYUnBkbVVnUkU5TklHTnZiWEJ2Ym1WdWRDQmhablJsY2lCcGRDQm9ZWE1nWVd4eVpXRmtlU0JpWldWdUlHRnNiRzlqWVhSbFpDQmhibVJjYmlBZ0lDb2dZWFIwWVdOb1pXUWdkRzhnZEdobElFUlBUUzRnVW1WamIyNWphV3hsY3lCMGFHVWdjbTl2ZENCRVQwMGdibTlrWlN3Z2RHaGxiaUJ5WldOMWNuTmxjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1ZlNCMGNtRnVjMkZqZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBSV3hsYldWdWRIMGdjSEpsZGtWc1pXMWxiblJjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUc1bGVIUkZiR1Z0Wlc1MFhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaUJBYjNabGNuSnBaR0ZpYkdWY2JpQWdJQ292WEc0Z0lIVndaR0YwWlVOdmJYQnZibVZ1ZERvZ1puVnVZM1JwYjI0b2RISmhibk5oWTNScGIyNHNJSEJ5WlhaRmJHVnRaVzUwTENCdVpYaDBSV3hsYldWdWRDd2dZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lHRnpjMlZ5ZEZaaGJHbGtVSEp2Y0hNb2RHaHBjeTVmWTNWeWNtVnVkRVZzWlcxbGJuUXVjSEp2Y0hNcE8xeHVJQ0FnSUhSb2FYTXVYM1Z3WkdGMFpVUlBUVkJ5YjNCbGNuUnBaWE1vY0hKbGRrVnNaVzFsYm5RdWNISnZjSE1zSUhSeVlXNXpZV04wYVc5dUtUdGNiaUFnSUNCMGFHbHpMbDkxY0dSaGRHVkVUMDFEYUdsc1pISmxiaWh3Y21WMlJXeGxiV1Z1ZEM1d2NtOXdjeXdnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWldOdmJtTnBiR1Z6SUhSb1pTQndjbTl3WlhKMGFXVnpJR0o1SUdSbGRHVmpkR2x1WnlCa2FXWm1aWEpsYm1ObGN5QnBiaUJ3Y205d1pYSjBlU0IyWVd4MVpYTWdZVzVrWEc0Z0lDQXFJSFZ3WkdGMGFXNW5JSFJvWlNCRVQwMGdZWE1nYm1WalpYTnpZWEo1TGlCVWFHbHpJR1oxYm1OMGFXOXVJR2x6SUhCeWIySmhZbXg1SUhSb1pTQnphVzVuYkdVZ2JXOXpkRnh1SUNBZ0tpQmpjbWwwYVdOaGJDQndZWFJvSUdadmNpQndaWEptYjNKdFlXNWpaU0J2Y0hScGJXbDZZWFJwYjI0dVhHNGdJQ0FxWEc0Z0lDQXFJRlJQUkU4NklFSmxibU5vYldGeWF5QjNhR1YwYUdWeUlHTm9aV05yYVc1bklHWnZjaUJqYUdGdVoyVmtJSFpoYkhWbGN5QnBiaUJ0WlcxdmNua2dZV04wZFdGc2JIbGNiaUFnSUNvZ0lDQWdJQ0FnYVcxd2NtOTJaWE1nY0dWeVptOXliV0Z1WTJVZ0tHVnpjR1ZqYVdGc2JIa2djM1JoZEdsallXeHNlU0J3YjNOcGRHbHZibVZrSUdWc1pXMWxiblJ6S1M1Y2JpQWdJQ29nVkU5RVR6b2dRbVZ1WTJodFlYSnJJSFJvWlNCbFptWmxZM1J6SUc5bUlIQjFkSFJwYm1jZ2RHaHBjeUJoZENCMGFHVWdkRzl3SUhOcGJtTmxJRGs1SlNCdlppQndjbTl3YzF4dUlDQWdLaUFnSUNBZ0lDQmtieUJ1YjNRZ1kyaGhibWRsSUdadmNpQmhJR2RwZG1WdUlISmxZMjl1WTJsc2FXRjBhVzl1TGx4dUlDQWdLaUJVVDBSUE9pQkNaVzVqYUcxaGNtc2dZWEpsWVhNZ2RHaGhkQ0JqWVc0Z1ltVWdhVzF3Y205MlpXUWdkMmwwYUNCallXTm9hVzVuTGx4dUlDQWdLbHh1SUNBZ0tpQkFjSEpwZG1GMFpWeHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYkdGemRGQnliM0J6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb3ZYRzRnSUY5MWNHUmhkR1ZFVDAxUWNtOXdaWEowYVdWek9pQm1kVzVqZEdsdmJpaHNZWE4wVUhKdmNITXNJSFJ5WVc1ellXTjBhVzl1S1NCN1hHNGdJQ0FnZG1GeUlHNWxlSFJRY205d2N5QTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTG5CeWIzQnpPMXh1SUNBZ0lIWmhjaUJ3Y205d1MyVjVPMXh1SUNBZ0lIWmhjaUJ6ZEhsc1pVNWhiV1U3WEc0Z0lDQWdkbUZ5SUhOMGVXeGxWWEJrWVhSbGN6dGNiaUFnSUNCbWIzSWdLSEJ5YjNCTFpYa2dhVzRnYkdGemRGQnliM0J6S1NCN1hHNGdJQ0FnSUNCcFppQW9ibVY0ZEZCeWIzQnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JMWlhrcElIeDhYRzRnSUNBZ0lDQWdJQ0FoYkdGemRGQnliM0J6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tIQnliM0JMWlhrZ1BUMDlJRk5VV1V4RktTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCc1lYTjBVM1I1YkdVZ1BTQjBhR2x6TGw5d2NtVjJhVzkxYzFOMGVXeGxRMjl3ZVR0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2h6ZEhsc1pVNWhiV1VnYVc0Z2JHRnpkRk4wZVd4bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHeGhjM1JUZEhsc1pTNW9ZWE5QZDI1UWNtOXdaWEowZVNoemRIbHNaVTVoYldVcEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCemRIbHNaVlZ3WkdGMFpYTWdQU0J6ZEhsc1pWVndaR0YwWlhNZ2ZId2dlMzA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkSGxzWlZWd1pHRjBaWE5iYzNSNWJHVk9ZVzFsWFNBOUlDY25PMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5d2NtVjJhVzkxYzFOMGVXeGxRMjl3ZVNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0hKbFoybHpkSEpoZEdsdmJrNWhiV1ZOYjJSMWJHVnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JMWlhrcEtTQjdYRzRnSUNBZ0lDQWdJR1JsYkdWMFpVeHBjM1JsYm1WeUtIUm9hWE11WDNKdmIzUk9iMlJsU1VRc0lIQnliM0JMWlhrcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGNiaUFnSUNBZ0lDQWdJQ0JFVDAxUWNtOXdaWEowZVM1cGMxTjBZVzVrWVhKa1RtRnRaVnR3Y205d1MyVjVYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWx6UTNWemRHOXRRWFIwY21saWRYUmxLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUVKaFkydGxibVJKUkU5d1pYSmhkR2x2Ym5NdVpHVnNaWFJsVUhKdmNHVnlkSGxDZVVsRUtGeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNFdGxlVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQm1iM0lnS0hCeWIzQkxaWGtnYVc0Z2JtVjRkRkJ5YjNCektTQjdYRzRnSUNBZ0lDQjJZWElnYm1WNGRGQnliM0FnUFNCdVpYaDBVSEp2Y0hOYmNISnZjRXRsZVYwN1hHNGdJQ0FnSUNCMllYSWdiR0Z6ZEZCeWIzQWdQU0J3Y205d1MyVjVJRDA5UFNCVFZGbE1SU0EvWEc0Z0lDQWdJQ0FnSUhSb2FYTXVYM0J5WlhacGIzVnpVM1I1YkdWRGIzQjVJRHBjYmlBZ0lDQWdJQ0FnYkdGemRGQnliM0J6VzNCeWIzQkxaWGxkTzF4dUlDQWdJQ0FnYVdZZ0tDRnVaWGgwVUhKdmNITXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRXRsZVNrZ2ZId2dibVY0ZEZCeWIzQWdQVDA5SUd4aGMzUlFjbTl3S1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSEJ5YjNCTFpYa2dQVDA5SUZOVVdVeEZLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaHVaWGgwVUhKdmNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUc1bGVIUlFjbTl3SUQwZ2RHaHBjeTVmY0hKbGRtbHZkWE5UZEhsc1pVTnZjSGtnUFNCaGMzTnBaMjRvZTMwc0lHNWxlSFJRY205d0tUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxsOXdjbVYyYVc5MWMxTjBlV3hsUTI5d2VTQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0d4aGMzUlFjbTl3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVlc1elpYUWdjM1I1YkdWeklHOXVJR0JzWVhOMFVISnZjR0FnWW5WMElHNXZkQ0J2YmlCZ2JtVjRkRkJ5YjNCZ0xseHVJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2MzUjViR1ZPWVcxbElHbHVJR3hoYzNSUWNtOXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYkdGemRGQnliM0F1YUdGelQzZHVVSEp2Y0dWeWRIa29jM1I1YkdWT1lXMWxLU0FtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNnaGJtVjRkRkJ5YjNBZ2ZId2dJVzVsZUhSUWNtOXdMbWhoYzA5M2JsQnliM0JsY25SNUtITjBlV3hsVG1GdFpTa3BLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE4wZVd4bFZYQmtZWFJsY3lBOUlITjBlV3hsVlhCa1lYUmxjeUI4ZkNCN2ZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2MzUjViR1ZWY0dSaGRHVnpXM04wZVd4bFRtRnRaVjBnUFNBbkp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ZYQmtZWFJsSUhOMGVXeGxjeUIwYUdGMElHTm9ZVzVuWldRZ2MybHVZMlVnWUd4aGMzUlFjbTl3WUM1Y2JpQWdJQ0FnSUNBZ0lDQm1iM0lnS0hOMGVXeGxUbUZ0WlNCcGJpQnVaWGgwVUhKdmNDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRzVsZUhSUWNtOXdMbWhoYzA5M2JsQnliM0JsY25SNUtITjBlV3hsVG1GdFpTa2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWVhOMFVISnZjRnR6ZEhsc1pVNWhiV1ZkSUNFOVBTQnVaWGgwVUhKdmNGdHpkSGxzWlU1aGJXVmRLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSE4wZVd4bFZYQmtZWFJsY3lBOUlITjBlV3hsVlhCa1lYUmxjeUI4ZkNCN2ZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2MzUjViR1ZWY0dSaGRHVnpXM04wZVd4bFRtRnRaVjBnUFNCdVpYaDBVSEp2Y0Z0emRIbHNaVTVoYldWZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCU1pXeHBaWE1nYjI0Z1lIVndaR0YwWlZOMGVXeGxjMEo1U1VSZ0lHNXZkQ0J0ZFhSaGRHbHVaeUJnYzNSNWJHVlZjR1JoZEdWellDNWNiaUFnSUNBZ0lDQWdJQ0J6ZEhsc1pWVndaR0YwWlhNZ1BTQnVaWGgwVUhKdmNEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGN5NW9ZWE5QZDI1UWNtOXdaWEowZVNod2NtOXdTMlY1S1NrZ2UxeHVJQ0FnSUNBZ0lDQndkWFJNYVhOMFpXNWxjaWgwYUdsekxsOXliMjkwVG05a1pVbEVMQ0J3Y205d1MyVjVMQ0J1WlhoMFVISnZjQ3dnZEhKaGJuTmhZM1JwYjI0cE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGNiaUFnSUNBZ0lDQWdJQ0JFVDAxUWNtOXdaWEowZVM1cGMxTjBZVzVrWVhKa1RtRnRaVnR3Y205d1MyVjVYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWx6UTNWemRHOXRRWFIwY21saWRYUmxLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUVKaFkydGxibVJKUkU5d1pYSmhkR2x2Ym5NdWRYQmtZWFJsVUhKdmNHVnlkSGxDZVVsRUtGeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNFdGxlU3hjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBVSEp2Y0Z4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2MzUjViR1ZWY0dSaGRHVnpLU0I3WEc0Z0lDQWdJQ0JDWVdOclpXNWtTVVJQY0dWeVlYUnBiMjV6TG5Wd1pHRjBaVk4wZVd4bGMwSjVTVVFvWEc0Z0lDQWdJQ0FnSUhSb2FYTXVYM0p2YjNST2IyUmxTVVFzWEc0Z0lDQWdJQ0FnSUhOMGVXeGxWWEJrWVhSbGMxeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsWTI5dVkybHNaWE1nZEdobElHTm9hV3hrY21WdUlIZHBkR2dnZEdobElIWmhjbWx2ZFhNZ2NISnZjR1Z5ZEdsbGN5QjBhR0YwSUdGbVptVmpkQ0IwYUdWY2JpQWdJQ29nWTJocGJHUnlaVzRnWTI5dWRHVnVkQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUd4aGMzUlFjbTl3YzF4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNTlJSFJ5WVc1ellXTjBhVzl1WEc0Z0lDQXFMMXh1SUNCZmRYQmtZWFJsUkU5TlEyaHBiR1J5Wlc0NklHWjFibU4wYVc5dUtHeGhjM1JRY205d2N5d2dkSEpoYm5OaFkzUnBiMjRzSUdOdmJuUmxlSFFwSUh0Y2JpQWdJQ0IyWVhJZ2JtVjRkRkJ5YjNCeklEMGdkR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1Y0hKdmNITTdYRzVjYmlBZ0lDQjJZWElnYkdGemRFTnZiblJsYm5RZ1BWeHVJQ0FnSUNBZ1EwOU9WRVZPVkY5VVdWQkZVMXQwZVhCbGIyWWdiR0Z6ZEZCeWIzQnpMbU5vYVd4a2NtVnVYU0EvSUd4aGMzUlFjbTl3Y3k1amFHbHNaSEpsYmlBNklHNTFiR3c3WEc0Z0lDQWdkbUZ5SUc1bGVIUkRiMjUwWlc1MElEMWNiaUFnSUNBZ0lFTlBUbFJGVGxSZlZGbFFSVk5iZEhsd1pXOW1JRzVsZUhSUWNtOXdjeTVqYUdsc1pISmxibDBnUHlCdVpYaDBVSEp2Y0hNdVkyaHBiR1J5Wlc0Z09pQnVkV3hzTzF4dVhHNGdJQ0FnZG1GeUlHeGhjM1JJZEcxc0lEMWNiaUFnSUNBZ0lHeGhjM1JRY205d2N5NWtZVzVuWlhKdmRYTnNlVk5sZEVsdWJtVnlTRlJOVENBbUpseHVJQ0FnSUNBZ2JHRnpkRkJ5YjNCekxtUmhibWRsY205MWMyeDVVMlYwU1c1dVpYSklWRTFNTGw5ZmFIUnRiRHRjYmlBZ0lDQjJZWElnYm1WNGRFaDBiV3dnUFZ4dUlDQWdJQ0FnYm1WNGRGQnliM0J6TG1SaGJtZGxjbTkxYzJ4NVUyVjBTVzV1WlhKSVZFMU1JQ1ltWEc0Z0lDQWdJQ0J1WlhoMFVISnZjSE11WkdGdVoyVnliM1Z6YkhsVFpYUkpibTVsY2toVVRVd3VYMTlvZEcxc08xeHVYRzRnSUNBZ0x5OGdUbTkwWlNCMGFHVWdkWE5sSUc5bUlHQWhQV0FnZDJocFkyZ2dZMmhsWTJ0eklHWnZjaUJ1ZFd4c0lHOXlJSFZ1WkdWbWFXNWxaQzVjYmlBZ0lDQjJZWElnYkdGemRFTm9hV3hrY21WdUlEMGdiR0Z6ZEVOdmJuUmxiblFnSVQwZ2JuVnNiQ0EvSUc1MWJHd2dPaUJzWVhOMFVISnZjSE11WTJocGJHUnlaVzQ3WEc0Z0lDQWdkbUZ5SUc1bGVIUkRhR2xzWkhKbGJpQTlJRzVsZUhSRGIyNTBaVzUwSUNFOUlHNTFiR3dnUHlCdWRXeHNJRG9nYm1WNGRGQnliM0J6TG1Ob2FXeGtjbVZ1TzF4dVhHNGdJQ0FnTHk4Z1NXWWdkMlVuY21VZ2MzZHBkR05vYVc1bklHWnliMjBnWTJocGJHUnlaVzRnZEc4Z1kyOXVkR1Z1ZEM5b2RHMXNJRzl5SUhacFkyVWdkbVZ5YzJFc0lISmxiVzkyWlZ4dUlDQWdJQzh2SUhSb1pTQnZiR1FnWTI5dWRHVnVkRnh1SUNBZ0lIWmhjaUJzWVhOMFNHRnpRMjl1ZEdWdWRFOXlTSFJ0YkNBOUlHeGhjM1JEYjI1MFpXNTBJQ0U5SUc1MWJHd2dmSHdnYkdGemRFaDBiV3dnSVQwZ2JuVnNiRHRjYmlBZ0lDQjJZWElnYm1WNGRFaGhjME52Ym5SbGJuUlBja2gwYld3Z1BTQnVaWGgwUTI5dWRHVnVkQ0FoUFNCdWRXeHNJSHg4SUc1bGVIUklkRzFzSUNFOUlHNTFiR3c3WEc0Z0lDQWdhV1lnS0d4aGMzUkRhR2xzWkhKbGJpQWhQU0J1ZFd4c0lDWW1JRzVsZUhSRGFHbHNaSEpsYmlBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCMGFHbHpMblZ3WkdGMFpVTm9hV3hrY21WdUtHNTFiR3dzSUhSeVlXNXpZV04wYVc5dUxDQmpiMjUwWlhoMEtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHeGhjM1JJWVhORGIyNTBaVzUwVDNKSWRHMXNJQ1ltSUNGdVpYaDBTR0Z6UTI5dWRHVnVkRTl5U0hSdGJDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1MWNHUmhkR1ZVWlhoMFEyOXVkR1Z1ZENnbkp5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzVsZUhSRGIyNTBaVzUwSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUdsbUlDaHNZWE4wUTI5dWRHVnVkQ0FoUFQwZ2JtVjRkRU52Ym5SbGJuUXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTFjR1JoZEdWVVpYaDBRMjl1ZEdWdWRDZ25KeUFySUc1bGVIUkRiMjUwWlc1MEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHNWxlSFJJZEcxc0lDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHbG1JQ2hzWVhOMFNIUnRiQ0FoUFQwZ2JtVjRkRWgwYld3cElIdGNiaUFnSUNBZ0lDQWdRbUZqYTJWdVpFbEVUM0JsY21GMGFXOXVjeTUxY0dSaGRHVkpibTVsY2toVVRVeENlVWxFS0Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WDNKdmIzUk9iMlJsU1VRc1hHNGdJQ0FnSUNBZ0lDQWdibVY0ZEVoMGJXeGNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzVsZUhSRGFHbHNaSEpsYmlBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCMGFHbHpMblZ3WkdGMFpVTm9hV3hrY21WdUtHNWxlSFJEYUdsc1pISmxiaXdnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSR1Z6ZEhKdmVYTWdZV3hzSUdWMlpXNTBJSEpsWjJsemRISmhkR2x2Ym5NZ1ptOXlJSFJvYVhNZ2FXNXpkR0Z1WTJVdUlFUnZaWE1nYm05MElISmxiVzkyWlNCbWNtOXRYRzRnSUNBcUlIUm9aU0JFVDAwdUlGUm9ZWFFnYlhWemRDQmlaU0JrYjI1bElHSjVJSFJvWlNCd1lYSmxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdkVzV0YjNWdWRFTnZiWEJ2Ym1WdWREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1MWJtMXZkVzUwUTJocGJHUnlaVzRvS1R0Y2JpQWdJQ0JTWldGamRFSnliM2R6WlhKRmRtVnVkRVZ0YVhSMFpYSXVaR1ZzWlhSbFFXeHNUR2x6ZEdWdVpYSnpLSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXBPMXh1SUNBZ0lGSmxZV04wUTI5dGNHOXVaVzUwUW5KdmQzTmxja1Z1ZG1seWIyNXRaVzUwTG5WdWJXOTFiblJKUkVaeWIyMUZiblpwY205dWJXVnVkQ2gwYUdsekxsOXliMjkwVG05a1pVbEVLVHRjYmlBZ0lDQjBhR2x6TGw5eWIyOTBUbTlrWlVsRUlEMGdiblZzYkR0Y2JpQWdmVnh1WEc1OU8xeHVYRzVTWldGamRGQmxjbVl1YldWaGMzVnlaVTFsZEdodlpITW9VbVZoWTNSRVQwMURiMjF3YjI1bGJuUXNJQ2RTWldGamRFUlBUVU52YlhCdmJtVnVkQ2NzSUh0Y2JpQWdiVzkxYm5SRGIyMXdiMjVsYm5RNklDZHRiM1Z1ZEVOdmJYQnZibVZ1ZENjc1hHNGdJSFZ3WkdGMFpVTnZiWEJ2Ym1WdWREb2dKM1Z3WkdGMFpVTnZiWEJ2Ym1WdWRDZGNibjBwTzF4dVhHNWhjM05wWjI0b1hHNGdJRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBMbkJ5YjNSdmRIbHdaU3hjYmlBZ1VtVmhZM1JFVDAxRGIyMXdiMjVsYm5RdVRXbDRhVzRzWEc0Z0lGSmxZV04wVFhWc2RHbERhR2xzWkM1TmFYaHBibHh1S1R0Y2JseHVVbVZoWTNSRVQwMURiMjF3YjI1bGJuUXVhVzVxWldOMGFXOXVJRDBnZTF4dUlDQnBibXBsWTNSSlJFOXdaWEpoZEdsdmJuTTZJR1oxYm1OMGFXOXVLRWxFVDNCbGNtRjBhVzl1Y3lrZ2UxeHVJQ0FnSUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwTGtKaFkydGxibVJKUkU5d1pYSmhkR2x2Ym5NZ1BTQkNZV05yWlc1a1NVUlBjR1Z5WVhScGIyNXpJRDBnU1VSUGNHVnlZWFJwYjI1ek8xeHVJQ0I5WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUZvcm1cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIExvY2FsRXZlbnRUcmFwTWl4aW4gPSByZXF1aXJlKFwiLi9Mb2NhbEV2ZW50VHJhcE1peGluXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIgZm9ybSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdmb3JtJyk7XG5cbi8qKlxuICogU2luY2Ugb25TdWJtaXQgZG9lc24ndCBidWJibGUgT1IgY2FwdHVyZSBvbiB0aGUgdG9wIGxldmVsIGluIElFOCwgd2UgbmVlZFxuICogdG8gY2FwdHVyZSBpdCBvbiB0aGUgPGZvcm0+IGVsZW1lbnQgaXRzZWxmLiBUaGVyZSBhcmUgbG90cyBvZiBoYWNrcyB3ZSBjb3VsZFxuICogZG8gdG8gYWNjb21wbGlzaCB0aGlzLCBidXQgdGhlIG1vc3QgcmVsaWFibGUgaXMgdG8gbWFrZSA8Zm9ybT4gYVxuICogY29tcG9zaXRlIGNvbXBvbmVudCBhbmQgdXNlIGBjb21wb25lbnREaWRNb3VudGAgdG8gYXR0YWNoIHRoZSBldmVudCBoYW5kbGVycy5cbiAqL1xudmFyIFJlYWN0RE9NRm9ybSA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NRm9ybScsXG4gIHRhZ05hbWU6ICdGT1JNJyxcblxuICBtaXhpbnM6IFtSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiwgTG9jYWxFdmVudFRyYXBNaXhpbl0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAvLyBUT0RPOiBJbnN0ZWFkIG9mIHVzaW5nIGBSZWFjdERPTWAgZGlyZWN0bHksIHdlIHNob3VsZCB1c2UgSlNYLiBIb3dldmVyLFxuICAgIC8vIGBqc2hpbnRgIGZhaWxzIHRvIHBhcnNlIEpTWCBzbyBpbiBvcmRlciBmb3IgbGludGluZyB0byB3b3JrIGluIHRoZSBvcGVuXG4gICAgLy8gc291cmNlIHJlcG8sIHdlIG5lZWQgdG8ganVzdCB1c2UgYFJlYWN0RE9NLmZvcm1gLlxuICAgIHJldHVybiBmb3JtKHRoaXMucHJvcHMpO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRyYXBCdWJibGVkRXZlbnQoRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcy50b3BSZXNldCwgJ3Jlc2V0Jyk7XG4gICAgdGhpcy50cmFwQnViYmxlZEV2ZW50KEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXMudG9wU3VibWl0LCAnc3VibWl0Jyk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NRm9ybTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01JRE9wZXJhdGlvbnNcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0gcmVxdWlyZShcIi4vRE9NQ2hpbGRyZW5PcGVyYXRpb25zXCIpO1xudmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdFBlcmZcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgc2V0SW5uZXJIVE1MID0gcmVxdWlyZShcIi4vc2V0SW5uZXJIVE1MXCIpO1xuXG4vKipcbiAqIEVycm9ycyBmb3IgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgYmUgdXBkYXRlZCB3aXRoIGB1cGRhdGVQcm9wZXJ0eUJ5SWQoKWAuXG4gKlxuICogQHR5cGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBJTlZBTElEX1BST1BFUlRZX0VSUk9SUyA9IHtcbiAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6XG4gICAgJ2BkYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBzZXQgdXNpbmcgYHVwZGF0ZUlubmVySFRNTEJ5SUQoKWAuJyxcbiAgc3R5bGU6ICdgc3R5bGVgIG11c3QgYmUgc2V0IHVzaW5nIGB1cGRhdGVTdHlsZXNCeUlEKClgLidcbn07XG5cbi8qKlxuICogT3BlcmF0aW9ucyB1c2VkIHRvIHByb2Nlc3MgdXBkYXRlcyB0byBET00gbm9kZXMuIFRoaXMgaXMgbWFkZSBpbmplY3RhYmxlIHZpYVxuICogYFJlYWN0RE9NQ29tcG9uZW50LkJhY2tlbmRJRE9wZXJhdGlvbnNgLlxuICovXG52YXIgUmVhY3RET01JRE9wZXJhdGlvbnMgPSB7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gbm9kZSB3aXRoIG5ldyBwcm9wZXJ0eSB2YWx1ZXMuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB0b1xuICAgKiB1cGRhdGUgRE9NIHByb3BlcnRpZXMgaW4gYERPTVByb3BlcnR5YC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQSB2YWxpZCBwcm9wZXJ0eSBuYW1lLCBzZWUgYERPTVByb3BlcnR5YC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBOZXcgdmFsdWUgb2YgdGhlIHByb3BlcnR5LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVwZGF0ZVByb3BlcnR5QnlJRDogZnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSksXG4gICAgICAndXBkYXRlUHJvcGVydHlCeUlEKC4uLik6ICVzJyxcbiAgICAgIElOVkFMSURfUFJPUEVSVFlfRVJST1JTW25hbWVdXG4gICAgKSA6IGludmFyaWFudCghSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSkpKTtcblxuICAgIC8vIElmIHdlJ3JlIHVwZGF0aW5nIHRvIG51bGwgb3IgdW5kZWZpbmVkLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBwcm9wZXJ0eVxuICAgIC8vIGZyb20gdGhlIERPTSBub2RlIGluc3RlYWQgb2YgaW5hZHZlcnRhbnRseSBzZXR0aW5nIHRvIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gYnJpbmdzIHVzIGluIGxpbmUgd2l0aCB0aGUgc2FtZSBiZWhhdmlvciB3ZSBoYXZlIG9uIGluaXRpYWwgcmVuZGVyLlxuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5kZWxldGVWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIERPTSBub2RlIHRvIHJlbW92ZSBhIHByb3BlcnR5LiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gcmVtb3ZlXG4gICAqIERPTSBwcm9wZXJ0aWVzIGluIGBET01Qcm9wZXJ0eWAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9kZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEEgcHJvcGVydHkgbmFtZSB0byByZW1vdmUsIHNlZSBgRE9NUHJvcGVydHlgLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRlbGV0ZVByb3BlcnR5QnlJRDogZnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSksXG4gICAgICAndXBkYXRlUHJvcGVydHlCeUlEKC4uLik6ICVzJyxcbiAgICAgIElOVkFMSURfUFJPUEVSVFlfRVJST1JTW25hbWVdXG4gICAgKSA6IGludmFyaWFudCghSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMuaGFzT3duUHJvcGVydHkobmFtZSkpKTtcbiAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gbm9kZSB3aXRoIG5ldyBzdHlsZSB2YWx1ZXMuIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzICcnLFxuICAgKiB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIG5vZGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzIE1hcHBpbmcgZnJvbSBzdHlsZXMgdG8gdmFsdWVzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVwZGF0ZVN0eWxlc0J5SUQ6IGZ1bmN0aW9uKGlkLCBzdHlsZXMpIHtcbiAgICB2YXIgbm9kZSA9IFJlYWN0TW91bnQuZ2V0Tm9kZShpZCk7XG4gICAgQ1NTUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gbm9kZSdzIGlubmVySFRNTC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgQW4gSFRNTCBzdHJpbmcuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdXBkYXRlSW5uZXJIVE1MQnlJRDogZnVuY3Rpb24oaWQsIGh0bWwpIHtcbiAgICB2YXIgbm9kZSA9IFJlYWN0TW91bnQuZ2V0Tm9kZShpZCk7XG4gICAgc2V0SW5uZXJIVE1MKG5vZGUsIGh0bWwpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUncyB0ZXh0IGNvbnRlbnQgc2V0IGJ5IGBwcm9wcy5jb250ZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgVGV4dCBjb250ZW50LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVwZGF0ZVRleHRDb250ZW50QnlJRDogZnVuY3Rpb24oaWQsIGNvbnRlbnQpIHtcbiAgICB2YXIgbm9kZSA9IFJlYWN0TW91bnQuZ2V0Tm9kZShpZCk7XG4gICAgRE9NQ2hpbGRyZW5PcGVyYXRpb25zLnVwZGF0ZVRleHRDb250ZW50KG5vZGUsIGNvbnRlbnQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhIERPTSBub2RlIHRoYXQgZXhpc3RzIGluIHRoZSBkb2N1bWVudCB3aXRoIG1hcmt1cC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIGNoaWxkIHRvIGJlIHJlcGxhY2VkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIERhbmdlcm91cyBtYXJrdXAgdG8gaW5qZWN0IGluIHBsYWNlIG9mIGNoaWxkLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHNlZSB7RGFuZ2VyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwfVxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEOiBmdW5jdGlvbihpZCwgbWFya3VwKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cChub2RlLCBtYXJrdXApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgY29tcG9uZW50J3MgY2hpbGRyZW4gYnkgcHJvY2Vzc2luZyBhIHNlcmllcyBvZiB1cGRhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5PG9iamVjdD59IHVwZGF0ZXMgTGlzdCBvZiB1cGRhdGUgY29uZmlndXJhdGlvbnMuXG4gICAqIEBwYXJhbSB7YXJyYXk8c3RyaW5nPn0gbWFya3VwIExpc3Qgb2YgbWFya3VwIHN0cmluZ3MuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOiBmdW5jdGlvbih1cGRhdGVzLCBtYXJrdXApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHVwZGF0ZXNbaV0ucGFyZW50Tm9kZSA9IFJlYWN0TW91bnQuZ2V0Tm9kZSh1cGRhdGVzW2ldLnBhcmVudElEKTtcbiAgICB9XG4gICAgRE9NQ2hpbGRyZW5PcGVyYXRpb25zLnByb2Nlc3NVcGRhdGVzKHVwZGF0ZXMsIG1hcmt1cCk7XG4gIH1cbn07XG5cblJlYWN0UGVyZi5tZWFzdXJlTWV0aG9kcyhSZWFjdERPTUlET3BlcmF0aW9ucywgJ1JlYWN0RE9NSURPcGVyYXRpb25zJywge1xuICB1cGRhdGVQcm9wZXJ0eUJ5SUQ6ICd1cGRhdGVQcm9wZXJ0eUJ5SUQnLFxuICBkZWxldGVQcm9wZXJ0eUJ5SUQ6ICdkZWxldGVQcm9wZXJ0eUJ5SUQnLFxuICB1cGRhdGVTdHlsZXNCeUlEOiAndXBkYXRlU3R5bGVzQnlJRCcsXG4gIHVwZGF0ZUlubmVySFRNTEJ5SUQ6ICd1cGRhdGVJbm5lckhUTUxCeUlEJyxcbiAgdXBkYXRlVGV4dENvbnRlbnRCeUlEOiAndXBkYXRlVGV4dENvbnRlbnRCeUlEJyxcbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEOiAnZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEJyxcbiAgZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOiAnZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzJ1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01JRE9wZXJhdGlvbnM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVQwMUpSRTl3WlhKaGRHbHZibk11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJFOU5TVVJQY0dWeVlYUnBiMjV6WEc0Z0tpQkFkSGx3WldOb1pXTnJjeUJ6ZEdGMGFXTXRiMjVzZVZ4dUlDb3ZYRzVjYmk4cWFuTnNhVzUwSUdWMmFXdzZJSFJ5ZFdVZ0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1ExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpJRDBnY21WeGRXbHlaU2hjSWk0dlExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpYQ0lwTzF4dWRtRnlJRVJQVFVOb2FXeGtjbVZ1VDNCbGNtRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMFJQVFVOb2FXeGtjbVZ1VDNCbGNtRjBhVzl1YzF3aUtUdGNiblpoY2lCRVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTWdQU0J5WlhGMWFYSmxLRndpTGk5RVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTmNJaWs3WEc1MllYSWdVbVZoWTNSTmIzVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVFc5MWJuUmNJaWs3WEc1MllYSWdVbVZoWTNSUVpYSm1JRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JRWlhKbVhDSXBPMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1ZG1GeUlITmxkRWx1Ym1WeVNGUk5UQ0E5SUhKbGNYVnBjbVVvWENJdUwzTmxkRWx1Ym1WeVNGUk5URndpS1R0Y2JseHVMeW9xWEc0Z0tpQkZjbkp2Y25NZ1ptOXlJSEJ5YjNCbGNuUnBaWE1nZEdoaGRDQnphRzkxYkdRZ2JtOTBJR0psSUhWd1pHRjBaV1FnZDJsMGFDQmdkWEJrWVhSbFVISnZjR1Z5ZEhsQ2VVbGtLQ2xnTGx4dUlDcGNiaUFxSUVCMGVYQmxJSHR2WW1wbFkzUjlYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzUyWVhJZ1NVNVdRVXhKUkY5UVVrOVFSVkpVV1Y5RlVsSlBVbE1nUFNCN1hHNGdJR1JoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTU9seHVJQ0FnSUNkZ1pHRnVaMlZ5YjNWemJIbFRaWFJKYm01bGNraFVUVXhnSUcxMWMzUWdZbVVnYzJWMElIVnphVzVuSUdCMWNHUmhkR1ZKYm01bGNraFVUVXhDZVVsRUtDbGdMaWNzWEc0Z0lITjBlV3hsT2lBbllITjBlV3hsWUNCdGRYTjBJR0psSUhObGRDQjFjMmx1WnlCZ2RYQmtZWFJsVTNSNWJHVnpRbmxKUkNncFlDNG5YRzU5TzF4dVhHNHZLaXBjYmlBcUlFOXdaWEpoZEdsdmJuTWdkWE5sWkNCMGJ5QndjbTlqWlhOeklIVndaR0YwWlhNZ2RHOGdSRTlOSUc1dlpHVnpMaUJVYUdseklHbHpJRzFoWkdVZ2FXNXFaV04wWVdKc1pTQjJhV0ZjYmlBcUlHQlNaV0ZqZEVSUFRVTnZiWEJ2Ym1WdWRDNUNZV05yWlc1a1NVUlBjR1Z5WVhScGIyNXpZQzVjYmlBcUwxeHVkbUZ5SUZKbFlXTjBSRTlOU1VSUGNHVnlZWFJwYjI1eklEMGdlMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlZjR1JoZEdWeklHRWdSRTlOSUc1dlpHVWdkMmwwYUNCdVpYY2djSEp2Y0dWeWRIa2dkbUZzZFdWekxpQlVhR2x6SUhOb2IzVnNaQ0J2Ym14NUlHSmxJSFZ6WldRZ2RHOWNiaUFnSUNvZ2RYQmtZWFJsSUVSUFRTQndjbTl3WlhKMGFXVnpJR2x1SUdCRVQwMVFjbTl3WlhKMGVXQXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCSlJDQnZaaUIwYUdVZ2JtOWtaU0IwYnlCMWNHUmhkR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsSUVFZ2RtRnNhV1FnY0hKdmNHVnlkSGtnYm1GdFpTd2djMlZsSUdCRVQwMVFjbTl3WlhKMGVXQXVYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdkbUZzZFdVZ1RtVjNJSFpoYkhWbElHOW1JSFJvWlNCd2NtOXdaWEowZVM1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCMWNHUmhkR1ZRY205d1pYSjBlVUo1U1VRNklHWjFibU4wYVc5dUtHbGtMQ0J1WVcxbExDQjJZV3gxWlNrZ2UxeHVJQ0FnSUhaaGNpQnViMlJsSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJPYjJSbEtHbGtLVHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lVbE9Wa0ZNU1VSZlVGSlBVRVZTVkZsZlJWSlNUMUpUTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcExGeHVJQ0FnSUNBZ0ozVndaR0YwWlZCeWIzQmxjblI1UW5sSlJDZ3VMaTRwT2lBbGN5Y3NYRzRnSUNBZ0lDQkpUbFpCVEVsRVgxQlNUMUJGVWxSWlgwVlNVazlTVTF0dVlXMWxYVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVVsT1ZrRk1TVVJmVUZKUFVFVlNWRmxmUlZKU1QxSlRMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwS1NrN1hHNWNiaUFnSUNBdkx5QkpaaUIzWlNkeVpTQjFjR1JoZEdsdVp5QjBieUJ1ZFd4c0lHOXlJSFZ1WkdWbWFXNWxaQ3dnZDJVZ2MyaHZkV3hrSUhKbGJXOTJaU0IwYUdVZ2NISnZjR1Z5ZEhsY2JpQWdJQ0F2THlCbWNtOXRJSFJvWlNCRVQwMGdibTlrWlNCcGJuTjBaV0ZrSUc5bUlHbHVZV1IyWlhKMFlXNTBiSGtnYzJWMGRHbHVaeUIwYnlCaElITjBjbWx1Wnk0Z1ZHaHBjMXh1SUNBZ0lDOHZJR0p5YVc1bmN5QjFjeUJwYmlCc2FXNWxJSGRwZEdnZ2RHaGxJSE5oYldVZ1ltVm9ZWFpwYjNJZ2QyVWdhR0YyWlNCdmJpQnBibWwwYVdGc0lISmxibVJsY2k1Y2JpQWdJQ0JwWmlBb2RtRnNkV1VnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ekxuTmxkRlpoYkhWbFJtOXlVSEp2Y0dWeWRIa29ibTlrWlN3Z2JtRnRaU3dnZG1Gc2RXVXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTXVaR1ZzWlhSbFZtRnNkV1ZHYjNKUWNtOXdaWEowZVNodWIyUmxMQ0J1WVcxbEtUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlZ3WkdGMFpYTWdZU0JFVDAwZ2JtOWtaU0IwYnlCeVpXMXZkbVVnWVNCd2NtOXdaWEowZVM0Z1ZHaHBjeUJ6YUc5MWJHUWdiMjVzZVNCaVpTQjFjMlZrSUhSdklISmxiVzkyWlZ4dUlDQWdLaUJFVDAwZ2NISnZjR1Z5ZEdsbGN5QnBiaUJnUkU5TlVISnZjR1Z5ZEhsZ0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnU1VRZ2IyWWdkR2hsSUc1dlpHVWdkRzhnZFhCa1lYUmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2JtRnRaU0JCSUhCeWIzQmxjblI1SUc1aGJXVWdkRzhnY21WdGIzWmxMQ0J6WldVZ1lFUlBUVkJ5YjNCbGNuUjVZQzVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JrWld4bGRHVlFjbTl3WlhKMGVVSjVTVVE2SUdaMWJtTjBhVzl1S0dsa0xDQnVZVzFsTENCMllXeDFaU2tnZTF4dUlDQWdJSFpoY2lCdWIyUmxJRDBnVW1WaFkzUk5iM1Z1ZEM1blpYUk9iMlJsS0dsa0tUdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSVVsT1ZrRk1TVVJmVUZKUFVFVlNWRmxmUlZKU1QxSlRMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwTEZ4dUlDQWdJQ0FnSjNWd1pHRjBaVkJ5YjNCbGNuUjVRbmxKUkNndUxpNHBPaUFsY3ljc1hHNGdJQ0FnSUNCSlRsWkJURWxFWDFCU1QxQkZVbFJaWDBWU1VrOVNVMXR1WVcxbFhWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JVWxPVmtGTVNVUmZVRkpQVUVWU1ZGbGZSVkpTVDFKVExtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBLU2s3WEc0Z0lDQWdSRTlOVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6TG1SbGJHVjBaVlpoYkhWbFJtOXlVSEp2Y0dWeWRIa29ibTlrWlN3Z2JtRnRaU3dnZG1Gc2RXVXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVmNHUmhkR1Z6SUdFZ1JFOU5JRzV2WkdVZ2QybDBhQ0J1WlhjZ2MzUjViR1VnZG1Gc2RXVnpMaUJKWmlCaElIWmhiSFZsSUdseklITndaV05wWm1sbFpDQmhjeUFuSnl4Y2JpQWdJQ29nZEdobElHTnZjbkpsYzNCdmJtUnBibWNnYzNSNWJHVWdjSEp2Y0dWeWRIa2dkMmxzYkNCaVpTQjFibk5sZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRWxFSUc5bUlIUm9aU0J1YjJSbElIUnZJSFZ3WkdGMFpTNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhOMGVXeGxjeUJOWVhCd2FXNW5JR1p5YjIwZ2MzUjViR1Z6SUhSdklIWmhiSFZsY3k1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCMWNHUmhkR1ZUZEhsc1pYTkNlVWxFT2lCbWRXNWpkR2x2YmlocFpDd2djM1I1YkdWektTQjdYRzRnSUNBZ2RtRnlJRzV2WkdVZ1BTQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVW9hV1FwTzF4dUlDQWdJRU5UVTFCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3k1elpYUldZV3gxWlVadmNsTjBlV3hsY3lodWIyUmxMQ0J6ZEhsc1pYTXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVmNHUmhkR1Z6SUdFZ1JFOU5JRzV2WkdVbmN5QnBibTVsY2toVVRVd3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCSlJDQnZaaUIwYUdVZ2JtOWtaU0IwYnlCMWNHUmhkR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm9kRzFzSUVGdUlFaFVUVXdnYzNSeWFXNW5MbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJSFZ3WkdGMFpVbHVibVZ5U0ZSTlRFSjVTVVE2SUdaMWJtTjBhVzl1S0dsa0xDQm9kRzFzS1NCN1hHNGdJQ0FnZG1GeUlHNXZaR1VnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRTV2WkdVb2FXUXBPMXh1SUNBZ0lITmxkRWx1Ym1WeVNGUk5UQ2h1YjJSbExDQm9kRzFzS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWEJrWVhSbGN5QmhJRVJQVFNCdWIyUmxKM01nZEdWNGRDQmpiMjUwWlc1MElITmxkQ0JpZVNCZ2NISnZjSE11WTI5dWRHVnVkR0F1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCMGFHVWdibTlrWlNCMGJ5QjFjR1JoZEdVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JqYjI1MFpXNTBJRlJsZUhRZ1kyOXVkR1Z1ZEM1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCMWNHUmhkR1ZVWlhoMFEyOXVkR1Z1ZEVKNVNVUTZJR1oxYm1OMGFXOXVLR2xrTENCamIyNTBaVzUwS1NCN1hHNGdJQ0FnZG1GeUlHNXZaR1VnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRTV2WkdVb2FXUXBPMXh1SUNBZ0lFUlBUVU5vYVd4a2NtVnVUM0JsY21GMGFXOXVjeTUxY0dSaGRHVlVaWGgwUTI5dWRHVnVkQ2h1YjJSbExDQmpiMjUwWlc1MEtUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1Wd2JHRmpaWE1nWVNCRVQwMGdibTlrWlNCMGFHRjBJR1Y0YVhOMGN5QnBiaUIwYUdVZ1pHOWpkVzFsYm5RZ2QybDBhQ0J0WVhKcmRYQXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCSlJDQnZaaUJqYUdsc1pDQjBieUJpWlNCeVpYQnNZV05sWkM1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzFoY210MWNDQkVZVzVuWlhKdmRYTWdiV0Z5YTNWd0lIUnZJR2x1YW1WamRDQnBiaUJ3YkdGalpTQnZaaUJqYUdsc1pDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxSUVCelpXVWdlMFJoYm1kbGNpNWtZVzVuWlhKdmRYTnNlVkpsY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0gxY2JpQWdJQ292WEc0Z0lHUmhibWRsY205MWMyeDVVbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3UW5sSlJEb2dablZ1WTNScGIyNG9hV1FzSUcxaGNtdDFjQ2tnZTF4dUlDQWdJSFpoY2lCdWIyUmxJRDBnVW1WaFkzUk5iM1Z1ZEM1blpYUk9iMlJsS0dsa0tUdGNiaUFnSUNCRVQwMURhR2xzWkhKbGJrOXdaWEpoZEdsdmJuTXVaR0Z1WjJWeWIzVnpiSGxTWlhCc1lXTmxUbTlrWlZkcGRHaE5ZWEpyZFhBb2JtOWtaU3dnYldGeWEzVndLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZYQmtZWFJsY3lCaElHTnZiWEJ2Ym1WdWRDZHpJR05vYVd4a2NtVnVJR0o1SUhCeWIyTmxjM05wYm1jZ1lTQnpaWEpwWlhNZ2IyWWdkWEJrWVhSbGN5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRoY25KaGVUeHZZbXBsWTNRK2ZTQjFjR1JoZEdWeklFeHBjM1FnYjJZZ2RYQmtZWFJsSUdOdmJtWnBaM1Z5WVhScGIyNXpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyRnljbUY1UEhOMGNtbHVaejU5SUcxaGNtdDFjQ0JNYVhOMElHOW1JRzFoY210MWNDQnpkSEpwYm1kekxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHUmhibWRsY205MWMyeDVVSEp2WTJWemMwTm9hV3hrY21WdVZYQmtZWFJsY3pvZ1puVnVZM1JwYjI0b2RYQmtZWFJsY3l3Z2JXRnlhM1Z3S1NCN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCMWNHUmhkR1Z6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQjFjR1JoZEdWelcybGRMbkJoY21WdWRFNXZaR1VnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRTV2WkdVb2RYQmtZWFJsYzF0cFhTNXdZWEpsYm5SSlJDazdYRzRnSUNBZ2ZWeHVJQ0FnSUVSUFRVTm9hV3hrY21WdVQzQmxjbUYwYVc5dWN5NXdjbTlqWlhOelZYQmtZWFJsY3loMWNHUmhkR1Z6TENCdFlYSnJkWEFwTzF4dUlDQjlYRzU5TzF4dVhHNVNaV0ZqZEZCbGNtWXViV1ZoYzNWeVpVMWxkR2h2WkhNb1VtVmhZM1JFVDAxSlJFOXdaWEpoZEdsdmJuTXNJQ2RTWldGamRFUlBUVWxFVDNCbGNtRjBhVzl1Y3ljc0lIdGNiaUFnZFhCa1lYUmxVSEp2Y0dWeWRIbENlVWxFT2lBbmRYQmtZWFJsVUhKdmNHVnlkSGxDZVVsRUp5eGNiaUFnWkdWc1pYUmxVSEp2Y0dWeWRIbENlVWxFT2lBblpHVnNaWFJsVUhKdmNHVnlkSGxDZVVsRUp5eGNiaUFnZFhCa1lYUmxVM1I1YkdWelFubEpSRG9nSjNWd1pHRjBaVk4wZVd4bGMwSjVTVVFuTEZ4dUlDQjFjR1JoZEdWSmJtNWxja2hVVFV4Q2VVbEVPaUFuZFhCa1lYUmxTVzV1WlhKSVZFMU1RbmxKUkNjc1hHNGdJSFZ3WkdGMFpWUmxlSFJEYjI1MFpXNTBRbmxKUkRvZ0ozVndaR0YwWlZSbGVIUkRiMjUwWlc1MFFubEpSQ2NzWEc0Z0lHUmhibWRsY205MWMyeDVVbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3UW5sSlJEb2dKMlJoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd1FubEpSQ2NzWEc0Z0lHUmhibWRsY205MWMyeDVVSEp2WTJWemMwTm9hV3hrY21WdVZYQmtZWFJsY3pvZ0oyUmhibWRsY205MWMyeDVVSEp2WTJWemMwTm9hV3hrY21WdVZYQmtZWFJsY3lkY2JuMHBPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBSRTlOU1VSUGNHVnlZWFJwYjI1ek8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NSWZyYW1lXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBMb2NhbEV2ZW50VHJhcE1peGluID0gcmVxdWlyZShcIi4vTG9jYWxFdmVudFRyYXBNaXhpblwiKTtcbnZhciBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIGlmcmFtZSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdpZnJhbWUnKTtcblxuLyoqXG4gKiBTaW5jZSBvbkxvYWQgZG9lc24ndCBidWJibGUgT1IgY2FwdHVyZSBvbiB0aGUgdG9wIGxldmVsIGluIElFOCwgd2UgbmVlZCB0b1xuICogY2FwdHVyZSBpdCBvbiB0aGUgPGlmcmFtZT4gZWxlbWVudCBpdHNlbGYuIFRoZXJlIGFyZSBsb3RzIG9mIGhhY2tzIHdlIGNvdWxkXG4gKiBkbyB0byBhY2NvbXBsaXNoIHRoaXMsIGJ1dCB0aGUgbW9zdCByZWxpYWJsZSBpcyB0byBtYWtlIDxpZnJhbWU+IGEgY29tcG9zaXRlXG4gKiBjb21wb25lbnQgYW5kIHVzZSBgY29tcG9uZW50RGlkTW91bnRgIHRvIGF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlcnMuXG4gKi9cbnZhciBSZWFjdERPTUlmcmFtZSA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NSWZyYW1lJyxcbiAgdGFnTmFtZTogJ0lGUkFNRScsXG5cbiAgbWl4aW5zOiBbUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4sIExvY2FsRXZlbnRUcmFwTWl4aW5dLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGlmcmFtZSh0aGlzLnByb3BzKTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50cmFwQnViYmxlZEV2ZW50KEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXMudG9wTG9hZCwgJ2xvYWQnKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01JZnJhbWU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01JbWdcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIExvY2FsRXZlbnRUcmFwTWl4aW4gPSByZXF1aXJlKFwiLi9Mb2NhbEV2ZW50VHJhcE1peGluXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIgaW1nID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoJ2ltZycpO1xuXG4vKipcbiAqIFNpbmNlIG9uTG9hZCBkb2Vzbid0IGJ1YmJsZSBPUiBjYXB0dXJlIG9uIHRoZSB0b3AgbGV2ZWwgaW4gSUU4LCB3ZSBuZWVkIHRvXG4gKiBjYXB0dXJlIGl0IG9uIHRoZSA8aW1nPiBlbGVtZW50IGl0c2VsZi4gVGhlcmUgYXJlIGxvdHMgb2YgaGFja3Mgd2UgY291bGQgZG9cbiAqIHRvIGFjY29tcGxpc2ggdGhpcywgYnV0IHRoZSBtb3N0IHJlbGlhYmxlIGlzIHRvIG1ha2UgPGltZz4gYSBjb21wb3NpdGVcbiAqIGNvbXBvbmVudCBhbmQgdXNlIGBjb21wb25lbnREaWRNb3VudGAgdG8gYXR0YWNoIHRoZSBldmVudCBoYW5kbGVycy5cbiAqL1xudmFyIFJlYWN0RE9NSW1nID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RET01JbWcnLFxuICB0YWdOYW1lOiAnSU1HJyxcblxuICBtaXhpbnM6IFtSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiwgTG9jYWxFdmVudFRyYXBNaXhpbl0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaW1nKHRoaXMucHJvcHMpO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRyYXBCdWJibGVkRXZlbnQoRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcy50b3BMb2FkLCAnbG9hZCcpO1xuICAgIHRoaXMudHJhcEJ1YmJsZWRFdmVudChFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzLnRvcEVycm9yLCAnZXJyb3InKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01JbWc7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NSW5wdXRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBBdXRvRm9jdXNNaXhpbiA9IHJlcXVpcmUoXCIuL0F1dG9Gb2N1c01peGluXCIpO1xudmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBMaW5rZWRWYWx1ZVV0aWxzID0gcmVxdWlyZShcIi4vTGlua2VkVmFsdWVVdGlsc1wiKTtcbnZhciBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxudmFyIGlucHV0ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoJ2lucHV0Jyk7XG5cbnZhciBpbnN0YW5jZXNCeVJlYWN0SUQgPSB7fTtcblxuZnVuY3Rpb24gZm9yY2VVcGRhdGVJZk1vdW50ZWQoKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIGlmICh0aGlzLmlzTW91bnRlZCgpKSB7XG4gICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8aW5wdXQ+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyB0aGVzZSBvcHRpb25hbFxuICogcHJvcHM6IGBjaGVja2VkYCwgYHZhbHVlYCwgYGRlZmF1bHRDaGVja2VkYCwgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICpcbiAqIElmIGBjaGVja2VkYCBvciBgdmFsdWVgIGFyZSBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zXG4gKiB0aGF0IGFmZmVjdCB0aGUgY2hlY2tlZCBzdGF0ZSBvciB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiB0aGV5IGFyZSBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgbm90XG4gKiB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBwcm9wcyBtdXN0IGNoYW5nZSBpbiBvcmRlciBmb3JcbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyB1bmNoZWNrZWQgKG9yIGBkZWZhdWx0Q2hlY2tlZGApXG4gKiB3aXRoIGFuIGVtcHR5IHZhbHVlIChvciBgZGVmYXVsdFZhbHVlYCkuXG4gKlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIxMDI1L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWxcbiAqL1xudmFyIFJlYWN0RE9NSW5wdXQgPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTUlucHV0JyxcbiAgdGFnTmFtZTogJ0lOUFVUJyxcblxuICBtaXhpbnM6IFtBdXRvRm9jdXNNaXhpbiwgTGlua2VkVmFsdWVVdGlscy5NaXhpbiwgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5dLFxuXG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIHJldHVybiB7XG4gICAgICBpbml0aWFsQ2hlY2tlZDogdGhpcy5wcm9wcy5kZWZhdWx0Q2hlY2tlZCB8fCBmYWxzZSxcbiAgICAgIGluaXRpYWxWYWx1ZTogZGVmYXVsdFZhbHVlICE9IG51bGwgPyBkZWZhdWx0VmFsdWUgOiBudWxsXG4gICAgfTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIC8vIENsb25lIGB0aGlzLnByb3BzYCBzbyB3ZSBkb24ndCBtdXRhdGUgdGhlIGlucHV0LlxuICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgdGhpcy5wcm9wcyk7XG5cbiAgICBwcm9wcy5kZWZhdWx0Q2hlY2tlZCA9IG51bGw7XG4gICAgcHJvcHMuZGVmYXVsdFZhbHVlID0gbnVsbDtcblxuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgcHJvcHMudmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiB0aGlzLnN0YXRlLmluaXRpYWxWYWx1ZTtcblxuICAgIHZhciBjaGVja2VkID0gTGlua2VkVmFsdWVVdGlscy5nZXRDaGVja2VkKHRoaXMpO1xuICAgIHByb3BzLmNoZWNrZWQgPSBjaGVja2VkICE9IG51bGwgPyBjaGVja2VkIDogdGhpcy5zdGF0ZS5pbml0aWFsQ2hlY2tlZDtcblxuICAgIHByb3BzLm9uQ2hhbmdlID0gdGhpcy5faGFuZGxlQ2hhbmdlO1xuXG4gICAgcmV0dXJuIGlucHV0KHByb3BzLCB0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlkID0gUmVhY3RNb3VudC5nZXRJRCh0aGlzLmdldERPTU5vZGUoKSk7XG4gICAgaW5zdGFuY2VzQnlSZWFjdElEW2lkXSA9IHRoaXM7XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciByb290Tm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIHZhciBpZCA9IFJlYWN0TW91bnQuZ2V0SUQocm9vdE5vZGUpO1xuICAgIGRlbGV0ZSBpbnN0YW5jZXNCeVJlYWN0SURbaWRdO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rpb24ocHJldlByb3BzLCBwcmV2U3RhdGUsIHByZXZDb250ZXh0KSB7XG4gICAgdmFyIHJvb3ROb2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgaWYgKHRoaXMucHJvcHMuY2hlY2tlZCAhPSBudWxsKSB7XG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShcbiAgICAgICAgcm9vdE5vZGUsXG4gICAgICAgICdjaGVja2VkJyxcbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlXG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShyb290Tm9kZSwgJ3ZhbHVlJywgJycgKyB2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIF9oYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHZhciBvbkNoYW5nZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0T25DaGFuZ2UodGhpcyk7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IG9uQ2hhbmdlLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIHVzZSBhc2FwIHRvIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaFxuICAgIC8vIGlzIGltcG9ydGFudCB3aGVuIHVzaW5nIGNvbnRyb2xsZWQgY29tcG9uZW50cyB3aXRoaW4gbGF5ZXJzOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAgIFJlYWN0VXBkYXRlcy5hc2FwKGZvcmNlVXBkYXRlSWZNb3VudGVkLCB0aGlzKTtcblxuICAgIHZhciBuYW1lID0gdGhpcy5wcm9wcy5uYW1lO1xuICAgIGlmICh0aGlzLnByb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmFtZSAhPSBudWxsKSB7XG4gICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgICAgd2hpbGUgKHF1ZXJ5Um9vdC5wYXJlbnROb2RlKSB7XG4gICAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBgcm9vdE5vZGUuZm9ybWAgd2FzIG5vbi1udWxsLCB0aGVuIHdlIGNvdWxkIHRyeSBgZm9ybS5lbGVtZW50c2AsXG4gICAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZlcyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgICAgLy8gYGZvcm0uZ2V0RWxlbWVudHNCeU5hbWVgLCBidXQgdGhhdCB3aWxsIG9ubHkgcmV0dXJuIGRpcmVjdCBjaGlsZHJlblxuICAgICAgLy8gYW5kIHdvbid0IGluY2x1ZGUgaW5wdXRzIHRoYXQgdXNlIHRoZSBIVE1MNSBgZm9ybT1gIGF0dHJpYnV0ZS4gU2luY2VcbiAgICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZlbiBiZSBpbiBhIGZvcm0sIGxldCdzIGp1c3QgdXNlIHRoZSBnbG9iYWxcbiAgICAgIC8vIGBxdWVyeVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3QgbWlzcyBhbnl0aGluZy5cbiAgICAgIHZhciBncm91cCA9IHF1ZXJ5Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAnaW5wdXRbbmFtZT0nICsgSlNPTi5zdHJpbmdpZnkoJycgKyBuYW1lKSArICddW3R5cGU9XCJyYWRpb1wiXScpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgZ3JvdXBMZW4gPSBncm91cC5sZW5ndGg7IGkgPCBncm91cExlbjsgaSsrKSB7XG4gICAgICAgIHZhciBvdGhlck5vZGUgPSBncm91cFtpXTtcbiAgICAgICAgaWYgKG90aGVyTm9kZSA9PT0gcm9vdE5vZGUgfHxcbiAgICAgICAgICAgIG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG90aGVySUQgPSBSZWFjdE1vdW50LmdldElEKG90aGVyTm9kZSk7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgb3RoZXJJRCxcbiAgICAgICAgICAnUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlICcgK1xuICAgICAgICAgICdzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLidcbiAgICAgICAgKSA6IGludmFyaWFudChvdGhlcklEKSk7XG4gICAgICAgIHZhciBvdGhlckluc3RhbmNlID0gaW5zdGFuY2VzQnlSZWFjdElEW290aGVySURdO1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIG90aGVySW5zdGFuY2UsXG4gICAgICAgICAgJ1JlYWN0RE9NSW5wdXQ6IFVua25vd24gcmFkaW8gYnV0dG9uIElEICVzLicsXG4gICAgICAgICAgb3RoZXJJRFxuICAgICAgICApIDogaW52YXJpYW50KG90aGVySW5zdGFuY2UpKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAgIC8vIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQgdG8gYmUgY29tZSByZS1jaGVja2VkXG4gICAgICAgIC8vIGFzIGFwcHJvcHJpYXRlLlxuICAgICAgICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgb3RoZXJJbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSW5wdXQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVQwMUpibkIxZEM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUkVUMDFKYm5CMWRGeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRUYxZEc5R2IyTjFjMDFwZUdsdUlEMGdjbVZ4ZFdseVpTaGNJaTR2UVhWMGIwWnZZM1Z6VFdsNGFXNWNJaWs3WEc1MllYSWdSRTlOVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6SUQwZ2NtVnhkV2x5WlNoY0lpNHZSRTlOVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6WENJcE8xeHVkbUZ5SUV4cGJtdGxaRlpoYkhWbFZYUnBiSE1nUFNCeVpYRjFhWEpsS0Z3aUxpOU1hVzVyWldSV1lXeDFaVlYwYVd4elhDSXBPMXh1ZG1GeUlGSmxZV04wUW5KdmQzTmxja052YlhCdmJtVnVkRTFwZUdsdUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkNjbTkzYzJWeVEyOXRjRzl1Wlc1MFRXbDRhVzVjSWlrN1hHNTJZWElnVW1WaFkzUkRiR0Z6Y3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFEyeGhjM05jSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wVFc5MWJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTF2ZFc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wVlhCa1lYUmxjeUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVlhCa1lYUmxjMXdpS1R0Y2JseHVkbUZ5SUdGemMybG5iaUE5SUhKbGNYVnBjbVVvWENJdUwwOWlhbVZqZEM1aGMzTnBaMjVjSWlrN1hHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNTJZWElnYVc1d2RYUWdQU0JTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUm1GamRHOXllU2duYVc1d2RYUW5LVHRjYmx4dWRtRnlJR2x1YzNSaGJtTmxjMEo1VW1WaFkzUkpSQ0E5SUh0OU8xeHVYRzVtZFc1amRHbHZiaUJtYjNKalpWVndaR0YwWlVsbVRXOTFiblJsWkNncElIdGNiaUFnTHlwcWMyaHBiblFnZG1Gc2FXUjBhR2x6T25SeWRXVWdLaTljYmlBZ2FXWWdLSFJvYVhNdWFYTk5iM1Z1ZEdWa0tDa3BJSHRjYmlBZ0lDQjBhR2x6TG1admNtTmxWWEJrWVhSbEtDazdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJKYlhCc1pXMWxiblJ6SUdGdUlEeHBibkIxZEQ0Z2JtRjBhWFpsSUdOdmJYQnZibVZ1ZENCMGFHRjBJR0ZzYkc5M2N5QnpaWFIwYVc1bklIUm9aWE5sSUc5d2RHbHZibUZzWEc0Z0tpQndjbTl3Y3pvZ1lHTm9aV05yWldSZ0xDQmdkbUZzZFdWZ0xDQmdaR1ZtWVhWc2RFTm9aV05yWldSZ0xDQmhibVFnWUdSbFptRjFiSFJXWVd4MVpXQXVYRzRnS2x4dUlDb2dTV1lnWUdOb1pXTnJaV1JnSUc5eUlHQjJZV3gxWldBZ1lYSmxJRzV2ZENCemRYQndiR2xsWkNBb2IzSWdiblZzYkM5MWJtUmxabWx1WldRcExDQjFjMlZ5SUdGamRHbHZibk5jYmlBcUlIUm9ZWFFnWVdabVpXTjBJSFJvWlNCamFHVmphMlZrSUhOMFlYUmxJRzl5SUhaaGJIVmxJSGRwYkd3Z2RISnBaMmRsY2lCMWNHUmhkR1Z6SUhSdklIUm9aU0JsYkdWdFpXNTBMbHh1SUNwY2JpQXFJRWxtSUhSb1pYa2dZWEpsSUhOMWNIQnNhV1ZrSUNoaGJtUWdibTkwSUc1MWJHd3ZkVzVrWldacGJtVmtLU3dnZEdobElISmxibVJsY21Wa0lHVnNaVzFsYm5RZ2QybHNiQ0J1YjNSY2JpQXFJSFJ5YVdkblpYSWdkWEJrWVhSbGN5QjBieUIwYUdVZ1pXeGxiV1Z1ZEM0Z1NXNXpkR1ZoWkN3Z2RHaGxJSEJ5YjNCeklHMTFjM1FnWTJoaGJtZGxJR2x1SUc5eVpHVnlJR1p2Y2x4dUlDb2dkR2hsSUhKbGJtUmxjbVZrSUdWc1pXMWxiblFnZEc4Z1ltVWdkWEJrWVhSbFpDNWNiaUFxWEc0Z0tpQlVhR1VnY21WdVpHVnlaV1FnWld4bGJXVnVkQ0IzYVd4c0lHSmxJR2x1YVhScFlXeHBlbVZrSUdGeklIVnVZMmhsWTJ0bFpDQW9iM0lnWUdSbFptRjFiSFJEYUdWamEyVmtZQ2xjYmlBcUlIZHBkR2dnWVc0Z1pXMXdkSGtnZG1Gc2RXVWdLRzl5SUdCa1pXWmhkV3gwVm1Gc2RXVmdLUzVjYmlBcVhHNGdLaUJBYzJWbElHaDBkSEE2THk5M2QzY3Vkek11YjNKbkwxUlNMekl3TVRJdlYwUXRhSFJ0YkRVdE1qQXhNakV3TWpVdmRHaGxMV2x1Y0hWMExXVnNaVzFsYm5RdWFIUnRiRnh1SUNvdlhHNTJZWElnVW1WaFkzUkVUMDFKYm5CMWRDQTlJRkpsWVdOMFEyeGhjM011WTNKbFlYUmxRMnhoYzNNb2UxeHVJQ0JrYVhOd2JHRjVUbUZ0WlRvZ0oxSmxZV04wUkU5TlNXNXdkWFFuTEZ4dUlDQjBZV2RPWVcxbE9pQW5TVTVRVlZRbkxGeHVYRzRnSUcxcGVHbHVjem9nVzBGMWRHOUdiMk4xYzAxcGVHbHVMQ0JNYVc1clpXUldZV3gxWlZWMGFXeHpMazFwZUdsdUxDQlNaV0ZqZEVKeWIzZHpaWEpEYjIxd2IyNWxiblJOYVhocGJsMHNYRzVjYmlBZ1oyVjBTVzVwZEdsaGJGTjBZWFJsT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCMllYSWdaR1ZtWVhWc2RGWmhiSFZsSUQwZ2RHaHBjeTV3Y205d2N5NWtaV1poZFd4MFZtRnNkV1U3WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lHbHVhWFJwWVd4RGFHVmphMlZrT2lCMGFHbHpMbkJ5YjNCekxtUmxabUYxYkhSRGFHVmphMlZrSUh4OElHWmhiSE5sTEZ4dUlDQWdJQ0FnYVc1cGRHbGhiRlpoYkhWbE9pQmtaV1poZFd4MFZtRnNkV1VnSVQwZ2JuVnNiQ0EvSUdSbFptRjFiSFJXWVd4MVpTQTZJRzUxYkd4Y2JpQWdJQ0I5TzF4dUlDQjlMRnh1WEc0Z0lISmxibVJsY2pvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0x5OGdRMnh2Ym1VZ1lIUm9hWE11Y0hKdmNITmdJSE52SUhkbElHUnZiaWQwSUcxMWRHRjBaU0IwYUdVZ2FXNXdkWFF1WEc0Z0lDQWdkbUZ5SUhCeWIzQnpJRDBnWVhOemFXZHVLSHQ5TENCMGFHbHpMbkJ5YjNCektUdGNibHh1SUNBZ0lIQnliM0J6TG1SbFptRjFiSFJEYUdWamEyVmtJRDBnYm5Wc2JEdGNiaUFnSUNCd2NtOXdjeTVrWldaaGRXeDBWbUZzZFdVZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnZG1GeUlIWmhiSFZsSUQwZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1blpYUldZV3gxWlNoMGFHbHpLVHRjYmlBZ0lDQndjbTl3Y3k1MllXeDFaU0E5SUhaaGJIVmxJQ0U5SUc1MWJHd2dQeUIyWVd4MVpTQTZJSFJvYVhNdWMzUmhkR1V1YVc1cGRHbGhiRlpoYkhWbE8xeHVYRzRnSUNBZ2RtRnlJR05vWldOclpXUWdQU0JNYVc1clpXUldZV3gxWlZWMGFXeHpMbWRsZEVOb1pXTnJaV1FvZEdocGN5azdYRzRnSUNBZ2NISnZjSE11WTJobFkydGxaQ0E5SUdOb1pXTnJaV1FnSVQwZ2JuVnNiQ0EvSUdOb1pXTnJaV1FnT2lCMGFHbHpMbk4wWVhSbExtbHVhWFJwWVd4RGFHVmphMlZrTzF4dVhHNGdJQ0FnY0hKdmNITXViMjVEYUdGdVoyVWdQU0IwYUdsekxsOW9ZVzVrYkdWRGFHRnVaMlU3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdhVzV3ZFhRb2NISnZjSE1zSUhSb2FYTXVjSEp2Y0hNdVkyaHBiR1J5Wlc0cE8xeHVJQ0I5TEZ4dVhHNGdJR052YlhCdmJtVnVkRVJwWkUxdmRXNTBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0IyWVhJZ2FXUWdQU0JTWldGamRFMXZkVzUwTG1kbGRFbEVLSFJvYVhNdVoyVjBSRTlOVG05a1pTZ3BLVHRjYmlBZ0lDQnBibk4wWVc1alpYTkNlVkpsWVdOMFNVUmJhV1JkSUQwZ2RHaHBjenRjYmlBZ2ZTeGNibHh1SUNCamIyMXdiMjVsYm5SWGFXeHNWVzV0YjNWdWREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkbUZ5SUhKdmIzUk9iMlJsSUQwZ2RHaHBjeTVuWlhSRVQwMU9iMlJsS0NrN1hHNGdJQ0FnZG1GeUlHbGtJRDBnVW1WaFkzUk5iM1Z1ZEM1blpYUkpSQ2h5YjI5MFRtOWtaU2s3WEc0Z0lDQWdaR1ZzWlhSbElHbHVjM1JoYm1ObGMwSjVVbVZoWTNSSlJGdHBaRjA3WEc0Z0lIMHNYRzVjYmlBZ1kyOXRjRzl1Wlc1MFJHbGtWWEJrWVhSbE9pQm1kVzVqZEdsdmJpaHdjbVYyVUhKdmNITXNJSEJ5WlhaVGRHRjBaU3dnY0hKbGRrTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdjbTl2ZEU1dlpHVWdQU0IwYUdsekxtZGxkRVJQVFU1dlpHVW9LVHRjYmlBZ0lDQnBaaUFvZEdocGN5NXdjbTl3Y3k1amFHVmphMlZrSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5NXpaWFJXWVd4MVpVWnZjbEJ5YjNCbGNuUjVLRnh1SUNBZ0lDQWdJQ0J5YjI5MFRtOWtaU3hjYmlBZ0lDQWdJQ0FnSjJOb1pXTnJaV1FuTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbkJ5YjNCekxtTm9aV05yWldRZ2ZId2dabUZzYzJWY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZG1GeUlIWmhiSFZsSUQwZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1blpYUldZV3gxWlNoMGFHbHpLVHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdMeThnUTJGemRDQmdkbUZzZFdWZ0lIUnZJR0VnYzNSeWFXNW5JSFJ2SUdWdWMzVnlaU0IwYUdVZ2RtRnNkV1VnYVhNZ2MyVjBJR052Y25KbFkzUnNlUzRnVjJocGJHVmNiaUFnSUNBZ0lDOHZJR0p5YjNkelpYSnpJSFI1Y0dsallXeHNlU0JrYnlCMGFHbHpJR0Z6SUc1bFkyVnpjMkZ5ZVN3Z2FuTmtiMjBnWkc5bGMyNG5kQzVjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3k1elpYUldZV3gxWlVadmNsQnliM0JsY25SNUtISnZiM1JPYjJSbExDQW5kbUZzZFdVbkxDQW5KeUFySUhaaGJIVmxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnWDJoaGJtUnNaVU5vWVc1blpUb2dablZ1WTNScGIyNG9aWFpsYm5RcElIdGNiaUFnSUNCMllYSWdjbVYwZFhKdVZtRnNkV1U3WEc0Z0lDQWdkbUZ5SUc5dVEyaGhibWRsSUQwZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1blpYUlBia05vWVc1blpTaDBhR2x6S1R0Y2JpQWdJQ0JwWmlBb2IyNURhR0Z1WjJVcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmxaaGJIVmxJRDBnYjI1RGFHRnVaMlV1WTJGc2JDaDBhR2x6TENCbGRtVnVkQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJRWhsY21VZ2QyVWdkWE5sSUdGellYQWdkRzhnZDJGcGRDQjFiblJwYkNCaGJHd2dkWEJrWVhSbGN5Qm9ZWFpsSUhCeWIzQmhaMkYwWldRc0lIZG9hV05vWEc0Z0lDQWdMeThnYVhNZ2FXMXdiM0owWVc1MElIZG9aVzRnZFhOcGJtY2dZMjl1ZEhKdmJHeGxaQ0JqYjIxd2IyNWxiblJ6SUhkcGRHaHBiaUJzWVhsbGNuTTZYRzRnSUNBZ0x5OGdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMlpoWTJWaWIyOXJMM0psWVdOMEwybHpjM1ZsY3k4eE5qazRYRzRnSUNBZ1VtVmhZM1JWY0dSaGRHVnpMbUZ6WVhBb1ptOXlZMlZWY0dSaGRHVkpaazF2ZFc1MFpXUXNJSFJvYVhNcE8xeHVYRzRnSUNBZ2RtRnlJRzVoYldVZ1BTQjBhR2x6TG5CeWIzQnpMbTVoYldVN1hHNGdJQ0FnYVdZZ0tIUm9hWE11Y0hKdmNITXVkSGx3WlNBOVBUMGdKM0poWkdsdkp5QW1KaUJ1WVcxbElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lIWmhjaUJ5YjI5MFRtOWtaU0E5SUhSb2FYTXVaMlYwUkU5TlRtOWtaU2dwTzF4dUlDQWdJQ0FnZG1GeUlIRjFaWEo1VW05dmRDQTlJSEp2YjNST2IyUmxPMXh1WEc0Z0lDQWdJQ0IzYUdsc1pTQW9jWFZsY25sU2IyOTBMbkJoY21WdWRFNXZaR1VwSUh0Y2JpQWdJQ0FnSUNBZ2NYVmxjbmxTYjI5MElEMGdjWFZsY25sU2IyOTBMbkJoY21WdWRFNXZaR1U3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUM4dklFbG1JR0J5YjI5MFRtOWtaUzVtYjNKdFlDQjNZWE1nYm05dUxXNTFiR3dzSUhSb1pXNGdkMlVnWTI5MWJHUWdkSEo1SUdCbWIzSnRMbVZzWlcxbGJuUnpZQ3hjYmlBZ0lDQWdJQzh2SUdKMWRDQjBhR0YwSUhOdmJXVjBhVzFsY3lCaVpXaGhkbVZ6SUhOMGNtRnVaMlZzZVNCcGJpQkpSVGd1SUZkbElHTnZkV3hrSUdGc2MyOGdkSEo1SUhWemFXNW5YRzRnSUNBZ0lDQXZMeUJnWm05eWJTNW5aWFJGYkdWdFpXNTBjMEo1VG1GdFpXQXNJR0oxZENCMGFHRjBJSGRwYkd3Z2IyNXNlU0J5WlhSMWNtNGdaR2x5WldOMElHTm9hV3hrY21WdVhHNGdJQ0FnSUNBdkx5QmhibVFnZDI5dUozUWdhVzVqYkhWa1pTQnBibkIxZEhNZ2RHaGhkQ0IxYzJVZ2RHaGxJRWhVVFV3MUlHQm1iM0p0UFdBZ1lYUjBjbWxpZFhSbExpQlRhVzVqWlZ4dUlDQWdJQ0FnTHk4Z2RHaGxJR2x1Y0hWMElHMXBaMmgwSUc1dmRDQmxkbVZ1SUdKbElHbHVJR0VnWm05eWJTd2diR1YwSjNNZ2FuVnpkQ0IxYzJVZ2RHaGxJR2RzYjJKaGJGeHVJQ0FnSUNBZ0x5OGdZSEYxWlhKNVUyVnNaV04wYjNKQmJHeGdJSFJ2SUdWdWMzVnlaU0IzWlNCa2IyNG5kQ0J0YVhOeklHRnVlWFJvYVc1bkxseHVJQ0FnSUNBZ2RtRnlJR2R5YjNWd0lEMGdjWFZsY25sU2IyOTBMbkYxWlhKNVUyVnNaV04wYjNKQmJHd29YRzRnSUNBZ0lDQWdJQ2RwYm5CMWRGdHVZVzFsUFNjZ0t5QktVMDlPTG5OMGNtbHVaMmxtZVNnbkp5QXJJRzVoYldVcElDc2dKMTFiZEhsd1pUMWNJbkpoWkdsdlhDSmRKeWs3WEc1Y2JpQWdJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdMQ0JuY205MWNFeGxiaUE5SUdkeWIzVndMbXhsYm1kMGFEc2dhU0E4SUdkeWIzVndUR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHOTBhR1Z5VG05a1pTQTlJR2R5YjNWd1cybGRPMXh1SUNBZ0lDQWdJQ0JwWmlBb2IzUm9aWEpPYjJSbElEMDlQU0J5YjI5MFRtOWtaU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdiM1JvWlhKT2IyUmxMbVp2Y20wZ0lUMDlJSEp2YjNST2IyUmxMbVp2Y20wcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCMllYSWdiM1JvWlhKSlJDQTlJRkpsWVdOMFRXOTFiblF1WjJWMFNVUW9iM1JvWlhKT2IyUmxLVHRjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSUNCdmRHaGxja2xFTEZ4dUlDQWdJQ0FnSUNBZ0lDZFNaV0ZqZEVSUFRVbHVjSFYwT2lCTmFYaHBibWNnVW1WaFkzUWdZVzVrSUc1dmJpMVNaV0ZqZENCeVlXUnBieUJwYm5CMWRITWdkMmwwYUNCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0ozTmhiV1VnWUc1aGJXVmdJR2x6SUc1dmRDQnpkWEJ3YjNKMFpXUXVKMXh1SUNBZ0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHOTBhR1Z5U1VRcEtUdGNiaUFnSUNBZ0lDQWdkbUZ5SUc5MGFHVnlTVzV6ZEdGdVkyVWdQU0JwYm5OMFlXNWpaWE5DZVZKbFlXTjBTVVJiYjNSb1pYSkpSRjA3WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUNBZ2IzUm9aWEpKYm5OMFlXNWpaU3hjYmlBZ0lDQWdJQ0FnSUNBblVtVmhZM1JFVDAxSmJuQjFkRG9nVlc1cmJtOTNiaUJ5WVdScGJ5QmlkWFIwYjI0Z1NVUWdKWE11Snl4Y2JpQWdJQ0FnSUNBZ0lDQnZkR2hsY2tsRVhHNGdJQ0FnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvYjNSb1pYSkpibk4wWVc1alpTa3BPMXh1SUNBZ0lDQWdJQ0F2THlCSlppQjBhR2x6SUdseklHRWdZMjl1ZEhKdmJHeGxaQ0J5WVdScGJ5QmlkWFIwYjI0Z1ozSnZkWEFzSUdadmNtTnBibWNnZEdobElHbHVjSFYwSUhSb1lYUmNiaUFnSUNBZ0lDQWdMeThnZDJGeklIQnlaWFpwYjNWemJIa2dZMmhsWTJ0bFpDQjBieUIxY0dSaGRHVWdkMmxzYkNCallYVnpaU0JwZENCMGJ5QmlaU0JqYjIxbElISmxMV05vWldOclpXUmNiaUFnSUNBZ0lDQWdMeThnWVhNZ1lYQndjbTl3Y21saGRHVXVYRzRnSUNBZ0lDQWdJRkpsWVdOMFZYQmtZWFJsY3k1aGMyRndLR1p2Y21ObFZYQmtZWFJsU1daTmIzVnVkR1ZrTENCdmRHaGxja2x1YzNSaGJtTmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVjBkWEp1Vm1Gc2RXVTdYRzRnSUgxY2JseHVmU2s3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JFVDAxSmJuQjFkRHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NT3B0aW9uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIG9wdGlvbiA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdvcHRpb24nKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LlxuICovXG52YXIgUmVhY3RET01PcHRpb24gPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTU9wdGlvbicsXG4gIHRhZ05hbWU6ICdPUFRJT04nLFxuXG4gIG1peGluczogW1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXSxcblxuICBjb21wb25lbnRXaWxsTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIC8vIFRPRE8gKHl1bmdzdGVycyk6IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGVkID09IG51bGwsXG4gICAgICAgICdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiAnICtcbiAgICAgICAgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9wdGlvbih0aGlzLnByb3BzLCB0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgfVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTU9wdGlvbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JFVDAxUGNIUnBiMjR1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JFVDAxUGNIUnBiMjVjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRUp5YjNkelpYSkRiMjF3YjI1bGJuUk5hWGhwYmlBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFFuSnZkM05sY2tOdmJYQnZibVZ1ZEUxcGVHbHVYQ0lwTzF4dWRtRnlJRkpsWVdOMFEyeGhjM01nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOc1lYTnpYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZ3aUtUdGNibHh1ZG1GeUlIZGhjbTVwYm1jZ1BTQnlaWEYxYVhKbEtGd2lMaTkzWVhKdWFXNW5YQ0lwTzF4dVhHNTJZWElnYjNCMGFXOXVJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVaaFkzUnZjbmtvSjI5d2RHbHZiaWNwTzF4dVhHNHZLaXBjYmlBcUlFbHRjR3hsYldWdWRITWdZVzRnUEc5d2RHbHZiajRnYm1GMGFYWmxJR052YlhCdmJtVnVkQ0IwYUdGMElIZGhjbTV6SUhkb1pXNGdZSE5sYkdWamRHVmtZQ0JwY3lCelpYUXVYRzRnS2k5Y2JuWmhjaUJTWldGamRFUlBUVTl3ZEdsdmJpQTlJRkpsWVdOMFEyeGhjM011WTNKbFlYUmxRMnhoYzNNb2UxeHVJQ0JrYVhOd2JHRjVUbUZ0WlRvZ0oxSmxZV04wUkU5TlQzQjBhVzl1Snl4Y2JpQWdkR0ZuVG1GdFpUb2dKMDlRVkVsUFRpY3NYRzVjYmlBZ2JXbDRhVzV6T2lCYlVtVmhZM1JDY205M2MyVnlRMjl0Y0c5dVpXNTBUV2w0YVc1ZExGeHVYRzRnSUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZERvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0x5OGdWRTlFVHlBb2VYVnVaM04wWlhKektUb2dVbVZ0YjNabElITjFjSEJ2Y25RZ1ptOXlJR0J6Wld4bFkzUmxaR0FnYVc0Z1BHOXdkR2x2Ymo0dVhHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJSFJvYVhNdWNISnZjSE11YzJWc1pXTjBaV1FnUFQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ0FnSjFWelpTQjBhR1VnWUdSbFptRjFiSFJXWVd4MVpXQWdiM0lnWUhaaGJIVmxZQ0J3Y205d2N5QnZiaUE4YzJWc1pXTjBQaUJwYm5OMFpXRmtJRzltSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5jMlYwZEdsdVp5QmdjMlZzWldOMFpXUmdJRzl1SUR4dmNIUnBiMjQrTGlkY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ2NtVnVaR1Z5T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCeVpYUjFjbTRnYjNCMGFXOXVLSFJvYVhNdWNISnZjSE1zSUhSb2FYTXVjSEp2Y0hNdVkyaHBiR1J5Wlc0cE8xeHVJQ0I5WEc1Y2JuMHBPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBSRTlOVDNCMGFXOXVPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTVNlbGVjdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEF1dG9Gb2N1c01peGluID0gcmVxdWlyZShcIi4vQXV0b0ZvY3VzTWl4aW5cIik7XG52YXIgTGlua2VkVmFsdWVVdGlscyA9IHJlcXVpcmUoXCIuL0xpbmtlZFZhbHVlVXRpbHNcIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcblxudmFyIHNlbGVjdCA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdzZWxlY3QnKTtcblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0lmUGVuZGluZ1VwZGF0ZUFuZE1vdW50ZWQoKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIGlmICh0aGlzLl9wZW5kaW5nVXBkYXRlKSB7XG4gICAgdGhpcy5fcGVuZGluZ1VwZGF0ZSA9IGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdGhpcy5pc01vdW50ZWQoKSkge1xuICAgICAgdXBkYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZWxlY3RWYWx1ZVR5cGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwcm9wcy5tdWx0aXBsZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJUaGUgYFwiICsgcHJvcE5hbWUgKyBcImAgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmIFwiKSArXG4gICAgICAgIChcImBtdWx0aXBsZWAgaXMgdHJ1ZS5cIilcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIlRoZSBgXCIgKyBwcm9wTmFtZSArIFwiYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYSBzY2FsYXIgXCIpICtcbiAgICAgICAgKFwidmFsdWUgaWYgYG11bHRpcGxlYCBpcyBmYWxzZS5cIilcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50IEluc3RhbmNlIG9mIFJlYWN0RE9NU2VsZWN0XG4gKiBAcGFyYW0geyp9IHByb3BWYWx1ZSBBIHN0cmluZ2FibGUgKHdpdGggYG11bHRpcGxlYCwgYSBsaXN0IG9mIHN0cmluZ2FibGVzKS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMoY29tcG9uZW50LCBwcm9wVmFsdWUpIHtcbiAgdmFyIHNlbGVjdGVkVmFsdWUsIGksIGw7XG4gIHZhciBvcHRpb25zID0gY29tcG9uZW50LmdldERPTU5vZGUoKS5vcHRpb25zO1xuXG4gIGlmIChjb21wb25lbnQucHJvcHMubXVsdGlwbGUpIHtcbiAgICBzZWxlY3RlZFZhbHVlID0ge307XG4gICAgZm9yIChpID0gMCwgbCA9IHByb3BWYWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHNlbGVjdGVkVmFsdWVbJycgKyBwcm9wVmFsdWVbaV1dID0gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChpID0gMCwgbCA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlLmhhc093blByb3BlcnR5KG9wdGlvbnNbaV0udmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbnNbaV0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbaV0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IHNldCBgc2VsZWN0LnZhbHVlYCBhcyBleGFjdCBiZWhhdmlvciBpc24ndCBjb25zaXN0ZW50IGFjcm9zcyBhbGxcbiAgICAvLyBicm93c2VycyBmb3IgYWxsIGNhc2VzLlxuICAgIHNlbGVjdGVkVmFsdWUgPSAnJyArIHByb3BWYWx1ZTtcbiAgICBmb3IgKGkgPSAwLCBsID0gb3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChvcHRpb25zW2ldLnZhbHVlID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgb3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBhbGxvd3Mgb3B0aW9uYWxseSBzZXR0aW5nIHRoZVxuICogcHJvcHMgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuIElmIGBtdWx0aXBsZWAgaXMgZmFsc2UsIHRoZSBwcm9wIG11c3QgYmUgYVxuICogc3RyaW5nYWJsZS4gSWYgYG11bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ2FibGVzLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGNoYW5nZSB0aGVcbiAqIHNlbGVjdGVkIG9wdGlvbiB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAqXG4gKiBJZiBpdCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBvcHRpb25zIHdpbGwgbm90XG4gKiB1cGRhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb25zLiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIG9wdGlvbnMgdG8gdXBkYXRlLlxuICpcbiAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBhbnkgb3B0aW9ucyB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMgd2lsbCBiZVxuICogc2VsZWN0ZWQuXG4gKi9cbnZhciBSZWFjdERPTVNlbGVjdCA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NU2VsZWN0JyxcbiAgdGFnTmFtZTogJ1NFTEVDVCcsXG5cbiAgbWl4aW5zOiBbQXV0b0ZvY3VzTWl4aW4sIExpbmtlZFZhbHVlVXRpbHMuTWl4aW4sIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXSxcblxuICBwcm9wVHlwZXM6IHtcbiAgICBkZWZhdWx0VmFsdWU6IHNlbGVjdFZhbHVlVHlwZSxcbiAgICB2YWx1ZTogc2VsZWN0VmFsdWVUeXBlXG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAvLyBDbG9uZSBgdGhpcy5wcm9wc2Agc28gd2UgZG9uJ3QgbXV0YXRlIHRoZSBpbnB1dC5cbiAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuXG4gICAgcHJvcHMub25DaGFuZ2UgPSB0aGlzLl9oYW5kbGVDaGFuZ2U7XG4gICAgcHJvcHMudmFsdWUgPSBudWxsO1xuXG4gICAgcmV0dXJuIHNlbGVjdChwcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wZW5kaW5nVXBkYXRlID0gZmFsc2U7XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyh0aGlzLCB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rpb24ocHJldlByb3BzKSB7XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fcGVuZGluZ1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgdXBkYXRlT3B0aW9ucyh0aGlzLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICghcHJldlByb3BzLm11bHRpcGxlICE9PSAhdGhpcy5wcm9wcy5tdWx0aXBsZSkge1xuICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlT3B0aW9ucyh0aGlzLCB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdGhpcy5wcm9wcy5tdWx0aXBsZSA/IFtdIDogJycpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciByZXR1cm5WYWx1ZTtcbiAgICB2YXIgb25DaGFuZ2UgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldE9uQ2hhbmdlKHRoaXMpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBvbkNoYW5nZS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZW5kaW5nVXBkYXRlID0gdHJ1ZTtcbiAgICBSZWFjdFVwZGF0ZXMuYXNhcCh1cGRhdGVPcHRpb25zSWZQZW5kaW5nVXBkYXRlQW5kTW91bnRlZCwgdGhpcyk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NU2VsZWN0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NU2VsZWN0aW9uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQgPSByZXF1aXJlKFwiLi9nZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0XCIpO1xudmFyIGdldFRleHRDb250ZW50QWNjZXNzb3IgPSByZXF1aXJlKFwiLi9nZXRUZXh0Q29udGVudEFjY2Vzc29yXCIpO1xuXG4vKipcbiAqIFdoaWxlIGBpc0NvbGxhcHNlZGAgaXMgYXZhaWxhYmxlIG9uIHRoZSBTZWxlY3Rpb24gb2JqZWN0IGFuZCBgY29sbGFwc2VkYFxuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBSYW5nZSBvYmplY3QsIElFMTEgc29tZXRpbWVzIGdldHMgdGhlbSB3cm9uZy5cbiAqIElmIHRoZSBhbmNob3IvZm9jdXMgbm9kZXMgYW5kIG9mZnNldHMgYXJlIHRoZSBzYW1lLCB0aGUgcmFuZ2UgaXMgY29sbGFwc2VkLlxuICovXG5mdW5jdGlvbiBpc0NvbGxhcHNlZChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgcmV0dXJuIGFuY2hvck5vZGUgPT09IGZvY3VzTm9kZSAmJiBhbmNob3JPZmZzZXQgPT09IGZvY3VzT2Zmc2V0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgYXBwcm9wcmlhdGUgYW5jaG9yIGFuZCBmb2N1cyBub2RlL29mZnNldCBwYWlycyBmb3IgSUUuXG4gKlxuICogVGhlIGNhdGNoIGhlcmUgaXMgdGhhdCBJRSdzIHNlbGVjdGlvbiBBUEkgZG9lc24ndCBwcm92aWRlIGluZm9ybWF0aW9uXG4gKiBhYm91dCB3aGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgZm9yd2FyZCBvciBiYWNrd2FyZCwgc28gd2UgaGF2ZSB0b1xuICogYmVoYXZlIGFzIHRob3VnaCBpdCdzIGFsd2F5cyBmb3J3YXJkLlxuICpcbiAqIElFIHRleHQgZGlmZmVycyBmcm9tIG1vZGVybiBzZWxlY3Rpb24gaW4gdGhhdCBpdCBiZWhhdmVzIGFzIHRob3VnaFxuICogYmxvY2sgZWxlbWVudHMgZW5kIHdpdGggYSBuZXcgbGluZS4gVGhpcyBtZWFucyBjaGFyYWN0ZXIgb2Zmc2V0cyB3aWxsXG4gKiBkaWZmZXIgYmV0d2VlbiB0aGUgdHdvIEFQSXMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldElFT2Zmc2V0cyhub2RlKSB7XG4gIHZhciBzZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb247XG4gIHZhciBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG4gIHZhciBzZWxlY3RlZExlbmd0aCA9IHNlbGVjdGVkUmFuZ2UudGV4dC5sZW5ndGg7XG5cbiAgLy8gRHVwbGljYXRlIHNlbGVjdGlvbiBzbyB3ZSBjYW4gbW92ZSByYW5nZSB3aXRob3V0IGJyZWFraW5nIHVzZXIgc2VsZWN0aW9uLlxuICB2YXIgZnJvbVN0YXJ0ID0gc2VsZWN0ZWRSYW5nZS5kdXBsaWNhdGUoKTtcbiAgZnJvbVN0YXJ0Lm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUpO1xuICBmcm9tU3RhcnQuc2V0RW5kUG9pbnQoJ0VuZFRvU3RhcnQnLCBzZWxlY3RlZFJhbmdlKTtcblxuICB2YXIgc3RhcnRPZmZzZXQgPSBmcm9tU3RhcnQudGV4dC5sZW5ndGg7XG4gIHZhciBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIHNlbGVjdGVkTGVuZ3RoO1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0T2Zmc2V0LFxuICAgIGVuZDogZW5kT2Zmc2V0XG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRNb2Rlcm5PZmZzZXRzKG5vZGUpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICB2YXIgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldDtcbiAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7XG4gIHZhciBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcblxuICB2YXIgY3VycmVudFJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG5cbiAgLy8gSWYgdGhlIG5vZGUgYW5kIG9mZnNldCB2YWx1ZXMgYXJlIHRoZSBzYW1lLCB0aGUgc2VsZWN0aW9uIGlzIGNvbGxhcHNlZC5cbiAgLy8gYFNlbGVjdGlvbi5pc0NvbGxhcHNlZGAgaXMgYXZhaWxhYmxlIG5hdGl2ZWx5LCBidXQgSUUgc29tZXRpbWVzIGdldHNcbiAgLy8gdGhpcyB2YWx1ZSB3cm9uZy5cbiAgdmFyIGlzU2VsZWN0aW9uQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQoXG4gICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICApO1xuXG4gIHZhciByYW5nZUxlbmd0aCA9IGlzU2VsZWN0aW9uQ29sbGFwc2VkID8gMCA6IGN1cnJlbnRSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcblxuICB2YXIgdGVtcFJhbmdlID0gY3VycmVudFJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgdGVtcFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTtcbiAgdGVtcFJhbmdlLnNldEVuZChjdXJyZW50UmFuZ2Uuc3RhcnRDb250YWluZXIsIGN1cnJlbnRSYW5nZS5zdGFydE9mZnNldCk7XG5cbiAgdmFyIGlzVGVtcFJhbmdlQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQoXG4gICAgdGVtcFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHRlbXBSYW5nZS5zdGFydE9mZnNldCxcbiAgICB0ZW1wUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgIHRlbXBSYW5nZS5lbmRPZmZzZXRcbiAgKTtcblxuICB2YXIgc3RhcnQgPSBpc1RlbXBSYW5nZUNvbGxhcHNlZCA/IDAgOiB0ZW1wUmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7XG4gIHZhciBlbmQgPSBzdGFydCArIHJhbmdlTGVuZ3RoO1xuXG4gIC8vIERldGVjdCB3aGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgYmFja3dhcmQuXG4gIHZhciBkZXRlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIGRldGVjdGlvblJhbmdlLnNldFN0YXJ0KGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCk7XG4gIGRldGVjdGlvblJhbmdlLnNldEVuZChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbiAgdmFyIGlzQmFja3dhcmQgPSBkZXRlY3Rpb25SYW5nZS5jb2xsYXBzZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogaXNCYWNrd2FyZCA/IGVuZCA6IHN0YXJ0LFxuICAgIGVuZDogaXNCYWNrd2FyZCA/IHN0YXJ0IDogZW5kXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5mdW5jdGlvbiBzZXRJRU9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS5kdXBsaWNhdGUoKTtcbiAgdmFyIHN0YXJ0LCBlbmQ7XG5cbiAgaWYgKHR5cGVvZiBvZmZzZXRzLmVuZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gIH0gZWxzZSBpZiAob2Zmc2V0cy5zdGFydCA+IG9mZnNldHMuZW5kKSB7XG4gICAgc3RhcnQgPSBvZmZzZXRzLmVuZDtcbiAgICBlbmQgPSBvZmZzZXRzLnN0YXJ0O1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgICBlbmQgPSBvZmZzZXRzLmVuZDtcbiAgfVxuXG4gIHJhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUpO1xuICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KTtcbiAgcmFuZ2Uuc2V0RW5kUG9pbnQoJ0VuZFRvU3RhcnQnLCByYW5nZSk7XG4gIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZCAtIHN0YXJ0KTtcbiAgcmFuZ2Uuc2VsZWN0KCk7XG59XG5cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2FuIHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4gKiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cbmZ1bmN0aW9uIHNldE1vZGVybk9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZVtnZXRUZXh0Q29udGVudEFjY2Vzc29yKCldLmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0cy5zdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IHR5cGVvZiBvZmZzZXRzLmVuZCA9PT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICAgICAgc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTtcblxuICAvLyBJRSAxMSB1c2VzIG1vZGVybiBzZWxlY3Rpb24sIGJ1dCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4dGVuZCBtZXRob2QuXG4gIC8vIEZsaXAgYmFja3dhcmQgc2VsZWN0aW9ucywgc28gd2UgY2FuIHNldCB3aXRoIGEgc2luZ2xlIHJhbmdlLlxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHVzZUlFT2Zmc2V0cyA9IChcbiAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmXG4gICdzZWxlY3Rpb24nIGluIGRvY3VtZW50ICYmXG4gICEoJ2dldFNlbGVjdGlvbicgaW4gd2luZG93KVxuKTtcblxudmFyIFJlYWN0RE9NU2VsZWN0aW9uID0ge1xuICAvKipcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqL1xuICBnZXRPZmZzZXRzOiB1c2VJRU9mZnNldHMgPyBnZXRJRU9mZnNldHMgOiBnZXRNb2Rlcm5PZmZzZXRzLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAgICovXG4gIHNldE9mZnNldHM6IHVzZUlFT2Zmc2V0cyA/IHNldElFT2Zmc2V0cyA6IHNldE1vZGVybk9mZnNldHNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01TZWxlY3Rpb247XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5T3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCA9XG4gIHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RET01Db21wb25lbnRcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlciA9IHJlcXVpcmUoXCIuL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlclwiKTtcblxuLyoqXG4gKiBUZXh0IG5vZGVzIHZpb2xhdGUgYSBjb3VwbGUgYXNzdW1wdGlvbnMgdGhhdCBSZWFjdCBtYWtlcyBhYm91dCBjb21wb25lbnRzOlxuICpcbiAqICAtIFdoZW4gbW91bnRpbmcgdGV4dCBpbnRvIHRoZSBET00sIGFkamFjZW50IHRleHQgbm9kZXMgYXJlIG1lcmdlZC5cbiAqICAtIFRleHQgbm9kZXMgY2Fubm90IGJlIGFzc2lnbmVkIGEgUmVhY3Qgcm9vdCBJRC5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIHdyYXAgc3RyaW5ncyBpbiBlbGVtZW50cyBzbyB0aGF0IHRoZXkgY2FuIHVuZGVyZ29cbiAqIHRoZSBzYW1lIHJlY29uY2lsaWF0aW9uIHRoYXQgaXMgYXBwbGllZCB0byBlbGVtZW50cy5cbiAqXG4gKiBUT0RPOiBJbnZlc3RpZ2F0ZSByZXByZXNlbnRpbmcgUmVhY3QgY29tcG9uZW50cyBpbiB0aGUgRE9NIHdpdGggdGV4dCBub2Rlcy5cbiAqXG4gKiBAY2xhc3MgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdENvbXBvbmVudFxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdERPTVRleHRDb21wb25lbnQgPSBmdW5jdGlvbihwcm9wcykge1xuICAvLyBUaGlzIGNvbnN0cnVjdG9yIGFuZCBpdHMgYXJndW1lbnQgaXMgY3VycmVudGx5IHVzZWQgYnkgbW9ja3MuXG59O1xuXG5hc3NpZ24oUmVhY3RET01UZXh0Q29tcG9uZW50LnByb3RvdHlwZSwge1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlYWN0VGV4dH0gdGV4dFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24odGV4dCkge1xuICAgIC8vIFRPRE86IFRoaXMgaXMgcmVhbGx5IGEgUmVhY3RUZXh0IChSZWFjdE5vZGUpLCBub3QgYSBSZWFjdEVsZW1lbnRcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IHRleHQ7XG4gICAgdGhpcy5fc3RyaW5nVGV4dCA9ICcnICsgdGV4dDtcblxuICAgIC8vIFByb3BlcnRpZXNcbiAgICB0aGlzLl9yb290Tm9kZUlEID0gbnVsbDtcbiAgICB0aGlzLl9tb3VudEluZGV4ID0gMDtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgbWFya3VwIGZvciB0aGlzIHRleHQgbm9kZS4gVGhpcyBub2RlIGlzIG5vdCBpbnRlbmRlZCB0byBoYXZlXG4gICAqIGFueSBmZWF0dXJlcyBiZXNpZGVzIGNvbnRhaW5pbmcgdGV4dCBjb250ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIERPTSBJRCBvZiB0aGUgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7c3RyaW5nfSBNYXJrdXAgZm9yIHRoaXMgdGV4dCBub2RlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihyb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IHJvb3RJRDtcbiAgICB2YXIgZXNjYXBlZFRleHQgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIodGhpcy5fc3RyaW5nVGV4dCk7XG5cbiAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgd3JhcCB0aGlzIGluIGEgYHNwYW5gIGZvciB0aGUgcmVhc29ucyBzdGF0ZWQgYWJvdmUsIGJ1dFxuICAgICAgLy8gc2luY2UgdGhpcyBpcyBhIHNpdHVhdGlvbiB3aGVyZSBSZWFjdCB3b24ndCB0YWtlIG92ZXIgKHN0YXRpYyBwYWdlcyksXG4gICAgICAvLyB3ZSBjYW4gc2ltcGx5IHJldHVybiB0aGUgdGV4dCBhcyBpdCBpcy5cbiAgICAgIHJldHVybiBlc2NhcGVkVGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgJzxzcGFuICcgKyBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9ySUQocm9vdElEKSArICc+JyArXG4gICAgICAgIGVzY2FwZWRUZXh0ICtcbiAgICAgICc8L3NwYW4+J1xuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhpcyBjb21wb25lbnQgYnkgdXBkYXRpbmcgdGhlIHRleHQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFRleHR9IG5leHRUZXh0IFRoZSBuZXh0IHRleHQgY29udGVudFxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24obmV4dFRleHQsIHRyYW5zYWN0aW9uKSB7XG4gICAgaWYgKG5leHRUZXh0ICE9PSB0aGlzLl9jdXJyZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0VGV4dDtcbiAgICAgIHZhciBuZXh0U3RyaW5nVGV4dCA9ICcnICsgbmV4dFRleHQ7XG4gICAgICBpZiAobmV4dFN0cmluZ1RleHQgIT09IHRoaXMuX3N0cmluZ1RleHQpIHtcbiAgICAgICAgLy8gVE9ETzogU2F2ZSB0aGlzIGFzIHBlbmRpbmcgcHJvcHMgYW5kIHVzZSBwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnlcbiAgICAgICAgLy8gYW5kL29yIHVwZGF0ZUNvbXBvbmVudCB0byBkbyB0aGUgYWN0dWFsIHVwZGF0ZSBmb3IgY29uc2lzdGVuY3kgd2l0aFxuICAgICAgICAvLyBvdGhlciBjb21wb25lbnQgdHlwZXM/XG4gICAgICAgIHRoaXMuX3N0cmluZ1RleHQgPSBuZXh0U3RyaW5nVGV4dDtcbiAgICAgICAgUmVhY3RET01Db21wb25lbnQuQmFja2VuZElET3BlcmF0aW9ucy51cGRhdGVUZXh0Q29udGVudEJ5SUQoXG4gICAgICAgICAgdGhpcy5fcm9vdE5vZGVJRCxcbiAgICAgICAgICBuZXh0U3RyaW5nVGV4dFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbigpIHtcbiAgICBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudC51bm1vdW50SURGcm9tRW52aXJvbm1lbnQodGhpcy5fcm9vdE5vZGVJRCk7XG4gIH1cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01UZXh0Q29tcG9uZW50O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTVRleHRhcmVhXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXV0b0ZvY3VzTWl4aW4gPSByZXF1aXJlKFwiLi9BdXRvRm9jdXNNaXhpblwiKTtcbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgTGlua2VkVmFsdWVVdGlscyA9IHJlcXVpcmUoXCIuL0xpbmtlZFZhbHVlVXRpbHNcIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIHRleHRhcmVhID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoJ3RleHRhcmVhJyk7XG5cbmZ1bmN0aW9uIGZvcmNlVXBkYXRlSWZNb3VudGVkKCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICBpZiAodGhpcy5pc01vdW50ZWQoKSkge1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8dGV4dGFyZWE+IG5hdGl2ZSBjb21wb25lbnQgdGhhdCBhbGxvd3Mgc2V0dGluZyBgdmFsdWVgLCBhbmRcbiAqIGBkZWZhdWx0VmFsdWVgLiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgdHJhZGl0aW9uYWwgRE9NIEFQSSBiZWNhdXNlIHZhbHVlIGlzXG4gKiB1c3VhbGx5IHNldCBhcyBQQ0RBVEEgY2hpbGRyZW4uXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgYWZmZWN0IHRoZVxuICogdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGxcbiAqIG5vdCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBhbiBlbXB0eSB2YWx1ZSwgdGhlIHByb3BcbiAqIGBkZWZhdWx0VmFsdWVgIGlmIHNwZWNpZmllZCwgb3IgdGhlIGNoaWxkcmVuIGNvbnRlbnQgKGRlcHJlY2F0ZWQpLlxuICovXG52YXIgUmVhY3RET01UZXh0YXJlYSA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NVGV4dGFyZWEnLFxuICB0YWdOYW1lOiAnVEVYVEFSRUEnLFxuXG4gIG1peGluczogW0F1dG9Gb2N1c01peGluLCBMaW5rZWRWYWx1ZVV0aWxzLk1peGluLCBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbl0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgLy8gVE9ETyAoeXVuZ3N0ZXJzKTogUmVtb3ZlIHN1cHBvcnQgZm9yIGNoaWxkcmVuIGNvbnRlbnQgaW4gPHRleHRhcmVhPi5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgaW5zdGVhZCBvZiBzZXR0aW5nICcgK1xuICAgICAgICAgICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LidcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgfVxuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgZGVmYXVsdFZhbHVlID09IG51bGwsXG4gICAgICAgICdJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uJ1xuICAgICAgKSA6IGludmFyaWFudChkZWZhdWx0VmFsdWUgPT0gbnVsbCkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgY2hpbGRyZW4ubGVuZ3RoIDw9IDEsXG4gICAgICAgICAgJzx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC4nXG4gICAgICAgICkgOiBpbnZhcmlhbnQoY2hpbGRyZW4ubGVuZ3RoIDw9IDEpKTtcbiAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlblswXTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdFZhbHVlID0gJycgKyBjaGlsZHJlbjtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICB9XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZSh0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gV2Ugc2F2ZSB0aGUgaW5pdGlhbCB2YWx1ZSBzbyB0aGF0IGBSZWFjdERPTUNvbXBvbmVudGAgZG9lc24ndCB1cGRhdGVcbiAgICAgIC8vIGB0ZXh0Q29udGVudGAgKHVubmVjZXNzYXJ5IHNpbmNlIHdlIHVwZGF0ZSB2YWx1ZSkuXG4gICAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBjYW4gYmUgYSBib29sZWFuIG9yIG9iamVjdCBzbyB0aGF0J3Mgd2h5IGl0J3NcbiAgICAgIC8vIGZvcmNlZCB0byBiZSBhIHN0cmluZy5cbiAgICAgIGluaXRpYWxWYWx1ZTogJycgKyAodmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogZGVmYXVsdFZhbHVlKVxuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAvLyBDbG9uZSBgdGhpcy5wcm9wc2Agc28gd2UgZG9uJ3QgbXV0YXRlIHRoZSBpbnB1dC5cbiAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwsXG4gICAgICAnYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uJ1xuICAgICkgOiBpbnZhcmlhbnQocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT0gbnVsbCkpO1xuXG4gICAgcHJvcHMuZGVmYXVsdFZhbHVlID0gbnVsbDtcbiAgICBwcm9wcy52YWx1ZSA9IG51bGw7XG4gICAgcHJvcHMub25DaGFuZ2UgPSB0aGlzLl9oYW5kbGVDaGFuZ2U7XG5cbiAgICAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAgIC8vIGdldCByZXNldCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0ZWQuXG4gICAgcmV0dXJuIHRleHRhcmVhKHByb3BzLCB0aGlzLnN0YXRlLmluaXRpYWxWYWx1ZSk7XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkVXBkYXRlOiBmdW5jdGlvbihwcmV2UHJvcHMsIHByZXZTdGF0ZSwgcHJldkNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JQcm9wZXJ0eShyb290Tm9kZSwgJ3ZhbHVlJywgJycgKyB2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIF9oYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJldHVyblZhbHVlO1xuICAgIHZhciBvbkNoYW5nZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0T25DaGFuZ2UodGhpcyk7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICByZXR1cm5WYWx1ZSA9IG9uQ2hhbmdlLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgdGhpcyk7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NVGV4dGFyZWE7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVQwMVVaWGgwWVhKbFlTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJFOU5WR1Y0ZEdGeVpXRmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJCZFhSdlJtOWpkWE5OYVhocGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDBGMWRHOUdiMk4xYzAxcGVHbHVYQ0lwTzF4dWRtRnlJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMFJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1YzF3aUtUdGNiblpoY2lCTWFXNXJaV1JXWVd4MVpWVjBhV3h6SUQwZ2NtVnhkV2x5WlNoY0lpNHZUR2x1YTJWa1ZtRnNkV1ZWZEdsc2Mxd2lLVHRjYm5aaGNpQlNaV0ZqZEVKeWIzZHpaWEpEYjIxd2IyNWxiblJOYVhocGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRbkp2ZDNObGNrTnZiWEJ2Ym1WdWRFMXBlR2x1WENJcE8xeHVkbUZ5SUZKbFlXTjBRMnhoYzNNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnNZWE56WENJcE8xeHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEZWd1pHRjBaWE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZWd1pHRjBaWE5jSWlrN1hHNWNiblpoY2lCaGMzTnBaMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOVBZbXBsWTNRdVlYTnphV2R1WENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVkbUZ5SUhkaGNtNXBibWNnUFNCeVpYRjFhWEpsS0Z3aUxpOTNZWEp1YVc1blhDSXBPMXh1WEc1MllYSWdkR1Y0ZEdGeVpXRWdQU0JTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUm1GamRHOXllU2duZEdWNGRHRnlaV0VuS1R0Y2JseHVablZ1WTNScGIyNGdabTl5WTJWVmNHUmhkR1ZKWmsxdmRXNTBaV1FvS1NCN1hHNGdJQzhxYW5Ob2FXNTBJSFpoYkdsa2RHaHBjenAwY25WbElDb3ZYRzRnSUdsbUlDaDBhR2x6TG1selRXOTFiblJsWkNncEtTQjdYRzRnSUNBZ2RHaHBjeTVtYjNKalpWVndaR0YwWlNncE8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dTVzF3YkdWdFpXNTBjeUJoSUR4MFpYaDBZWEpsWVQ0Z2JtRjBhWFpsSUdOdmJYQnZibVZ1ZENCMGFHRjBJR0ZzYkc5M2N5QnpaWFIwYVc1bklHQjJZV3gxWldBc0lHRnVaRnh1SUNvZ1lHUmxabUYxYkhSV1lXeDFaV0F1SUZSb2FYTWdaR2xtWm1WeWN5Qm1jbTl0SUhSb1pTQjBjbUZrYVhScGIyNWhiQ0JFVDAwZ1FWQkpJR0psWTJGMWMyVWdkbUZzZFdVZ2FYTmNiaUFxSUhWemRXRnNiSGtnYzJWMElHRnpJRkJEUkVGVVFTQmphR2xzWkhKbGJpNWNiaUFxWEc0Z0tpQkpaaUJnZG1Gc2RXVmdJR2x6SUc1dmRDQnpkWEJ3YkdsbFpDQW9iM0lnYm5Wc2JDOTFibVJsWm1sdVpXUXBMQ0IxYzJWeUlHRmpkR2x2Ym5NZ2RHaGhkQ0JoWm1abFkzUWdkR2hsWEc0Z0tpQjJZV3gxWlNCM2FXeHNJSFJ5YVdkblpYSWdkWEJrWVhSbGN5QjBieUIwYUdVZ1pXeGxiV1Z1ZEM1Y2JpQXFYRzRnS2lCSlppQmdkbUZzZFdWZ0lHbHpJSE4xY0hCc2FXVmtJQ2hoYm1RZ2JtOTBJRzUxYkd3dmRXNWtaV1pwYm1Wa0tTd2dkR2hsSUhKbGJtUmxjbVZrSUdWc1pXMWxiblFnZDJsc2JGeHVJQ29nYm05MElIUnlhV2RuWlhJZ2RYQmtZWFJsY3lCMGJ5QjBhR1VnWld4bGJXVnVkQzRnU1c1emRHVmhaQ3dnZEdobElHQjJZV3gxWldBZ2NISnZjQ0J0ZFhOMElHTm9ZVzVuWlNCcGJseHVJQ29nYjNKa1pYSWdabTl5SUhSb1pTQnlaVzVrWlhKbFpDQmxiR1Z0Wlc1MElIUnZJR0psSUhWd1pHRjBaV1F1WEc0Z0tseHVJQ29nVkdobElISmxibVJsY21Wa0lHVnNaVzFsYm5RZ2QybHNiQ0JpWlNCcGJtbDBhV0ZzYVhwbFpDQjNhWFJvSUdGdUlHVnRjSFI1SUhaaGJIVmxMQ0IwYUdVZ2NISnZjRnh1SUNvZ1lHUmxabUYxYkhSV1lXeDFaV0FnYVdZZ2MzQmxZMmxtYVdWa0xDQnZjaUIwYUdVZ1kyaHBiR1J5Wlc0Z1kyOXVkR1Z1ZENBb1pHVndjbVZqWVhSbFpDa3VYRzRnS2k5Y2JuWmhjaUJTWldGamRFUlBUVlJsZUhSaGNtVmhJRDBnVW1WaFkzUkRiR0Z6Y3k1amNtVmhkR1ZEYkdGemN5aDdYRzRnSUdScGMzQnNZWGxPWVcxbE9pQW5VbVZoWTNSRVQwMVVaWGgwWVhKbFlTY3NYRzRnSUhSaFowNWhiV1U2SUNkVVJWaFVRVkpGUVNjc1hHNWNiaUFnYldsNGFXNXpPaUJiUVhWMGIwWnZZM1Z6VFdsNGFXNHNJRXhwYm10bFpGWmhiSFZsVlhScGJITXVUV2w0YVc0c0lGSmxZV04wUW5KdmQzTmxja052YlhCdmJtVnVkRTFwZUdsdVhTeGNibHh1SUNCblpYUkpibWwwYVdGc1UzUmhkR1U2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhaaGNpQmtaV1poZFd4MFZtRnNkV1VnUFNCMGFHbHpMbkJ5YjNCekxtUmxabUYxYkhSV1lXeDFaVHRjYmlBZ0lDQXZMeUJVVDBSUElDaDVkVzVuYzNSbGNuTXBPaUJTWlcxdmRtVWdjM1Z3Y0c5eWRDQm1iM0lnWTJocGJHUnlaVzRnWTI5dWRHVnVkQ0JwYmlBOGRHVjRkR0Z5WldFK0xseHVJQ0FnSUhaaGNpQmphR2xzWkhKbGJpQTlJSFJvYVhNdWNISnZjSE11WTJocGJHUnlaVzQ3WEc0Z0lDQWdhV1lnS0dOb2FXeGtjbVZ1SUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0oxVnpaU0IwYUdVZ1lHUmxabUYxYkhSV1lXeDFaV0FnYjNJZ1lIWmhiSFZsWUNCd2NtOXdjeUJwYm5OMFpXRmtJRzltSUhObGRIUnBibWNnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMk5vYVd4a2NtVnVJRzl1SUR4MFpYaDBZWEpsWVQ0dUoxeHVJQ0FnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQmtaV1poZFd4MFZtRnNkV1VnUFQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ0FnSjBsbUlIbHZkU0J6ZFhCd2JIa2dZR1JsWm1GMWJIUldZV3gxWldBZ2IyNGdZU0E4ZEdWNGRHRnlaV0UrTENCa2J5QnViM1FnY0dGemN5QmphR2xzWkhKbGJpNG5YRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0dSbFptRjFiSFJXWVd4MVpTQTlQU0J1ZFd4c0tTazdYRzRnSUNBZ0lDQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaGphR2xzWkhKbGJpa3BJSHRjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSUNCamFHbHNaSEpsYmk1c1pXNW5kR2dnUEQwZ01TeGNiaUFnSUNBZ0lDQWdJQ0FuUEhSbGVIUmhjbVZoUGlCallXNGdiMjVzZVNCb1lYWmxJR0YwSUcxdmMzUWdiMjVsSUdOb2FXeGtMaWRjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaGphR2xzWkhKbGJpNXNaVzVuZEdnZ1BEMGdNU2twTzF4dUlDQWdJQ0FnSUNCamFHbHNaSEpsYmlBOUlHTm9hV3hrY21WdVd6QmRPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JrWldaaGRXeDBWbUZzZFdVZ1BTQW5KeUFySUdOb2FXeGtjbVZ1TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWkdWbVlYVnNkRlpoYkhWbElEMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHUmxabUYxYkhSV1lXeDFaU0E5SUNjbk8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ2RtRnNkV1VnUFNCTWFXNXJaV1JXWVd4MVpWVjBhV3h6TG1kbGRGWmhiSFZsS0hSb2FYTXBPMXh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBdkx5QlhaU0J6WVhabElIUm9aU0JwYm1sMGFXRnNJSFpoYkhWbElITnZJSFJvWVhRZ1lGSmxZV04wUkU5TlEyOXRjRzl1Wlc1MFlDQmtiMlZ6YmlkMElIVndaR0YwWlZ4dUlDQWdJQ0FnTHk4Z1lIUmxlSFJEYjI1MFpXNTBZQ0FvZFc1dVpXTmxjM05oY25rZ2MybHVZMlVnZDJVZ2RYQmtZWFJsSUhaaGJIVmxLUzVjYmlBZ0lDQWdJQzh2SUZSb1pTQnBibWwwYVdGc0lIWmhiSFZsSUdOaGJpQmlaU0JoSUdKdmIyeGxZVzRnYjNJZ2IySnFaV04wSUhOdklIUm9ZWFFuY3lCM2FIa2dhWFFuYzF4dUlDQWdJQ0FnTHk4Z1ptOXlZMlZrSUhSdklHSmxJR0VnYzNSeWFXNW5MbHh1SUNBZ0lDQWdhVzVwZEdsaGJGWmhiSFZsT2lBbkp5QXJJQ2gyWVd4MVpTQWhQU0J1ZFd4c0lEOGdkbUZzZFdVZ09pQmtaV1poZFd4MFZtRnNkV1VwWEc0Z0lDQWdmVHRjYmlBZ2ZTeGNibHh1SUNCeVpXNWtaWEk2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUM4dklFTnNiMjVsSUdCMGFHbHpMbkJ5YjNCellDQnpieUIzWlNCa2IyNG5kQ0J0ZFhSaGRHVWdkR2hsSUdsdWNIVjBMbHh1SUNBZ0lIWmhjaUJ3Y205d2N5QTlJR0Z6YzJsbmJpaDdmU3dnZEdocGN5NXdjbTl3Y3lrN1hHNWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnY0hKdmNITXVaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV3Z1BUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkZ1pHRnVaMlZ5YjNWemJIbFRaWFJKYm01bGNraFVUVXhnSUdSdlpYTWdibTkwSUcxaGEyVWdjMlZ1YzJVZ2IyNGdQSFJsZUhSaGNtVmhQaTRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENod2NtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRDQTlQU0J1ZFd4c0tTazdYRzVjYmlBZ0lDQndjbTl3Y3k1a1pXWmhkV3gwVm1Gc2RXVWdQU0J1ZFd4c08xeHVJQ0FnSUhCeWIzQnpMblpoYkhWbElEMGdiblZzYkR0Y2JpQWdJQ0J3Y205d2N5NXZia05vWVc1blpTQTlJSFJvYVhNdVgyaGhibVJzWlVOb1lXNW5aVHRjYmx4dUlDQWdJQzh2SUVGc2QyRjVjeUJ6WlhRZ1kyaHBiR1J5Wlc0Z2RHOGdkR2hsSUhOaGJXVWdkR2hwYm1jdUlFbHVJRWxGT1N3Z2RHaGxJSE5sYkdWamRHbHZiaUJ5WVc1blpTQjNhV3hzWEc0Z0lDQWdMeThnWjJWMElISmxjMlYwSUdsbUlHQjBaWGgwUTI5dWRHVnVkR0FnYVhNZ2JYVjBZWFJsWkM1Y2JpQWdJQ0J5WlhSMWNtNGdkR1Y0ZEdGeVpXRW9jSEp2Y0hNc0lIUm9hWE11YzNSaGRHVXVhVzVwZEdsaGJGWmhiSFZsS1R0Y2JpQWdmU3hjYmx4dUlDQmpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVTZJR1oxYm1OMGFXOXVLSEJ5WlhaUWNtOXdjeXdnY0hKbGRsTjBZWFJsTENCd2NtVjJRMjl1ZEdWNGRDa2dlMXh1SUNBZ0lIWmhjaUIyWVd4MVpTQTlJRXhwYm10bFpGWmhiSFZsVlhScGJITXVaMlYwVm1Gc2RXVW9kR2hwY3lrN1hHNGdJQ0FnYVdZZ0tIWmhiSFZsSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUhaaGNpQnliMjkwVG05a1pTQTlJSFJvYVhNdVoyVjBSRTlOVG05a1pTZ3BPMXh1SUNBZ0lDQWdMeThnUTJGemRDQmdkbUZzZFdWZ0lIUnZJR0VnYzNSeWFXNW5JSFJ2SUdWdWMzVnlaU0IwYUdVZ2RtRnNkV1VnYVhNZ2MyVjBJR052Y25KbFkzUnNlUzRnVjJocGJHVmNiaUFnSUNBZ0lDOHZJR0p5YjNkelpYSnpJSFI1Y0dsallXeHNlU0JrYnlCMGFHbHpJR0Z6SUc1bFkyVnpjMkZ5ZVN3Z2FuTmtiMjBnWkc5bGMyNG5kQzVjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3k1elpYUldZV3gxWlVadmNsQnliM0JsY25SNUtISnZiM1JPYjJSbExDQW5kbUZzZFdVbkxDQW5KeUFySUhaaGJIVmxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnWDJoaGJtUnNaVU5vWVc1blpUb2dablZ1WTNScGIyNG9aWFpsYm5RcElIdGNiaUFnSUNCMllYSWdjbVYwZFhKdVZtRnNkV1U3WEc0Z0lDQWdkbUZ5SUc5dVEyaGhibWRsSUQwZ1RHbHVhMlZrVm1Gc2RXVlZkR2xzY3k1blpYUlBia05vWVc1blpTaDBhR2x6S1R0Y2JpQWdJQ0JwWmlBb2IyNURhR0Z1WjJVcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmxaaGJIVmxJRDBnYjI1RGFHRnVaMlV1WTJGc2JDaDBhR2x6TENCbGRtVnVkQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lGSmxZV04wVlhCa1lYUmxjeTVoYzJGd0tHWnZjbU5sVlhCa1lYUmxTV1pOYjNWdWRHVmtMQ0IwYUdsektUdGNiaUFnSUNCeVpYUjFjbTRnY21WMGRYSnVWbUZzZFdVN1hHNGdJSDFjYmx4dWZTazdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkVUMDFVWlhoMFlYSmxZVHRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcbnZhciBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoXCIuL1RyYW5zYWN0aW9uXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZW1wdHlGdW5jdGlvblwiKTtcblxudmFyIFJFU0VUX0JBVENIRURfVVBEQVRFUyA9IHtcbiAgaW5pdGlhbGl6ZTogZW1wdHlGdW5jdGlvbixcbiAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPSBmYWxzZTtcbiAgfVxufTtcblxudmFyIEZMVVNIX0JBVENIRURfVVBEQVRFUyA9IHtcbiAgaW5pdGlhbGl6ZTogZW1wdHlGdW5jdGlvbixcbiAgY2xvc2U6IFJlYWN0VXBkYXRlcy5mbHVzaEJhdGNoZWRVcGRhdGVzLmJpbmQoUmVhY3RVcGRhdGVzKVxufTtcblxudmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW0ZMVVNIX0JBVENIRURfVVBEQVRFUywgUkVTRVRfQkFUQ0hFRF9VUERBVEVTXTtcblxuZnVuY3Rpb24gUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5zYWN0aW9uKCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG59XG5cbmFzc2lnbihcbiAgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5zYWN0aW9uLnByb3RvdHlwZSxcbiAgVHJhbnNhY3Rpb24uTWl4aW4sXG4gIHtcbiAgICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgICB9XG4gIH1cbik7XG5cbnZhciB0cmFuc2FjdGlvbiA9IG5ldyBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5VHJhbnNhY3Rpb24oKTtcblxudmFyIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kgPSB7XG4gIGlzQmF0Y2hpbmdVcGRhdGVzOiBmYWxzZSxcblxuICAvKipcbiAgICogQ2FsbCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gaW4gYSBjb250ZXh0IHdpdGhpbiB3aGljaCBjYWxscyB0byBgc2V0U3RhdGVgXG4gICAqIGFuZCBmcmllbmRzIGFyZSBiYXRjaGVkIHN1Y2ggdGhhdCBjb21wb25lbnRzIGFyZW4ndCB1cGRhdGVkIHVubmVjZXNzYXJpbHkuXG4gICAqL1xuICBiYXRjaGVkVXBkYXRlczogZnVuY3Rpb24oY2FsbGJhY2ssIGEsIGIsIGMsIGQpIHtcbiAgICB2YXIgYWxyZWFkeUJhdGNoaW5nVXBkYXRlcyA9IFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXM7XG5cbiAgICBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID0gdHJ1ZTtcblxuICAgIC8vIFRoZSBjb2RlIGlzIHdyaXR0ZW4gdGhpcyB3YXkgdG8gYXZvaWQgZXh0cmEgYWxsb2NhdGlvbnNcbiAgICBpZiAoYWxyZWFkeUJhdGNoaW5nVXBkYXRlcykge1xuICAgICAgY2FsbGJhY2soYSwgYiwgYywgZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zYWN0aW9uLnBlcmZvcm0oY2FsbGJhY2ssIG51bGwsIGEsIGIsIGMsIGQpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERlZmF1bHRJbmplY3Rpb25cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luID0gcmVxdWlyZShcIi4vQmVmb3JlSW5wdXRFdmVudFBsdWdpblwiKTtcbnZhciBDaGFuZ2VFdmVudFBsdWdpbiA9IHJlcXVpcmUoXCIuL0NoYW5nZUV2ZW50UGx1Z2luXCIpO1xudmFyIENsaWVudFJlYWN0Um9vdEluZGV4ID0gcmVxdWlyZShcIi4vQ2xpZW50UmVhY3RSb290SW5kZXhcIik7XG52YXIgRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIgPSByZXF1aXJlKFwiLi9EZWZhdWx0RXZlbnRQbHVnaW5PcmRlclwiKTtcbnZhciBFbnRlckxlYXZlRXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9FbnRlckxlYXZlRXZlbnRQbHVnaW5cIik7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcbnZhciBIVE1MRE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKFwiLi9IVE1MRE9NUHJvcGVydHlDb25maWdcIik7XG52YXIgTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbiA9IHJlcXVpcmUoXCIuL01vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW5cIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCA9XG4gIHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kgPSByZXF1aXJlKFwiLi9SZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5XCIpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RET01Db21wb25lbnRcIik7XG52YXIgUmVhY3RET01CdXR0b24gPSByZXF1aXJlKFwiLi9SZWFjdERPTUJ1dHRvblwiKTtcbnZhciBSZWFjdERPTUZvcm0gPSByZXF1aXJlKFwiLi9SZWFjdERPTUZvcm1cIik7XG52YXIgUmVhY3RET01JbWcgPSByZXF1aXJlKFwiLi9SZWFjdERPTUltZ1wiKTtcbnZhciBSZWFjdERPTUlET3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NSURPcGVyYXRpb25zXCIpO1xudmFyIFJlYWN0RE9NSWZyYW1lID0gcmVxdWlyZShcIi4vUmVhY3RET01JZnJhbWVcIik7XG52YXIgUmVhY3RET01JbnB1dCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NSW5wdXRcIik7XG52YXIgUmVhY3RET01PcHRpb24gPSByZXF1aXJlKFwiLi9SZWFjdERPTU9wdGlvblwiKTtcbnZhciBSZWFjdERPTVNlbGVjdCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NU2VsZWN0XCIpO1xudmFyIFJlYWN0RE9NVGV4dGFyZWEgPSByZXF1aXJlKFwiLi9SZWFjdERPTVRleHRhcmVhXCIpO1xudmFyIFJlYWN0RE9NVGV4dENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NVGV4dENvbXBvbmVudFwiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RFdmVudExpc3RlbmVyID0gcmVxdWlyZShcIi4vUmVhY3RFdmVudExpc3RlbmVyXCIpO1xudmFyIFJlYWN0SW5qZWN0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RJbmplY3Rpb25cIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvblwiKTtcbnZhciBTZWxlY3RFdmVudFBsdWdpbiA9IHJlcXVpcmUoXCIuL1NlbGVjdEV2ZW50UGx1Z2luXCIpO1xudmFyIFNlcnZlclJlYWN0Um9vdEluZGV4ID0gcmVxdWlyZShcIi4vU2VydmVyUmVhY3RSb290SW5kZXhcIik7XG52YXIgU2ltcGxlRXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9TaW1wbGVFdmVudFBsdWdpblwiKTtcbnZhciBTVkdET01Qcm9wZXJ0eUNvbmZpZyA9IHJlcXVpcmUoXCIuL1NWR0RPTVByb3BlcnR5Q29uZmlnXCIpO1xuXG52YXIgY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQgPSByZXF1aXJlKFwiLi9jcmVhdGVGdWxsUGFnZUNvbXBvbmVudFwiKTtcblxuZnVuY3Rpb24gYXV0b0dlbmVyYXRlV3JhcHBlckNsYXNzKHR5cGUpIHtcbiAgcmV0dXJuIFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICAgIHRhZ05hbWU6IHR5cGUudG9VcHBlckNhc2UoKSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBSZWFjdEVsZW1lbnQoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMucHJvcHNcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5qZWN0KCkge1xuICBSZWFjdEluamVjdGlvbi5FdmVudEVtaXR0ZXIuaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyKFxuICAgIFJlYWN0RXZlbnRMaXN0ZW5lclxuICApO1xuXG4gIC8qKlxuICAgKiBJbmplY3QgbW9kdWxlcyBmb3IgcmVzb2x2aW5nIERPTSBoaWVyYXJjaHkgYW5kIHBsdWdpbiBvcmRlcmluZy5cbiAgICovXG4gIFJlYWN0SW5qZWN0aW9uLkV2ZW50UGx1Z2luSHViLmluamVjdEV2ZW50UGx1Z2luT3JkZXIoRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIpO1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RJbnN0YW5jZUhhbmRsZShSZWFjdEluc3RhbmNlSGFuZGxlcyk7XG4gIFJlYWN0SW5qZWN0aW9uLkV2ZW50UGx1Z2luSHViLmluamVjdE1vdW50KFJlYWN0TW91bnQpO1xuXG4gIC8qKlxuICAgKiBTb21lIGltcG9ydGFudCBldmVudCBwbHVnaW5zIGluY2x1ZGVkIGJ5IGRlZmF1bHQgKHdpdGhvdXQgaGF2aW5nIHRvIHJlcXVpcmVcbiAgICogdGhlbSkuXG4gICAqL1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUoe1xuICAgIFNpbXBsZUV2ZW50UGx1Z2luOiBTaW1wbGVFdmVudFBsdWdpbixcbiAgICBFbnRlckxlYXZlRXZlbnRQbHVnaW46IEVudGVyTGVhdmVFdmVudFBsdWdpbixcbiAgICBDaGFuZ2VFdmVudFBsdWdpbjogQ2hhbmdlRXZlbnRQbHVnaW4sXG4gICAgTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbjogTW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbixcbiAgICBTZWxlY3RFdmVudFBsdWdpbjogU2VsZWN0RXZlbnRQbHVnaW4sXG4gICAgQmVmb3JlSW5wdXRFdmVudFBsdWdpbjogQmVmb3JlSW5wdXRFdmVudFBsdWdpblxuICB9KTtcblxuICBSZWFjdEluamVjdGlvbi5OYXRpdmVDb21wb25lbnQuaW5qZWN0R2VuZXJpY0NvbXBvbmVudENsYXNzKFxuICAgIFJlYWN0RE9NQ29tcG9uZW50XG4gICk7XG5cbiAgUmVhY3RJbmplY3Rpb24uTmF0aXZlQ29tcG9uZW50LmluamVjdFRleHRDb21wb25lbnRDbGFzcyhcbiAgICBSZWFjdERPTVRleHRDb21wb25lbnRcbiAgKTtcblxuICBSZWFjdEluamVjdGlvbi5OYXRpdmVDb21wb25lbnQuaW5qZWN0QXV0b1dyYXBwZXIoXG4gICAgYXV0b0dlbmVyYXRlV3JhcHBlckNsYXNzXG4gICk7XG5cbiAgLy8gVGhpcyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlIGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50KCkgb3RoZXJ3aXNlIHRoZSBtaXhpblxuICAvLyB3b24ndCBiZSBpbmNsdWRlZC5cbiAgUmVhY3RJbmplY3Rpb24uQ2xhc3MuaW5qZWN0TWl4aW4oUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4pO1xuXG4gIFJlYWN0SW5qZWN0aW9uLk5hdGl2ZUNvbXBvbmVudC5pbmplY3RDb21wb25lbnRDbGFzc2VzKHtcbiAgICAnYnV0dG9uJzogUmVhY3RET01CdXR0b24sXG4gICAgJ2Zvcm0nOiBSZWFjdERPTUZvcm0sXG4gICAgJ2lmcmFtZSc6IFJlYWN0RE9NSWZyYW1lLFxuICAgICdpbWcnOiBSZWFjdERPTUltZyxcbiAgICAnaW5wdXQnOiBSZWFjdERPTUlucHV0LFxuICAgICdvcHRpb24nOiBSZWFjdERPTU9wdGlvbixcbiAgICAnc2VsZWN0JzogUmVhY3RET01TZWxlY3QsXG4gICAgJ3RleHRhcmVhJzogUmVhY3RET01UZXh0YXJlYSxcblxuICAgICdodG1sJzogY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQoJ2h0bWwnKSxcbiAgICAnaGVhZCc6IGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50KCdoZWFkJyksXG4gICAgJ2JvZHknOiBjcmVhdGVGdWxsUGFnZUNvbXBvbmVudCgnYm9keScpXG4gIH0pO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKEhUTUxET01Qcm9wZXJ0eUNvbmZpZyk7XG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKFNWR0RPTVByb3BlcnR5Q29uZmlnKTtcblxuICBSZWFjdEluamVjdGlvbi5FbXB0eUNvbXBvbmVudC5pbmplY3RFbXB0eUNvbXBvbmVudCgnbm9zY3JpcHQnKTtcblxuICBSZWFjdEluamVjdGlvbi5VcGRhdGVzLmluamVjdFJlY29uY2lsZVRyYW5zYWN0aW9uKFxuICAgIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb25cbiAgKTtcbiAgUmVhY3RJbmplY3Rpb24uVXBkYXRlcy5pbmplY3RCYXRjaGluZ1N0cmF0ZWd5KFxuICAgIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lcbiAgKTtcblxuICBSZWFjdEluamVjdGlvbi5Sb290SW5kZXguaW5qZWN0Q3JlYXRlUmVhY3RSb290SW5kZXgoXG4gICAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID9cbiAgICAgIENsaWVudFJlYWN0Um9vdEluZGV4LmNyZWF0ZVJlYWN0Um9vdEluZGV4IDpcbiAgICAgIFNlcnZlclJlYWN0Um9vdEluZGV4LmNyZWF0ZVJlYWN0Um9vdEluZGV4XG4gICk7XG5cbiAgUmVhY3RJbmplY3Rpb24uQ29tcG9uZW50LmluamVjdEVudmlyb25tZW50KFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50KTtcbiAgUmVhY3RJbmplY3Rpb24uRE9NQ29tcG9uZW50LmluamVjdElET3BlcmF0aW9ucyhSZWFjdERPTUlET3BlcmF0aW9ucyk7XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIHZhciB1cmwgPSAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmKSB8fCAnJztcbiAgICBpZiAoKC9bPyZdcmVhY3RfcGVyZlxcYi8pLnRlc3QodXJsKSkge1xuICAgICAgdmFyIFJlYWN0RGVmYXVsdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdERlZmF1bHRQZXJmXCIpO1xuICAgICAgUmVhY3REZWZhdWx0UGVyZi5zdGFydCgpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW5qZWN0OiBpbmplY3Rcbn07XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVpXWmhkV3gwU1c1cVpXTjBhVzl1TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFUmxabUYxYkhSSmJtcGxZM1JwYjI1Y2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQkNaV1p2Y21WSmJuQjFkRVYyWlc1MFVHeDFaMmx1SUQwZ2NtVnhkV2x5WlNoY0lpNHZRbVZtYjNKbFNXNXdkWFJGZG1WdWRGQnNkV2RwYmx3aUtUdGNiblpoY2lCRGFHRnVaMlZGZG1WdWRGQnNkV2RwYmlBOUlISmxjWFZwY21Vb1hDSXVMME5vWVc1blpVVjJaVzUwVUd4MVoybHVYQ0lwTzF4dWRtRnlJRU5zYVdWdWRGSmxZV04wVW05dmRFbHVaR1Y0SUQwZ2NtVnhkV2x5WlNoY0lpNHZRMnhwWlc1MFVtVmhZM1JTYjI5MFNXNWtaWGhjSWlrN1hHNTJZWElnUkdWbVlYVnNkRVYyWlc1MFVHeDFaMmx1VDNKa1pYSWdQU0J5WlhGMWFYSmxLRndpTGk5RVpXWmhkV3gwUlhabGJuUlFiSFZuYVc1UGNtUmxjbHdpS1R0Y2JuWmhjaUJGYm5SbGNreGxZWFpsUlhabGJuUlFiSFZuYVc0Z1BTQnlaWEYxYVhKbEtGd2lMaTlGYm5SbGNreGxZWFpsUlhabGJuUlFiSFZuYVc1Y0lpazdYRzUyWVhJZ1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5RmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRGd2lLVHRjYm5aaGNpQklWRTFNUkU5TlVISnZjR1Z5ZEhsRGIyNW1hV2NnUFNCeVpYRjFhWEpsS0Z3aUxpOUlWRTFNUkU5TlVISnZjR1Z5ZEhsRGIyNW1hV2RjSWlrN1hHNTJZWElnVFc5aWFXeGxVMkZtWVhKcFEyeHBZMnRGZG1WdWRGQnNkV2RwYmlBOUlISmxjWFZwY21Vb1hDSXVMMDF2WW1sc1pWTmhabUZ5YVVOc2FXTnJSWFpsYm5SUWJIVm5hVzVjSWlrN1hHNTJZWElnVW1WaFkzUkNjbTkzYzJWeVEyOXRjRzl1Wlc1MFRXbDRhVzRnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVKeWIzZHpaWEpEYjIxd2IyNWxiblJOYVhocGJsd2lLVHRjYm5aaGNpQlNaV0ZqZEVOc1lYTnpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEYkdGemMxd2lLVHRjYm5aaGNpQlNaV0ZqZEVOdmJYQnZibVZ1ZEVKeWIzZHpaWEpGYm5acGNtOXViV1Z1ZENBOVhHNGdJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRMjl0Y0c5dVpXNTBRbkp2ZDNObGNrVnVkbWx5YjI1dFpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJHVm1ZWFZzZEVKaGRHTm9hVzVuVTNSeVlYUmxaM2tnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSbFptRjFiSFJDWVhSamFHbHVaMU4wY21GMFpXZDVYQ0lwTzF4dWRtRnlJRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JFVDAxRGIyMXdiMjVsYm5SY0lpazdYRzUyWVhJZ1VtVmhZM1JFVDAxQ2RYUjBiMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSUFRVSjFkSFJ2Ymx3aUtUdGNiblpoY2lCU1pXRmpkRVJQVFVadmNtMGdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVJQVFVadmNtMWNJaWs3WEc1MllYSWdVbVZoWTNSRVQwMUpiV2NnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSUFRVbHRaMXdpS1R0Y2JuWmhjaUJTWldGamRFUlBUVWxFVDNCbGNtRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJFOU5TVVJQY0dWeVlYUnBiMjV6WENJcE8xeHVkbUZ5SUZKbFlXTjBSRTlOU1daeVlXMWxJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JFVDAxSlpuSmhiV1ZjSWlrN1hHNTJZWElnVW1WaFkzUkVUMDFKYm5CMWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSRTlOU1c1d2RYUmNJaWs3WEc1MllYSWdVbVZoWTNSRVQwMVBjSFJwYjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUlBUVTl3ZEdsdmJsd2lLVHRjYm5aaGNpQlNaV0ZqZEVSUFRWTmxiR1ZqZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJFOU5VMlZzWldOMFhDSXBPMXh1ZG1GeUlGSmxZV04wUkU5TlZHVjRkR0Z5WldFZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUlBUVlJsZUhSaGNtVmhYQ0lwTzF4dWRtRnlJRkpsWVdOMFJFOU5WR1Y0ZEVOdmJYQnZibVZ1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJFOU5WR1Y0ZEVOdmJYQnZibVZ1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSRmRtVnVkRXhwYzNSbGJtVnlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGZG1WdWRFeHBjM1JsYm1WeVhDSXBPMXh1ZG1GeUlGSmxZV04wU1c1cVpXTjBhVzl1SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSSmJtcGxZM1JwYjI1Y0lpazdYRzUyWVhJZ1VtVmhZM1JKYm5OMFlXNWpaVWhoYm1Sc1pYTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGMxd2lLVHRjYm5aaGNpQlNaV0ZqZEUxdmRXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JOYjNWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibHdpS1R0Y2JuWmhjaUJUWld4bFkzUkZkbVZ1ZEZCc2RXZHBiaUE5SUhKbGNYVnBjbVVvWENJdUwxTmxiR1ZqZEVWMlpXNTBVR3gxWjJsdVhDSXBPMXh1ZG1GeUlGTmxjblpsY2xKbFlXTjBVbTl2ZEVsdVpHVjRJRDBnY21WeGRXbHlaU2hjSWk0dlUyVnlkbVZ5VW1WaFkzUlNiMjkwU1c1a1pYaGNJaWs3WEc1MllYSWdVMmx0Y0d4bFJYWmxiblJRYkhWbmFXNGdQU0J5WlhGMWFYSmxLRndpTGk5VGFXMXdiR1ZGZG1WdWRGQnNkV2RwYmx3aUtUdGNiblpoY2lCVFZrZEVUMDFRY205d1pYSjBlVU52Ym1acFp5QTlJSEpsY1hWcGNtVW9YQ0l1TDFOV1IwUlBUVkJ5YjNCbGNuUjVRMjl1Wm1sblhDSXBPMXh1WEc1MllYSWdZM0psWVhSbFJuVnNiRkJoWjJWRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlqY21WaGRHVkdkV3hzVUdGblpVTnZiWEJ2Ym1WdWRGd2lLVHRjYmx4dVpuVnVZM1JwYjI0Z1lYVjBiMGRsYm1WeVlYUmxWM0poY0hCbGNrTnNZWE56S0hSNWNHVXBJSHRjYmlBZ2NtVjBkWEp1SUZKbFlXTjBRMnhoYzNNdVkzSmxZWFJsUTJ4aGMzTW9lMXh1SUNBZ0lIUmhaMDVoYldVNklIUjVjR1V1ZEc5VmNIQmxja05oYzJVb0tTeGNiaUFnSUNCeVpXNWtaWEk2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlNaV0ZqZEVWc1pXMWxiblFvWEc0Z0lDQWdJQ0FnSUhSNWNHVXNYRzRnSUNBZ0lDQWdJRzUxYkd3c1hHNGdJQ0FnSUNBZ0lHNTFiR3dzWEc0Z0lDQWdJQ0FnSUc1MWJHd3NYRzRnSUNBZ0lDQWdJRzUxYkd3c1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0hKdmNITmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVJQ0I5S1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYVc1cVpXTjBLQ2tnZTF4dUlDQlNaV0ZqZEVsdWFtVmpkR2x2Ymk1RmRtVnVkRVZ0YVhSMFpYSXVhVzVxWldOMFVtVmhZM1JGZG1WdWRFeHBjM1JsYm1WeUtGeHVJQ0FnSUZKbFlXTjBSWFpsYm5STWFYTjBaVzVsY2x4dUlDQXBPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkpibXBsWTNRZ2JXOWtkV3hsY3lCbWIzSWdjbVZ6YjJ4MmFXNW5JRVJQVFNCb2FXVnlZWEpqYUhrZ1lXNWtJSEJzZFdkcGJpQnZjbVJsY21sdVp5NWNiaUFnSUNvdlhHNGdJRkpsWVdOMFNXNXFaV04wYVc5dUxrVjJaVzUwVUd4MVoybHVTSFZpTG1sdWFtVmpkRVYyWlc1MFVHeDFaMmx1VDNKa1pYSW9SR1ZtWVhWc2RFVjJaVzUwVUd4MVoybHVUM0prWlhJcE8xeHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNUZkbVZ1ZEZCc2RXZHBia2gxWWk1cGJtcGxZM1JKYm5OMFlXNWpaVWhoYm1Sc1pTaFNaV0ZqZEVsdWMzUmhibU5sU0dGdVpHeGxjeWs3WEc0Z0lGSmxZV04wU1c1cVpXTjBhVzl1TGtWMlpXNTBVR3gxWjJsdVNIVmlMbWx1YW1WamRFMXZkVzUwS0ZKbFlXTjBUVzkxYm5RcE8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCVGIyMWxJR2x0Y0c5eWRHRnVkQ0JsZG1WdWRDQndiSFZuYVc1eklHbHVZMngxWkdWa0lHSjVJR1JsWm1GMWJIUWdLSGRwZEdodmRYUWdhR0YyYVc1bklIUnZJSEpsY1hWcGNtVmNiaUFnSUNvZ2RHaGxiU2t1WEc0Z0lDQXFMMXh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVGZG1WdWRGQnNkV2RwYmtoMVlpNXBibXBsWTNSRmRtVnVkRkJzZFdkcGJuTkNlVTVoYldVb2UxeHVJQ0FnSUZOcGJYQnNaVVYyWlc1MFVHeDFaMmx1T2lCVGFXMXdiR1ZGZG1WdWRGQnNkV2RwYml4Y2JpQWdJQ0JGYm5SbGNreGxZWFpsUlhabGJuUlFiSFZuYVc0NklFVnVkR1Z5VEdWaGRtVkZkbVZ1ZEZCc2RXZHBiaXhjYmlBZ0lDQkRhR0Z1WjJWRmRtVnVkRkJzZFdkcGJqb2dRMmhoYm1kbFJYWmxiblJRYkhWbmFXNHNYRzRnSUNBZ1RXOWlhV3hsVTJGbVlYSnBRMnhwWTJ0RmRtVnVkRkJzZFdkcGJqb2dUVzlpYVd4bFUyRm1ZWEpwUTJ4cFkydEZkbVZ1ZEZCc2RXZHBiaXhjYmlBZ0lDQlRaV3hsWTNSRmRtVnVkRkJzZFdkcGJqb2dVMlZzWldOMFJYWmxiblJRYkhWbmFXNHNYRzRnSUNBZ1FtVm1iM0psU1c1d2RYUkZkbVZ1ZEZCc2RXZHBiam9nUW1WbWIzSmxTVzV3ZFhSRmRtVnVkRkJzZFdkcGJseHVJQ0I5S1R0Y2JseHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNU9ZWFJwZG1WRGIyMXdiMjVsYm5RdWFXNXFaV04wUjJWdVpYSnBZME52YlhCdmJtVnVkRU5zWVhOektGeHVJQ0FnSUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwWEc0Z0lDazdYRzVjYmlBZ1VtVmhZM1JKYm1wbFkzUnBiMjR1VG1GMGFYWmxRMjl0Y0c5dVpXNTBMbWx1YW1WamRGUmxlSFJEYjIxd2IyNWxiblJEYkdGemN5aGNiaUFnSUNCU1pXRmpkRVJQVFZSbGVIUkRiMjF3YjI1bGJuUmNiaUFnS1R0Y2JseHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNU9ZWFJwZG1WRGIyMXdiMjVsYm5RdWFXNXFaV04wUVhWMGIxZHlZWEJ3WlhJb1hHNGdJQ0FnWVhWMGIwZGxibVZ5WVhSbFYzSmhjSEJsY2tOc1lYTnpYRzRnSUNrN1hHNWNiaUFnTHk4Z1ZHaHBjeUJ1WldWa2N5QjBieUJvWVhCd1pXNGdZbVZtYjNKbElHTnlaV0YwWlVaMWJHeFFZV2RsUTI5dGNHOXVaVzUwS0NrZ2IzUm9aWEozYVhObElIUm9aU0J0YVhocGJseHVJQ0F2THlCM2IyNG5kQ0JpWlNCcGJtTnNkV1JsWkM1Y2JpQWdVbVZoWTNSSmJtcGxZM1JwYjI0dVEyeGhjM011YVc1cVpXTjBUV2w0YVc0b1VtVmhZM1JDY205M2MyVnlRMjl0Y0c5dVpXNTBUV2w0YVc0cE8xeHVYRzRnSUZKbFlXTjBTVzVxWldOMGFXOXVMazVoZEdsMlpVTnZiWEJ2Ym1WdWRDNXBibXBsWTNSRGIyMXdiMjVsYm5SRGJHRnpjMlZ6S0h0Y2JpQWdJQ0FuWW5WMGRHOXVKem9nVW1WaFkzUkVUMDFDZFhSMGIyNHNYRzRnSUNBZ0oyWnZjbTBuT2lCU1pXRmpkRVJQVFVadmNtMHNYRzRnSUNBZ0oybG1jbUZ0WlNjNklGSmxZV04wUkU5TlNXWnlZVzFsTEZ4dUlDQWdJQ2RwYldjbk9pQlNaV0ZqZEVSUFRVbHRaeXhjYmlBZ0lDQW5hVzV3ZFhRbk9pQlNaV0ZqZEVSUFRVbHVjSFYwTEZ4dUlDQWdJQ2R2Y0hScGIyNG5PaUJTWldGamRFUlBUVTl3ZEdsdmJpeGNiaUFnSUNBbmMyVnNaV04wSnpvZ1VtVmhZM1JFVDAxVFpXeGxZM1FzWEc0Z0lDQWdKM1JsZUhSaGNtVmhKem9nVW1WaFkzUkVUMDFVWlhoMFlYSmxZU3hjYmx4dUlDQWdJQ2RvZEcxc0p6b2dZM0psWVhSbFJuVnNiRkJoWjJWRGIyMXdiMjVsYm5Rb0oyaDBiV3duS1N4Y2JpQWdJQ0FuYUdWaFpDYzZJR055WldGMFpVWjFiR3hRWVdkbFEyOXRjRzl1Wlc1MEtDZG9aV0ZrSnlrc1hHNGdJQ0FnSjJKdlpIa25PaUJqY21WaGRHVkdkV3hzVUdGblpVTnZiWEJ2Ym1WdWRDZ25ZbTlrZVNjcFhHNGdJSDBwTzF4dVhHNGdJRkpsWVdOMFNXNXFaV04wYVc5dUxrUlBUVkJ5YjNCbGNuUjVMbWx1YW1WamRFUlBUVkJ5YjNCbGNuUjVRMjl1Wm1sbktFaFVUVXhFVDAxUWNtOXdaWEowZVVOdmJtWnBaeWs3WEc0Z0lGSmxZV04wU1c1cVpXTjBhVzl1TGtSUFRWQnliM0JsY25SNUxtbHVhbVZqZEVSUFRWQnliM0JsY25SNVEyOXVabWxuS0ZOV1IwUlBUVkJ5YjNCbGNuUjVRMjl1Wm1sbktUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVGYlhCMGVVTnZiWEJ2Ym1WdWRDNXBibXBsWTNSRmJYQjBlVU52YlhCdmJtVnVkQ2duYm05elkzSnBjSFFuS1R0Y2JseHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNVZjR1JoZEdWekxtbHVhbVZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUtGeHVJQ0FnSUZKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjVjYmlBZ0tUdGNiaUFnVW1WaFkzUkpibXBsWTNScGIyNHVWWEJrWVhSbGN5NXBibXBsWTNSQ1lYUmphR2x1WjFOMGNtRjBaV2Q1S0Z4dUlDQWdJRkpsWVdOMFJHVm1ZWFZzZEVKaGRHTm9hVzVuVTNSeVlYUmxaM2xjYmlBZ0tUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVTYjI5MFNXNWtaWGd1YVc1cVpXTjBRM0psWVhSbFVtVmhZM1JTYjI5MFNXNWtaWGdvWEc0Z0lDQWdSWGhsWTNWMGFXOXVSVzUyYVhKdmJtMWxiblF1WTJGdVZYTmxSRTlOSUQ5Y2JpQWdJQ0FnSUVOc2FXVnVkRkpsWVdOMFVtOXZkRWx1WkdWNExtTnlaV0YwWlZKbFlXTjBVbTl2ZEVsdVpHVjRJRHBjYmlBZ0lDQWdJRk5sY25abGNsSmxZV04wVW05dmRFbHVaR1Y0TG1OeVpXRjBaVkpsWVdOMFVtOXZkRWx1WkdWNFhHNGdJQ2s3WEc1Y2JpQWdVbVZoWTNSSmJtcGxZM1JwYjI0dVEyOXRjRzl1Wlc1MExtbHVhbVZqZEVWdWRtbHliMjV0Wlc1MEtGSmxZV04wUTI5dGNHOXVaVzUwUW5KdmQzTmxja1Z1ZG1seWIyNXRaVzUwS1R0Y2JpQWdVbVZoWTNSSmJtcGxZM1JwYjI0dVJFOU5RMjl0Y0c5dVpXNTBMbWx1YW1WamRFbEVUM0JsY21GMGFXOXVjeWhTWldGamRFUlBUVWxFVDNCbGNtRjBhVzl1Y3lrN1hHNWNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJSFpoY2lCMWNtd2dQU0FvUlhobFkzVjBhVzl1Ulc1MmFYSnZibTFsYm5RdVkyRnVWWE5sUkU5TklDWW1JSGRwYm1SdmR5NXNiMk5oZEdsdmJpNW9jbVZtS1NCOGZDQW5KenRjYmlBZ0lDQnBaaUFvS0M5YlB5WmRjbVZoWTNSZmNHVnlabHhjWWk4cExuUmxjM1FvZFhKc0tTa2dlMXh1SUNBZ0lDQWdkbUZ5SUZKbFlXTjBSR1ZtWVhWc2RGQmxjbVlnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSbFptRjFiSFJRWlhKbVhDSXBPMXh1SUNBZ0lDQWdVbVZoWTNSRVpXWmhkV3gwVUdWeVppNXpkR0Z5ZENncE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlIdGNiaUFnYVc1cVpXTjBPaUJwYm1wbFkzUmNibjA3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3REZWZhdWx0UGVyZlxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xudmFyIFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcyA9IHJlcXVpcmUoXCIuL1JlYWN0RGVmYXVsdFBlcmZBbmFseXNpc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdFBlcmZcIik7XG5cbnZhciBwZXJmb3JtYW5jZU5vdyA9IHJlcXVpcmUoXCIuL3BlcmZvcm1hbmNlTm93XCIpO1xuXG5mdW5jdGlvbiByb3VuZEZsb2F0KHZhbCkge1xuICByZXR1cm4gTWF0aC5mbG9vcih2YWwgKiAxMDApIC8gMTAwO1xufVxuXG5mdW5jdGlvbiBhZGRWYWx1ZShvYmosIGtleSwgdmFsKSB7XG4gIG9ialtrZXldID0gKG9ialtrZXldIHx8IDApICsgdmFsO1xufVxuXG52YXIgUmVhY3REZWZhdWx0UGVyZiA9IHtcbiAgX2FsbE1lYXN1cmVtZW50czogW10sIC8vIGxhc3QgaXRlbSBpbiB0aGUgbGlzdCBpcyB0aGUgY3VycmVudCBvbmVcbiAgX21vdW50U3RhY2s6IFswXSxcbiAgX2luamVjdGVkOiBmYWxzZSxcblxuICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFSZWFjdERlZmF1bHRQZXJmLl9pbmplY3RlZCkge1xuICAgICAgUmVhY3RQZXJmLmluamVjdGlvbi5pbmplY3RNZWFzdXJlKFJlYWN0RGVmYXVsdFBlcmYubWVhc3VyZSk7XG4gICAgfVxuXG4gICAgUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzLmxlbmd0aCA9IDA7XG4gICAgUmVhY3RQZXJmLmVuYWJsZU1lYXN1cmUgPSB0cnVlO1xuICB9LFxuXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIFJlYWN0UGVyZi5lbmFibGVNZWFzdXJlID0gZmFsc2U7XG4gIH0sXG5cbiAgZ2V0TGFzdE1lYXN1cmVtZW50czogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgfSxcblxuICBwcmludEV4Y2x1c2l2ZTogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgbWVhc3VyZW1lbnRzID0gbWVhc3VyZW1lbnRzIHx8IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgICB2YXIgc3VtbWFyeSA9IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRFeGNsdXNpdmVTdW1tYXJ5KG1lYXN1cmVtZW50cyk7XG4gICAgY29uc29sZS50YWJsZShzdW1tYXJ5Lm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnQ29tcG9uZW50IGNsYXNzIG5hbWUnOiBpdGVtLmNvbXBvbmVudE5hbWUsXG4gICAgICAgICdUb3RhbCBpbmNsdXNpdmUgdGltZSAobXMpJzogcm91bmRGbG9hdChpdGVtLmluY2x1c2l2ZSksXG4gICAgICAgICdFeGNsdXNpdmUgbW91bnQgdGltZSAobXMpJzogcm91bmRGbG9hdChpdGVtLmV4Y2x1c2l2ZSksXG4gICAgICAgICdFeGNsdXNpdmUgcmVuZGVyIHRpbWUgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5yZW5kZXIpLFxuICAgICAgICAnTW91bnQgdGltZSBwZXIgaW5zdGFuY2UgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5leGNsdXNpdmUgLyBpdGVtLmNvdW50KSxcbiAgICAgICAgJ1JlbmRlciB0aW1lIHBlciBpbnN0YW5jZSAobXMpJzogcm91bmRGbG9hdChpdGVtLnJlbmRlciAvIGl0ZW0uY291bnQpLFxuICAgICAgICAnSW5zdGFuY2VzJzogaXRlbS5jb3VudFxuICAgICAgfTtcbiAgICB9KSk7XG4gICAgLy8gVE9ETzogUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldFRvdGFsVGltZSgpIGRvZXMgbm90IHJldHVybiB0aGUgY29ycmVjdFxuICAgIC8vIG51bWJlci5cbiAgfSxcblxuICBwcmludEluY2x1c2l2ZTogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgbWVhc3VyZW1lbnRzID0gbWVhc3VyZW1lbnRzIHx8IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgICB2YXIgc3VtbWFyeSA9IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRJbmNsdXNpdmVTdW1tYXJ5KG1lYXN1cmVtZW50cyk7XG4gICAgY29uc29sZS50YWJsZShzdW1tYXJ5Lm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnT3duZXIgPiBjb21wb25lbnQnOiBpdGVtLmNvbXBvbmVudE5hbWUsXG4gICAgICAgICdJbmNsdXNpdmUgdGltZSAobXMpJzogcm91bmRGbG9hdChpdGVtLnRpbWUpLFxuICAgICAgICAnSW5zdGFuY2VzJzogaXRlbS5jb3VudFxuICAgICAgfTtcbiAgICB9KSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnVG90YWwgdGltZTonLFxuICAgICAgUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldFRvdGFsVGltZShtZWFzdXJlbWVudHMpLnRvRml4ZWQoMikgKyAnIG1zJ1xuICAgICk7XG4gIH0sXG5cbiAgZ2V0TWVhc3VyZW1lbnRzU3VtbWFyeU1hcDogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgdmFyIHN1bW1hcnkgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0SW5jbHVzaXZlU3VtbWFyeShcbiAgICAgIG1lYXN1cmVtZW50cyxcbiAgICAgIHRydWVcbiAgICApO1xuICAgIHJldHVybiBzdW1tYXJ5Lm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnT3duZXIgPiBjb21wb25lbnQnOiBpdGVtLmNvbXBvbmVudE5hbWUsXG4gICAgICAgICdXYXN0ZWQgdGltZSAobXMpJzogaXRlbS50aW1lLFxuICAgICAgICAnSW5zdGFuY2VzJzogaXRlbS5jb3VudFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSxcblxuICBwcmludFdhc3RlZDogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgbWVhc3VyZW1lbnRzID0gbWVhc3VyZW1lbnRzIHx8IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgICBjb25zb2xlLnRhYmxlKFJlYWN0RGVmYXVsdFBlcmYuZ2V0TWVhc3VyZW1lbnRzU3VtbWFyeU1hcChtZWFzdXJlbWVudHMpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdUb3RhbCB0aW1lOicsXG4gICAgICBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0VG90YWxUaW1lKG1lYXN1cmVtZW50cykudG9GaXhlZCgyKSArICcgbXMnXG4gICAgKTtcbiAgfSxcblxuICBwcmludERPTTogZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7XG4gICAgbWVhc3VyZW1lbnRzID0gbWVhc3VyZW1lbnRzIHx8IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cztcbiAgICB2YXIgc3VtbWFyeSA9IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRET01TdW1tYXJ5KG1lYXN1cmVtZW50cyk7XG4gICAgY29uc29sZS50YWJsZShzdW1tYXJ5Lm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICByZXN1bHRbRE9NUHJvcGVydHkuSURfQVRUUklCVVRFX05BTUVdID0gaXRlbS5pZDtcbiAgICAgIHJlc3VsdFsndHlwZSddID0gaXRlbS50eXBlO1xuICAgICAgcmVzdWx0WydhcmdzJ10gPSBKU09OLnN0cmluZ2lmeShpdGVtLmFyZ3MpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnVG90YWwgdGltZTonLFxuICAgICAgUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldFRvdGFsVGltZShtZWFzdXJlbWVudHMpLnRvRml4ZWQoMikgKyAnIG1zJ1xuICAgICk7XG4gIH0sXG5cbiAgX3JlY29yZFdyaXRlOiBmdW5jdGlvbihpZCwgZm5OYW1lLCB0b3RhbFRpbWUsIGFyZ3MpIHtcbiAgICAvLyBUT0RPOiB0b3RhbFRpbWUgaXNuJ3QgdGhhdCB1c2VmdWwgc2luY2UgaXQgZG9lc24ndCBjb3VudCBwYWludHMvcmVmbG93c1xuICAgIHZhciB3cml0ZXMgPVxuICAgICAgUmVhY3REZWZhdWx0UGVyZlxuICAgICAgICAuX2FsbE1lYXN1cmVtZW50c1tSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgLndyaXRlcztcbiAgICB3cml0ZXNbaWRdID0gd3JpdGVzW2lkXSB8fCBbXTtcbiAgICB3cml0ZXNbaWRdLnB1c2goe1xuICAgICAgdHlwZTogZm5OYW1lLFxuICAgICAgdGltZTogdG90YWxUaW1lLFxuICAgICAgYXJnczogYXJnc1xuICAgIH0pO1xuICB9LFxuXG4gIG1lYXN1cmU6IGZ1bmN0aW9uKG1vZHVsZU5hbWUsIGZuTmFtZSwgZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtmb3IgKHZhciBhcmdzPVtdLCRfXzA9MCwkX18xPWFyZ3VtZW50cy5sZW5ndGg7JF9fMDwkX18xOyRfXzArKykgYXJncy5wdXNoKGFyZ3VtZW50c1skX18wXSk7XG4gICAgICB2YXIgdG90YWxUaW1lO1xuICAgICAgdmFyIHJ2O1xuICAgICAgdmFyIHN0YXJ0O1xuXG4gICAgICBpZiAoZm5OYW1lID09PSAnX3JlbmRlck5ld1Jvb3RDb21wb25lbnQnIHx8XG4gICAgICAgICAgZm5OYW1lID09PSAnZmx1c2hCYXRjaGVkVXBkYXRlcycpIHtcbiAgICAgICAgLy8gQSBcIm1lYXN1cmVtZW50XCIgaXMgYSBzZXQgb2YgbWV0cmljcyByZWNvcmRlZCBmb3IgZWFjaCBmbHVzaC4gV2Ugd2FudFxuICAgICAgICAvLyB0byBncm91cCB0aGUgbWV0cmljcyBmb3IgYSBnaXZlbiBmbHVzaCB0b2dldGhlciBzbyB3ZSBjYW4gbG9vayBhdCB0aGVcbiAgICAgICAgLy8gY29tcG9uZW50cyB0aGF0IHJlbmRlcmVkIGFuZCB0aGUgRE9NIG9wZXJhdGlvbnMgdGhhdCBhY3R1YWxseVxuICAgICAgICAvLyBoYXBwZW5lZCB0byBkZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBcIndhc3RlZCB3b3JrXCIgcGVyZm9ybWVkLlxuICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHMucHVzaCh7XG4gICAgICAgICAgZXhjbHVzaXZlOiB7fSxcbiAgICAgICAgICBpbmNsdXNpdmU6IHt9LFxuICAgICAgICAgIHJlbmRlcjoge30sXG4gICAgICAgICAgY291bnRzOiB7fSxcbiAgICAgICAgICB3cml0ZXM6IHt9LFxuICAgICAgICAgIGRpc3BsYXlOYW1lczoge30sXG4gICAgICAgICAgdG90YWxUaW1lOiAwXG4gICAgICAgIH0pO1xuICAgICAgICBzdGFydCA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICAgIHJ2ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzW1xuICAgICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cy5sZW5ndGggLSAxXG4gICAgICAgIF0udG90YWxUaW1lID0gcGVyZm9ybWFuY2VOb3coKSAtIHN0YXJ0O1xuICAgICAgICByZXR1cm4gcnY7XG4gICAgICB9IGVsc2UgaWYgKGZuTmFtZSA9PT0gJ19tb3VudEltYWdlSW50b05vZGUnIHx8XG4gICAgICAgICAgbW9kdWxlTmFtZSA9PT0gJ1JlYWN0RE9NSURPcGVyYXRpb25zJykge1xuICAgICAgICBzdGFydCA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICAgIHJ2ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgdG90YWxUaW1lID0gcGVyZm9ybWFuY2VOb3coKSAtIHN0YXJ0O1xuXG4gICAgICAgIGlmIChmbk5hbWUgPT09ICdfbW91bnRJbWFnZUludG9Ob2RlJykge1xuICAgICAgICAgIHZhciBtb3VudElEID0gUmVhY3RNb3VudC5nZXRJRChhcmdzWzFdKTtcbiAgICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9yZWNvcmRXcml0ZShtb3VudElELCBmbk5hbWUsIHRvdGFsVGltZSwgYXJnc1swXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm5OYW1lID09PSAnZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzJykge1xuICAgICAgICAgIC8vIHNwZWNpYWwgZm9ybWF0XG4gICAgICAgICAgYXJnc1swXS5mb3JFYWNoKGZ1bmN0aW9uKHVwZGF0ZSkge1xuICAgICAgICAgICAgdmFyIHdyaXRlQXJncyA9IHt9O1xuICAgICAgICAgICAgaWYgKHVwZGF0ZS5mcm9tSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd3JpdGVBcmdzLmZyb21JbmRleCA9IHVwZGF0ZS5mcm9tSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXBkYXRlLnRvSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd3JpdGVBcmdzLnRvSW5kZXggPSB1cGRhdGUudG9JbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1cGRhdGUudGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd3JpdGVBcmdzLnRleHRDb250ZW50ID0gdXBkYXRlLnRleHRDb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5tYXJrdXBJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB3cml0ZUFyZ3MubWFya3VwID0gYXJnc1sxXVt1cGRhdGUubWFya3VwSW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUmVhY3REZWZhdWx0UGVyZi5fcmVjb3JkV3JpdGUoXG4gICAgICAgICAgICAgIHVwZGF0ZS5wYXJlbnRJRCxcbiAgICAgICAgICAgICAgdXBkYXRlLnR5cGUsXG4gICAgICAgICAgICAgIHRvdGFsVGltZSxcbiAgICAgICAgICAgICAgd3JpdGVBcmdzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGJhc2ljIGZvcm1hdFxuICAgICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX3JlY29yZFdyaXRlKFxuICAgICAgICAgICAgYXJnc1swXSxcbiAgICAgICAgICAgIGZuTmFtZSxcbiAgICAgICAgICAgIHRvdGFsVGltZSxcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDEpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnY7XG4gICAgICB9IGVsc2UgaWYgKG1vZHVsZU5hbWUgPT09ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcgJiYgKFxuICAgICAgICAoLy8gVE9ETzogcmVjZWl2ZUNvbXBvbmVudCgpP1xuICAgICAgICAoZm5OYW1lID09PSAnbW91bnRDb21wb25lbnQnIHx8XG4gICAgICAgIGZuTmFtZSA9PT0gJ3VwZGF0ZUNvbXBvbmVudCcgfHwgZm5OYW1lID09PSAnX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCcpKSkpIHtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm9vdE5vZGVJRCA9IGZuTmFtZSA9PT0gJ21vdW50Q29tcG9uZW50JyA/XG4gICAgICAgICAgYXJnc1swXSA6XG4gICAgICAgICAgdGhpcy5fcm9vdE5vZGVJRDtcbiAgICAgICAgdmFyIGlzUmVuZGVyID0gZm5OYW1lID09PSAnX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCc7XG4gICAgICAgIHZhciBpc01vdW50ID0gZm5OYW1lID09PSAnbW91bnRDb21wb25lbnQnO1xuXG4gICAgICAgIHZhciBtb3VudFN0YWNrID0gUmVhY3REZWZhdWx0UGVyZi5fbW91bnRTdGFjaztcbiAgICAgICAgdmFyIGVudHJ5ID0gUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzW1xuICAgICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cy5sZW5ndGggLSAxXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKGlzUmVuZGVyKSB7XG4gICAgICAgICAgYWRkVmFsdWUoZW50cnkuY291bnRzLCByb290Tm9kZUlELCAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vdW50KSB7XG4gICAgICAgICAgbW91bnRTdGFjay5wdXNoKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnQgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICBydiA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHRvdGFsVGltZSA9IHBlcmZvcm1hbmNlTm93KCkgLSBzdGFydDtcblxuICAgICAgICBpZiAoaXNSZW5kZXIpIHtcbiAgICAgICAgICBhZGRWYWx1ZShlbnRyeS5yZW5kZXIsIHJvb3ROb2RlSUQsIHRvdGFsVGltZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VudCkge1xuICAgICAgICAgIHZhciBzdWJNb3VudFRpbWUgPSBtb3VudFN0YWNrLnBvcCgpO1xuICAgICAgICAgIG1vdW50U3RhY2tbbW91bnRTdGFjay5sZW5ndGggLSAxXSArPSB0b3RhbFRpbWU7XG4gICAgICAgICAgYWRkVmFsdWUoZW50cnkuZXhjbHVzaXZlLCByb290Tm9kZUlELCB0b3RhbFRpbWUgLSBzdWJNb3VudFRpbWUpO1xuICAgICAgICAgIGFkZFZhbHVlKGVudHJ5LmluY2x1c2l2ZSwgcm9vdE5vZGVJRCwgdG90YWxUaW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRWYWx1ZShlbnRyeS5pbmNsdXNpdmUsIHJvb3ROb2RlSUQsIHRvdGFsVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICBlbnRyeS5kaXNwbGF5TmFtZXNbcm9vdE5vZGVJRF0gPSB7XG4gICAgICAgICAgY3VycmVudDogdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgb3duZXI6IHRoaXMuX2N1cnJlbnRFbGVtZW50Ll9vd25lciA/XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudC5fb3duZXIuZ2V0TmFtZSgpIDpcbiAgICAgICAgICAgICc8cm9vdD4nXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERlZmF1bHRQZXJmO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpc1xuICovXG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xuXG4vLyBEb24ndCB0cnkgdG8gc2F2ZSB1c2VycyBsZXNzIHRoYW4gMS4ybXMgKGEgbnVtYmVyIEkgbWFkZSB1cClcbnZhciBET05UX0NBUkVfVEhSRVNIT0xEID0gMS4yO1xudmFyIERPTV9PUEVSQVRJT05fVFlQRVMgPSB7XG4gICdfbW91bnRJbWFnZUludG9Ob2RlJzogJ3NldCBpbm5lckhUTUwnLFxuICBJTlNFUlRfTUFSS1VQOiAnc2V0IGlubmVySFRNTCcsXG4gIE1PVkVfRVhJU1RJTkc6ICdtb3ZlJyxcbiAgUkVNT1ZFX05PREU6ICdyZW1vdmUnLFxuICBURVhUX0NPTlRFTlQ6ICdzZXQgdGV4dENvbnRlbnQnLFxuICAndXBkYXRlUHJvcGVydHlCeUlEJzogJ3VwZGF0ZSBhdHRyaWJ1dGUnLFxuICAnZGVsZXRlUHJvcGVydHlCeUlEJzogJ2RlbGV0ZSBhdHRyaWJ1dGUnLFxuICAndXBkYXRlU3R5bGVzQnlJRCc6ICd1cGRhdGUgc3R5bGVzJyxcbiAgJ3VwZGF0ZUlubmVySFRNTEJ5SUQnOiAnc2V0IGlubmVySFRNTCcsXG4gICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQnOiAncmVwbGFjZSdcbn07XG5cbmZ1bmN0aW9uIGdldFRvdGFsVGltZShtZWFzdXJlbWVudHMpIHtcbiAgLy8gVE9ETzogcmV0dXJuIG51bWJlciBvZiBET00gb3BzPyBjb3VsZCBiZSBtaXNsZWFkaW5nLlxuICAvLyBUT0RPOiBtZWFzdXJlIGRyb3BwZWQgZnJhbWVzIGFmdGVyIHJlY29uY2lsZT9cbiAgLy8gVE9ETzogbG9nIHRvdGFsIHRpbWUgb2YgZWFjaCByZWNvbmNpbGUgYW5kIHRoZSB0b3AtbGV2ZWwgY29tcG9uZW50XG4gIC8vIGNsYXNzIHRoYXQgdHJpZ2dlcmVkIGl0LlxuICB2YXIgdG90YWxUaW1lID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgdG90YWxUaW1lICs9IG1lYXN1cmVtZW50LnRvdGFsVGltZTtcbiAgfVxuICByZXR1cm4gdG90YWxUaW1lO1xufVxuXG5mdW5jdGlvbiBnZXRET01TdW1tYXJ5KG1lYXN1cmVtZW50cykge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgdmFyIGlkO1xuXG4gICAgZm9yIChpZCBpbiBtZWFzdXJlbWVudC53cml0ZXMpIHtcbiAgICAgIG1lYXN1cmVtZW50LndyaXRlc1tpZF0uZm9yRWFjaChmdW5jdGlvbih3cml0ZSkge1xuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgdHlwZTogRE9NX09QRVJBVElPTl9UWVBFU1t3cml0ZS50eXBlXSB8fCB3cml0ZS50eXBlLFxuICAgICAgICAgIGFyZ3M6IHdyaXRlLmFyZ3NcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGl0ZW1zO1xufVxuXG5mdW5jdGlvbiBnZXRFeGNsdXNpdmVTdW1tYXJ5KG1lYXN1cmVtZW50cykge1xuICB2YXIgY2FuZGlkYXRlcyA9IHt9O1xuICB2YXIgZGlzcGxheU5hbWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgdmFyIGFsbElEcyA9IGFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgbWVhc3VyZW1lbnQuZXhjbHVzaXZlLFxuICAgICAgbWVhc3VyZW1lbnQuaW5jbHVzaXZlXG4gICAgKTtcblxuICAgIGZvciAodmFyIGlkIGluIGFsbElEcykge1xuICAgICAgZGlzcGxheU5hbWUgPSBtZWFzdXJlbWVudC5kaXNwbGF5TmFtZXNbaWRdLmN1cnJlbnQ7XG5cbiAgICAgIGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdID0gY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0gfHwge1xuICAgICAgICBjb21wb25lbnROYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgICAgaW5jbHVzaXZlOiAwLFxuICAgICAgICBleGNsdXNpdmU6IDAsXG4gICAgICAgIHJlbmRlcjogMCxcbiAgICAgICAgY291bnQ6IDBcbiAgICAgIH07XG4gICAgICBpZiAobWVhc3VyZW1lbnQucmVuZGVyW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXS5yZW5kZXIgKz0gbWVhc3VyZW1lbnQucmVuZGVyW2lkXTtcbiAgICAgIH1cbiAgICAgIGlmIChtZWFzdXJlbWVudC5leGNsdXNpdmVbaWRdKSB7XG4gICAgICAgIGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdLmV4Y2x1c2l2ZSArPSBtZWFzdXJlbWVudC5leGNsdXNpdmVbaWRdO1xuICAgICAgfVxuICAgICAgaWYgKG1lYXN1cmVtZW50LmluY2x1c2l2ZVtpZF0pIHtcbiAgICAgICAgY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0uaW5jbHVzaXZlICs9IG1lYXN1cmVtZW50LmluY2x1c2l2ZVtpZF07XG4gICAgICB9XG4gICAgICBpZiAobWVhc3VyZW1lbnQuY291bnRzW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXS5jb3VudCArPSBtZWFzdXJlbWVudC5jb3VudHNbaWRdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE5vdyBtYWtlIGEgc29ydGVkIGFycmF5IHdpdGggdGhlIHJlc3VsdHMuXG4gIHZhciBhcnIgPSBbXTtcbiAgZm9yIChkaXNwbGF5TmFtZSBpbiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdLmV4Y2x1c2l2ZSA+PSBET05UX0NBUkVfVEhSRVNIT0xEKSB7XG4gICAgICBhcnIucHVzaChjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXSk7XG4gICAgfVxuICB9XG5cbiAgYXJyLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiLmV4Y2x1c2l2ZSAtIGEuZXhjbHVzaXZlO1xuICB9KTtcblxuICByZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBnZXRJbmNsdXNpdmVTdW1tYXJ5KG1lYXN1cmVtZW50cywgb25seUNsZWFuKSB7XG4gIHZhciBjYW5kaWRhdGVzID0ge307XG4gIHZhciBpbmNsdXNpdmVLZXk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBtZWFzdXJlbWVudHNbaV07XG4gICAgdmFyIGFsbElEcyA9IGFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgbWVhc3VyZW1lbnQuZXhjbHVzaXZlLFxuICAgICAgbWVhc3VyZW1lbnQuaW5jbHVzaXZlXG4gICAgKTtcbiAgICB2YXIgY2xlYW5Db21wb25lbnRzO1xuXG4gICAgaWYgKG9ubHlDbGVhbikge1xuICAgICAgY2xlYW5Db21wb25lbnRzID0gZ2V0VW5jaGFuZ2VkQ29tcG9uZW50cyhtZWFzdXJlbWVudCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaWQgaW4gYWxsSURzKSB7XG4gICAgICBpZiAob25seUNsZWFuICYmICFjbGVhbkNvbXBvbmVudHNbaWRdKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSBtZWFzdXJlbWVudC5kaXNwbGF5TmFtZXNbaWRdO1xuXG4gICAgICAvLyBJbmNsdXNpdmUgdGltZSBpcyBub3QgdXNlZnVsIGZvciBtYW55IGNvbXBvbmVudHMgd2l0aG91dCBrbm93aW5nIHdoZXJlXG4gICAgICAvLyB0aGV5IGFyZSBpbnN0YW50aWF0ZWQuIFNvIHdlIGFnZ3JlZ2F0ZSBpbmNsdXNpdmUgdGltZSB3aXRoIGJvdGggdGhlXG4gICAgICAvLyBvd25lciBhbmQgY3VycmVudCBkaXNwbGF5TmFtZSBhcyB0aGUga2V5LlxuICAgICAgaW5jbHVzaXZlS2V5ID0gZGlzcGxheU5hbWUub3duZXIgKyAnID4gJyArIGRpc3BsYXlOYW1lLmN1cnJlbnQ7XG5cbiAgICAgIGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XSA9IGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XSB8fCB7XG4gICAgICAgIGNvbXBvbmVudE5hbWU6IGluY2x1c2l2ZUtleSxcbiAgICAgICAgdGltZTogMCxcbiAgICAgICAgY291bnQ6IDBcbiAgICAgIH07XG5cbiAgICAgIGlmIChtZWFzdXJlbWVudC5pbmNsdXNpdmVbaWRdKSB7XG4gICAgICAgIGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XS50aW1lICs9IG1lYXN1cmVtZW50LmluY2x1c2l2ZVtpZF07XG4gICAgICB9XG4gICAgICBpZiAobWVhc3VyZW1lbnQuY291bnRzW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2luY2x1c2l2ZUtleV0uY291bnQgKz0gbWVhc3VyZW1lbnQuY291bnRzW2lkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBOb3cgbWFrZSBhIHNvcnRlZCBhcnJheSB3aXRoIHRoZSByZXN1bHRzLlxuICB2YXIgYXJyID0gW107XG4gIGZvciAoaW5jbHVzaXZlS2V5IGluIGNhbmRpZGF0ZXMpIHtcbiAgICBpZiAoY2FuZGlkYXRlc1tpbmNsdXNpdmVLZXldLnRpbWUgPj0gRE9OVF9DQVJFX1RIUkVTSE9MRCkge1xuICAgICAgYXJyLnB1c2goY2FuZGlkYXRlc1tpbmNsdXNpdmVLZXldKTtcbiAgICB9XG4gIH1cblxuICBhcnIuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIudGltZSAtIGEudGltZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gZ2V0VW5jaGFuZ2VkQ29tcG9uZW50cyhtZWFzdXJlbWVudCkge1xuICAvLyBGb3IgYSBnaXZlbiByZWNvbmNpbGUsIGxvb2sgYXQgd2hpY2ggY29tcG9uZW50cyBkaWQgbm90IGFjdHVhbGx5XG4gIC8vIHJlbmRlciBhbnl0aGluZyB0byB0aGUgRE9NIGFuZCByZXR1cm4gYSBtYXBwaW5nIG9mIHRoZWlyIElEIHRvXG4gIC8vIHRoZSBhbW91bnQgb2YgdGltZSBpdCB0b29rIHRvIHJlbmRlciB0aGUgZW50aXJlIHN1YnRyZWUuXG4gIHZhciBjbGVhbkNvbXBvbmVudHMgPSB7fTtcbiAgdmFyIGRpcnR5TGVhZklEcyA9IE9iamVjdC5rZXlzKG1lYXN1cmVtZW50LndyaXRlcyk7XG4gIHZhciBhbGxJRHMgPSBhc3NpZ24oe30sIG1lYXN1cmVtZW50LmV4Y2x1c2l2ZSwgbWVhc3VyZW1lbnQuaW5jbHVzaXZlKTtcblxuICBmb3IgKHZhciBpZCBpbiBhbGxJRHMpIHtcbiAgICB2YXIgaXNEaXJ0eSA9IGZhbHNlO1xuICAgIC8vIEZvciBlYWNoIGNvbXBvbmVudCB0aGF0IHJlbmRlcmVkLCBzZWUgaWYgYSBjb21wb25lbnQgdGhhdCB0cmlnZ2VyZWRcbiAgICAvLyBhIERPTSBvcCBpcyBpbiBpdHMgc3VidHJlZS5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnR5TGVhZklEcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGRpcnR5TGVhZklEc1tpXS5pbmRleE9mKGlkKSA9PT0gMCkge1xuICAgICAgICBpc0RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaXNEaXJ0eSAmJiBtZWFzdXJlbWVudC5jb3VudHNbaWRdID4gMCkge1xuICAgICAgY2xlYW5Db21wb25lbnRzW2lkXSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjbGVhbkNvbXBvbmVudHM7XG59XG5cbnZhciBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMgPSB7XG4gIGdldEV4Y2x1c2l2ZVN1bW1hcnk6IGdldEV4Y2x1c2l2ZVN1bW1hcnksXG4gIGdldEluY2x1c2l2ZVN1bW1hcnk6IGdldEluY2x1c2l2ZVN1bW1hcnksXG4gIGdldERPTVN1bW1hcnk6IGdldERPTVN1bW1hcnksXG4gIGdldFRvdGFsVGltZTogZ2V0VG90YWxUaW1lXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcztcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFbGVtZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDb250ZXh0ID0gcmVxdWlyZShcIi4vUmVhY3RDb250ZXh0XCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlXG59O1xuXG4vKipcbiAqIFdhcm4gZm9yIG11dGF0aW9ucy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuZnVuY3Rpb24gZGVmaW5lV2FybmluZ1Byb3BlcnR5KG9iamVjdCwga2V5KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5fc3RvcmUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fc3RvcmVba2V5XTtcbiAgICB9LFxuXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICAnRG9uXFwndCBzZXQgdGhlICVzIHByb3BlcnR5IG9mIHRoZSBSZWFjdCBlbGVtZW50LiBJbnN0ZWFkLCAnICtcbiAgICAgICAgJ3NwZWNpZnkgdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpbml0aWFsbHkgY3JlYXRpbmcgdGhlIGVsZW1lbnQuJyxcbiAgICAgICAga2V5XG4gICAgICApIDogbnVsbCk7XG4gICAgICB0aGlzLl9zdG9yZVtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gIH0pO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgdXBkYXRlZCB0byB0cnVlIGlmIHRoZSBtZW1icmFuZSBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZC5cbiAqL1xudmFyIHVzZU11dGF0aW9uTWVtYnJhbmUgPSBmYWxzZTtcblxuLyoqXG4gKiBXYXJuIGZvciBtdXRhdGlvbnMuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBkZWZpbmVNdXRhdGlvbk1lbWJyYW5lKHByb3RvdHlwZSkge1xuICB0cnkge1xuICAgIHZhciBwc2V1ZG9Gcm96ZW5Qcm9wZXJ0aWVzID0ge1xuICAgICAgcHJvcHM6IHRydWVcbiAgICB9O1xuICAgIGZvciAodmFyIGtleSBpbiBwc2V1ZG9Gcm96ZW5Qcm9wZXJ0aWVzKSB7XG4gICAgICBkZWZpbmVXYXJuaW5nUHJvcGVydHkocHJvdG90eXBlLCBrZXkpO1xuICAgIH1cbiAgICB1c2VNdXRhdGlvbk1lbWJyYW5lID0gdHJ1ZTtcbiAgfSBjYXRjaCAoeCkge1xuICAgIC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eVxuICB9XG59XG5cbi8qKlxuICogQmFzZSBjb25zdHJ1Y3RvciBmb3IgYWxsIFJlYWN0IGVsZW1lbnRzLiBUaGlzIGlzIG9ubHkgdXNlZCB0byBtYWtlIHRoaXNcbiAqIHdvcmsgd2l0aCBhIGR5bmFtaWMgaW5zdGFuY2VvZiBjaGVjay4gTm90aGluZyBzaG91bGQgbGl2ZSBvbiB0aGlzIHByb3RvdHlwZS5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbih0eXBlLCBrZXksIHJlZiwgb3duZXIsIGNvbnRleHQsIHByb3BzKSB7XG4gIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMucmVmID0gcmVmO1xuXG4gIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gIHRoaXMuX293bmVyID0gb3duZXI7XG5cbiAgLy8gVE9ETzogRGVwcmVjYXRlIHdpdGhDb250ZXh0LCBhbmQgdGhlbiB0aGUgY29udGV4dCBiZWNvbWVzIGFjY2Vzc2libGVcbiAgLy8gdGhyb3VnaCB0aGUgb3duZXIuXG4gIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGFuZCBwcm9wcyBhcmUgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgdGhlbSBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIHRoaXMuX3N0b3JlID0ge3Byb3BzOiBwcm9wcywgb3JpZ2luYWxQcm9wczogYXNzaWduKHt9LCBwcm9wcyl9O1xuXG4gICAgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoeCkge1xuICAgIH1cbiAgICB0aGlzLl9zdG9yZS52YWxpZGF0ZWQgPSBmYWxzZTtcblxuICAgIC8vIFdlJ3JlIG5vdCBhbGxvd2VkIHRvIHNldCBwcm9wcyBkaXJlY3RseSBvbiB0aGUgb2JqZWN0IHNvIHdlIGVhcmx5XG4gICAgLy8gcmV0dXJuIGFuZCByZWx5IG9uIHRoZSBwcm90b3R5cGUgbWVtYnJhbmUgdG8gZm9yd2FyZCB0byB0aGUgYmFja2luZ1xuICAgIC8vIHN0b3JlLlxuICAgIGlmICh1c2VNdXRhdGlvbk1lbWJyYW5lKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbn07XG5cbi8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgZXhwb3NlIHRoZSBmdW5jdGlvbiBvbiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHkuXG4vLyBSZWFjdEVsZW1lbnQgc2hvdWxkIGJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBwbGFpbiBvYmplY3QuXG5SZWFjdEVsZW1lbnQucHJvdG90eXBlID0ge1xuICBfaXNSZWFjdEVsZW1lbnQ6IHRydWVcbn07XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgZGVmaW5lTXV0YXRpb25NZW1icmFuZShSZWFjdEVsZW1lbnQucHJvdG90eXBlKTtcbn1cblxuUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbih0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZTtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBwcm9wcyA9IHt9O1xuXG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICByZWYgPSBjb25maWcucmVmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLnJlZjtcbiAgICBrZXkgPSBjb25maWcua2V5ID09PSB1bmRlZmluZWQgPyBudWxsIDogJycgKyBjb25maWcua2V5O1xuICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGNvbmZpZy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgJiZcbiAgICAgICAgICAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzW3Byb3BOYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFJlYWN0RWxlbWVudChcbiAgICB0eXBlLFxuICAgIGtleSxcbiAgICByZWYsXG4gICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCxcbiAgICBSZWFjdENvbnRleHQuY3VycmVudCxcbiAgICBwcm9wc1xuICApO1xufTtcblxuUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBmYWN0b3J5ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0eXBlKTtcbiAgLy8gRXhwb3NlIHRoZSB0eXBlIG9uIHRoZSBmYWN0b3J5IGFuZCB0aGUgcHJvdG90eXBlIHNvIHRoYXQgaXQgY2FuIGJlXG4gIC8vIGVhc2lseSBhY2Nlc3NlZCBvbiBlbGVtZW50cy4gRS5nLiA8Rm9vIC8+LnR5cGUgPT09IEZvby50eXBlLlxuICAvLyBUaGlzIHNob3VsZCBub3QgYmUgbmFtZWQgYGNvbnN0cnVjdG9yYCBzaW5jZSB0aGlzIG1heSBub3QgYmUgdGhlIGZ1bmN0aW9uXG4gIC8vIHRoYXQgY3JlYXRlZCB0aGUgZWxlbWVudCwgYW5kIGl0IG1heSBub3QgZXZlbiBiZSBhIGNvbnN0cnVjdG9yLlxuICAvLyBMZWdhY3kgaG9vayBUT0RPOiBXYXJuIGlmIHRoaXMgaXMgYWNjZXNzZWRcbiAgZmFjdG9yeS50eXBlID0gdHlwZTtcbiAgcmV0dXJuIGZhY3Rvcnk7XG59O1xuXG5SZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlUHJvcHMgPSBmdW5jdGlvbihvbGRFbGVtZW50LCBuZXdQcm9wcykge1xuICB2YXIgbmV3RWxlbWVudCA9IG5ldyBSZWFjdEVsZW1lbnQoXG4gICAgb2xkRWxlbWVudC50eXBlLFxuICAgIG9sZEVsZW1lbnQua2V5LFxuICAgIG9sZEVsZW1lbnQucmVmLFxuICAgIG9sZEVsZW1lbnQuX293bmVyLFxuICAgIG9sZEVsZW1lbnQuX2NvbnRleHQsXG4gICAgbmV3UHJvcHNcbiAgKTtcblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgLy8gSWYgdGhlIGtleSBvbiB0aGUgb3JpZ2luYWwgaXMgdmFsaWQsIHRoZW4gdGhlIGNsb25lIGlzIHZhbGlkXG4gICAgbmV3RWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gb2xkRWxlbWVudC5fc3RvcmUudmFsaWRhdGVkO1xuICB9XG4gIHJldHVybiBuZXdFbGVtZW50O1xufTtcblxuUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lO1xuXG4gIC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcbiAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuXG4gIC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIG92ZXJyaWRlIGV4aXN0aW5nIHByb3BzXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmXG4gICAgICAgICAgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVhY3RFbGVtZW50KFxuICAgIGVsZW1lbnQudHlwZSxcbiAgICBrZXksXG4gICAgcmVmLFxuICAgIG93bmVyLFxuICAgIGVsZW1lbnQuX2NvbnRleHQsXG4gICAgcHJvcHNcbiAgKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSB2YWxpZCBjb21wb25lbnQuXG4gKiBAZmluYWxcbiAqL1xuUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gIC8vIFJlYWN0VGVzdFV0aWxzIGlzIG9mdGVuIHVzZWQgb3V0c2lkZSBvZiBiZWZvcmVFYWNoIHdoZXJlIGFzIFJlYWN0IGlzXG4gIC8vIHdpdGhpbiBpdC4gVGhpcyBsZWFkcyB0byB0d28gZGlmZmVyZW50IGluc3RhbmNlcyBvZiBSZWFjdCBvbiB0aGUgc2FtZVxuICAvLyBwYWdlLiBUbyBpZGVudGlmeSBhIGVsZW1lbnQgZnJvbSBhIGRpZmZlcmVudCBSZWFjdCBpbnN0YW5jZSB3ZSB1c2VcbiAgLy8gYSBmbGFnIGluc3RlYWQgb2YgYW4gaW5zdGFuY2VvZiBjaGVjay5cbiAgdmFyIGlzRWxlbWVudCA9ICEhKG9iamVjdCAmJiBvYmplY3QuX2lzUmVhY3RFbGVtZW50KTtcbiAgLy8gaWYgKGlzRWxlbWVudCAmJiAhKG9iamVjdCBpbnN0YW5jZW9mIFJlYWN0RWxlbWVudCkpIHtcbiAgLy8gVGhpcyBpcyBhbiBpbmRpY2F0b3IgdGhhdCB5b3UncmUgdXNpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgUmVhY3QgYXQgdGhlXG4gIC8vIHNhbWUgdGltZS4gVGhpcyB3aWxsIHNjcmV3IHdpdGggb3duZXJzaGlwIGFuZCBzdHVmZi4gRml4IGl0LCBwbGVhc2UuXG4gIC8vIFRPRE86IFdlIGNvdWxkIHBvc3NpYmx5IHdhcm4gaGVyZS5cbiAgLy8gfVxuICByZXR1cm4gaXNFbGVtZW50O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVsZW1lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRmJHVnRaVzUwTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERTBMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRmJHVnRaVzUwWEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1VtVmhZM1JEYjI1MFpYaDBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEYjI1MFpYaDBYQ0lwTzF4dWRtRnlJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEZFhKeVpXNTBUM2R1WlhKY0lpazdYRzVjYm5aaGNpQmhjM05wWjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlQWW1wbFkzUXVZWE56YVdkdVhDSXBPMXh1ZG1GeUlIZGhjbTVwYm1jZ1BTQnlaWEYxYVhKbEtGd2lMaTkzWVhKdWFXNW5YQ0lwTzF4dVhHNTJZWElnVWtWVFJWSldSVVJmVUZKUFVGTWdQU0I3WEc0Z0lHdGxlVG9nZEhKMVpTeGNiaUFnY21WbU9pQjBjblZsWEc1OU8xeHVYRzR2S2lwY2JpQXFJRmRoY200Z1ptOXlJRzExZEdGMGFXOXVjeTVjYmlBcVhHNGdLaUJBYVc1MFpYSnVZV3hjYmlBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCdlltcGxZM1JjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCclpYbGNiaUFxTDF4dVpuVnVZM1JwYjI0Z1pHVm1hVzVsVjJGeWJtbHVaMUJ5YjNCbGNuUjVLRzlpYW1WamRDd2dhMlY1S1NCN1hHNGdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNodlltcGxZM1FzSUd0bGVTd2dlMXh1WEc0Z0lDQWdZMjl1Wm1sbmRYSmhZbXhsT2lCbVlXeHpaU3hjYmlBZ0lDQmxiblZ0WlhKaFlteGxPaUIwY25WbExGeHVYRzRnSUNBZ1oyVjBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1ZmMzUnZjbVVwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYzNSdmNtVmJhMlY1WFR0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnYzJWME9pQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0FuUkc5dVhGd25kQ0J6WlhRZ2RHaGxJQ1Z6SUhCeWIzQmxjblI1SUc5bUlIUm9aU0JTWldGamRDQmxiR1Z0Wlc1MExpQkpibk4wWldGa0xDQW5JQ3RjYmlBZ0lDQWdJQ0FnSjNOd1pXTnBabmtnZEdobElHTnZjbkpsWTNRZ2RtRnNkV1VnZDJobGJpQnBibWwwYVdGc2JIa2dZM0psWVhScGJtY2dkR2hsSUdWc1pXMWxiblF1Snl4Y2JpQWdJQ0FnSUNBZ2EyVjVYRzRnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQjBhR2x6TGw5emRHOXlaVnRyWlhsZElEMGdkbUZzZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJSDBwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlJvYVhNZ2FYTWdkWEJrWVhSbFpDQjBieUIwY25WbElHbG1JSFJvWlNCdFpXMWljbUZ1WlNCcGN5QnpkV05qWlhOelpuVnNiSGtnWTNKbFlYUmxaQzVjYmlBcUwxeHVkbUZ5SUhWelpVMTFkR0YwYVc5dVRXVnRZbkpoYm1VZ1BTQm1ZV3h6WlR0Y2JseHVMeW9xWEc0Z0tpQlhZWEp1SUdadmNpQnRkWFJoZEdsdmJuTXVYRzRnS2x4dUlDb2dRR2x1ZEdWeWJtRnNYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnWld4bGJXVnVkRnh1SUNvdlhHNW1kVzVqZEdsdmJpQmtaV1pwYm1WTmRYUmhkR2x2YmsxbGJXSnlZVzVsS0hCeWIzUnZkSGx3WlNrZ2UxeHVJQ0IwY25rZ2UxeHVJQ0FnSUhaaGNpQndjMlYxWkc5R2NtOTZaVzVRY205d1pYSjBhV1Z6SUQwZ2UxeHVJQ0FnSUNBZ2NISnZjSE02SUhSeWRXVmNiaUFnSUNCOU8xeHVJQ0FnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUJ3YzJWMVpHOUdjbTk2Wlc1UWNtOXdaWEowYVdWektTQjdYRzRnSUNBZ0lDQmtaV1pwYm1WWFlYSnVhVzVuVUhKdmNHVnlkSGtvY0hKdmRHOTBlWEJsTENCclpYa3BPMXh1SUNBZ0lIMWNiaUFnSUNCMWMyVk5kWFJoZEdsdmJrMWxiV0p5WVc1bElEMGdkSEoxWlR0Y2JpQWdmU0JqWVhSamFDQW9lQ2tnZTF4dUlDQWdJQzh2SUVsRklIZHBiR3dnWm1GcGJDQnZiaUJrWldacGJtVlFjbTl3WlhKMGVWeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dRbUZ6WlNCamIyNXpkSEoxWTNSdmNpQm1iM0lnWVd4c0lGSmxZV04wSUdWc1pXMWxiblJ6TGlCVWFHbHpJR2x6SUc5dWJIa2dkWE5sWkNCMGJ5QnRZV3RsSUhSb2FYTmNiaUFxSUhkdmNtc2dkMmwwYUNCaElHUjVibUZ0YVdNZ2FXNXpkR0Z1WTJWdlppQmphR1ZqYXk0Z1RtOTBhR2x1WnlCemFHOTFiR1FnYkdsMlpTQnZiaUIwYUdseklIQnliM1J2ZEhsd1pTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJSFI1Y0dWY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZHOWlhbVZqZEgwZ2NtVm1YRzRnS2lCQWNHRnlZVzBnZXlwOUlHdGxlVnh1SUNvZ1FIQmhjbUZ0SUhzcWZTQndjbTl3YzF4dUlDb2dRR2x1ZEdWeWJtRnNYRzRnS2k5Y2JuWmhjaUJTWldGamRFVnNaVzFsYm5RZ1BTQm1kVzVqZEdsdmJpaDBlWEJsTENCclpYa3NJSEpsWml3Z2IzZHVaWElzSUdOdmJuUmxlSFFzSUhCeWIzQnpLU0I3WEc0Z0lDOHZJRUoxYVd4MExXbHVJSEJ5YjNCbGNuUnBaWE1nZEdoaGRDQmlaV3h2Ym1jZ2IyNGdkR2hsSUdWc1pXMWxiblJjYmlBZ2RHaHBjeTUwZVhCbElEMGdkSGx3WlR0Y2JpQWdkR2hwY3k1clpYa2dQU0JyWlhrN1hHNGdJSFJvYVhNdWNtVm1JRDBnY21WbU8xeHVYRzRnSUM4dklGSmxZMjl5WkNCMGFHVWdZMjl0Y0c5dVpXNTBJSEpsYzNCdmJuTnBZbXhsSUdadmNpQmpjbVZoZEdsdVp5QjBhR2x6SUdWc1pXMWxiblF1WEc0Z0lIUm9hWE11WDI5M2JtVnlJRDBnYjNkdVpYSTdYRzVjYmlBZ0x5OGdWRTlFVHpvZ1JHVndjbVZqWVhSbElIZHBkR2hEYjI1MFpYaDBMQ0JoYm1RZ2RHaGxiaUIwYUdVZ1kyOXVkR1Y0ZENCaVpXTnZiV1Z6SUdGalkyVnpjMmxpYkdWY2JpQWdMeThnZEdoeWIzVm5hQ0IwYUdVZ2IzZHVaWEl1WEc0Z0lIUm9hWE11WDJOdmJuUmxlSFFnUFNCamIyNTBaWGgwTzF4dVhHNGdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQXZMeUJVYUdVZ2RtRnNhV1JoZEdsdmJpQm1iR0ZuSUdGdVpDQndjbTl3Y3lCaGNtVWdZM1Z5Y21WdWRHeDVJRzExZEdGMGFYWmxMaUJYWlNCd2RYUWdkR2hsYlNCdmJseHVJQ0FnSUM4dklHRnVJR1Y0ZEdWeWJtRnNJR0poWTJ0cGJtY2djM1J2Y21VZ2MyOGdkR2hoZENCM1pTQmpZVzRnWm5KbFpYcGxJSFJvWlNCM2FHOXNaU0J2WW1wbFkzUXVYRzRnSUNBZ0x5OGdWR2hwY3lCallXNGdZbVVnY21Wd2JHRmpaV1FnZDJsMGFDQmhJRmRsWVd0TllYQWdiMjVqWlNCMGFHVjVJR0Z5WlNCcGJYQnNaVzFsYm5SbFpDQnBibHh1SUNBZ0lDOHZJR052YlcxdmJteDVJSFZ6WldRZ1pHVjJaV3h2Y0cxbGJuUWdaVzUyYVhKdmJtMWxiblJ6TGx4dUlDQWdJSFJvYVhNdVgzTjBiM0psSUQwZ2UzQnliM0J6T2lCd2NtOXdjeXdnYjNKcFoybHVZV3hRY205d2N6b2dZWE56YVdkdUtIdDlMQ0J3Y205d2N5bDlPMXh1WEc0Z0lDQWdMeThnVkc4Z2JXRnJaU0JqYjIxd1lYSnBibWNnVW1WaFkzUkZiR1Z0Wlc1MGN5QmxZWE5wWlhJZ1ptOXlJSFJsYzNScGJtY2djSFZ5Y0c5elpYTXNJSGRsSUcxaGEyVmNiaUFnSUNBdkx5QjBhR1VnZG1Gc2FXUmhkR2x2YmlCbWJHRm5JRzV2YmkxbGJuVnRaWEpoWW14bElDaDNhR1Z5WlNCd2IzTnphV0pzWlN3Z2QyaHBZMmdnYzJodmRXeGtYRzRnSUNBZ0x5OGdhVzVqYkhWa1pTQmxkbVZ5ZVNCbGJuWnBjbTl1YldWdWRDQjNaU0J5ZFc0Z2RHVnpkSE1nYVc0cExDQnpieUIwYUdVZ2RHVnpkQ0JtY21GdFpYZHZjbXRjYmlBZ0lDQXZMeUJwWjI1dmNtVnpJR2wwTGx4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kR2hwY3k1ZmMzUnZjbVVzSUNkMllXeHBaR0YwWldRbkxDQjdYRzRnSUNBZ0lDQWdJR052Ym1acFozVnlZV0pzWlRvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUdWdWRXMWxjbUZpYkdVNklHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNCM2NtbDBZV0pzWlRvZ2RISjFaVnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmU0JqWVhSamFDQW9lQ2tnZTF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TGw5emRHOXlaUzUyWVd4cFpHRjBaV1FnUFNCbVlXeHpaVHRjYmx4dUlDQWdJQzh2SUZkbEozSmxJRzV2ZENCaGJHeHZkMlZrSUhSdklITmxkQ0J3Y205d2N5QmthWEpsWTNSc2VTQnZiaUIwYUdVZ2IySnFaV04wSUhOdklIZGxJR1ZoY214NVhHNGdJQ0FnTHk4Z2NtVjBkWEp1SUdGdVpDQnlaV3g1SUc5dUlIUm9aU0J3Y205MGIzUjVjR1VnYldWdFluSmhibVVnZEc4Z1ptOXlkMkZ5WkNCMGJ5QjBhR1VnWW1GamEybHVaMXh1SUNBZ0lDOHZJSE4wYjNKbExseHVJQ0FnSUdsbUlDaDFjMlZOZFhSaGRHbHZiazFsYldKeVlXNWxLU0I3WEc0Z0lDQWdJQ0JQWW1wbFkzUXVabkpsWlhwbEtIUm9hWE1wTzF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSFJvYVhNdWNISnZjSE1nUFNCd2NtOXdjenRjYm4wN1hHNWNiaTh2SUZkbElHbHVkR1Z1ZEdsdmJtRnNiSGtnWkc5dUozUWdaWGh3YjNObElIUm9aU0JtZFc1amRHbHZiaUJ2YmlCMGFHVWdZMjl1YzNSeWRXTjBiM0lnY0hKdmNHVnlkSGt1WEc0dkx5QlNaV0ZqZEVWc1pXMWxiblFnYzJodmRXeGtJR0psSUdsdVpHbHpkR2x1WjNWcGMyaGhZbXhsSUdaeWIyMGdZU0J3YkdGcGJpQnZZbXBsWTNRdVhHNVNaV0ZqZEVWc1pXMWxiblF1Y0hKdmRHOTBlWEJsSUQwZ2UxeHVJQ0JmYVhOU1pXRmpkRVZzWlcxbGJuUTZJSFJ5ZFdWY2JuMDdYRzVjYm1sbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdaR1ZtYVc1bFRYVjBZWFJwYjI1TlpXMWljbUZ1WlNoU1pXRmpkRVZzWlcxbGJuUXVjSEp2ZEc5MGVYQmxLVHRjYm4xY2JseHVVbVZoWTNSRmJHVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUWdQU0JtZFc1amRHbHZiaWgwZVhCbExDQmpiMjVtYVdjc0lHTm9hV3hrY21WdUtTQjdYRzRnSUhaaGNpQndjbTl3VG1GdFpUdGNibHh1SUNBdkx5QlNaWE5sY25abFpDQnVZVzFsY3lCaGNtVWdaWGgwY21GamRHVmtYRzRnSUhaaGNpQndjbTl3Y3lBOUlIdDlPMXh1WEc0Z0lIWmhjaUJyWlhrZ1BTQnVkV3hzTzF4dUlDQjJZWElnY21WbUlEMGdiblZzYkR0Y2JseHVJQ0JwWmlBb1kyOXVabWxuSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0J5WldZZ1BTQmpiMjVtYVdjdWNtVm1JRDA5UFNCMWJtUmxabWx1WldRZ1B5QnVkV3hzSURvZ1kyOXVabWxuTG5KbFpqdGNiaUFnSUNCclpYa2dQU0JqYjI1bWFXY3VhMlY1SUQwOVBTQjFibVJsWm1sdVpXUWdQeUJ1ZFd4c0lEb2dKeWNnS3lCamIyNW1hV2N1YTJWNU8xeHVJQ0FnSUM4dklGSmxiV0ZwYm1sdVp5QndjbTl3WlhKMGFXVnpJR0Z5WlNCaFpHUmxaQ0IwYnlCaElHNWxkeUJ3Y205d2N5QnZZbXBsWTNSY2JpQWdJQ0JtYjNJZ0tIQnliM0JPWVcxbElHbHVJR052Ym1acFp5a2dlMXh1SUNBZ0lDQWdhV1lnS0dOdmJtWnBaeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdjbTl3VG1GdFpTa2dKaVpjYmlBZ0lDQWdJQ0FnSUNBaFVrVlRSVkpXUlVSZlVGSlBVRk11YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0U1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUhCeWIzQnpXM0J5YjNCT1lXMWxYU0E5SUdOdmJtWnBaMXR3Y205d1RtRnRaVjA3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnTHk4Z1EyaHBiR1J5Wlc0Z1kyRnVJR0psSUcxdmNtVWdkR2hoYmlCdmJtVWdZWEpuZFcxbGJuUXNJR0Z1WkNCMGFHOXpaU0JoY21VZ2RISmhibk5tWlhKeVpXUWdiMjUwYjF4dUlDQXZMeUIwYUdVZ2JtVjNiSGtnWVd4c2IyTmhkR1ZrSUhCeWIzQnpJRzlpYW1WamRDNWNiaUFnZG1GeUlHTm9hV3hrY21WdVRHVnVaM1JvSUQwZ1lYSm5kVzFsYm5SekxteGxibWQwYUNBdElESTdYRzRnSUdsbUlDaGphR2xzWkhKbGJreGxibWQwYUNBOVBUMGdNU2tnZTF4dUlDQWdJSEJ5YjNCekxtTm9hV3hrY21WdUlEMGdZMmhwYkdSeVpXNDdYRzRnSUgwZ1pXeHpaU0JwWmlBb1kyaHBiR1J5Wlc1TVpXNW5kR2dnUGlBeEtTQjdYRzRnSUNBZ2RtRnlJR05vYVd4a1FYSnlZWGtnUFNCQmNuSmhlU2hqYUdsc1pISmxia3hsYm1kMGFDazdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQmphR2xzWkhKbGJreGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqYUdsc1pFRnljbUY1VzJsZElEMGdZWEpuZFcxbGJuUnpXMmtnS3lBeVhUdGNiaUFnSUNCOVhHNGdJQ0FnY0hKdmNITXVZMmhwYkdSeVpXNGdQU0JqYUdsc1pFRnljbUY1TzF4dUlDQjlYRzVjYmlBZ0x5OGdVbVZ6YjJ4MlpTQmtaV1poZFd4MElIQnliM0J6WEc0Z0lHbG1JQ2gwZVhCbElDWW1JSFI1Y0dVdVpHVm1ZWFZzZEZCeWIzQnpLU0I3WEc0Z0lDQWdkbUZ5SUdSbFptRjFiSFJRY205d2N5QTlJSFI1Y0dVdVpHVm1ZWFZzZEZCeWIzQnpPMXh1SUNBZ0lHWnZjaUFvY0hKdmNFNWhiV1VnYVc0Z1pHVm1ZWFZzZEZCeWIzQnpLU0I3WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhCeWIzQnpXM0J5YjNCT1lXMWxYU0E5UFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnY0hKdmNITmJjSEp2Y0U1aGJXVmRJRDBnWkdWbVlYVnNkRkJ5YjNCelczQnliM0JPWVcxbFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2JtVjNJRkpsWVdOMFJXeGxiV1Z1ZENoY2JpQWdJQ0IwZVhCbExGeHVJQ0FnSUd0bGVTeGNiaUFnSUNCeVpXWXNYRzRnSUNBZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJdVkzVnljbVZ1ZEN4Y2JpQWdJQ0JTWldGamRFTnZiblJsZUhRdVkzVnljbVZ1ZEN4Y2JpQWdJQ0J3Y205d2MxeHVJQ0FwTzF4dWZUdGNibHh1VW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVaaFkzUnZjbmtnUFNCbWRXNWpkR2x2YmloMGVYQmxLU0I3WEc0Z0lIWmhjaUJtWVdOMGIzSjVJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblF1WW1sdVpDaHVkV3hzTENCMGVYQmxLVHRjYmlBZ0x5OGdSWGh3YjNObElIUm9aU0IwZVhCbElHOXVJSFJvWlNCbVlXTjBiM0o1SUdGdVpDQjBhR1VnY0hKdmRHOTBlWEJsSUhOdklIUm9ZWFFnYVhRZ1kyRnVJR0psWEc0Z0lDOHZJR1ZoYzJsc2VTQmhZMk5sYzNObFpDQnZiaUJsYkdWdFpXNTBjeTRnUlM1bkxpQThSbTl2SUM4K0xuUjVjR1VnUFQwOUlFWnZieTUwZVhCbExseHVJQ0F2THlCVWFHbHpJSE5vYjNWc1pDQnViM1FnWW1VZ2JtRnRaV1FnWUdOdmJuTjBjblZqZEc5eVlDQnphVzVqWlNCMGFHbHpJRzFoZVNCdWIzUWdZbVVnZEdobElHWjFibU4wYVc5dVhHNGdJQzh2SUhSb1lYUWdZM0psWVhSbFpDQjBhR1VnWld4bGJXVnVkQ3dnWVc1a0lHbDBJRzFoZVNCdWIzUWdaWFpsYmlCaVpTQmhJR052Ym5OMGNuVmpkRzl5TGx4dUlDQXZMeUJNWldkaFkza2dhRzl2YXlCVVQwUlBPaUJYWVhKdUlHbG1JSFJvYVhNZ2FYTWdZV05qWlhOelpXUmNiaUFnWm1GamRHOXllUzUwZVhCbElEMGdkSGx3WlR0Y2JpQWdjbVYwZFhKdUlHWmhZM1J2Y25rN1hHNTlPMXh1WEc1U1pXRmpkRVZzWlcxbGJuUXVZMnh2Ym1WQmJtUlNaWEJzWVdObFVISnZjSE1nUFNCbWRXNWpkR2x2YmlodmJHUkZiR1Z0Wlc1MExDQnVaWGRRY205d2N5a2dlMXh1SUNCMllYSWdibVYzUld4bGJXVnVkQ0E5SUc1bGR5QlNaV0ZqZEVWc1pXMWxiblFvWEc0Z0lDQWdiMnhrUld4bGJXVnVkQzUwZVhCbExGeHVJQ0FnSUc5c1pFVnNaVzFsYm5RdWEyVjVMRnh1SUNBZ0lHOXNaRVZzWlcxbGJuUXVjbVZtTEZ4dUlDQWdJRzlzWkVWc1pXMWxiblF1WDI5M2JtVnlMRnh1SUNBZ0lHOXNaRVZzWlcxbGJuUXVYMk52Ym5SbGVIUXNYRzRnSUNBZ2JtVjNVSEp2Y0hOY2JpQWdLVHRjYmx4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0x5OGdTV1lnZEdobElHdGxlU0J2YmlCMGFHVWdiM0pwWjJsdVlXd2dhWE1nZG1Gc2FXUXNJSFJvWlc0Z2RHaGxJR05zYjI1bElHbHpJSFpoYkdsa1hHNGdJQ0FnYm1WM1JXeGxiV1Z1ZEM1ZmMzUnZjbVV1ZG1Gc2FXUmhkR1ZrSUQwZ2IyeGtSV3hsYldWdWRDNWZjM1J2Y21VdWRtRnNhV1JoZEdWa08xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdVpYZEZiR1Z0Wlc1ME8xeHVmVHRjYmx4dVVtVmhZM1JGYkdWdFpXNTBMbU5zYjI1bFJXeGxiV1Z1ZENBOUlHWjFibU4wYVc5dUtHVnNaVzFsYm5Rc0lHTnZibVpwWnl3Z1kyaHBiR1J5Wlc0cElIdGNiaUFnZG1GeUlIQnliM0JPWVcxbE8xeHVYRzRnSUM4dklFOXlhV2RwYm1Gc0lIQnliM0J6SUdGeVpTQmpiM0JwWldSY2JpQWdkbUZ5SUhCeWIzQnpJRDBnWVhOemFXZHVLSHQ5TENCbGJHVnRaVzUwTG5CeWIzQnpLVHRjYmx4dUlDQXZMeUJTWlhObGNuWmxaQ0J1WVcxbGN5QmhjbVVnWlhoMGNtRmpkR1ZrWEc0Z0lIWmhjaUJyWlhrZ1BTQmxiR1Z0Wlc1MExtdGxlVHRjYmlBZ2RtRnlJSEpsWmlBOUlHVnNaVzFsYm5RdWNtVm1PMXh1WEc0Z0lDOHZJRTkzYm1WeUlIZHBiR3dnWW1VZ2NISmxjMlZ5ZG1Wa0xDQjFibXhsYzNNZ2NtVm1JR2x6SUc5MlpYSnlhV1JrWlc1Y2JpQWdkbUZ5SUc5M2JtVnlJRDBnWld4bGJXVnVkQzVmYjNkdVpYSTdYRzVjYmlBZ2FXWWdLR052Ym1acFp5QWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2FXWWdLR052Ym1acFp5NXlaV1lnSVQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lDQWdMeThnVTJsc1pXNTBiSGtnYzNSbFlXd2dkR2hsSUhKbFppQm1jbTl0SUhSb1pTQndZWEpsYm5RdVhHNGdJQ0FnSUNCeVpXWWdQU0JqYjI1bWFXY3VjbVZtTzF4dUlDQWdJQ0FnYjNkdVpYSWdQU0JTWldGamRFTjFjbkpsYm5SUGQyNWxjaTVqZFhKeVpXNTBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxtdGxlU0FoUFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ0lDQnJaWGtnUFNBbkp5QXJJR052Ym1acFp5NXJaWGs3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJRkpsYldGcGJtbHVaeUJ3Y205d1pYSjBhV1Z6SUc5MlpYSnlhV1JsSUdWNGFYTjBhVzVuSUhCeWIzQnpYRzRnSUNBZ1ptOXlJQ2h3Y205d1RtRnRaU0JwYmlCamIyNW1hV2NwSUh0Y2JpQWdJQ0FnSUdsbUlDaGpiMjVtYVdjdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJVkpGVTBWU1ZrVkVYMUJTVDFCVExtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQk9ZVzFsS1NrZ2UxeHVJQ0FnSUNBZ0lDQndjbTl3YzF0d2NtOXdUbUZ0WlYwZ1BTQmpiMjVtYVdkYmNISnZjRTVoYldWZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRU5vYVd4a2NtVnVJR05oYmlCaVpTQnRiM0psSUhSb1lXNGdiMjVsSUdGeVozVnRaVzUwTENCaGJtUWdkR2h2YzJVZ1lYSmxJSFJ5WVc1elptVnljbVZrSUc5dWRHOWNiaUFnTHk4Z2RHaGxJRzVsZDJ4NUlHRnNiRzlqWVhSbFpDQndjbTl3Y3lCdlltcGxZM1F1WEc0Z0lIWmhjaUJqYUdsc1pISmxia3hsYm1kMGFDQTlJR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZ2dMU0F5TzF4dUlDQnBaaUFvWTJocGJHUnlaVzVNWlc1bmRHZ2dQVDA5SURFcElIdGNiaUFnSUNCd2NtOXdjeTVqYUdsc1pISmxiaUE5SUdOb2FXeGtjbVZ1TzF4dUlDQjlJR1ZzYzJVZ2FXWWdLR05vYVd4a2NtVnVUR1Z1WjNSb0lENGdNU2tnZTF4dUlDQWdJSFpoY2lCamFHbHNaRUZ5Y21GNUlEMGdRWEp5WVhrb1kyaHBiR1J5Wlc1TVpXNW5kR2dwTzF4dUlDQWdJR1p2Y2lBb2RtRnlJR2tnUFNBd095QnBJRHdnWTJocGJHUnlaVzVNWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyaHBiR1JCY25KaGVWdHBYU0E5SUdGeVozVnRaVzUwYzF0cElDc2dNbDA3WEc0Z0lDQWdmVnh1SUNBZ0lIQnliM0J6TG1Ob2FXeGtjbVZ1SUQwZ1kyaHBiR1JCY25KaGVUdGNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQnVaWGNnVW1WaFkzUkZiR1Z0Wlc1MEtGeHVJQ0FnSUdWc1pXMWxiblF1ZEhsd1pTeGNiaUFnSUNCclpYa3NYRzRnSUNBZ2NtVm1MRnh1SUNBZ0lHOTNibVZ5TEZ4dUlDQWdJR1ZzWlcxbGJuUXVYMk52Ym5SbGVIUXNYRzRnSUNBZ2NISnZjSE5jYmlBZ0tUdGNibjA3WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCdlltcGxZM1JjYmlBcUlFQnlaWFIxY200Z2UySnZiMnhsWVc1OUlGUnlkV1VnYVdZZ1lHOWlhbVZqZEdBZ2FYTWdZU0IyWVd4cFpDQmpiMjF3YjI1bGJuUXVYRzRnS2lCQVptbHVZV3hjYmlBcUwxeHVVbVZoWTNSRmJHVnRaVzUwTG1selZtRnNhV1JGYkdWdFpXNTBJRDBnWm5WdVkzUnBiMjRvYjJKcVpXTjBLU0I3WEc0Z0lDOHZJRkpsWVdOMFZHVnpkRlYwYVd4eklHbHpJRzltZEdWdUlIVnpaV1FnYjNWMGMybGtaU0J2WmlCaVpXWnZjbVZGWVdOb0lIZG9aWEpsSUdGeklGSmxZV04wSUdselhHNGdJQzh2SUhkcGRHaHBiaUJwZEM0Z1ZHaHBjeUJzWldGa2N5QjBieUIwZDI4Z1pHbG1abVZ5Wlc1MElHbHVjM1JoYm1ObGN5QnZaaUJTWldGamRDQnZiaUIwYUdVZ2MyRnRaVnh1SUNBdkx5QndZV2RsTGlCVWJ5QnBaR1Z1ZEdsbWVTQmhJR1ZzWlcxbGJuUWdabkp2YlNCaElHUnBabVpsY21WdWRDQlNaV0ZqZENCcGJuTjBZVzVqWlNCM1pTQjFjMlZjYmlBZ0x5OGdZU0JtYkdGbklHbHVjM1JsWVdRZ2IyWWdZVzRnYVc1emRHRnVZMlZ2WmlCamFHVmpheTVjYmlBZ2RtRnlJR2x6Uld4bGJXVnVkQ0E5SUNFaEtHOWlhbVZqZENBbUppQnZZbXBsWTNRdVgybHpVbVZoWTNSRmJHVnRaVzUwS1R0Y2JpQWdMeThnYVdZZ0tHbHpSV3hsYldWdWRDQW1KaUFoS0c5aWFtVmpkQ0JwYm5OMFlXNWpaVzltSUZKbFlXTjBSV3hsYldWdWRDa3BJSHRjYmlBZ0x5OGdWR2hwY3lCcGN5QmhiaUJwYm1ScFkyRjBiM0lnZEdoaGRDQjViM1VuY21VZ2RYTnBibWNnYlhWc2RHbHdiR1VnZG1WeWMybHZibk1nYjJZZ1VtVmhZM1FnWVhRZ2RHaGxYRzRnSUM4dklITmhiV1VnZEdsdFpTNGdWR2hwY3lCM2FXeHNJSE5qY21WM0lIZHBkR2dnYjNkdVpYSnphR2x3SUdGdVpDQnpkSFZtWmk0Z1JtbDRJR2wwTENCd2JHVmhjMlV1WEc0Z0lDOHZJRlJQUkU4NklGZGxJR052ZFd4a0lIQnZjM05wWW14NUlIZGhjbTRnYUdWeVpTNWNiaUFnTHk4Z2ZWeHVJQ0J5WlhSMWNtNGdhWE5GYkdWdFpXNTBPMXh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQlNaV0ZqZEVWc1pXMWxiblE3WEc0aVhYMD0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RWxlbWVudFZhbGlkYXRvclxuICovXG5cbi8qKlxuICogUmVhY3RFbGVtZW50VmFsaWRhdG9yIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgYSBlbGVtZW50IGZhY3RvcnlcbiAqIHdoaWNoIHZhbGlkYXRlcyB0aGUgcHJvcHMgcGFzc2VkIHRvIHRoZSBlbGVtZW50LiBUaGlzIGlzIGludGVuZGVkIHRvIGJlXG4gKiB1c2VkIG9ubHkgaW4gREVWIGFuZCBjb3VsZCBiZSByZXBsYWNlZCBieSBhIHN0YXRpYyB0eXBlIGNoZWNrZXIgZm9yIGxhbmd1YWdlc1xuICogdGhhdCBzdXBwb3J0IGl0LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEZyYWdtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RGcmFnbWVudFwiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25zID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uc1wiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzXCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3ROYXRpdmVDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdE5hdGl2ZUNvbXBvbmVudFwiKTtcblxudmFyIGdldEl0ZXJhdG9yRm4gPSByZXF1aXJlKFwiLi9nZXRJdGVyYXRvckZuXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5nZXROYW1lKCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuXG52YXIgTlVNRVJJQ19QUk9QRVJUWV9SRUdFWCA9IC9eXFxkKyQvO1xuXG4vKipcbiAqIEdldHMgdGhlIGluc3RhbmNlJ3MgbmFtZSBmb3IgdXNlIGluIHdhcm5pbmdzLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHJldHVybiB7P3N0cmluZ30gRGlzcGxheSBuYW1lIG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBnZXROYW1lKGluc3RhbmNlKSB7XG4gIHZhciBwdWJsaWNJbnN0YW5jZSA9IGluc3RhbmNlICYmIGluc3RhbmNlLmdldFB1YmxpY0luc3RhbmNlKCk7XG4gIGlmICghcHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHZhciBjb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICBpZiAoIWNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgY29uc3RydWN0b3IubmFtZSB8fCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudCBvd25lcidzIGRpc3BsYXlOYW1lIGZvciB1c2UgaW4gd2FybmluZ3MuXG4gKlxuICogQGludGVybmFsXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBEaXNwbGF5IG5hbWUgb3IgdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGdldEN1cnJlbnRPd25lckRpc3BsYXlOYW1lKCkge1xuICB2YXIgY3VycmVudCA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gIHJldHVybiAoXG4gICAgY3VycmVudCAmJiBnZXROYW1lKGN1cnJlbnQpIHx8IHVuZGVmaW5lZFxuICApO1xufVxuXG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmIChlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuXG4gIHdhcm5BbmRNb25pdG9yRm9yS2V5VXNlKFxuICAgICdFYWNoIGNoaWxkIGluIGFuIGFycmF5IG9yIGl0ZXJhdG9yIHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nLFxuICAgIGVsZW1lbnQsXG4gICAgcGFyZW50VHlwZVxuICApO1xufVxuXG4vKipcbiAqIFdhcm4gaWYgdGhlIGtleSBpcyBiZWluZyBkZWZpbmVkIGFzIGFuIG9iamVjdCBwcm9wZXJ0eSBidXQgaGFzIGFuIGluY29ycmVjdFxuICogdmFsdWUuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBQcm9wZXJ0eSBuYW1lIG9mIHRoZSBrZXkuXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBDb21wb25lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eUtleShuYW1lLCBlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmICghTlVNRVJJQ19QUk9QRVJUWV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdhcm5BbmRNb25pdG9yRm9yS2V5VXNlKFxuICAgICdDaGlsZCBvYmplY3RzIHNob3VsZCBoYXZlIG5vbi1udW1lcmljIGtleXMgc28gb3JkZXJpbmcgaXMgcHJlc2VydmVkLicsXG4gICAgZWxlbWVudCxcbiAgICBwYXJlbnRUeXBlXG4gICk7XG59XG5cbi8qKlxuICogU2hhcmVkIHdhcm5pbmcgYW5kIG1vbml0b3JpbmcgY29kZSBmb3IgdGhlIGtleSB3YXJuaW5ncy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBiYXNlIHdhcm5pbmcgdGhhdCBnZXRzIG91dHB1dC5cbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IENvbXBvbmVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5mdW5jdGlvbiB3YXJuQW5kTW9uaXRvckZvcktleVVzZShtZXNzYWdlLCBlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50T3duZXJEaXNwbGF5TmFtZSgpO1xuICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/XG4gICAgcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gIHZhciB1c2VOYW1lID0gb3duZXJOYW1lIHx8IHBhcmVudE5hbWU7XG4gIHZhciBtZW1vaXplciA9IG93bmVySGFzS2V5VXNlV2FybmluZ1ttZXNzYWdlXSB8fCAoXG4gICAgKG93bmVySGFzS2V5VXNlV2FybmluZ1ttZXNzYWdlXSA9IHt9KVxuICApO1xuICBpZiAobWVtb2l6ZXIuaGFzT3duUHJvcGVydHkodXNlTmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbWVtb2l6ZXJbdXNlTmFtZV0gPSB0cnVlO1xuXG4gIHZhciBwYXJlbnRPck93bmVyQWRkZW5kdW0gPVxuICAgIG93bmVyTmFtZSA/IChcIiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBcIiArIG93bmVyTmFtZSArIFwiLlwiKSA6XG4gICAgcGFyZW50TmFtZSA/IChcIiBDaGVjayB0aGUgUmVhY3QucmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIikgOlxuICAgICcnO1xuXG4gIC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuICB2YXIgY2hpbGRPd25lckFkZGVuZHVtID0gJyc7XG4gIGlmIChlbGVtZW50ICYmXG4gICAgICBlbGVtZW50Ll9vd25lciAmJlxuICAgICAgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAvLyBOYW1lIG9mIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICB2YXIgY2hpbGRPd25lck5hbWUgPSBnZXROYW1lKGVsZW1lbnQuX293bmVyKTtcblxuICAgIGNoaWxkT3duZXJBZGRlbmR1bSA9IChcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGNoaWxkT3duZXJOYW1lICsgXCIuXCIpO1xuICB9XG5cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgZmFsc2UsXG4gICAgbWVzc2FnZSArICclcyVzIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LXdhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLFxuICAgIHBhcmVudE9yT3duZXJBZGRlbmR1bSxcbiAgICBjaGlsZE93bmVyQWRkZW5kdW1cbiAgKSA6IG51bGwpO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcbiAgICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gIH0gZWxzZSBpZiAobm9kZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcbiAgICAvLyBFbnRyeSBpdGVyYXRvcnMgcHJvdmlkZSBpbXBsaWNpdCBrZXlzLlxuICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgZnJhZ21lbnQgPSBSZWFjdEZyYWdtZW50LmV4dHJhY3RJZkZyYWdtZW50KG5vZGUpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGZyYWdtZW50KSB7XG4gICAgICAgIGlmIChmcmFnbWVudC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eUtleShrZXksIGZyYWdtZW50W2tleV0sIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHByb3BzIGFyZSB2YWxpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcFR5cGVzIE1hcCBvZiBwcm9wIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKGNvbXBvbmVudE5hbWUsIHByb3BUeXBlcywgcHJvcHMsIGxvY2F0aW9uKSB7XG4gIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BUeXBlcykge1xuICAgIGlmIChwcm9wVHlwZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICB2YXIgZXJyb3I7XG4gICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICB0eXBlb2YgcHJvcFR5cGVzW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICtcbiAgICAgICAgICAnUmVhY3QuUHJvcFR5cGVzLicsXG4gICAgICAgICAgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLFxuICAgICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSxcbiAgICAgICAgICBwcm9wTmFtZVxuICAgICAgICApIDogaW52YXJpYW50KHR5cGVvZiBwcm9wVHlwZXNbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nKSk7XG4gICAgICAgIGVycm9yID0gcHJvcFR5cGVzW3Byb3BOYW1lXShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGVycm9yID0gZXg7XG4gICAgICB9XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICB2YXIgYWRkZW5kdW0gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0odGhpcyk7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkIHByb3BUeXBlOiAlcyVzJywgZXJyb3IubWVzc2FnZSwgYWRkZW5kdW0pIDogbnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB3YXJuZWRQcm9wc011dGF0aW9ucyA9IHt9O1xuXG4vKipcbiAqIFdhcm4gYWJvdXQgbXV0YXRpbmcgcHJvcHMgd2hlbiBzZXR0aW5nIGBwcm9wTmFtZWAgb24gYGVsZW1lbnRgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wTmFtZSBUaGUgc3RyaW5nIGtleSB3aXRoaW4gcHJvcHMgdGhhdCB3YXMgc2V0XG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiB3YXJuRm9yUHJvcHNNdXRhdGlvbihwcm9wTmFtZSwgZWxlbWVudCkge1xuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGVsZW1lbnROYW1lID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZSA6IHR5cGUuZGlzcGxheU5hbWU7XG4gIHZhciBvd25lck5hbWUgPSBlbGVtZW50Ll9vd25lciA/XG4gICAgZWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSA6IG51bGw7XG5cbiAgdmFyIHdhcm5pbmdLZXkgPSBwcm9wTmFtZSArICd8JyArIGVsZW1lbnROYW1lICsgJ3wnICsgb3duZXJOYW1lO1xuICBpZiAod2FybmVkUHJvcHNNdXRhdGlvbnMuaGFzT3duUHJvcGVydHkod2FybmluZ0tleSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd2FybmVkUHJvcHNNdXRhdGlvbnNbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gIHZhciBlbGVtZW50SW5mbyA9ICcnO1xuICBpZiAoZWxlbWVudE5hbWUpIHtcbiAgICBlbGVtZW50SW5mbyA9ICcgPCcgKyBlbGVtZW50TmFtZSArICcgLz4nO1xuICB9XG4gIHZhciBvd25lckluZm8gPSAnJztcbiAgaWYgKG93bmVyTmFtZSkge1xuICAgIG93bmVySW5mbyA9ICcgVGhlIGVsZW1lbnQgd2FzIGNyZWF0ZWQgYnkgJyArIG93bmVyTmFtZSArICcuJztcbiAgfVxuXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgIGZhbHNlLFxuICAgICdEb25cXCd0IHNldCAucHJvcHMuJXMgb2YgdGhlIFJlYWN0IGNvbXBvbmVudCVzLiBJbnN0ZWFkLCBzcGVjaWZ5IHRoZSAnICtcbiAgICAnY29ycmVjdCB2YWx1ZSB3aGVuIGluaXRpYWxseSBjcmVhdGluZyB0aGUgZWxlbWVudCBvciB1c2UgJyArXG4gICAgJ1JlYWN0LmNsb25lRWxlbWVudCB0byBtYWtlIGEgbmV3IGVsZW1lbnQgd2l0aCB1cGRhdGVkIHByb3BzLiVzJyxcbiAgICBwcm9wTmFtZSxcbiAgICBlbGVtZW50SW5mbyxcbiAgICBvd25lckluZm9cbiAgKSA6IG51bGwpO1xufVxuXG4vLyBJbmxpbmUgT2JqZWN0LmlzIHBvbHlmaWxsXG5mdW5jdGlvbiBpcyhhLCBiKSB7XG4gIGlmIChhICE9PSBhKSB7XG4gICAgLy8gTmFOXG4gICAgcmV0dXJuIGIgIT09IGI7XG4gIH1cbiAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgIC8vICstMFxuICAgIHJldHVybiAxIC8gYSA9PT0gMSAvIGI7XG4gIH1cbiAgcmV0dXJuIGEgPT09IGI7XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgY2hlY2sgaWYgaXRzIHByb3BzIGhhdmUgYmVlbiBtdXRhdGVkIHNpbmNlIGVsZW1lbnRcbiAqIGNyZWF0aW9uIChvciB0aGUgbGFzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24pLiBJbiBwYXJ0aWN1bGFyLCBjaGVjayBpZiBhbnlcbiAqIG5ldyBwcm9wcyBoYXZlIGJlZW4gYWRkZWQsIHdoaWNoIHdlIGNhbid0IGRpcmVjdGx5IGNhdGNoIGJ5IGRlZmluaW5nIHdhcm5pbmdcbiAqIHByb3BlcnRpZXMgb24gdGhlIHByb3BzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBjaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHMoZWxlbWVudCkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlKSB7XG4gICAgLy8gRWxlbWVudCB3YXMgY3JlYXRlZCB1c2luZyBgbmV3IFJlYWN0RWxlbWVudGAgZGlyZWN0bHkgb3Igd2l0aFxuICAgIC8vIGBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudGA7IHNraXAgbXV0YXRpb24gY2hlY2tpbmdcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgb3JpZ2luYWxQcm9wcyA9IGVsZW1lbnQuX3N0b3JlLm9yaWdpbmFsUHJvcHM7XG4gIHZhciBwcm9wcyA9IGVsZW1lbnQucHJvcHM7XG5cbiAgZm9yICh2YXIgcHJvcE5hbWUgaW4gcHJvcHMpIHtcbiAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICBpZiAoIW9yaWdpbmFsUHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpIHx8XG4gICAgICAgICAgIWlzKG9yaWdpbmFsUHJvcHNbcHJvcE5hbWVdLCBwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHdhcm5Gb3JQcm9wc011dGF0aW9uKHByb3BOYW1lLCBlbGVtZW50KTtcblxuICAgICAgICAvLyBDb3B5IG92ZXIgdGhlIG5ldyB2YWx1ZSBzbyB0aGF0IHRoZSB0d28gcHJvcHMgb2JqZWN0cyBtYXRjaCBhZ2FpblxuICAgICAgICBvcmlnaW5hbFByb3BzW3Byb3BOYW1lXSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09IG51bGwpIHtcbiAgICAvLyBUaGlzIGhhcyBhbHJlYWR5IHdhcm5lZC4gRG9uJ3QgdGhyb3cuXG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIEV4dHJhY3QgdGhlIGNvbXBvbmVudCBjbGFzcyBmcm9tIHRoZSBlbGVtZW50LiBDb252ZXJ0cyBzdHJpbmcgdHlwZXNcbiAgLy8gdG8gYSBjb21wb3NpdGUgY2xhc3Mgd2hpY2ggbWF5IGhhdmUgcHJvcFR5cGVzLlxuICAvLyBUT0RPOiBWYWxpZGF0aW5nIGEgc3RyaW5nJ3MgcHJvcFR5cGVzIGlzIG5vdCBkZWNvdXBsZWQgZnJvbSB0aGVcbiAgLy8gcmVuZGVyaW5nIHRhcmdldCB3aGljaCBpcyBwcm9ibGVtYXRpYy5cbiAgdmFyIGNvbXBvbmVudENsYXNzID0gUmVhY3ROYXRpdmVDb21wb25lbnQuZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KFxuICAgIGVsZW1lbnRcbiAgKTtcbiAgdmFyIG5hbWUgPSBjb21wb25lbnRDbGFzcy5kaXNwbGF5TmFtZSB8fCBjb21wb25lbnRDbGFzcy5uYW1lO1xuICBpZiAoY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzKSB7XG4gICAgY2hlY2tQcm9wVHlwZXMoXG4gICAgICBuYW1lLFxuICAgICAgY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzLFxuICAgICAgZWxlbWVudC5wcm9wcyxcbiAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMucHJvcFxuICAgICk7XG4gIH1cbiAgaWYgKHR5cGVvZiBjb21wb25lbnRDbGFzcy5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIGNvbXBvbmVudENsYXNzLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCxcbiAgICAgICdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArXG4gICAgICAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLidcbiAgICApIDogbnVsbCk7XG4gIH1cbn1cblxudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHtcblxuICBjaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHM6IGNoZWNrQW5kV2FybkZvck11dGF0ZWRQcm9wcyxcblxuICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbih0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICB0eXBlICE9IG51bGwsXG4gICAgICAnUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBzaG91bGQgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiBJdCBzaG91bGQgJyArXG4gICAgICAgICdiZSBhIHN0cmluZyAoZm9yIERPTSBlbGVtZW50cykgb3IgYSBSZWFjdENsYXNzIChmb3IgY29tcG9zaXRlICcgK1xuICAgICAgICAnY29tcG9uZW50cykuJ1xuICAgICkgOiBudWxsKTtcblxuICAgIHZhciBlbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gICAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0sXG5cbiAgY3JlYXRlRmFjdG9yeTogZnVuY3Rpb24odHlwZSkge1xuICAgIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUVsZW1lbnQuYmluZChcbiAgICAgIG51bGwsXG4gICAgICB0eXBlXG4gICAgKTtcbiAgICAvLyBMZWdhY3kgaG9vayBUT0RPOiBXYXJuIGlmIHRoaXMgaXMgYWNjZXNzZWRcbiAgICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgIHZhbGlkYXRlZEZhY3RvcnksXG4gICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgK1xuICAgICAgICAgICAgICAgICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LidcbiAgICAgICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgLy8gSUUgd2lsbCBmYWlsIG9uIGRlZmluZVByb3BlcnR5IChlczUtc2hpbS9zaGFtIHRvbylcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIHJldHVybiB2YWxpZGF0ZWRGYWN0b3J5O1xuICB9LFxuXG4gIGNsb25lRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTtcbiAgICB9XG4gICAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3I7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVFF0TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFVnNaVzFsYm5SV1lXeHBaR0YwYjNKY2JpQXFMMXh1WEc0dktpcGNiaUFxSUZKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNpQndjbTkyYVdSbGN5QmhJSGR5WVhCd1pYSWdZWEp2ZFc1a0lHRWdaV3hsYldWdWRDQm1ZV04wYjNKNVhHNGdLaUIzYUdsamFDQjJZV3hwWkdGMFpYTWdkR2hsSUhCeWIzQnpJSEJoYzNObFpDQjBieUIwYUdVZ1pXeGxiV1Z1ZEM0Z1ZHaHBjeUJwY3lCcGJuUmxibVJsWkNCMGJ5QmlaVnh1SUNvZ2RYTmxaQ0J2Ym14NUlHbHVJRVJGVmlCaGJtUWdZMjkxYkdRZ1ltVWdjbVZ3YkdGalpXUWdZbmtnWVNCemRHRjBhV01nZEhsd1pTQmphR1ZqYTJWeUlHWnZjaUJzWVc1bmRXRm5aWE5jYmlBcUlIUm9ZWFFnYzNWd2NHOXlkQ0JwZEM1Y2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkdjbUZuYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSbkpoWjIxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1Y3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Ym5OY0lpazdYRzUyWVhJZ1VtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVUbUZ0WlhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGQnliM0JVZVhCbFRHOWpZWFJwYjI1T1lXMWxjMXdpS1R0Y2JuWmhjaUJTWldGamRFTjFjbkpsYm5SUGQyNWxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUTNWeWNtVnVkRTkzYm1WeVhDSXBPMXh1ZG1GeUlGSmxZV04wVG1GMGFYWmxRMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JPWVhScGRtVkRiMjF3YjI1bGJuUmNJaWs3WEc1Y2JuWmhjaUJuWlhSSmRHVnlZWFJ2Y2tadUlEMGdjbVZ4ZFdseVpTaGNJaTR2WjJWMFNYUmxjbUYwYjNKR2Jsd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JtWjFibU4wYVc5dUlHZGxkRVJsWTJ4aGNtRjBhVzl1UlhKeWIzSkJaR1JsYm1SMWJTZ3BJSHRjYmlBZ2FXWWdLRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUXBJSHRjYmlBZ0lDQjJZWElnYm1GdFpTQTlJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUXVaMlYwVG1GdFpTZ3BPMXh1SUNBZ0lHbG1JQ2h1WVcxbEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z0p5QkRhR1ZqYXlCMGFHVWdjbVZ1WkdWeUlHMWxkR2h2WkNCdlppQmdKeUFySUc1aGJXVWdLeUFuWUM0bk8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnSnljN1hHNTlYRzVjYmk4cUtseHVJQ29nVjJGeWJpQnBaaUIwYUdWeVpTZHpJRzV2SUd0bGVTQmxlSEJzYVdOcGRHeDVJSE5sZENCdmJpQmtlVzVoYldsaklHRnljbUY1Y3lCdlppQmphR2xzWkhKbGJpQnZjbHh1SUNvZ2IySnFaV04wSUd0bGVYTWdZWEpsSUc1dmRDQjJZV3hwWkM0Z1ZHaHBjeUJoYkd4dmQzTWdkWE1nZEc4Z2EyVmxjQ0IwY21GamF5QnZaaUJqYUdsc1pISmxiaUJpWlhSM1pXVnVYRzRnS2lCMWNHUmhkR1Z6TGx4dUlDb3ZYRzUyWVhJZ2IzZHVaWEpJWVhOTFpYbFZjMlZYWVhKdWFXNW5JRDBnZTMwN1hHNWNiblpoY2lCc2IyZG5aV1JVZVhCbFJtRnBiSFZ5WlhNZ1BTQjdmVHRjYmx4dWRtRnlJRTVWVFVWU1NVTmZVRkpQVUVWU1ZGbGZVa1ZIUlZnZ1BTQXZYbHhjWkNza0x6dGNibHh1THlvcVhHNGdLaUJIWlhSeklIUm9aU0JwYm5OMFlXNWpaU2R6SUc1aGJXVWdabTl5SUhWelpTQnBiaUIzWVhKdWFXNW5jeTVjYmlBcVhHNGdLaUJBYVc1MFpYSnVZV3hjYmlBcUlFQnlaWFIxY200Z2V6OXpkSEpwYm1kOUlFUnBjM0JzWVhrZ2JtRnRaU0J2Y2lCMWJtUmxabWx1WldSY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWjJWMFRtRnRaU2hwYm5OMFlXNWpaU2tnZTF4dUlDQjJZWElnY0hWaWJHbGpTVzV6ZEdGdVkyVWdQU0JwYm5OMFlXNWpaU0FtSmlCcGJuTjBZVzVqWlM1blpYUlFkV0pzYVdOSmJuTjBZVzVqWlNncE8xeHVJQ0JwWmlBb0lYQjFZbXhwWTBsdWMzUmhibU5sS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjYmlBZ2ZWeHVJQ0IyWVhJZ1kyOXVjM1J5ZFdOMGIzSWdQU0J3ZFdKc2FXTkpibk4wWVc1alpTNWpiMjV6ZEhKMVkzUnZjanRjYmlBZ2FXWWdLQ0ZqYjI1emRISjFZM1J2Y2lrZ2UxeHVJQ0FnSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc0Z0lIMWNiaUFnY21WMGRYSnVJR052Ym5OMGNuVmpkRzl5TG1ScGMzQnNZWGxPWVcxbElIeDhJR052Ym5OMGNuVmpkRzl5TG01aGJXVWdmSHdnZFc1a1pXWnBibVZrTzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRsZEhNZ2RHaGxJR04xY25KbGJuUWdiM2R1WlhJbmN5QmthWE53YkdGNVRtRnRaU0JtYjNJZ2RYTmxJR2x1SUhkaGNtNXBibWR6TGx4dUlDcGNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb2dRSEpsZEhWeWJpQjdQM04wY21sdVozMGdSR2x6Y0d4aGVTQnVZVzFsSUc5eUlIVnVaR1ZtYVc1bFpGeHVJQ292WEc1bWRXNWpkR2x2YmlCblpYUkRkWEp5Wlc1MFQzZHVaWEpFYVhOd2JHRjVUbUZ0WlNncElIdGNiaUFnZG1GeUlHTjFjbkpsYm5RZ1BTQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpNWpkWEp5Wlc1ME8xeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lHTjFjbkpsYm5RZ0ppWWdaMlYwVG1GdFpTaGpkWEp5Wlc1MEtTQjhmQ0IxYm1SbFptbHVaV1JjYmlBZ0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCWFlYSnVJR2xtSUhSb1pTQmxiR1Z0Wlc1MElHUnZaWE51SjNRZ2FHRjJaU0JoYmlCbGVIQnNhV05wZENCclpYa2dZWE56YVdkdVpXUWdkRzhnYVhRdVhHNGdLaUJVYUdseklHVnNaVzFsYm5RZ2FYTWdhVzRnWVc0Z1lYSnlZWGt1SUZSb1pTQmhjbkpoZVNCamIzVnNaQ0JuY205M0lHRnVaQ0J6YUhKcGJtc2diM0lnWW1WY2JpQXFJSEpsYjNKa1pYSmxaQzRnUVd4c0lHTm9hV3hrY21WdUlIUm9ZWFFnYUdGMlpXNG5kQ0JoYkhKbFlXUjVJR0psWlc0Z2RtRnNhV1JoZEdWa0lHRnlaU0J5WlhGMWFYSmxaQ0IwYjF4dUlDb2dhR0YyWlNCaElGd2lhMlY1WENJZ2NISnZjR1Z5ZEhrZ1lYTnphV2R1WldRZ2RHOGdhWFF1WEc0Z0tseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnWld4bGJXVnVkQ0JGYkdWdFpXNTBJSFJvWVhRZ2NtVnhkV2x5WlhNZ1lTQnJaWGt1WEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJSEJoY21WdWRGUjVjR1VnWld4bGJXVnVkQ2R6SUhCaGNtVnVkQ2R6SUhSNWNHVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFJYaHdiR2xqYVhSTFpYa29aV3hsYldWdWRDd2djR0Z5Wlc1MFZIbHdaU2tnZTF4dUlDQnBaaUFvWld4bGJXVnVkQzVmYzNSdmNtVXVkbUZzYVdSaGRHVmtJSHg4SUdWc1pXMWxiblF1YTJWNUlDRTlJRzUxYkd3cElIdGNiaUFnSUNCeVpYUjFjbTQ3WEc0Z0lIMWNiaUFnWld4bGJXVnVkQzVmYzNSdmNtVXVkbUZzYVdSaGRHVmtJRDBnZEhKMVpUdGNibHh1SUNCM1lYSnVRVzVrVFc5dWFYUnZja1p2Y2t0bGVWVnpaU2hjYmlBZ0lDQW5SV0ZqYUNCamFHbHNaQ0JwYmlCaGJpQmhjbkpoZVNCdmNpQnBkR1Z5WVhSdmNpQnphRzkxYkdRZ2FHRjJaU0JoSUhWdWFYRjFaU0JjSW10bGVWd2lJSEJ5YjNBdUp5eGNiaUFnSUNCbGJHVnRaVzUwTEZ4dUlDQWdJSEJoY21WdWRGUjVjR1ZjYmlBZ0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCWFlYSnVJR2xtSUhSb1pTQnJaWGtnYVhNZ1ltVnBibWNnWkdWbWFXNWxaQ0JoY3lCaGJpQnZZbXBsWTNRZ2NISnZjR1Z5ZEhrZ1luVjBJR2hoY3lCaGJpQnBibU52Y25KbFkzUmNiaUFxSUhaaGJIVmxMbHh1SUNwY2JpQXFJRUJwYm5SbGNtNWhiRnh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUc1aGJXVWdVSEp2Y0dWeWRIa2dibUZ0WlNCdlppQjBhR1VnYTJWNUxseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHVnNaVzFsYm5RZ1EyOXRjRzl1Wlc1MElIUm9ZWFFnY21WeGRXbHlaWE1nWVNCclpYa3VYRzRnS2lCQWNHRnlZVzBnZXlwOUlIQmhjbVZ1ZEZSNWNHVWdaV3hsYldWdWRDZHpJSEJoY21WdWRDZHpJSFI1Y0dVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUhaaGJHbGtZWFJsVUhKdmNHVnlkSGxMWlhrb2JtRnRaU3dnWld4bGJXVnVkQ3dnY0dGeVpXNTBWSGx3WlNrZ2UxeHVJQ0JwWmlBb0lVNVZUVVZTU1VOZlVGSlBVRVZTVkZsZlVrVkhSVmd1ZEdWemRDaHVZVzFsS1NrZ2UxeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0IzWVhKdVFXNWtUVzl1YVhSdmNrWnZja3RsZVZWelpTaGNiaUFnSUNBblEyaHBiR1FnYjJKcVpXTjBjeUJ6YUc5MWJHUWdhR0YyWlNCdWIyNHRiblZ0WlhKcFl5QnJaWGx6SUhOdklHOXlaR1Z5YVc1bklHbHpJSEJ5WlhObGNuWmxaQzRuTEZ4dUlDQWdJR1ZzWlcxbGJuUXNYRzRnSUNBZ2NHRnlaVzUwVkhsd1pWeHVJQ0FwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRk5vWVhKbFpDQjNZWEp1YVc1bklHRnVaQ0J0YjI1cGRHOXlhVzVuSUdOdlpHVWdabTl5SUhSb1pTQnJaWGtnZDJGeWJtbHVaM011WEc0Z0tseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2JXVnpjMkZuWlNCVWFHVWdZbUZ6WlNCM1lYSnVhVzVuSUhSb1lYUWdaMlYwY3lCdmRYUndkWFF1WEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnWld4bGJXVnVkQ0JEYjIxd2IyNWxiblFnZEdoaGRDQnlaWEYxYVhKbGN5QmhJR3RsZVM1Y2JpQXFJRUJ3WVhKaGJTQjdLbjBnY0dGeVpXNTBWSGx3WlNCbGJHVnRaVzUwSjNNZ2NHRnlaVzUwSjNNZ2RIbHdaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdkMkZ5YmtGdVpFMXZibWwwYjNKR2IzSkxaWGxWYzJVb2JXVnpjMkZuWlN3Z1pXeGxiV1Z1ZEN3Z2NHRnlaVzUwVkhsd1pTa2dlMXh1SUNCMllYSWdiM2R1WlhKT1lXMWxJRDBnWjJWMFEzVnljbVZ1ZEU5M2JtVnlSR2x6Y0d4aGVVNWhiV1VvS1R0Y2JpQWdkbUZ5SUhCaGNtVnVkRTVoYldVZ1BTQjBlWEJsYjJZZ2NHRnlaVzUwVkhsd1pTQTlQVDBnSjNOMGNtbHVaeWNnUDF4dUlDQWdJSEJoY21WdWRGUjVjR1VnT2lCd1lYSmxiblJVZVhCbExtUnBjM0JzWVhsT1lXMWxJSHg4SUhCaGNtVnVkRlI1Y0dVdWJtRnRaVHRjYmx4dUlDQjJZWElnZFhObFRtRnRaU0E5SUc5M2JtVnlUbUZ0WlNCOGZDQndZWEpsYm5ST1lXMWxPMXh1SUNCMllYSWdiV1Z0YjJsNlpYSWdQU0J2ZDI1bGNraGhjMHRsZVZWelpWZGhjbTVwYm1kYmJXVnpjMkZuWlYwZ2ZId2dLRnh1SUNBZ0lDaHZkMjVsY2toaGMwdGxlVlZ6WlZkaGNtNXBibWRiYldWemMyRm5aVjBnUFNCN2ZTbGNiaUFnS1R0Y2JpQWdhV1lnS0cxbGJXOXBlbVZ5TG1oaGMwOTNibEJ5YjNCbGNuUjVLSFZ6WlU1aGJXVXBLU0I3WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc0Z0lHMWxiVzlwZW1WeVczVnpaVTVoYldWZElEMGdkSEoxWlR0Y2JseHVJQ0IyWVhJZ2NHRnlaVzUwVDNKUGQyNWxja0ZrWkdWdVpIVnRJRDFjYmlBZ0lDQnZkMjVsY2s1aGJXVWdQeUFvWENJZ1EyaGxZMnNnZEdobElISmxibVJsY2lCdFpYUm9iMlFnYjJZZ1hDSWdLeUJ2ZDI1bGNrNWhiV1VnS3lCY0lpNWNJaWtnT2x4dUlDQWdJSEJoY21WdWRFNWhiV1VnUHlBb1hDSWdRMmhsWTJzZ2RHaGxJRkpsWVdOMExuSmxibVJsY2lCallXeHNJSFZ6YVc1bklEeGNJaUFySUhCaGNtVnVkRTVoYldVZ0t5QmNJajR1WENJcElEcGNiaUFnSUNBbkp6dGNibHh1SUNBdkx5QlZjM1ZoYkd4NUlIUm9aU0JqZFhKeVpXNTBJRzkzYm1WeUlHbHpJSFJvWlNCdlptWmxibVJsY2l3Z1luVjBJR2xtSUdsMElHRmpZMlZ3ZEhNZ1kyaHBiR1J5Wlc0Z1lYTWdZVnh1SUNBdkx5QndjbTl3WlhKMGVTd2dhWFFnYldGNUlHSmxJSFJvWlNCamNtVmhkRzl5SUc5bUlIUm9aU0JqYUdsc1pDQjBhR0YwSjNNZ2NtVnpjRzl1YzJsaWJHVWdabTl5WEc0Z0lDOHZJR0Z6YzJsbmJtbHVaeUJwZENCaElHdGxlUzVjYmlBZ2RtRnlJR05vYVd4a1QzZHVaWEpCWkdSbGJtUjFiU0E5SUNjbk8xeHVJQ0JwWmlBb1pXeGxiV1Z1ZENBbUpseHVJQ0FnSUNBZ1pXeGxiV1Z1ZEM1ZmIzZHVaWElnSmlaY2JpQWdJQ0FnSUdWc1pXMWxiblF1WDI5M2JtVnlJQ0U5UFNCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2k1amRYSnlaVzUwS1NCN1hHNGdJQ0FnTHk4Z1RtRnRaU0J2WmlCMGFHVWdZMjl0Y0c5dVpXNTBJSFJvWVhRZ2IzSnBaMmx1WVd4c2VTQmpjbVZoZEdWa0lIUm9hWE1nWTJocGJHUXVYRzRnSUNBZ2RtRnlJR05vYVd4a1QzZHVaWEpPWVcxbElEMGdaMlYwVG1GdFpTaGxiR1Z0Wlc1MExsOXZkMjVsY2lrN1hHNWNiaUFnSUNCamFHbHNaRTkzYm1WeVFXUmtaVzVrZFcwZ1BTQW9YQ0lnU1hRZ2QyRnpJSEJoYzNObFpDQmhJR05vYVd4a0lHWnliMjBnWENJZ0t5QmphR2xzWkU5M2JtVnlUbUZ0WlNBcklGd2lMbHdpS1R0Y2JpQWdmVnh1WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJR1poYkhObExGeHVJQ0FnSUcxbGMzTmhaMlVnS3lBbkpYTWxjeUJUWldVZ2FIUjBjSE02THk5bVlpNXRaUzl5WldGamRDMTNZWEp1YVc1bkxXdGxlWE1nWm05eUlHMXZjbVVnYVc1bWIzSnRZWFJwYjI0dUp5eGNiaUFnSUNCd1lYSmxiblJQY2s5M2JtVnlRV1JrWlc1a2RXMHNYRzRnSUNBZ1kyaHBiR1JQZDI1bGNrRmtaR1Z1WkhWdFhHNGdJQ2tnT2lCdWRXeHNLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkZibk4xY21VZ2RHaGhkQ0JsZG1WeWVTQmxiR1Z0Wlc1MElHVnBkR2hsY2lCcGN5QndZWE56WldRZ2FXNGdZU0J6ZEdGMGFXTWdiRzlqWVhScGIyNHNJR2x1SUdGdVhHNGdLaUJoY25KaGVTQjNhWFJvSUdGdUlHVjRjR3hwWTJsMElHdGxlWE1nY0hKdmNHVnlkSGtnWkdWbWFXNWxaQ3dnYjNJZ2FXNGdZVzRnYjJKcVpXTjBJR3hwZEdWeVlXeGNiaUFxSUhkcGRHZ2dkbUZzYVdRZ2EyVjVJSEJ5YjNCbGNuUjVMbHh1SUNwY2JpQXFJRUJwYm5SbGNtNWhiRnh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRTV2WkdWOUlHNXZaR1VnVTNSaGRHbGpZV3hzZVNCd1lYTnpaV1FnWTJocGJHUWdiMllnWVc1NUlIUjVjR1V1WEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJSEJoY21WdWRGUjVjR1VnYm05a1pTZHpJSEJoY21WdWRDZHpJSFI1Y0dVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUhaaGJHbGtZWFJsUTJocGJHUkxaWGx6S0c1dlpHVXNJSEJoY21WdWRGUjVjR1VwSUh0Y2JpQWdhV1lnS0VGeWNtRjVMbWx6UVhKeVlYa29ibTlrWlNrcElIdGNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHNXZaR1V1YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lIWmhjaUJqYUdsc1pDQTlJRzV2WkdWYmFWMDdYRzRnSUNBZ0lDQnBaaUFvVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0dOb2FXeGtLU2tnZTF4dUlDQWdJQ0FnSUNCMllXeHBaR0YwWlVWNGNHeHBZMmwwUzJWNUtHTm9hV3hrTENCd1lYSmxiblJVZVhCbEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDBnWld4elpTQnBaaUFvVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0c1dlpHVXBLU0I3WEc0Z0lDQWdMeThnVkdocGN5QmxiR1Z0Wlc1MElIZGhjeUJ3WVhOelpXUWdhVzRnWVNCMllXeHBaQ0JzYjJOaGRHbHZiaTVjYmlBZ0lDQnViMlJsTGw5emRHOXlaUzUyWVd4cFpHRjBaV1FnUFNCMGNuVmxPMXh1SUNCOUlHVnNjMlVnYVdZZ0tHNXZaR1VwSUh0Y2JpQWdJQ0IyWVhJZ2FYUmxjbUYwYjNKR2JpQTlJR2RsZEVsMFpYSmhkRzl5Um00b2JtOWtaU2s3WEc0Z0lDQWdMeThnUlc1MGNua2dhWFJsY21GMGIzSnpJSEJ5YjNacFpHVWdhVzF3YkdsamFYUWdhMlY1Y3k1Y2JpQWdJQ0JwWmlBb2FYUmxjbUYwYjNKR2Jpa2dlMXh1SUNBZ0lDQWdhV1lnS0dsMFpYSmhkRzl5Um00Z0lUMDlJRzV2WkdVdVpXNTBjbWxsY3lrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnYVhSbGNtRjBiM0lnUFNCcGRHVnlZWFJ2Y2tadUxtTmhiR3dvYm05a1pTazdYRzRnSUNBZ0lDQWdJSFpoY2lCemRHVndPMXh1SUNBZ0lDQWdJQ0IzYUdsc1pTQW9JU2h6ZEdWd0lEMGdhWFJsY21GMGIzSXVibVY0ZENncEtTNWtiMjVsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0ZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENoemRHVndMblpoYkhWbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnNhV1JoZEdWRmVIQnNhV05wZEV0bGVTaHpkR1Z3TG5aaGJIVmxMQ0J3WVhKbGJuUlVlWEJsS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQnViMlJsSUQwOVBTQW5iMkpxWldOMEp5a2dlMXh1SUNBZ0lDQWdkbUZ5SUdaeVlXZHRaVzUwSUQwZ1VtVmhZM1JHY21GbmJXVnVkQzVsZUhSeVlXTjBTV1pHY21GbmJXVnVkQ2h1YjJSbEtUdGNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHdGxlU0JwYmlCbWNtRm5iV1Z1ZENrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWm5KaFoyMWxiblF1YUdGelQzZHVVSEp2Y0dWeWRIa29hMlY1S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFpoYkdsa1lYUmxVSEp2Y0dWeWRIbExaWGtvYTJWNUxDQm1jbUZuYldWdWRGdHJaWGxkTENCd1lYSmxiblJVZVhCbEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRUZ6YzJWeWRDQjBhR0YwSUhSb1pTQndjbTl3Y3lCaGNtVWdkbUZzYVdSY2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnWTI5dGNHOXVaVzUwVG1GdFpTQk9ZVzFsSUc5bUlIUm9aU0JqYjIxd2IyNWxiblFnWm05eUlHVnljbTl5SUcxbGMzTmhaMlZ6TGx4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlIQnliM0JVZVhCbGN5Qk5ZWEFnYjJZZ2NISnZjQ0J1WVcxbElIUnZJR0VnVW1WaFkzUlFjbTl3Vkhsd1pWeHVJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJ5YjNCelhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiRzlqWVhScGIyNGdaUzVuTGlCY0luQnliM0JjSWl3Z1hDSmpiMjUwWlhoMFhDSXNJRndpWTJocGJHUWdZMjl1ZEdWNGRGd2lYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJqYUdWamExQnliM0JVZVhCbGN5aGpiMjF3YjI1bGJuUk9ZVzFsTENCd2NtOXdWSGx3WlhNc0lIQnliM0J6TENCc2IyTmhkR2x2YmlrZ2UxeHVJQ0JtYjNJZ0tIWmhjaUJ3Y205d1RtRnRaU0JwYmlCd2NtOXdWSGx3WlhNcElIdGNiaUFnSUNCcFppQW9jSEp2Y0ZSNWNHVnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JPWVcxbEtTa2dlMXh1SUNBZ0lDQWdkbUZ5SUdWeWNtOXlPMXh1SUNBZ0lDQWdMeThnVUhKdmNDQjBlWEJsSUhaaGJHbGtZWFJwYjI0Z2JXRjVJSFJvY205M0xpQkpiaUJqWVhObElIUm9aWGtnWkc4c0lIZGxJR1J2YmlkMElIZGhiblFnZEc5Y2JpQWdJQ0FnSUM4dklHWmhhV3dnZEdobElISmxibVJsY2lCd2FHRnpaU0IzYUdWeVpTQnBkQ0JrYVdSdUozUWdabUZwYkNCaVpXWnZjbVV1SUZOdklIZGxJR3h2WnlCcGRDNWNiaUFnSUNBZ0lDOHZJRUZtZEdWeUlIUm9aWE5sSUdoaGRtVWdZbVZsYmlCamJHVmhibVZrSUhWd0xDQjNaU2RzYkNCc1pYUWdkR2hsYlNCMGFISnZkeTVjYmlBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDOHZJRlJvYVhNZ2FYTWdhVzUwWlc1MGFXOXVZV3hzZVNCaGJpQnBiblpoY21saGJuUWdkR2hoZENCblpYUnpJR05oZFdkb2RDNGdTWFFuY3lCMGFHVWdjMkZ0WlZ4dUlDQWdJQ0FnSUNBdkx5QmlaV2hoZG1sdmNpQmhjeUIzYVhSb2IzVjBJSFJvYVhNZ2MzUmhkR1Z0Wlc1MElHVjRZMlZ3ZENCM2FYUm9JR0VnWW1WMGRHVnlJRzFsYzNOaFoyVXVYRzRnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJQ0FnZEhsd1pXOW1JSEJ5YjNCVWVYQmxjMXR3Y205d1RtRnRaVjBnUFQwOUlDZG1kVzVqZEdsdmJpY3NYRzRnSUNBZ0lDQWdJQ0FnSnlWek9pQWxjeUIwZVhCbElHQWxjMkFnYVhNZ2FXNTJZV3hwWkRzZ2FYUWdiWFZ6ZENCaVpTQmhJR1oxYm1OMGFXOXVMQ0IxYzNWaGJHeDVJR1p5YjIwZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBMbEJ5YjNCVWVYQmxjeTRuTEZ4dUlDQWdJQ0FnSUNBZ0lHTnZiWEJ2Ym1WdWRFNWhiV1VnZkh3Z0oxSmxZV04wSUdOc1lYTnpKeXhjYmlBZ0lDQWdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF0c2IyTmhkR2x2Ymwwc1hHNGdJQ0FnSUNBZ0lDQWdjSEp2Y0U1aGJXVmNiaUFnSUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoMGVYQmxiMllnY0hKdmNGUjVjR1Z6VzNCeWIzQk9ZVzFsWFNBOVBUMGdKMloxYm1OMGFXOXVKeWtwTzF4dUlDQWdJQ0FnSUNCbGNuSnZjaUE5SUhCeWIzQlVlWEJsYzF0d2NtOXdUbUZ0WlYwb2NISnZjSE1zSUhCeWIzQk9ZVzFsTENCamIyMXdiMjVsYm5ST1lXMWxMQ0JzYjJOaGRHbHZiaWs3WEc0Z0lDQWdJQ0I5SUdOaGRHTm9JQ2hsZUNrZ2UxeHVJQ0FnSUNBZ0lDQmxjbkp2Y2lBOUlHVjRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0dWeWNtOXlJR2x1YzNSaGJtTmxiMllnUlhKeWIzSWdKaVlnSVNobGNuSnZjaTV0WlhOellXZGxJR2x1SUd4dloyZGxaRlI1Y0dWR1lXbHNkWEpsY3lrcElIdGNiaUFnSUNBZ0lDQWdMeThnVDI1c2VTQnRiMjVwZEc5eUlIUm9hWE1nWm1GcGJIVnlaU0J2Ym1ObElHSmxZMkYxYzJVZ2RHaGxjbVVnZEdWdVpITWdkRzhnWW1VZ1lTQnNiM1FnYjJZZ2RHaGxYRzRnSUNBZ0lDQWdJQzh2SUhOaGJXVWdaWEp5YjNJdVhHNGdJQ0FnSUNBZ0lHeHZaMmRsWkZSNWNHVkdZV2xzZFhKbGMxdGxjbkp2Y2k1dFpYTnpZV2RsWFNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUNBZ2RtRnlJR0ZrWkdWdVpIVnRJRDBnWjJWMFJHVmpiR0Z5WVhScGIyNUZjbkp2Y2tGa1pHVnVaSFZ0S0hSb2FYTXBPMXh1SUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aG1ZV3h6WlN3Z0owWmhhV3hsWkNCd2NtOXdWSGx3WlRvZ0pYTWxjeWNzSUdWeWNtOXlMbTFsYzNOaFoyVXNJR0ZrWkdWdVpIVnRLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dWZWeHVYRzUyWVhJZ2QyRnlibVZrVUhKdmNITk5kWFJoZEdsdmJuTWdQU0I3ZlR0Y2JseHVMeW9xWEc0Z0tpQlhZWEp1SUdGaWIzVjBJRzExZEdGMGFXNW5JSEJ5YjNCeklIZG9aVzRnYzJWMGRHbHVaeUJnY0hKdmNFNWhiV1ZnSUc5dUlHQmxiR1Z0Wlc1MFlDNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NISnZjRTVoYldVZ1ZHaGxJSE4wY21sdVp5QnJaWGtnZDJsMGFHbHVJSEJ5YjNCeklIUm9ZWFFnZDJGeklITmxkRnh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJR1ZzWlcxbGJuUmNiaUFxTDF4dVpuVnVZM1JwYjI0Z2QyRnlia1p2Y2xCeWIzQnpUWFYwWVhScGIyNG9jSEp2Y0U1aGJXVXNJR1ZzWlcxbGJuUXBJSHRjYmlBZ2RtRnlJSFI1Y0dVZ1BTQmxiR1Z0Wlc1MExuUjVjR1U3WEc0Z0lIWmhjaUJsYkdWdFpXNTBUbUZ0WlNBOUlIUjVjR1Z2WmlCMGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlBL0lIUjVjR1VnT2lCMGVYQmxMbVJwYzNCc1lYbE9ZVzFsTzF4dUlDQjJZWElnYjNkdVpYSk9ZVzFsSUQwZ1pXeGxiV1Z1ZEM1ZmIzZHVaWElnUDF4dUlDQWdJR1ZzWlcxbGJuUXVYMjkzYm1WeUxtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDa3VZMjl1YzNSeWRXTjBiM0l1WkdsemNHeGhlVTVoYldVZ09pQnVkV3hzTzF4dVhHNGdJSFpoY2lCM1lYSnVhVzVuUzJWNUlEMGdjSEp2Y0U1aGJXVWdLeUFuZkNjZ0t5QmxiR1Z0Wlc1MFRtRnRaU0FySUNkOEp5QXJJRzkzYm1WeVRtRnRaVHRjYmlBZ2FXWWdLSGRoY201bFpGQnliM0J6VFhWMFlYUnBiMjV6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSGRoY201cGJtZExaWGtwS1NCN1hHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNGdJSGRoY201bFpGQnliM0J6VFhWMFlYUnBiMjV6VzNkaGNtNXBibWRMWlhsZElEMGdkSEoxWlR0Y2JseHVJQ0IyWVhJZ1pXeGxiV1Z1ZEVsdVptOGdQU0FuSnp0Y2JpQWdhV1lnS0dWc1pXMWxiblJPWVcxbEtTQjdYRzRnSUNBZ1pXeGxiV1Z1ZEVsdVptOGdQU0FuSUR3bklDc2daV3hsYldWdWRFNWhiV1VnS3lBbklDOCtKenRjYmlBZ2ZWeHVJQ0IyWVhJZ2IzZHVaWEpKYm1adklEMGdKeWM3WEc0Z0lHbG1JQ2h2ZDI1bGNrNWhiV1VwSUh0Y2JpQWdJQ0J2ZDI1bGNrbHVabThnUFNBbklGUm9aU0JsYkdWdFpXNTBJSGRoY3lCamNtVmhkR1ZrSUdKNUlDY2dLeUJ2ZDI1bGNrNWhiV1VnS3lBbkxpYzdYRzRnSUgxY2JseHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNCbVlXeHpaU3hjYmlBZ0lDQW5SRzl1WEZ3bmRDQnpaWFFnTG5CeWIzQnpMaVZ6SUc5bUlIUm9aU0JTWldGamRDQmpiMjF3YjI1bGJuUWxjeTRnU1c1emRHVmhaQ3dnYzNCbFkybG1lU0IwYUdVZ0p5QXJYRzRnSUNBZ0oyTnZjbkpsWTNRZ2RtRnNkV1VnZDJobGJpQnBibWwwYVdGc2JIa2dZM0psWVhScGJtY2dkR2hsSUdWc1pXMWxiblFnYjNJZ2RYTmxJQ2NnSzF4dUlDQWdJQ2RTWldGamRDNWpiRzl1WlVWc1pXMWxiblFnZEc4Z2JXRnJaU0JoSUc1bGR5QmxiR1Z0Wlc1MElIZHBkR2dnZFhCa1lYUmxaQ0J3Y205d2N5NGxjeWNzWEc0Z0lDQWdjSEp2Y0U1aGJXVXNYRzRnSUNBZ1pXeGxiV1Z1ZEVsdVptOHNYRzRnSUNBZ2IzZHVaWEpKYm1adlhHNGdJQ2tnT2lCdWRXeHNLVHRjYm4xY2JseHVMeThnU1c1c2FXNWxJRTlpYW1WamRDNXBjeUJ3YjJ4NVptbHNiRnh1Wm5WdVkzUnBiMjRnYVhNb1lTd2dZaWtnZTF4dUlDQnBaaUFvWVNBaFBUMGdZU2tnZTF4dUlDQWdJQzh2SUU1aFRseHVJQ0FnSUhKbGRIVnliaUJpSUNFOVBTQmlPMXh1SUNCOVhHNGdJR2xtSUNoaElEMDlQU0F3SUNZbUlHSWdQVDA5SURBcElIdGNiaUFnSUNBdkx5QXJMVEJjYmlBZ0lDQnlaWFIxY200Z01TQXZJR0VnUFQwOUlERWdMeUJpTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJoSUQwOVBTQmlPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZHBkbVZ1SUdGdUlHVnNaVzFsYm5Rc0lHTm9aV05ySUdsbUlHbDBjeUJ3Y205d2N5Qm9ZWFpsSUdKbFpXNGdiWFYwWVhSbFpDQnphVzVqWlNCbGJHVnRaVzUwWEc0Z0tpQmpjbVZoZEdsdmJpQW9iM0lnZEdobElHeGhjM1FnWTJGc2JDQjBieUIwYUdseklHWjFibU4wYVc5dUtTNGdTVzRnY0dGeWRHbGpkV3hoY2l3Z1kyaGxZMnNnYVdZZ1lXNTVYRzRnS2lCdVpYY2djSEp2Y0hNZ2FHRjJaU0JpWldWdUlHRmtaR1ZrTENCM2FHbGphQ0IzWlNCallXNG5kQ0JrYVhKbFkzUnNlU0JqWVhSamFDQmllU0JrWldacGJtbHVaeUIzWVhKdWFXNW5YRzRnS2lCd2NtOXdaWEowYVdWeklHOXVJSFJvWlNCd2NtOXdjeUJ2WW1wbFkzUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUdWc1pXMWxiblJjYmlBcUwxeHVablZ1WTNScGIyNGdZMmhsWTJ0QmJtUlhZWEp1Um05eVRYVjBZWFJsWkZCeWIzQnpLR1ZzWlcxbGJuUXBJSHRjYmlBZ2FXWWdLQ0ZsYkdWdFpXNTBMbDl6ZEc5eVpTa2dlMXh1SUNBZ0lDOHZJRVZzWlcxbGJuUWdkMkZ6SUdOeVpXRjBaV1FnZFhOcGJtY2dZRzVsZHlCU1pXRmpkRVZzWlcxbGJuUmdJR1JwY21WamRHeDVJRzl5SUhkcGRHaGNiaUFnSUNBdkx5QmdVbVZoWTNSRmJHVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUmdPeUJ6YTJsd0lHMTFkR0YwYVc5dUlHTm9aV05yYVc1blhHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNWNiaUFnZG1GeUlHOXlhV2RwYm1Gc1VISnZjSE1nUFNCbGJHVnRaVzUwTGw5emRHOXlaUzV2Y21sbmFXNWhiRkJ5YjNCek8xeHVJQ0IyWVhJZ2NISnZjSE1nUFNCbGJHVnRaVzUwTG5CeWIzQnpPMXh1WEc0Z0lHWnZjaUFvZG1GeUlIQnliM0JPWVcxbElHbHVJSEJ5YjNCektTQjdYRzRnSUNBZ2FXWWdLSEJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQk9ZVzFsS1NrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0Z2Y21sbmFXNWhiRkJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQk9ZVzFsS1NCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0ZwY3lodmNtbG5hVzVoYkZCeWIzQnpXM0J5YjNCT1lXMWxYU3dnY0hKdmNITmJjSEp2Y0U1aGJXVmRLU2tnZTF4dUlDQWdJQ0FnSUNCM1lYSnVSbTl5VUhKdmNITk5kWFJoZEdsdmJpaHdjbTl3VG1GdFpTd2daV3hsYldWdWRDazdYRzVjYmlBZ0lDQWdJQ0FnTHk4Z1EyOXdlU0J2ZG1WeUlIUm9aU0J1WlhjZ2RtRnNkV1VnYzI4Z2RHaGhkQ0IwYUdVZ2RIZHZJSEJ5YjNCeklHOWlhbVZqZEhNZ2JXRjBZMmdnWVdkaGFXNWNiaUFnSUNBZ0lDQWdiM0pwWjJsdVlXeFFjbTl3YzF0d2NtOXdUbUZ0WlYwZ1BTQndjbTl3YzF0d2NtOXdUbUZ0WlYwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1IybDJaVzRnWVc0Z1pXeGxiV1Z1ZEN3Z2RtRnNhV1JoZEdVZ2RHaGhkQ0JwZEhNZ2NISnZjSE1nWm05c2JHOTNJSFJvWlNCd2NtOXdWSGx3WlhNZ1pHVm1hVzVwZEdsdmJpeGNiaUFxSUhCeWIzWnBaR1ZrSUdKNUlIUm9aU0IwZVhCbExseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1VtVmhZM1JGYkdWdFpXNTBmU0JsYkdWdFpXNTBYRzRnS2k5Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFVISnZjRlI1Y0dWektHVnNaVzFsYm5RcElIdGNiaUFnYVdZZ0tHVnNaVzFsYm5RdWRIbHdaU0E5UFNCdWRXeHNLU0I3WEc0Z0lDQWdMeThnVkdocGN5Qm9ZWE1nWVd4eVpXRmtlU0IzWVhKdVpXUXVJRVJ2YmlkMElIUm9jbTkzTGx4dUlDQWdJSEpsZEhWeWJqdGNiaUFnZlZ4dUlDQXZMeUJGZUhSeVlXTjBJSFJvWlNCamIyMXdiMjVsYm5RZ1kyeGhjM01nWm5KdmJTQjBhR1VnWld4bGJXVnVkQzRnUTI5dWRtVnlkSE1nYzNSeWFXNW5JSFI1Y0dWelhHNGdJQzh2SUhSdklHRWdZMjl0Y0c5emFYUmxJR05zWVhOeklIZG9hV05vSUcxaGVTQm9ZWFpsSUhCeWIzQlVlWEJsY3k1Y2JpQWdMeThnVkU5RVR6b2dWbUZzYVdSaGRHbHVaeUJoSUhOMGNtbHVaeWR6SUhCeWIzQlVlWEJsY3lCcGN5QnViM1FnWkdWamIzVndiR1ZrSUdaeWIyMGdkR2hsWEc0Z0lDOHZJSEpsYm1SbGNtbHVaeUIwWVhKblpYUWdkMmhwWTJnZ2FYTWdjSEp2WW14bGJXRjBhV011WEc0Z0lIWmhjaUJqYjIxd2IyNWxiblJEYkdGemN5QTlJRkpsWVdOMFRtRjBhWFpsUTI5dGNHOXVaVzUwTG1kbGRFTnZiWEJ2Ym1WdWRFTnNZWE56Um05eVJXeGxiV1Z1ZENoY2JpQWdJQ0JsYkdWdFpXNTBYRzRnSUNrN1hHNGdJSFpoY2lCdVlXMWxJRDBnWTI5dGNHOXVaVzUwUTJ4aGMzTXVaR2x6Y0d4aGVVNWhiV1VnZkh3Z1kyOXRjRzl1Wlc1MFEyeGhjM011Ym1GdFpUdGNiaUFnYVdZZ0tHTnZiWEJ2Ym1WdWRFTnNZWE56TG5CeWIzQlVlWEJsY3lrZ2UxeHVJQ0FnSUdOb1pXTnJVSEp2Y0ZSNWNHVnpLRnh1SUNBZ0lDQWdibUZ0WlN4Y2JpQWdJQ0FnSUdOdmJYQnZibVZ1ZEVOc1lYTnpMbkJ5YjNCVWVYQmxjeXhjYmlBZ0lDQWdJR1ZzWlcxbGJuUXVjSEp2Y0hNc1hHNGdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNXpMbkJ5YjNCY2JpQWdJQ0FwTzF4dUlDQjlYRzRnSUdsbUlDaDBlWEJsYjJZZ1kyOXRjRzl1Wlc1MFEyeGhjM011WjJWMFJHVm1ZWFZzZEZCeWIzQnpJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0JqYjIxd2IyNWxiblJEYkdGemN5NW5aWFJFWldaaGRXeDBVSEp2Y0hNdWFYTlNaV0ZqZEVOc1lYTnpRWEJ3Y205MlpXUXNYRzRnSUNBZ0lDQW5aMlYwUkdWbVlYVnNkRkJ5YjNCeklHbHpJRzl1YkhrZ2RYTmxaQ0J2YmlCamJHRnpjMmxqSUZKbFlXTjBMbU55WldGMFpVTnNZWE56SUNjZ0sxeHVJQ0FnSUNBZ0oyUmxabWx1YVhScGIyNXpMaUJWYzJVZ1lTQnpkR0YwYVdNZ2NISnZjR1Z5ZEhrZ2JtRnRaV1FnWUdSbFptRjFiSFJRY205d2MyQWdhVzV6ZEdWaFpDNG5YRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0I5WEc1OVhHNWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUldZV3hwWkdGMGIzSWdQU0I3WEc1Y2JpQWdZMmhsWTJ0QmJtUlhZWEp1Um05eVRYVjBZWFJsWkZCeWIzQnpPaUJqYUdWamEwRnVaRmRoY201R2IzSk5kWFJoZEdWa1VISnZjSE1zWEc1Y2JpQWdZM0psWVhSbFJXeGxiV1Z1ZERvZ1puVnVZM1JwYjI0b2RIbHdaU3dnY0hKdmNITXNJR05vYVd4a2NtVnVLU0I3WEc0Z0lDQWdMeThnVjJVZ2QyRnliaUJwYmlCMGFHbHpJR05oYzJVZ1luVjBJR1J2YmlkMElIUm9jbTkzTGlCWFpTQmxlSEJsWTNRZ2RHaGxJR1ZzWlcxbGJuUWdZM0psWVhScGIyNGdkRzljYmlBZ0lDQXZMeUJ6ZFdOalpXVmtJR0Z1WkNCMGFHVnlaU0IzYVd4c0lHeHBhMlZzZVNCaVpTQmxjbkp2Y25NZ2FXNGdjbVZ1WkdWeUxseHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdkSGx3WlNBaFBTQnVkV3hzTEZ4dUlDQWdJQ0FnSjFKbFlXTjBMbU55WldGMFpVVnNaVzFsYm5RNklIUjVjR1VnYzJodmRXeGtJRzV2ZENCaVpTQnVkV3hzSUc5eUlIVnVaR1ZtYVc1bFpDNGdTWFFnYzJodmRXeGtJQ2NnSzF4dUlDQWdJQ0FnSUNBblltVWdZU0J6ZEhKcGJtY2dLR1p2Y2lCRVQwMGdaV3hsYldWdWRITXBJRzl5SUdFZ1VtVmhZM1JEYkdGemN5QW9abTl5SUdOdmJYQnZjMmwwWlNBbklDdGNiaUFnSUNBZ0lDQWdKMk52YlhCdmJtVnVkSE1wTGlkY2JpQWdJQ0FwSURvZ2JuVnNiQ2s3WEc1Y2JpQWdJQ0IyWVhJZ1pXeGxiV1Z1ZENBOUlGSmxZV04wUld4bGJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1MExtRndjR3g1S0hSb2FYTXNJR0Z5WjNWdFpXNTBjeWs3WEc1Y2JpQWdJQ0F2THlCVWFHVWdjbVZ6ZFd4MElHTmhiaUJpWlNCdWRXeHNhWE5vSUdsbUlHRWdiVzlqYXlCdmNpQmhJR04xYzNSdmJTQm1kVzVqZEdsdmJpQnBjeUIxYzJWa0xseHVJQ0FnSUM4dklGUlBSRTg2SUVSeWIzQWdkR2hwY3lCM2FHVnVJSFJvWlhObElHRnlaU0J1YnlCc2IyNW5aWElnWVd4c2IzZGxaQ0JoY3lCMGFHVWdkSGx3WlNCaGNtZDFiV1Z1ZEM1Y2JpQWdJQ0JwWmlBb1pXeGxiV1Z1ZENBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWld4bGJXVnVkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTWpzZ2FTQThJR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2RtRnNhV1JoZEdWRGFHbHNaRXRsZVhNb1lYSm5kVzFsYm5SelcybGRMQ0IwZVhCbEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMllXeHBaR0YwWlZCeWIzQlVlWEJsY3lobGJHVnRaVzUwS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJsYkdWdFpXNTBPMXh1SUNCOUxGeHVYRzRnSUdOeVpXRjBaVVpoWTNSdmNuazZJR1oxYm1OMGFXOXVLSFI1Y0dVcElIdGNiaUFnSUNCMllYSWdkbUZzYVdSaGRHVmtSbUZqZEc5eWVTQTlJRkpsWVdOMFJXeGxiV1Z1ZEZaaGJHbGtZWFJ2Y2k1amNtVmhkR1ZGYkdWdFpXNTBMbUpwYm1Rb1hHNGdJQ0FnSUNCdWRXeHNMRnh1SUNBZ0lDQWdkSGx3WlZ4dUlDQWdJQ2s3WEc0Z0lDQWdMeThnVEdWbllXTjVJR2h2YjJzZ1ZFOUVUem9nVjJGeWJpQnBaaUIwYUdseklHbHpJR0ZqWTJWemMyVmtYRzRnSUNBZ2RtRnNhV1JoZEdWa1JtRmpkRzl5ZVM1MGVYQmxJRDBnZEhsd1pUdGNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaGNiaUFnSUNBZ0lDQWdJQ0IyWVd4cFpHRjBaV1JHWVdOMGIzSjVMRnh1SUNBZ0lDQWdJQ0FnSUNkMGVYQmxKeXhjYmlBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHZGxkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1poYkhObExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDZEdZV04wYjNKNUxuUjVjR1VnYVhNZ1pHVndjbVZqWVhSbFpDNGdRV05qWlhOeklIUm9aU0JqYkdGemN5QmthWEpsWTNSc2VTQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FuWW1WbWIzSmxJSEJoYzNOcGJtY2dhWFFnZEc4Z1kzSmxZWFJsUm1GamRHOXllUzRuWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hSb2FYTXNJQ2QwZVhCbEp5d2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbE9pQjBlWEJsWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSGx3WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlJR05oZEdOb0lDaDRLU0I3WEc0Z0lDQWdJQ0FnSUM4dklFbEZJSGRwYkd3Z1ptRnBiQ0J2YmlCa1pXWnBibVZRY205d1pYSjBlU0FvWlhNMUxYTm9hVzB2YzJoaGJTQjBiMjhwWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkbUZzYVdSaGRHVmtSbUZqZEc5eWVUdGNiaUFnZlN4Y2JseHVJQ0JqYkc5dVpVVnNaVzFsYm5RNklHWjFibU4wYVc5dUtHVnNaVzFsYm5Rc0lIQnliM0J6TENCamFHbHNaSEpsYmlrZ2UxeHVJQ0FnSUhaaGNpQnVaWGRGYkdWdFpXNTBJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnNiMjVsUld4bGJXVnVkQzVoY0hCc2VTaDBhR2x6TENCaGNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXlPeUJwSUR3Z1lYSm5kVzFsYm5SekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0IyWVd4cFpHRjBaVU5vYVd4a1MyVjVjeWhoY21kMWJXVnVkSE5iYVYwc0lHNWxkMFZzWlcxbGJuUXVkSGx3WlNrN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoYkdsa1lYUmxVSEp2Y0ZSNWNHVnpLRzVsZDBWc1pXMWxiblFwTzF4dUlDQWdJSEpsZEhWeWJpQnVaWGRGYkdWdFpXNTBPMXh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFbXB0eUNvbXBvbmVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZU1hcFwiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxudmFyIGNvbXBvbmVudDtcbi8vIFRoaXMgcmVnaXN0cnkga2VlcHMgdHJhY2sgb2YgdGhlIFJlYWN0IElEcyBvZiB0aGUgY29tcG9uZW50cyB0aGF0IHJlbmRlcmVkIHRvXG4vLyBgbnVsbGAgKGluIHJlYWxpdHkgYSBwbGFjZWhvbGRlciBzdWNoIGFzIGBub3NjcmlwdGApXG52YXIgbnVsbENvbXBvbmVudElEc1JlZ2lzdHJ5ID0ge307XG5cbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50SW5qZWN0aW9uID0ge1xuICBpbmplY3RFbXB0eUNvbXBvbmVudDogZnVuY3Rpb24oZW1wdHlDb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeShlbXB0eUNvbXBvbmVudCk7XG4gIH1cbn07XG5cbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50VHlwZSA9IGZ1bmN0aW9uKCkge307XG5SZWFjdEVtcHR5Q29tcG9uZW50VHlwZS5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIHJ1biB0aGVzZSBtZXRob2RzIGluIHRoZSBjb3JyZWN0IG9yZGVyLCB3ZSBzaG91bGRuJ3RcbiAgLy8gbmVlZCB0aGlzIGNoZWNrLiBXZSdyZSBnb2luZyB0byBhc3N1bWUgaWYgd2UncmUgaGVyZSBpdCBtZWFucyB3ZSByYW5cbiAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgYWxyZWFkeSBzbyB0aGVyZSBpcyBubyBpbnRlcm5hbCBpbnN0YW5jZSAoaXQgZ2V0c1xuICAvLyByZW1vdmVkIGFzIHBhcnQgb2YgdGhlIHVubW91bnRpbmcgcHJvY2VzcykuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuICByZWdpc3Rlck51bGxDb21wb25lbnRJRChpbnRlcm5hbEluc3RhbmNlLl9yb290Tm9kZUlEKTtcbn07XG5SZWFjdEVtcHR5Q29tcG9uZW50VHlwZS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldCh0aGlzKTtcbiAgLy8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNoZWNrLiBTZWUgVE9ETyBpbiBjb21wb25lbnREaWRNb3VudC5cbiAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRlcmVnaXN0ZXJOdWxsQ29tcG9uZW50SUQoaW50ZXJuYWxJbnN0YW5jZS5fcm9vdE5vZGVJRCk7XG59O1xuUmVhY3RFbXB0eUNvbXBvbmVudFR5cGUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGNvbXBvbmVudCxcbiAgICAnVHJ5aW5nIHRvIHJldHVybiBudWxsIGZyb20gYSByZW5kZXIsIGJ1dCBubyBudWxsIHBsYWNlaG9sZGVyIGNvbXBvbmVudCAnICtcbiAgICAnd2FzIGluamVjdGVkLidcbiAgKSA6IGludmFyaWFudChjb21wb25lbnQpKTtcbiAgcmV0dXJuIGNvbXBvbmVudCgpO1xufTtcblxudmFyIGVtcHR5RWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50KFJlYWN0RW1wdHlDb21wb25lbnRUeXBlKTtcblxuLyoqXG4gKiBNYXJrIHRoZSBjb21wb25lbnQgYXMgaGF2aW5nIHJlbmRlcmVkIHRvIG51bGwuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQ29tcG9uZW50J3MgYF9yb290Tm9kZUlEYC5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJOdWxsQ29tcG9uZW50SUQoaWQpIHtcbiAgbnVsbENvbXBvbmVudElEc1JlZ2lzdHJ5W2lkXSA9IHRydWU7XG59XG5cbi8qKlxuICogVW5tYXJrIHRoZSBjb21wb25lbnQgYXMgaGF2aW5nIHJlbmRlcmVkIHRvIG51bGw6IGl0IHJlbmRlcnMgdG8gc29tZXRoaW5nIG5vdy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBDb21wb25lbnQncyBgX3Jvb3ROb2RlSURgLlxuICovXG5mdW5jdGlvbiBkZXJlZ2lzdGVyTnVsbENvbXBvbmVudElEKGlkKSB7XG4gIGRlbGV0ZSBudWxsQ29tcG9uZW50SURzUmVnaXN0cnlbaWRdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBDb21wb25lbnQncyBgX3Jvb3ROb2RlSURgLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIHJlbmRlcmVkIHRvIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGlzTnVsbENvbXBvbmVudElEKGlkKSB7XG4gIHJldHVybiAhIW51bGxDb21wb25lbnRJRHNSZWdpc3RyeVtpZF07XG59XG5cbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0ge1xuICBlbXB0eUVsZW1lbnQ6IGVtcHR5RWxlbWVudCxcbiAgaW5qZWN0aW9uOiBSZWFjdEVtcHR5Q29tcG9uZW50SW5qZWN0aW9uLFxuICBpc051bGxDb21wb25lbnRJRDogaXNOdWxsQ29tcG9uZW50SURcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFbXB0eUNvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JGYlhCMGVVTnZiWEJ2Ym1WdWRDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhOQzB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblJjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBTVzV6ZEdGdVkyVk5ZWEJjSWlrN1hHNWNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiblpoY2lCamIyMXdiMjVsYm5RN1hHNHZMeUJVYUdseklISmxaMmx6ZEhKNUlHdGxaWEJ6SUhSeVlXTnJJRzltSUhSb1pTQlNaV0ZqZENCSlJITWdiMllnZEdobElHTnZiWEJ2Ym1WdWRITWdkR2hoZENCeVpXNWtaWEpsWkNCMGIxeHVMeThnWUc1MWJHeGdJQ2hwYmlCeVpXRnNhWFI1SUdFZ2NHeGhZMlZvYjJ4a1pYSWdjM1ZqYUNCaGN5QmdibTl6WTNKcGNIUmdLVnh1ZG1GeUlHNTFiR3hEYjIxd2IyNWxiblJKUkhOU1pXZHBjM1J5ZVNBOUlIdDlPMXh1WEc1MllYSWdVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRWx1YW1WamRHbHZiaUE5SUh0Y2JpQWdhVzVxWldOMFJXMXdkSGxEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0dWdGNIUjVRMjl0Y0c5dVpXNTBLU0I3WEc0Z0lDQWdZMjl0Y0c5dVpXNTBJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVaaFkzUnZjbmtvWlcxd2RIbERiMjF3YjI1bGJuUXBPMXh1SUNCOVhHNTlPMXh1WEc1MllYSWdVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRlI1Y0dVZ1BTQm1kVzVqZEdsdmJpZ3BJSHQ5TzF4dVVtVmhZM1JGYlhCMGVVTnZiWEJ2Ym1WdWRGUjVjR1V1Y0hKdmRHOTBlWEJsTG1OdmJYQnZibVZ1ZEVScFpFMXZkVzUwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNW5aWFFvZEdocGN5azdYRzRnSUM4dklGUlBSRTg2SUUxaGEyVWdjM1Z5WlNCM1pTQnlkVzRnZEdobGMyVWdiV1YwYUc5a2N5QnBiaUIwYUdVZ1kyOXljbVZqZENCdmNtUmxjaXdnZDJVZ2MyaHZkV3hrYmlkMFhHNGdJQzh2SUc1bFpXUWdkR2hwY3lCamFHVmpheTRnVjJVbmNtVWdaMjlwYm1jZ2RHOGdZWE56ZFcxbElHbG1JSGRsSjNKbElHaGxjbVVnYVhRZ2JXVmhibk1nZDJVZ2NtRnVYRzRnSUM4dklHTnZiWEJ2Ym1WdWRGZHBiR3hWYm0xdmRXNTBJR0ZzY21WaFpIa2djMjhnZEdobGNtVWdhWE1nYm04Z2FXNTBaWEp1WVd3Z2FXNXpkR0Z1WTJVZ0tHbDBJR2RsZEhOY2JpQWdMeThnY21WdGIzWmxaQ0JoY3lCd1lYSjBJRzltSUhSb1pTQjFibTF2ZFc1MGFXNW5JSEJ5YjJObGMzTXBMbHh1SUNCcFppQW9JV2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnlaWFIxY200N1hHNGdJSDFjYmlBZ2NtVm5hWE4wWlhKT2RXeHNRMjl0Y0c5dVpXNTBTVVFvYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY205dmRFNXZaR1ZKUkNrN1hHNTlPMXh1VW1WaFkzUkZiWEIwZVVOdmJYQnZibVZ1ZEZSNWNHVXVjSEp2ZEc5MGVYQmxMbU52YlhCdmJtVnVkRmRwYkd4VmJtMXZkVzUwSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNW5aWFFvZEdocGN5azdYRzRnSUM4dklGUlBSRTg2SUVkbGRDQnlhV1FnYjJZZ2RHaHBjeUJqYUdWamF5NGdVMlZsSUZSUFJFOGdhVzRnWTI5dGNHOXVaVzUwUkdsa1RXOTFiblF1WEc0Z0lHbG1JQ2doYVc1MFpYSnVZV3hKYm5OMFlXNWpaU2tnZTF4dUlDQWdJSEpsZEhWeWJqdGNiaUFnZlZ4dUlDQmtaWEpsWjJsemRHVnlUblZzYkVOdmJYQnZibVZ1ZEVsRUtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgzSnZiM1JPYjJSbFNVUXBPMXh1ZlR0Y2JsSmxZV04wUlcxd2RIbERiMjF3YjI1bGJuUlVlWEJsTG5CeWIzUnZkSGx3WlM1eVpXNWtaWElnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQmpiMjF3YjI1bGJuUXNYRzRnSUNBZ0oxUnllV2x1WnlCMGJ5QnlaWFIxY200Z2JuVnNiQ0JtY205dElHRWdjbVZ1WkdWeUxDQmlkWFFnYm04Z2JuVnNiQ0J3YkdGalpXaHZiR1JsY2lCamIyMXdiMjVsYm5RZ0p5QXJYRzRnSUNBZ0ozZGhjeUJwYm1wbFkzUmxaQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvWTI5dGNHOXVaVzUwS1NrN1hHNGdJSEpsZEhWeWJpQmpiMjF3YjI1bGJuUW9LVHRjYm4wN1hHNWNiblpoY2lCbGJYQjBlVVZzWlcxbGJuUWdQU0JTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2hTWldGamRFVnRjSFI1UTI5dGNHOXVaVzUwVkhsd1pTazdYRzVjYmk4cUtseHVJQ29nVFdGeWF5QjBhR1VnWTI5dGNHOXVaVzUwSUdGeklHaGhkbWx1WnlCeVpXNWtaWEpsWkNCMGJ5QnVkV3hzTGx4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRU52YlhCdmJtVnVkQ2R6SUdCZmNtOXZkRTV2WkdWSlJHQXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlISmxaMmx6ZEdWeVRuVnNiRU52YlhCdmJtVnVkRWxFS0dsa0tTQjdYRzRnSUc1MWJHeERiMjF3YjI1bGJuUkpSSE5TWldkcGMzUnllVnRwWkYwZ1BTQjBjblZsTzF4dWZWeHVYRzR2S2lwY2JpQXFJRlZ1YldGeWF5QjBhR1VnWTI5dGNHOXVaVzUwSUdGeklHaGhkbWx1WnlCeVpXNWtaWEpsWkNCMGJ5QnVkV3hzT2lCcGRDQnlaVzVrWlhKeklIUnZJSE52YldWMGFHbHVaeUJ1YjNjdVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnUTI5dGNHOXVaVzUwSjNNZ1lGOXliMjkwVG05a1pVbEVZQzVjYmlBcUwxeHVablZ1WTNScGIyNGdaR1Z5WldkcGMzUmxjazUxYkd4RGIyMXdiMjVsYm5SSlJDaHBaQ2tnZTF4dUlDQmtaV3hsZEdVZ2JuVnNiRU52YlhCdmJtVnVkRWxFYzFKbFoybHpkSEo1VzJsa1hUdGNibjFjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1EyOXRjRzl1Wlc1MEozTWdZRjl5YjI5MFRtOWtaVWxFWUM1Y2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlJRlJ5ZFdVZ2FXWWdkR2hsSUdOdmJYQnZibVZ1ZENCcGN5QnlaVzVrWlhKbFpDQjBieUJ1ZFd4c0xseHVJQ292WEc1bWRXNWpkR2x2YmlCcGMwNTFiR3hEYjIxd2IyNWxiblJKUkNocFpDa2dlMXh1SUNCeVpYUjFjbTRnSVNGdWRXeHNRMjl0Y0c5dVpXNTBTVVJ6VW1WbmFYTjBjbmxiYVdSZE8xeHVmVnh1WEc1MllYSWdVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkQ0E5SUh0Y2JpQWdaVzF3ZEhsRmJHVnRaVzUwT2lCbGJYQjBlVVZzWlcxbGJuUXNYRzRnSUdsdWFtVmpkR2x2YmpvZ1VtVmhZM1JGYlhCMGVVTnZiWEJ2Ym1WdWRFbHVhbVZqZEdsdmJpeGNiaUFnYVhOT2RXeHNRMjl0Y0c5dVpXNTBTVVE2SUdselRuVnNiRU52YlhCdmJtVnVkRWxFWEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblE3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFcnJvclV0aWxzXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgUmVhY3RFcnJvclV0aWxzID0ge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGd1YXJkZWQgdmVyc2lvbiBvZiBhIGZ1bmN0aW9uLiBUaGlzIGlzIHN1cHBvc2VkIHRvIG1ha2UgZGVidWdnaW5nXG4gICAqIG9mIGV2ZW50IGhhbmRsZXJzIGVhc2llci4gVG8gYWlkIGRlYnVnZ2luZyB3aXRoIHRoZSBicm93c2VyJ3MgZGVidWdnZXIsXG4gICAqIHRoaXMgY3VycmVudGx5IHNpbXBseSByZXR1cm5zIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuYyBGdW5jdGlvbiB0byBiZSBleGVjdXRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZ3VhcmRcbiAgICogQHJldHVybiB7ZnVuY3Rpb259XG4gICAqL1xuICBndWFyZDogZnVuY3Rpb24oZnVuYywgbmFtZSkge1xuICAgIHJldHVybiBmdW5jO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXJyb3JVdGlscztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEV2ZW50RW1pdHRlck1peGluXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcblxuZnVuY3Rpb24gcnVuRXZlbnRRdWV1ZUluQmF0Y2goZXZlbnRzKSB7XG4gIEV2ZW50UGx1Z2luSHViLmVucXVldWVFdmVudHMoZXZlbnRzKTtcbiAgRXZlbnRQbHVnaW5IdWIucHJvY2Vzc0V2ZW50UXVldWUoKTtcbn1cblxudmFyIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4gPSB7XG5cbiAgLyoqXG4gICAqIFN0cmVhbXMgYSBmaXJlZCB0b3AtbGV2ZWwgZXZlbnQgdG8gYEV2ZW50UGx1Z2luSHViYCB3aGVyZSBwbHVnaW5zIGhhdmUgdGhlXG4gICAqIG9wcG9ydHVuaXR5IHRvIGNyZWF0ZSBgUmVhY3RFdmVudGBzIHRvIGJlIGRpc3BhdGNoZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBlbnZpcm9ubWVudCBldmVudC5cbiAgICovXG4gIGhhbmRsZVRvcExldmVsOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIGV2ZW50cyA9IEV2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHMoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG5cbiAgICBydW5FdmVudFF1ZXVlSW5CYXRjaChldmVudHMpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXZlbnRFbWl0dGVyTWl4aW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFdmVudExpc3RlbmVyXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50TGlzdGVuZXIgPSByZXF1aXJlKFwiLi9FdmVudExpc3RlbmVyXCIpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzXCIpO1xudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKFwiLi9SZWFjdE1vdW50XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZ2V0RXZlbnRUYXJnZXQgPSByZXF1aXJlKFwiLi9nZXRFdmVudFRhcmdldFwiKTtcbnZhciBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbiA9IHJlcXVpcmUoXCIuL2dldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uXCIpO1xuXG4vKipcbiAqIEZpbmRzIHRoZSBwYXJlbnQgUmVhY3QgY29tcG9uZW50IG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0geyp9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FdmVudFRhcmdldH0gUGFyZW50IGNvbnRhaW5lciwgb3IgYG51bGxgIGlmIHRoZSBzcGVjaWZpZWQgbm9kZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgbmVzdGVkLlxuICovXG5mdW5jdGlvbiBmaW5kUGFyZW50KG5vZGUpIHtcbiAgLy8gVE9ETzogSXQgbWF5IGJlIGEgZ29vZCBpZGVhIHRvIGNhY2hlIHRoaXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBET01cbiAgLy8gdHJhdmVyc2FsLCBidXQgY2FjaGluZyBpcyBkaWZmaWN1bHQgdG8gZG8gY29ycmVjdGx5IHdpdGhvdXQgdXNpbmcgYVxuICAvLyBtdXRhdGlvbiBvYnNlcnZlciB0byBsaXN0ZW4gZm9yIGFsbCBET00gY2hhbmdlcy5cbiAgdmFyIG5vZGVJRCA9IFJlYWN0TW91bnQuZ2V0SUQobm9kZSk7XG4gIHZhciByb290SUQgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5nZXRSZWFjdFJvb3RJREZyb21Ob2RlSUQobm9kZUlEKTtcbiAgdmFyIGNvbnRhaW5lciA9IFJlYWN0TW91bnQuZmluZFJlYWN0Q29udGFpbmVyRm9ySUQocm9vdElEKTtcbiAgdmFyIHBhcmVudCA9IFJlYWN0TW91bnQuZ2V0Rmlyc3RSZWFjdERPTShjb250YWluZXIpO1xuICByZXR1cm4gcGFyZW50O1xufVxuXG4vLyBVc2VkIHRvIHN0b3JlIGFuY2VzdG9yIGhpZXJhcmNoeSBpbiB0b3AgbGV2ZWwgY2FsbGJhY2tcbmZ1bmN0aW9uIFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHRoaXMudG9wTGV2ZWxUeXBlID0gdG9wTGV2ZWxUeXBlO1xuICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gIHRoaXMuYW5jZXN0b3JzID0gW107XG59XG5hc3NpZ24oVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nLnByb3RvdHlwZSwge1xuICBkZXN0cnVjdG9yOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRvcExldmVsVHlwZSA9IG51bGw7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG51bGw7XG4gICAgdGhpcy5hbmNlc3RvcnMubGVuZ3RoID0gMDtcbiAgfVxufSk7XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oXG4gIFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyxcbiAgUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXJcbik7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvcExldmVsSW1wbChib29rS2VlcGluZykge1xuICB2YXIgdG9wTGV2ZWxUYXJnZXQgPSBSZWFjdE1vdW50LmdldEZpcnN0UmVhY3RET00oXG4gICAgZ2V0RXZlbnRUYXJnZXQoYm9va0tlZXBpbmcubmF0aXZlRXZlbnQpXG4gICkgfHwgd2luZG93O1xuXG4gIC8vIExvb3AgdGhyb3VnaCB0aGUgaGllcmFyY2h5LCBpbiBjYXNlIHRoZXJlJ3MgYW55IG5lc3RlZCBjb21wb25lbnRzLlxuICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHdlIGJ1aWxkIHRoZSBhcnJheSBvZiBhbmNlc3RvcnMgYmVmb3JlIGNhbGxpbmcgYW55XG4gIC8vIGV2ZW50IGhhbmRsZXJzLCBiZWNhdXNlIGV2ZW50IGhhbmRsZXJzIGNhbiBtb2RpZnkgdGhlIERPTSwgbGVhZGluZyB0b1xuICAvLyBpbmNvbnNpc3RlbmNpZXMgd2l0aCBSZWFjdE1vdW50J3Mgbm9kZSBjYWNoZS4gU2VlICMxMTA1LlxuICB2YXIgYW5jZXN0b3IgPSB0b3BMZXZlbFRhcmdldDtcbiAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgYm9va0tlZXBpbmcuYW5jZXN0b3JzLnB1c2goYW5jZXN0b3IpO1xuICAgIGFuY2VzdG9yID0gZmluZFBhcmVudChhbmNlc3Rvcik7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGJvb2tLZWVwaW5nLmFuY2VzdG9ycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB0b3BMZXZlbFRhcmdldCA9IGJvb2tLZWVwaW5nLmFuY2VzdG9yc1tpXTtcbiAgICB2YXIgdG9wTGV2ZWxUYXJnZXRJRCA9IFJlYWN0TW91bnQuZ2V0SUQodG9wTGV2ZWxUYXJnZXQpIHx8ICcnO1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwoXG4gICAgICBib29rS2VlcGluZy50b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBib29rS2VlcGluZy5uYXRpdmVFdmVudFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2Nyb2xsVmFsdWVNb25pdG9yKGNiKSB7XG4gIHZhciBzY3JvbGxQb3NpdGlvbiA9IGdldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uKHdpbmRvdyk7XG4gIGNiKHNjcm9sbFBvc2l0aW9uKTtcbn1cblxudmFyIFJlYWN0RXZlbnRMaXN0ZW5lciA9IHtcbiAgX2VuYWJsZWQ6IHRydWUsXG4gIF9oYW5kbGVUb3BMZXZlbDogbnVsbCxcblxuICBXSU5ET1dfSEFORExFOiBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyB3aW5kb3cgOiBudWxsLFxuXG4gIHNldEhhbmRsZVRvcExldmVsOiBmdW5jdGlvbihoYW5kbGVUb3BMZXZlbCkge1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwgPSBoYW5kbGVUb3BMZXZlbDtcbiAgfSxcblxuICBzZXRFbmFibGVkOiBmdW5jdGlvbihlbmFibGVkKSB7XG4gICAgUmVhY3RFdmVudExpc3RlbmVyLl9lbmFibGVkID0gISFlbmFibGVkO1xuICB9LFxuXG4gIGlzRW5hYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJlYWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZDtcbiAgfSxcblxuXG4gIC8qKlxuICAgKiBUcmFwcyB0b3AtbGV2ZWwgZXZlbnRzIGJ5IHVzaW5nIGV2ZW50IGJ1YmJsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoYW5kbGVyQmFzZU5hbWUgRXZlbnQgbmFtZSAoZS5nLiBcImNsaWNrXCIpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gaGFuZGxlIEVsZW1lbnQgb24gd2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IEFuIG9iamVjdCB3aXRoIGEgcmVtb3ZlIGZ1bmN0aW9uIHdoaWNoIHdpbGwgZm9yY2VmdWxseVxuICAgKiAgICAgICAgICAgICAgICAgIHJlbW92ZSB0aGUgbGlzdGVuZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhcEJ1YmJsZWRFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHZhciBlbGVtZW50ID0gaGFuZGxlO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBFdmVudExpc3RlbmVyLmxpc3RlbihcbiAgICAgIGVsZW1lbnQsXG4gICAgICBoYW5kbGVyQmFzZU5hbWUsXG4gICAgICBSZWFjdEV2ZW50TGlzdGVuZXIuZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsIHRvcExldmVsVHlwZSlcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmFwcyBhIHRvcC1sZXZlbCBldmVudCBieSB1c2luZyBldmVudCBjYXB0dXJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJCYXNlTmFtZSBFdmVudCBuYW1lIChlLmcuIFwiY2xpY2tcIikuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBoYW5kbGUgRWxlbWVudCBvbiB3aGljaCB0byBhdHRhY2ggbGlzdGVuZXIuXG4gICAqIEByZXR1cm4ge29iamVjdH0gQW4gb2JqZWN0IHdpdGggYSByZW1vdmUgZnVuY3Rpb24gd2hpY2ggd2lsbCBmb3JjZWZ1bGx5XG4gICAqICAgICAgICAgICAgICAgICAgcmVtb3ZlIHRoZSBsaXN0ZW5lci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB0cmFwQ2FwdHVyZWRFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHZhciBlbGVtZW50ID0gaGFuZGxlO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBFdmVudExpc3RlbmVyLmNhcHR1cmUoXG4gICAgICBlbGVtZW50LFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgUmVhY3RFdmVudExpc3RlbmVyLmRpc3BhdGNoRXZlbnQuYmluZChudWxsLCB0b3BMZXZlbFR5cGUpXG4gICAgKTtcbiAgfSxcblxuICBtb25pdG9yU2Nyb2xsVmFsdWU6IGZ1bmN0aW9uKHJlZnJlc2gpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBzY3JvbGxWYWx1ZU1vbml0b3IuYmluZChudWxsLCByZWZyZXNoKTtcbiAgICBFdmVudExpc3RlbmVyLmxpc3Rlbih3aW5kb3csICdzY3JvbGwnLCBjYWxsYmFjayk7XG4gIH0sXG5cbiAgZGlzcGF0Y2hFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICAgIGlmICghUmVhY3RFdmVudExpc3RlbmVyLl9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJvb2tLZWVwaW5nID0gVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nLmdldFBvb2xlZChcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgLy8gRXZlbnQgcXVldWUgYmVpbmcgcHJvY2Vzc2VkIGluIHRoZSBzYW1lIGN5Y2xlIGFsbG93c1xuICAgICAgLy8gYHByZXZlbnREZWZhdWx0YC5cbiAgICAgIFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyhoYW5kbGVUb3BMZXZlbEltcGwsIGJvb2tLZWVwaW5nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nLnJlbGVhc2UoYm9va0tlZXBpbmcpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEV2ZW50TGlzdGVuZXI7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RnJhZ21lbnRcbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vKipcbiAqIFdlIHVzZWQgdG8gYWxsb3cga2V5ZWQgb2JqZWN0cyB0byBzZXJ2ZSBhcyBhIGNvbGxlY3Rpb24gb2YgUmVhY3RFbGVtZW50cyxcbiAqIG9yIG5lc3RlZCBzZXRzLiBUaGlzIGFsbG93ZWQgdXMgYSB3YXkgdG8gZXhwbGljaXRseSBrZXkgYSBzZXQgYSBmcmFnbWVudCBvZlxuICogY29tcG9uZW50cy4gVGhpcyBpcyBub3cgYmVpbmcgcmVwbGFjZWQgd2l0aCBhbiBvcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuXG4gKiBUaGUgdXBncmFkZSBwYXRoIGlzIHRvIGNhbGwgUmVhY3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50KHsga2V5OiB2YWx1ZSB9KSB0b1xuICogY3JlYXRlIGEga2V5ZWQgZnJhZ21lbnQuIFRoZSByZXN1bHRpbmcgZGF0YSBzdHJ1Y3R1cmUgaXMgb3BhcXVlLCBmb3Igbm93LlxuICovXG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgdmFyIGZyYWdtZW50S2V5ID0gJ19yZWFjdEZyYWdtZW50JztcbiAgdmFyIGRpZFdhcm5LZXkgPSAnX3JlYWN0RGlkV2Fybic7XG4gIHZhciBjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCA9IGZhbHNlO1xuXG4gIHRyeSB7XG4gICAgLy8gRmVhdHVyZSB0ZXN0LiBEb24ndCBldmVuIHRyeSB0byBpc3N1ZSB0aGlzIHdhcm5pbmcgaWYgd2UgY2FuJ3QgdXNlXG4gICAgLy8gZW51bWVyYWJsZTogZmFsc2UuXG5cbiAgICB2YXIgZHVtbXkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICB7fSxcbiAgICAgIGZyYWdtZW50S2V5LFxuICAgICAge2VudW1lcmFibGU6IGZhbHNlLCB2YWx1ZTogdHJ1ZX1cbiAgICApO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAge30sXG4gICAgICAna2V5JyxcbiAgICAgIHtlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGR1bW15fVxuICAgICk7XG5cbiAgICBjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCA9IHRydWU7XG4gIH0gY2F0Y2ggKHgpIHsgfVxuXG4gIHZhciBwcm94eVByb3BlcnR5QWNjZXNzV2l0aFdhcm5pbmcgPSBmdW5jdGlvbihvYmosIGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIHRoaXNbZGlkV2FybktleV0sXG4gICAgICAgICAgJ0EgUmVhY3RGcmFnbWVudCBpcyBhbiBvcGFxdWUgdHlwZS4gQWNjZXNzaW5nIGFueSBvZiBpdHMgJyArXG4gICAgICAgICAgJ3Byb3BlcnRpZXMgaXMgZGVwcmVjYXRlZC4gUGFzcyBpdCB0byBvbmUgb2YgdGhlIFJlYWN0LkNoaWxkcmVuICcgK1xuICAgICAgICAgICdoZWxwZXJzLidcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICB0aGlzW2RpZFdhcm5LZXldID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXNbZnJhZ21lbnRLZXldW2tleV07XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICB0aGlzW2RpZFdhcm5LZXldLFxuICAgICAgICAgICdBIFJlYWN0RnJhZ21lbnQgaXMgYW4gaW1tdXRhYmxlIG9wYXF1ZSB0eXBlLiBNdXRhdGluZyBpdHMgJyArXG4gICAgICAgICAgJ3Byb3BlcnRpZXMgaXMgZGVwcmVjYXRlZC4nXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgdGhpc1tkaWRXYXJuS2V5XSA9IHRydWU7XG4gICAgICAgIHRoaXNbZnJhZ21lbnRLZXldW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICB2YXIgaXNzdWVkV2FybmluZ3MgPSB7fTtcblxuICB2YXIgZGlkV2FybkZvckZyYWdtZW50ID0gZnVuY3Rpb24oZnJhZ21lbnQpIHtcbiAgICAvLyBXZSB1c2UgdGhlIGtleXMgYW5kIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBhcyBhIGhldXJpc3RpYyB0byBkZWR1cGUgdGhlXG4gICAgLy8gd2FybmluZyB0byBhdm9pZCBzcGFtbWluZyB0b28gbXVjaC5cbiAgICB2YXIgZnJhZ21lbnRDYWNoZUtleSA9ICcnO1xuICAgIGZvciAodmFyIGtleSBpbiBmcmFnbWVudCkge1xuICAgICAgZnJhZ21lbnRDYWNoZUtleSArPSBrZXkgKyAnOicgKyAodHlwZW9mIGZyYWdtZW50W2tleV0pICsgJywnO1xuICAgIH1cbiAgICB2YXIgYWxyZWFkeVdhcm5lZE9uY2UgPSAhIWlzc3VlZFdhcm5pbmdzW2ZyYWdtZW50Q2FjaGVLZXldO1xuICAgIGlzc3VlZFdhcm5pbmdzW2ZyYWdtZW50Q2FjaGVLZXldID0gdHJ1ZTtcbiAgICByZXR1cm4gYWxyZWFkeVdhcm5lZE9uY2U7XG4gIH07XG59XG5cbnZhciBSZWFjdEZyYWdtZW50ID0ge1xuICAvLyBXcmFwIGEga2V5ZWQgb2JqZWN0IGluIGFuIG9wYXF1ZSBwcm94eSB0aGF0IHdhcm5zIHlvdSBpZiB5b3UgYWNjZXNzIGFueVxuICAvLyBvZiBpdHMgcHJvcGVydGllcy5cbiAgY3JlYXRlOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgIW9iamVjdCB8fCBBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ1JlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVudCBvbmx5IGFjY2VwdHMgYSBzaW5nbGUgb2JqZWN0LicsXG4gICAgICAgICAgb2JqZWN0XG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQob2JqZWN0KSkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnUmVhY3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50IGRvZXMgbm90IGFjY2VwdCBhIFJlYWN0RWxlbWVudCAnICtcbiAgICAgICAgICAnd2l0aG91dCBhIHdyYXBwZXIgb2JqZWN0LidcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuICAgICAgaWYgKGNhbldhcm5Gb3JSZWFjdEZyYWdtZW50KSB7XG4gICAgICAgIHZhciBwcm94eSA9IHt9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIGZyYWdtZW50S2V5LCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IG9iamVjdFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBkaWRXYXJuS2V5LCB7XG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgcHJveHlQcm9wZXJ0eUFjY2Vzc1dpdGhXYXJuaW5nKHByb3h5LCBrZXkpO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhwcm94eSk7XG4gICAgICAgIHJldHVybiBwcm94eTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfSxcbiAgLy8gRXh0cmFjdCB0aGUgb3JpZ2luYWwga2V5ZWQgb2JqZWN0IGZyb20gdGhlIGZyYWdtZW50IG9wYXF1ZSB0eXBlLiBXYXJuIGlmXG4gIC8vIGEgcGxhaW4gb2JqZWN0IGlzIHBhc3NlZCBoZXJlLlxuICBleHRyYWN0OiBmdW5jdGlvbihmcmFnbWVudCkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIGlmIChjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCkge1xuICAgICAgICBpZiAoIWZyYWdtZW50W2ZyYWdtZW50S2V5XSkge1xuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgZGlkV2FybkZvckZyYWdtZW50KGZyYWdtZW50KSxcbiAgICAgICAgICAgICdBbnkgdXNlIG9mIGEga2V5ZWQgb2JqZWN0IHNob3VsZCBiZSB3cmFwcGVkIGluICcgK1xuICAgICAgICAgICAgJ1JlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVudChvYmplY3QpIGJlZm9yZSBiZWluZyBwYXNzZWQgYXMgYSAnICtcbiAgICAgICAgICAgICdjaGlsZC4nXG4gICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgIHJldHVybiBmcmFnbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnJhZ21lbnRbZnJhZ21lbnRLZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH0sXG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBmcmFnbWVudCBhbmQgaWYgc28sIGV4dHJhY3QgdGhlIGtleWVkIG9iamVjdC4gSWYgaXRcbiAgLy8gaXMgYSBmcmFnbWVudC1saWtlIG9iamVjdCwgd2FybiB0aGF0IGl0IHNob3VsZCBiZSB3cmFwcGVkLiBJZ25vcmUgaWYgd2VcbiAgLy8gY2FuJ3QgZGV0ZXJtaW5lIHdoYXQga2luZCBvZiBvYmplY3QgdGhpcyBpcy5cbiAgZXh0cmFjdElmRnJhZ21lbnQ6IGZ1bmN0aW9uKGZyYWdtZW50KSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgaWYgKGNhbldhcm5Gb3JSZWFjdEZyYWdtZW50KSB7XG4gICAgICAgIC8vIElmIGl0IGlzIHRoZSBvcGFxdWUgdHlwZSwgcmV0dXJuIHRoZSBrZXllZCBvYmplY3QuXG4gICAgICAgIGlmIChmcmFnbWVudFtmcmFnbWVudEtleV0pIHtcbiAgICAgICAgICByZXR1cm4gZnJhZ21lbnRbZnJhZ21lbnRLZXldO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSwgY2hlY2sgZWFjaCBwcm9wZXJ0eSBpZiBpdCBoYXMgYW4gZWxlbWVudCwgaWYgaXQgZG9lc1xuICAgICAgICAvLyBpdCBpcyBwcm9iYWJseSBtZWFudCBhcyBhIGZyYWdtZW50LCBzbyB3ZSBjYW4gd2FybiBlYXJseS4gRGVmZXIsXG4gICAgICAgIC8vIHRoZSB3YXJuaW5nIHRvIGV4dHJhY3QuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBmcmFnbWVudCkge1xuICAgICAgICAgIGlmIChmcmFnbWVudC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChmcmFnbWVudFtrZXldKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIGEgZnJhZ21lbnQgb2JqZWN0LCB3ZSBzaG91bGQgcHJvdmlkZSBhblxuICAgICAgICAgICAgLy8gZWFybHkgd2FybmluZy5cbiAgICAgICAgICAgIHJldHVybiBSZWFjdEZyYWdtZW50LmV4dHJhY3QoZnJhZ21lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RGcmFnbWVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JHY21GbmJXVnVkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2Jpb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElGSmxZV04wUm5KaFoyMWxiblJjYmlvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGd2lLVHRjYmx4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzR2S2lwY2JpQXFJRmRsSUhWelpXUWdkRzhnWVd4c2IzY2dhMlY1WldRZ2IySnFaV04wY3lCMGJ5QnpaWEoyWlNCaGN5QmhJR052Ykd4bFkzUnBiMjRnYjJZZ1VtVmhZM1JGYkdWdFpXNTBjeXhjYmlBcUlHOXlJRzVsYzNSbFpDQnpaWFJ6TGlCVWFHbHpJR0ZzYkc5M1pXUWdkWE1nWVNCM1lYa2dkRzhnWlhod2JHbGphWFJzZVNCclpYa2dZU0J6WlhRZ1lTQm1jbUZuYldWdWRDQnZabHh1SUNvZ1kyOXRjRzl1Wlc1MGN5NGdWR2hwY3lCcGN5QnViM2NnWW1WcGJtY2djbVZ3YkdGalpXUWdkMmwwYUNCaGJpQnZjR0Z4ZFdVZ1pHRjBZU0J6ZEhKMVkzUjFjbVV1WEc0Z0tpQlVhR1VnZFhCbmNtRmtaU0J3WVhSb0lHbHpJSFJ2SUdOaGJHd2dVbVZoWTNRdVlXUmtiMjV6TG1OeVpXRjBaVVp5WVdkdFpXNTBLSHNnYTJWNU9pQjJZV3gxWlNCOUtTQjBiMXh1SUNvZ1kzSmxZWFJsSUdFZ2EyVjVaV1FnWm5KaFoyMWxiblF1SUZSb1pTQnlaWE4xYkhScGJtY2daR0YwWVNCemRISjFZM1IxY21VZ2FYTWdiM0JoY1hWbExDQm1iM0lnYm05M0xseHVJQ292WEc1Y2JtbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnZG1GeUlHWnlZV2R0Wlc1MFMyVjVJRDBnSjE5eVpXRmpkRVp5WVdkdFpXNTBKenRjYmlBZ2RtRnlJR1JwWkZkaGNtNUxaWGtnUFNBblgzSmxZV04wUkdsa1YyRnliaWM3WEc0Z0lIWmhjaUJqWVc1WFlYSnVSbTl5VW1WaFkzUkdjbUZuYldWdWRDQTlJR1poYkhObE8xeHVYRzRnSUhSeWVTQjdYRzRnSUNBZ0x5OGdSbVZoZEhWeVpTQjBaWE4wTGlCRWIyNG5kQ0JsZG1WdUlIUnllU0IwYnlCcGMzTjFaU0IwYUdseklIZGhjbTVwYm1jZ2FXWWdkMlVnWTJGdUozUWdkWE5sWEc0Z0lDQWdMeThnWlc1MWJXVnlZV0pzWlRvZ1ptRnNjMlV1WEc1Y2JpQWdJQ0IyWVhJZ1pIVnRiWGtnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0FnSUgwN1hHNWNiaUFnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29YRzRnSUNBZ0lDQjdmU3hjYmlBZ0lDQWdJR1p5WVdkdFpXNTBTMlY1TEZ4dUlDQWdJQ0FnZTJWdWRXMWxjbUZpYkdVNklHWmhiSE5sTENCMllXeDFaVG9nZEhKMVpYMWNiaUFnSUNBcE8xeHVYRzRnSUNBZ1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLRnh1SUNBZ0lDQWdlMzBzWEc0Z0lDQWdJQ0FuYTJWNUp5eGNiaUFnSUNBZ0lIdGxiblZ0WlhKaFlteGxPaUIwY25WbExDQm5aWFE2SUdSMWJXMTVmVnh1SUNBZ0lDazdYRzVjYmlBZ0lDQmpZVzVYWVhKdVJtOXlVbVZoWTNSR2NtRm5iV1Z1ZENBOUlIUnlkV1U3WEc0Z0lIMGdZMkYwWTJnZ0tIZ3BJSHNnZlZ4dVhHNGdJSFpoY2lCd2NtOTRlVkJ5YjNCbGNuUjVRV05qWlhOelYybDBhRmRoY201cGJtY2dQU0JtZFc1amRHbHZiaWh2WW1vc0lHdGxlU2tnZTF4dUlDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNodlltb3NJR3RsZVN3Z2UxeHVJQ0FnSUNBZ1pXNTFiV1Z5WVdKc1pUb2dkSEoxWlN4Y2JpQWdJQ0FnSUdkbGREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTmJaR2xrVjJGeWJrdGxlVjBzWEc0Z0lDQWdJQ0FnSUNBZ0owRWdVbVZoWTNSR2NtRm5iV1Z1ZENCcGN5QmhiaUJ2Y0dGeGRXVWdkSGx3WlM0Z1FXTmpaWE56YVc1bklHRnVlU0J2WmlCcGRITWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0ozQnliM0JsY25ScFpYTWdhWE1nWkdWd2NtVmpZWFJsWkM0Z1VHRnpjeUJwZENCMGJ5QnZibVVnYjJZZ2RHaGxJRkpsWVdOMExrTm9hV3hrY21WdUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkb1pXeHdaWEp6TGlkY2JpQWdJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNBZ0lDQjBhR2x6VzJScFpGZGhjbTVMWlhsZElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTmJabkpoWjIxbGJuUkxaWGxkVzJ0bGVWMDdYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdjMlYwT2lCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpXMlJwWkZkaGNtNUxaWGxkTEZ4dUlDQWdJQ0FnSUNBZ0lDZEJJRkpsWVdOMFJuSmhaMjFsYm5RZ2FYTWdZVzRnYVcxdGRYUmhZbXhsSUc5d1lYRjFaU0IwZVhCbExpQk5kWFJoZEdsdVp5QnBkSE1nSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM0J5YjNCbGNuUnBaWE1nYVhNZ1pHVndjbVZqWVhSbFpDNG5YRzRnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnZEdocGMxdGthV1JYWVhKdVMyVjVYU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJSFJvYVhOYlpuSmhaMjFsYm5STFpYbGRXMnRsZVYwZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5S1R0Y2JpQWdmVHRjYmx4dUlDQjJZWElnYVhOemRXVmtWMkZ5Ym1sdVozTWdQU0I3ZlR0Y2JseHVJQ0IyWVhJZ1pHbGtWMkZ5YmtadmNrWnlZV2R0Wlc1MElEMGdablZ1WTNScGIyNG9abkpoWjIxbGJuUXBJSHRjYmlBZ0lDQXZMeUJYWlNCMWMyVWdkR2hsSUd0bGVYTWdZVzVrSUhSb1pTQjBlWEJsSUc5bUlIUm9aU0IyWVd4MVpTQmhjeUJoSUdobGRYSnBjM1JwWXlCMGJ5QmtaV1IxY0dVZ2RHaGxYRzRnSUNBZ0x5OGdkMkZ5Ym1sdVp5QjBieUJoZG05cFpDQnpjR0Z0YldsdVp5QjBiMjhnYlhWamFDNWNiaUFnSUNCMllYSWdabkpoWjIxbGJuUkRZV05vWlV0bGVTQTlJQ2NuTzF4dUlDQWdJR1p2Y2lBb2RtRnlJR3RsZVNCcGJpQm1jbUZuYldWdWRDa2dlMXh1SUNBZ0lDQWdabkpoWjIxbGJuUkRZV05vWlV0bGVTQXJQU0JyWlhrZ0t5QW5PaWNnS3lBb2RIbHdaVzltSUdaeVlXZHRaVzUwVzJ0bGVWMHBJQ3NnSnl3bk8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ1lXeHlaV0ZrZVZkaGNtNWxaRTl1WTJVZ1BTQWhJV2x6YzNWbFpGZGhjbTVwYm1kelcyWnlZV2R0Wlc1MFEyRmphR1ZMWlhsZE8xeHVJQ0FnSUdsemMzVmxaRmRoY201cGJtZHpXMlp5WVdkdFpXNTBRMkZqYUdWTFpYbGRJRDBnZEhKMVpUdGNiaUFnSUNCeVpYUjFjbTRnWVd4eVpXRmtlVmRoY201bFpFOXVZMlU3WEc0Z0lIMDdYRzU5WEc1Y2JuWmhjaUJTWldGamRFWnlZV2R0Wlc1MElEMGdlMXh1SUNBdkx5QlhjbUZ3SUdFZ2EyVjVaV1FnYjJKcVpXTjBJR2x1SUdGdUlHOXdZWEYxWlNCd2NtOTRlU0IwYUdGMElIZGhjbTV6SUhsdmRTQnBaaUI1YjNVZ1lXTmpaWE56SUdGdWVWeHVJQ0F2THlCdlppQnBkSE1nY0hKdmNHVnlkR2xsY3k1Y2JpQWdZM0psWVhSbE9pQm1kVzVqZEdsdmJpaHZZbXBsWTNRcElIdGNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHOWlhbVZqZENBaFBUMGdKMjlpYW1WamRDY2dmSHdnSVc5aWFtVmpkQ0I4ZkNCQmNuSmhlUzVwYzBGeWNtRjVLRzlpYW1WamRDa3BJSHRjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBMbUZrWkc5dWN5NWpjbVZoZEdWR2NtRm5iV1Z1ZENCdmJteDVJR0ZqWTJWd2RITWdZU0J6YVc1bmJHVWdiMkpxWldOMExpY3NYRzRnSUNBZ0lDQWdJQ0FnYjJKcVpXTjBYRzRnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzlpYW1WamREdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2hTWldGamRFVnNaVzFsYm5RdWFYTldZV3hwWkVWc1pXMWxiblFvYjJKcVpXTjBLU2tnZTF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBblVtVmhZM1F1WVdSa2IyNXpMbU55WldGMFpVWnlZV2R0Wlc1MElHUnZaWE1nYm05MElHRmpZMlZ3ZENCaElGSmxZV04wUld4bGJXVnVkQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5kMmwwYUc5MWRDQmhJSGR5WVhCd1pYSWdiMkpxWldOMExpZGNiaUFnSUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiMkpxWldOME8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLR05oYmxkaGNtNUdiM0pTWldGamRFWnlZV2R0Wlc1MEtTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCd2NtOTRlU0E5SUh0OU8xeHVJQ0FnSUNBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvY0hKdmVIa3NJR1p5WVdkdFpXNTBTMlY1TENCN1hHNGdJQ0FnSUNBZ0lDQWdaVzUxYldWeVlXSnNaVG9nWm1Gc2MyVXNYRzRnSUNBZ0lDQWdJQ0FnZG1Gc2RXVTZJRzlpYW1WamRGeHVJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIQnliM2g1TENCa2FXUlhZWEp1UzJWNUxDQjdYRzRnSUNBZ0lDQWdJQ0FnZDNKcGRHRmliR1U2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJQ0FnWlc1MWJXVnlZV0pzWlRvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ2RtRnNkV1U2SUdaaGJITmxYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCbWIzSWdLSFpoY2lCclpYa2dhVzRnYjJKcVpXTjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NISnZlSGxRY205d1pYSjBlVUZqWTJWemMxZHBkR2hYWVhKdWFXNW5LSEJ5YjNoNUxDQnJaWGtwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lFOWlhbVZqZEM1d2NtVjJaVzUwUlhoMFpXNXphVzl1Y3lod2NtOTRlU2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y205NGVUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRzlpYW1WamREdGNiaUFnZlN4Y2JpQWdMeThnUlhoMGNtRmpkQ0IwYUdVZ2IzSnBaMmx1WVd3Z2EyVjVaV1FnYjJKcVpXTjBJR1p5YjIwZ2RHaGxJR1p5WVdkdFpXNTBJRzl3WVhGMVpTQjBlWEJsTGlCWFlYSnVJR2xtWEc0Z0lDOHZJR0VnY0d4aGFXNGdiMkpxWldOMElHbHpJSEJoYzNObFpDQm9aWEpsTGx4dUlDQmxlSFJ5WVdOME9pQm1kVzVqZEdsdmJpaG1jbUZuYldWdWRDa2dlMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lHbG1JQ2hqWVc1WFlYSnVSbTl5VW1WaFkzUkdjbUZuYldWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lXWnlZV2R0Wlc1MFcyWnlZV2R0Wlc1MFMyVjVYU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdaR2xrVjJGeWJrWnZja1p5WVdkdFpXNTBLR1p5WVdkdFpXNTBLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDZEJibmtnZFhObElHOW1JR0VnYTJWNVpXUWdiMkpxWldOMElITm9iM1ZzWkNCaVpTQjNjbUZ3Y0dWa0lHbHVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdKMUpsWVdOMExtRmtaRzl1Y3k1amNtVmhkR1ZHY21GbmJXVnVkQ2h2WW1wbFkzUXBJR0psWm05eVpTQmlaV2x1WnlCd1lYTnpaV1FnWVhNZ1lTQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDZGphR2xzWkM0blhHNGdJQ0FnSUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJtY21GbmJXVnVkRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWm5KaFoyMWxiblJiWm5KaFoyMWxiblJMWlhsZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdabkpoWjIxbGJuUTdYRzRnSUgwc1hHNGdJQzh2SUVOb1pXTnJJR2xtSUhSb2FYTWdhWE1nWVNCbWNtRm5iV1Z1ZENCaGJtUWdhV1lnYzI4c0lHVjRkSEpoWTNRZ2RHaGxJR3RsZVdWa0lHOWlhbVZqZEM0Z1NXWWdhWFJjYmlBZ0x5OGdhWE1nWVNCbWNtRm5iV1Z1ZEMxc2FXdGxJRzlpYW1WamRDd2dkMkZ5YmlCMGFHRjBJR2wwSUhOb2IzVnNaQ0JpWlNCM2NtRndjR1ZrTGlCSloyNXZjbVVnYVdZZ2QyVmNiaUFnTHk4Z1kyRnVKM1FnWkdWMFpYSnRhVzVsSUhkb1lYUWdhMmx1WkNCdlppQnZZbXBsWTNRZ2RHaHBjeUJwY3k1Y2JpQWdaWGgwY21GamRFbG1SbkpoWjIxbGJuUTZJR1oxYm1OMGFXOXVLR1p5WVdkdFpXNTBLU0I3WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdhV1lnS0dOaGJsZGhjbTVHYjNKU1pXRmpkRVp5WVdkdFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUM4dklFbG1JR2wwSUdseklIUm9aU0J2Y0dGeGRXVWdkSGx3WlN3Z2NtVjBkWEp1SUhSb1pTQnJaWGxsWkNCdlltcGxZM1F1WEc0Z0lDQWdJQ0FnSUdsbUlDaG1jbUZuYldWdWRGdG1jbUZuYldWdWRFdGxlVjBwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1puSmhaMjFsYm5SYlpuSmhaMjFsYm5STFpYbGRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4dklFOTBhR1Z5ZDJselpTd2dZMmhsWTJzZ1pXRmphQ0J3Y205d1pYSjBlU0JwWmlCcGRDQm9ZWE1nWVc0Z1pXeGxiV1Z1ZEN3Z2FXWWdhWFFnWkc5bGMxeHVJQ0FnSUNBZ0lDQXZMeUJwZENCcGN5QndjbTlpWVdKc2VTQnRaV0Z1ZENCaGN5QmhJR1p5WVdkdFpXNTBMQ0J6YnlCM1pTQmpZVzRnZDJGeWJpQmxZWEpzZVM0Z1JHVm1aWElzWEc0Z0lDQWdJQ0FnSUM4dklIUm9aU0IzWVhKdWFXNW5JSFJ2SUdWNGRISmhZM1F1WEc0Z0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUJtY21GbmJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2htY21GbmJXVnVkQzVvWVhOUGQyNVFjbTl3WlhKMGVTaHJaWGtwSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENobWNtRm5iV1Z1ZEZ0clpYbGRLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnVkdocGN5QnNiMjlyY3lCc2FXdGxJR0VnWm5KaFoyMWxiblFnYjJKcVpXTjBMQ0IzWlNCemFHOTFiR1FnY0hKdmRtbGtaU0JoYmx4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnWldGeWJIa2dkMkZ5Ym1sdVp5NWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJTWldGamRFWnlZV2R0Wlc1MExtVjRkSEpoWTNRb1puSmhaMjFsYm5RcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1puSmhaMjFsYm5RN1hHNGdJSDFjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSR2NtRm5iV1Z1ZER0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0SW5qZWN0aW9uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luSHViXCIpO1xudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RW1wdHlDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVtcHR5Q29tcG9uZW50XCIpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlclwiKTtcbnZhciBSZWFjdE5hdGl2ZUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0TmF0aXZlQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RET01Db21wb25lbnRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xudmFyIFJlYWN0Um9vdEluZGV4ID0gcmVxdWlyZShcIi4vUmVhY3RSb290SW5kZXhcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgUmVhY3RJbmplY3Rpb24gPSB7XG4gIENvbXBvbmVudDogUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5pbmplY3Rpb24sXG4gIENsYXNzOiBSZWFjdENsYXNzLmluamVjdGlvbixcbiAgRE9NQ29tcG9uZW50OiBSZWFjdERPTUNvbXBvbmVudC5pbmplY3Rpb24sXG4gIERPTVByb3BlcnR5OiBET01Qcm9wZXJ0eS5pbmplY3Rpb24sXG4gIEVtcHR5Q29tcG9uZW50OiBSZWFjdEVtcHR5Q29tcG9uZW50LmluamVjdGlvbixcbiAgRXZlbnRQbHVnaW5IdWI6IEV2ZW50UGx1Z2luSHViLmluamVjdGlvbixcbiAgRXZlbnRFbWl0dGVyOiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuaW5qZWN0aW9uLFxuICBOYXRpdmVDb21wb25lbnQ6IFJlYWN0TmF0aXZlQ29tcG9uZW50LmluamVjdGlvbixcbiAgUGVyZjogUmVhY3RQZXJmLmluamVjdGlvbixcbiAgUm9vdEluZGV4OiBSZWFjdFJvb3RJbmRleC5pbmplY3Rpb24sXG4gIFVwZGF0ZXM6IFJlYWN0VXBkYXRlcy5pbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RJbmplY3Rpb247XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RJbnB1dFNlbGVjdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NU2VsZWN0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RET01TZWxlY3Rpb25cIik7XG5cbnZhciBjb250YWluc05vZGUgPSByZXF1aXJlKFwiLi9jb250YWluc05vZGVcIik7XG52YXIgZm9jdXNOb2RlID0gcmVxdWlyZShcIi4vZm9jdXNOb2RlXCIpO1xudmFyIGdldEFjdGl2ZUVsZW1lbnQgPSByZXF1aXJlKFwiLi9nZXRBY3RpdmVFbGVtZW50XCIpO1xuXG5mdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gY29udGFpbnNOb2RlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5cbi8qKlxuICogQFJlYWN0SW5wdXRTZWxlY3Rpb246IFJlYWN0IGlucHV0IHNlbGVjdGlvbiBtb2R1bGUuIEJhc2VkIG9uIFNlbGVjdGlvbi5qcyxcbiAqIGJ1dCBtb2RpZmllZCB0byBiZSBzdWl0YWJsZSBmb3IgcmVhY3QgYW5kIGhhcyBhIGNvdXBsZSBvZiBidWcgZml4ZXMgKGRvZXNuJ3RcbiAqIGFzc3VtZSBidXR0b25zIGhhdmUgcmFuZ2Ugc2VsZWN0aW9ucyBhbGxvd2VkKS5cbiAqIElucHV0IHNlbGVjdGlvbiBtb2R1bGUgZm9yIFJlYWN0LlxuICovXG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9IHtcblxuICBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IGZ1bmN0aW9uKGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbSAmJiAoXG4gICAgICAoKGVsZW0ubm9kZU5hbWUgPT09ICdJTlBVVCcgJiYgZWxlbS50eXBlID09PSAndGV4dCcpIHx8XG4gICAgICBlbGVtLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpXG4gICAgKTtcbiAgfSxcblxuICBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgICBzZWxlY3Rpb25SYW5nZTpcbiAgICAgICAgICBSZWFjdElucHV0U2VsZWN0aW9uLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgP1xuICAgICAgICAgIFJlYWN0SW5wdXRTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uKGZvY3VzZWRFbGVtKSA6XG4gICAgICAgICAgbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICAgKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAgICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gICAqL1xuICByZXN0b3JlU2VsZWN0aW9uOiBmdW5jdGlvbihwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uKSB7XG4gICAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHZhciBwcmlvckZvY3VzZWRFbGVtID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5mb2N1c2VkRWxlbTtcbiAgICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG4gICAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmXG4gICAgICAgIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgaWYgKFJlYWN0SW5wdXRTZWxlY3Rpb24uaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgICAgIFJlYWN0SW5wdXRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFxuICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0sXG4gICAgICAgICAgcHJpb3JTZWxlY3Rpb25SYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZm9jdXNOb2RlKHByaW9yRm9jdXNlZEVsZW0pO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQGdldFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIGZvY3VzZWQgdGV4dGFyZWEsIGlucHV0IG9yXG4gICAqIGNvbnRlbnRFZGl0YWJsZSBub2RlLlxuICAgKiAtQGlucHV0OiBMb29rIHVwIHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dFxuICAgKiAtQHJldHVybiB7c3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH1cbiAgICovXG4gIGdldFNlbGVjdGlvbjogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICB2YXIgc2VsZWN0aW9uO1xuXG4gICAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gaW5wdXQpIHtcbiAgICAgIC8vIE1vZGVybiBicm93c2VyIHdpdGggaW5wdXQgb3IgdGV4dGFyZWEuXG4gICAgICBzZWxlY3Rpb24gPSB7XG4gICAgICAgIHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCxcbiAgICAgICAgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmRcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5zZWxlY3Rpb24gJiYgaW5wdXQubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgIC8vIElFOCBpbnB1dC5cbiAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuICAgICAgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lIHNlbGVjdGlvbiBwZXIgZG9jdW1lbnQgaW4gSUUsIHNvIGl0IG11c3RcbiAgICAgIC8vIGJlIGluIG91ciBlbGVtZW50LlxuICAgICAgaWYgKHJhbmdlLnBhcmVudEVsZW1lbnQoKSA9PT0gaW5wdXQpIHtcbiAgICAgICAgc2VsZWN0aW9uID0ge1xuICAgICAgICAgIHN0YXJ0OiAtcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCAtaW5wdXQudmFsdWUubGVuZ3RoKSxcbiAgICAgICAgICBlbmQ6IC1yYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCAtaW5wdXQudmFsdWUubGVuZ3RoKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250ZW50IGVkaXRhYmxlIG9yIG9sZCBJRSB0ZXh0YXJlYS5cbiAgICAgIHNlbGVjdGlvbiA9IFJlYWN0RE9NU2VsZWN0aW9uLmdldE9mZnNldHMoaW5wdXQpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3Rpb24gfHwge3N0YXJ0OiAwLCBlbmQ6IDB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAgICogdGhlIGlucHV0LlxuICAgKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gICAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAgICovXG4gIHNldFNlbGVjdGlvbjogZnVuY3Rpb24oaW5wdXQsIG9mZnNldHMpIHtcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICAgIHZhciBlbmQgPSBvZmZzZXRzLmVuZDtcbiAgICBpZiAodHlwZW9mIGVuZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVuZCA9IHN0YXJ0O1xuICAgIH1cblxuICAgIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgICBpbnB1dC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0O1xuICAgICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGlucHV0Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBpbnB1dC5jcmVhdGVUZXh0UmFuZ2UoKTtcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7XG4gICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQgLSBzdGFydCk7XG4gICAgICByYW5nZS5zZWxlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RET01TZWxlY3Rpb24uc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5wdXRTZWxlY3Rpb247XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0SW5zdGFuY2VIYW5kbGVzXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Um9vdEluZGV4ID0gcmVxdWlyZShcIi4vUmVhY3RSb290SW5kZXhcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU0VQQVJBVE9SX0xFTkdUSCA9IFNFUEFSQVRPUi5sZW5ndGg7XG5cbi8qKlxuICogTWF4aW11bSBkZXB0aCBvZiB0cmF2ZXJzYWxzIGJlZm9yZSB3ZSBjb25zaWRlciB0aGUgcG9zc2liaWxpdHkgb2YgYSBiYWQgSUQuXG4gKi9cbnZhciBNQVhfVFJFRV9ERVBUSCA9IDEwMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgRE9NIElEIHByZWZpeCB0byB1c2Ugd2hlbiBtb3VudGluZyBSZWFjdCBjb21wb25lbnRzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBBIHVuaXF1ZSBpbnRlZ2VyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFJlYWN0IHJvb3QgSUQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0UmVhY3RSb290SURTdHJpbmcoaW5kZXgpIHtcbiAgcmV0dXJuIFNFUEFSQVRPUiArIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBjaGFyYWN0ZXIgaW4gdGhlIHN1cHBsaWVkIElEIGlzIGEgc2VwYXJhdG9yIG9yIHRoZSBlbmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIEEgUmVhY3QgRE9NIElELlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMgYSBzZXBhcmF0b3Igb3IgZW5kIG9mIHRoZSBJRC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzQm91bmRhcnkoaWQsIGluZGV4KSB7XG4gIHJldHVybiBpZC5jaGFyQXQoaW5kZXgpID09PSBTRVBBUkFUT1IgfHwgaW5kZXggPT09IGlkLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHN1cHBsaWVkIHN0cmluZyBpcyBhIHZhbGlkIFJlYWN0IERPTSBJRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQSBSZWFjdCBET00gSUQsIG1heWJlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgUmVhY3QgRE9NIElELlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZElEKGlkKSB7XG4gIHJldHVybiBpZCA9PT0gJycgfHwgKFxuICAgIGlkLmNoYXJBdCgwKSA9PT0gU0VQQVJBVE9SICYmIGlkLmNoYXJBdChpZC5sZW5ndGggLSAxKSAhPT0gU0VQQVJBVE9SXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBmaXJzdCBJRCBpcyBhbiBhbmNlc3RvciBvZiBvciBlcXVhbCB0byB0aGUgc2Vjb25kIElELlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNlc3RvcklEXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY2VuZGFudElEXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBhbmNlc3RvcklEYCBpcyBhbiBhbmNlc3RvciBvZiBgZGVzY2VuZGFudElEYC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc0FuY2VzdG9ySURPZihhbmNlc3RvcklELCBkZXNjZW5kYW50SUQpIHtcbiAgcmV0dXJuIChcbiAgICBkZXNjZW5kYW50SUQuaW5kZXhPZihhbmNlc3RvcklEKSA9PT0gMCAmJlxuICAgIGlzQm91bmRhcnkoZGVzY2VuZGFudElELCBhbmNlc3RvcklELmxlbmd0aClcbiAgKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgSUQgb2YgdGhlIHN1cHBsaWVkIFJlYWN0IERPTSBJRCwgYGlkYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgYSBjb21wb25lbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IElEIG9mIHRoZSBwYXJlbnQsIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudElEKGlkKSB7XG4gIHJldHVybiBpZCA/IGlkLnN1YnN0cigwLCBpZC5sYXN0SW5kZXhPZihTRVBBUkFUT1IpKSA6ICcnO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgRE9NIElEIG9uIHRoZSB0cmVlIHBhdGggZnJvbSB0aGUgc3VwcGxpZWQgYGFuY2VzdG9ySURgIHRvIHRoZVxuICogc3VwcGxpZWQgYGRlc3RpbmF0aW9uSURgLiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIElEIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNlc3RvcklEIElEIG9mIGFuIGFuY2VzdG9yIG5vZGUgb2YgYGRlc3RpbmF0aW9uSURgLlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3RpbmF0aW9uSUQgSUQgb2YgdGhlIGRlc3RpbmF0aW9uIG5vZGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5leHQgSUQgb24gdGhlIHBhdGggZnJvbSBgYW5jZXN0b3JJRGAgdG8gYGRlc3RpbmF0aW9uSURgLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dERlc2NlbmRhbnRJRChhbmNlc3RvcklELCBkZXN0aW5hdGlvbklEKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgaXNWYWxpZElEKGFuY2VzdG9ySUQpICYmIGlzVmFsaWRJRChkZXN0aW5hdGlvbklEKSxcbiAgICAnZ2V0TmV4dERlc2NlbmRhbnRJRCglcywgJXMpOiBSZWNlaXZlZCBhbiBpbnZhbGlkIFJlYWN0IERPTSBJRC4nLFxuICAgIGFuY2VzdG9ySUQsXG4gICAgZGVzdGluYXRpb25JRFxuICApIDogaW52YXJpYW50KGlzVmFsaWRJRChhbmNlc3RvcklEKSAmJiBpc1ZhbGlkSUQoZGVzdGluYXRpb25JRCkpKTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpc0FuY2VzdG9ySURPZihhbmNlc3RvcklELCBkZXN0aW5hdGlvbklEKSxcbiAgICAnZ2V0TmV4dERlc2NlbmRhbnRJRCguLi4pOiBSZWFjdCBoYXMgbWFkZSBhbiBpbnZhbGlkIGFzc3VtcHRpb24gYWJvdXQgJyArXG4gICAgJ3RoZSBET00gaGllcmFyY2h5LiBFeHBlY3RlZCBgJXNgIHRvIGJlIGFuIGFuY2VzdG9yIG9mIGAlc2AuJyxcbiAgICBhbmNlc3RvcklELFxuICAgIGRlc3RpbmF0aW9uSURcbiAgKSA6IGludmFyaWFudChpc0FuY2VzdG9ySURPZihhbmNlc3RvcklELCBkZXN0aW5hdGlvbklEKSkpO1xuICBpZiAoYW5jZXN0b3JJRCA9PT0gZGVzdGluYXRpb25JRCkge1xuICAgIHJldHVybiBhbmNlc3RvcklEO1xuICB9XG4gIC8vIFNraXAgb3ZlciB0aGUgYW5jZXN0b3IgYW5kIHRoZSBpbW1lZGlhdGUgc2VwYXJhdG9yLiBUcmF2ZXJzZSB1bnRpbCB3ZSBoaXRcbiAgLy8gYW5vdGhlciBzZXBhcmF0b3Igb3Igd2UgcmVhY2ggdGhlIGVuZCBvZiBgZGVzdGluYXRpb25JRGAuXG4gIHZhciBzdGFydCA9IGFuY2VzdG9ySUQubGVuZ3RoICsgU0VQQVJBVE9SX0xFTkdUSDtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IHN0YXJ0OyBpIDwgZGVzdGluYXRpb25JRC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpc0JvdW5kYXJ5KGRlc3RpbmF0aW9uSUQsIGkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlc3RpbmF0aW9uSUQuc3Vic3RyKDAsIGkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5lYXJlc3QgY29tbW9uIGFuY2VzdG9yIElEIG9mIHR3byBJRHMuXG4gKlxuICogVXNpbmcgdGhpcyBJRCBzY2hlbWUsIHRoZSBuZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBJRCBpcyB0aGUgbG9uZ2VzdCBjb21tb25cbiAqIHByZWZpeCBvZiB0aGUgdHdvIElEcyB0aGF0IGltbWVkaWF0ZWx5IHByZWNlZGVkIGEgXCJtYXJrZXJcIiBpbiBib3RoIHN0cmluZ3MuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9uZUlEXG4gKiBAcGFyYW0ge3N0cmluZ30gdHdvSURcbiAqIEByZXR1cm4ge3N0cmluZ30gTmVhcmVzdCBjb21tb24gYW5jZXN0b3IgSUQsIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm9uZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEZpcnN0Q29tbW9uQW5jZXN0b3JJRChvbmVJRCwgdHdvSUQpIHtcbiAgdmFyIG1pbkxlbmd0aCA9IE1hdGgubWluKG9uZUlELmxlbmd0aCwgdHdvSUQubGVuZ3RoKTtcbiAgaWYgKG1pbkxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICB2YXIgbGFzdENvbW1vbk1hcmtlckluZGV4ID0gMDtcbiAgLy8gVXNlIGA8PWAgdG8gdHJhdmVyc2UgdW50aWwgdGhlIFwiRU9MXCIgb2YgdGhlIHNob3J0ZXIgc3RyaW5nLlxuICBmb3IgKHZhciBpID0gMDsgaSA8PSBtaW5MZW5ndGg7IGkrKykge1xuICAgIGlmIChpc0JvdW5kYXJ5KG9uZUlELCBpKSAmJiBpc0JvdW5kYXJ5KHR3b0lELCBpKSkge1xuICAgICAgbGFzdENvbW1vbk1hcmtlckluZGV4ID0gaTtcbiAgICB9IGVsc2UgaWYgKG9uZUlELmNoYXJBdChpKSAhPT0gdHdvSUQuY2hhckF0KGkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgdmFyIGxvbmdlc3RDb21tb25JRCA9IG9uZUlELnN1YnN0cigwLCBsYXN0Q29tbW9uTWFya2VySW5kZXgpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlzVmFsaWRJRChsb25nZXN0Q29tbW9uSUQpLFxuICAgICdnZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQoJXMsICVzKTogRXhwZWN0ZWQgYSB2YWxpZCBSZWFjdCBET00gSUQ6ICVzJyxcbiAgICBvbmVJRCxcbiAgICB0d29JRCxcbiAgICBsb25nZXN0Q29tbW9uSURcbiAgKSA6IGludmFyaWFudChpc1ZhbGlkSUQobG9uZ2VzdENvbW1vbklEKSkpO1xuICByZXR1cm4gbG9uZ2VzdENvbW1vbklEO1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyB0aGUgcGFyZW50IHBhdGggYmV0d2VlbiB0d28gSURzIChlaXRoZXIgdXAgb3IgZG93bikuIFRoZSBJRHMgbXVzdFxuICogbm90IGJlIHRoZSBzYW1lLCBhbmQgdGhlcmUgbXVzdCBleGlzdCBhIHBhcmVudCBwYXRoIGJldHdlZW4gdGhlbS4gSWYgdGhlXG4gKiBjYWxsYmFjayByZXR1cm5zIGBmYWxzZWAsIHRyYXZlcnNhbCBpcyBzdG9wcGVkLlxuICpcbiAqIEBwYXJhbSB7P3N0cmluZ30gc3RhcnQgSUQgYXQgd2hpY2ggdG8gc3RhcnQgdHJhdmVyc2FsLlxuICogQHBhcmFtIHs/c3RyaW5nfSBzdG9wIElEIGF0IHdoaWNoIHRvIGVuZCB0cmF2ZXJzYWwuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiBDYWxsYmFjayB0byBpbnZva2UgZWFjaCBJRCB3aXRoLlxuICogQHBhcmFtIHs/Ym9vbGVhbn0gc2tpcEZpcnN0IFdoZXRoZXIgb3Igbm90IHRvIHNraXAgdGhlIGZpcnN0IG5vZGUuXG4gKiBAcGFyYW0gez9ib29sZWFufSBza2lwTGFzdCBXaGV0aGVyIG9yIG5vdCB0byBza2lwIHRoZSBsYXN0IG5vZGUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZVBhcmVudFBhdGgoc3RhcnQsIHN0b3AsIGNiLCBhcmcsIHNraXBGaXJzdCwgc2tpcExhc3QpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAnJztcbiAgc3RvcCA9IHN0b3AgfHwgJyc7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgc3RhcnQgIT09IHN0b3AsXG4gICAgJ3RyYXZlcnNlUGFyZW50UGF0aCguLi4pOiBDYW5ub3QgdHJhdmVyc2UgZnJvbSBhbmQgdG8gdGhlIHNhbWUgSUQsIGAlc2AuJyxcbiAgICBzdGFydFxuICApIDogaW52YXJpYW50KHN0YXJ0ICE9PSBzdG9wKSk7XG4gIHZhciB0cmF2ZXJzZVVwID0gaXNBbmNlc3RvcklET2Yoc3RvcCwgc3RhcnQpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHRyYXZlcnNlVXAgfHwgaXNBbmNlc3RvcklET2Yoc3RhcnQsIHN0b3ApLFxuICAgICd0cmF2ZXJzZVBhcmVudFBhdGgoJXMsICVzLCAuLi4pOiBDYW5ub3QgdHJhdmVyc2UgZnJvbSB0d28gSURzIHRoYXQgZG8gJyArXG4gICAgJ25vdCBoYXZlIGEgcGFyZW50IHBhdGguJyxcbiAgICBzdGFydCxcbiAgICBzdG9wXG4gICkgOiBpbnZhcmlhbnQodHJhdmVyc2VVcCB8fCBpc0FuY2VzdG9ySURPZihzdGFydCwgc3RvcCkpKTtcbiAgLy8gVHJhdmVyc2UgZnJvbSBgc3RhcnRgIHRvIGBzdG9wYCBvbmUgZGVwdGggYXQgYSB0aW1lLlxuICB2YXIgZGVwdGggPSAwO1xuICB2YXIgdHJhdmVyc2UgPSB0cmF2ZXJzZVVwID8gZ2V0UGFyZW50SUQgOiBnZXROZXh0RGVzY2VuZGFudElEO1xuICBmb3IgKHZhciBpZCA9IHN0YXJ0OyAvKiB1bnRpbCBicmVhayAqLzsgaWQgPSB0cmF2ZXJzZShpZCwgc3RvcCkpIHtcbiAgICB2YXIgcmV0O1xuICAgIGlmICgoIXNraXBGaXJzdCB8fCBpZCAhPT0gc3RhcnQpICYmICghc2tpcExhc3QgfHwgaWQgIT09IHN0b3ApKSB7XG4gICAgICByZXQgPSBjYihpZCwgdHJhdmVyc2VVcCwgYXJnKTtcbiAgICB9XG4gICAgaWYgKHJldCA9PT0gZmFsc2UgfHwgaWQgPT09IHN0b3ApIHtcbiAgICAgIC8vIE9ubHkgYnJlYWsgLy9hZnRlci8vIHZpc2l0aW5nIGBzdG9wYC5cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgZGVwdGgrKyA8IE1BWF9UUkVFX0RFUFRILFxuICAgICAgJ3RyYXZlcnNlUGFyZW50UGF0aCglcywgJXMsIC4uLik6IERldGVjdGVkIGFuIGluZmluaXRlIGxvb3Agd2hpbGUgJyArXG4gICAgICAndHJhdmVyc2luZyB0aGUgUmVhY3QgRE9NIElEIHRyZWUuIFRoaXMgbWF5IGJlIGR1ZSB0byBtYWxmb3JtZWQgSURzOiAlcycsXG4gICAgICBzdGFydCwgc3RvcFxuICAgICkgOiBpbnZhcmlhbnQoZGVwdGgrKyA8IE1BWF9UUkVFX0RFUFRIKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBJRHMgYXNzaWduZWQgdG8gRE9NIHJlcHJlc2VudGF0aW9ucyBvZiBSZWFjdCBjb21wb25lbnRzLiBUaGlzXG4gKiB1c2VzIGEgc3BlY2lmaWMgc2NoZW1lIGluIG9yZGVyIHRvIHRyYXZlcnNlIHRoZSBET00gZWZmaWNpZW50bHkgKGUuZy4gaW5cbiAqIG9yZGVyIHRvIHNpbXVsYXRlIGV2ZW50cykuXG4gKlxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIFJlYWN0IHJvb3QgSURcbiAgICogQHJldHVybiB7c3RyaW5nfSBBIFJlYWN0IHJvb3QgSUQuXG4gICAqL1xuICBjcmVhdGVSZWFjdFJvb3RJRDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGdldFJlYWN0Um9vdElEU3RyaW5nKFJlYWN0Um9vdEluZGV4LmNyZWF0ZVJlYWN0Um9vdEluZGV4KCkpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgUmVhY3QgSUQgYnkgam9pbmluZyBhIHJvb3QgSUQgd2l0aCBhIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290SUQgUm9vdCBJRCBvZiBhIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEEgY29tcG9uZW50J3MgbmFtZSAoYXMgZmxhdHRlbmVkIGNoaWxkcmVuKS5cbiAgICogQHJldHVybiB7c3RyaW5nfSBBIFJlYWN0IElELlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNyZWF0ZVJlYWN0SUQ6IGZ1bmN0aW9uKHJvb3RJRCwgbmFtZSkge1xuICAgIHJldHVybiByb290SUQgKyBuYW1lO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBET00gSUQgb2YgdGhlIFJlYWN0IGNvbXBvbmVudCB0aGF0IGlzIHRoZSByb290IG9mIHRoZSB0cmVlIHRoYXRcbiAgICogY29udGFpbnMgdGhlIFJlYWN0IGNvbXBvbmVudCB3aXRoIHRoZSBzdXBwbGllZCBET00gSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBET00gSUQgb2YgYSBSZWFjdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IERPTSBJRCBvZiB0aGUgUmVhY3QgY29tcG9uZW50IHRoYXQgaXMgdGhlIHJvb3QuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0UmVhY3RSb290SURGcm9tTm9kZUlEOiBmdW5jdGlvbihpZCkge1xuICAgIGlmIChpZCAmJiBpZC5jaGFyQXQoMCkgPT09IFNFUEFSQVRPUiAmJiBpZC5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgaW5kZXggPSBpZC5pbmRleE9mKFNFUEFSQVRPUiwgMSk7XG4gICAgICByZXR1cm4gaW5kZXggPiAtMSA/IGlkLnN1YnN0cigwLCBpbmRleCkgOiBpZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0aGUgSUQgaGllcmFyY2h5IGFuZCBpbnZva2VzIHRoZSBzdXBwbGllZCBgY2JgIG9uIGFueSBJRHMgdGhhdFxuICAgKiBzaG91bGQgd291bGQgcmVjZWl2ZSBhIGBtb3VzZUVudGVyYCBvciBgbW91c2VMZWF2ZWAgZXZlbnQuXG4gICAqXG4gICAqIE5PVEU6IERvZXMgbm90IGludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhlIG5lYXJlc3QgY29tbW9uIGFuY2VzdG9yIGJlY2F1c2VcbiAgICogbm90aGluZyBcImVudGVyZWRcIiBvciBcImxlZnRcIiB0aGF0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsZWF2ZUlEIElEIGJlaW5nIGxlZnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbnRlcklEIElEIGJlaW5nIGVudGVyZWQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNiIENhbGxiYWNrIHRvIGludm9rZSBvbiBlYWNoIGVudGVyZWQvbGVmdCBJRC5cbiAgICogQHBhcmFtIHsqfSB1cEFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggb24gbGVmdCBJRHMuXG4gICAqIEBwYXJhbSB7Kn0gZG93bkFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggb24gZW50ZXJlZCBJRHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhdmVyc2VFbnRlckxlYXZlOiBmdW5jdGlvbihsZWF2ZUlELCBlbnRlcklELCBjYiwgdXBBcmcsIGRvd25BcmcpIHtcbiAgICB2YXIgYW5jZXN0b3JJRCA9IGdldEZpcnN0Q29tbW9uQW5jZXN0b3JJRChsZWF2ZUlELCBlbnRlcklEKTtcbiAgICBpZiAoYW5jZXN0b3JJRCAhPT0gbGVhdmVJRCkge1xuICAgICAgdHJhdmVyc2VQYXJlbnRQYXRoKGxlYXZlSUQsIGFuY2VzdG9ySUQsIGNiLCB1cEFyZywgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYW5jZXN0b3JJRCAhPT0gZW50ZXJJRCkge1xuICAgICAgdHJhdmVyc2VQYXJlbnRQYXRoKGFuY2VzdG9ySUQsIGVudGVySUQsIGNiLCBkb3duQXJnLCB0cnVlLCBmYWxzZSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBTaW11bGF0ZXMgdGhlIHRyYXZlcnNhbCBvZiBhIHR3by1waGFzZSwgY2FwdHVyZS9idWJibGUgZXZlbnQgZGlzcGF0Y2guXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgdHJhdmVyc2FsIGhhcHBlbnMgb24gSURzIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElEIElEIG9mIHRoZSB0YXJnZXQgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgdG8gaW52b2tlLlxuICAgKiBAcGFyYW0geyp9IGFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGguXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhdmVyc2VUd29QaGFzZTogZnVuY3Rpb24odGFyZ2V0SUQsIGNiLCBhcmcpIHtcbiAgICBpZiAodGFyZ2V0SUQpIHtcbiAgICAgIHRyYXZlcnNlUGFyZW50UGF0aCgnJywgdGFyZ2V0SUQsIGNiLCBhcmcsIHRydWUsIGZhbHNlKTtcbiAgICAgIHRyYXZlcnNlUGFyZW50UGF0aCh0YXJnZXRJRCwgJycsIGNiLCBhcmcsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIGEgbm9kZSBJRCwgY2FsbGluZyB0aGUgc3VwcGxpZWQgYGNiYCBmb3IgZWFjaCBhbmNlc3RvciBJRC4gRm9yXG4gICAqIGV4YW1wbGUsIHBhc3NpbmcgYC4wLiRyb3ctMC4xYCB3b3VsZCByZXN1bHQgaW4gYGNiYCBnZXR0aW5nIGNhbGxlZFxuICAgKiB3aXRoIGAuMGAsIGAuMC4kcm93LTBgLCBhbmQgYC4wLiRyb3ctMC4xYC5cbiAgICpcbiAgICogTk9URTogVGhpcyB0cmF2ZXJzYWwgaGFwcGVucyBvbiBJRHMgd2l0aG91dCB0b3VjaGluZyB0aGUgRE9NLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0SUQgSUQgb2YgdGhlIHRhcmdldCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiBDYWxsYmFjayB0byBpbnZva2UuXG4gICAqIEBwYXJhbSB7Kn0gYXJnIEFyZ3VtZW50IHRvIGludm9rZSB0aGUgY2FsbGJhY2sgd2l0aC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB0cmF2ZXJzZUFuY2VzdG9yczogZnVuY3Rpb24odGFyZ2V0SUQsIGNiLCBhcmcpIHtcbiAgICB0cmF2ZXJzZVBhcmVudFBhdGgoJycsIHRhcmdldElELCBjYiwgYXJnLCB0cnVlLCBmYWxzZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIHVuaXQgdGVzdGluZy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQ6IGdldEZpcnN0Q29tbW9uQW5jZXN0b3JJRCxcblxuICAvKipcbiAgICogRXhwb3NlZCBmb3IgdW5pdCB0ZXN0aW5nLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldE5leHREZXNjZW5kYW50SUQ6IGdldE5leHREZXNjZW5kYW50SUQsXG5cbiAgaXNBbmNlc3RvcklET2Y6IGlzQW5jZXN0b3JJRE9mLFxuXG4gIFNFUEFSQVRPUjogU0VQQVJBVE9SXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RJbnN0YW5jZUhhbmRsZXM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSSmJuTjBZVzVqWlVoaGJtUnNaWE11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWelhHNGdLaUJBZEhsd1pXTm9aV05yY3lCemRHRjBhV010YjI1c2VWeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRkpsWVdOMFVtOXZkRWx1WkdWNElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlNiMjkwU1c1a1pYaGNJaWs3WEc1Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JuWmhjaUJUUlZCQlVrRlVUMUlnUFNBbkxpYzdYRzUyWVhJZ1UwVlFRVkpCVkU5U1gweEZUa2RVU0NBOUlGTkZVRUZTUVZSUFVpNXNaVzVuZEdnN1hHNWNiaThxS2x4dUlDb2dUV0Y0YVcxMWJTQmtaWEIwYUNCdlppQjBjbUYyWlhKellXeHpJR0psWm05eVpTQjNaU0JqYjI1emFXUmxjaUIwYUdVZ2NHOXpjMmxpYVd4cGRIa2diMllnWVNCaVlXUWdTVVF1WEc0Z0tpOWNiblpoY2lCTlFWaGZWRkpGUlY5RVJWQlVTQ0E5SURFd01EdGNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0VnUkU5TklFbEVJSEJ5WldacGVDQjBieUIxYzJVZ2QyaGxiaUJ0YjNWdWRHbHVaeUJTWldGamRDQmpiMjF3YjI1bGJuUnpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQnBibVJsZUNCQklIVnVhWEYxWlNCcGJuUmxaMlZ5WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlGSmxZV04wSUhKdmIzUWdTVVF1WEc0Z0tpQkFhVzUwWlhKdVlXeGNiaUFxTDF4dVpuVnVZM1JwYjI0Z1oyVjBVbVZoWTNSU2IyOTBTVVJUZEhKcGJtY29hVzVrWlhncElIdGNiaUFnY21WMGRYSnVJRk5GVUVGU1FWUlBVaUFySUdsdVpHVjRMblJ2VTNSeWFXNW5LRE0yS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJEYUdWamEzTWdhV1lnWVNCamFHRnlZV04wWlhJZ2FXNGdkR2hsSUhOMWNIQnNhV1ZrSUVsRUlHbHpJR0VnYzJWd1lYSmhkRzl5SUc5eUlIUm9aU0JsYm1RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdsa0lFRWdVbVZoWTNRZ1JFOU5JRWxFTGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHbHVaR1Y0SUVsdVpHVjRJRzltSUhSb1pTQmphR0Z5WVdOMFpYSWdkRzhnWTJobFkyc3VYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlNCVWNuVmxJR2xtSUhSb1pTQmphR0Z5WVdOMFpYSWdhWE1nWVNCelpYQmhjbUYwYjNJZ2IzSWdaVzVrSUc5bUlIUm9aU0JKUkM1Y2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JtWjFibU4wYVc5dUlHbHpRbTkxYm1SaGNua29hV1FzSUdsdVpHVjRLU0I3WEc0Z0lISmxkSFZ5YmlCcFpDNWphR0Z5UVhRb2FXNWtaWGdwSUQwOVBTQlRSVkJCVWtGVVQxSWdmSHdnYVc1a1pYZ2dQVDA5SUdsa0xteGxibWQwYUR0Y2JuMWNibHh1THlvcVhHNGdLaUJEYUdWamEzTWdhV1lnZEdobElITjFjSEJzYVdWa0lITjBjbWx1WnlCcGN5QmhJSFpoYkdsa0lGSmxZV04wSUVSUFRTQkpSQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnUVNCU1pXRmpkQ0JFVDAwZ1NVUXNJRzFoZVdKbExseHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUIwYUdVZ2MzUnlhVzVuSUdseklHRWdkbUZzYVdRZ1VtVmhZM1FnUkU5TklFbEVMbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnYVhOV1lXeHBaRWxFS0dsa0tTQjdYRzRnSUhKbGRIVnliaUJwWkNBOVBUMGdKeWNnZkh3Z0tGeHVJQ0FnSUdsa0xtTm9ZWEpCZENnd0tTQTlQVDBnVTBWUVFWSkJWRTlTSUNZbUlHbGtMbU5vWVhKQmRDaHBaQzVzWlc1bmRHZ2dMU0F4S1NBaFBUMGdVMFZRUVZKQlZFOVNYRzRnSUNrN1hHNTlYRzVjYmk4cUtseHVJQ29nUTJobFkydHpJR2xtSUhSb1pTQm1hWEp6ZENCSlJDQnBjeUJoYmlCaGJtTmxjM1J2Y2lCdlppQnZjaUJsY1hWaGJDQjBieUIwYUdVZ2MyVmpiMjVrSUVsRUxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCaGJtTmxjM1J2Y2tsRVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdaR1Z6WTJWdVpHRnVkRWxFWEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZTQlVjblZsSUdsbUlHQmhibU5sYzNSdmNrbEVZQ0JwY3lCaGJpQmhibU5sYzNSdmNpQnZaaUJnWkdWelkyVnVaR0Z1ZEVsRVlDNWNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJwYzBGdVkyVnpkRzl5U1VSUFppaGhibU5sYzNSdmNrbEVMQ0JrWlhOalpXNWtZVzUwU1VRcElIdGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQmtaWE5qWlc1a1lXNTBTVVF1YVc1a1pYaFBaaWhoYm1ObGMzUnZja2xFS1NBOVBUMGdNQ0FtSmx4dUlDQWdJR2x6UW05MWJtUmhjbmtvWkdWelkyVnVaR0Z1ZEVsRUxDQmhibU5sYzNSdmNrbEVMbXhsYm1kMGFDbGNiaUFnS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJIWlhSeklIUm9aU0J3WVhKbGJuUWdTVVFnYjJZZ2RHaGxJSE4xY0hCc2FXVmtJRkpsWVdOMElFUlBUU0JKUkN3Z1lHbGtZQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnU1VRZ2IyWWdZU0JqYjIxd2IyNWxiblF1WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlFbEVJRzltSUhSb1pTQndZWEpsYm5Rc0lHOXlJR0Z1SUdWdGNIUjVJSE4wY21sdVp5NWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVoxYm1OMGFXOXVJR2RsZEZCaGNtVnVkRWxFS0dsa0tTQjdYRzRnSUhKbGRIVnliaUJwWkNBL0lHbGtMbk4xWW5OMGNpZ3dMQ0JwWkM1c1lYTjBTVzVrWlhoUFppaFRSVkJCVWtGVVQxSXBLU0E2SUNjbk8xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGRITWdkR2hsSUc1bGVIUWdSRTlOSUVsRUlHOXVJSFJvWlNCMGNtVmxJSEJoZEdnZ1puSnZiU0IwYUdVZ2MzVndjR3hwWldRZ1lHRnVZMlZ6ZEc5eVNVUmdJSFJ2SUhSb1pWeHVJQ29nYzNWd2NHeHBaV1FnWUdSbGMzUnBibUYwYVc5dVNVUmdMaUJKWmlCMGFHVjVJR0Z5WlNCbGNYVmhiQ3dnZEdobElFbEVJR2x6SUhKbGRIVnlibVZrTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JoYm1ObGMzUnZja2xFSUVsRUlHOW1JR0Z1SUdGdVkyVnpkRzl5SUc1dlpHVWdiMllnWUdSbGMzUnBibUYwYVc5dVNVUmdMbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdSbGMzUnBibUYwYVc5dVNVUWdTVVFnYjJZZ2RHaGxJR1JsYzNScGJtRjBhVzl1SUc1dlpHVXVYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5SUU1bGVIUWdTVVFnYjI0Z2RHaGxJSEJoZEdnZ1puSnZiU0JnWVc1alpYTjBiM0pKUkdBZ2RHOGdZR1JsYzNScGJtRjBhVzl1U1VSZ0xseHVJQ29nUUhCeWFYWmhkR1ZjYmlBcUwxeHVablZ1WTNScGIyNGdaMlYwVG1WNGRFUmxjMk5sYm1SaGJuUkpSQ2hoYm1ObGMzUnZja2xFTENCa1pYTjBhVzVoZEdsdmJrbEVLU0I3WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnYVhOV1lXeHBaRWxFS0dGdVkyVnpkRzl5U1VRcElDWW1JR2x6Vm1Gc2FXUkpSQ2hrWlhOMGFXNWhkR2x2YmtsRUtTeGNiaUFnSUNBbloyVjBUbVY0ZEVSbGMyTmxibVJoYm5SSlJDZ2xjeXdnSlhNcE9pQlNaV05sYVhabFpDQmhiaUJwYm5aaGJHbGtJRkpsWVdOMElFUlBUU0JKUkM0bkxGeHVJQ0FnSUdGdVkyVnpkRzl5U1VRc1hHNGdJQ0FnWkdWemRHbHVZWFJwYjI1SlJGeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHbHpWbUZzYVdSSlJDaGhibU5sYzNSdmNrbEVLU0FtSmlCcGMxWmhiR2xrU1VRb1pHVnpkR2x1WVhScGIyNUpSQ2twS1R0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCcGMwRnVZMlZ6ZEc5eVNVUlBaaWhoYm1ObGMzUnZja2xFTENCa1pYTjBhVzVoZEdsdmJrbEVLU3hjYmlBZ0lDQW5aMlYwVG1WNGRFUmxjMk5sYm1SaGJuUkpSQ2d1TGk0cE9pQlNaV0ZqZENCb1lYTWdiV0ZrWlNCaGJpQnBiblpoYkdsa0lHRnpjM1Z0Y0hScGIyNGdZV0p2ZFhRZ0p5QXJYRzRnSUNBZ0ozUm9aU0JFVDAwZ2FHbGxjbUZ5WTJoNUxpQkZlSEJsWTNSbFpDQmdKWE5nSUhSdklHSmxJR0Z1SUdGdVkyVnpkRzl5SUc5bUlHQWxjMkF1Snl4Y2JpQWdJQ0JoYm1ObGMzUnZja2xFTEZ4dUlDQWdJR1JsYzNScGJtRjBhVzl1U1VSY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENocGMwRnVZMlZ6ZEc5eVNVUlBaaWhoYm1ObGMzUnZja2xFTENCa1pYTjBhVzVoZEdsdmJrbEVLU2twTzF4dUlDQnBaaUFvWVc1alpYTjBiM0pKUkNBOVBUMGdaR1Z6ZEdsdVlYUnBiMjVKUkNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJoYm1ObGMzUnZja2xFTzF4dUlDQjlYRzRnSUM4dklGTnJhWEFnYjNabGNpQjBhR1VnWVc1alpYTjBiM0lnWVc1a0lIUm9aU0JwYlcxbFpHbGhkR1VnYzJWd1lYSmhkRzl5TGlCVWNtRjJaWEp6WlNCMWJuUnBiQ0IzWlNCb2FYUmNiaUFnTHk4Z1lXNXZkR2hsY2lCelpYQmhjbUYwYjNJZ2IzSWdkMlVnY21WaFkyZ2dkR2hsSUdWdVpDQnZaaUJnWkdWemRHbHVZWFJwYjI1SlJHQXVYRzRnSUhaaGNpQnpkR0Z5ZENBOUlHRnVZMlZ6ZEc5eVNVUXViR1Z1WjNSb0lDc2dVMFZRUVZKQlZFOVNYMHhGVGtkVVNEdGNiaUFnZG1GeUlHazdYRzRnSUdadmNpQW9hU0E5SUhOMFlYSjBPeUJwSUR3Z1pHVnpkR2x1WVhScGIyNUpSQzVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdsbUlDaHBjMEp2ZFc1a1lYSjVLR1JsYzNScGJtRjBhVzl1U1VRc0lHa3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2NtVjBkWEp1SUdSbGMzUnBibUYwYVc5dVNVUXVjM1ZpYzNSeUtEQXNJR2twTzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRsZEhNZ2RHaGxJRzVsWVhKbGMzUWdZMjl0Ylc5dUlHRnVZMlZ6ZEc5eUlFbEVJRzltSUhSM2J5QkpSSE11WEc0Z0tseHVJQ29nVlhOcGJtY2dkR2hwY3lCSlJDQnpZMmhsYldVc0lIUm9aU0J1WldGeVpYTjBJR052YlcxdmJpQmhibU5sYzNSdmNpQkpSQ0JwY3lCMGFHVWdiRzl1WjJWemRDQmpiMjF0YjI1Y2JpQXFJSEJ5WldacGVDQnZaaUIwYUdVZ2RIZHZJRWxFY3lCMGFHRjBJR2x0YldWa2FXRjBaV3g1SUhCeVpXTmxaR1ZrSUdFZ1hDSnRZWEpyWlhKY0lpQnBiaUJpYjNSb0lITjBjbWx1WjNNdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUc5dVpVbEVYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEhkdlNVUmNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnVG1WaGNtVnpkQ0JqYjIxdGIyNGdZVzVqWlhOMGIzSWdTVVFzSUc5eUlIUm9aU0JsYlhCMGVTQnpkSEpwYm1jZ2FXWWdibTl1WlM1Y2JpQXFJRUJ3Y21sMllYUmxYRzRnS2k5Y2JtWjFibU4wYVc5dUlHZGxkRVpwY25OMFEyOXRiVzl1UVc1alpYTjBiM0pKUkNodmJtVkpSQ3dnZEhkdlNVUXBJSHRjYmlBZ2RtRnlJRzFwYmt4bGJtZDBhQ0E5SUUxaGRHZ3ViV2x1S0c5dVpVbEVMbXhsYm1kMGFDd2dkSGR2U1VRdWJHVnVaM1JvS1R0Y2JpQWdhV1lnS0cxcGJreGxibWQwYUNBOVBUMGdNQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQW5KenRjYmlBZ2ZWeHVJQ0IyWVhJZ2JHRnpkRU52YlcxdmJrMWhjbXRsY2tsdVpHVjRJRDBnTUR0Y2JpQWdMeThnVlhObElHQThQV0FnZEc4Z2RISmhkbVZ5YzJVZ2RXNTBhV3dnZEdobElGd2lSVTlNWENJZ2IyWWdkR2hsSUhOb2IzSjBaWElnYzNSeWFXNW5MbHh1SUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOFBTQnRhVzVNWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUdsbUlDaHBjMEp2ZFc1a1lYSjVLRzl1WlVsRUxDQnBLU0FtSmlCcGMwSnZkVzVrWVhKNUtIUjNiMGxFTENCcEtTa2dlMXh1SUNBZ0lDQWdiR0Z6ZEVOdmJXMXZiazFoY210bGNrbHVaR1Y0SUQwZ2FUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHOXVaVWxFTG1Ob1lYSkJkQ2hwS1NBaFBUMGdkSGR2U1VRdVkyaGhja0YwS0drcEtTQjdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnZG1GeUlHeHZibWRsYzNSRGIyMXRiMjVKUkNBOUlHOXVaVWxFTG5OMVluTjBjaWd3TENCc1lYTjBRMjl0Ylc5dVRXRnlhMlZ5U1c1a1pYZ3BPMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJR2x6Vm1Gc2FXUkpSQ2hzYjI1blpYTjBRMjl0Ylc5dVNVUXBMRnh1SUNBZ0lDZG5aWFJHYVhKemRFTnZiVzF2YmtGdVkyVnpkRzl5U1VRb0pYTXNJQ1Z6S1RvZ1JYaHdaV04wWldRZ1lTQjJZV3hwWkNCU1pXRmpkQ0JFVDAwZ1NVUTZJQ1Z6Snl4Y2JpQWdJQ0J2Ym1WSlJDeGNiaUFnSUNCMGQyOUpSQ3hjYmlBZ0lDQnNiMjVuWlhOMFEyOXRiVzl1U1VSY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENocGMxWmhiR2xrU1VRb2JHOXVaMlZ6ZEVOdmJXMXZia2xFS1NrcE8xeHVJQ0J5WlhSMWNtNGdiRzl1WjJWemRFTnZiVzF2YmtsRU8xeHVmVnh1WEc0dktpcGNiaUFxSUZSeVlYWmxjbk5sY3lCMGFHVWdjR0Z5Wlc1MElIQmhkR2dnWW1WMGQyVmxiaUIwZDI4Z1NVUnpJQ2hsYVhSb1pYSWdkWEFnYjNJZ1pHOTNiaWt1SUZSb1pTQkpSSE1nYlhWemRGeHVJQ29nYm05MElHSmxJSFJvWlNCellXMWxMQ0JoYm1RZ2RHaGxjbVVnYlhWemRDQmxlR2x6ZENCaElIQmhjbVZ1ZENCd1lYUm9JR0psZEhkbFpXNGdkR2hsYlM0Z1NXWWdkR2hsWEc0Z0tpQmpZV3hzWW1GamF5QnlaWFIxY201eklHQm1ZV3h6WldBc0lIUnlZWFpsY25OaGJDQnBjeUJ6ZEc5d2NHVmtMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdQM04wY21sdVozMGdjM1JoY25RZ1NVUWdZWFFnZDJocFkyZ2dkRzhnYzNSaGNuUWdkSEpoZG1WeWMyRnNMbHh1SUNvZ1FIQmhjbUZ0SUhzL2MzUnlhVzVuZlNCemRHOXdJRWxFSUdGMElIZG9hV05vSUhSdklHVnVaQ0IwY21GMlpYSnpZV3d1WEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpZaUJEWVd4c1ltRmpheUIwYnlCcGJuWnZhMlVnWldGamFDQkpSQ0IzYVhSb0xseHVJQ29nUUhCaGNtRnRJSHMvWW05dmJHVmhibjBnYzJ0cGNFWnBjbk4wSUZkb1pYUm9aWElnYjNJZ2JtOTBJSFJ2SUhOcmFYQWdkR2hsSUdacGNuTjBJRzV2WkdVdVhHNGdLaUJBY0dGeVlXMGdlejlpYjI5c1pXRnVmU0J6YTJsd1RHRnpkQ0JYYUdWMGFHVnlJRzl5SUc1dmRDQjBieUJ6YTJsd0lIUm9aU0JzWVhOMElHNXZaR1V1WEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1bWRXNWpkR2x2YmlCMGNtRjJaWEp6WlZCaGNtVnVkRkJoZEdnb2MzUmhjblFzSUhOMGIzQXNJR05pTENCaGNtY3NJSE5yYVhCR2FYSnpkQ3dnYzJ0cGNFeGhjM1FwSUh0Y2JpQWdjM1JoY25RZ1BTQnpkR0Z5ZENCOGZDQW5KenRjYmlBZ2MzUnZjQ0E5SUhOMGIzQWdmSHdnSnljN1hHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ2MzUmhjblFnSVQwOUlITjBiM0FzWEc0Z0lDQWdKM1J5WVhabGNuTmxVR0Z5Wlc1MFVHRjBhQ2d1TGk0cE9pQkRZVzV1YjNRZ2RISmhkbVZ5YzJVZ1puSnZiU0JoYm1RZ2RHOGdkR2hsSUhOaGJXVWdTVVFzSUdBbGMyQXVKeXhjYmlBZ0lDQnpkR0Z5ZEZ4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0hOMFlYSjBJQ0U5UFNCemRHOXdLU2s3WEc0Z0lIWmhjaUIwY21GMlpYSnpaVlZ3SUQwZ2FYTkJibU5sYzNSdmNrbEVUMllvYzNSdmNDd2djM1JoY25RcE8xeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lIUnlZWFpsY25ObFZYQWdmSHdnYVhOQmJtTmxjM1J2Y2tsRVQyWW9jM1JoY25Rc0lITjBiM0FwTEZ4dUlDQWdJQ2QwY21GMlpYSnpaVkJoY21WdWRGQmhkR2dvSlhNc0lDVnpMQ0F1TGk0cE9pQkRZVzV1YjNRZ2RISmhkbVZ5YzJVZ1puSnZiU0IwZDI4Z1NVUnpJSFJvWVhRZ1pHOGdKeUFyWEc0Z0lDQWdKMjV2ZENCb1lYWmxJR0VnY0dGeVpXNTBJSEJoZEdndUp5eGNiaUFnSUNCemRHRnlkQ3hjYmlBZ0lDQnpkRzl3WEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvZEhKaGRtVnljMlZWY0NCOGZDQnBjMEZ1WTJWemRHOXlTVVJQWmloemRHRnlkQ3dnYzNSdmNDa3BLVHRjYmlBZ0x5OGdWSEpoZG1WeWMyVWdabkp2YlNCZ2MzUmhjblJnSUhSdklHQnpkRzl3WUNCdmJtVWdaR1Z3ZEdnZ1lYUWdZU0IwYVcxbExseHVJQ0IyWVhJZ1pHVndkR2dnUFNBd08xeHVJQ0IyWVhJZ2RISmhkbVZ5YzJVZ1BTQjBjbUYyWlhKelpWVndJRDhnWjJWMFVHRnlaVzUwU1VRZ09pQm5aWFJPWlhoMFJHVnpZMlZ1WkdGdWRFbEVPMXh1SUNCbWIzSWdLSFpoY2lCcFpDQTlJSE4wWVhKME95QXZLaUIxYm5ScGJDQmljbVZoYXlBcUx6c2dhV1FnUFNCMGNtRjJaWEp6WlNocFpDd2djM1J2Y0NrcElIdGNiaUFnSUNCMllYSWdjbVYwTzF4dUlDQWdJR2xtSUNnb0lYTnJhWEJHYVhKemRDQjhmQ0JwWkNBaFBUMGdjM1JoY25RcElDWW1JQ2doYzJ0cGNFeGhjM1FnZkh3Z2FXUWdJVDA5SUhOMGIzQXBLU0I3WEc0Z0lDQWdJQ0J5WlhRZ1BTQmpZaWhwWkN3Z2RISmhkbVZ5YzJWVmNDd2dZWEpuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hKbGRDQTlQVDBnWm1Gc2MyVWdmSHdnYVdRZ1BUMDlJSE4wYjNBcElIdGNiaUFnSUNBZ0lDOHZJRTl1YkhrZ1luSmxZV3NnTHk5aFpuUmxjaTh2SUhacGMybDBhVzVuSUdCemRHOXdZQzVjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdaR1Z3ZEdnckt5QThJRTFCV0Y5VVVrVkZYMFJGVUZSSUxGeHVJQ0FnSUNBZ0ozUnlZWFpsY25ObFVHRnlaVzUwVUdGMGFDZ2xjeXdnSlhNc0lDNHVMaWs2SUVSbGRHVmpkR1ZrSUdGdUlHbHVabWx1YVhSbElHeHZiM0FnZDJocGJHVWdKeUFyWEc0Z0lDQWdJQ0FuZEhKaGRtVnljMmx1WnlCMGFHVWdVbVZoWTNRZ1JFOU5JRWxFSUhSeVpXVXVJRlJvYVhNZ2JXRjVJR0psSUdSMVpTQjBieUJ0WVd4bWIzSnRaV1FnU1VSek9pQWxjeWNzWEc0Z0lDQWdJQ0J6ZEdGeWRDd2djM1J2Y0Z4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1pHVndkR2dyS3lBOElFMUJXRjlVVWtWRlgwUkZVRlJJS1NrN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQk5ZVzVoWjJWeklIUm9aU0JKUkhNZ1lYTnphV2R1WldRZ2RHOGdSRTlOSUhKbGNISmxjMlZ1ZEdGMGFXOXVjeUJ2WmlCU1pXRmpkQ0JqYjIxd2IyNWxiblJ6TGlCVWFHbHpYRzRnS2lCMWMyVnpJR0VnYzNCbFkybG1hV01nYzJOb1pXMWxJR2x1SUc5eVpHVnlJSFJ2SUhSeVlYWmxjbk5sSUhSb1pTQkVUMDBnWldabWFXTnBaVzUwYkhrZ0tHVXVaeTRnYVc1Y2JpQXFJRzl5WkdWeUlIUnZJSE5wYlhWc1lYUmxJR1YyWlc1MGN5a3VYRzRnS2x4dUlDb2dRR2x1ZEdWeWJtRnNYRzRnS2k5Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1EyOXVjM1J5ZFdOMGN5QmhJRkpsWVdOMElISnZiM1FnU1VSY2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JCSUZKbFlXTjBJSEp2YjNRZ1NVUXVYRzRnSUNBcUwxeHVJQ0JqY21WaGRHVlNaV0ZqZEZKdmIzUkpSRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJR2RsZEZKbFlXTjBVbTl2ZEVsRVUzUnlhVzVuS0ZKbFlXTjBVbTl2ZEVsdVpHVjRMbU55WldGMFpWSmxZV04wVW05dmRFbHVaR1Y0S0NrcE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEYjI1emRISjFZM1J6SUdFZ1VtVmhZM1FnU1VRZ1lua2dhbTlwYm1sdVp5QmhJSEp2YjNRZ1NVUWdkMmwwYUNCaElHNWhiV1V1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCeWIyOTBTVVFnVW05dmRDQkpSQ0J2WmlCaElIQmhjbVZ1ZENCamIyMXdiMjVsYm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbElFRWdZMjl0Y0c5dVpXNTBKM01nYm1GdFpTQW9ZWE1nWm14aGRIUmxibVZrSUdOb2FXeGtjbVZ1S1M1Y2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JCSUZKbFlXTjBJRWxFTGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUdOeVpXRjBaVkpsWVdOMFNVUTZJR1oxYm1OMGFXOXVLSEp2YjNSSlJDd2dibUZ0WlNrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ5YjI5MFNVUWdLeUJ1WVcxbE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJIWlhSeklIUm9aU0JFVDAwZ1NVUWdiMllnZEdobElGSmxZV04wSUdOdmJYQnZibVZ1ZENCMGFHRjBJR2x6SUhSb1pTQnliMjkwSUc5bUlIUm9aU0IwY21WbElIUm9ZWFJjYmlBZ0lDb2dZMjl1ZEdGcGJuTWdkR2hsSUZKbFlXTjBJR052YlhCdmJtVnVkQ0IzYVhSb0lIUm9aU0J6ZFhCd2JHbGxaQ0JFVDAwZ1NVUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCRVQwMGdTVVFnYjJZZ1lTQlNaV0ZqZENCamIyMXdiMjVsYm5RdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZXo5emRISnBibWQ5SUVSUFRTQkpSQ0J2WmlCMGFHVWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElIUm9ZWFFnYVhNZ2RHaGxJSEp2YjNRdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1oyVjBVbVZoWTNSU2IyOTBTVVJHY205dFRtOWtaVWxFT2lCbWRXNWpkR2x2YmlocFpDa2dlMXh1SUNBZ0lHbG1JQ2hwWkNBbUppQnBaQzVqYUdGeVFYUW9NQ2tnUFQwOUlGTkZVRUZTUVZSUFVpQW1KaUJwWkM1c1pXNW5kR2dnUGlBeEtTQjdYRzRnSUNBZ0lDQjJZWElnYVc1a1pYZ2dQU0JwWkM1cGJtUmxlRTltS0ZORlVFRlNRVlJQVWl3Z01TazdYRzRnSUNBZ0lDQnlaWFIxY200Z2FXNWtaWGdnUGlBdE1TQS9JR2xrTG5OMVluTjBjaWd3TENCcGJtUmxlQ2tnT2lCcFpEdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJ5WVhabGNuTmxjeUIwYUdVZ1NVUWdhR2xsY21GeVkyaDVJR0Z1WkNCcGJuWnZhMlZ6SUhSb1pTQnpkWEJ3YkdsbFpDQmdZMkpnSUc5dUlHRnVlU0JKUkhNZ2RHaGhkRnh1SUNBZ0tpQnphRzkxYkdRZ2QyOTFiR1FnY21WalpXbDJaU0JoSUdCdGIzVnpaVVZ1ZEdWeVlDQnZjaUJnYlc5MWMyVk1aV0YyWldBZ1pYWmxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFNVBWRVU2SUVSdlpYTWdibTkwSUdsdWRtOXJaU0IwYUdVZ1kyRnNiR0poWTJzZ2IyNGdkR2hsSUc1bFlYSmxjM1FnWTI5dGJXOXVJR0Z1WTJWemRHOXlJR0psWTJGMWMyVmNiaUFnSUNvZ2JtOTBhR2x1WnlCY0ltVnVkR1Z5WldSY0lpQnZjaUJjSW14bFpuUmNJaUIwYUdGMElHVnNaVzFsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnNaV0YyWlVsRUlFbEVJR0psYVc1bklHeGxablF1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmxiblJsY2tsRUlFbEVJR0psYVc1bklHVnVkR1Z5WldRdVhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjU5SUdOaUlFTmhiR3hpWVdOcklIUnZJR2x1ZG05clpTQnZiaUJsWVdOb0lHVnVkR1Z5WldRdmJHVm1kQ0JKUkM1Y2JpQWdJQ29nUUhCaGNtRnRJSHNxZlNCMWNFRnlaeUJCY21kMWJXVnVkQ0IwYnlCcGJuWnZhMlVnZEdobElHTmhiR3hpWVdOcklIZHBkR2dnYjI0Z2JHVm1kQ0JKUkhNdVhHNGdJQ0FxSUVCd1lYSmhiU0I3S24wZ1pHOTNia0Z5WnlCQmNtZDFiV1Z1ZENCMGJ5QnBiblp2YTJVZ2RHaGxJR05oYkd4aVlXTnJJSGRwZEdnZ2IyNGdaVzUwWlhKbFpDQkpSSE11WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnZEhKaGRtVnljMlZGYm5SbGNreGxZWFpsT2lCbWRXNWpkR2x2Ymloc1pXRjJaVWxFTENCbGJuUmxja2xFTENCallpd2dkWEJCY21jc0lHUnZkMjVCY21jcElIdGNiaUFnSUNCMllYSWdZVzVqWlhOMGIzSkpSQ0E5SUdkbGRFWnBjbk4wUTI5dGJXOXVRVzVqWlhOMGIzSkpSQ2hzWldGMlpVbEVMQ0JsYm5SbGNrbEVLVHRjYmlBZ0lDQnBaaUFvWVc1alpYTjBiM0pKUkNBaFBUMGdiR1ZoZG1WSlJDa2dlMXh1SUNBZ0lDQWdkSEpoZG1WeWMyVlFZWEpsYm5SUVlYUm9LR3hsWVhabFNVUXNJR0Z1WTJWemRHOXlTVVFzSUdOaUxDQjFjRUZ5Wnl3Z1ptRnNjMlVzSUhSeWRXVXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZVzVqWlhOMGIzSkpSQ0FoUFQwZ1pXNTBaWEpKUkNrZ2UxeHVJQ0FnSUNBZ2RISmhkbVZ5YzJWUVlYSmxiblJRWVhSb0tHRnVZMlZ6ZEc5eVNVUXNJR1Z1ZEdWeVNVUXNJR05pTENCa2IzZHVRWEpuTENCMGNuVmxMQ0JtWVd4elpTazdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJUYVcxMWJHRjBaWE1nZEdobElIUnlZWFpsY25OaGJDQnZaaUJoSUhSM2J5MXdhR0Z6WlN3Z1kyRndkSFZ5WlM5aWRXSmliR1VnWlhabGJuUWdaR2x6Y0dGMFkyZ3VYRzRnSUNBcVhHNGdJQ0FxSUU1UFZFVTZJRlJvYVhNZ2RISmhkbVZ5YzJGc0lHaGhjSEJsYm5NZ2IyNGdTVVJ6SUhkcGRHaHZkWFFnZEc5MVkyaHBibWNnZEdobElFUlBUUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhSaGNtZGxkRWxFSUVsRUlHOW1JSFJvWlNCMFlYSm5aWFFnYm05a1pTNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ1kySWdRMkZzYkdKaFkyc2dkRzhnYVc1MmIydGxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2V5cDlJR0Z5WnlCQmNtZDFiV1Z1ZENCMGJ5QnBiblp2YTJVZ2RHaGxJR05oYkd4aVlXTnJJSGRwZEdndVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ2RISmhkbVZ5YzJWVWQyOVFhR0Z6WlRvZ1puVnVZM1JwYjI0b2RHRnlaMlYwU1VRc0lHTmlMQ0JoY21jcElIdGNiaUFnSUNCcFppQW9kR0Z5WjJWMFNVUXBJSHRjYmlBZ0lDQWdJSFJ5WVhabGNuTmxVR0Z5Wlc1MFVHRjBhQ2duSnl3Z2RHRnlaMlYwU1VRc0lHTmlMQ0JoY21jc0lIUnlkV1VzSUdaaGJITmxLVHRjYmlBZ0lDQWdJSFJ5WVhabGNuTmxVR0Z5Wlc1MFVHRjBhQ2gwWVhKblpYUkpSQ3dnSnljc0lHTmlMQ0JoY21jc0lHWmhiSE5sTENCMGNuVmxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZSeVlYWmxjbk5sSUdFZ2JtOWtaU0JKUkN3Z1kyRnNiR2x1WnlCMGFHVWdjM1Z3Y0d4cFpXUWdZR05pWUNCbWIzSWdaV0ZqYUNCaGJtTmxjM1J2Y2lCSlJDNGdSbTl5WEc0Z0lDQXFJR1Y0WVcxd2JHVXNJSEJoYzNOcGJtY2dZQzR3TGlSeWIzY3RNQzR4WUNCM2IzVnNaQ0J5WlhOMWJIUWdhVzRnWUdOaVlDQm5aWFIwYVc1bklHTmhiR3hsWkZ4dUlDQWdLaUIzYVhSb0lHQXVNR0FzSUdBdU1DNGtjbTkzTFRCZ0xDQmhibVFnWUM0d0xpUnliM2N0TUM0eFlDNWNiaUFnSUNwY2JpQWdJQ29nVGs5VVJUb2dWR2hwY3lCMGNtRjJaWEp6WVd3Z2FHRndjR1Z1Y3lCdmJpQkpSSE1nZDJsMGFHOTFkQ0IwYjNWamFHbHVaeUIwYUdVZ1JFOU5MbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEdGeVoyVjBTVVFnU1VRZ2IyWWdkR2hsSUhSaGNtZGxkQ0J1YjJSbExseHVJQ0FnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCallpQkRZV3hzWW1GamF5QjBieUJwYm5admEyVXVYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdZWEpuSUVGeVozVnRaVzUwSUhSdklHbHVkbTlyWlNCMGFHVWdZMkZzYkdKaFkyc2dkMmwwYUM1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCMGNtRjJaWEp6WlVGdVkyVnpkRzl5Y3pvZ1puVnVZM1JwYjI0b2RHRnlaMlYwU1VRc0lHTmlMQ0JoY21jcElIdGNiaUFnSUNCMGNtRjJaWEp6WlZCaGNtVnVkRkJoZEdnb0p5Y3NJSFJoY21kbGRFbEVMQ0JqWWl3Z1lYSm5MQ0IwY25WbExDQm1ZV3h6WlNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVY0Y0c5elpXUWdabTl5SUhWdWFYUWdkR1Z6ZEdsdVp5NWNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ292WEc0Z0lGOW5aWFJHYVhKemRFTnZiVzF2YmtGdVkyVnpkRzl5U1VRNklHZGxkRVpwY25OMFEyOXRiVzl1UVc1alpYTjBiM0pKUkN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUlhod2IzTmxaQ0JtYjNJZ2RXNXBkQ0IwWlhOMGFXNW5MbHh1SUNBZ0tpQkFjSEpwZG1GMFpWeHVJQ0FnS2k5Y2JpQWdYMmRsZEU1bGVIUkVaWE5qWlc1a1lXNTBTVVE2SUdkbGRFNWxlSFJFWlhOalpXNWtZVzUwU1VRc1hHNWNiaUFnYVhOQmJtTmxjM1J2Y2tsRVQyWTZJR2x6UVc1alpYTjBiM0pKUkU5bUxGeHVYRzRnSUZORlVFRlNRVlJQVWpvZ1UwVlFRVkpCVkU5U1hHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JKYm5OMFlXNWpaVWhoYm1Sc1pYTTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEluc3RhbmNlTWFwXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICovXG5cbi8vIFRPRE86IFJlcGxhY2UgdGhpcyB3aXRoIEVTNjogdmFyIFJlYWN0SW5zdGFuY2VNYXAgPSBuZXcgTWFwKCk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHtcblxuICAvKipcbiAgICogVGhpcyBBUEkgc2hvdWxkIGJlIGNhbGxlZCBgZGVsZXRlYCBidXQgd2UnZCBoYXZlIHRvIG1ha2Ugc3VyZSB0byBhbHdheXNcbiAgICogdHJhbnNmb3JtIHRoZXNlIHRvIHN0cmluZ3MgZm9yIElFIHN1cHBvcnQuIFdoZW4gdGhpcyB0cmFuc2Zvcm0gaXMgZnVsbHlcbiAgICogc3VwcG9ydGVkIHdlIGNhbiByZW5hbWUgaXQuXG4gICAqL1xuICByZW1vdmU6IGZ1bmN0aW9uKGtleSkge1xuICAgIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICB9LFxuXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlO1xuICB9LFxuXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlICE9PSB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAga2V5Ll9yZWFjdEludGVybmFsSW5zdGFuY2UgPSB2YWx1ZTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5zdGFuY2VNYXA7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0TGlmZUN5Y2xlXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIG1hbmFnZXMgdGhlIGJvb2trZWVwaW5nIHdoZW4gYSBjb21wb25lbnQgaXMgaW4gdGhlIHByb2Nlc3NcbiAqIG9mIGJlaW5nIG1vdW50ZWQgb3IgYmVpbmcgdW5tb3VudGVkLiBUaGlzIGlzIHVzZWQgYXMgYSB3YXkgdG8gZW5mb3JjZVxuICogaW52YXJpYW50cyAob3Igd2FybmluZ3MpIHdoZW4gaXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGNhbGxcbiAqIHNldFN0YXRlL2ZvcmNlVXBkYXRlLlxuICpcbiAqIGN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2U6IER1cmluZyB0aGUgY29uc3RydWN0aW9uIHBoYXNlLCBpdCBpcyBub3QgcG9zc2libGVcbiAqIHRvIHRyaWdnZXIgYW4gdXBkYXRlIHNpbmNlIHRoZSBpbnN0YW5jZSBpcyBub3QgZnVsbHkgbW91bnRlZCB5ZXQuIEhvd2V2ZXIsIHdlXG4gKiBjdXJyZW50bHkgYWxsb3cgdGhpcyBhcyBhIGNvbnZlbmllbmNlIGZvciBtdXRhdGluZyB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAqXG4gKiBjdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2U6IER1cmluZyB0aGUgdW5tb3VudGluZyBwaGFzZSwgdGhlIGluc3RhbmNlIGlzXG4gKiBzdGlsbCBtb3VudGVkIGFuZCBjYW4gdGhlcmVmb3JlIHNjaGVkdWxlIGFuIHVwZGF0ZS4gSG93ZXZlciwgdGhpcyBpcyBub3RcbiAqIHJlY29tbWVuZGVkIGFuZCBwcm9iYWJseSBhbiBlcnJvciBzaW5jZSBpdCdzIGFib3V0IHRvIGJlIHVubW91bnRlZC5cbiAqIFRoZXJlZm9yZSB3ZSBzdGlsbCB3YW50IHRvIHRyaWdnZXIgaW4gYW4gZXJyb3IgZm9yIHRoYXQgY2FzZS5cbiAqL1xuXG52YXIgUmVhY3RMaWZlQ3ljbGUgPSB7XG4gIGN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2U6IG51bGwsXG4gIGN1cnJlbnRseVVubW91bnRpbmdJbnN0YW5jZTogbnVsbFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdExpZmVDeWNsZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdExpbmtcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlYWN0TGluayBlbmNhcHN1bGF0ZXMgYSBjb21tb24gcGF0dGVybiBpbiB3aGljaCBhIGNvbXBvbmVudCB3YW50cyB0byBtb2RpZnlcbiAqIGEgcHJvcCByZWNlaXZlZCBmcm9tIGl0cyBwYXJlbnQuIFJlYWN0TGluayBhbGxvd3MgdGhlIHBhcmVudCB0byBwYXNzIGRvd24gYVxuICogdmFsdWUgY291cGxlZCB3aXRoIGEgY2FsbGJhY2sgdGhhdCwgd2hlbiBpbnZva2VkLCBleHByZXNzZXMgYW4gaW50ZW50IHRvXG4gKiBtb2RpZnkgdGhhdCB2YWx1ZS4gRm9yIGV4YW1wbGU6XG4gKlxuICogUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICogICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkge1xuICogICAgIHJldHVybiB7dmFsdWU6ICcnfTtcbiAqICAgfSxcbiAqICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICB2YXIgdmFsdWVMaW5rID0gbmV3IFJlYWN0TGluayh0aGlzLnN0YXRlLnZhbHVlLCB0aGlzLl9oYW5kbGVWYWx1ZUNoYW5nZSk7XG4gKiAgICAgcmV0dXJuIDxpbnB1dCB2YWx1ZUxpbms9e3ZhbHVlTGlua30gLz47XG4gKiAgIH0sXG4gKiAgIHRoaXMuX2hhbmRsZVZhbHVlQ2hhbmdlOiBmdW5jdGlvbihuZXdWYWx1ZSkge1xuICogICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiBuZXdWYWx1ZX0pO1xuICogICB9XG4gKiB9KTtcbiAqXG4gKiBXZSBoYXZlIHByb3ZpZGVkIHNvbWUgc3VnYXJ5IG1peGlucyB0byBtYWtlIHRoZSBjcmVhdGlvbiBhbmRcbiAqIGNvbnN1bXB0aW9uIG9mIFJlYWN0TGluayBlYXNpZXI7IHNlZSBMaW5rZWRWYWx1ZVV0aWxzIGFuZCBMaW5rZWRTdGF0ZU1peGluLlxuICovXG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoXCIuL1JlYWN0XCIpO1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbGlua1xuICogQHBhcmFtIHtmdW5jdGlvbn0gcmVxdWVzdENoYW5nZSBjYWxsYmFjayB0byByZXF1ZXN0IGEgY2hhbmdlXG4gKi9cbmZ1bmN0aW9uIFJlYWN0TGluayh2YWx1ZSwgcmVxdWVzdENoYW5nZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIHRoaXMucmVxdWVzdENoYW5nZSA9IHJlcXVlc3RDaGFuZ2U7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFByb3BUeXBlIHRoYXQgZW5mb3JjZXMgdGhlIFJlYWN0TGluayBBUEkgYW5kIG9wdGlvbmFsbHkgY2hlY2tzIHRoZVxuICogdHlwZSBvZiB0aGUgdmFsdWUgYmVpbmcgcGFzc2VkIGluc2lkZSB0aGUgbGluay4gRXhhbXBsZTpcbiAqXG4gKiBNeUNvbXBvbmVudC5wcm9wVHlwZXMgPSB7XG4gKiAgIHRhYkluZGV4TGluazogUmVhY3RMaW5rLlByb3BUeXBlcy5saW5rKFJlYWN0LlByb3BUeXBlcy5udW1iZXIpXG4gKiB9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtUeXBlQ2hlY2tlcihsaW5rVHlwZSkge1xuICB2YXIgc2hhcGVzID0ge1xuICAgIHZhbHVlOiB0eXBlb2YgbGlua1R5cGUgPT09ICd1bmRlZmluZWQnID9cbiAgICAgIFJlYWN0LlByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCA6XG4gICAgICBsaW5rVHlwZS5pc1JlcXVpcmVkLFxuICAgIHJlcXVlc3RDaGFuZ2U6IFJlYWN0LlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbiAgfTtcbiAgcmV0dXJuIFJlYWN0LlByb3BUeXBlcy5zaGFwZShzaGFwZXMpO1xufVxuXG5SZWFjdExpbmsuUHJvcFR5cGVzID0ge1xuICBsaW5rOiBjcmVhdGVMaW5rVHlwZUNoZWNrZXJcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RMaW5rO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0TWFya3VwQ2hlY2tzdW1cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBhZGxlcjMyID0gcmVxdWlyZShcIi4vYWRsZXIzMlwiKTtcblxudmFyIFJlYWN0TWFya3VwQ2hlY2tzdW0gPSB7XG4gIENIRUNLU1VNX0FUVFJfTkFNRTogJ2RhdGEtcmVhY3QtY2hlY2tzdW0nLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIE1hcmt1cCBzdHJpbmdcbiAgICogQHJldHVybiB7c3RyaW5nfSBNYXJrdXAgc3RyaW5nIHdpdGggY2hlY2tzdW0gYXR0cmlidXRlIGF0dGFjaGVkXG4gICAqL1xuICBhZGRDaGVja3N1bVRvTWFya3VwOiBmdW5jdGlvbihtYXJrdXApIHtcbiAgICB2YXIgY2hlY2tzdW0gPSBhZGxlcjMyKG1hcmt1cCk7XG4gICAgcmV0dXJuIG1hcmt1cC5yZXBsYWNlKFxuICAgICAgJz4nLFxuICAgICAgJyAnICsgUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUUgKyAnPVwiJyArIGNoZWNrc3VtICsgJ1wiPidcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIHRvIHVzZVxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgcm9vdCBSZWFjdCBlbGVtZW50XG4gICAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIG9yIG5vdCB0aGUgbWFya3VwIGlzIHRoZSBzYW1lXG4gICAqL1xuICBjYW5SZXVzZU1hcmt1cDogZnVuY3Rpb24obWFya3VwLCBlbGVtZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nQ2hlY2tzdW0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcbiAgICAgIFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FXG4gICAgKTtcbiAgICBleGlzdGluZ0NoZWNrc3VtID0gZXhpc3RpbmdDaGVja3N1bSAmJiBwYXJzZUludChleGlzdGluZ0NoZWNrc3VtLCAxMCk7XG4gICAgdmFyIG1hcmt1cENoZWNrc3VtID0gYWRsZXIzMihtYXJrdXApO1xuICAgIHJldHVybiBtYXJrdXBDaGVja3N1bSA9PT0gZXhpc3RpbmdDaGVja3N1bTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE1hcmt1cENoZWNrc3VtO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE1vdW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcIik7XG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKFwiLi9SZWFjdEN1cnJlbnRPd25lclwiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50VmFsaWRhdG9yXCIpO1xudmFyIFJlYWN0RW1wdHlDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVtcHR5Q29tcG9uZW50XCIpO1xudmFyIFJlYWN0SW5zdGFuY2VIYW5kbGVzID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXNcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG52YXIgUmVhY3RNYXJrdXBDaGVja3N1bSA9IHJlcXVpcmUoXCIuL1JlYWN0TWFya3VwQ2hlY2tzdW1cIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlclwiKTtcbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVRdWV1ZVwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG5cbnZhciBlbXB0eU9iamVjdCA9IHJlcXVpcmUoXCIuL2VtcHR5T2JqZWN0XCIpO1xudmFyIGNvbnRhaW5zTm9kZSA9IHJlcXVpcmUoXCIuL2NvbnRhaW5zTm9kZVwiKTtcbnZhciBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIgPSByZXF1aXJlKFwiLi9nZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXJcIik7XG52YXIgaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnRcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHNldElubmVySFRNTCA9IHJlcXVpcmUoXCIuL3NldElubmVySFRNTFwiKTtcbnZhciBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgU0VQQVJBVE9SID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuU0VQQVJBVE9SO1xuXG52YXIgQVRUUl9OQU1FID0gRE9NUHJvcGVydHkuSURfQVRUUklCVVRFX05BTUU7XG52YXIgbm9kZUNhY2hlID0ge307XG5cbnZhciBFTEVNRU5UX05PREVfVFlQRSA9IDE7XG52YXIgRE9DX05PREVfVFlQRSA9IDk7XG5cbi8qKiBNYXBwaW5nIGZyb20gcmVhY3RSb290SUQgdG8gUmVhY3QgY29tcG9uZW50IGluc3RhbmNlLiAqL1xudmFyIGluc3RhbmNlc0J5UmVhY3RSb290SUQgPSB7fTtcblxuLyoqIE1hcHBpbmcgZnJvbSByZWFjdFJvb3RJRCB0byBgY29udGFpbmVyYCBub2Rlcy4gKi9cbnZhciBjb250YWluZXJzQnlSZWFjdFJvb3RJRCA9IHt9O1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIC8qKiBfX0RFVl9fLW9ubHkgbWFwcGluZyBmcm9tIHJlYWN0Um9vdElEIHRvIHJvb3QgZWxlbWVudHMuICovXG4gIHZhciByb290RWxlbWVudHNCeVJlYWN0Um9vdElEID0ge307XG59XG5cbi8vIFVzZWQgdG8gc3RvcmUgYnJlYWR0aC1maXJzdCBzZWFyY2ggc3RhdGUgaW4gZmluZENvbXBvbmVudFJvb3QuXG52YXIgZmluZENvbXBvbmVudFJvb3RSZXVzYWJsZUFycmF5ID0gW107XG5cbi8qKlxuICogRmluZHMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXJcbiAqIHRoYXQncyBub3QgY29tbW9uIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzLlxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgd2hlcmUgdGhlIHN0cmluZ3MgZGl2ZXJnZVxuICovXG5mdW5jdGlvbiBmaXJzdERpZmZlcmVuY2VJbmRleChzdHJpbmcxLCBzdHJpbmcyKSB7XG4gIHZhciBtaW5MZW4gPSBNYXRoLm1pbihzdHJpbmcxLmxlbmd0aCwgc3RyaW5nMi5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbkxlbjsgaSsrKSB7XG4gICAgaWYgKHN0cmluZzEuY2hhckF0KGkpICE9PSBzdHJpbmcyLmNoYXJBdChpKSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHJpbmcxLmxlbmd0aCA9PT0gc3RyaW5nMi5sZW5ndGggPyAtMSA6IG1pbkxlbjtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0aGF0IG1heSBjb250YWluIGEgUmVhY3QgY29tcG9uZW50LlxuICogQHJldHVybiB7P3N0cmluZ30gQSBcInJlYWN0Um9vdFwiIElELCBpZiBhIFJlYWN0IGNvbXBvbmVudCBpcyByZW5kZXJlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKSB7XG4gIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gcm9vdEVsZW1lbnQgJiYgUmVhY3RNb3VudC5nZXRJRChyb290RWxlbWVudCk7XG59XG5cbi8qKlxuICogQWNjZXNzaW5nIG5vZGVbQVRUUl9OQU1FXSBvciBjYWxsaW5nIGdldEF0dHJpYnV0ZShBVFRSX05BTUUpIG9uIGEgZm9ybVxuICogZWxlbWVudCBjYW4gcmV0dXJuIGl0cyBjb250cm9sIHdob3NlIG5hbWUgb3IgSUQgZXF1YWxzIEFUVFJfTkFNRS4gQWxsXG4gKiBET00gbm9kZXMgc3VwcG9ydCBgZ2V0QXR0cmlidXRlTm9kZWAgYnV0IHRoaXMgY2FuIGFsc28gZ2V0IGNhbGxlZCBvblxuICogb3RoZXIgb2JqZWN0cyBzbyBqdXN0IHJldHVybiAnJyBpZiB3ZSdyZSBnaXZlbiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhXG4gKiBET00gbm9kZSAoc3VjaCBhcyB3aW5kb3cpLlxuICpcbiAqIEBwYXJhbSB7P0RPTUVsZW1lbnR8RE9NV2luZG93fERPTURvY3VtZW50fERPTVRleHROb2RlfSBub2RlIERPTSBub2RlLlxuICogQHJldHVybiB7c3RyaW5nfSBJRCBvZiB0aGUgc3VwcGxpZWQgYGRvbU5vZGVgLlxuICovXG5mdW5jdGlvbiBnZXRJRChub2RlKSB7XG4gIHZhciBpZCA9IGludGVybmFsR2V0SUQobm9kZSk7XG4gIGlmIChpZCkge1xuICAgIGlmIChub2RlQ2FjaGUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICB2YXIgY2FjaGVkID0gbm9kZUNhY2hlW2lkXTtcbiAgICAgIGlmIChjYWNoZWQgIT09IG5vZGUpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICAhaXNWYWxpZChjYWNoZWQsIGlkKSxcbiAgICAgICAgICAnUmVhY3RNb3VudDogVHdvIHZhbGlkIGJ1dCB1bmVxdWFsIG5vZGVzIHdpdGggdGhlIHNhbWUgYCVzYDogJXMnLFxuICAgICAgICAgIEFUVFJfTkFNRSwgaWRcbiAgICAgICAgKSA6IGludmFyaWFudCghaXNWYWxpZChjYWNoZWQsIGlkKSkpO1xuXG4gICAgICAgIG5vZGVDYWNoZVtpZF0gPSBub2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlQ2FjaGVbaWRdID0gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIGludGVybmFsR2V0SUQobm9kZSkge1xuICAvLyBJZiBub2RlIGlzIHNvbWV0aGluZyBsaWtlIGEgd2luZG93LCBkb2N1bWVudCwgb3IgdGV4dCBub2RlLCBub25lIG9mXG4gIC8vIHdoaWNoIHN1cHBvcnQgYXR0cmlidXRlcyBvciBhIC5nZXRBdHRyaWJ1dGUgbWV0aG9kLCBncmFjZWZ1bGx5IHJldHVyblxuICAvLyB0aGUgZW1wdHkgc3RyaW5nLCBhcyBpZiB0aGUgYXR0cmlidXRlIHdlcmUgbWlzc2luZy5cbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKSB8fCAnJztcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBSZWFjdC1zcGVjaWZpYyBJRCBvZiB0aGUgZ2l2ZW4gbm9kZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGUgVGhlIERPTSBub2RlIHdob3NlIElEIHdpbGwgYmUgc2V0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSB2YWx1ZSBvZiB0aGUgSUQgYXR0cmlidXRlLlxuICovXG5mdW5jdGlvbiBzZXRJRChub2RlLCBpZCkge1xuICB2YXIgb2xkSUQgPSBpbnRlcm5hbEdldElEKG5vZGUpO1xuICBpZiAob2xkSUQgIT09IGlkKSB7XG4gICAgZGVsZXRlIG5vZGVDYWNoZVtvbGRJRF07XG4gIH1cbiAgbm9kZS5zZXRBdHRyaWJ1dGUoQVRUUl9OQU1FLCBpZCk7XG4gIG5vZGVDYWNoZVtpZF0gPSBub2RlO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBub2RlIHdpdGggdGhlIHN1cHBsaWVkIFJlYWN0LWdlbmVyYXRlZCBET00gSUQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIEEgUmVhY3QtZ2VuZXJhdGVkIERPTSBJRC5cbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IERPTSBub2RlIHdpdGggdGhlIHN1cHBsZWQgYGlkYC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXROb2RlKGlkKSB7XG4gIGlmICghbm9kZUNhY2hlLmhhc093blByb3BlcnR5KGlkKSB8fCAhaXNWYWxpZChub2RlQ2FjaGVbaWRdLCBpZCkpIHtcbiAgICBub2RlQ2FjaGVbaWRdID0gUmVhY3RNb3VudC5maW5kUmVhY3ROb2RlQnlJRChpZCk7XG4gIH1cbiAgcmV0dXJuIG5vZGVDYWNoZVtpZF07XG59XG5cbi8qKlxuICogRmluZHMgdGhlIG5vZGUgd2l0aCB0aGUgc3VwcGxpZWQgcHVibGljIFJlYWN0IGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7Kn0gaW5zdGFuY2UgQSBwdWJsaWMgUmVhY3QgaW5zdGFuY2UuXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudH0gRE9NIG5vZGUgd2l0aCB0aGUgc3VwcGxlZCBgaWRgLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgdmFyIGlkID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQoaW5zdGFuY2UpLl9yb290Tm9kZUlEO1xuICBpZiAoUmVhY3RFbXB0eUNvbXBvbmVudC5pc051bGxDb21wb25lbnRJRChpZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIW5vZGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpZCkgfHwgIWlzVmFsaWQobm9kZUNhY2hlW2lkXSwgaWQpKSB7XG4gICAgbm9kZUNhY2hlW2lkXSA9IFJlYWN0TW91bnQuZmluZFJlYWN0Tm9kZUJ5SUQoaWQpO1xuICB9XG4gIHJldHVybiBub2RlQ2FjaGVbaWRdO1xufVxuXG4vKipcbiAqIEEgbm9kZSBpcyBcInZhbGlkXCIgaWYgaXQgaXMgY29udGFpbmVkIGJ5IGEgY3VycmVudGx5IG1vdW50ZWQgY29udGFpbmVyLlxuICpcbiAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgbm9kZSBkb2VzIG5vdCBoYXZlIHRvIGJlIGNvbnRhaW5lZCBieSBhIGRvY3VtZW50IGluXG4gKiBvcmRlciB0byBiZSBjb25zaWRlcmVkIHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7P0RPTUVsZW1lbnR9IG5vZGUgVGhlIGNhbmRpZGF0ZSBET00gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgZXhwZWN0ZWQgSUQgb2YgdGhlIG5vZGUuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBub2RlIGlzIGNvbnRhaW5lZCBieSBhIG1vdW50ZWQgY29udGFpbmVyLlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkKG5vZGUsIGlkKSB7XG4gIGlmIChub2RlKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGludGVybmFsR2V0SUQobm9kZSkgPT09IGlkLFxuICAgICAgJ1JlYWN0TW91bnQ6IFVuZXhwZWN0ZWQgbW9kaWZpY2F0aW9uIG9mIGAlc2AnLFxuICAgICAgQVRUUl9OQU1FXG4gICAgKSA6IGludmFyaWFudChpbnRlcm5hbEdldElEKG5vZGUpID09PSBpZCkpO1xuXG4gICAgdmFyIGNvbnRhaW5lciA9IFJlYWN0TW91bnQuZmluZFJlYWN0Q29udGFpbmVyRm9ySUQoaWQpO1xuICAgIGlmIChjb250YWluZXIgJiYgY29udGFpbnNOb2RlKGNvbnRhaW5lciwgbm9kZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDYXVzZXMgdGhlIGNhY2hlIHRvIGZvcmdldCBhYm91dCBvbmUgUmVhY3Qtc3BlY2lmaWMgSUQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCB0byBmb3JnZXQuXG4gKi9cbmZ1bmN0aW9uIHB1cmdlSUQoaWQpIHtcbiAgZGVsZXRlIG5vZGVDYWNoZVtpZF07XG59XG5cbnZhciBkZWVwZXN0Tm9kZVNvRmFyID0gbnVsbDtcbmZ1bmN0aW9uIGZpbmREZWVwZXN0Q2FjaGVkQW5jZXN0b3JJbXBsKGFuY2VzdG9ySUQpIHtcbiAgdmFyIGFuY2VzdG9yID0gbm9kZUNhY2hlW2FuY2VzdG9ySURdO1xuICBpZiAoYW5jZXN0b3IgJiYgaXNWYWxpZChhbmNlc3RvciwgYW5jZXN0b3JJRCkpIHtcbiAgICBkZWVwZXN0Tm9kZVNvRmFyID0gYW5jZXN0b3I7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBub2RlIGlzbid0IHBvcHVsYXRlZCBpbiB0aGUgY2FjaGUsIHNvIHByZXN1bWFibHkgbm9uZSBvZiBpdHNcbiAgICAvLyBkZXNjZW5kYW50cyBhcmUuIEJyZWFrIG91dCBvZiB0aGUgbG9vcC5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGRlZXBlc3QgY2FjaGVkIG5vZGUgd2hvc2UgSUQgaXMgYSBwcmVmaXggb2YgYHRhcmdldElEYC5cbiAqL1xuZnVuY3Rpb24gZmluZERlZXBlc3RDYWNoZWRBbmNlc3Rvcih0YXJnZXRJRCkge1xuICBkZWVwZXN0Tm9kZVNvRmFyID0gbnVsbDtcbiAgUmVhY3RJbnN0YW5jZUhhbmRsZXMudHJhdmVyc2VBbmNlc3RvcnMoXG4gICAgdGFyZ2V0SUQsXG4gICAgZmluZERlZXBlc3RDYWNoZWRBbmNlc3RvckltcGxcbiAgKTtcblxuICB2YXIgZm91bmROb2RlID0gZGVlcGVzdE5vZGVTb0ZhcjtcbiAgZGVlcGVzdE5vZGVTb0ZhciA9IG51bGw7XG4gIHJldHVybiBmb3VuZE5vZGU7XG59XG5cbi8qKlxuICogTW91bnRzIHRoaXMgY29tcG9uZW50IGFuZCBpbnNlcnRzIGl0IGludG8gdGhlIERPTS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnRJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdG8gbW91bnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIERPTSBJRCBvZiB0aGUgcm9vdCBub2RlLlxuICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdG8gbW91bnQgaW50by5cbiAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUmV1c2VNYXJrdXAgSWYgdHJ1ZSwgZG8gbm90IGluc2VydCBtYXJrdXBcbiAqL1xuZnVuY3Rpb24gbW91bnRDb21wb25lbnRJbnRvTm9kZShcbiAgICBjb21wb25lbnRJbnN0YW5jZSxcbiAgICByb290SUQsXG4gICAgY29udGFpbmVyLFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIHNob3VsZFJldXNlTWFya3VwKSB7XG4gIHZhciBtYXJrdXAgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoXG4gICAgY29tcG9uZW50SW5zdGFuY2UsIHJvb3RJRCwgdHJhbnNhY3Rpb24sIGVtcHR5T2JqZWN0XG4gICk7XG4gIGNvbXBvbmVudEluc3RhbmNlLl9pc1RvcExldmVsID0gdHJ1ZTtcbiAgUmVhY3RNb3VudC5fbW91bnRJbWFnZUludG9Ob2RlKG1hcmt1cCwgY29udGFpbmVyLCBzaG91bGRSZXVzZU1hcmt1cCk7XG59XG5cbi8qKlxuICogQmF0Y2hlZCBtb3VudC5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnRJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdG8gbW91bnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIERPTSBJRCBvZiB0aGUgcm9vdCBub2RlLlxuICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdG8gbW91bnQgaW50by5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUmV1c2VNYXJrdXAgSWYgdHJ1ZSwgZG8gbm90IGluc2VydCBtYXJrdXBcbiAqL1xuZnVuY3Rpb24gYmF0Y2hlZE1vdW50Q29tcG9uZW50SW50b05vZGUoXG4gICAgY29tcG9uZW50SW5zdGFuY2UsXG4gICAgcm9vdElELFxuICAgIGNvbnRhaW5lcixcbiAgICBzaG91bGRSZXVzZU1hcmt1cCkge1xuICB2YXIgdHJhbnNhY3Rpb24gPSBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoKTtcbiAgdHJhbnNhY3Rpb24ucGVyZm9ybShcbiAgICBtb3VudENvbXBvbmVudEludG9Ob2RlLFxuICAgIG51bGwsXG4gICAgY29tcG9uZW50SW5zdGFuY2UsXG4gICAgcm9vdElELFxuICAgIGNvbnRhaW5lcixcbiAgICB0cmFuc2FjdGlvbixcbiAgICBzaG91bGRSZXVzZU1hcmt1cFxuICApO1xuICBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBNb3VudGluZyBpcyB0aGUgcHJvY2VzcyBvZiBpbml0aWFsaXppbmcgYSBSZWFjdCBjb21wb25lbnQgYnkgY3JlYXRpbmcgaXRzXG4gKiByZXByZXNlbnRhdGl2ZSBET00gZWxlbWVudHMgYW5kIGluc2VydGluZyB0aGVtIGludG8gYSBzdXBwbGllZCBgY29udGFpbmVyYC5cbiAqIEFueSBwcmlvciBjb250ZW50IGluc2lkZSBgY29udGFpbmVyYCBpcyBkZXN0cm95ZWQgaW4gdGhlIHByb2Nlc3MuXG4gKlxuICogICBSZWFjdE1vdW50LnJlbmRlcihcbiAqICAgICBjb21wb25lbnQsXG4gKiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpXG4gKiAgICk7XG4gKlxuICogICA8ZGl2IGlkPVwiY29udGFpbmVyXCI+ICAgICAgICAgICAgICAgICAgIDwtLSBTdXBwbGllZCBgY29udGFpbmVyYC5cbiAqICAgICA8ZGl2IGRhdGEtcmVhY3RpZD1cIi4zXCI+ICAgICAgICAgICAgICA8LS0gUmVuZGVyZWQgcmVhY3RSb290IG9mIFJlYWN0XG4gKiAgICAgICAvLyAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuXG4gKiAgICAgPC9kaXY+XG4gKiAgIDwvZGl2PlxuICpcbiAqIEluc2lkZSBvZiBgY29udGFpbmVyYCwgdGhlIGZpcnN0IGVsZW1lbnQgcmVuZGVyZWQgaXMgdGhlIFwicmVhY3RSb290XCIuXG4gKi9cbnZhciBSZWFjdE1vdW50ID0ge1xuICAvKiogRXhwb3NlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICoqL1xuICBfaW5zdGFuY2VzQnlSZWFjdFJvb3RJRDogaW5zdGFuY2VzQnlSZWFjdFJvb3RJRCxcblxuICAvKipcbiAgICogVGhpcyBpcyBhIGhvb2sgcHJvdmlkZWQgdG8gc3VwcG9ydCByZW5kZXJpbmcgUmVhY3QgY29tcG9uZW50cyB3aGlsZVxuICAgKiBlbnN1cmluZyB0aGF0IHRoZSBhcHBhcmVudCBzY3JvbGwgcG9zaXRpb24gb2YgaXRzIGBjb250YWluZXJgIGRvZXMgbm90XG4gICAqIGNoYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgVGhlIGBjb250YWluZXJgIGJlaW5nIHJlbmRlcmVkIGludG8uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlbmRlckNhbGxiYWNrIFRoaXMgbXVzdCBiZSBjYWxsZWQgb25jZSB0byBkbyB0aGUgcmVuZGVyLlxuICAgKi9cbiAgc2Nyb2xsTW9uaXRvcjogZnVuY3Rpb24oY29udGFpbmVyLCByZW5kZXJDYWxsYmFjaykge1xuICAgIHJlbmRlckNhbGxiYWNrKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRha2UgYSBjb21wb25lbnQgdGhhdCdzIGFscmVhZHkgbW91bnRlZCBpbnRvIHRoZSBET00gYW5kIHJlcGxhY2UgaXRzIHByb3BzXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IHByZXZDb21wb25lbnQgY29tcG9uZW50IGluc3RhbmNlIGFscmVhZHkgaW4gdGhlIERPTVxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnQgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbmRlclxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBjb250YWluZXIgdG8gcmVuZGVyIGludG9cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRyaWdnZXJlZCBvbiBjb21wbGV0aW9uXG4gICAqL1xuICBfdXBkYXRlUm9vdENvbXBvbmVudDogZnVuY3Rpb24oXG4gICAgICBwcmV2Q29tcG9uZW50LFxuICAgICAgbmV4dEVsZW1lbnQsXG4gICAgICBjb250YWluZXIsXG4gICAgICBjYWxsYmFjaykge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIFJlYWN0RWxlbWVudFZhbGlkYXRvci5jaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHMobmV4dEVsZW1lbnQpO1xuICAgIH1cblxuICAgIFJlYWN0TW91bnQuc2Nyb2xsTW9uaXRvcihjb250YWluZXIsIGZ1bmN0aW9uKCkge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlRWxlbWVudEludGVybmFsKHByZXZDb21wb25lbnQsIG5leHRFbGVtZW50KTtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFja0ludGVybmFsKHByZXZDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIFJlY29yZCB0aGUgcm9vdCBlbGVtZW50IGluIGNhc2UgaXQgbGF0ZXIgZ2V0cyB0cmFuc3BsYW50ZWQuXG4gICAgICByb290RWxlbWVudHNCeVJlYWN0Um9vdElEW2dldFJlYWN0Um9vdElEKGNvbnRhaW5lcildID1cbiAgICAgICAgZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXZDb21wb25lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgY29tcG9uZW50IGludG8gdGhlIGluc3RhbmNlIG1hcCBhbmQgc3RhcnRzIHNjcm9sbCB2YWx1ZVxuICAgKiBtb25pdG9yaW5nXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IG5leHRDb21wb25lbnQgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbmRlclxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBjb250YWluZXIgdG8gcmVuZGVyIGludG9cbiAgICogQHJldHVybiB7c3RyaW5nfSByZWFjdFJvb3QgSUQgcHJlZml4XG4gICAqL1xuICBfcmVnaXN0ZXJDb21wb25lbnQ6IGZ1bmN0aW9uKG5leHRDb21wb25lbnQsIGNvbnRhaW5lcikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBjb250YWluZXIgJiYgKFxuICAgICAgICAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpXG4gICAgICApLFxuICAgICAgJ19yZWdpc3RlckNvbXBvbmVudCguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LidcbiAgICApIDogaW52YXJpYW50KGNvbnRhaW5lciAmJiAoXG4gICAgICAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpXG4gICAgKSkpO1xuXG4gICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmVuc3VyZVNjcm9sbFZhbHVlTW9uaXRvcmluZygpO1xuXG4gICAgdmFyIHJlYWN0Um9vdElEID0gUmVhY3RNb3VudC5yZWdpc3RlckNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIGluc3RhbmNlc0J5UmVhY3RSb290SURbcmVhY3RSb290SURdID0gbmV4dENvbXBvbmVudDtcbiAgICByZXR1cm4gcmVhY3RSb290SUQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbmRlciBhIG5ldyBjb21wb25lbnQgaW50byB0aGUgRE9NLlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnQgZWxlbWVudCB0byByZW5kZXJcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgY29udGFpbmVyIHRvIHJlbmRlciBpbnRvXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUmV1c2VNYXJrdXAgaWYgd2Ugc2hvdWxkIHNraXAgdGhlIG1hcmt1cCBpbnNlcnRpb25cbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IG5leHRDb21wb25lbnRcbiAgICovXG4gIF9yZW5kZXJOZXdSb290Q29tcG9uZW50OiBmdW5jdGlvbihcbiAgICBuZXh0RWxlbWVudCxcbiAgICBjb250YWluZXIsXG4gICAgc2hvdWxkUmV1c2VNYXJrdXBcbiAgKSB7XG4gICAgLy8gVmFyaW91cyBwYXJ0cyBvZiBvdXIgY29kZSAoc3VjaCBhcyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdzXG4gICAgLy8gX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCkgYXNzdW1lIHRoYXQgY2FsbHMgdG8gcmVuZGVyIGFyZW4ndCBuZXN0ZWQ7XG4gICAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLlxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsLFxuICAgICAgJ19yZW5kZXJOZXdSb290Q29tcG9uZW50KCk6IFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gJyArXG4gICAgICAnb2YgcHJvcHMgYW5kIHN0YXRlOyB0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tICcgK1xuICAgICAgJ3JlbmRlciBpcyBub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluICcgK1xuICAgICAgJ2NvbXBvbmVudERpZFVwZGF0ZS4nXG4gICAgKSA6IG51bGwpO1xuXG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChuZXh0RWxlbWVudCwgbnVsbCk7XG4gICAgdmFyIHJlYWN0Um9vdElEID0gUmVhY3RNb3VudC5fcmVnaXN0ZXJDb21wb25lbnQoXG4gICAgICBjb21wb25lbnRJbnN0YW5jZSxcbiAgICAgIGNvbnRhaW5lclxuICAgICk7XG5cbiAgICAvLyBUaGUgaW5pdGlhbCByZW5kZXIgaXMgc3luY2hyb25vdXMgYnV0IGFueSB1cGRhdGVzIHRoYXQgaGFwcGVuIGR1cmluZ1xuICAgIC8vIHJlbmRlcmluZywgaW4gY29tcG9uZW50V2lsbE1vdW50IG9yIGNvbXBvbmVudERpZE1vdW50LCB3aWxsIGJlIGJhdGNoZWRcbiAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgYmF0Y2hpbmcgc3RyYXRlZ3kuXG5cbiAgICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMoXG4gICAgICBiYXRjaGVkTW91bnRDb21wb25lbnRJbnRvTm9kZSxcbiAgICAgIGNvbXBvbmVudEluc3RhbmNlLFxuICAgICAgcmVhY3RSb290SUQsXG4gICAgICBjb250YWluZXIsXG4gICAgICBzaG91bGRSZXVzZU1hcmt1cFxuICAgICk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIHJvb3QgZWxlbWVudCBpbiBjYXNlIGl0IGxhdGVyIGdldHMgdHJhbnNwbGFudGVkLlxuICAgICAgcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gPVxuICAgICAgICBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50SW5zdGFuY2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBSZWFjdCBjb21wb25lbnQgaW50byB0aGUgRE9NIGluIHRoZSBzdXBwbGllZCBgY29udGFpbmVyYC5cbiAgICpcbiAgICogSWYgdGhlIFJlYWN0IGNvbXBvbmVudCB3YXMgcHJldmlvdXNseSByZW5kZXJlZCBpbnRvIGBjb250YWluZXJgLCB0aGlzIHdpbGxcbiAgICogcGVyZm9ybSBhbiB1cGRhdGUgb24gaXQgYW5kIG9ubHkgbXV0YXRlIHRoZSBET00gYXMgbmVjZXNzYXJ5IHRvIHJlZmxlY3QgdGhlXG4gICAqIGxhdGVzdCBSZWFjdCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBDb21wb25lbnQgZWxlbWVudCB0byByZW5kZXIuXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdHJpZ2dlcmVkIG9uIGNvbXBsZXRpb25cbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IENvbXBvbmVudCBpbnN0YW5jZSByZW5kZXJlZCBpbiBgY29udGFpbmVyYC5cbiAgICovXG4gIHJlbmRlcjogZnVuY3Rpb24obmV4dEVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG5leHRFbGVtZW50KSxcbiAgICAgICdSZWFjdC5yZW5kZXIoKTogSW52YWxpZCBjb21wb25lbnQgZWxlbWVudC4lcycsXG4gICAgICAoXG4gICAgICAgIHR5cGVvZiBuZXh0RWxlbWVudCA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICcgSW5zdGVhZCBvZiBwYXNzaW5nIGFuIGVsZW1lbnQgc3RyaW5nLCBtYWtlIHN1cmUgdG8gaW5zdGFudGlhdGUgJyArXG4gICAgICAgICAgJ2l0IGJ5IHBhc3NpbmcgaXQgdG8gUmVhY3QuY3JlYXRlRWxlbWVudC4nIDpcbiAgICAgICAgdHlwZW9mIG5leHRFbGVtZW50ID09PSAnZnVuY3Rpb24nID9cbiAgICAgICAgICAnIEluc3RlYWQgb2YgcGFzc2luZyBhIGNvbXBvbmVudCBjbGFzcywgbWFrZSBzdXJlIHRvIGluc3RhbnRpYXRlICcgK1xuICAgICAgICAgICdpdCBieSBwYXNzaW5nIGl0IHRvIFJlYWN0LmNyZWF0ZUVsZW1lbnQuJyA6XG4gICAgICAgIC8vIENoZWNrIGlmIGl0IHF1YWNrcyBsaWtlIGFuIGVsZW1lbnRcbiAgICAgICAgbmV4dEVsZW1lbnQgIT0gbnVsbCAmJiBuZXh0RWxlbWVudC5wcm9wcyAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAnIFRoaXMgbWF5IGJlIGNhdXNlZCBieSB1bmludGVudGlvbmFsbHkgbG9hZGluZyB0d28gaW5kZXBlbmRlbnQgJyArXG4gICAgICAgICAgJ2NvcGllcyBvZiBSZWFjdC4nIDpcbiAgICAgICAgICAnJ1xuICAgICAgKVxuICAgICkgOiBpbnZhcmlhbnQoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG5leHRFbGVtZW50KSkpO1xuXG4gICAgdmFyIHByZXZDb21wb25lbnQgPSBpbnN0YW5jZXNCeVJlYWN0Um9vdElEW2dldFJlYWN0Um9vdElEKGNvbnRhaW5lcildO1xuXG4gICAgaWYgKHByZXZDb21wb25lbnQpIHtcbiAgICAgIHZhciBwcmV2RWxlbWVudCA9IHByZXZDb21wb25lbnQuX2N1cnJlbnRFbGVtZW50O1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0TW91bnQuX3VwZGF0ZVJvb3RDb21wb25lbnQoXG4gICAgICAgICAgcHJldkNvbXBvbmVudCxcbiAgICAgICAgICBuZXh0RWxlbWVudCxcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgKS5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUmVhY3RNb3VudC51bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlYWN0Um9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICB2YXIgY29udGFpbmVySGFzUmVhY3RNYXJrdXAgPVxuICAgICAgcmVhY3RSb290RWxlbWVudCAmJiBSZWFjdE1vdW50LmlzUmVuZGVyZWRCeVJlYWN0KHJlYWN0Um9vdEVsZW1lbnQpO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgaWYgKCFjb250YWluZXJIYXNSZWFjdE1hcmt1cCB8fCByZWFjdFJvb3RFbGVtZW50Lm5leHRTaWJsaW5nKSB7XG4gICAgICAgIHZhciByb290RWxlbWVudFNpYmxpbmcgPSByZWFjdFJvb3RFbGVtZW50O1xuICAgICAgICB3aGlsZSAocm9vdEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgICAgICAgaWYgKFJlYWN0TW91bnQuaXNSZW5kZXJlZEJ5UmVhY3Qocm9vdEVsZW1lbnRTaWJsaW5nKSkge1xuICAgICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAncmVuZGVyKCk6IFRhcmdldCBub2RlIGhhcyBtYXJrdXAgcmVuZGVyZWQgYnkgUmVhY3QsIGJ1dCB0aGVyZSAnICtcbiAgICAgICAgICAgICAgJ2FyZSB1bnJlbGF0ZWQgbm9kZXMgYXMgd2VsbC4gVGhpcyBpcyBtb3N0IGNvbW1vbmx5IGNhdXNlZCBieSAnICtcbiAgICAgICAgICAgICAgJ3doaXRlLXNwYWNlIGluc2VydGVkIGFyb3VuZCBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwLidcbiAgICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvb3RFbGVtZW50U2libGluZyA9IHJvb3RFbGVtZW50U2libGluZy5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaG91bGRSZXVzZU1hcmt1cCA9IGNvbnRhaW5lckhhc1JlYWN0TWFya3VwICYmICFwcmV2Q29tcG9uZW50O1xuXG4gICAgdmFyIGNvbXBvbmVudCA9IFJlYWN0TW91bnQuX3JlbmRlck5ld1Jvb3RDb21wb25lbnQoXG4gICAgICBuZXh0RWxlbWVudCxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHNob3VsZFJldXNlTWFya3VwXG4gICAgKS5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2suY2FsbChjb21wb25lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgY29tcG9uZW50IGluc3RhbmNlIG9mIGBjb25zdHJ1Y3RvcmAgd2l0aCBgaW5pdGlhbFByb3BzYCBhbmRcbiAgICogcmVuZGVycyBpdCBpbnRvIHRoZSBzdXBwbGllZCBgY29udGFpbmVyYC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3IgUmVhY3QgY29tcG9uZW50IGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0gez9vYmplY3R9IHByb3BzIEluaXRpYWwgcHJvcHMgb2YgdGhlIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBDb21wb25lbnQgaW5zdGFuY2UgcmVuZGVyZWQgaW4gYGNvbnRhaW5lcmAuXG4gICAqL1xuICBjb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnQ6IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBwcm9wcywgY29udGFpbmVyKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudChjb25zdHJ1Y3RvciwgcHJvcHMpO1xuICAgIHJldHVybiBSZWFjdE1vdW50LnJlbmRlcihlbGVtZW50LCBjb250YWluZXIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgY29tcG9uZW50IGluc3RhbmNlIG9mIGBjb25zdHJ1Y3RvcmAgd2l0aCBgaW5pdGlhbFByb3BzYCBhbmRcbiAgICogcmVuZGVycyBpdCBpbnRvIGEgY29udGFpbmVyIG5vZGUgaWRlbnRpZmllZCBieSBzdXBwbGllZCBgaWRgLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wb25lbnRDb25zdHJ1Y3RvciBSZWFjdCBjb21wb25lbnQgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBwcm9wcyBJbml0aWFsIHByb3BzIG9mIHRoZSBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBDb21wb25lbnQgaW5zdGFuY2UgcmVuZGVyZWQgaW4gdGhlIGNvbnRhaW5lciBub2RlLlxuICAgKi9cbiAgY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50QnlJRDogZnVuY3Rpb24oY29uc3RydWN0b3IsIHByb3BzLCBpZCkge1xuICAgIHZhciBkb21Ob2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBkb21Ob2RlLFxuICAgICAgJ1RyaWVkIHRvIGdldCBlbGVtZW50IHdpdGggaWQgb2YgXCIlc1wiIGJ1dCBpdCBpcyBub3QgcHJlc2VudCBvbiB0aGUgcGFnZS4nLFxuICAgICAgaWRcbiAgICApIDogaW52YXJpYW50KGRvbU5vZGUpKTtcbiAgICByZXR1cm4gUmVhY3RNb3VudC5jb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnQoY29uc3RydWN0b3IsIHByb3BzLCBkb21Ob2RlKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY29udGFpbmVyIG5vZGUgaW50byB3aGljaCBSZWFjdCBjb21wb25lbnRzIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAqIFRoaXMgYWxzbyBjcmVhdGVzIHRoZSBcInJlYWN0Um9vdFwiIElEIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZWxlbWVudFxuICAgKiByZW5kZXJlZCB3aXRoaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHJlZ2lzdGVyIGFzIGEgY29udGFpbmVyLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBcInJlYWN0Um9vdFwiIElEIG9mIGVsZW1lbnRzIHJlbmRlcmVkIHdpdGhpbi5cbiAgICovXG4gIHJlZ2lzdGVyQ29udGFpbmVyOiBmdW5jdGlvbihjb250YWluZXIpIHtcbiAgICB2YXIgcmVhY3RSb290SUQgPSBnZXRSZWFjdFJvb3RJRChjb250YWluZXIpO1xuICAgIGlmIChyZWFjdFJvb3RJRCkge1xuICAgICAgLy8gSWYgb25lIGV4aXN0cywgbWFrZSBzdXJlIGl0IGlzIGEgdmFsaWQgXCJyZWFjdFJvb3RcIiBJRC5cbiAgICAgIHJlYWN0Um9vdElEID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuZ2V0UmVhY3RSb290SURGcm9tTm9kZUlEKHJlYWN0Um9vdElEKTtcbiAgICB9XG4gICAgaWYgKCFyZWFjdFJvb3RJRCkge1xuICAgICAgLy8gTm8gdmFsaWQgXCJyZWFjdFJvb3RcIiBJRCBmb3VuZCwgY3JlYXRlIG9uZS5cbiAgICAgIHJlYWN0Um9vdElEID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RSb290SUQoKTtcbiAgICB9XG4gICAgY29udGFpbmVyc0J5UmVhY3RSb290SURbcmVhY3RSb290SURdID0gY29udGFpbmVyO1xuICAgIHJldHVybiByZWFjdFJvb3RJRDtcbiAgfSxcblxuICAvKipcbiAgICogVW5tb3VudHMgYW5kIGRlc3Ryb3lzIHRoZSBSZWFjdCBjb21wb25lbnQgcmVuZGVyZWQgaW4gdGhlIGBjb250YWluZXJgLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCBjb250YWluaW5nIGEgUmVhY3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGEgY29tcG9uZW50IHdhcyBmb3VuZCBpbiBhbmQgdW5tb3VudGVkIGZyb21cbiAgICogICAgICAgICAgICAgICAgICAgYGNvbnRhaW5lcmBcbiAgICovXG4gIHVubW91bnRDb21wb25lbnRBdE5vZGU6IGZ1bmN0aW9uKGNvbnRhaW5lcikge1xuICAgIC8vIFZhcmlvdXMgcGFydHMgb2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAgIC8vIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQpIGFzc3VtZSB0aGF0IGNhbGxzIHRvIHJlbmRlciBhcmVuJ3QgbmVzdGVkO1xuICAgIC8vIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgY2FzZS4gKFN0cmljdGx5IHNwZWFraW5nLCB1bm1vdW50aW5nIHdvbid0IGNhdXNlIGFcbiAgICAvLyByZW5kZXIgYnV0IHdlIHN0aWxsIGRvbid0IGV4cGVjdCB0byBiZSBpbiBhIHJlbmRlciBjYWxsIGhlcmUuKVxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsLFxuICAgICAgJ3VubW91bnRDb21wb25lbnRBdE5vZGUoKTogUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiAnICtcbiAgICAgICdwcm9wcyBhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzICcgK1xuICAgICAgJ25vdCBhbGxvd2VkLiBJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gJyArXG4gICAgICAnY29tcG9uZW50RGlkVXBkYXRlLidcbiAgICApIDogbnVsbCk7XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgY29udGFpbmVyICYmIChcbiAgICAgICAgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgfHwgY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKVxuICAgICAgKSxcbiAgICAgICd1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJ1xuICAgICkgOiBpbnZhcmlhbnQoY29udGFpbmVyICYmIChcbiAgICAgIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFIHx8IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSlcbiAgICApKSk7XG5cbiAgICB2YXIgcmVhY3RSb290SUQgPSBnZXRSZWFjdFJvb3RJRChjb250YWluZXIpO1xuICAgIHZhciBjb21wb25lbnQgPSBpbnN0YW5jZXNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTtcbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBSZWFjdE1vdW50LnVubW91bnRDb21wb25lbnRGcm9tTm9kZShjb21wb25lbnQsIGNvbnRhaW5lcik7XG4gICAgZGVsZXRlIGluc3RhbmNlc0J5UmVhY3RSb290SURbcmVhY3RSb290SURdO1xuICAgIGRlbGV0ZSBjb250YWluZXJzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF07XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgZGVsZXRlIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbcmVhY3RSb290SURdO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICAvKipcbiAgICogVW5tb3VudHMgYSBjb21wb25lbnQgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgRE9NLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnN0YW5jZSBSZWFjdCBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHVubW91bnQgZnJvbS5cbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAc2VlIHtSZWFjdE1vdW50LnVubW91bnRDb21wb25lbnRBdE5vZGV9XG4gICAqL1xuICB1bm1vdW50Q29tcG9uZW50RnJvbU5vZGU6IGZ1bmN0aW9uKGluc3RhbmNlLCBjb250YWluZXIpIHtcbiAgICBSZWFjdFJlY29uY2lsZXIudW5tb3VudENvbXBvbmVudChpbnN0YW5jZSk7XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKSB7XG4gICAgICBjb250YWluZXIgPSBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cblxuICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29tL2VtcHR5aW5nLWEtbm9kZVxuICAgIHdoaWxlIChjb250YWluZXIubGFzdENoaWxkKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmxhc3RDaGlsZCk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgY29udGFpbmVyIERPTSBlbGVtZW50IHRoYXQgY29udGFpbnMgUmVhY3QgY29tcG9uZW50IHRvIHdoaWNoIHRoZVxuICAgKiBzdXBwbGllZCBET00gYGlkYCBiZWxvbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIGFuIGVsZW1lbnQgcmVuZGVyZWQgYnkgYSBSZWFjdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm4gez9ET01FbGVtZW50fSBET00gZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBgaWRgLlxuICAgKi9cbiAgZmluZFJlYWN0Q29udGFpbmVyRm9ySUQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgdmFyIHJlYWN0Um9vdElEID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuZ2V0UmVhY3RSb290SURGcm9tTm9kZUlEKGlkKTtcbiAgICB2YXIgY29udGFpbmVyID0gY29udGFpbmVyc0J5UmVhY3RSb290SURbcmVhY3RSb290SURdO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFyIHJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF07XG4gICAgICBpZiAocm9vdEVsZW1lbnQgJiYgcm9vdEVsZW1lbnQucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgLy8gQ2FsbCBpbnRlcm5hbEdldElEIGhlcmUgYmVjYXVzZSBnZXRJRCBjYWxscyBpc1ZhbGlkIHdoaWNoIGNhbGxzXG4gICAgICAgICAgLy8gZmluZFJlYWN0Q29udGFpbmVyRm9ySUQgKHRoaXMgZnVuY3Rpb24pLlxuICAgICAgICAgIGludGVybmFsR2V0SUQocm9vdEVsZW1lbnQpID09PSByZWFjdFJvb3RJRCxcbiAgICAgICAgICAnUmVhY3RNb3VudDogUm9vdCBlbGVtZW50IElEIGRpZmZlcmVkIGZyb20gcmVhY3RSb290SUQuJ1xuICAgICAgICApIDogaW52YXJpYW50KC8vIENhbGwgaW50ZXJuYWxHZXRJRCBoZXJlIGJlY2F1c2UgZ2V0SUQgY2FsbHMgaXNWYWxpZCB3aGljaCBjYWxsc1xuICAgICAgICAvLyBmaW5kUmVhY3RDb250YWluZXJGb3JJRCAodGhpcyBmdW5jdGlvbikuXG4gICAgICAgIGludGVybmFsR2V0SUQocm9vdEVsZW1lbnQpID09PSByZWFjdFJvb3RJRCkpO1xuXG4gICAgICAgIHZhciBjb250YWluZXJDaGlsZCA9IGNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICBpZiAoY29udGFpbmVyQ2hpbGQgJiZcbiAgICAgICAgICAgIHJlYWN0Um9vdElEID09PSBpbnRlcm5hbEdldElEKGNvbnRhaW5lckNoaWxkKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBjb250YWluZXIgaGFzIGEgbmV3IGNoaWxkIHdpdGggdGhlIHNhbWUgSUQgYXMgdGhlIG9sZFxuICAgICAgICAgIC8vIHJvb3QgZWxlbWVudCwgdGhlbiByb290RWxlbWVudHNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXSBpc1xuICAgICAgICAgIC8vIGp1c3Qgc3RhbGUgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuIFRoZSBjYXNlIHRoYXQgZGVzZXJ2ZXMgYVxuICAgICAgICAgIC8vIHdhcm5pbmcgaXMgd2hlbiB0aGUgY29udGFpbmVyIGlzIGVtcHR5LlxuICAgICAgICAgIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbcmVhY3RSb290SURdID0gY29udGFpbmVyQ2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICdSZWFjdE1vdW50OiBSb290IGVsZW1lbnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGl0cyBvcmlnaW5hbCAnICtcbiAgICAgICAgICAgICdjb250YWluZXIuIE5ldyBjb250YWluZXI6Jywgcm9vdEVsZW1lbnQucGFyZW50Tm9kZVxuICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbmRzIGFuIGVsZW1lbnQgcmVuZGVyZWQgYnkgUmVhY3Qgd2l0aCB0aGUgc3VwcGxpZWQgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiBhIERPTSBub2RlIGluIHRoZSBSZWFjdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFJvb3QgRE9NIG5vZGUgb2YgdGhlIFJlYWN0IGNvbXBvbmVudC5cbiAgICovXG4gIGZpbmRSZWFjdE5vZGVCeUlEOiBmdW5jdGlvbihpZCkge1xuICAgIHZhciByZWFjdFJvb3QgPSBSZWFjdE1vdW50LmZpbmRSZWFjdENvbnRhaW5lckZvcklEKGlkKTtcbiAgICByZXR1cm4gUmVhY3RNb3VudC5maW5kQ29tcG9uZW50Um9vdChyZWFjdFJvb3QsIGlkKTtcbiAgfSxcblxuICAvKipcbiAgICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgYG5vZGVgIGlzIHJlbmRlcmVkIGJ5IFJlYWN0LlxuICAgKlxuICAgKiBAcGFyYW0geyp9IG5vZGUgRE9NIEVsZW1lbnQgdG8gY2hlY2suXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIERPTSBFbGVtZW50IGFwcGVhcnMgdG8gYmUgcmVuZGVyZWQgYnkgUmVhY3QuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgaXNSZW5kZXJlZEJ5UmVhY3Q6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgLy8gTm90IGEgRE9NRWxlbWVudCwgdGhlcmVmb3JlIG5vdCBhIFJlYWN0IGNvbXBvbmVudFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgaWQgPSBSZWFjdE1vdW50LmdldElEKG5vZGUpO1xuICAgIHJldHVybiBpZCA/IGlkLmNoYXJBdCgwKSA9PT0gU0VQQVJBVE9SIDogZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB1cCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBzdXBwbGllZCBub2RlIHRvIGZpbmQgYSBub2RlIHRoYXQgaXMgYVxuICAgKiBET00gcmVwcmVzZW50YXRpb24gb2YgYSBSZWFjdCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gbm9kZVxuICAgKiBAcmV0dXJuIHs/RE9NRXZlbnRUYXJnZXR9XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0Rmlyc3RSZWFjdERPTTogZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBjdXJyZW50ID0gbm9kZTtcbiAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50LnBhcmVudE5vZGUgIT09IGN1cnJlbnQpIHtcbiAgICAgIGlmIChSZWFjdE1vdW50LmlzUmVuZGVyZWRCeVJlYWN0KGN1cnJlbnQpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IGN1cnJlbnQucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgbm9kZSB3aXRoIHRoZSBzdXBwbGllZCBgdGFyZ2V0SURgIGluc2lkZSBvZiB0aGUgc3VwcGxpZWRcbiAgICogYGFuY2VzdG9yTm9kZWAuICBFeHBsb2l0cyB0aGUgSUQgbmFtaW5nIHNjaGVtZSB0byBwZXJmb3JtIHRoZSBzZWFyY2hcbiAgICogcXVpY2tseS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gYW5jZXN0b3JOb2RlIFNlYXJjaCBmcm9tIHRoaXMgcm9vdC5cbiAgICogQHBhcmFybSB7c3RyaW5nfSB0YXJnZXRJRCBJRCBvZiB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm4ge0RPTUV2ZW50VGFyZ2V0fSBET00gbm9kZSB3aXRoIHRoZSBzdXBwbGllZCBgdGFyZ2V0SURgLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGZpbmRDb21wb25lbnRSb290OiBmdW5jdGlvbihhbmNlc3Rvck5vZGUsIHRhcmdldElEKSB7XG4gICAgdmFyIGZpcnN0Q2hpbGRyZW4gPSBmaW5kQ29tcG9uZW50Um9vdFJldXNhYmxlQXJyYXk7XG4gICAgdmFyIGNoaWxkSW5kZXggPSAwO1xuXG4gICAgdmFyIGRlZXBlc3RBbmNlc3RvciA9IGZpbmREZWVwZXN0Q2FjaGVkQW5jZXN0b3IodGFyZ2V0SUQpIHx8IGFuY2VzdG9yTm9kZTtcblxuICAgIGZpcnN0Q2hpbGRyZW5bMF0gPSBkZWVwZXN0QW5jZXN0b3IuZmlyc3RDaGlsZDtcbiAgICBmaXJzdENoaWxkcmVuLmxlbmd0aCA9IDE7XG5cbiAgICB3aGlsZSAoY2hpbGRJbmRleCA8IGZpcnN0Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICB2YXIgY2hpbGQgPSBmaXJzdENoaWxkcmVuW2NoaWxkSW5kZXgrK107XG4gICAgICB2YXIgdGFyZ2V0Q2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICB2YXIgY2hpbGRJRCA9IFJlYWN0TW91bnQuZ2V0SUQoY2hpbGQpO1xuICAgICAgICBpZiAoY2hpbGRJRCkge1xuICAgICAgICAgIC8vIEV2ZW4gaWYgd2UgZmluZCB0aGUgbm9kZSB3ZSdyZSBsb29raW5nIGZvciwgd2UgZmluaXNoIGxvb3BpbmdcbiAgICAgICAgICAvLyB0aHJvdWdoIGl0cyBzaWJsaW5ncyB0byBlbnN1cmUgdGhleSdyZSBjYWNoZWQgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG4gICAgICAgICAgLy8gdG8gcmV2aXNpdCB0aGlzIG5vZGUgYWdhaW4uIE90aGVyd2lzZSwgd2UgbWFrZSBuXjIgY2FsbHMgdG8gZ2V0SURcbiAgICAgICAgICAvLyB3aGVuIHZpc2l0aW5nIHRoZSBtYW55IGNoaWxkcmVuIG9mIGEgc2luZ2xlIG5vZGUgaW4gb3JkZXIuXG5cbiAgICAgICAgICBpZiAodGFyZ2V0SUQgPT09IGNoaWxkSUQpIHtcbiAgICAgICAgICAgIHRhcmdldENoaWxkID0gY2hpbGQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChSZWFjdEluc3RhbmNlSGFuZGxlcy5pc0FuY2VzdG9ySURPZihjaGlsZElELCB0YXJnZXRJRCkpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGZpbmQgYSBjaGlsZCB3aG9zZSBJRCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gSUQsXG4gICAgICAgICAgICAvLyB0aGVuIHdlIGNhbiBiZSBzdXJlIHRoYXQgd2Ugb25seSB3YW50IHRvIHNlYXJjaCB0aGUgc3VidHJlZVxuICAgICAgICAgICAgLy8gcm9vdGVkIGF0IHRoaXMgY2hpbGQsIHNvIHdlIGNhbiB0aHJvdyBvdXQgdGhlIHJlc3Qgb2YgdGhlXG4gICAgICAgICAgICAvLyBzZWFyY2ggc3RhdGUuXG4gICAgICAgICAgICBmaXJzdENoaWxkcmVuLmxlbmd0aCA9IGNoaWxkSW5kZXggPSAwO1xuICAgICAgICAgICAgZmlyc3RDaGlsZHJlbi5wdXNoKGNoaWxkLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoaXMgY2hpbGQgaGFkIG5vIElELCB0aGVuIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpdCB3YXNcbiAgICAgICAgICAvLyBpbmplY3RlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBicm93c2VyLCBhcyB3aGVuIGEgYDx0YWJsZT5gXG4gICAgICAgICAgLy8gZWxlbWVudCBzcHJvdXRzIGFuIGV4dHJhIGA8dGJvZHk+YCBjaGlsZCBhcyBhIHNpZGUgZWZmZWN0IG9mXG4gICAgICAgICAgLy8gYC5pbm5lckhUTUxgIHBhcnNpbmcuIE9wdGltaXN0aWNhbGx5IGNvbnRpbnVlIGRvd24gdGhpc1xuICAgICAgICAgIC8vIGJyYW5jaCwgYnV0IG5vdCBiZWZvcmUgZXhhbWluaW5nIHRoZSBvdGhlciBzaWJsaW5ncy5cbiAgICAgICAgICBmaXJzdENoaWxkcmVuLnB1c2goY2hpbGQuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0Q2hpbGQpIHtcbiAgICAgICAgLy8gRW1wdHlpbmcgZmlyc3RDaGlsZHJlbi9maW5kQ29tcG9uZW50Um9vdFJldXNhYmxlQXJyYXkgaXNcbiAgICAgICAgLy8gbm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3MsIGJ1dCBpdCBoZWxwcyB0aGUgR0MgcmVjbGFpbVxuICAgICAgICAvLyBhbnkgbm9kZXMgdGhhdCB3ZXJlIGxlZnQgYXQgdGhlIGVuZCBvZiB0aGUgc2VhcmNoLlxuICAgICAgICBmaXJzdENoaWxkcmVuLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldENoaWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpcnN0Q2hpbGRyZW4ubGVuZ3RoID0gMDtcblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBmYWxzZSxcbiAgICAgICdmaW5kQ29tcG9uZW50Um9vdCguLi4sICVzKTogVW5hYmxlIHRvIGZpbmQgZWxlbWVudC4gVGhpcyBwcm9iYWJseSAnICtcbiAgICAgICdtZWFucyB0aGUgRE9NIHdhcyB1bmV4cGVjdGVkbHkgbXV0YXRlZCAoZS5nLiwgYnkgdGhlIGJyb3dzZXIpLCAnICtcbiAgICAgICd1c3VhbGx5IGR1ZSB0byBmb3JnZXR0aW5nIGEgPHRib2R5PiB3aGVuIHVzaW5nIHRhYmxlcywgbmVzdGluZyB0YWdzICcgK1xuICAgICAgJ2xpa2UgPGZvcm0+LCA8cD4sIG9yIDxhPiwgb3IgdXNpbmcgbm9uLVNWRyBlbGVtZW50cyBpbiBhbiA8c3ZnPiAnICtcbiAgICAgICdwYXJlbnQuICcgK1xuICAgICAgJ1RyeSBpbnNwZWN0aW5nIHRoZSBjaGlsZCBub2RlcyBvZiB0aGUgZWxlbWVudCB3aXRoIFJlYWN0IElEIGAlc2AuJyxcbiAgICAgIHRhcmdldElELFxuICAgICAgUmVhY3RNb3VudC5nZXRJRChhbmNlc3Rvck5vZGUpXG4gICAgKSA6IGludmFyaWFudChmYWxzZSkpO1xuICB9LFxuXG4gIF9tb3VudEltYWdlSW50b05vZGU6IGZ1bmN0aW9uKG1hcmt1cCwgY29udGFpbmVyLCBzaG91bGRSZXVzZU1hcmt1cCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBjb250YWluZXIgJiYgKFxuICAgICAgICAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpXG4gICAgICApLFxuICAgICAgJ21vdW50Q29tcG9uZW50SW50b05vZGUoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgdmFsaWQuJ1xuICAgICkgOiBpbnZhcmlhbnQoY29udGFpbmVyICYmIChcbiAgICAgIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFIHx8IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSlcbiAgICApKSk7XG5cbiAgICBpZiAoc2hvdWxkUmV1c2VNYXJrdXApIHtcbiAgICAgIHZhciByb290RWxlbWVudCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgaWYgKFJlYWN0TWFya3VwQ2hlY2tzdW0uY2FuUmV1c2VNYXJrdXAobWFya3VwLCByb290RWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGNoZWNrc3VtID0gcm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKFxuICAgICAgICAgIFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FXG4gICAgICAgICk7XG4gICAgICAgIHJvb3RFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRSk7XG5cbiAgICAgICAgdmFyIHJvb3RNYXJrdXAgPSByb290RWxlbWVudC5vdXRlckhUTUw7XG4gICAgICAgIHJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRSxcbiAgICAgICAgICBjaGVja3N1bVxuICAgICAgICApO1xuXG4gICAgICAgIHZhciBkaWZmSW5kZXggPSBmaXJzdERpZmZlcmVuY2VJbmRleChtYXJrdXAsIHJvb3RNYXJrdXApO1xuICAgICAgICB2YXIgZGlmZmVyZW5jZSA9ICcgKGNsaWVudCkgJyArXG4gICAgICAgICAgbWFya3VwLnN1YnN0cmluZyhkaWZmSW5kZXggLSAyMCwgZGlmZkluZGV4ICsgMjApICtcbiAgICAgICAgICAnXFxuIChzZXJ2ZXIpICcgKyByb290TWFya3VwLnN1YnN0cmluZyhkaWZmSW5kZXggLSAyMCwgZGlmZkluZGV4ICsgMjApO1xuXG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFLFxuICAgICAgICAgICdZb3VcXCdyZSB0cnlpbmcgdG8gcmVuZGVyIGEgY29tcG9uZW50IHRvIHRoZSBkb2N1bWVudCB1c2luZyAnICtcbiAgICAgICAgICAnc2VydmVyIHJlbmRlcmluZyBidXQgdGhlIGNoZWNrc3VtIHdhcyBpbnZhbGlkLiBUaGlzIHVzdWFsbHkgJyArXG4gICAgICAgICAgJ21lYW5zIHlvdSByZW5kZXJlZCBhIGRpZmZlcmVudCBjb21wb25lbnQgdHlwZSBvciBwcm9wcyBvbiAnICtcbiAgICAgICAgICAndGhlIGNsaWVudCBmcm9tIHRoZSBvbmUgb24gdGhlIHNlcnZlciwgb3IgeW91ciByZW5kZXIoKSAnICtcbiAgICAgICAgICAnbWV0aG9kcyBhcmUgaW1wdXJlLiBSZWFjdCBjYW5ub3QgaGFuZGxlIHRoaXMgY2FzZSBkdWUgdG8gJyArXG4gICAgICAgICAgJ2Nyb3NzLWJyb3dzZXIgcXVpcmtzIGJ5IHJlbmRlcmluZyBhdCB0aGUgZG9jdW1lbnQgcm9vdC4gWW91ICcgK1xuICAgICAgICAgICdzaG91bGQgbG9vayBmb3IgZW52aXJvbm1lbnQgZGVwZW5kZW50IGNvZGUgaW4geW91ciBjb21wb25lbnRzICcgK1xuICAgICAgICAgICdhbmQgZW5zdXJlIHRoZSBwcm9wcyBhcmUgdGhlIHNhbWUgY2xpZW50IGFuZCBzZXJ2ZXIgc2lkZTpcXG4lcycsXG4gICAgICAgICAgZGlmZmVyZW5jZVxuICAgICAgICApIDogaW52YXJpYW50KGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gRE9DX05PREVfVFlQRSkpO1xuXG4gICAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgJ1JlYWN0IGF0dGVtcHRlZCB0byByZXVzZSBtYXJrdXAgaW4gYSBjb250YWluZXIgYnV0IHRoZSAnICtcbiAgICAgICAgICAgICdjaGVja3N1bSB3YXMgaW52YWxpZC4gVGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhhdCB5b3UgYXJlICcgK1xuICAgICAgICAgICAgJ3VzaW5nIHNlcnZlciByZW5kZXJpbmcgYW5kIHRoZSBtYXJrdXAgZ2VuZXJhdGVkIG9uIHRoZSAnICtcbiAgICAgICAgICAgICdzZXJ2ZXIgd2FzIG5vdCB3aGF0IHRoZSBjbGllbnQgd2FzIGV4cGVjdGluZy4gUmVhY3QgaW5qZWN0ZWQgJyArXG4gICAgICAgICAgICAnbmV3IG1hcmt1cCB0byBjb21wZW5zYXRlIHdoaWNoIHdvcmtzIGJ1dCB5b3UgaGF2ZSBsb3N0IG1hbnkgJyArXG4gICAgICAgICAgICAnb2YgdGhlIGJlbmVmaXRzIG9mIHNlcnZlciByZW5kZXJpbmcuIEluc3RlYWQsIGZpZ3VyZSBvdXQgJyArXG4gICAgICAgICAgICAnd2h5IHRoZSBtYXJrdXAgYmVpbmcgZ2VuZXJhdGVkIGlzIGRpZmZlcmVudCBvbiB0aGUgY2xpZW50ICcgK1xuICAgICAgICAgICAgJ29yIHNlcnZlcjpcXG4lcycsXG4gICAgICAgICAgICBkaWZmZXJlbmNlXG4gICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gRE9DX05PREVfVFlQRSxcbiAgICAgICdZb3VcXCdyZSB0cnlpbmcgdG8gcmVuZGVyIGEgY29tcG9uZW50IHRvIHRoZSBkb2N1bWVudCBidXQgJyArXG4gICAgICAgICd5b3UgZGlkblxcJ3QgdXNlIHNlcnZlciByZW5kZXJpbmcuIFdlIGNhblxcJ3QgZG8gdGhpcyAnICtcbiAgICAgICAgJ3dpdGhvdXQgdXNpbmcgc2VydmVyIHJlbmRlcmluZyBkdWUgdG8gY3Jvc3MtYnJvd3NlciBxdWlya3MuICcgK1xuICAgICAgICAnU2VlIFJlYWN0LnJlbmRlclRvU3RyaW5nKCkgZm9yIHNlcnZlciByZW5kZXJpbmcuJ1xuICAgICkgOiBpbnZhcmlhbnQoY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFKSk7XG5cbiAgICBzZXRJbm5lckhUTUwoY29udGFpbmVyLCBtYXJrdXApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWFjdCBJRCB1dGlsaXRpZXMuXG4gICAqL1xuXG4gIGdldFJlYWN0Um9vdElEOiBnZXRSZWFjdFJvb3RJRCxcblxuICBnZXRJRDogZ2V0SUQsXG5cbiAgc2V0SUQ6IHNldElELFxuXG4gIGdldE5vZGU6IGdldE5vZGUsXG5cbiAgZ2V0Tm9kZUZyb21JbnN0YW5jZTogZ2V0Tm9kZUZyb21JbnN0YW5jZSxcblxuICBwdXJnZUlEOiBwdXJnZUlEXG59O1xuXG5SZWFjdFBlcmYubWVhc3VyZU1ldGhvZHMoUmVhY3RNb3VudCwgJ1JlYWN0TW91bnQnLCB7XG4gIF9yZW5kZXJOZXdSb290Q29tcG9uZW50OiAnX3JlbmRlck5ld1Jvb3RDb21wb25lbnQnLFxuICBfbW91bnRJbWFnZUludG9Ob2RlOiAnX21vdW50SW1hZ2VJbnRvTm9kZSdcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TW91bnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSTmIzVnVkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JOYjNWdWRGeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRVJQVFZCeWIzQmxjblI1SUQwZ2NtVnhkV2x5WlNoY0lpNHZSRTlOVUhKdmNHVnlkSGxjSWlrN1hHNTJZWElnVW1WaFkzUkNjbTkzYzJWeVJYWmxiblJGYldsMGRHVnlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JDY205M2MyVnlSWFpsYm5SRmJXbDBkR1Z5WENJcE8xeHVkbUZ5SUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSmNJaWs3WEc1MllYSWdVbVZoWTNSRmJHVnRaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmJHVnRaVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNsd2lLVHRjYm5aaGNpQlNaV0ZqZEVWdGNIUjVRMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYlhCMGVVTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVsdWMzUmhibU5sU0dGdVpHeGxjeUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpYQ0lwTzF4dWRtRnlJRkpsWVdOMFNXNXpkR0Z1WTJWTllYQWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRWx1YzNSaGJtTmxUV0Z3WENJcE8xeHVkbUZ5SUZKbFlXTjBUV0Z5YTNWd1EyaGxZMnR6ZFcwZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFMWhjbXQxY0VOb1pXTnJjM1Z0WENJcE8xeHVkbUZ5SUZKbFlXTjBVR1Z5WmlBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVHVnlabHdpS1R0Y2JuWmhjaUJTWldGamRGSmxZMjl1WTJsc1pYSWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRkpsWTI5dVkybHNaWEpjSWlrN1hHNTJZWElnVW1WaFkzUlZjR1JoZEdWUmRXVjFaU0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVlhCa1lYUmxVWFZsZFdWY0lpazdYRzUyWVhJZ1VtVmhZM1JWY0dSaGRHVnpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JWY0dSaGRHVnpYQ0lwTzF4dVhHNTJZWElnWlcxd2RIbFBZbXBsWTNRZ1BTQnlaWEYxYVhKbEtGd2lMaTlsYlhCMGVVOWlhbVZqZEZ3aUtUdGNiblpoY2lCamIyNTBZV2x1YzA1dlpHVWdQU0J5WlhGMWFYSmxLRndpTGk5amIyNTBZV2x1YzA1dlpHVmNJaWs3WEc1MllYSWdaMlYwVW1WaFkzUlNiMjkwUld4bGJXVnVkRWx1UTI5dWRHRnBibVZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZaMlYwVW1WaFkzUlNiMjkwUld4bGJXVnVkRWx1UTI5dWRHRnBibVZ5WENJcE8xeHVkbUZ5SUdsdWMzUmhiblJwWVhSbFVtVmhZM1JEYjIxd2IyNWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MFhDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNiblpoY2lCelpYUkpibTVsY2toVVRVd2dQU0J5WlhGMWFYSmxLRndpTGk5elpYUkpibTVsY2toVVRVeGNJaWs3WEc1MllYSWdjMmh2ZFd4a1ZYQmtZWFJsVW1WaFkzUkRiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5emFHOTFiR1JWY0dSaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZEZ3aUtUdGNiblpoY2lCM1lYSnVhVzVuSUQwZ2NtVnhkV2x5WlNoY0lpNHZkMkZ5Ym1sdVoxd2lLVHRjYmx4dWRtRnlJRk5GVUVGU1FWUlBVaUE5SUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWekxsTkZVRUZTUVZSUFVqdGNibHh1ZG1GeUlFRlVWRkpmVGtGTlJTQTlJRVJQVFZCeWIzQmxjblI1TGtsRVgwRlVWRkpKUWxWVVJWOU9RVTFGTzF4dWRtRnlJRzV2WkdWRFlXTm9aU0E5SUh0OU8xeHVYRzUyWVhJZ1JVeEZUVVZPVkY5T1QwUkZYMVJaVUVVZ1BTQXhPMXh1ZG1GeUlFUlBRMTlPVDBSRlgxUlpVRVVnUFNBNU8xeHVYRzR2S2lvZ1RXRndjR2x1WnlCbWNtOXRJSEpsWVdOMFVtOXZkRWxFSUhSdklGSmxZV04wSUdOdmJYQnZibVZ1ZENCcGJuTjBZVzVqWlM0Z0tpOWNiblpoY2lCcGJuTjBZVzVqWlhOQ2VWSmxZV04wVW05dmRFbEVJRDBnZTMwN1hHNWNiaThxS2lCTllYQndhVzVuSUdaeWIyMGdjbVZoWTNSU2IyOTBTVVFnZEc4Z1lHTnZiblJoYVc1bGNtQWdibTlrWlhNdUlDb3ZYRzUyWVhJZ1kyOXVkR0ZwYm1WeWMwSjVVbVZoWTNSU2IyOTBTVVFnUFNCN2ZUdGNibHh1YVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQXZLaW9nWDE5RVJWWmZYeTF2Ym14NUlHMWhjSEJwYm1jZ1puSnZiU0J5WldGamRGSnZiM1JKUkNCMGJ5QnliMjkwSUdWc1pXMWxiblJ6TGlBcUwxeHVJQ0IyWVhJZ2NtOXZkRVZzWlcxbGJuUnpRbmxTWldGamRGSnZiM1JKUkNBOUlIdDlPMXh1ZlZ4dVhHNHZMeUJWYzJWa0lIUnZJSE4wYjNKbElHSnlaV0ZrZEdndFptbHljM1FnYzJWaGNtTm9JSE4wWVhSbElHbHVJR1pwYm1SRGIyMXdiMjVsYm5SU2IyOTBMbHh1ZG1GeUlHWnBibVJEYjIxd2IyNWxiblJTYjI5MFVtVjFjMkZpYkdWQmNuSmhlU0E5SUZ0ZE8xeHVYRzR2S2lwY2JpQXFJRVpwYm1SeklIUm9aU0JwYm1SbGVDQnZaaUIwYUdVZ1ptbHljM1FnWTJoaGNtRmpkR1Z5WEc0Z0tpQjBhR0YwSjNNZ2JtOTBJR052YlcxdmJpQmlaWFIzWldWdUlIUm9aU0IwZDI4Z1oybDJaVzRnYzNSeWFXNW5jeTVjYmlBcVhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJSFJvWlNCcGJtUmxlQ0J2WmlCMGFHVWdZMmhoY21GamRHVnlJSGRvWlhKbElIUm9aU0J6ZEhKcGJtZHpJR1JwZG1WeVoyVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1ptbHljM1JFYVdabVpYSmxibU5sU1c1a1pYZ29jM1J5YVc1bk1Td2djM1J5YVc1bk1pa2dlMXh1SUNCMllYSWdiV2x1VEdWdUlEMGdUV0YwYUM1dGFXNG9jM1J5YVc1bk1TNXNaVzVuZEdnc0lITjBjbWx1WnpJdWJHVnVaM1JvS1R0Y2JpQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0J0YVc1TVpXNDdJR2tyS3lrZ2UxeHVJQ0FnSUdsbUlDaHpkSEpwYm1jeExtTm9ZWEpCZENocEtTQWhQVDBnYzNSeWFXNW5NaTVqYUdGeVFYUW9hU2twSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdjM1J5YVc1bk1TNXNaVzVuZEdnZ1BUMDlJSE4wY21sdVp6SXViR1Z1WjNSb0lEOGdMVEVnT2lCdGFXNU1aVzQ3WEc1OVhHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdEVUMDFGYkdWdFpXNTBmU0JqYjI1MFlXbHVaWElnUkU5TklHVnNaVzFsYm5RZ2RHaGhkQ0J0WVhrZ1kyOXVkR0ZwYmlCaElGSmxZV04wSUdOdmJYQnZibVZ1ZEM1Y2JpQXFJRUJ5WlhSMWNtNGdlejl6ZEhKcGJtZDlJRUVnWENKeVpXRmpkRkp2YjNSY0lpQkpSQ3dnYVdZZ1lTQlNaV0ZqZENCamIyMXdiMjVsYm5RZ2FYTWdjbVZ1WkdWeVpXUXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHZGxkRkpsWVdOMFVtOXZkRWxFS0dOdmJuUmhhVzVsY2lrZ2UxeHVJQ0IyWVhJZ2NtOXZkRVZzWlcxbGJuUWdQU0JuWlhSU1pXRmpkRkp2YjNSRmJHVnRaVzUwU1c1RGIyNTBZV2x1WlhJb1kyOXVkR0ZwYm1WeUtUdGNiaUFnY21WMGRYSnVJSEp2YjNSRmJHVnRaVzUwSUNZbUlGSmxZV04wVFc5MWJuUXVaMlYwU1VRb2NtOXZkRVZzWlcxbGJuUXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFRmpZMlZ6YzJsdVp5QnViMlJsVzBGVVZGSmZUa0ZOUlYwZ2IzSWdZMkZzYkdsdVp5Qm5aWFJCZEhSeWFXSjFkR1VvUVZSVVVsOU9RVTFGS1NCdmJpQmhJR1p2Y20xY2JpQXFJR1ZzWlcxbGJuUWdZMkZ1SUhKbGRIVnliaUJwZEhNZ1kyOXVkSEp2YkNCM2FHOXpaU0J1WVcxbElHOXlJRWxFSUdWeGRXRnNjeUJCVkZSU1gwNUJUVVV1SUVGc2JGeHVJQ29nUkU5TklHNXZaR1Z6SUhOMWNIQnZjblFnWUdkbGRFRjBkSEpwWW5WMFpVNXZaR1ZnSUdKMWRDQjBhR2x6SUdOaGJpQmhiSE52SUdkbGRDQmpZV3hzWldRZ2IyNWNiaUFxSUc5MGFHVnlJRzlpYW1WamRITWdjMjhnYW5WemRDQnlaWFIxY200Z0p5Y2dhV1lnZDJVbmNtVWdaMmwyWlc0Z2MyOXRaWFJvYVc1bklHOTBhR1Z5SUhSb1lXNGdZVnh1SUNvZ1JFOU5JRzV2WkdVZ0tITjFZMmdnWVhNZ2QybHVaRzkzS1M1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZXo5RVQwMUZiR1Z0Wlc1MGZFUlBUVmRwYm1SdmQzeEVUMDFFYjJOMWJXVnVkSHhFVDAxVVpYaDBUbTlrWlgwZ2JtOWtaU0JFVDAwZ2JtOWtaUzVjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ1NVUWdiMllnZEdobElITjFjSEJzYVdWa0lHQmtiMjFPYjJSbFlDNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1oyVjBTVVFvYm05a1pTa2dlMXh1SUNCMllYSWdhV1FnUFNCcGJuUmxjbTVoYkVkbGRFbEVLRzV2WkdVcE8xeHVJQ0JwWmlBb2FXUXBJSHRjYmlBZ0lDQnBaaUFvYm05a1pVTmhZMmhsTG1oaGMwOTNibEJ5YjNCbGNuUjVLR2xrS1NrZ2UxeHVJQ0FnSUNBZ2RtRnlJR05oWTJobFpDQTlJRzV2WkdWRFlXTm9aVnRwWkYwN1hHNGdJQ0FnSUNCcFppQW9ZMkZqYUdWa0lDRTlQU0J1YjJSbEtTQjdYRzRnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJQ0FnSVdselZtRnNhV1FvWTJGamFHVmtMQ0JwWkNrc1hHNGdJQ0FnSUNBZ0lDQWdKMUpsWVdOMFRXOTFiblE2SUZSM2J5QjJZV3hwWkNCaWRYUWdkVzVsY1hWaGJDQnViMlJsY3lCM2FYUm9JSFJvWlNCellXMWxJR0FsYzJBNklDVnpKeXhjYmlBZ0lDQWdJQ0FnSUNCQlZGUlNYMDVCVFVVc0lHbGtYRzRnSUNBZ0lDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lXbHpWbUZzYVdRb1kyRmphR1ZrTENCcFpDa3BLVHRjYmx4dUlDQWdJQ0FnSUNCdWIyUmxRMkZqYUdWYmFXUmRJRDBnYm05a1pUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYm05a1pVTmhZMmhsVzJsa1hTQTlJRzV2WkdVN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUdsa08xeHVmVnh1WEc1bWRXNWpkR2x2YmlCcGJuUmxjbTVoYkVkbGRFbEVLRzV2WkdVcElIdGNiaUFnTHk4Z1NXWWdibTlrWlNCcGN5QnpiMjFsZEdocGJtY2diR2xyWlNCaElIZHBibVJ2ZHl3Z1pHOWpkVzFsYm5Rc0lHOXlJSFJsZUhRZ2JtOWtaU3dnYm05dVpTQnZabHh1SUNBdkx5QjNhR2xqYUNCemRYQndiM0owSUdGMGRISnBZblYwWlhNZ2IzSWdZU0F1WjJWMFFYUjBjbWxpZFhSbElHMWxkR2h2WkN3Z1ozSmhZMlZtZFd4c2VTQnlaWFIxY201Y2JpQWdMeThnZEdobElHVnRjSFI1SUhOMGNtbHVaeXdnWVhNZ2FXWWdkR2hsSUdGMGRISnBZblYwWlNCM1pYSmxJRzFwYzNOcGJtY3VYRzRnSUhKbGRIVnliaUJ1YjJSbElDWW1JRzV2WkdVdVoyVjBRWFIwY21saWRYUmxJQ1ltSUc1dlpHVXVaMlYwUVhSMGNtbGlkWFJsS0VGVVZGSmZUa0ZOUlNrZ2ZId2dKeWM3WEc1OVhHNWNiaThxS2x4dUlDb2dVMlYwY3lCMGFHVWdVbVZoWTNRdGMzQmxZMmxtYVdNZ1NVUWdiMllnZEdobElHZHBkbVZ1SUc1dlpHVXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdEVUMDFGYkdWdFpXNTBmU0J1YjJSbElGUm9aU0JFVDAwZ2JtOWtaU0IzYUc5elpTQkpSQ0IzYVd4c0lHSmxJSE5sZEM1Y2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnBaQ0JVYUdVZ2RtRnNkV1VnYjJZZ2RHaGxJRWxFSUdGMGRISnBZblYwWlM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYzJWMFNVUW9ibTlrWlN3Z2FXUXBJSHRjYmlBZ2RtRnlJRzlzWkVsRUlEMGdhVzUwWlhKdVlXeEhaWFJKUkNodWIyUmxLVHRjYmlBZ2FXWWdLRzlzWkVsRUlDRTlQU0JwWkNrZ2UxeHVJQ0FnSUdSbGJHVjBaU0J1YjJSbFEyRmphR1ZiYjJ4a1NVUmRPMXh1SUNCOVhHNGdJRzV2WkdVdWMyVjBRWFIwY21saWRYUmxLRUZVVkZKZlRrRk5SU3dnYVdRcE8xeHVJQ0J1YjJSbFEyRmphR1ZiYVdSZElEMGdibTlrWlR0Y2JuMWNibHh1THlvcVhHNGdLaUJHYVc1a2N5QjBhR1VnYm05a1pTQjNhWFJvSUhSb1pTQnpkWEJ3YkdsbFpDQlNaV0ZqZEMxblpXNWxjbUYwWldRZ1JFOU5JRWxFTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCQklGSmxZV04wTFdkbGJtVnlZWFJsWkNCRVQwMGdTVVF1WEc0Z0tpQkFjbVYwZFhKdUlIdEVUMDFGYkdWdFpXNTBmU0JFVDAwZ2JtOWtaU0IzYVhSb0lIUm9aU0J6ZFhCd2JHVmtJR0JwWkdBdVhHNGdLaUJBYVc1MFpYSnVZV3hjYmlBcUwxeHVablZ1WTNScGIyNGdaMlYwVG05a1pTaHBaQ2tnZTF4dUlDQnBaaUFvSVc1dlpHVkRZV05vWlM1b1lYTlBkMjVRY205d1pYSjBlU2hwWkNrZ2ZId2dJV2x6Vm1Gc2FXUW9ibTlrWlVOaFkyaGxXMmxrWFN3Z2FXUXBLU0I3WEc0Z0lDQWdibTlrWlVOaFkyaGxXMmxrWFNBOUlGSmxZV04wVFc5MWJuUXVabWx1WkZKbFlXTjBUbTlrWlVKNVNVUW9hV1FwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ1YjJSbFEyRmphR1ZiYVdSZE8xeHVmVnh1WEc0dktpcGNiaUFxSUVacGJtUnpJSFJvWlNCdWIyUmxJSGRwZEdnZ2RHaGxJSE4xY0hCc2FXVmtJSEIxWW14cFl5QlNaV0ZqZENCcGJuTjBZVzVqWlM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZXlwOUlHbHVjM1JoYm1ObElFRWdjSFZpYkdsaklGSmxZV04wSUdsdWMzUmhibU5sTGx4dUlDb2dRSEpsZEhWeWJpQjdQMFJQVFVWc1pXMWxiblI5SUVSUFRTQnViMlJsSUhkcGRHZ2dkR2hsSUhOMWNIQnNaV1FnWUdsa1lDNWNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJuWlhST2IyUmxSbkp2YlVsdWMzUmhibU5sS0dsdWMzUmhibU5sS1NCN1hHNGdJSFpoY2lCcFpDQTlJRkpsWVdOMFNXNXpkR0Z1WTJWTllYQXVaMlYwS0dsdWMzUmhibU5sS1M1ZmNtOXZkRTV2WkdWSlJEdGNiaUFnYVdZZ0tGSmxZV04wUlcxd2RIbERiMjF3YjI1bGJuUXVhWE5PZFd4c1EyOXRjRzl1Wlc1MFNVUW9hV1FwS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDFjYmlBZ2FXWWdLQ0Z1YjJSbFEyRmphR1V1YUdGelQzZHVVSEp2Y0dWeWRIa29hV1FwSUh4OElDRnBjMVpoYkdsa0tHNXZaR1ZEWVdOb1pWdHBaRjBzSUdsa0tTa2dlMXh1SUNBZ0lHNXZaR1ZEWVdOb1pWdHBaRjBnUFNCU1pXRmpkRTF2ZFc1MExtWnBibVJTWldGamRFNXZaR1ZDZVVsRUtHbGtLVHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdibTlrWlVOaFkyaGxXMmxrWFR0Y2JuMWNibHh1THlvcVhHNGdLaUJCSUc1dlpHVWdhWE1nWENKMllXeHBaRndpSUdsbUlHbDBJR2x6SUdOdmJuUmhhVzVsWkNCaWVTQmhJR04xY25KbGJuUnNlU0J0YjNWdWRHVmtJR052Ym5SaGFXNWxjaTVjYmlBcVhHNGdLaUJVYUdseklHMWxZVzV6SUhSb1lYUWdkR2hsSUc1dlpHVWdaRzlsY3lCdWIzUWdhR0YyWlNCMGJ5QmlaU0JqYjI1MFlXbHVaV1FnWW5rZ1lTQmtiMk4xYldWdWRDQnBibHh1SUNvZ2IzSmtaWElnZEc4Z1ltVWdZMjl1YzJsa1pYSmxaQ0IyWVd4cFpDNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2V6OUVUMDFGYkdWdFpXNTBmU0J1YjJSbElGUm9aU0JqWVc1a2FXUmhkR1VnUkU5TklHNXZaR1V1WEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2FXUWdWR2hsSUdWNGNHVmpkR1ZrSUVsRUlHOW1JSFJvWlNCdWIyUmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4wZ1YyaGxkR2hsY2lCMGFHVWdibTlrWlNCcGN5QmpiMjUwWVdsdVpXUWdZbmtnWVNCdGIzVnVkR1ZrSUdOdmJuUmhhVzVsY2k1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYVhOV1lXeHBaQ2h1YjJSbExDQnBaQ2tnZTF4dUlDQnBaaUFvYm05a1pTa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCcGJuUmxjbTVoYkVkbGRFbEVLRzV2WkdVcElEMDlQU0JwWkN4Y2JpQWdJQ0FnSUNkU1pXRmpkRTF2ZFc1ME9pQlZibVY0Y0dWamRHVmtJRzF2WkdsbWFXTmhkR2x2YmlCdlppQmdKWE5nSnl4Y2JpQWdJQ0FnSUVGVVZGSmZUa0ZOUlZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2FXNTBaWEp1WVd4SFpYUkpSQ2h1YjJSbEtTQTlQVDBnYVdRcEtUdGNibHh1SUNBZ0lIWmhjaUJqYjI1MFlXbHVaWElnUFNCU1pXRmpkRTF2ZFc1MExtWnBibVJTWldGamRFTnZiblJoYVc1bGNrWnZja2xFS0dsa0tUdGNiaUFnSUNCcFppQW9ZMjl1ZEdGcGJtVnlJQ1ltSUdOdmJuUmhhVzV6VG05a1pTaGpiMjUwWVdsdVpYSXNJRzV2WkdVcEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2RISjFaVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNTlYRzVjYmk4cUtseHVJQ29nUTJGMWMyVnpJSFJvWlNCallXTm9aU0IwYnlCbWIzSm5aWFFnWVdKdmRYUWdiMjVsSUZKbFlXTjBMWE53WldOcFptbGpJRWxFTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCVWFHVWdTVVFnZEc4Z1ptOXlaMlYwTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJ3ZFhKblpVbEVLR2xrS1NCN1hHNGdJR1JsYkdWMFpTQnViMlJsUTJGamFHVmJhV1JkTzF4dWZWeHVYRzUyWVhJZ1pHVmxjR1Z6ZEU1dlpHVlRiMFpoY2lBOUlHNTFiR3c3WEc1bWRXNWpkR2x2YmlCbWFXNWtSR1ZsY0dWemRFTmhZMmhsWkVGdVkyVnpkRzl5U1cxd2JDaGhibU5sYzNSdmNrbEVLU0I3WEc0Z0lIWmhjaUJoYm1ObGMzUnZjaUE5SUc1dlpHVkRZV05vWlZ0aGJtTmxjM1J2Y2tsRVhUdGNiaUFnYVdZZ0tHRnVZMlZ6ZEc5eUlDWW1JR2x6Vm1Gc2FXUW9ZVzVqWlhOMGIzSXNJR0Z1WTJWemRHOXlTVVFwS1NCN1hHNGdJQ0FnWkdWbGNHVnpkRTV2WkdWVGIwWmhjaUE5SUdGdVkyVnpkRzl5TzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUM4dklGUm9hWE1nYm05a1pTQnBjMjRuZENCd2IzQjFiR0YwWldRZ2FXNGdkR2hsSUdOaFkyaGxMQ0J6YnlCd2NtVnpkVzFoWW14NUlHNXZibVVnYjJZZ2FYUnpYRzRnSUNBZ0x5OGdaR1Z6WTJWdVpHRnVkSE1nWVhKbExpQkNjbVZoYXlCdmRYUWdiMllnZEdobElHeHZiM0F1WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1SUhSb1pTQmtaV1Z3WlhOMElHTmhZMmhsWkNCdWIyUmxJSGRvYjNObElFbEVJR2x6SUdFZ2NISmxabWw0SUc5bUlHQjBZWEpuWlhSSlJHQXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHWnBibVJFWldWd1pYTjBRMkZqYUdWa1FXNWpaWE4wYjNJb2RHRnlaMlYwU1VRcElIdGNiaUFnWkdWbGNHVnpkRTV2WkdWVGIwWmhjaUE5SUc1MWJHdzdYRzRnSUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWekxuUnlZWFpsY25ObFFXNWpaWE4wYjNKektGeHVJQ0FnSUhSaGNtZGxkRWxFTEZ4dUlDQWdJR1pwYm1SRVpXVndaWE4wUTJGamFHVmtRVzVqWlhOMGIzSkpiWEJzWEc0Z0lDazdYRzVjYmlBZ2RtRnlJR1p2ZFc1a1RtOWtaU0E5SUdSbFpYQmxjM1JPYjJSbFUyOUdZWEk3WEc0Z0lHUmxaWEJsYzNST2IyUmxVMjlHWVhJZ1BTQnVkV3hzTzF4dUlDQnlaWFIxY200Z1ptOTFibVJPYjJSbE8xeHVmVnh1WEc0dktpcGNiaUFxSUUxdmRXNTBjeUIwYUdseklHTnZiWEJ2Ym1WdWRDQmhibVFnYVc1elpYSjBjeUJwZENCcGJuUnZJSFJvWlNCRVQwMHVYRzRnS2x4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ1kyOXRjRzl1Wlc1MFNXNXpkR0Z1WTJVZ1ZHaGxJR2x1YzNSaGJtTmxJSFJ2SUcxdmRXNTBMbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhKdmIzUkpSQ0JFVDAwZ1NVUWdiMllnZEdobElISnZiM1FnYm05a1pTNWNiaUFxSUVCd1lYSmhiU0I3UkU5TlJXeGxiV1Z1ZEgwZ1kyOXVkR0ZwYm1WeUlFUlBUU0JsYkdWdFpXNTBJSFJ2SUcxdmRXNTBJR2x1ZEc4dVhHNGdLaUJBY0dGeVlXMGdlMUpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNTlJSFJ5WVc1ellXTjBhVzl1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlITm9iM1ZzWkZKbGRYTmxUV0Z5YTNWd0lFbG1JSFJ5ZFdVc0lHUnZJRzV2ZENCcGJuTmxjblFnYldGeWEzVndYRzRnS2k5Y2JtWjFibU4wYVc5dUlHMXZkVzUwUTI5dGNHOXVaVzUwU1c1MGIwNXZaR1VvWEc0Z0lDQWdZMjl0Y0c5dVpXNTBTVzV6ZEdGdVkyVXNYRzRnSUNBZ2NtOXZkRWxFTEZ4dUlDQWdJR052Ym5SaGFXNWxjaXhjYmlBZ0lDQjBjbUZ1YzJGamRHbHZiaXhjYmlBZ0lDQnphRzkxYkdSU1pYVnpaVTFoY210MWNDa2dlMXh1SUNCMllYSWdiV0Z5YTNWd0lEMGdVbVZoWTNSU1pXTnZibU5wYkdWeUxtMXZkVzUwUTI5dGNHOXVaVzUwS0Z4dUlDQWdJR052YlhCdmJtVnVkRWx1YzNSaGJtTmxMQ0J5YjI5MFNVUXNJSFJ5WVc1ellXTjBhVzl1TENCbGJYQjBlVTlpYW1WamRGeHVJQ0FwTzF4dUlDQmpiMjF3YjI1bGJuUkpibk4wWVc1alpTNWZhWE5VYjNCTVpYWmxiQ0E5SUhSeWRXVTdYRzRnSUZKbFlXTjBUVzkxYm5RdVgyMXZkVzUwU1cxaFoyVkpiblJ2VG05a1pTaHRZWEpyZFhBc0lHTnZiblJoYVc1bGNpd2djMmh2ZFd4a1VtVjFjMlZOWVhKcmRYQXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFSmhkR05vWldRZ2JXOTFiblF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdZMjl0Y0c5dVpXNTBTVzV6ZEdGdVkyVWdWR2hsSUdsdWMzUmhibU5sSUhSdklHMXZkVzUwTGx4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlISnZiM1JKUkNCRVQwMGdTVVFnYjJZZ2RHaGxJSEp2YjNRZ2JtOWtaUzVjYmlBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdZMjl1ZEdGcGJtVnlJRVJQVFNCbGJHVnRaVzUwSUhSdklHMXZkVzUwSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUhOb2IzVnNaRkpsZFhObFRXRnlhM1Z3SUVsbUlIUnlkV1VzSUdSdklHNXZkQ0JwYm5ObGNuUWdiV0Z5YTNWd1hHNGdLaTljYm1aMWJtTjBhVzl1SUdKaGRHTm9aV1JOYjNWdWRFTnZiWEJ2Ym1WdWRFbHVkRzlPYjJSbEtGeHVJQ0FnSUdOdmJYQnZibVZ1ZEVsdWMzUmhibU5sTEZ4dUlDQWdJSEp2YjNSSlJDeGNiaUFnSUNCamIyNTBZV2x1WlhJc1hHNGdJQ0FnYzJodmRXeGtVbVYxYzJWTllYSnJkWEFwSUh0Y2JpQWdkbUZ5SUhSeVlXNXpZV04wYVc5dUlEMGdVbVZoWTNSVmNHUmhkR1Z6TGxKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjR1WjJWMFVHOXZiR1ZrS0NrN1hHNGdJSFJ5WVc1ellXTjBhVzl1TG5CbGNtWnZjbTBvWEc0Z0lDQWdiVzkxYm5SRGIyMXdiMjVsYm5SSmJuUnZUbTlrWlN4Y2JpQWdJQ0J1ZFd4c0xGeHVJQ0FnSUdOdmJYQnZibVZ1ZEVsdWMzUmhibU5sTEZ4dUlDQWdJSEp2YjNSSlJDeGNiaUFnSUNCamIyNTBZV2x1WlhJc1hHNGdJQ0FnZEhKaGJuTmhZM1JwYjI0c1hHNGdJQ0FnYzJodmRXeGtVbVYxYzJWTllYSnJkWEJjYmlBZ0tUdGNiaUFnVW1WaFkzUlZjR1JoZEdWekxsSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI0dWNtVnNaV0Z6WlNoMGNtRnVjMkZqZEdsdmJpazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1RXOTFiblJwYm1jZ2FYTWdkR2hsSUhCeWIyTmxjM01nYjJZZ2FXNXBkR2xoYkdsNmFXNW5JR0VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBJR0o1SUdOeVpXRjBhVzVuSUdsMGMxeHVJQ29nY21Wd2NtVnpaVzUwWVhScGRtVWdSRTlOSUdWc1pXMWxiblJ6SUdGdVpDQnBibk5sY25ScGJtY2dkR2hsYlNCcGJuUnZJR0VnYzNWd2NHeHBaV1FnWUdOdmJuUmhhVzVsY21BdVhHNGdLaUJCYm5rZ2NISnBiM0lnWTI5dWRHVnVkQ0JwYm5OcFpHVWdZR052Ym5SaGFXNWxjbUFnYVhNZ1pHVnpkSEp2ZVdWa0lHbHVJSFJvWlNCd2NtOWpaWE56TGx4dUlDcGNiaUFxSUNBZ1VtVmhZM1JOYjNWdWRDNXlaVzVrWlhJb1hHNGdLaUFnSUNBZ1kyOXRjRzl1Wlc1MExGeHVJQ29nSUNBZ0lHUnZZM1Z0Wlc1MExtZGxkRVZzWlcxbGJuUkNlVWxrS0NkamIyNTBZV2x1WlhJbktWeHVJQ29nSUNBcE8xeHVJQ3BjYmlBcUlDQWdQR1JwZGlCcFpEMWNJbU52Ym5SaGFXNWxjbHdpUGlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOExTMGdVM1Z3Y0d4cFpXUWdZR052Ym5SaGFXNWxjbUF1WEc0Z0tpQWdJQ0FnUEdScGRpQmtZWFJoTFhKbFlXTjBhV1E5WENJdU0xd2lQaUFnSUNBZ0lDQWdJQ0FnSUNBZ1BDMHRJRkpsYm1SbGNtVmtJSEpsWVdOMFVtOXZkQ0J2WmlCU1pXRmpkRnh1SUNvZ0lDQWdJQ0FnTHk4Z0xpNHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjRzl1Wlc1MExseHVJQ29nSUNBZ0lEd3ZaR2wyUGx4dUlDb2dJQ0E4TDJScGRqNWNiaUFxWEc0Z0tpQkpibk5wWkdVZ2IyWWdZR052Ym5SaGFXNWxjbUFzSUhSb1pTQm1hWEp6ZENCbGJHVnRaVzUwSUhKbGJtUmxjbVZrSUdseklIUm9aU0JjSW5KbFlXTjBVbTl2ZEZ3aUxseHVJQ292WEc1MllYSWdVbVZoWTNSTmIzVnVkQ0E5SUh0Y2JpQWdMeW9xSUVWNGNHOXpaV1FnWm05eUlHUmxZblZuWjJsdVp5QndkWEp3YjNObGN5QXFLaTljYmlBZ1gybHVjM1JoYm1ObGMwSjVVbVZoWTNSU2IyOTBTVVE2SUdsdWMzUmhibU5sYzBKNVVtVmhZM1JTYjI5MFNVUXNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGUm9hWE1nYVhNZ1lTQm9iMjlySUhCeWIzWnBaR1ZrSUhSdklITjFjSEJ2Y25RZ2NtVnVaR1Z5YVc1bklGSmxZV04wSUdOdmJYQnZibVZ1ZEhNZ2QyaHBiR1ZjYmlBZ0lDb2daVzV6ZFhKcGJtY2dkR2hoZENCMGFHVWdZWEJ3WVhKbGJuUWdjMk55YjJ4c0lIQnZjMmwwYVc5dUlHOW1JR2wwY3lCZ1kyOXVkR0ZwYm1WeVlDQmtiMlZ6SUc1dmRGeHVJQ0FnS2lCamFHRnVaMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdZMjl1ZEdGcGJtVnlJRlJvWlNCZ1kyOXVkR0ZwYm1WeVlDQmlaV2x1WnlCeVpXNWtaWEpsWkNCcGJuUnZMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQnlaVzVrWlhKRFlXeHNZbUZqYXlCVWFHbHpJRzExYzNRZ1ltVWdZMkZzYkdWa0lHOXVZMlVnZEc4Z1pHOGdkR2hsSUhKbGJtUmxjaTVjYmlBZ0lDb3ZYRzRnSUhOamNtOXNiRTF2Ym1sMGIzSTZJR1oxYm1OMGFXOXVLR052Ym5SaGFXNWxjaXdnY21WdVpHVnlRMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQnlaVzVrWlhKRFlXeHNZbUZqYXlncE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJVWVd0bElHRWdZMjl0Y0c5dVpXNTBJSFJvWVhRbmN5QmhiSEpsWVdSNUlHMXZkVzUwWldRZ2FXNTBieUIwYUdVZ1JFOU5JR0Z1WkNCeVpYQnNZV05sSUdsMGN5QndjbTl3YzF4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQndjbVYyUTI5dGNHOXVaVzUwSUdOdmJYQnZibVZ1ZENCcGJuTjBZVzVqWlNCaGJISmxZV1I1SUdsdUlIUm9aU0JFVDAxY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHNWxlSFJGYkdWdFpXNTBJR052YlhCdmJtVnVkQ0JwYm5OMFlXNWpaU0IwYnlCeVpXNWtaWEpjYmlBZ0lDb2dRSEJoY21GdElIdEVUMDFGYkdWdFpXNTBmU0JqYjI1MFlXbHVaWElnWTI5dWRHRnBibVZ5SUhSdklISmxibVJsY2lCcGJuUnZYRzRnSUNBcUlFQndZWEpoYlNCN1AyWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5Qm1kVzVqZEdsdmJpQjBjbWxuWjJWeVpXUWdiMjRnWTI5dGNHeGxkR2x2Ymx4dUlDQWdLaTljYmlBZ1gzVndaR0YwWlZKdmIzUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLRnh1SUNBZ0lDQWdjSEpsZGtOdmJYQnZibVZ1ZEN4Y2JpQWdJQ0FnSUc1bGVIUkZiR1Z0Wlc1MExGeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxGeHVJQ0FnSUNBZ1kyRnNiR0poWTJzcElIdGNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCU1pXRmpkRVZzWlcxbGJuUldZV3hwWkdGMGIzSXVZMmhsWTJ0QmJtUlhZWEp1Um05eVRYVjBZWFJsWkZCeWIzQnpLRzVsZUhSRmJHVnRaVzUwS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JTWldGamRFMXZkVzUwTG5OamNtOXNiRTF2Ym1sMGIzSW9ZMjl1ZEdGcGJtVnlMQ0JtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUZKbFlXTjBWWEJrWVhSbFVYVmxkV1V1Wlc1eGRXVjFaVVZzWlcxbGJuUkpiblJsY201aGJDaHdjbVYyUTI5dGNHOXVaVzUwTENCdVpYaDBSV3hsYldWdWRDazdYRzRnSUNBZ0lDQnBaaUFvWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0FnSUNBZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1bGJuRjFaWFZsUTJGc2JHSmhZMnRKYm5SbGNtNWhiQ2h3Y21WMlEyOXRjRzl1Wlc1MExDQmpZV3hzWW1GamF5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQXZMeUJTWldOdmNtUWdkR2hsSUhKdmIzUWdaV3hsYldWdWRDQnBiaUJqWVhObElHbDBJR3hoZEdWeUlHZGxkSE1nZEhKaGJuTndiR0Z1ZEdWa0xseHVJQ0FnSUNBZ2NtOXZkRVZzWlcxbGJuUnpRbmxTWldGamRGSnZiM1JKUkZ0blpYUlNaV0ZqZEZKdmIzUkpSQ2hqYjI1MFlXbHVaWElwWFNBOVhHNGdJQ0FnSUNBZ0lHZGxkRkpsWVdOMFVtOXZkRVZzWlcxbGJuUkpia052Ym5SaGFXNWxjaWhqYjI1MFlXbHVaWElwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQndjbVYyUTI5dGNHOXVaVzUwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaV2RwYzNSbGNpQmhJR052YlhCdmJtVnVkQ0JwYm5SdklIUm9aU0JwYm5OMFlXNWpaU0J0WVhBZ1lXNWtJSE4wWVhKMGN5QnpZM0p2Ykd3Z2RtRnNkV1ZjYmlBZ0lDb2diVzl1YVhSdmNtbHVaMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCdVpYaDBRMjl0Y0c5dVpXNTBJR052YlhCdmJtVnVkQ0JwYm5OMFlXNWpaU0IwYnlCeVpXNWtaWEpjYmlBZ0lDb2dRSEJoY21GdElIdEVUMDFGYkdWdFpXNTBmU0JqYjI1MFlXbHVaWElnWTI5dWRHRnBibVZ5SUhSdklISmxibVJsY2lCcGJuUnZYRzRnSUNBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ2NtVmhZM1JTYjI5MElFbEVJSEJ5WldacGVGeHVJQ0FnS2k5Y2JpQWdYM0psWjJsemRHVnlRMjl0Y0c5dVpXNTBPaUJtZFc1amRHbHZiaWh1WlhoMFEyOXRjRzl1Wlc1MExDQmpiMjUwWVdsdVpYSXBJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUlDWW1JQ2hjYmlBZ0lDQWdJQ0FnS0dOdmJuUmhhVzVsY2k1dWIyUmxWSGx3WlNBOVBUMGdSVXhGVFVWT1ZGOU9UMFJGWDFSWlVFVWdmSHdnWTI5dWRHRnBibVZ5TG01dlpHVlVlWEJsSUQwOVBTQkVUME5mVGs5RVJWOVVXVkJGS1Z4dUlDQWdJQ0FnS1N4Y2JpQWdJQ0FnSUNkZmNtVm5hWE4wWlhKRGIyMXdiMjVsYm5Rb0xpNHVLVG9nVkdGeVoyVjBJR052Ym5SaGFXNWxjaUJwY3lCdWIzUWdZU0JFVDAwZ1pXeGxiV1Z1ZEM0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaGpiMjUwWVdsdVpYSWdKaVlnS0Z4dUlDQWdJQ0FnS0dOdmJuUmhhVzVsY2k1dWIyUmxWSGx3WlNBOVBUMGdSVXhGVFVWT1ZGOU9UMFJGWDFSWlVFVWdmSHdnWTI5dWRHRnBibVZ5TG01dlpHVlVlWEJsSUQwOVBTQkVUME5mVGs5RVJWOVVXVkJGS1Z4dUlDQWdJQ2twS1R0Y2JseHVJQ0FnSUZKbFlXTjBRbkp2ZDNObGNrVjJaVzUwUlcxcGRIUmxjaTVsYm5OMWNtVlRZM0p2Ykd4V1lXeDFaVTF2Ym1sMGIzSnBibWNvS1R0Y2JseHVJQ0FnSUhaaGNpQnlaV0ZqZEZKdmIzUkpSQ0E5SUZKbFlXTjBUVzkxYm5RdWNtVm5hWE4wWlhKRGIyNTBZV2x1WlhJb1kyOXVkR0ZwYm1WeUtUdGNiaUFnSUNCcGJuTjBZVzVqWlhOQ2VWSmxZV04wVW05dmRFbEVXM0psWVdOMFVtOXZkRWxFWFNBOUlHNWxlSFJEYjIxd2IyNWxiblE3WEc0Z0lDQWdjbVYwZFhKdUlISmxZV04wVW05dmRFbEVPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pXNWtaWElnWVNCdVpYY2dZMjl0Y0c5dVpXNTBJR2x1ZEc4Z2RHaGxJRVJQVFM1Y2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHNWxlSFJGYkdWdFpXNTBJR1ZzWlcxbGJuUWdkRzhnY21WdVpHVnlYRzRnSUNBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdZMjl1ZEdGcGJtVnlJR052Ym5SaGFXNWxjaUIwYnlCeVpXNWtaWElnYVc1MGIxeHVJQ0FnS2lCQWNHRnlZVzBnZTJKdmIyeGxZVzU5SUhOb2IzVnNaRkpsZFhObFRXRnlhM1Z3SUdsbUlIZGxJSE5vYjNWc1pDQnphMmx3SUhSb1pTQnRZWEpyZFhBZ2FXNXpaWEowYVc5dVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0J1WlhoMFEyOXRjRzl1Wlc1MFhHNGdJQ0FxTDF4dUlDQmZjbVZ1WkdWeVRtVjNVbTl2ZEVOdmJYQnZibVZ1ZERvZ1puVnVZM1JwYjI0b1hHNGdJQ0FnYm1WNGRFVnNaVzFsYm5Rc1hHNGdJQ0FnWTI5dWRHRnBibVZ5TEZ4dUlDQWdJSE5vYjNWc1pGSmxkWE5sVFdGeWEzVndYRzRnSUNrZ2UxeHVJQ0FnSUM4dklGWmhjbWx2ZFhNZ2NHRnlkSE1nYjJZZ2IzVnlJR052WkdVZ0tITjFZMmdnWVhNZ1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblFuYzF4dUlDQWdJQzh2SUY5eVpXNWtaWEpXWVd4cFpHRjBaV1JEYjIxd2IyNWxiblFwSUdGemMzVnRaU0IwYUdGMElHTmhiR3h6SUhSdklISmxibVJsY2lCaGNtVnVKM1FnYm1WemRHVmtPMXh1SUNBZ0lDOHZJSFpsY21sbWVTQjBhR0YwSUhSb1lYUW5jeUIwYUdVZ1kyRnpaUzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblFnUFQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ2RmY21WdVpHVnlUbVYzVW05dmRFTnZiWEJ2Ym1WdWRDZ3BPaUJTWlc1a1pYSWdiV1YwYUc5a2N5QnphRzkxYkdRZ1ltVWdZU0J3ZFhKbElHWjFibU4wYVc5dUlDY2dLMXh1SUNBZ0lDQWdKMjltSUhCeWIzQnpJR0Z1WkNCemRHRjBaVHNnZEhKcFoyZGxjbWx1WnlCdVpYTjBaV1FnWTI5dGNHOXVaVzUwSUhWd1pHRjBaWE1nWm5KdmJTQW5JQ3RjYmlBZ0lDQWdJQ2R5Wlc1a1pYSWdhWE1nYm05MElHRnNiRzkzWldRdUlFbG1JRzVsWTJWemMyRnllU3dnZEhKcFoyZGxjaUJ1WlhOMFpXUWdkWEJrWVhSbGN5QnBiaUFuSUN0Y2JpQWdJQ0FnSUNkamIyMXdiMjVsYm5SRWFXUlZjR1JoZEdVdUoxeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JseHVJQ0FnSUhaaGNpQmpiMjF3YjI1bGJuUkpibk4wWVc1alpTQTlJR2x1YzNSaGJuUnBZWFJsVW1WaFkzUkRiMjF3YjI1bGJuUW9ibVY0ZEVWc1pXMWxiblFzSUc1MWJHd3BPMXh1SUNBZ0lIWmhjaUJ5WldGamRGSnZiM1JKUkNBOUlGSmxZV04wVFc5MWJuUXVYM0psWjJsemRHVnlRMjl0Y0c5dVpXNTBLRnh1SUNBZ0lDQWdZMjl0Y0c5dVpXNTBTVzV6ZEdGdVkyVXNYRzRnSUNBZ0lDQmpiMjUwWVdsdVpYSmNiaUFnSUNBcE8xeHVYRzRnSUNBZ0x5OGdWR2hsSUdsdWFYUnBZV3dnY21WdVpHVnlJR2x6SUhONWJtTm9jbTl1YjNWeklHSjFkQ0JoYm5rZ2RYQmtZWFJsY3lCMGFHRjBJR2hoY0hCbGJpQmtkWEpwYm1kY2JpQWdJQ0F2THlCeVpXNWtaWEpwYm1jc0lHbHVJR052YlhCdmJtVnVkRmRwYkd4TmIzVnVkQ0J2Y2lCamIyMXdiMjVsYm5SRWFXUk5iM1Z1ZEN3Z2QybHNiQ0JpWlNCaVlYUmphR1ZrWEc0Z0lDQWdMeThnWVdOamIzSmthVzVuSUhSdklIUm9aU0JqZFhKeVpXNTBJR0poZEdOb2FXNW5JSE4wY21GMFpXZDVMbHh1WEc0Z0lDQWdVbVZoWTNSVmNHUmhkR1Z6TG1KaGRHTm9aV1JWY0dSaGRHVnpLRnh1SUNBZ0lDQWdZbUYwWTJobFpFMXZkVzUwUTI5dGNHOXVaVzUwU1c1MGIwNXZaR1VzWEc0Z0lDQWdJQ0JqYjIxd2IyNWxiblJKYm5OMFlXNWpaU3hjYmlBZ0lDQWdJSEpsWVdOMFVtOXZkRWxFTEZ4dUlDQWdJQ0FnWTI5dWRHRnBibVZ5TEZ4dUlDQWdJQ0FnYzJodmRXeGtVbVYxYzJWTllYSnJkWEJjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdMeThnVW1WamIzSmtJSFJvWlNCeWIyOTBJR1ZzWlcxbGJuUWdhVzRnWTJGelpTQnBkQ0JzWVhSbGNpQm5aWFJ6SUhSeVlXNXpjR3hoYm5SbFpDNWNiaUFnSUNBZ0lISnZiM1JGYkdWdFpXNTBjMEo1VW1WaFkzUlNiMjkwU1VSYmNtVmhZM1JTYjI5MFNVUmRJRDFjYmlBZ0lDQWdJQ0FnWjJWMFVtVmhZM1JTYjI5MFJXeGxiV1Z1ZEVsdVEyOXVkR0ZwYm1WeUtHTnZiblJoYVc1bGNpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUdOdmJYQnZibVZ1ZEVsdWMzUmhibU5sTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaVzVrWlhKeklHRWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElHbHVkRzhnZEdobElFUlBUU0JwYmlCMGFHVWdjM1Z3Y0d4cFpXUWdZR052Ym5SaGFXNWxjbUF1WEc0Z0lDQXFYRzRnSUNBcUlFbG1JSFJvWlNCU1pXRmpkQ0JqYjIxd2IyNWxiblFnZDJGeklIQnlaWFpwYjNWemJIa2djbVZ1WkdWeVpXUWdhVzUwYnlCZ1kyOXVkR0ZwYm1WeVlDd2dkR2hwY3lCM2FXeHNYRzRnSUNBcUlIQmxjbVp2Y20wZ1lXNGdkWEJrWVhSbElHOXVJR2wwSUdGdVpDQnZibXg1SUcxMWRHRjBaU0IwYUdVZ1JFOU5JR0Z6SUc1bFkyVnpjMkZ5ZVNCMGJ5QnlaV1pzWldOMElIUm9aVnh1SUNBZ0tpQnNZWFJsYzNRZ1VtVmhZM1FnWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnYm1WNGRFVnNaVzFsYm5RZ1EyOXRjRzl1Wlc1MElHVnNaVzFsYm5RZ2RHOGdjbVZ1WkdWeUxseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHTnZiblJoYVc1bGNpQkVUMDBnWld4bGJXVnVkQ0IwYnlCeVpXNWtaWElnYVc1MGJ5NWNiaUFnSUNvZ1FIQmhjbUZ0SUhzL1puVnVZM1JwYjI1OUlHTmhiR3hpWVdOcklHWjFibU4wYVc5dUlIUnlhV2RuWlhKbFpDQnZiaUJqYjIxd2JHVjBhVzl1WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQkRiMjF3YjI1bGJuUWdhVzV6ZEdGdVkyVWdjbVZ1WkdWeVpXUWdhVzRnWUdOdmJuUmhhVzVsY21BdVhHNGdJQ0FxTDF4dUlDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtHNWxlSFJGYkdWdFpXNTBMQ0JqYjI1MFlXbHVaWElzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJRkpsWVdOMFJXeGxiV1Z1ZEM1cGMxWmhiR2xrUld4bGJXVnVkQ2h1WlhoMFJXeGxiV1Z1ZENrc1hHNGdJQ0FnSUNBblVtVmhZM1F1Y21WdVpHVnlLQ2s2SUVsdWRtRnNhV1FnWTI5dGNHOXVaVzUwSUdWc1pXMWxiblF1SlhNbkxGeHVJQ0FnSUNBZ0tGeHVJQ0FnSUNBZ0lDQjBlWEJsYjJZZ2JtVjRkRVZzWlcxbGJuUWdQVDA5SUNkemRISnBibWNuSUQ5Y2JpQWdJQ0FnSUNBZ0lDQW5JRWx1YzNSbFlXUWdiMllnY0dGemMybHVaeUJoYmlCbGJHVnRaVzUwSUhOMGNtbHVaeXdnYldGclpTQnpkWEpsSUhSdklHbHVjM1JoYm5ScFlYUmxJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZHBkQ0JpZVNCd1lYTnphVzVuSUdsMElIUnZJRkpsWVdOMExtTnlaV0YwWlVWc1pXMWxiblF1SnlBNlhHNGdJQ0FnSUNBZ0lIUjVjR1Z2WmlCdVpYaDBSV3hsYldWdWRDQTlQVDBnSjJaMWJtTjBhVzl1SnlBL1hHNGdJQ0FnSUNBZ0lDQWdKeUJKYm5OMFpXRmtJRzltSUhCaGMzTnBibWNnWVNCamIyMXdiMjVsYm5RZ1kyeGhjM01zSUcxaGEyVWdjM1Z5WlNCMGJ5QnBibk4wWVc1MGFXRjBaU0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5hWFFnWW5rZ2NHRnpjMmx1WnlCcGRDQjBieUJTWldGamRDNWpjbVZoZEdWRmJHVnRaVzUwTGljZ09seHVJQ0FnSUNBZ0lDQXZMeUJEYUdWamF5QnBaaUJwZENCeGRXRmphM01nYkdsclpTQmhiaUJsYkdWdFpXNTBYRzRnSUNBZ0lDQWdJRzVsZUhSRmJHVnRaVzUwSUNFOUlHNTFiR3dnSmlZZ2JtVjRkRVZzWlcxbGJuUXVjSEp2Y0hNZ0lUMDlJSFZ1WkdWbWFXNWxaQ0EvWEc0Z0lDQWdJQ0FnSUNBZ0p5QlVhR2x6SUcxaGVTQmlaU0JqWVhWelpXUWdZbmtnZFc1cGJuUmxiblJwYjI1aGJHeDVJR3h2WVdScGJtY2dkSGR2SUdsdVpHVndaVzVrWlc1MElDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkamIzQnBaWE1nYjJZZ1VtVmhZM1F1SnlBNlhHNGdJQ0FnSUNBZ0lDQWdKeWRjYmlBZ0lDQWdJQ2xjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0ZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENodVpYaDBSV3hsYldWdWRDa3BLVHRjYmx4dUlDQWdJSFpoY2lCd2NtVjJRMjl0Y0c5dVpXNTBJRDBnYVc1emRHRnVZMlZ6UW5sU1pXRmpkRkp2YjNSSlJGdG5aWFJTWldGamRGSnZiM1JKUkNoamIyNTBZV2x1WlhJcFhUdGNibHh1SUNBZ0lHbG1JQ2h3Y21WMlEyOXRjRzl1Wlc1MEtTQjdYRzRnSUNBZ0lDQjJZWElnY0hKbGRrVnNaVzFsYm5RZ1BTQndjbVYyUTI5dGNHOXVaVzUwTGw5amRYSnlaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQWdJR2xtSUNoemFHOTFiR1JWY0dSaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZENod2NtVjJSV3hsYldWdWRDd2dibVY0ZEVWc1pXMWxiblFwS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCU1pXRmpkRTF2ZFc1MExsOTFjR1JoZEdWU2IyOTBRMjl0Y0c5dVpXNTBLRnh1SUNBZ0lDQWdJQ0FnSUhCeVpYWkRiMjF3YjI1bGJuUXNYRzRnSUNBZ0lDQWdJQ0FnYm1WNGRFVnNaVzFsYm5Rc1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdGcGJtVnlMRnh1SUNBZ0lDQWdJQ0FnSUdOaGJHeGlZV05yWEc0Z0lDQWdJQ0FnSUNrdVoyVjBVSFZpYkdsalNXNXpkR0Z1WTJVb0tUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lGSmxZV04wVFc5MWJuUXVkVzV0YjNWdWRFTnZiWEJ2Ym1WdWRFRjBUbTlrWlNoamIyNTBZV2x1WlhJcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUhaaGNpQnlaV0ZqZEZKdmIzUkZiR1Z0Wlc1MElEMGdaMlYwVW1WaFkzUlNiMjkwUld4bGJXVnVkRWx1UTI5dWRHRnBibVZ5S0dOdmJuUmhhVzVsY2lrN1hHNGdJQ0FnZG1GeUlHTnZiblJoYVc1bGNraGhjMUpsWVdOMFRXRnlhM1Z3SUQxY2JpQWdJQ0FnSUhKbFlXTjBVbTl2ZEVWc1pXMWxiblFnSmlZZ1VtVmhZM1JOYjNWdWRDNXBjMUpsYm1SbGNtVmtRbmxTWldGamRDaHlaV0ZqZEZKdmIzUkZiR1Z0Wlc1MEtUdGNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lHbG1JQ2doWTI5dWRHRnBibVZ5U0dGelVtVmhZM1JOWVhKcmRYQWdmSHdnY21WaFkzUlNiMjkwUld4bGJXVnVkQzV1WlhoMFUybGliR2x1WnlrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnY205dmRFVnNaVzFsYm5SVGFXSnNhVzVuSUQwZ2NtVmhZM1JTYjI5MFJXeGxiV1Z1ZER0Y2JpQWdJQ0FnSUNBZ2QyaHBiR1VnS0hKdmIzUkZiR1Z0Wlc1MFUybGliR2x1WnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoU1pXRmpkRTF2ZFc1MExtbHpVbVZ1WkdWeVpXUkNlVkpsWVdOMEtISnZiM1JGYkdWdFpXNTBVMmxpYkdsdVp5a3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JtWVd4elpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0ozSmxibVJsY2lncE9pQlVZWEpuWlhRZ2JtOWtaU0JvWVhNZ2JXRnlhM1Z3SUhKbGJtUmxjbVZrSUdKNUlGSmxZV04wTENCaWRYUWdkR2hsY21VZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDZGhjbVVnZFc1eVpXeGhkR1ZrSUc1dlpHVnpJR0Z6SUhkbGJHd3VJRlJvYVhNZ2FYTWdiVzl6ZENCamIyMXRiMjVzZVNCallYVnpaV1FnWW5rZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDZDNhR2wwWlMxemNHRmpaU0JwYm5ObGNuUmxaQ0JoY205MWJtUWdjMlZ5ZG1WeUxYSmxibVJsY21Wa0lHMWhjbXQxY0M0blhHNGdJQ0FnSUNBZ0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNCeWIyOTBSV3hsYldWdWRGTnBZbXhwYm1jZ1BTQnliMjkwUld4bGJXVnVkRk5wWW14cGJtY3VibVY0ZEZOcFlteHBibWM3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhBZ1BTQmpiMjUwWVdsdVpYSklZWE5TWldGamRFMWhjbXQxY0NBbUppQWhjSEpsZGtOdmJYQnZibVZ1ZER0Y2JseHVJQ0FnSUhaaGNpQmpiMjF3YjI1bGJuUWdQU0JTWldGamRFMXZkVzUwTGw5eVpXNWtaWEpPWlhkU2IyOTBRMjl0Y0c5dVpXNTBLRnh1SUNBZ0lDQWdibVY0ZEVWc1pXMWxiblFzWEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWElzWEc0Z0lDQWdJQ0J6YUc5MWJHUlNaWFZ6WlUxaGNtdDFjRnh1SUNBZ0lDa3VaMlYwVUhWaWJHbGpTVzV6ZEdGdVkyVW9LVHRjYmlBZ0lDQnBaaUFvWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0FnSUdOaGJHeGlZV05yTG1OaGJHd29ZMjl0Y0c5dVpXNTBLVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdOdmJYQnZibVZ1ZER0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1YzNSeWRXTjBjeUJoSUdOdmJYQnZibVZ1ZENCcGJuTjBZVzVqWlNCdlppQmdZMjl1YzNSeWRXTjBiM0pnSUhkcGRHZ2dZR2x1YVhScFlXeFFjbTl3YzJBZ1lXNWtYRzRnSUNBcUlISmxibVJsY25NZ2FYUWdhVzUwYnlCMGFHVWdjM1Z3Y0d4cFpXUWdZR052Ym5SaGFXNWxjbUF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlHTnZibk4wY25WamRHOXlJRkpsWVdOMElHTnZiWEJ2Ym1WdWRDQmpiMjV6ZEhKMVkzUnZjaTVjYmlBZ0lDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQndjbTl3Y3lCSmJtbDBhV0ZzSUhCeWIzQnpJRzltSUhSb1pTQmpiMjF3YjI1bGJuUWdhVzV6ZEdGdVkyVXVYRzRnSUNBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdZMjl1ZEdGcGJtVnlJRVJQVFNCbGJHVnRaVzUwSUhSdklISmxibVJsY2lCcGJuUnZMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ1EyOXRjRzl1Wlc1MElHbHVjM1JoYm1ObElISmxibVJsY21Wa0lHbHVJR0JqYjI1MFlXbHVaWEpnTGx4dUlDQWdLaTljYmlBZ1kyOXVjM1J5ZFdOMFFXNWtVbVZ1WkdWeVEyOXRjRzl1Wlc1ME9pQm1kVzVqZEdsdmJpaGpiMjV6ZEhKMVkzUnZjaXdnY0hKdmNITXNJR052Ym5SaGFXNWxjaWtnZTF4dUlDQWdJSFpoY2lCbGJHVnRaVzUwSUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb1kyOXVjM1J5ZFdOMGIzSXNJSEJ5YjNCektUdGNiaUFnSUNCeVpYUjFjbTRnVW1WaFkzUk5iM1Z1ZEM1eVpXNWtaWElvWld4bGJXVnVkQ3dnWTI5dWRHRnBibVZ5S1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1YzNSeWRXTjBjeUJoSUdOdmJYQnZibVZ1ZENCcGJuTjBZVzVqWlNCdlppQmdZMjl1YzNSeWRXTjBiM0pnSUhkcGRHZ2dZR2x1YVhScFlXeFFjbTl3YzJBZ1lXNWtYRzRnSUNBcUlISmxibVJsY25NZ2FYUWdhVzUwYnlCaElHTnZiblJoYVc1bGNpQnViMlJsSUdsa1pXNTBhV1pwWldRZ1lua2djM1Z3Y0d4cFpXUWdZR2xrWUM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdZMjl0Y0c5dVpXNTBRMjl1YzNSeWRXTjBiM0lnVW1WaFkzUWdZMjl0Y0c5dVpXNTBJR052Ym5OMGNuVmpkRzl5WEc0Z0lDQXFJRUJ3WVhKaGJTQjdQMjlpYW1WamRIMGdjSEp2Y0hNZ1NXNXBkR2xoYkNCd2NtOXdjeUJ2WmlCMGFHVWdZMjl0Y0c5dVpXNTBJR2x1YzNSaGJtTmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2FXUWdTVVFnYjJZZ2RHaGxJRVJQVFNCbGJHVnRaVzUwSUhSdklISmxibVJsY2lCcGJuUnZMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ1EyOXRjRzl1Wlc1MElHbHVjM1JoYm1ObElISmxibVJsY21Wa0lHbHVJSFJvWlNCamIyNTBZV2x1WlhJZ2JtOWtaUzVjYmlBZ0lDb3ZYRzRnSUdOdmJuTjBjblZqZEVGdVpGSmxibVJsY2tOdmJYQnZibVZ1ZEVKNVNVUTZJR1oxYm1OMGFXOXVLR052Ym5OMGNuVmpkRzl5TENCd2NtOXdjeXdnYVdRcElIdGNiaUFnSUNCMllYSWdaRzl0VG05a1pTQTlJR1J2WTNWdFpXNTBMbWRsZEVWc1pXMWxiblJDZVVsa0tHbGtLVHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ1pHOXRUbTlrWlN4Y2JpQWdJQ0FnSUNkVWNtbGxaQ0IwYnlCblpYUWdaV3hsYldWdWRDQjNhWFJvSUdsa0lHOW1JRndpSlhOY0lpQmlkWFFnYVhRZ2FYTWdibTkwSUhCeVpYTmxiblFnYjI0Z2RHaGxJSEJoWjJVdUp5eGNiaUFnSUNBZ0lHbGtYRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hrYjIxT2IyUmxLU2s3WEc0Z0lDQWdjbVYwZFhKdUlGSmxZV04wVFc5MWJuUXVZMjl1YzNSeWRXTjBRVzVrVW1WdVpHVnlRMjl0Y0c5dVpXNTBLR052Ym5OMGNuVmpkRzl5TENCd2NtOXdjeXdnWkc5dFRtOWtaU2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxaMmx6ZEdWeWN5QmhJR052Ym5SaGFXNWxjaUJ1YjJSbElHbHVkRzhnZDJocFkyZ2dVbVZoWTNRZ1kyOXRjRzl1Wlc1MGN5QjNhV3hzSUdKbElISmxibVJsY21Wa0xseHVJQ0FnS2lCVWFHbHpJR0ZzYzI4Z1kzSmxZWFJsY3lCMGFHVWdYQ0p5WldGamRGSnZiM1JjSWlCSlJDQjBhR0YwSUhkcGJHd2dZbVVnWVhOemFXZHVaV1FnZEc4Z2RHaGxJR1ZzWlcxbGJuUmNiaUFnSUNvZ2NtVnVaR1Z5WldRZ2QybDBhR2x1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJR052Ym5SaGFXNWxjaUJFVDAwZ1pXeGxiV1Z1ZENCMGJ5QnlaV2RwYzNSbGNpQmhjeUJoSUdOdmJuUmhhVzVsY2k1Y2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JVYUdVZ1hDSnlaV0ZqZEZKdmIzUmNJaUJKUkNCdlppQmxiR1Z0Wlc1MGN5QnlaVzVrWlhKbFpDQjNhWFJvYVc0dVhHNGdJQ0FxTDF4dUlDQnlaV2RwYzNSbGNrTnZiblJoYVc1bGNqb2dablZ1WTNScGIyNG9ZMjl1ZEdGcGJtVnlLU0I3WEc0Z0lDQWdkbUZ5SUhKbFlXTjBVbTl2ZEVsRUlEMGdaMlYwVW1WaFkzUlNiMjkwU1VRb1kyOXVkR0ZwYm1WeUtUdGNiaUFnSUNCcFppQW9jbVZoWTNSU2IyOTBTVVFwSUh0Y2JpQWdJQ0FnSUM4dklFbG1JRzl1WlNCbGVHbHpkSE1zSUcxaGEyVWdjM1Z5WlNCcGRDQnBjeUJoSUhaaGJHbGtJRndpY21WaFkzUlNiMjkwWENJZ1NVUXVYRzRnSUNBZ0lDQnlaV0ZqZEZKdmIzUkpSQ0E5SUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWekxtZGxkRkpsWVdOMFVtOXZkRWxFUm5KdmJVNXZaR1ZKUkNoeVpXRmpkRkp2YjNSSlJDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDZ2hjbVZoWTNSU2IyOTBTVVFwSUh0Y2JpQWdJQ0FnSUM4dklFNXZJSFpoYkdsa0lGd2ljbVZoWTNSU2IyOTBYQ0lnU1VRZ1ptOTFibVFzSUdOeVpXRjBaU0J2Ym1VdVhHNGdJQ0FnSUNCeVpXRmpkRkp2YjNSSlJDQTlJRkpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6TG1OeVpXRjBaVkpsWVdOMFVtOXZkRWxFS0NrN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5SaGFXNWxjbk5DZVZKbFlXTjBVbTl2ZEVsRVczSmxZV04wVW05dmRFbEVYU0E5SUdOdmJuUmhhVzVsY2p0Y2JpQWdJQ0J5WlhSMWNtNGdjbVZoWTNSU2IyOTBTVVE3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGVnViVzkxYm5SeklHRnVaQ0JrWlhOMGNtOTVjeUIwYUdVZ1VtVmhZM1FnWTI5dGNHOXVaVzUwSUhKbGJtUmxjbVZrSUdsdUlIUm9aU0JnWTI5dWRHRnBibVZ5WUM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdEVUMDFGYkdWdFpXNTBmU0JqYjI1MFlXbHVaWElnUkU5TklHVnNaVzFsYm5RZ1kyOXVkR0ZwYm1sdVp5QmhJRkpsWVdOMElHTnZiWEJ2Ym1WdWRDNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCaElHTnZiWEJ2Ym1WdWRDQjNZWE1nWm05MWJtUWdhVzRnWVc1a0lIVnViVzkxYm5SbFpDQm1jbTl0WEc0Z0lDQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0JqYjI1MFlXbHVaWEpnWEc0Z0lDQXFMMXh1SUNCMWJtMXZkVzUwUTI5dGNHOXVaVzUwUVhST2IyUmxPaUJtZFc1amRHbHZiaWhqYjI1MFlXbHVaWElwSUh0Y2JpQWdJQ0F2THlCV1lYSnBiM1Z6SUhCaGNuUnpJRzltSUc5MWNpQmpiMlJsSUNoemRXTm9JR0Z6SUZKbFlXTjBRMjl0Y0c5emFYUmxRMjl0Y0c5dVpXNTBKM05jYmlBZ0lDQXZMeUJmY21WdVpHVnlWbUZzYVdSaGRHVmtRMjl0Y0c5dVpXNTBLU0JoYzNOMWJXVWdkR2hoZENCallXeHNjeUIwYnlCeVpXNWtaWElnWVhKbGJpZDBJRzVsYzNSbFpEdGNiaUFnSUNBdkx5QjJaWEpwWm5rZ2RHaGhkQ0IwYUdGMEozTWdkR2hsSUdOaGMyVXVJQ2hUZEhKcFkzUnNlU0J6Y0dWaGEybHVaeXdnZFc1dGIzVnVkR2x1WnlCM2IyNG5kQ0JqWVhWelpTQmhYRzRnSUNBZ0x5OGdjbVZ1WkdWeUlHSjFkQ0IzWlNCemRHbHNiQ0JrYjI0bmRDQmxlSEJsWTNRZ2RHOGdZbVVnYVc0Z1lTQnlaVzVrWlhJZ1kyRnNiQ0JvWlhKbExpbGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUWdQVDBnYm5Wc2JDeGNiaUFnSUNBZ0lDZDFibTF2ZFc1MFEyOXRjRzl1Wlc1MFFYUk9iMlJsS0NrNklGSmxibVJsY2lCdFpYUm9iMlJ6SUhOb2IzVnNaQ0JpWlNCaElIQjFjbVVnWm5WdVkzUnBiMjRnYjJZZ0p5QXJYRzRnSUNBZ0lDQW5jSEp2Y0hNZ1lXNWtJSE4wWVhSbE95QjBjbWxuWjJWeWFXNW5JRzVsYzNSbFpDQmpiMjF3YjI1bGJuUWdkWEJrWVhSbGN5Qm1jbTl0SUhKbGJtUmxjaUJwY3lBbklDdGNiaUFnSUNBZ0lDZHViM1FnWVd4c2IzZGxaQzRnU1dZZ2JtVmpaWE56WVhKNUxDQjBjbWxuWjJWeUlHNWxjM1JsWkNCMWNHUmhkR1Z6SUdsdUlDY2dLMXh1SUNBZ0lDQWdKMk52YlhCdmJtVnVkRVJwWkZWd1pHRjBaUzRuWEc0Z0lDQWdLU0E2SUc1MWJHd3BPMXh1WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNpQW1KaUFvWEc0Z0lDQWdJQ0FnSUNoamIyNTBZV2x1WlhJdWJtOWtaVlI1Y0dVZ1BUMDlJRVZNUlUxRlRsUmZUazlFUlY5VVdWQkZJSHg4SUdOdmJuUmhhVzVsY2k1dWIyUmxWSGx3WlNBOVBUMGdSRTlEWDA1UFJFVmZWRmxRUlNsY2JpQWdJQ0FnSUNrc1hHNGdJQ0FnSUNBbmRXNXRiM1Z1ZEVOdmJYQnZibVZ1ZEVGMFRtOWtaU2d1TGk0cE9pQlVZWEpuWlhRZ1kyOXVkR0ZwYm1WeUlHbHpJRzV2ZENCaElFUlBUU0JsYkdWdFpXNTBMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0dOdmJuUmhhVzVsY2lBbUppQW9YRzRnSUNBZ0lDQW9ZMjl1ZEdGcGJtVnlMbTV2WkdWVWVYQmxJRDA5UFNCRlRFVk5SVTVVWDA1UFJFVmZWRmxRUlNCOGZDQmpiMjUwWVdsdVpYSXVibTlrWlZSNWNHVWdQVDA5SUVSUFExOU9UMFJGWDFSWlVFVXBYRzRnSUNBZ0tTa3BPMXh1WEc0Z0lDQWdkbUZ5SUhKbFlXTjBVbTl2ZEVsRUlEMGdaMlYwVW1WaFkzUlNiMjkwU1VRb1kyOXVkR0ZwYm1WeUtUdGNiaUFnSUNCMllYSWdZMjl0Y0c5dVpXNTBJRDBnYVc1emRHRnVZMlZ6UW5sU1pXRmpkRkp2YjNSSlJGdHlaV0ZqZEZKdmIzUkpSRjA3WEc0Z0lDQWdhV1lnS0NGamIyMXdiMjVsYm5RcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQjlYRzRnSUNBZ1VtVmhZM1JOYjNWdWRDNTFibTF2ZFc1MFEyOXRjRzl1Wlc1MFJuSnZiVTV2WkdVb1kyOXRjRzl1Wlc1MExDQmpiMjUwWVdsdVpYSXBPMXh1SUNBZ0lHUmxiR1YwWlNCcGJuTjBZVzVqWlhOQ2VWSmxZV04wVW05dmRFbEVXM0psWVdOMFVtOXZkRWxFWFR0Y2JpQWdJQ0JrWld4bGRHVWdZMjl1ZEdGcGJtVnljMEo1VW1WaFkzUlNiMjkwU1VSYmNtVmhZM1JTYjI5MFNVUmRPMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lHUmxiR1YwWlNCeWIyOTBSV3hsYldWdWRITkNlVkpsWVdOMFVtOXZkRWxFVzNKbFlXTjBVbTl2ZEVsRVhUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlZ1Ylc5MWJuUnpJR0VnWTI5dGNHOXVaVzUwSUdGdVpDQnlaVzF2ZG1WeklHbDBJR1p5YjIwZ2RHaGxJRVJQVFM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ2FXNXpkR0Z1WTJVZ1VtVmhZM1FnWTI5dGNHOXVaVzUwSUdsdWMzUmhibU5sTGx4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUdOdmJuUmhhVzVsY2lCRVQwMGdaV3hsYldWdWRDQjBieUIxYm0xdmRXNTBJR1p5YjIwdVhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvZ1FITmxaU0I3VW1WaFkzUk5iM1Z1ZEM1MWJtMXZkVzUwUTI5dGNHOXVaVzUwUVhST2IyUmxmVnh1SUNBZ0tpOWNiaUFnZFc1dGIzVnVkRU52YlhCdmJtVnVkRVp5YjIxT2IyUmxPaUJtZFc1amRHbHZiaWhwYm5OMFlXNWpaU3dnWTI5dWRHRnBibVZ5S1NCN1hHNGdJQ0FnVW1WaFkzUlNaV052Ym1OcGJHVnlMblZ1Ylc5MWJuUkRiMjF3YjI1bGJuUW9hVzV6ZEdGdVkyVXBPMXh1WEc0Z0lDQWdhV1lnS0dOdmJuUmhhVzVsY2k1dWIyUmxWSGx3WlNBOVBUMGdSRTlEWDA1UFJFVmZWRmxRUlNrZ2UxeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUlEMGdZMjl1ZEdGcGJtVnlMbVJ2WTNWdFpXNTBSV3hsYldWdWREdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5Qm9kSFJ3T2k4dmFuTndaWEptTG1OdmJTOWxiWEIwZVdsdVp5MWhMVzV2WkdWY2JpQWdJQ0IzYUdsc1pTQW9ZMjl1ZEdGcGJtVnlMbXhoYzNSRGFHbHNaQ2tnZTF4dUlDQWdJQ0FnWTI5dWRHRnBibVZ5TG5KbGJXOTJaVU5vYVd4a0tHTnZiblJoYVc1bGNpNXNZWE4wUTJocGJHUXBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUm1sdVpITWdkR2hsSUdOdmJuUmhhVzVsY2lCRVQwMGdaV3hsYldWdWRDQjBhR0YwSUdOdmJuUmhhVzV6SUZKbFlXTjBJR052YlhCdmJtVnVkQ0IwYnlCM2FHbGphQ0IwYUdWY2JpQWdJQ29nYzNWd2NHeHBaV1FnUkU5TklHQnBaR0FnWW1Wc2IyNW5jeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdsa0lGUm9aU0JKUkNCdlppQmhiaUJsYkdWdFpXNTBJSEpsYm1SbGNtVmtJR0o1SUdFZ1VtVmhZM1FnWTI5dGNHOXVaVzUwTGx4dUlDQWdLaUJBY21WMGRYSnVJSHMvUkU5TlJXeGxiV1Z1ZEgwZ1JFOU5JR1ZzWlcxbGJuUWdkR2hoZENCamIyNTBZV2x1Y3lCMGFHVWdZR2xrWUM1Y2JpQWdJQ292WEc0Z0lHWnBibVJTWldGamRFTnZiblJoYVc1bGNrWnZja2xFT2lCbWRXNWpkR2x2YmlocFpDa2dlMXh1SUNBZ0lIWmhjaUJ5WldGamRGSnZiM1JKUkNBOUlGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMbWRsZEZKbFlXTjBVbTl2ZEVsRVJuSnZiVTV2WkdWSlJDaHBaQ2s3WEc0Z0lDQWdkbUZ5SUdOdmJuUmhhVzVsY2lBOUlHTnZiblJoYVc1bGNuTkNlVkpsWVdOMFVtOXZkRWxFVzNKbFlXTjBVbTl2ZEVsRVhUdGNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIWmhjaUJ5YjI5MFJXeGxiV1Z1ZENBOUlISnZiM1JGYkdWdFpXNTBjMEo1VW1WaFkzUlNiMjkwU1VSYmNtVmhZM1JTYjI5MFNVUmRPMXh1SUNBZ0lDQWdhV1lnS0hKdmIzUkZiR1Z0Wlc1MElDWW1JSEp2YjNSRmJHVnRaVzUwTG5CaGNtVnVkRTV2WkdVZ0lUMDlJR052Ym5SaGFXNWxjaWtnZTF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSUNBZ0lDOHZJRU5oYkd3Z2FXNTBaWEp1WVd4SFpYUkpSQ0JvWlhKbElHSmxZMkYxYzJVZ1oyVjBTVVFnWTJGc2JITWdhWE5XWVd4cFpDQjNhR2xqYUNCallXeHNjMXh1SUNBZ0lDQWdJQ0FnSUM4dklHWnBibVJTWldGamRFTnZiblJoYVc1bGNrWnZja2xFSUNoMGFHbHpJR1oxYm1OMGFXOXVLUzVjYmlBZ0lDQWdJQ0FnSUNCcGJuUmxjbTVoYkVkbGRFbEVLSEp2YjNSRmJHVnRaVzUwS1NBOVBUMGdjbVZoWTNSU2IyOTBTVVFzWEc0Z0lDQWdJQ0FnSUNBZ0oxSmxZV04wVFc5MWJuUTZJRkp2YjNRZ1pXeGxiV1Z1ZENCSlJDQmthV1ptWlhKbFpDQm1jbTl0SUhKbFlXTjBVbTl2ZEVsRUxpZGNiaUFnSUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENndkx5QkRZV3hzSUdsdWRHVnlibUZzUjJWMFNVUWdhR1Z5WlNCaVpXTmhkWE5sSUdkbGRFbEVJR05oYkd4eklHbHpWbUZzYVdRZ2QyaHBZMmdnWTJGc2JITmNiaUFnSUNBZ0lDQWdMeThnWm1sdVpGSmxZV04wUTI5dWRHRnBibVZ5Um05eVNVUWdLSFJvYVhNZ1puVnVZM1JwYjI0cExseHVJQ0FnSUNBZ0lDQnBiblJsY201aGJFZGxkRWxFS0hKdmIzUkZiR1Z0Wlc1MEtTQTlQVDBnY21WaFkzUlNiMjkwU1VRcEtUdGNibHh1SUNBZ0lDQWdJQ0IyWVhJZ1kyOXVkR0ZwYm1WeVEyaHBiR1FnUFNCamIyNTBZV2x1WlhJdVptbHljM1JEYUdsc1pEdGNiaUFnSUNBZ0lDQWdhV1lnS0dOdmJuUmhhVzVsY2tOb2FXeGtJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaV0ZqZEZKdmIzUkpSQ0E5UFQwZ2FXNTBaWEp1WVd4SFpYUkpSQ2hqYjI1MFlXbHVaWEpEYUdsc1pDa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QkpaaUIwYUdVZ1kyOXVkR0ZwYm1WeUlHaGhjeUJoSUc1bGR5QmphR2xzWkNCM2FYUm9JSFJvWlNCellXMWxJRWxFSUdGeklIUm9aU0J2YkdSY2JpQWdJQ0FnSUNBZ0lDQXZMeUJ5YjI5MElHVnNaVzFsYm5Rc0lIUm9aVzRnY205dmRFVnNaVzFsYm5SelFubFNaV0ZqZEZKdmIzUkpSRnR5WldGamRGSnZiM1JKUkYwZ2FYTmNiaUFnSUNBZ0lDQWdJQ0F2THlCcWRYTjBJSE4wWVd4bElHRnVaQ0J1WldWa2N5QjBieUJpWlNCMWNHUmhkR1ZrTGlCVWFHVWdZMkZ6WlNCMGFHRjBJR1JsYzJWeWRtVnpJR0ZjYmlBZ0lDQWdJQ0FnSUNBdkx5QjNZWEp1YVc1bklHbHpJSGRvWlc0Z2RHaGxJR052Ym5SaGFXNWxjaUJwY3lCbGJYQjBlUzVjYmlBZ0lDQWdJQ0FnSUNCeWIyOTBSV3hsYldWdWRITkNlVkpsWVdOMFVtOXZkRWxFVzNKbFlXTjBVbTl2ZEVsRVhTQTlJR052Ym5SaGFXNWxja05vYVd4a08xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQWdJQ0FnSUNBblVtVmhZM1JOYjNWdWREb2dVbTl2ZENCbGJHVnRaVzUwSUdoaGN5QmlaV1Z1SUhKbGJXOTJaV1FnWm5KdmJTQnBkSE1nYjNKcFoybHVZV3dnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FuWTI5dWRHRnBibVZ5TGlCT1pYY2dZMjl1ZEdGcGJtVnlPaWNzSUhKdmIzUkZiR1Z0Wlc1MExuQmhjbVZ1ZEU1dlpHVmNiaUFnSUNBZ0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdZMjl1ZEdGcGJtVnlPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCR2FXNWtjeUJoYmlCbGJHVnRaVzUwSUhKbGJtUmxjbVZrSUdKNUlGSmxZV04wSUhkcGRHZ2dkR2hsSUhOMWNIQnNhV1ZrSUVsRUxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnU1VRZ2IyWWdZU0JFVDAwZ2JtOWtaU0JwYmlCMGFHVWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2lCQWNtVjBkWEp1SUh0RVQwMUZiR1Z0Wlc1MGZTQlNiMjkwSUVSUFRTQnViMlJsSUc5bUlIUm9aU0JTWldGamRDQmpiMjF3YjI1bGJuUXVYRzRnSUNBcUwxeHVJQ0JtYVc1a1VtVmhZM1JPYjJSbFFubEpSRG9nWm5WdVkzUnBiMjRvYVdRcElIdGNiaUFnSUNCMllYSWdjbVZoWTNSU2IyOTBJRDBnVW1WaFkzUk5iM1Z1ZEM1bWFXNWtVbVZoWTNSRGIyNTBZV2x1WlhKR2IzSkpSQ2hwWkNrN1hHNGdJQ0FnY21WMGRYSnVJRkpsWVdOMFRXOTFiblF1Wm1sdVpFTnZiWEJ2Ym1WdWRGSnZiM1FvY21WaFkzUlNiMjkwTENCcFpDazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZSeWRXVWdhV1lnZEdobElITjFjSEJzYVdWa0lHQnViMlJsWUNCcGN5QnlaVzVrWlhKbFpDQmllU0JTWldGamRDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHNxZlNCdWIyUmxJRVJQVFNCRmJHVnRaVzUwSUhSdklHTm9aV05yTGx4dUlDQWdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmU0JVY25WbElHbG1JSFJvWlNCRVQwMGdSV3hsYldWdWRDQmhjSEJsWVhKeklIUnZJR0psSUhKbGJtUmxjbVZrSUdKNUlGSmxZV04wTGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUdselVtVnVaR1Z5WldSQ2VWSmxZV04wT2lCbWRXNWpkR2x2YmlodWIyUmxLU0I3WEc0Z0lDQWdhV1lnS0c1dlpHVXVibTlrWlZSNWNHVWdJVDA5SURFcElIdGNiaUFnSUNBZ0lDOHZJRTV2ZENCaElFUlBUVVZzWlcxbGJuUXNJSFJvWlhKbFptOXlaU0J1YjNRZ1lTQlNaV0ZqZENCamIyMXdiMjVsYm5SY2JpQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHbGtJRDBnVW1WaFkzUk5iM1Z1ZEM1blpYUkpSQ2h1YjJSbEtUdGNiaUFnSUNCeVpYUjFjbTRnYVdRZ1B5QnBaQzVqYUdGeVFYUW9NQ2tnUFQwOUlGTkZVRUZTUVZSUFVpQTZJR1poYkhObE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJVY21GMlpYSnpaWE1nZFhBZ2RHaGxJR0Z1WTJWemRHOXljeUJ2WmlCMGFHVWdjM1Z3Y0d4cFpXUWdibTlrWlNCMGJ5Qm1hVzVrSUdFZ2JtOWtaU0IwYUdGMElHbHpJR0ZjYmlBZ0lDb2dSRTlOSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUdFZ1VtVmhZM1FnWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2V5cDlJRzV2WkdWY2JpQWdJQ29nUUhKbGRIVnliaUI3UDBSUFRVVjJaVzUwVkdGeVoyVjBmVnh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR2RsZEVacGNuTjBVbVZoWTNSRVQwMDZJR1oxYm1OMGFXOXVLRzV2WkdVcElIdGNiaUFnSUNCMllYSWdZM1Z5Y21WdWRDQTlJRzV2WkdVN1hHNGdJQ0FnZDJocGJHVWdLR04xY25KbGJuUWdKaVlnWTNWeWNtVnVkQzV3WVhKbGJuUk9iMlJsSUNFOVBTQmpkWEp5Wlc1MEtTQjdYRzRnSUNBZ0lDQnBaaUFvVW1WaFkzUk5iM1Z1ZEM1cGMxSmxibVJsY21Wa1FubFNaV0ZqZENoamRYSnlaVzUwS1NrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kzVnljbVZ1ZER0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdOMWNuSmxiblFnUFNCamRYSnlaVzUwTG5CaGNtVnVkRTV2WkdVN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkdhVzVrY3lCaElHNXZaR1VnZDJsMGFDQjBhR1VnYzNWd2NHeHBaV1FnWUhSaGNtZGxkRWxFWUNCcGJuTnBaR1VnYjJZZ2RHaGxJSE4xY0hCc2FXVmtYRzRnSUNBcUlHQmhibU5sYzNSdmNrNXZaR1ZnTGlBZ1JYaHdiRzlwZEhNZ2RHaGxJRWxFSUc1aGJXbHVaeUJ6WTJobGJXVWdkRzhnY0dWeVptOXliU0IwYUdVZ2MyVmhjbU5vWEc0Z0lDQXFJSEYxYVdOcmJIa3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3UkU5TlJYWmxiblJVWVhKblpYUjlJR0Z1WTJWemRHOXlUbTlrWlNCVFpXRnlZMmdnWm5KdmJTQjBhR2x6SUhKdmIzUXVYRzRnSUNBcUlFQndZWEpoY20wZ2UzTjBjbWx1WjMwZ2RHRnlaMlYwU1VRZ1NVUWdiMllnZEdobElFUlBUU0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdVZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2lCQWNtVjBkWEp1SUh0RVQwMUZkbVZ1ZEZSaGNtZGxkSDBnUkU5TklHNXZaR1VnZDJsMGFDQjBhR1VnYzNWd2NHeHBaV1FnWUhSaGNtZGxkRWxFWUM1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCbWFXNWtRMjl0Y0c5dVpXNTBVbTl2ZERvZ1puVnVZM1JwYjI0b1lXNWpaWE4wYjNKT2IyUmxMQ0IwWVhKblpYUkpSQ2tnZTF4dUlDQWdJSFpoY2lCbWFYSnpkRU5vYVd4a2NtVnVJRDBnWm1sdVpFTnZiWEJ2Ym1WdWRGSnZiM1JTWlhWellXSnNaVUZ5Y21GNU8xeHVJQ0FnSUhaaGNpQmphR2xzWkVsdVpHVjRJRDBnTUR0Y2JseHVJQ0FnSUhaaGNpQmtaV1Z3WlhOMFFXNWpaWE4wYjNJZ1BTQm1hVzVrUkdWbGNHVnpkRU5oWTJobFpFRnVZMlZ6ZEc5eUtIUmhjbWRsZEVsRUtTQjhmQ0JoYm1ObGMzUnZjazV2WkdVN1hHNWNiaUFnSUNCbWFYSnpkRU5vYVd4a2NtVnVXekJkSUQwZ1pHVmxjR1Z6ZEVGdVkyVnpkRzl5TG1acGNuTjBRMmhwYkdRN1hHNGdJQ0FnWm1seWMzUkRhR2xzWkhKbGJpNXNaVzVuZEdnZ1BTQXhPMXh1WEc0Z0lDQWdkMmhwYkdVZ0tHTm9hV3hrU1c1a1pYZ2dQQ0JtYVhKemRFTm9hV3hrY21WdUxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ2RtRnlJR05vYVd4a0lEMGdabWx5YzNSRGFHbHNaSEpsYmx0amFHbHNaRWx1WkdWNEt5dGRPMXh1SUNBZ0lDQWdkbUZ5SUhSaGNtZGxkRU5vYVd4a08xeHVYRzRnSUNBZ0lDQjNhR2xzWlNBb1kyaHBiR1FwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJR05vYVd4a1NVUWdQU0JTWldGamRFMXZkVzUwTG1kbGRFbEVLR05vYVd4a0tUdGNiaUFnSUNBZ0lDQWdhV1lnS0dOb2FXeGtTVVFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJGZG1WdUlHbG1JSGRsSUdacGJtUWdkR2hsSUc1dlpHVWdkMlVuY21VZ2JHOXZhMmx1WnlCbWIzSXNJSGRsSUdacGJtbHphQ0JzYjI5d2FXNW5YRzRnSUNBZ0lDQWdJQ0FnTHk4Z2RHaHliM1ZuYUNCcGRITWdjMmxpYkdsdVozTWdkRzhnWlc1emRYSmxJSFJvWlhrbmNtVWdZMkZqYUdWa0lITnZJSFJvWVhRZ2QyVWdaRzl1SjNRZ2FHRjJaVnh1SUNBZ0lDQWdJQ0FnSUM4dklIUnZJSEpsZG1semFYUWdkR2hwY3lCdWIyUmxJR0ZuWVdsdUxpQlBkR2hsY25kcGMyVXNJSGRsSUcxaGEyVWdibDR5SUdOaGJHeHpJSFJ2SUdkbGRFbEVYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2QyaGxiaUIyYVhOcGRHbHVaeUIwYUdVZ2JXRnVlU0JqYUdsc1pISmxiaUJ2WmlCaElITnBibWRzWlNCdWIyUmxJR2x1SUc5eVpHVnlMbHh1WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSFJoY21kbGRFbEVJRDA5UFNCamFHbHNaRWxFS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwWVhKblpYUkRhR2xzWkNBOUlHTm9hV3hrTzF4dUlDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9VbVZoWTNSSmJuTjBZVzVqWlVoaGJtUnNaWE11YVhOQmJtTmxjM1J2Y2tsRVQyWW9ZMmhwYkdSSlJDd2dkR0Z5WjJWMFNVUXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMeUJKWmlCM1pTQm1hVzVrSUdFZ1kyaHBiR1FnZDJodmMyVWdTVVFnYVhNZ1lXNGdZVzVqWlhOMGIzSWdiMllnZEdobElHZHBkbVZ1SUVsRUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2RHaGxiaUIzWlNCallXNGdZbVVnYzNWeVpTQjBhR0YwSUhkbElHOXViSGtnZDJGdWRDQjBieUJ6WldGeVkyZ2dkR2hsSUhOMVluUnlaV1ZjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJSEp2YjNSbFpDQmhkQ0IwYUdseklHTm9hV3hrTENCemJ5QjNaU0JqWVc0Z2RHaHliM2NnYjNWMElIUm9aU0J5WlhOMElHOW1JSFJvWlZ4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnYzJWaGNtTm9JSE4wWVhSbExseHVJQ0FnSUNBZ0lDQWdJQ0FnWm1seWMzUkRhR2xzWkhKbGJpNXNaVzVuZEdnZ1BTQmphR2xzWkVsdVpHVjRJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR1pwY25OMFEyaHBiR1J5Wlc0dWNIVnphQ2hqYUdsc1pDNW1hWEp6ZEVOb2FXeGtLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCSlppQjBhR2x6SUdOb2FXeGtJR2hoWkNCdWJ5QkpSQ3dnZEdobGJpQjBhR1Z5WlNkeklHRWdZMmhoYm1ObElIUm9ZWFFnYVhRZ2QyRnpYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2FXNXFaV04wWldRZ1lYVjBiMjFoZEdsallXeHNlU0JpZVNCMGFHVWdZbkp2ZDNObGNpd2dZWE1nZDJobGJpQmhJR0E4ZEdGaWJHVStZRnh1SUNBZ0lDQWdJQ0FnSUM4dklHVnNaVzFsYm5RZ2MzQnliM1YwY3lCaGJpQmxlSFJ5WVNCZ1BIUmliMlI1UG1BZ1kyaHBiR1FnWVhNZ1lTQnphV1JsSUdWbVptVmpkQ0J2Wmx4dUlDQWdJQ0FnSUNBZ0lDOHZJR0F1YVc1dVpYSklWRTFNWUNCd1lYSnphVzVuTGlCUGNIUnBiV2x6ZEdsallXeHNlU0JqYjI1MGFXNTFaU0JrYjNkdUlIUm9hWE5jYmlBZ0lDQWdJQ0FnSUNBdkx5QmljbUZ1WTJnc0lHSjFkQ0J1YjNRZ1ltVm1iM0psSUdWNFlXMXBibWx1WnlCMGFHVWdiM1JvWlhJZ2MybGliR2x1WjNNdVhHNGdJQ0FnSUNBZ0lDQWdabWx5YzNSRGFHbHNaSEpsYmk1d2RYTm9LR05vYVd4a0xtWnBjbk4wUTJocGJHUXBPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ1kyaHBiR1FnUFNCamFHbHNaQzV1WlhoMFUybGliR2x1Wnp0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLSFJoY21kbGRFTm9hV3hrS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRVZ0Y0hSNWFXNW5JR1pwY25OMFEyaHBiR1J5Wlc0dlptbHVaRU52YlhCdmJtVnVkRkp2YjNSU1pYVnpZV0pzWlVGeWNtRjVJR2x6WEc0Z0lDQWdJQ0FnSUM4dklHNXZkQ0J1WldObGMzTmhjbmtnWm05eUlHTnZjbkpsWTNSdVpYTnpMQ0JpZFhRZ2FYUWdhR1ZzY0hNZ2RHaGxJRWRESUhKbFkyeGhhVzFjYmlBZ0lDQWdJQ0FnTHk4Z1lXNTVJRzV2WkdWeklIUm9ZWFFnZDJWeVpTQnNaV1owSUdGMElIUm9aU0JsYm1RZ2IyWWdkR2hsSUhObFlYSmphQzVjYmlBZ0lDQWdJQ0FnWm1seWMzUkRhR2xzWkhKbGJpNXNaVzVuZEdnZ1BTQXdPMXh1WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwWVhKblpYUkRhR2xzWkR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtYVhKemRFTm9hV3hrY21WdUxteGxibWQwYUNBOUlEQTdYRzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FuWm1sdVpFTnZiWEJ2Ym1WdWRGSnZiM1FvTGk0dUxDQWxjeWs2SUZWdVlXSnNaU0IwYnlCbWFXNWtJR1ZzWlcxbGJuUXVJRlJvYVhNZ2NISnZZbUZpYkhrZ0p5QXJYRzRnSUNBZ0lDQW5iV1ZoYm5NZ2RHaGxJRVJQVFNCM1lYTWdkVzVsZUhCbFkzUmxaR3g1SUcxMWRHRjBaV1FnS0dVdVp5NHNJR0o1SUhSb1pTQmljbTkzYzJWeUtTd2dKeUFyWEc0Z0lDQWdJQ0FuZFhOMVlXeHNlU0JrZFdVZ2RHOGdabTl5WjJWMGRHbHVaeUJoSUR4MFltOWtlVDRnZDJobGJpQjFjMmx1WnlCMFlXSnNaWE1zSUc1bGMzUnBibWNnZEdGbmN5QW5JQ3RjYmlBZ0lDQWdJQ2RzYVd0bElEeG1iM0p0UGl3Z1BIQStMQ0J2Y2lBOFlUNHNJRzl5SUhWemFXNW5JRzV2YmkxVFZrY2daV3hsYldWdWRITWdhVzRnWVc0Z1BITjJaejRnSnlBclhHNGdJQ0FnSUNBbmNHRnlaVzUwTGlBbklDdGNiaUFnSUNBZ0lDZFVjbmtnYVc1emNHVmpkR2x1WnlCMGFHVWdZMmhwYkdRZ2JtOWtaWE1nYjJZZ2RHaGxJR1ZzWlcxbGJuUWdkMmwwYUNCU1pXRmpkQ0JKUkNCZ0pYTmdMaWNzWEc0Z0lDQWdJQ0IwWVhKblpYUkpSQ3hjYmlBZ0lDQWdJRkpsWVdOMFRXOTFiblF1WjJWMFNVUW9ZVzVqWlhOMGIzSk9iMlJsS1Z4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1ptRnNjMlVwS1R0Y2JpQWdmU3hjYmx4dUlDQmZiVzkxYm5SSmJXRm5aVWx1ZEc5T2IyUmxPaUJtZFc1amRHbHZiaWh0WVhKcmRYQXNJR052Ym5SaGFXNWxjaXdnYzJodmRXeGtVbVYxYzJWTllYSnJkWEFwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlJQ1ltSUNoY2JpQWdJQ0FnSUNBZ0tHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQTlQVDBnUlV4RlRVVk9WRjlPVDBSRlgxUlpVRVVnZkh3Z1kyOXVkR0ZwYm1WeUxtNXZaR1ZVZVhCbElEMDlQU0JFVDBOZlRrOUVSVjlVV1ZCRktWeHVJQ0FnSUNBZ0tTeGNiaUFnSUNBZ0lDZHRiM1Z1ZEVOdmJYQnZibVZ1ZEVsdWRHOU9iMlJsS0M0dUxpazZJRlJoY21kbGRDQmpiMjUwWVdsdVpYSWdhWE1nYm05MElIWmhiR2xrTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHTnZiblJoYVc1bGNpQW1KaUFvWEc0Z0lDQWdJQ0FvWTI5dWRHRnBibVZ5TG01dlpHVlVlWEJsSUQwOVBTQkZURVZOUlU1VVgwNVBSRVZmVkZsUVJTQjhmQ0JqYjI1MFlXbHVaWEl1Ym05a1pWUjVjR1VnUFQwOUlFUlBRMTlPVDBSRlgxUlpVRVVwWEc0Z0lDQWdLU2twTzF4dVhHNGdJQ0FnYVdZZ0tITm9iM1ZzWkZKbGRYTmxUV0Z5YTNWd0tTQjdYRzRnSUNBZ0lDQjJZWElnY205dmRFVnNaVzFsYm5RZ1BTQm5aWFJTWldGamRGSnZiM1JGYkdWdFpXNTBTVzVEYjI1MFlXbHVaWElvWTI5dWRHRnBibVZ5S1R0Y2JpQWdJQ0FnSUdsbUlDaFNaV0ZqZEUxaGNtdDFjRU5vWldOcmMzVnRMbU5oYmxKbGRYTmxUV0Z5YTNWd0tHMWhjbXQxY0N3Z2NtOXZkRVZzWlcxbGJuUXBLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCamFHVmphM04xYlNBOUlISnZiM1JGYkdWdFpXNTBMbWRsZEVGMGRISnBZblYwWlNoY2JpQWdJQ0FnSUNBZ0lDQlNaV0ZqZEUxaGNtdDFjRU5vWldOcmMzVnRMa05JUlVOTFUxVk5YMEZVVkZKZlRrRk5SVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNCeWIyOTBSV3hsYldWdWRDNXlaVzF2ZG1WQmRIUnlhV0oxZEdVb1VtVmhZM1JOWVhKcmRYQkRhR1ZqYTNOMWJTNURTRVZEUzFOVlRWOUJWRlJTWDA1QlRVVXBPMXh1WEc0Z0lDQWdJQ0FnSUhaaGNpQnliMjkwVFdGeWEzVndJRDBnY205dmRFVnNaVzFsYm5RdWIzVjBaWEpJVkUxTU8xeHVJQ0FnSUNBZ0lDQnliMjkwUld4bGJXVnVkQzV6WlhSQmRIUnlhV0oxZEdVb1hHNGdJQ0FnSUNBZ0lDQWdVbVZoWTNSTllYSnJkWEJEYUdWamEzTjFiUzVEU0VWRFMxTlZUVjlCVkZSU1gwNUJUVVVzWEc0Z0lDQWdJQ0FnSUNBZ1kyaGxZMnR6ZFcxY2JpQWdJQ0FnSUNBZ0tUdGNibHh1SUNBZ0lDQWdJQ0IyWVhJZ1pHbG1aa2x1WkdWNElEMGdabWx5YzNSRWFXWm1aWEpsYm1ObFNXNWtaWGdvYldGeWEzVndMQ0J5YjI5MFRXRnlhM1Z3S1R0Y2JpQWdJQ0FnSUNBZ2RtRnlJR1JwWm1abGNtVnVZMlVnUFNBbklDaGpiR2xsYm5RcElDY2dLMXh1SUNBZ0lDQWdJQ0FnSUcxaGNtdDFjQzV6ZFdKemRISnBibWNvWkdsbVprbHVaR1Y0SUMwZ01qQXNJR1JwWm1aSmJtUmxlQ0FySURJd0tTQXJYRzRnSUNBZ0lDQWdJQ0FnSjF4Y2JpQW9jMlZ5ZG1WeUtTQW5JQ3NnY205dmRFMWhjbXQxY0M1emRXSnpkSEpwYm1jb1pHbG1aa2x1WkdWNElDMGdNakFzSUdScFptWkpibVJsZUNBcklESXdLVHRjYmx4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSUNBZ0lHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQWhQVDBnUkU5RFgwNVBSRVZmVkZsUVJTeGNiaUFnSUNBZ0lDQWdJQ0FuV1c5MVhGd25jbVVnZEhKNWFXNW5JSFJ2SUhKbGJtUmxjaUJoSUdOdmJYQnZibVZ1ZENCMGJ5QjBhR1VnWkc5amRXMWxiblFnZFhOcGJtY2dKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0ozTmxjblpsY2lCeVpXNWtaWEpwYm1jZ1luVjBJSFJvWlNCamFHVmphM04xYlNCM1lYTWdhVzUyWVd4cFpDNGdWR2hwY3lCMWMzVmhiR3g1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2R0WldGdWN5QjViM1VnY21WdVpHVnlaV1FnWVNCa2FXWm1aWEpsYm5RZ1kyOXRjRzl1Wlc1MElIUjVjR1VnYjNJZ2NISnZjSE1nYjI0Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjNSb1pTQmpiR2xsYm5RZ1puSnZiU0IwYUdVZ2IyNWxJRzl1SUhSb1pTQnpaWEoyWlhJc0lHOXlJSGx2ZFhJZ2NtVnVaR1Z5S0NrZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjIxbGRHaHZaSE1nWVhKbElHbHRjSFZ5WlM0Z1VtVmhZM1FnWTJGdWJtOTBJR2hoYm1Sc1pTQjBhR2x6SUdOaGMyVWdaSFZsSUhSdklDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkamNtOXpjeTFpY205M2MyVnlJSEYxYVhKcmN5QmllU0J5Wlc1a1pYSnBibWNnWVhRZ2RHaGxJR1J2WTNWdFpXNTBJSEp2YjNRdUlGbHZkU0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5jMmh2ZFd4a0lHeHZiMnNnWm05eUlHVnVkbWx5YjI1dFpXNTBJR1JsY0dWdVpHVnVkQ0JqYjJSbElHbHVJSGx2ZFhJZ1kyOXRjRzl1Wlc1MGN5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbllXNWtJR1Z1YzNWeVpTQjBhR1VnY0hKdmNITWdZWEpsSUhSb1pTQnpZVzFsSUdOc2FXVnVkQ0JoYm1RZ2MyVnlkbVZ5SUhOcFpHVTZYRnh1SlhNbkxGeHVJQ0FnSUNBZ0lDQWdJR1JwWm1abGNtVnVZMlZjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaGpiMjUwWVdsdVpYSXVibTlrWlZSNWNHVWdJVDA5SUVSUFExOU9UMFJGWDFSWlVFVXBLVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVd4elpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNkU1pXRmpkQ0JoZEhSbGJYQjBaV1FnZEc4Z2NtVjFjMlVnYldGeWEzVndJR2x1SUdFZ1kyOXVkR0ZwYm1WeUlHSjFkQ0IwYUdVZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNBblkyaGxZMnR6ZFcwZ2QyRnpJR2x1ZG1Gc2FXUXVJRlJvYVhNZ1oyVnVaWEpoYkd4NUlHMWxZVzV6SUhSb1lYUWdlVzkxSUdGeVpTQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDZDFjMmx1WnlCelpYSjJaWElnY21WdVpHVnlhVzVuSUdGdVpDQjBhR1VnYldGeWEzVndJR2RsYm1WeVlYUmxaQ0J2YmlCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5jMlZ5ZG1WeUlIZGhjeUJ1YjNRZ2QyaGhkQ0IwYUdVZ1kyeHBaVzUwSUhkaGN5QmxlSEJsWTNScGJtY3VJRkpsWVdOMElHbHVhbVZqZEdWa0lDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0oyNWxkeUJ0WVhKcmRYQWdkRzhnWTI5dGNHVnVjMkYwWlNCM2FHbGphQ0IzYjNKcmN5QmlkWFFnZVc5MUlHaGhkbVVnYkc5emRDQnRZVzU1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSjI5bUlIUm9aU0JpWlc1bFptbDBjeUJ2WmlCelpYSjJaWElnY21WdVpHVnlhVzVuTGlCSmJuTjBaV0ZrTENCbWFXZDFjbVVnYjNWMElDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0ozZG9lU0IwYUdVZ2JXRnlhM1Z3SUdKbGFXNW5JR2RsYm1WeVlYUmxaQ0JwY3lCa2FXWm1aWEpsYm5RZ2IyNGdkR2hsSUdOc2FXVnVkQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2R2Y2lCelpYSjJaWEk2WEZ4dUpYTW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ1pHbG1abVZ5Wlc1alpWeHVJQ0FnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQmpiMjUwWVdsdVpYSXVibTlrWlZSNWNHVWdJVDA5SUVSUFExOU9UMFJGWDFSWlVFVXNYRzRnSUNBZ0lDQW5XVzkxWEZ3bmNtVWdkSEo1YVc1bklIUnZJSEpsYm1SbGNpQmhJR052YlhCdmJtVnVkQ0IwYnlCMGFHVWdaRzlqZFcxbGJuUWdZblYwSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5lVzkxSUdScFpHNWNYQ2QwSUhWelpTQnpaWEoyWlhJZ2NtVnVaR1Z5YVc1bkxpQlhaU0JqWVc1Y1hDZDBJR1J2SUhSb2FYTWdKeUFyWEc0Z0lDQWdJQ0FnSUNkM2FYUm9iM1YwSUhWemFXNW5JSE5sY25abGNpQnlaVzVrWlhKcGJtY2daSFZsSUhSdklHTnliM056TFdKeWIzZHpaWElnY1hWcGNtdHpMaUFuSUN0Y2JpQWdJQ0FnSUNBZ0oxTmxaU0JTWldGamRDNXlaVzVrWlhKVWIxTjBjbWx1WnlncElHWnZjaUJ6WlhKMlpYSWdjbVZ1WkdWeWFXNW5MaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0dOdmJuUmhhVzVsY2k1dWIyUmxWSGx3WlNBaFBUMGdSRTlEWDA1UFJFVmZWRmxRUlNrcE8xeHVYRzRnSUNBZ2MyVjBTVzV1WlhKSVZFMU1LR052Ym5SaGFXNWxjaXdnYldGeWEzVndLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVmhZM1FnU1VRZ2RYUnBiR2wwYVdWekxseHVJQ0FnS2k5Y2JseHVJQ0JuWlhSU1pXRmpkRkp2YjNSSlJEb2daMlYwVW1WaFkzUlNiMjkwU1VRc1hHNWNiaUFnWjJWMFNVUTZJR2RsZEVsRUxGeHVYRzRnSUhObGRFbEVPaUJ6WlhSSlJDeGNibHh1SUNCblpYUk9iMlJsT2lCblpYUk9iMlJsTEZ4dVhHNGdJR2RsZEU1dlpHVkdjbTl0U1c1emRHRnVZMlU2SUdkbGRFNXZaR1ZHY205dFNXNXpkR0Z1WTJVc1hHNWNiaUFnY0hWeVoyVkpSRG9nY0hWeVoyVkpSRnh1ZlR0Y2JseHVVbVZoWTNSUVpYSm1MbTFsWVhOMWNtVk5aWFJvYjJSektGSmxZV04wVFc5MWJuUXNJQ2RTWldGamRFMXZkVzUwSnl3Z2UxeHVJQ0JmY21WdVpHVnlUbVYzVW05dmRFTnZiWEJ2Ym1WdWREb2dKMTl5Wlc1a1pYSk9aWGRTYjI5MFEyOXRjRzl1Wlc1MEp5eGNiaUFnWDIxdmRXNTBTVzFoWjJWSmJuUnZUbTlrWlRvZ0oxOXRiM1Z1ZEVsdFlXZGxTVzUwYjA1dlpHVW5YRzU5S1R0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQlNaV0ZqZEUxdmRXNTBPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE11bHRpQ2hpbGRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50RW52aXJvbm1lbnRcIik7XG52YXIgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMgPSByZXF1aXJlKFwiLi9SZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlc1wiKTtcblxudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlclwiKTtcbnZhciBSZWFjdENoaWxkUmVjb25jaWxlciA9IHJlcXVpcmUoXCIuL1JlYWN0Q2hpbGRSZWNvbmNpbGVyXCIpO1xuXG4vKipcbiAqIFVwZGF0aW5nIGNoaWxkcmVuIG9mIGEgY29tcG9uZW50IG1heSB0cmlnZ2VyIHJlY3Vyc2l2ZSB1cGRhdGVzLiBUaGUgZGVwdGggaXNcbiAqIHVzZWQgdG8gYmF0Y2ggcmVjdXJzaXZlIHVwZGF0ZXMgdG8gcmVuZGVyIG1hcmt1cCBtb3JlIGVmZmljaWVudGx5LlxuICpcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgdXBkYXRlRGVwdGggPSAwO1xuXG4vKipcbiAqIFF1ZXVlIG9mIHVwZGF0ZSBjb25maWd1cmF0aW9uIG9iamVjdHMuXG4gKlxuICogRWFjaCBvYmplY3QgaGFzIGEgYHR5cGVgIHByb3BlcnR5IHRoYXQgaXMgaW4gYFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzYC5cbiAqXG4gKiBAdHlwZSB7YXJyYXk8b2JqZWN0Pn1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciB1cGRhdGVRdWV1ZSA9IFtdO1xuXG4vKipcbiAqIFF1ZXVlIG9mIG1hcmt1cCB0byBiZSByZW5kZXJlZC5cbiAqXG4gKiBAdHlwZSB7YXJyYXk8c3RyaW5nPn1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBtYXJrdXBRdWV1ZSA9IFtdO1xuXG4vKipcbiAqIEVucXVldWVzIG1hcmt1cCB0byBiZSByZW5kZXJlZCBhbmQgaW5zZXJ0ZWQgYXQgYSBzdXBwbGllZCBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50SUQgSUQgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIE1hcmt1cCB0aGF0IHJlbmRlcnMgaW50byBhbiBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRGVzdGluYXRpb24gaW5kZXguXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbnF1ZXVlTWFya3VwKHBhcmVudElELCBtYXJrdXAsIHRvSW5kZXgpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICB1cGRhdGVRdWV1ZS5wdXNoKHtcbiAgICBwYXJlbnRJRDogcGFyZW50SUQsXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICB0eXBlOiBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5JTlNFUlRfTUFSS1VQLFxuICAgIG1hcmt1cEluZGV4OiBtYXJrdXBRdWV1ZS5wdXNoKG1hcmt1cCkgLSAxLFxuICAgIHRleHRDb250ZW50OiBudWxsLFxuICAgIGZyb21JbmRleDogbnVsbCxcbiAgICB0b0luZGV4OiB0b0luZGV4XG4gIH0pO1xufVxuXG4vKipcbiAqIEVucXVldWVzIG1vdmluZyBhbiBleGlzdGluZyBlbGVtZW50IHRvIGFub3RoZXIgaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElEIElEIG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBTb3VyY2UgaW5kZXggb2YgdGhlIGV4aXN0aW5nIGVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gdG9JbmRleCBEZXN0aW5hdGlvbiBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVucXVldWVNb3ZlKHBhcmVudElELCBmcm9tSW5kZXgsIHRvSW5kZXgpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICB1cGRhdGVRdWV1ZS5wdXNoKHtcbiAgICBwYXJlbnRJRDogcGFyZW50SUQsXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICB0eXBlOiBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5NT1ZFX0VYSVNUSU5HLFxuICAgIG1hcmt1cEluZGV4OiBudWxsLFxuICAgIHRleHRDb250ZW50OiBudWxsLFxuICAgIGZyb21JbmRleDogZnJvbUluZGV4LFxuICAgIHRvSW5kZXg6IHRvSW5kZXhcbiAgfSk7XG59XG5cbi8qKlxuICogRW5xdWV1ZXMgcmVtb3ZpbmcgYW4gZWxlbWVudCBhdCBhbiBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50SUQgSUQgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IEluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJlbW92ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVucXVldWVSZW1vdmUocGFyZW50SUQsIGZyb21JbmRleCkge1xuICAvLyBOT1RFOiBOdWxsIHZhbHVlcyByZWR1Y2UgaGlkZGVuIGNsYXNzZXMuXG4gIHVwZGF0ZVF1ZXVlLnB1c2goe1xuICAgIHBhcmVudElEOiBwYXJlbnRJRCxcbiAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgIHR5cGU6IFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLlJFTU9WRV9OT0RFLFxuICAgIG1hcmt1cEluZGV4OiBudWxsLFxuICAgIHRleHRDb250ZW50OiBudWxsLFxuICAgIGZyb21JbmRleDogZnJvbUluZGV4LFxuICAgIHRvSW5kZXg6IG51bGxcbiAgfSk7XG59XG5cbi8qKlxuICogRW5xdWV1ZXMgc2V0dGluZyB0aGUgdGV4dCBjb250ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJRCBJRCBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Q29udGVudCBUZXh0IGNvbnRlbnQgdG8gc2V0LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZVRleHRDb250ZW50KHBhcmVudElELCB0ZXh0Q29udGVudCkge1xuICAvLyBOT1RFOiBOdWxsIHZhbHVlcyByZWR1Y2UgaGlkZGVuIGNsYXNzZXMuXG4gIHVwZGF0ZVF1ZXVlLnB1c2goe1xuICAgIHBhcmVudElEOiBwYXJlbnRJRCxcbiAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgIHR5cGU6IFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLlRFWFRfQ09OVEVOVCxcbiAgICBtYXJrdXBJbmRleDogbnVsbCxcbiAgICB0ZXh0Q29udGVudDogdGV4dENvbnRlbnQsXG4gICAgZnJvbUluZGV4OiBudWxsLFxuICAgIHRvSW5kZXg6IG51bGxcbiAgfSk7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGFueSBlbnF1ZXVlZCB1cGRhdGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgaWYgKHVwZGF0ZVF1ZXVlLmxlbmd0aCkge1xuICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyhcbiAgICAgIHVwZGF0ZVF1ZXVlLFxuICAgICAgbWFya3VwUXVldWVcbiAgICApO1xuICAgIGNsZWFyUXVldWUoKTtcbiAgfVxufVxuXG4vKipcbiAqIENsZWFycyBhbnkgZW5xdWV1ZWQgdXBkYXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGVhclF1ZXVlKCkge1xuICB1cGRhdGVRdWV1ZS5sZW5ndGggPSAwO1xuICBtYXJrdXBRdWV1ZS5sZW5ndGggPSAwO1xufVxuXG4vKipcbiAqIFJlYWN0TXVsdGlDaGlsZCBhcmUgY2FwYWJsZSBvZiByZWNvbmNpbGluZyBtdWx0aXBsZSBjaGlsZHJlbi5cbiAqXG4gKiBAY2xhc3MgUmVhY3RNdWx0aUNoaWxkXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlYWN0TXVsdGlDaGlsZCA9IHtcblxuICAvKipcbiAgICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGNvbXBvbmVudHMgdGhhdCBtdXN0IHJlY29uY2lsZSBtdWx0aXBsZVxuICAgKiBjaGlsZHJlbi4gVGhpcyBpcyB1c2VkIGJ5IGBSZWFjdERPTUNvbXBvbmVudGAgdG8gbW91bnQsIHVwZGF0ZSwgYW5kXG4gICAqIHVubW91bnQgY2hpbGQgY29tcG9uZW50cy5cbiAgICpcbiAgICogQGxlbmRzIHtSZWFjdE11bHRpQ2hpbGQucHJvdG90eXBlfVxuICAgKi9cbiAgTWl4aW46IHtcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIFwibW91bnQgaW1hZ2VcIiBmb3IgZWFjaCBvZiB0aGUgc3VwcGxpZWQgY2hpbGRyZW4uIEluIHRoZSBjYXNlXG4gICAgICogb2YgYFJlYWN0RE9NQ29tcG9uZW50YCwgYSBtb3VudCBpbWFnZSBpcyBhIHN0cmluZyBvZiBtYXJrdXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5lc3RlZENoaWxkcmVuIE5lc3RlZCBjaGlsZCBtYXBzLlxuICAgICAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSBvZiBtb3VudGVkIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBtb3VudENoaWxkcmVuOiBmdW5jdGlvbihuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IFJlYWN0Q2hpbGRSZWNvbmNpbGVyLmluc3RhbnRpYXRlQ2hpbGRyZW4oXG4gICAgICAgIG5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIHZhciBtb3VudEltYWdlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bbmFtZV07XG4gICAgICAgICAgLy8gSW5saW5lZCBmb3IgcGVyZm9ybWFuY2UsIHNlZSBgUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RJRGAuXG4gICAgICAgICAgdmFyIHJvb3RJRCA9IHRoaXMuX3Jvb3ROb2RlSUQgKyBuYW1lO1xuICAgICAgICAgIHZhciBtb3VudEltYWdlID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KFxuICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICByb290SUQsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNoaWxkLl9tb3VudEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgbW91bnRJbWFnZXMucHVzaChtb3VudEltYWdlKTtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbW91bnRJbWFnZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIGFueSByZW5kZXJlZCBjaGlsZHJlbiB3aXRoIGEgdGV4dCBjb250ZW50IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXh0Q29udGVudCBTdHJpbmcgb2YgY29udGVudC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB1cGRhdGVUZXh0Q29udGVudDogZnVuY3Rpb24obmV4dENvbnRlbnQpIHtcbiAgICAgIHVwZGF0ZURlcHRoKys7XG4gICAgICB2YXIgZXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47XG4gICAgICAgIC8vIFJlbW92ZSBhbnkgcmVuZGVyZWQgY2hpbGRyZW4uXG4gICAgICAgIFJlYWN0Q2hpbGRSZWNvbmNpbGVyLnVubW91bnRDaGlsZHJlbihwcmV2Q2hpbGRyZW4pO1xuICAgICAgICAvLyBUT0RPOiBUaGUgc2V0VGV4dENvbnRlbnQgb3BlcmF0aW9uIHNob3VsZCBiZSBlbm91Z2hcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAocHJldkNoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLl91bm1vdW50Q2hpbGRCeU5hbWUocHJldkNoaWxkcmVuW25hbWVdLCBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IG5ldyB0ZXh0IGNvbnRlbnQuXG4gICAgICAgIHRoaXMuc2V0VGV4dENvbnRlbnQobmV4dENvbnRlbnQpO1xuICAgICAgICBlcnJvclRocm93biA9IGZhbHNlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdXBkYXRlRGVwdGgtLTtcbiAgICAgICAgaWYgKCF1cGRhdGVEZXB0aCkge1xuICAgICAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgICAgY2xlYXJRdWV1ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzUXVldWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBuZXcgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHROZXN0ZWRDaGlsZHJlbiBOZXN0ZWQgY2hpbGQgbWFwcy5cbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKG5leHROZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIHVwZGF0ZURlcHRoKys7XG4gICAgICB2YXIgZXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4obmV4dE5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgICAgIGVycm9yVGhyb3duID0gZmFsc2U7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB1cGRhdGVEZXB0aC0tO1xuICAgICAgICBpZiAoIXVwZGF0ZURlcHRoKSB7XG4gICAgICAgICAgaWYgKGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICBjbGVhclF1ZXVlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3NRdWV1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEltcHJvdmUgcGVyZm9ybWFuY2UgYnkgaXNvbGF0aW5nIHRoaXMgaG90IGNvZGUgcGF0aCBmcm9tIHRoZSB0cnkvY2F0Y2hcbiAgICAgKiBibG9jayBpbiBgdXBkYXRlQ2hpbGRyZW5gLlxuICAgICAqXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0TmVzdGVkQ2hpbGRyZW4gTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBmaW5hbFxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBfdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKG5leHROZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuO1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IFJlYWN0Q2hpbGRSZWNvbmNpbGVyLnVwZGF0ZUNoaWxkcmVuKFxuICAgICAgICBwcmV2Q2hpbGRyZW4sIG5leHROZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHRcbiAgICAgICk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbmV4dENoaWxkcmVuO1xuICAgICAgaWYgKCFuZXh0Q2hpbGRyZW4gJiYgIXByZXZDaGlsZHJlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmFtZTtcbiAgICAgIC8vIGBuZXh0SW5kZXhgIHdpbGwgaW5jcmVtZW50IGZvciBlYWNoIGNoaWxkIGluIGBuZXh0Q2hpbGRyZW5gLCBidXRcbiAgICAgIC8vIGBsYXN0SW5kZXhgIHdpbGwgYmUgdGhlIGxhc3QgaW5kZXggdmlzaXRlZCBpbiBgcHJldkNoaWxkcmVuYC5cbiAgICAgIHZhciBsYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIG5leHRJbmRleCA9IDA7XG4gICAgICBmb3IgKG5hbWUgaW4gbmV4dENoaWxkcmVuKSB7XG4gICAgICAgIGlmICghbmV4dENoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZDaGlsZCA9IHByZXZDaGlsZHJlbiAmJiBwcmV2Q2hpbGRyZW5bbmFtZV07XG4gICAgICAgIHZhciBuZXh0Q2hpbGQgPSBuZXh0Q2hpbGRyZW5bbmFtZV07XG4gICAgICAgIGlmIChwcmV2Q2hpbGQgPT09IG5leHRDaGlsZCkge1xuICAgICAgICAgIHRoaXMubW92ZUNoaWxkKHByZXZDaGlsZCwgbmV4dEluZGV4LCBsYXN0SW5kZXgpO1xuICAgICAgICAgIGxhc3RJbmRleCA9IE1hdGgubWF4KHByZXZDaGlsZC5fbW91bnRJbmRleCwgbGFzdEluZGV4KTtcbiAgICAgICAgICBwcmV2Q2hpbGQuX21vdW50SW5kZXggPSBuZXh0SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHByZXZDaGlsZCkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGBsYXN0SW5kZXhgIGJlZm9yZSBgX21vdW50SW5kZXhgIGdldHMgdW5zZXQgYnkgdW5tb3VudGluZy5cbiAgICAgICAgICAgIGxhc3RJbmRleCA9IE1hdGgubWF4KHByZXZDaGlsZC5fbW91bnRJbmRleCwgbGFzdEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuX3VubW91bnRDaGlsZEJ5TmFtZShwcmV2Q2hpbGQsIG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBUaGUgY2hpbGQgbXVzdCBiZSBpbnN0YW50aWF0ZWQgYmVmb3JlIGl0J3MgbW91bnRlZC5cbiAgICAgICAgICB0aGlzLl9tb3VudENoaWxkQnlOYW1lQXRJbmRleChcbiAgICAgICAgICAgIG5leHRDaGlsZCwgbmFtZSwgbmV4dEluZGV4LCB0cmFuc2FjdGlvbiwgY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dEluZGV4Kys7XG4gICAgICB9XG4gICAgICAvLyBSZW1vdmUgY2hpbGRyZW4gdGhhdCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQuXG4gICAgICBmb3IgKG5hbWUgaW4gcHJldkNoaWxkcmVuKSB7XG4gICAgICAgIGlmIChwcmV2Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICAgICEobmV4dENoaWxkcmVuICYmIG5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpIHtcbiAgICAgICAgICB0aGlzLl91bm1vdW50Q2hpbGRCeU5hbWUocHJldkNoaWxkcmVuW25hbWVdLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVbm1vdW50cyBhbGwgcmVuZGVyZWQgY2hpbGRyZW4uIFRoaXMgc2hvdWxkIGJlIHVzZWQgdG8gY2xlYW4gdXAgY2hpbGRyZW5cbiAgICAgKiB3aGVuIHRoaXMgY29tcG9uZW50IGlzIHVubW91bnRlZC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHVubW91bnRDaGlsZHJlbjogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVuZGVyZWRDaGlsZHJlbiA9IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47XG4gICAgICBSZWFjdENoaWxkUmVjb25jaWxlci51bm1vdW50Q2hpbGRyZW4ocmVuZGVyZWRDaGlsZHJlbik7XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYSBjaGlsZCBjb21wb25lbnQgdG8gdGhlIHN1cHBsaWVkIGluZGV4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIG1vdmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRGVzdGluYXRpb24gaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxhc3RJbmRleCBMYXN0IGluZGV4IHZpc2l0ZWQgb2YgdGhlIHNpYmxpbmdzIG9mIGBjaGlsZGAuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIG1vdmVDaGlsZDogZnVuY3Rpb24oY2hpbGQsIHRvSW5kZXgsIGxhc3RJbmRleCkge1xuICAgICAgLy8gSWYgdGhlIGluZGV4IG9mIGBjaGlsZGAgaXMgbGVzcyB0aGFuIGBsYXN0SW5kZXhgLCB0aGVuIGl0IG5lZWRzIHRvXG4gICAgICAvLyBiZSBtb3ZlZC4gT3RoZXJ3aXNlLCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGl0IGJlY2F1c2UgYSBjaGlsZCB3aWxsIGJlXG4gICAgICAvLyBpbnNlcnRlZCBvciBtb3ZlZCBiZWZvcmUgYGNoaWxkYC5cbiAgICAgIGlmIChjaGlsZC5fbW91bnRJbmRleCA8IGxhc3RJbmRleCkge1xuICAgICAgICBlbnF1ZXVlTW92ZSh0aGlzLl9yb290Tm9kZUlELCBjaGlsZC5fbW91bnRJbmRleCwgdG9JbmRleCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDb21wb25lbnQgdG8gY3JlYXRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb3VudEltYWdlIE1hcmt1cCB0byBpbnNlcnQuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGNyZWF0ZUNoaWxkOiBmdW5jdGlvbihjaGlsZCwgbW91bnRJbWFnZSkge1xuICAgICAgZW5xdWV1ZU1hcmt1cCh0aGlzLl9yb290Tm9kZUlELCBtb3VudEltYWdlLCBjaGlsZC5fbW91bnRJbmRleCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDaGlsZCB0byByZW1vdmUuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIHJlbW92ZUNoaWxkOiBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgZW5xdWV1ZVJlbW92ZSh0aGlzLl9yb290Tm9kZUlELCBjaGlsZC5fbW91bnRJbmRleCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhpcyB0ZXh0IGNvbnRlbnQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRDb250ZW50IFRleHQgY29udGVudCB0byBzZXQuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIHNldFRleHRDb250ZW50OiBmdW5jdGlvbih0ZXh0Q29udGVudCkge1xuICAgICAgZW5xdWV1ZVRleHRDb250ZW50KHRoaXMuX3Jvb3ROb2RlSUQsIHRleHRDb250ZW50KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTW91bnRzIGEgY2hpbGQgd2l0aCB0aGUgc3VwcGxpZWQgbmFtZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoaXMgaXMgcGFydCBvZiBgdXBkYXRlQ2hpbGRyZW5gIGFuZCBpcyBoZXJlIGZvciByZWFkYWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVudCB0byBtb3VudC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBjaGlsZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBjaGlsZC5cbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfbW91bnRDaGlsZEJ5TmFtZUF0SW5kZXg6IGZ1bmN0aW9uKFxuICAgICAgY2hpbGQsXG4gICAgICBuYW1lLFxuICAgICAgaW5kZXgsXG4gICAgICB0cmFuc2FjdGlvbixcbiAgICAgIGNvbnRleHQpIHtcbiAgICAgIC8vIElubGluZWQgZm9yIHBlcmZvcm1hbmNlLCBzZWUgYFJlYWN0SW5zdGFuY2VIYW5kbGVzLmNyZWF0ZVJlYWN0SURgLlxuICAgICAgdmFyIHJvb3RJRCA9IHRoaXMuX3Jvb3ROb2RlSUQgKyBuYW1lO1xuICAgICAgdmFyIG1vdW50SW1hZ2UgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoXG4gICAgICAgIGNoaWxkLFxuICAgICAgICByb290SUQsXG4gICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgICAgY2hpbGQuX21vdW50SW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuY3JlYXRlQ2hpbGQoY2hpbGQsIG1vdW50SW1hZ2UpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVbm1vdW50cyBhIHJlbmRlcmVkIGNoaWxkIGJ5IG5hbWUuXG4gICAgICpcbiAgICAgKiBOT1RFOiBUaGlzIGlzIHBhcnQgb2YgYHVwZGF0ZUNoaWxkcmVuYCBhbmQgaXMgaGVyZSBmb3IgcmVhZGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDb21wb25lbnQgdG8gdW5tb3VudC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBjaGlsZCBpbiBgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbmAuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdW5tb3VudENoaWxkQnlOYW1lOiBmdW5jdGlvbihjaGlsZCwgbmFtZSkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICBjaGlsZC5fbW91bnRJbmRleCA9IG51bGw7XG4gICAgfVxuXG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE11bHRpQ2hpbGQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBrZXlNaXJyb3IgPSByZXF1aXJlKFwiLi9rZXlNaXJyb3JcIik7XG5cbi8qKlxuICogV2hlbiBhIGNvbXBvbmVudCdzIGNoaWxkcmVuIGFyZSB1cGRhdGVkLCBhIHNlcmllcyBvZiB1cGRhdGUgY29uZmlndXJhdGlvblxuICogb2JqZWN0cyBhcmUgY3JlYXRlZCBpbiBvcmRlciB0byBiYXRjaCBhbmQgc2VyaWFsaXplIHRoZSByZXF1aXJlZCBjaGFuZ2VzLlxuICpcbiAqIEVudW1lcmF0ZXMgYWxsIHRoZSBwb3NzaWJsZSB0eXBlcyBvZiB1cGRhdGUgY29uZmlndXJhdGlvbnMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcyA9IGtleU1pcnJvcih7XG4gIElOU0VSVF9NQVJLVVA6IG51bGwsXG4gIE1PVkVfRVhJU1RJTkc6IG51bGwsXG4gIFJFTU9WRV9OT0RFOiBudWxsLFxuICBURVhUX0NPTlRFTlQ6IG51bGxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE5hdGl2ZUNvbXBvbmVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG52YXIgYXV0b0dlbmVyYXRlV3JhcHBlckNsYXNzID0gbnVsbDtcbnZhciBnZW5lcmljQ29tcG9uZW50Q2xhc3MgPSBudWxsO1xuLy8gVGhpcyByZWdpc3RyeSBrZWVwcyB0cmFjayBvZiB3cmFwcGVyIGNsYXNzZXMgYXJvdW5kIG5hdGl2ZSB0YWdzXG52YXIgdGFnVG9Db21wb25lbnRDbGFzcyA9IHt9O1xudmFyIHRleHRDb21wb25lbnRDbGFzcyA9IG51bGw7XG5cbnZhciBSZWFjdE5hdGl2ZUNvbXBvbmVudEluamVjdGlvbiA9IHtcbiAgLy8gVGhpcyBhY2NlcHRzIGEgY2xhc3MgdGhhdCByZWNlaXZlcyB0aGUgdGFnIHN0cmluZy4gVGhpcyBpcyBhIGNhdGNoIGFsbFxuICAvLyB0aGF0IGNhbiByZW5kZXIgYW55IGtpbmQgb2YgdGFnLlxuICBpbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3M6IGZ1bmN0aW9uKGNvbXBvbmVudENsYXNzKSB7XG4gICAgZ2VuZXJpY0NvbXBvbmVudENsYXNzID0gY29tcG9uZW50Q2xhc3M7XG4gIH0sXG4gIC8vIFRoaXMgYWNjZXB0cyBhIHRleHQgY29tcG9uZW50IGNsYXNzIHRoYXQgdGFrZXMgdGhlIHRleHQgc3RyaW5nIHRvIGJlXG4gIC8vIHJlbmRlcmVkIGFzIHByb3BzLlxuICBpbmplY3RUZXh0Q29tcG9uZW50Q2xhc3M6IGZ1bmN0aW9uKGNvbXBvbmVudENsYXNzKSB7XG4gICAgdGV4dENvbXBvbmVudENsYXNzID0gY29tcG9uZW50Q2xhc3M7XG4gIH0sXG4gIC8vIFRoaXMgYWNjZXB0cyBhIGtleWVkIG9iamVjdCB3aXRoIGNsYXNzZXMgYXMgdmFsdWVzLiBFYWNoIGtleSByZXByZXNlbnRzIGFcbiAgLy8gdGFnLiBUaGF0IHBhcnRpY3VsYXIgdGFnIHdpbGwgdXNlIHRoaXMgY2xhc3MgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBvbmUuXG4gIGluamVjdENvbXBvbmVudENsYXNzZXM6IGZ1bmN0aW9uKGNvbXBvbmVudENsYXNzZXMpIHtcbiAgICBhc3NpZ24odGFnVG9Db21wb25lbnRDbGFzcywgY29tcG9uZW50Q2xhc3Nlcyk7XG4gIH0sXG4gIC8vIFRlbXBvcmFyeSBoYWNrIHNpbmNlIHdlIGV4cGVjdCBET00gcmVmcyB0byBiZWhhdmUgbGlrZSBjb21wb3NpdGVzLFxuICAvLyBmb3IgdGhpcyByZWxlYXNlLlxuICBpbmplY3RBdXRvV3JhcHBlcjogZnVuY3Rpb24od3JhcHBlckZhY3RvcnkpIHtcbiAgICBhdXRvR2VuZXJhdGVXcmFwcGVyQ2xhc3MgPSB3cmFwcGVyRmFjdG9yeTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgYSBjb21wb3NpdGUgY29tcG9uZW50IHdyYXBwZXIgY2xhc3MgZm9yIGEgc3BlY2lmaWMgdGFnLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IFRoZSB0YWcgZm9yIHdoaWNoIHRvIGdldCB0aGUgY2xhc3MuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIFJlYWN0IGNsYXNzIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnRDbGFzc0ZvckVsZW1lbnQoZWxlbWVudCkge1xuICBpZiAodHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbGVtZW50LnR5cGU7XG4gIH1cbiAgdmFyIHRhZyA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGNvbXBvbmVudENsYXNzID0gdGFnVG9Db21wb25lbnRDbGFzc1t0YWddO1xuICBpZiAoY29tcG9uZW50Q2xhc3MgPT0gbnVsbCkge1xuICAgIHRhZ1RvQ29tcG9uZW50Q2xhc3NbdGFnXSA9IGNvbXBvbmVudENsYXNzID0gYXV0b0dlbmVyYXRlV3JhcHBlckNsYXNzKHRhZyk7XG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudENsYXNzO1xufVxuXG4vKipcbiAqIEdldCBhIG5hdGl2ZSBpbnRlcm5hbCBjb21wb25lbnQgY2xhc3MgZm9yIGEgc3BlY2lmaWMgdGFnLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNyZWF0ZS5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgaW50ZXJuYWwgY2xhc3MgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUludGVybmFsQ29tcG9uZW50KGVsZW1lbnQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBnZW5lcmljQ29tcG9uZW50Q2xhc3MsXG4gICAgJ1RoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgY29tcG9uZW50IGZvciB0aGUgdGFnICVzJyxcbiAgICBlbGVtZW50LnR5cGVcbiAgKSA6IGludmFyaWFudChnZW5lcmljQ29tcG9uZW50Q2xhc3MpKTtcbiAgcmV0dXJuIG5ldyBnZW5lcmljQ29tcG9uZW50Q2xhc3MoZWxlbWVudC50eXBlLCBlbGVtZW50LnByb3BzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWN0VGV4dH0gdGV4dFxuICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlRm9yVGV4dCh0ZXh0KSB7XG4gIHJldHVybiBuZXcgdGV4dENvbXBvbmVudENsYXNzKHRleHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUZXh0Q29tcG9uZW50KGNvbXBvbmVudCkge1xuICByZXR1cm4gY29tcG9uZW50IGluc3RhbmNlb2YgdGV4dENvbXBvbmVudENsYXNzO1xufVxuXG52YXIgUmVhY3ROYXRpdmVDb21wb25lbnQgPSB7XG4gIGdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudDogZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50LFxuICBjcmVhdGVJbnRlcm5hbENvbXBvbmVudDogY3JlYXRlSW50ZXJuYWxDb21wb25lbnQsXG4gIGNyZWF0ZUluc3RhbmNlRm9yVGV4dDogY3JlYXRlSW5zdGFuY2VGb3JUZXh0LFxuICBpc1RleHRDb21wb25lbnQ6IGlzVGV4dENvbXBvbmVudCxcbiAgaW5qZWN0aW9uOiBSZWFjdE5hdGl2ZUNvbXBvbmVudEluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE5hdGl2ZUNvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JPWVhScGRtVkRiMjF3YjI1bGJuUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UUXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkRnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUdGemMybG5iaUE5SUhKbGNYVnBjbVVvWENJdUwwOWlhbVZqZEM1aGMzTnBaMjVjSWlrN1hHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNTJZWElnWVhWMGIwZGxibVZ5WVhSbFYzSmhjSEJsY2tOc1lYTnpJRDBnYm5Wc2JEdGNiblpoY2lCblpXNWxjbWxqUTI5dGNHOXVaVzUwUTJ4aGMzTWdQU0J1ZFd4c08xeHVMeThnVkdocGN5QnlaV2RwYzNSeWVTQnJaV1Z3Y3lCMGNtRmpheUJ2WmlCM2NtRndjR1Z5SUdOc1lYTnpaWE1nWVhKdmRXNWtJRzVoZEdsMlpTQjBZV2R6WEc1MllYSWdkR0ZuVkc5RGIyMXdiMjVsYm5SRGJHRnpjeUE5SUh0OU8xeHVkbUZ5SUhSbGVIUkRiMjF3YjI1bGJuUkRiR0Z6Y3lBOUlHNTFiR3c3WEc1Y2JuWmhjaUJTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEVsdWFtVmpkR2x2YmlBOUlIdGNiaUFnTHk4Z1ZHaHBjeUJoWTJObGNIUnpJR0VnWTJ4aGMzTWdkR2hoZENCeVpXTmxhWFpsY3lCMGFHVWdkR0ZuSUhOMGNtbHVaeTRnVkdocGN5QnBjeUJoSUdOaGRHTm9JR0ZzYkZ4dUlDQXZMeUIwYUdGMElHTmhiaUJ5Wlc1a1pYSWdZVzU1SUd0cGJtUWdiMllnZEdGbkxseHVJQ0JwYm1wbFkzUkhaVzVsY21salEyOXRjRzl1Wlc1MFEyeGhjM002SUdaMWJtTjBhVzl1S0dOdmJYQnZibVZ1ZEVOc1lYTnpLU0I3WEc0Z0lDQWdaMlZ1WlhKcFkwTnZiWEJ2Ym1WdWRFTnNZWE56SUQwZ1kyOXRjRzl1Wlc1MFEyeGhjM003WEc0Z0lIMHNYRzRnSUM4dklGUm9hWE1nWVdOalpYQjBjeUJoSUhSbGVIUWdZMjl0Y0c5dVpXNTBJR05zWVhOeklIUm9ZWFFnZEdGclpYTWdkR2hsSUhSbGVIUWdjM1J5YVc1bklIUnZJR0psWEc0Z0lDOHZJSEpsYm1SbGNtVmtJR0Z6SUhCeWIzQnpMbHh1SUNCcGJtcGxZM1JVWlhoMFEyOXRjRzl1Wlc1MFEyeGhjM002SUdaMWJtTjBhVzl1S0dOdmJYQnZibVZ1ZEVOc1lYTnpLU0I3WEc0Z0lDQWdkR1Y0ZEVOdmJYQnZibVZ1ZEVOc1lYTnpJRDBnWTI5dGNHOXVaVzUwUTJ4aGMzTTdYRzRnSUgwc1hHNGdJQzh2SUZSb2FYTWdZV05qWlhCMGN5QmhJR3RsZVdWa0lHOWlhbVZqZENCM2FYUm9JR05zWVhOelpYTWdZWE1nZG1Gc2RXVnpMaUJGWVdOb0lHdGxlU0J5WlhCeVpYTmxiblJ6SUdGY2JpQWdMeThnZEdGbkxpQlVhR0YwSUhCaGNuUnBZM1ZzWVhJZ2RHRm5JSGRwYkd3Z2RYTmxJSFJvYVhNZ1kyeGhjM01nYVc1emRHVmhaQ0J2WmlCMGFHVWdaMlZ1WlhKcFl5QnZibVV1WEc0Z0lHbHVhbVZqZEVOdmJYQnZibVZ1ZEVOc1lYTnpaWE02SUdaMWJtTjBhVzl1S0dOdmJYQnZibVZ1ZEVOc1lYTnpaWE1wSUh0Y2JpQWdJQ0JoYzNOcFoyNG9kR0ZuVkc5RGIyMXdiMjVsYm5SRGJHRnpjeXdnWTI5dGNHOXVaVzUwUTJ4aGMzTmxjeWs3WEc0Z0lIMHNYRzRnSUM4dklGUmxiWEJ2Y21GeWVTQm9ZV05ySUhOcGJtTmxJSGRsSUdWNGNHVmpkQ0JFVDAwZ2NtVm1jeUIwYnlCaVpXaGhkbVVnYkdsclpTQmpiMjF3YjNOcGRHVnpMRnh1SUNBdkx5Qm1iM0lnZEdocGN5QnlaV3hsWVhObExseHVJQ0JwYm1wbFkzUkJkWFJ2VjNKaGNIQmxjam9nWm5WdVkzUnBiMjRvZDNKaGNIQmxja1poWTNSdmNua3BJSHRjYmlBZ0lDQmhkWFJ2UjJWdVpYSmhkR1ZYY21Gd2NHVnlRMnhoYzNNZ1BTQjNjbUZ3Y0dWeVJtRmpkRzl5ZVR0Y2JpQWdmVnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkhaWFFnWVNCamIyMXdiM05wZEdVZ1kyOXRjRzl1Wlc1MElIZHlZWEJ3WlhJZ1kyeGhjM01nWm05eUlHRWdjM0JsWTJsbWFXTWdkR0ZuTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3VW1WaFkzUkZiR1Z0Wlc1MGZTQmxiR1Z0Wlc1MElGUm9aU0IwWVdjZ1ptOXlJSGRvYVdOb0lIUnZJR2RsZENCMGFHVWdZMnhoYzNNdVhHNGdLaUJBY21WMGRYSnVJSHRtZFc1amRHbHZibjBnVkdobElGSmxZV04wSUdOc1lYTnpJR052Ym5OMGNuVmpkRzl5SUdaMWJtTjBhVzl1TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJuWlhSRGIyMXdiMjVsYm5SRGJHRnpjMFp2Y2tWc1pXMWxiblFvWld4bGJXVnVkQ2tnZTF4dUlDQnBaaUFvZEhsd1pXOW1JR1ZzWlcxbGJuUXVkSGx3WlNBOVBUMGdKMloxYm1OMGFXOXVKeWtnZTF4dUlDQWdJSEpsZEhWeWJpQmxiR1Z0Wlc1MExuUjVjR1U3WEc0Z0lIMWNiaUFnZG1GeUlIUmhaeUE5SUdWc1pXMWxiblF1ZEhsd1pUdGNiaUFnZG1GeUlHTnZiWEJ2Ym1WdWRFTnNZWE56SUQwZ2RHRm5WRzlEYjIxd2IyNWxiblJEYkdGemMxdDBZV2RkTzF4dUlDQnBaaUFvWTI5dGNHOXVaVzUwUTJ4aGMzTWdQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lIUmhaMVJ2UTI5dGNHOXVaVzUwUTJ4aGMzTmJkR0ZuWFNBOUlHTnZiWEJ2Ym1WdWRFTnNZWE56SUQwZ1lYVjBiMGRsYm1WeVlYUmxWM0poY0hCbGNrTnNZWE56S0hSaFp5azdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHTnZiWEJ2Ym1WdWRFTnNZWE56TzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRsZENCaElHNWhkR2wyWlNCcGJuUmxjbTVoYkNCamIyMXdiMjVsYm5RZ1kyeGhjM01nWm05eUlHRWdjM0JsWTJsbWFXTWdkR0ZuTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3VW1WaFkzUkZiR1Z0Wlc1MGZTQmxiR1Z0Wlc1MElGUm9aU0JsYkdWdFpXNTBJSFJ2SUdOeVpXRjBaUzVjYmlBcUlFQnlaWFIxY200Z2UyWjFibU4wYVc5dWZTQlVhR1VnYVc1MFpYSnVZV3dnWTJ4aGMzTWdZMjl1YzNSeWRXTjBiM0lnWm5WdVkzUnBiMjR1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR055WldGMFpVbHVkR1Z5Ym1Gc1EyOXRjRzl1Wlc1MEtHVnNaVzFsYm5RcElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQm5aVzVsY21salEyOXRjRzl1Wlc1MFEyeGhjM01zWEc0Z0lDQWdKMVJvWlhKbElHbHpJRzV2SUhKbFoybHpkR1Z5WldRZ1kyOXRjRzl1Wlc1MElHWnZjaUIwYUdVZ2RHRm5JQ1Z6Snl4Y2JpQWdJQ0JsYkdWdFpXNTBMblI1Y0dWY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENoblpXNWxjbWxqUTI5dGNHOXVaVzUwUTJ4aGMzTXBLVHRjYmlBZ2NtVjBkWEp1SUc1bGR5Qm5aVzVsY21salEyOXRjRzl1Wlc1MFEyeGhjM01vWld4bGJXVnVkQzUwZVhCbExDQmxiR1Z0Wlc1MExuQnliM0J6S1R0Y2JuMWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMUpsWVdOMFZHVjRkSDBnZEdWNGRGeHVJQ29nUUhKbGRIVnliaUI3VW1WaFkzUkRiMjF3YjI1bGJuUjlYRzRnS2k5Y2JtWjFibU4wYVc5dUlHTnlaV0YwWlVsdWMzUmhibU5sUm05eVZHVjRkQ2gwWlhoMEtTQjdYRzRnSUhKbGRIVnliaUJ1WlhjZ2RHVjRkRU52YlhCdmJtVnVkRU5zWVhOektIUmxlSFFwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRGIyMXdiMjVsYm5SOUlHTnZiWEJ2Ym1WdWRGeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjFjYmlBcUwxeHVablZ1WTNScGIyNGdhWE5VWlhoMFEyOXRjRzl1Wlc1MEtHTnZiWEJ2Ym1WdWRDa2dlMXh1SUNCeVpYUjFjbTRnWTI5dGNHOXVaVzUwSUdsdWMzUmhibU5sYjJZZ2RHVjRkRU52YlhCdmJtVnVkRU5zWVhOek8xeHVmVnh1WEc1MllYSWdVbVZoWTNST1lYUnBkbVZEYjIxd2IyNWxiblFnUFNCN1hHNGdJR2RsZEVOdmJYQnZibVZ1ZEVOc1lYTnpSbTl5Uld4bGJXVnVkRG9nWjJWMFEyOXRjRzl1Wlc1MFEyeGhjM05HYjNKRmJHVnRaVzUwTEZ4dUlDQmpjbVZoZEdWSmJuUmxjbTVoYkVOdmJYQnZibVZ1ZERvZ1kzSmxZWFJsU1c1MFpYSnVZV3hEYjIxd2IyNWxiblFzWEc0Z0lHTnlaV0YwWlVsdWMzUmhibU5sUm05eVZHVjRkRG9nWTNKbFlYUmxTVzV6ZEdGdVkyVkdiM0pVWlhoMExGeHVJQ0JwYzFSbGVIUkRiMjF3YjI1bGJuUTZJR2x6VkdWNGRFTnZiWEJ2Ym1WdWRDeGNiaUFnYVc1cVpXTjBhVzl1T2lCU1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWRFbHVhbVZqZEdsdmJseHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCU1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWREdGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RPd25lclxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBSZWFjdE93bmVycyBhcmUgY2FwYWJsZSBvZiBzdG9yaW5nIHJlZmVyZW5jZXMgdG8gb3duZWQgY29tcG9uZW50cy5cbiAqXG4gKiBBbGwgY29tcG9uZW50cyBhcmUgY2FwYWJsZSBvZiAvL2JlaW5nLy8gcmVmZXJlbmNlZCBieSBvd25lciBjb21wb25lbnRzLCBidXRcbiAqIG9ubHkgUmVhY3RPd25lciBjb21wb25lbnRzIGFyZSBjYXBhYmxlIG9mIC8vcmVmZXJlbmNpbmcvLyBvd25lZCBjb21wb25lbnRzLlxuICogVGhlIG5hbWVkIHJlZmVyZW5jZSBpcyBrbm93biBhcyBhIFwicmVmXCIuXG4gKlxuICogUmVmcyBhcmUgYXZhaWxhYmxlIHdoZW4gbW91bnRlZCBhbmQgdXBkYXRlZCBkdXJpbmcgcmVjb25jaWxpYXRpb24uXG4gKlxuICogICB2YXIgTXlDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgIHJldHVybiAoXG4gKiAgICAgICAgIDxkaXYgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gKiAgICAgICAgICAgPEN1c3RvbUNvbXBvbmVudCByZWY9XCJjdXN0b21cIiAvPlxuICogICAgICAgICA8L2Rpdj5cbiAqICAgICAgICk7XG4gKiAgICAgfSxcbiAqICAgICBoYW5kbGVDbGljazogZnVuY3Rpb24oKSB7XG4gKiAgICAgICB0aGlzLnJlZnMuY3VzdG9tLmhhbmRsZUNsaWNrKCk7XG4gKiAgICAgfSxcbiAqICAgICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gKiAgICAgICB0aGlzLnJlZnMuY3VzdG9tLmluaXRpYWxpemUoKTtcbiAqICAgICB9XG4gKiAgIH0pO1xuICpcbiAqIFJlZnMgc2hvdWxkIHJhcmVseSBiZSB1c2VkLiBXaGVuIHJlZnMgYXJlIHVzZWQsIHRoZXkgc2hvdWxkIG9ubHkgYmUgZG9uZSB0b1xuICogY29udHJvbCBkYXRhIHRoYXQgaXMgbm90IGhhbmRsZWQgYnkgUmVhY3QncyBkYXRhIGZsb3cuXG4gKlxuICogQGNsYXNzIFJlYWN0T3duZXJcbiAqL1xudmFyIFJlYWN0T3duZXIgPSB7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSB2YWxpZCBvd25lci5cbiAgICogQGZpbmFsXG4gICAqL1xuICBpc1ZhbGlkT3duZXI6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiAhIShcbiAgICAgIChvYmplY3QgJiZcbiAgICAgIHR5cGVvZiBvYmplY3QuYXR0YWNoUmVmID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmplY3QuZGV0YWNoUmVmID09PSAnZnVuY3Rpb24nKVxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21wb25lbnQgYnkgcmVmIHRvIGFuIG93bmVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50IENvbXBvbmVudCB0byByZWZlcmVuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWYgTmFtZSBieSB3aGljaCB0byByZWZlciB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0ge1JlYWN0T3duZXJ9IG93bmVyIENvbXBvbmVudCBvbiB3aGljaCB0byByZWNvcmQgdGhlIHJlZi5cbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgYWRkQ29tcG9uZW50QXNSZWZUbzogZnVuY3Rpb24oY29tcG9uZW50LCByZWYsIG93bmVyKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIFJlYWN0T3duZXIuaXNWYWxpZE93bmVyKG93bmVyKSxcbiAgICAgICdhZGRDb21wb25lbnRBc1JlZlRvKC4uLik6IE9ubHkgYSBSZWFjdE93bmVyIGNhbiBoYXZlIHJlZnMuIFRoaXMgJyArXG4gICAgICAndXN1YWxseSBtZWFucyB0aGF0IHlvdVxcJ3JlIHRyeWluZyB0byBhZGQgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCAnICtcbiAgICAgICdkb2VzblxcJ3QgaGF2ZSBhbiBvd25lciAodGhhdCBpcywgd2FzIG5vdCBjcmVhdGVkIGluc2lkZSBvZiBhbm90aGVyICcgK1xuICAgICAgJ2NvbXBvbmVudFxcJ3MgYHJlbmRlcmAgbWV0aG9kKS4gVHJ5IHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBpbnNpZGUgb2YgJyArXG4gICAgICAnYSBuZXcgdG9wLWxldmVsIGNvbXBvbmVudCB3aGljaCB3aWxsIGhvbGQgdGhlIHJlZi4nXG4gICAgKSA6IGludmFyaWFudChSZWFjdE93bmVyLmlzVmFsaWRPd25lcihvd25lcikpKTtcbiAgICBvd25lci5hdHRhY2hSZWYocmVmLCBjb21wb25lbnQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY29tcG9uZW50IGJ5IHJlZiBmcm9tIGFuIG93bmVyIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50IENvbXBvbmVudCB0byBkZXJlZmVyZW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZiBOYW1lIG9mIHRoZSByZWYgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0ge1JlYWN0T3duZXJ9IG93bmVyIENvbXBvbmVudCBvbiB3aGljaCB0aGUgcmVmIGlzIHJlY29yZGVkLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZW1vdmVDb21wb25lbnRBc1JlZkZyb206IGZ1bmN0aW9uKGNvbXBvbmVudCwgcmVmLCBvd25lcikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBSZWFjdE93bmVyLmlzVmFsaWRPd25lcihvd25lciksXG4gICAgICAncmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKC4uLik6IE9ubHkgYSBSZWFjdE93bmVyIGNhbiBoYXZlIHJlZnMuIFRoaXMgJyArXG4gICAgICAndXN1YWxseSBtZWFucyB0aGF0IHlvdVxcJ3JlIHRyeWluZyB0byByZW1vdmUgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCAnICtcbiAgICAgICdkb2VzblxcJ3QgaGF2ZSBhbiBvd25lciAodGhhdCBpcywgd2FzIG5vdCBjcmVhdGVkIGluc2lkZSBvZiBhbm90aGVyICcgK1xuICAgICAgJ2NvbXBvbmVudFxcJ3MgYHJlbmRlcmAgbWV0aG9kKS4gVHJ5IHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBpbnNpZGUgb2YgJyArXG4gICAgICAnYSBuZXcgdG9wLWxldmVsIGNvbXBvbmVudCB3aGljaCB3aWxsIGhvbGQgdGhlIHJlZi4nXG4gICAgKSA6IGludmFyaWFudChSZWFjdE93bmVyLmlzVmFsaWRPd25lcihvd25lcikpKTtcbiAgICAvLyBDaGVjayB0aGF0IGBjb21wb25lbnRgIGlzIHN0aWxsIHRoZSBjdXJyZW50IHJlZiBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvXG4gICAgLy8gZGV0YWNoIHRoZSByZWYgaWYgYW5vdGhlciBjb21wb25lbnQgc3RvbGUgaXQuXG4gICAgaWYgKG93bmVyLmdldFB1YmxpY0luc3RhbmNlKCkucmVmc1tyZWZdID09PSBjb21wb25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKSkge1xuICAgICAgb3duZXIuZGV0YWNoUmVmKHJlZik7XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RPd25lcjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JQZDI1bGNpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRTkzYm1WeVhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc0dktpcGNiaUFxSUZKbFlXTjBUM2R1WlhKeklHRnlaU0JqWVhCaFlteGxJRzltSUhOMGIzSnBibWNnY21WbVpYSmxibU5sY3lCMGJ5QnZkMjVsWkNCamIyMXdiMjVsYm5SekxseHVJQ3BjYmlBcUlFRnNiQ0JqYjIxd2IyNWxiblJ6SUdGeVpTQmpZWEJoWW14bElHOW1JQzh2WW1WcGJtY3ZMeUJ5WldabGNtVnVZMlZrSUdKNUlHOTNibVZ5SUdOdmJYQnZibVZ1ZEhNc0lHSjFkRnh1SUNvZ2IyNXNlU0JTWldGamRFOTNibVZ5SUdOdmJYQnZibVZ1ZEhNZ1lYSmxJR05oY0dGaWJHVWdiMllnTHk5eVpXWmxjbVZ1WTJsdVp5OHZJRzkzYm1Wa0lHTnZiWEJ2Ym1WdWRITXVYRzRnS2lCVWFHVWdibUZ0WldRZ2NtVm1aWEpsYm1ObElHbHpJR3R1YjNkdUlHRnpJR0VnWENKeVpXWmNJaTVjYmlBcVhHNGdLaUJTWldaeklHRnlaU0JoZG1GcGJHRmliR1VnZDJobGJpQnRiM1Z1ZEdWa0lHRnVaQ0IxY0dSaGRHVmtJR1IxY21sdVp5QnlaV052Ym1OcGJHbGhkR2x2Ymk1Y2JpQXFYRzRnS2lBZ0lIWmhjaUJOZVVOdmJYQnZibVZ1ZENBOUlGSmxZV04wTG1OeVpXRjBaVU5zWVhOektIdGNiaUFxSUNBZ0lDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNvZ0lDQWdJQ0FnY21WMGRYSnVJQ2hjYmlBcUlDQWdJQ0FnSUNBZ1BHUnBkaUJ2YmtOc2FXTnJQWHQwYUdsekxtaGhibVJzWlVOc2FXTnJmVDVjYmlBcUlDQWdJQ0FnSUNBZ0lDQThRM1Z6ZEc5dFEyOXRjRzl1Wlc1MElISmxaajFjSW1OMWMzUnZiVndpSUM4K1hHNGdLaUFnSUNBZ0lDQWdJRHd2WkdsMlBseHVJQ29nSUNBZ0lDQWdLVHRjYmlBcUlDQWdJQ0I5TEZ4dUlDb2dJQ0FnSUdoaGJtUnNaVU5zYVdOck9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBcUlDQWdJQ0FnSUhSb2FYTXVjbVZtY3k1amRYTjBiMjB1YUdGdVpHeGxRMnhwWTJzb0tUdGNiaUFxSUNBZ0lDQjlMRnh1SUNvZ0lDQWdJR052YlhCdmJtVnVkRVJwWkUxdmRXNTBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQXFJQ0FnSUNBZ0lIUm9hWE11Y21WbWN5NWpkWE4wYjIwdWFXNXBkR2xoYkdsNlpTZ3BPMXh1SUNvZ0lDQWdJSDFjYmlBcUlDQWdmU2s3WEc0Z0tseHVJQ29nVW1WbWN5QnphRzkxYkdRZ2NtRnlaV3g1SUdKbElIVnpaV1F1SUZkb1pXNGdjbVZtY3lCaGNtVWdkWE5sWkN3Z2RHaGxlU0J6YUc5MWJHUWdiMjVzZVNCaVpTQmtiMjVsSUhSdlhHNGdLaUJqYjI1MGNtOXNJR1JoZEdFZ2RHaGhkQ0JwY3lCdWIzUWdhR0Z1Wkd4bFpDQmllU0JTWldGamRDZHpJR1JoZEdFZ1pteHZkeTVjYmlBcVhHNGdLaUJBWTJ4aGMzTWdVbVZoWTNSUGQyNWxjbHh1SUNvdlhHNTJZWElnVW1WaFkzUlBkMjVsY2lBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCdlltcGxZM1JjYmlBZ0lDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMGdWSEoxWlNCcFppQmdiMkpxWldOMFlDQnBjeUJoSUhaaGJHbGtJRzkzYm1WeUxseHVJQ0FnS2lCQVptbHVZV3hjYmlBZ0lDb3ZYRzRnSUdselZtRnNhV1JQZDI1bGNqb2dablZ1WTNScGIyNG9iMkpxWldOMEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUNFaEtGeHVJQ0FnSUNBZ0tHOWlhbVZqZENBbUpseHVJQ0FnSUNBZ2RIbHdaVzltSUc5aWFtVmpkQzVoZEhSaFkyaFNaV1lnUFQwOUlDZG1kVzVqZEdsdmJpY2dKaVlnZEhsd1pXOW1JRzlpYW1WamRDNWtaWFJoWTJoU1pXWWdQVDA5SUNkbWRXNWpkR2x2YmljcFhHNGdJQ0FnS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRV1JrY3lCaElHTnZiWEJ2Ym1WdWRDQmllU0J5WldZZ2RHOGdZVzRnYjNkdVpYSWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JqYjIxd2IyNWxiblFnUTI5dGNHOXVaVzUwSUhSdklISmxabVZ5Wlc1alpTNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhKbFppQk9ZVzFsSUdKNUlIZG9hV05vSUhSdklISmxabVZ5SUhSdklIUm9aU0JqYjIxd2IyNWxiblF1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSUGQyNWxjbjBnYjNkdVpYSWdRMjl0Y0c5dVpXNTBJRzl1SUhkb2FXTm9JSFJ2SUhKbFkyOXlaQ0IwYUdVZ2NtVm1MbHh1SUNBZ0tpQkFabWx1WVd4Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCaFpHUkRiMjF3YjI1bGJuUkJjMUpsWmxSdk9pQm1kVzVqZEdsdmJpaGpiMjF3YjI1bGJuUXNJSEpsWml3Z2IzZHVaWElwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdVbVZoWTNSUGQyNWxjaTVwYzFaaGJHbGtUM2R1WlhJb2IzZHVaWElwTEZ4dUlDQWdJQ0FnSjJGa1pFTnZiWEJ2Ym1WdWRFRnpVbVZtVkc4b0xpNHVLVG9nVDI1c2VTQmhJRkpsWVdOMFQzZHVaWElnWTJGdUlHaGhkbVVnY21WbWN5NGdWR2hwY3lBbklDdGNiaUFnSUNBZ0lDZDFjM1ZoYkd4NUlHMWxZVzV6SUhSb1lYUWdlVzkxWEZ3bmNtVWdkSEo1YVc1bklIUnZJR0ZrWkNCaElISmxaaUIwYnlCaElHTnZiWEJ2Ym1WdWRDQjBhR0YwSUNjZ0sxeHVJQ0FnSUNBZ0oyUnZaWE51WEZ3bmRDQm9ZWFpsSUdGdUlHOTNibVZ5SUNoMGFHRjBJR2x6TENCM1lYTWdibTkwSUdOeVpXRjBaV1FnYVc1emFXUmxJRzltSUdGdWIzUm9aWElnSnlBclhHNGdJQ0FnSUNBblkyOXRjRzl1Wlc1MFhGd25jeUJnY21WdVpHVnlZQ0J0WlhSb2IyUXBMaUJVY25rZ2NtVnVaR1Z5YVc1bklIUm9hWE1nWTI5dGNHOXVaVzUwSUdsdWMybGtaU0J2WmlBbklDdGNiaUFnSUNBZ0lDZGhJRzVsZHlCMGIzQXRiR1YyWld3Z1kyOXRjRzl1Wlc1MElIZG9hV05vSUhkcGJHd2dhRzlzWkNCMGFHVWdjbVZtTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZV04wVDNkdVpYSXVhWE5XWVd4cFpFOTNibVZ5S0c5M2JtVnlLU2twTzF4dUlDQWdJRzkzYm1WeUxtRjBkR0ZqYUZKbFppaHlaV1lzSUdOdmJYQnZibVZ1ZENrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsYlc5MlpYTWdZU0JqYjIxd2IyNWxiblFnWW5rZ2NtVm1JR1p5YjIwZ1lXNGdiM2R1WlhJZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQmpiMjF3YjI1bGJuUWdRMjl0Y0c5dVpXNTBJSFJ2SUdSbGNtVm1aWEpsYm1ObExseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnY21WbUlFNWhiV1VnYjJZZ2RHaGxJSEpsWmlCMGJ5QnlaVzF2ZG1VdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlBkMjVsY24wZ2IzZHVaWElnUTI5dGNHOXVaVzUwSUc5dUlIZG9hV05vSUhSb1pTQnlaV1lnYVhNZ2NtVmpiM0prWldRdVhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJSEpsYlc5MlpVTnZiWEJ2Ym1WdWRFRnpVbVZtUm5KdmJUb2dablZ1WTNScGIyNG9ZMjl0Y0c5dVpXNTBMQ0J5WldZc0lHOTNibVZ5S1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJRkpsWVdOMFQzZHVaWEl1YVhOV1lXeHBaRTkzYm1WeUtHOTNibVZ5S1N4Y2JpQWdJQ0FnSUNkeVpXMXZkbVZEYjIxd2IyNWxiblJCYzFKbFprWnliMjBvTGk0dUtUb2dUMjVzZVNCaElGSmxZV04wVDNkdVpYSWdZMkZ1SUdoaGRtVWdjbVZtY3k0Z1ZHaHBjeUFuSUN0Y2JpQWdJQ0FnSUNkMWMzVmhiR3g1SUcxbFlXNXpJSFJvWVhRZ2VXOTFYRnduY21VZ2RISjVhVzVuSUhSdklISmxiVzkyWlNCaElISmxaaUIwYnlCaElHTnZiWEJ2Ym1WdWRDQjBhR0YwSUNjZ0sxeHVJQ0FnSUNBZ0oyUnZaWE51WEZ3bmRDQm9ZWFpsSUdGdUlHOTNibVZ5SUNoMGFHRjBJR2x6TENCM1lYTWdibTkwSUdOeVpXRjBaV1FnYVc1emFXUmxJRzltSUdGdWIzUm9aWElnSnlBclhHNGdJQ0FnSUNBblkyOXRjRzl1Wlc1MFhGd25jeUJnY21WdVpHVnlZQ0J0WlhSb2IyUXBMaUJVY25rZ2NtVnVaR1Z5YVc1bklIUm9hWE1nWTI5dGNHOXVaVzUwSUdsdWMybGtaU0J2WmlBbklDdGNiaUFnSUNBZ0lDZGhJRzVsZHlCMGIzQXRiR1YyWld3Z1kyOXRjRzl1Wlc1MElIZG9hV05vSUhkcGJHd2dhRzlzWkNCMGFHVWdjbVZtTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZV04wVDNkdVpYSXVhWE5XWVd4cFpFOTNibVZ5S0c5M2JtVnlLU2twTzF4dUlDQWdJQzh2SUVOb1pXTnJJSFJvWVhRZ1lHTnZiWEJ2Ym1WdWRHQWdhWE1nYzNScGJHd2dkR2hsSUdOMWNuSmxiblFnY21WbUlHSmxZMkYxYzJVZ2QyVWdaRzhnYm05MElIZGhiblFnZEc5Y2JpQWdJQ0F2THlCa1pYUmhZMmdnZEdobElISmxaaUJwWmlCaGJtOTBhR1Z5SUdOdmJYQnZibVZ1ZENCemRHOXNaU0JwZEM1Y2JpQWdJQ0JwWmlBb2IzZHVaWEl1WjJWMFVIVmliR2xqU1c1emRHRnVZMlVvS1M1eVpXWnpXM0psWmwwZ1BUMDlJR052YlhCdmJtVnVkQzVuWlhSUWRXSnNhV05KYm5OMFlXNWpaU2dwS1NCN1hHNGdJQ0FnSUNCdmQyNWxjaTVrWlhSaFkyaFNaV1lvY21WbUtUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JTWldGamRFOTNibVZ5TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UGVyZlxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUmVhY3RQZXJmIGlzIGEgZ2VuZXJhbCBBT1Agc3lzdGVtIGRlc2lnbmVkIHRvIG1lYXN1cmUgcGVyZm9ybWFuY2UuIFRoaXNcbiAqIG1vZHVsZSBvbmx5IGhhcyB0aGUgaG9va3M6IHNlZSBSZWFjdERlZmF1bHRQZXJmIGZvciB0aGUgYW5hbHlzaXMgdG9vbC5cbiAqL1xudmFyIFJlYWN0UGVyZiA9IHtcbiAgLyoqXG4gICAqIEJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgbWVhc3VyZW1lbnQuIFNldCB0byBmYWxzZSBieSBkZWZhdWx0IHRvIHByZXZlbnRcbiAgICogYWNjaWRlbnRhbCBsb2dnaW5nIGFuZCBwZXJmIGxvc3MuXG4gICAqL1xuICBlbmFibGVNZWFzdXJlOiBmYWxzZSxcblxuICAvKipcbiAgICogSG9sZHMgb250byB0aGUgbWVhc3VyZSBmdW5jdGlvbiBpbiB1c2UuIEJ5IGRlZmF1bHQsIGRvbid0IG1lYXN1cmVcbiAgICogYW55dGhpbmcsIGJ1dCB3ZSdsbCBvdmVycmlkZSB0aGlzIGlmIHdlIGluamVjdCBhIG1lYXN1cmUgZnVuY3Rpb24uXG4gICAqL1xuICBzdG9yZWRNZWFzdXJlOiBfbm9NZWFzdXJlLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3ROYW1lXG4gICAqIEBwYXJhbSB7b2JqZWN0PHN0cmluZz59IG1ldGhvZE5hbWVzXG4gICAqL1xuICBtZWFzdXJlTWV0aG9kczogZnVuY3Rpb24ob2JqZWN0LCBvYmplY3ROYW1lLCBtZXRob2ROYW1lcykge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBtZXRob2ROYW1lcykge1xuICAgICAgICBpZiAoIW1ldGhvZE5hbWVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3Rba2V5XSA9IFJlYWN0UGVyZi5tZWFzdXJlKFxuICAgICAgICAgIG9iamVjdE5hbWUsXG4gICAgICAgICAgbWV0aG9kTmFtZXNba2V5XSxcbiAgICAgICAgICBvYmplY3Rba2V5XVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogVXNlIHRoaXMgdG8gd3JhcCBtZXRob2RzIHlvdSB3YW50IHRvIG1lYXN1cmUuIFplcm8gb3ZlcmhlYWQgaW4gcHJvZHVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9iak5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZuTmFtZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICAgKi9cbiAgbWVhc3VyZTogZnVuY3Rpb24ob2JqTmFtZSwgZm5OYW1lLCBmdW5jKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFyIG1lYXN1cmVkRnVuYyA9IG51bGw7XG4gICAgICB2YXIgd3JhcHBlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoUmVhY3RQZXJmLmVuYWJsZU1lYXN1cmUpIHtcbiAgICAgICAgICBpZiAoIW1lYXN1cmVkRnVuYykge1xuICAgICAgICAgICAgbWVhc3VyZWRGdW5jID0gUmVhY3RQZXJmLnN0b3JlZE1lYXN1cmUob2JqTmFtZSwgZm5OYW1lLCBmdW5jKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1lYXN1cmVkRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgd3JhcHBlci5kaXNwbGF5TmFtZSA9IG9iak5hbWUgKyAnXycgKyBmbk5hbWU7XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0sXG5cbiAgaW5qZWN0aW9uOiB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWVhc3VyZVxuICAgICAqL1xuICAgIGluamVjdE1lYXN1cmU6IGZ1bmN0aW9uKG1lYXN1cmUpIHtcbiAgICAgIFJlYWN0UGVyZi5zdG9yZWRNZWFzdXJlID0gbWVhc3VyZTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogU2ltcGx5IHBhc3NlcyB0aHJvdWdoIHRoZSBtZWFzdXJlZCBmdW5jdGlvbiwgd2l0aG91dCBtZWFzdXJpbmcgaXQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9iak5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBmbk5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmNcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBfbm9NZWFzdXJlKG9iak5hbWUsIGZuTmFtZSwgZnVuYykge1xuICByZXR1cm4gZnVuYztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFBlcmY7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSUVpYSm1MbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUlFaWEptWEc0Z0tpQkFkSGx3WldOb1pXTnJjeUJ6ZEdGMGFXTXRiMjVzZVZ4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1THlvcVhHNGdLaUJTWldGamRGQmxjbVlnYVhNZ1lTQm5aVzVsY21Gc0lFRlBVQ0J6ZVhOMFpXMGdaR1Z6YVdkdVpXUWdkRzhnYldWaGMzVnlaU0J3WlhKbWIzSnRZVzVqWlM0Z1ZHaHBjMXh1SUNvZ2JXOWtkV3hsSUc5dWJIa2dhR0Z6SUhSb1pTQm9iMjlyY3pvZ2MyVmxJRkpsWVdOMFJHVm1ZWFZzZEZCbGNtWWdabTl5SUhSb1pTQmhibUZzZVhOcGN5QjBiMjlzTGx4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JRWlhKbUlEMGdlMXh1SUNBdktpcGNiaUFnSUNvZ1FtOXZiR1ZoYmlCMGJ5QmxibUZpYkdVdlpHbHpZV0pzWlNCdFpXRnpkWEpsYldWdWRDNGdVMlYwSUhSdklHWmhiSE5sSUdKNUlHUmxabUYxYkhRZ2RHOGdjSEpsZG1WdWRGeHVJQ0FnS2lCaFkyTnBaR1Z1ZEdGc0lHeHZaMmRwYm1jZ1lXNWtJSEJsY21ZZ2JHOXpjeTVjYmlBZ0lDb3ZYRzRnSUdWdVlXSnNaVTFsWVhOMWNtVTZJR1poYkhObExGeHVYRzRnSUM4cUtseHVJQ0FnS2lCSWIyeGtjeUJ2Ym5SdklIUm9aU0J0WldGemRYSmxJR1oxYm1OMGFXOXVJR2x1SUhWelpTNGdRbmtnWkdWbVlYVnNkQ3dnWkc5dUozUWdiV1ZoYzNWeVpWeHVJQ0FnS2lCaGJubDBhR2x1Wnl3Z1luVjBJSGRsSjJ4c0lHOTJaWEp5YVdSbElIUm9hWE1nYVdZZ2QyVWdhVzVxWldOMElHRWdiV1ZoYzNWeVpTQm1kVzVqZEdsdmJpNWNiaUFnSUNvdlhHNGdJSE4wYjNKbFpFMWxZWE4xY21VNklGOXViMDFsWVhOMWNtVXNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCdlltcGxZM1JjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHOWlhbVZqZEU1aGJXVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1E4YzNSeWFXNW5QbjBnYldWMGFHOWtUbUZ0WlhOY2JpQWdJQ292WEc0Z0lHMWxZWE4xY21WTlpYUm9iMlJ6T2lCbWRXNWpkR2x2YmlodlltcGxZM1FzSUc5aWFtVmpkRTVoYldVc0lHMWxkR2h2WkU1aGJXVnpLU0I3WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdabTl5SUNoMllYSWdhMlY1SUdsdUlHMWxkR2h2WkU1aGJXVnpLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hiV1YwYUc5a1RtRnRaWE11YUdGelQzZHVVSEp2Y0dWeWRIa29hMlY1S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUc5aWFtVmpkRnRyWlhsZElEMGdVbVZoWTNSUVpYSm1MbTFsWVhOMWNtVW9YRzRnSUNBZ0lDQWdJQ0FnYjJKcVpXTjBUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQnRaWFJvYjJST1lXMWxjMXRyWlhsZExGeHVJQ0FnSUNBZ0lDQWdJRzlpYW1WamRGdHJaWGxkWEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlZjMlVnZEdocGN5QjBieUIzY21Gd0lHMWxkR2h2WkhNZ2VXOTFJSGRoYm5RZ2RHOGdiV1ZoYzNWeVpTNGdXbVZ5YnlCdmRtVnlhR1ZoWkNCcGJpQndjbTlrZFdOMGFXOXVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYjJKcVRtRnRaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1ptNU9ZVzFsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNTlJR1oxYm1OY2JpQWdJQ29nUUhKbGRIVnliaUI3Wm5WdVkzUnBiMjU5WEc0Z0lDQXFMMXh1SUNCdFpXRnpkWEpsT2lCbWRXNWpkR2x2YmlodlltcE9ZVzFsTENCbWJrNWhiV1VzSUdaMWJtTXBJSHRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQjJZWElnYldWaGMzVnlaV1JHZFc1aklEMGdiblZzYkR0Y2JpQWdJQ0FnSUhaaGNpQjNjbUZ3Y0dWeUlEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaFNaV0ZqZEZCbGNtWXVaVzVoWW14bFRXVmhjM1Z5WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNnaGJXVmhjM1Z5WldSR2RXNWpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnRaV0Z6ZFhKbFpFWjFibU1nUFNCU1pXRmpkRkJsY21ZdWMzUnZjbVZrVFdWaGMzVnlaU2h2WW1wT1lXMWxMQ0JtYms1aGJXVXNJR1oxYm1NcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYldWaGMzVnlaV1JHZFc1akxtRndjR3g1S0hSb2FYTXNJR0Z5WjNWdFpXNTBjeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaMWJtTXVZWEJ3Ykhrb2RHaHBjeXdnWVhKbmRXMWxiblJ6S1R0Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnSUNCM2NtRndjR1Z5TG1ScGMzQnNZWGxPWVcxbElEMGdiMkpxVG1GdFpTQXJJQ2RmSnlBcklHWnVUbUZ0WlR0Y2JpQWdJQ0FnSUhKbGRIVnliaUIzY21Gd2NHVnlPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWm5WdVl6dGNiaUFnZlN4Y2JseHVJQ0JwYm1wbFkzUnBiMjQ2SUh0Y2JpQWdJQ0F2S2lwY2JpQWdJQ0FnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCdFpXRnpkWEpsWEc0Z0lDQWdJQ292WEc0Z0lDQWdhVzVxWldOMFRXVmhjM1Z5WlRvZ1puVnVZM1JwYjI0b2JXVmhjM1Z5WlNrZ2UxeHVJQ0FnSUNBZ1VtVmhZM1JRWlhKbUxuTjBiM0psWkUxbFlYTjFjbVVnUFNCdFpXRnpkWEpsTzF4dUlDQWdJSDFjYmlBZ2ZWeHVmVHRjYmx4dUx5b3FYRzRnS2lCVGFXMXdiSGtnY0dGemMyVnpJSFJvY205MVoyZ2dkR2hsSUcxbFlYTjFjbVZrSUdaMWJtTjBhVzl1TENCM2FYUm9iM1YwSUcxbFlYTjFjbWx1WnlCcGRDNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2IySnFUbUZ0WlZ4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHWnVUbUZ0WlZ4dUlDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdablZ1WTF4dUlDb2dRSEpsZEhWeWJpQjdablZ1WTNScGIyNTlYRzRnS2k5Y2JtWjFibU4wYVc5dUlGOXViMDFsWVhOMWNtVW9iMkpxVG1GdFpTd2dabTVPWVcxbExDQm1kVzVqS1NCN1hHNGdJSEpsZEhWeWJpQm1kVzVqTzF4dWZWeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFVHVnlaanRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RQcm9wVHJhbnNmZXJlclxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG52YXIgam9pbkNsYXNzZXMgPSByZXF1aXJlKFwiLi9qb2luQ2xhc3Nlc1wiKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgdHJhbnNmZXIgc3RyYXRlZ3kgdGhhdCB3aWxsIG1lcmdlIHByb3AgdmFsdWVzIHVzaW5nIHRoZSBzdXBwbGllZFxuICogYG1lcmdlU3RyYXRlZ3lgLiBJZiBhIHByb3Agd2FzIHByZXZpb3VzbHkgdW5zZXQsIHRoaXMganVzdCBzZXRzIGl0LlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG1lcmdlU3RyYXRlZ3lcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBjcmVhdGVUcmFuc2ZlclN0cmF0ZWd5KG1lcmdlU3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3BzLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBwcm9wc1trZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BzW2tleV0gPSBtZXJnZVN0cmF0ZWd5KHByb3BzW2tleV0sIHZhbHVlKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciB0cmFuc2ZlclN0cmF0ZWd5TWVyZ2UgPSBjcmVhdGVUcmFuc2ZlclN0cmF0ZWd5KGZ1bmN0aW9uKGEsIGIpIHtcbiAgLy8gYG1lcmdlYCBvdmVycmlkZXMgdGhlIGZpcnN0IG9iamVjdCdzIChgcHJvcHNba2V5XWAgYWJvdmUpIGtleXMgdXNpbmcgdGhlXG4gIC8vIHNlY29uZCBvYmplY3QncyAoYHZhbHVlYCkga2V5cy4gQW4gb2JqZWN0J3Mgc3R5bGUncyBleGlzdGluZyBgcHJvcEFgIHdvdWxkXG4gIC8vIGdldCBvdmVycmlkZGVuLiBGbGlwIHRoZSBvcmRlciBoZXJlLlxuICByZXR1cm4gYXNzaWduKHt9LCBiLCBhKTtcbn0pO1xuXG4vKipcbiAqIFRyYW5zZmVyIHN0cmF0ZWdpZXMgZGljdGF0ZSBob3cgcHJvcHMgYXJlIHRyYW5zZmVycmVkIGJ5IGB0cmFuc2ZlclByb3BzVG9gLlxuICogTk9URTogaWYgeW91IGFkZCBhbnkgbW9yZSBleGNlcHRpb25zIHRvIHRoaXMgbGlzdCB5b3Ugc2hvdWxkIGJlIHN1cmUgdG9cbiAqIHVwZGF0ZSBgY2xvbmVXaXRoUHJvcHMoKWAgYWNjb3JkaW5nbHkuXG4gKi9cbnZhciBUcmFuc2ZlclN0cmF0ZWdpZXMgPSB7XG4gIC8qKlxuICAgKiBOZXZlciB0cmFuc2ZlciBgY2hpbGRyZW5gLlxuICAgKi9cbiAgY2hpbGRyZW46IGVtcHR5RnVuY3Rpb24sXG4gIC8qKlxuICAgKiBUcmFuc2ZlciB0aGUgYGNsYXNzTmFtZWAgcHJvcCBieSBtZXJnaW5nIHRoZW0uXG4gICAqL1xuICBjbGFzc05hbWU6IGNyZWF0ZVRyYW5zZmVyU3RyYXRlZ3koam9pbkNsYXNzZXMpLFxuICAvKipcbiAgICogVHJhbnNmZXIgdGhlIGBzdHlsZWAgcHJvcCAod2hpY2ggaXMgYW4gb2JqZWN0KSBieSBtZXJnaW5nIHRoZW0uXG4gICAqL1xuICBzdHlsZTogdHJhbnNmZXJTdHJhdGVneU1lcmdlXG59O1xuXG4vKipcbiAqIE11dGF0ZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJ5IHRyYW5zZmVycmluZyB0aGUgcHJvcGVydGllcyBmcm9tIHRoZSBzZWNvbmRcbiAqIGFyZ3VtZW50LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3R9IG5ld1Byb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZmVySW50byhwcm9wcywgbmV3UHJvcHMpIHtcbiAgZm9yICh2YXIgdGhpc0tleSBpbiBuZXdQcm9wcykge1xuICAgIGlmICghbmV3UHJvcHMuaGFzT3duUHJvcGVydHkodGhpc0tleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciB0cmFuc2ZlclN0cmF0ZWd5ID0gVHJhbnNmZXJTdHJhdGVnaWVzW3RoaXNLZXldO1xuXG4gICAgaWYgKHRyYW5zZmVyU3RyYXRlZ3kgJiYgVHJhbnNmZXJTdHJhdGVnaWVzLmhhc093blByb3BlcnR5KHRoaXNLZXkpKSB7XG4gICAgICB0cmFuc2ZlclN0cmF0ZWd5KHByb3BzLCB0aGlzS2V5LCBuZXdQcm9wc1t0aGlzS2V5XSk7XG4gICAgfSBlbHNlIGlmICghcHJvcHMuaGFzT3duUHJvcGVydHkodGhpc0tleSkpIHtcbiAgICAgIHByb3BzW3RoaXNLZXldID0gbmV3UHJvcHNbdGhpc0tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9wcztcbn1cblxuLyoqXG4gKiBSZWFjdFByb3BUcmFuc2ZlcmVyIGFyZSBjYXBhYmxlIG9mIHRyYW5zZmVycmluZyBwcm9wcyB0byBhbm90aGVyIGNvbXBvbmVudFxuICogdXNpbmcgYSBgdHJhbnNmZXJQcm9wc1RvYCBtZXRob2QuXG4gKlxuICogQGNsYXNzIFJlYWN0UHJvcFRyYW5zZmVyZXJcbiAqL1xudmFyIFJlYWN0UHJvcFRyYW5zZmVyZXIgPSB7XG5cbiAgLyoqXG4gICAqIE1lcmdlIHR3byBwcm9wcyBvYmplY3RzIHVzaW5nIFRyYW5zZmVyU3RyYXRlZ2llcy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9sZFByb3BzIG9yaWdpbmFsIHByb3BzICh0aGV5IHRha2UgcHJlY2VkZW5jZSlcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1Byb3BzIG5ldyBwcm9wcyB0byBtZXJnZSBpblxuICAgKiBAcmV0dXJuIHtvYmplY3R9IGEgbmV3IG9iamVjdCBjb250YWluaW5nIGJvdGggc2V0cyBvZiBwcm9wcyBtZXJnZWQuXG4gICAqL1xuICBtZXJnZVByb3BzOiBmdW5jdGlvbihvbGRQcm9wcywgbmV3UHJvcHMpIHtcbiAgICByZXR1cm4gdHJhbnNmZXJJbnRvKGFzc2lnbih7fSwgb2xkUHJvcHMpLCBuZXdQcm9wcyk7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUcmFuc2ZlcmVyO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge307XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxuICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0J1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dVRtRnRaWE11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dVRtRnRaWE5jYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsY3lBOUlIdDlPMXh1WEc1cFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJRkpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Yms1aGJXVnpJRDBnZTF4dUlDQWdJSEJ5YjNBNklDZHdjbTl3Snl4Y2JpQWdJQ0JqYjI1MFpYaDBPaUFuWTI5dWRHVjRkQ2NzWEc0Z0lDQWdZMmhwYkdSRGIyNTBaWGgwT2lBblkyaHBiR1FnWTI5dWRHVjRkQ2RjYmlBZ2ZUdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsY3p0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBrZXlNaXJyb3IgPSByZXF1aXJlKFwiLi9rZXlNaXJyb3JcIik7XG5cbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25zID0ga2V5TWlycm9yKHtcbiAgcHJvcDogbnVsbCxcbiAgY29udGV4dDogbnVsbCxcbiAgY2hpbGRDb250ZXh0OiBudWxsXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25zO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UHJvcFR5cGVzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RnJhZ21lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEZyYWdtZW50XCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNcIik7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZW1wdHlGdW5jdGlvblwiKTtcblxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAqXG4gKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICAgcHJvcFR5cGVzOiB7XG4gKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICpcbiAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAqXG4gKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAqICAgICB9LFxuICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gKiAgIH0pO1xuICpcbiAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAqXG4gKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcbiAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICpcbiAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcbiAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAqICAgIHByb3BUeXBlczoge1xuICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xuICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICogICAgICAgICAgKTtcbiAqICAgICAgICB9XG4gKiAgICAgIH1cbiAqICAgIH0sXG4gKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAqICB9KTtcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG52YXIgZWxlbWVudFR5cGVDaGVja2VyID0gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCk7XG52YXIgbm9kZVR5cGVDaGVja2VyID0gY3JlYXRlTm9kZUNoZWNrZXIoKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksXG4gIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSxcbiAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuXG4gIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcbiAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICBlbGVtZW50OiBlbGVtZW50VHlwZUNoZWNrZXIsXG4gIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gIG5vZGU6IG5vZGVUeXBlQ2hlY2tlcixcbiAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXJcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgKFwiUmVxdWlyZWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCB3YXMgbm90IHNwZWNpZmllZCBpbiBcIikgK1xuICAgICAgICAgIChcImBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAuXCIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIG9mIHR5cGUgYFwiICsgcHJlY2lzZVR5cGUgKyBcImAgXCIpICtcbiAgICAgICAgKFwic3VwcGxpZWQgdG8gYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgYFwiICsgZXhwZWN0ZWRUeXBlICsgXCJgLlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zKG51bGwpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBvZiB0eXBlIFwiKSArXG4gICAgICAgIChcImBcIiArIHByb3BUeXBlICsgXCJgIHN1cHBsaWVkIHRvIGBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGFuIGFycmF5LlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pO1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICBpZiAoIVJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIHN1cHBsaWVkIHRvIFwiKSArXG4gICAgICAgIChcImBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGEgUmVhY3RFbGVtZW50LlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHZhciBleHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgc3VwcGxpZWQgdG8gXCIpICtcbiAgICAgICAgKFwiYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgYFwiICsgZXhwZWN0ZWRDbGFzc05hbWUgKyBcImAuXCIpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIoZXhwZWN0ZWRWYWx1ZXMpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gZXhwZWN0ZWRWYWx1ZXNbaV0pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMpO1xuICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgb2YgdmFsdWUgYFwiICsgcHJvcFZhbHVlICsgXCJgIFwiKSArXG4gICAgICAoXCJzdXBwbGllZCB0byBgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBvbmUgb2YgXCIgKyB2YWx1ZXNTdHJpbmcgKyBcIi5cIilcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIG9mIHR5cGUgXCIpICtcbiAgICAgICAgKFwiYFwiICsgcHJvcFR5cGUgKyBcImAgc3VwcGxpZWQgdG8gYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgaWYgKHByb3BWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbik7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBzdXBwbGllZCB0byBcIikgK1xuICAgICAgKFwiYFwiICsgY29tcG9uZW50TmFtZSArIFwiYC5cIilcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBzdXBwbGllZCB0byBcIikgK1xuICAgICAgICAoXCJgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgb2YgdHlwZSBgXCIgKyBwcm9wVHlwZSArIFwiYCBcIikgK1xuICAgICAgICAoXCJzdXBwbGllZCB0byBgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBgb2JqZWN0YC5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBzaGFwZVR5cGVzKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBwcm9wVmFsdWUgPSBSZWFjdEZyYWdtZW50LmV4dHJhY3RJZkZyYWdtZW50KHByb3BWYWx1ZSk7XG4gICAgICBmb3IgKHZhciBrIGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoIWlzTm9kZShwcm9wVmFsdWVba10pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbmZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuICdhcnJheSc7XG4gIH1cbiAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICByZXR1cm4gJ29iamVjdCc7XG4gIH1cbiAgcmV0dXJuIHByb3BUeXBlO1xufVxuXG4vLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4vLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbmZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByb3BUeXBlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UHV0TGlzdGVuZXJRdWV1ZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcblxuZnVuY3Rpb24gUmVhY3RQdXRMaXN0ZW5lclF1ZXVlKCkge1xuICB0aGlzLmxpc3RlbmVyc1RvUHV0ID0gW107XG59XG5cbmFzc2lnbihSZWFjdFB1dExpc3RlbmVyUXVldWUucHJvdG90eXBlLCB7XG4gIGVucXVldWVQdXRMaXN0ZW5lcjogZnVuY3Rpb24ocm9vdE5vZGVJRCwgcHJvcEtleSwgcHJvcFZhbHVlKSB7XG4gICAgdGhpcy5saXN0ZW5lcnNUb1B1dC5wdXNoKHtcbiAgICAgIHJvb3ROb2RlSUQ6IHJvb3ROb2RlSUQsXG4gICAgICBwcm9wS2V5OiBwcm9wS2V5LFxuICAgICAgcHJvcFZhbHVlOiBwcm9wVmFsdWVcbiAgICB9KTtcbiAgfSxcblxuICBwdXRMaXN0ZW5lcnM6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saXN0ZW5lcnNUb1B1dC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RlbmVyVG9QdXQgPSB0aGlzLmxpc3RlbmVyc1RvUHV0W2ldO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnB1dExpc3RlbmVyKFxuICAgICAgICBsaXN0ZW5lclRvUHV0LnJvb3ROb2RlSUQsXG4gICAgICAgIGxpc3RlbmVyVG9QdXQucHJvcEtleSxcbiAgICAgICAgbGlzdGVuZXJUb1B1dC5wcm9wVmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmxpc3RlbmVyc1RvUHV0Lmxlbmd0aCA9IDA7XG4gIH0sXG5cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG59KTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0UHV0TGlzdGVuZXJRdWV1ZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQdXRMaXN0ZW5lclF1ZXVlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb25cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FsbGJhY2tRdWV1ZSA9IHJlcXVpcmUoXCIuL0NhbGxiYWNrUXVldWVcIik7XG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcIik7XG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0SW5wdXRTZWxlY3Rpb25cIik7XG52YXIgUmVhY3RQdXRMaXN0ZW5lclF1ZXVlID0gcmVxdWlyZShcIi4vUmVhY3RQdXRMaXN0ZW5lclF1ZXVlXCIpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZShcIi4vVHJhbnNhY3Rpb25cIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCwgd2hlbiBwb3NzaWJsZSwgdGhlIHNlbGVjdGlvbiByYW5nZSAoY3VycmVudGx5IHNlbGVjdGVkIHRleHRcbiAqIGlucHV0KSBpcyBub3QgZGlzdHVyYmVkIGJ5IHBlcmZvcm1pbmcgdGhlIHRyYW5zYWN0aW9uLlxuICovXG52YXIgU0VMRUNUSU9OX1JFU1RPUkFUSU9OID0ge1xuICAvKipcbiAgICogQHJldHVybiB7U2VsZWN0aW9ufSBTZWxlY3Rpb24gaW5mb3JtYXRpb24uXG4gICAqL1xuICBpbml0aWFsaXplOiBSZWFjdElucHV0U2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm9ybWF0aW9uLFxuICAvKipcbiAgICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbCBTZWxlY3Rpb24gaW5mb3JtYXRpb24gcmV0dXJuZWQgZnJvbSBgaW5pdGlhbGl6ZWAuXG4gICAqL1xuICBjbG9zZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5yZXN0b3JlU2VsZWN0aW9uXG59O1xuXG4vKipcbiAqIFN1cHByZXNzZXMgZXZlbnRzIChibHVyL2ZvY3VzKSB0aGF0IGNvdWxkIGJlIGluYWR2ZXJ0ZW50bHkgZGlzcGF0Y2hlZCBkdWUgdG9cbiAqIGhpZ2ggbGV2ZWwgRE9NIG1hbmlwdWxhdGlvbnMgKGxpa2UgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgYSB0ZXh0IGlucHV0IGZyb20gdGhlXG4gKiBET00pLlxuICovXG52YXIgRVZFTlRfU1VQUFJFU1NJT04gPSB7XG4gIC8qKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUaGUgZW5hYmxlZCBzdGF0dXMgb2YgYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgYmVmb3JlXG4gICAqIHRoZSByZWNvbmNpbGlhdGlvbi5cbiAgICovXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjdXJyZW50bHlFbmFibGVkID0gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmlzRW5hYmxlZCgpO1xuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5zZXRFbmFibGVkKGZhbHNlKTtcbiAgICByZXR1cm4gY3VycmVudGx5RW5hYmxlZDtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBwcmV2aW91c2x5RW5hYmxlZCBFbmFibGVkIHN0YXR1cyBvZlxuICAgKiAgIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGJlZm9yZSB0aGUgcmVjb25jaWxpYXRpb24gb2NjdXJlZC4gYGNsb3NlYFxuICAgKiAgIHJlc3RvcmVzIHRoZSBwcmV2aW91cyB2YWx1ZS5cbiAgICovXG4gIGNsb3NlOiBmdW5jdGlvbihwcmV2aW91c2x5RW5hYmxlZCkge1xuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5zZXRFbmFibGVkKHByZXZpb3VzbHlFbmFibGVkKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQcm92aWRlcyBhIHF1ZXVlIGZvciBjb2xsZWN0aW5nIGBjb21wb25lbnREaWRNb3VudGAgYW5kXG4gKiBgY29tcG9uZW50RGlkVXBkYXRlYCBjYWxsYmFja3MgZHVyaW5nIHRoZSB0aGUgdHJhbnNhY3Rpb24uXG4gKi9cbnZhciBPTl9ET01fUkVBRFlfUVVFVUVJTkcgPSB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgYG9uRE9NUmVhZHlgIHF1ZXVlLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkucmVzZXQoKTtcbiAgfSxcblxuICAvKipcbiAgICogQWZ0ZXIgRE9NIGlzIGZsdXNoZWQsIGludm9rZSBhbGwgcmVnaXN0ZXJlZCBgb25ET01SZWFkeWAgY2FsbGJhY2tzLlxuICAgKi9cbiAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5Lm5vdGlmeUFsbCgpO1xuICB9XG59O1xuXG52YXIgUFVUX0xJU1RFTkVSX1FVRVVFSU5HID0ge1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1dExpc3RlbmVyUXVldWUucmVzZXQoKTtcbiAgfSxcblxuICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlLnB1dExpc3RlbmVycygpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4ZWN1dGVkIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGBUcmFuc2FjdGlvbmAgaW5zdGFuY2UuIENvbnNpZGVyIHRoZXNlIGFzXG4gKiBiZWluZyBtZW1iZXIgbWV0aG9kcywgYnV0IHdpdGggYW4gaW1wbGllZCBvcmRlcmluZyB3aGlsZSBiZWluZyBpc29sYXRlZCBmcm9tXG4gKiBlYWNoIG90aGVyLlxuICovXG52YXIgVFJBTlNBQ1RJT05fV1JBUFBFUlMgPSBbXG4gIFBVVF9MSVNURU5FUl9RVUVVRUlORyxcbiAgU0VMRUNUSU9OX1JFU1RPUkFUSU9OLFxuICBFVkVOVF9TVVBQUkVTU0lPTixcbiAgT05fRE9NX1JFQURZX1FVRVVFSU5HXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseTpcbiAqIC0gVGhlIG9yZGVyIHRoYXQgdGhlc2UgYXJlIGxpc3RlZCBpbiB0aGUgdHJhbnNhY3Rpb24gaXMgY3JpdGljYWw6XG4gKiAtIFN1cHByZXNzZXMgZXZlbnRzLlxuICogLSBSZXN0b3JlcyBzZWxlY3Rpb24gcmFuZ2UuXG4gKlxuICogRnV0dXJlOlxuICogLSBSZXN0b3JlIGRvY3VtZW50L292ZXJmbG93IHNjcm9sbCBwb3NpdGlvbnMgdGhhdCB3ZXJlIHVuaW50ZW50aW9uYWxseVxuICogICBtb2RpZmllZCB2aWEgRE9NIGluc2VydGlvbnMgYWJvdmUgdGhlIHRvcCB2aWV3cG9ydCBib3VuZGFyeS5cbiAqIC0gSW1wbGVtZW50L2ludGVncmF0ZSB3aXRoIGN1c3RvbWl6ZWQgY29uc3RyYWludCBiYXNlZCBsYXlvdXQgc3lzdGVtIGFuZCBrZWVwXG4gKiAgIHRyYWNrIG9mIHdoaWNoIGRpbWVuc2lvbnMgbXVzdCBiZSByZW1lYXN1cmVkLlxuICpcbiAqIEBjbGFzcyBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24oKSB7XG4gIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbiAgLy8gT25seSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgcmVhbGx5IG5lZWRzIHRoaXMgb3B0aW9uIChzZWVcbiAgLy8gYFJlYWN0U2VydmVyUmVuZGVyaW5nYCksIGJ1dCBzZXJ2ZXItc2lkZSB1c2VzXG4gIC8vIGBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uYCBpbnN0ZWFkLiBUaGlzIG9wdGlvbiBpcyBoZXJlIHNvIHRoYXQgaXQnc1xuICAvLyBhY2Nlc3NpYmxlIGFuZCBkZWZhdWx0cyB0byBmYWxzZSB3aGVuIGBSZWFjdERPTUNvbXBvbmVudGAgYW5kXG4gIC8vIGBSZWFjdFRleHRDb21wb25lbnRgIGNoZWNrcyBpdCBpbiBgbW91bnRDb21wb25lbnRgLmBcbiAgdGhpcy5yZW5kZXJUb1N0YXRpY01hcmt1cCA9IGZhbHNlO1xuICB0aGlzLnJlYWN0TW91bnRSZWFkeSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKG51bGwpO1xuICB0aGlzLnB1dExpc3RlbmVyUXVldWUgPSBSZWFjdFB1dExpc3RlbmVyUXVldWUuZ2V0UG9vbGVkKCk7XG59XG5cbnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEBzZWUgVHJhbnNhY3Rpb25cbiAgICogQGFic3RyYWN0XG4gICAqIEBmaW5hbFxuICAgKiBAcmV0dXJuIHthcnJheTxvYmplY3Q+fSBMaXN0IG9mIG9wZXJhdGlvbiB3cmFwIHByb2NlZWR1cmVzLlxuICAgKiAgIFRPRE86IGNvbnZlcnQgdG8gYXJyYXk8VHJhbnNhY3Rpb25XcmFwcGVyPlxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFRSQU5TQUNUSU9OX1dSQVBQRVJTO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBxdWV1ZSB0byBjb2xsZWN0IGBvbkRPTVJlYWR5YCBjYWxsYmFja3Mgd2l0aC5cbiAgICovXG4gIGdldFJlYWN0TW91bnRSZWFkeTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhY3RNb3VudFJlYWR5O1xuICB9LFxuXG4gIGdldFB1dExpc3RlbmVyUXVldWU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnB1dExpc3RlbmVyUXVldWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIHRoaXMsIGFuZCB3aWxsIGludm9rZSB0aGlzIGJlZm9yZSBhbGxvd2luZyB0aGlzXG4gICAqIGluc3RhbmNlIHRvIGJlIHJlc3VzZWQuXG4gICAqL1xuICBkZXN0cnVjdG9yOiBmdW5jdGlvbigpIHtcbiAgICBDYWxsYmFja1F1ZXVlLnJlbGVhc2UodGhpcy5yZWFjdE1vdW50UmVhZHkpO1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5ID0gbnVsbDtcblxuICAgIFJlYWN0UHV0TGlzdGVuZXJRdWV1ZS5yZWxlYXNlKHRoaXMucHV0TGlzdGVuZXJRdWV1ZSk7XG4gICAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlID0gbnVsbDtcbiAgfVxufTtcblxuXG5hc3NpZ24oUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5wcm90b3R5cGUsIFRyYW5zYWN0aW9uLk1peGluLCBNaXhpbik7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uKTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFJlY29uY2lsZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFJlZiA9IHJlcXVpcmUoXCIuL1JlYWN0UmVmXCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcblxuLyoqXG4gKiBIZWxwZXIgdG8gY2FsbCBSZWFjdFJlZi5hdHRhY2hSZWZzIHdpdGggdGhpcyBjb21wb3NpdGUgY29tcG9uZW50LCBzcGxpdCBvdXRcbiAqIHRvIGF2b2lkIGFsbG9jYXRpb25zIGluIHRoZSB0cmFuc2FjdGlvbiBtb3VudC1yZWFkeSBxdWV1ZS5cbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVmcygpIHtcbiAgUmVhY3RSZWYuYXR0YWNoUmVmcyh0aGlzLCB0aGlzLl9jdXJyZW50RWxlbWVudCk7XG59XG5cbnZhciBSZWFjdFJlY29uY2lsZXIgPSB7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJlbmRlcnMgbWFya3VwLCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIERPTSBJRCBvZiB0aGUgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7P3N0cmluZ30gUmVuZGVyZWQgbWFya3VwIHRvIGJlIGluc2VydGVkIGludG8gdGhlIERPTS5cbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKGludGVybmFsSW5zdGFuY2UsIHJvb3RJRCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgbWFya3VwID0gaW50ZXJuYWxJbnN0YW5jZS5tb3VudENvbXBvbmVudChyb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzKFxuICAgICAgICBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudFxuICAgICAgKTtcbiAgICB9XG4gICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShhdHRhY2hSZWZzLCBpbnRlcm5hbEluc3RhbmNlKTtcbiAgICByZXR1cm4gbWFya3VwO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBgbW91bnRDb21wb25lbnRgLlxuICAgKlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgUmVhY3RSZWYuZGV0YWNoUmVmcyhpbnRlcm5hbEluc3RhbmNlLCBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudCk7XG4gICAgaW50ZXJuYWxJbnN0YW5jZS51bm1vdW50Q29tcG9uZW50KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIGNvbXBvbmVudCB1c2luZyBhIG5ldyBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnRlcm5hbEluc3RhbmNlXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24oXG4gICAgaW50ZXJuYWxJbnN0YW5jZSwgbmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBjb250ZXh0XG4gICkge1xuICAgIHZhciBwcmV2RWxlbWVudCA9IGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuXG4gICAgaWYgKG5leHRFbGVtZW50ID09PSBwcmV2RWxlbWVudCAmJiBuZXh0RWxlbWVudC5fb3duZXIgIT0gbnVsbCkge1xuICAgICAgLy8gU2luY2UgZWxlbWVudHMgYXJlIGltbXV0YWJsZSBhZnRlciB0aGUgb3duZXIgaXMgcmVuZGVyZWQsXG4gICAgICAvLyB3ZSBjYW4gZG8gYSBjaGVhcCBpZGVudGl0eSBjb21wYXJlIGhlcmUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYVxuICAgICAgLy8gc3VwZXJmbHVvdXMgcmVjb25jaWxlLiBJdCdzIHBvc3NpYmxlIGZvciBzdGF0ZSB0byBiZSBtdXRhYmxlIGJ1dCBzdWNoXG4gICAgICAvLyBjaGFuZ2Ugc2hvdWxkIHRyaWdnZXIgYW4gdXBkYXRlIG9mIHRoZSBvd25lciB3aGljaCB3b3VsZCByZWNyZWF0ZVxuICAgICAgLy8gdGhlIGVsZW1lbnQuIFdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4gb3duZXIgc2luY2VcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgZm9yIGFuIGVsZW1lbnQgY3JlYXRlZCBvdXRzaWRlIGEgY29tcG9zaXRlIHRvIGJlXG4gICAgICAvLyBkZWVwbHkgbXV0YXRlZCBhbmQgcmV1c2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIFJlYWN0RWxlbWVudFZhbGlkYXRvci5jaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHMobmV4dEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHZhciByZWZzQ2hhbmdlZCA9IFJlYWN0UmVmLnNob3VsZFVwZGF0ZVJlZnMoXG4gICAgICBwcmV2RWxlbWVudCxcbiAgICAgIG5leHRFbGVtZW50XG4gICAgKTtcblxuICAgIGlmIChyZWZzQ2hhbmdlZCkge1xuICAgICAgUmVhY3RSZWYuZGV0YWNoUmVmcyhpbnRlcm5hbEluc3RhbmNlLCBwcmV2RWxlbWVudCk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5yZWNlaXZlQ29tcG9uZW50KG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG5cbiAgICBpZiAocmVmc0NoYW5nZWQpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYXR0YWNoUmVmcywgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbnkgZGlydHkgY2hhbmdlcyBpbiBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbihcbiAgICBpbnRlcm5hbEluc3RhbmNlLFxuICAgIHRyYW5zYWN0aW9uXG4gICkge1xuICAgIGludGVybmFsSW5zdGFuY2UucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KHRyYW5zYWN0aW9uKTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UmVjb25jaWxlcjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JTWldOdmJtTnBiR1Z5TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElGSmxZV04wVW1WamIyNWphV3hsY2x4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGSmxZV04wVW1WbUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlNaV1pjSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eVhDSXBPMXh1WEc0dktpcGNiaUFxSUVobGJIQmxjaUIwYnlCallXeHNJRkpsWVdOMFVtVm1MbUYwZEdGamFGSmxabk1nZDJsMGFDQjBhR2x6SUdOdmJYQnZjMmwwWlNCamIyMXdiMjVsYm5Rc0lITndiR2wwSUc5MWRGeHVJQ29nZEc4Z1lYWnZhV1FnWVd4c2IyTmhkR2x2Ym5NZ2FXNGdkR2hsSUhSeVlXNXpZV04wYVc5dUlHMXZkVzUwTFhKbFlXUjVJSEYxWlhWbExseHVJQ292WEc1bWRXNWpkR2x2YmlCaGRIUmhZMmhTWldaektDa2dlMXh1SUNCU1pXRmpkRkpsWmk1aGRIUmhZMmhTWldaektIUm9hWE1zSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MEtUdGNibjFjYmx4dWRtRnlJRkpsWVdOMFVtVmpiMjVqYVd4bGNpQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzVwZEdsaGJHbDZaWE1nZEdobElHTnZiWEJ2Ym1WdWRDd2djbVZ1WkdWeWN5QnRZWEpyZFhBc0lHRnVaQ0J5WldkcGMzUmxjbk1nWlhabGJuUWdiR2x6ZEdWdVpYSnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCeWIyOTBTVVFnUkU5TklFbEVJRzltSUhSb1pTQnliMjkwSUc1dlpHVXVYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ym54U1pXRmpkRk5sY25abGNsSmxibVJsY21sdVoxUnlZVzV6WVdOMGFXOXVmU0IwY21GdWMyRmpkR2x2Ymx4dUlDQWdLaUJBY21WMGRYSnVJSHMvYzNSeWFXNW5mU0JTWlc1a1pYSmxaQ0J0WVhKcmRYQWdkRzhnWW1VZ2FXNXpaWEowWldRZ2FXNTBieUIwYUdVZ1JFOU5MbHh1SUNBZ0tpQkFabWx1WVd4Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCdGIzVnVkRU52YlhCdmJtVnVkRG9nWm5WdVkzUnBiMjRvYVc1MFpYSnVZV3hKYm5OMFlXNWpaU3dnY205dmRFbEVMQ0IwY21GdWMyRmpkR2x2Yml3Z1kyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUhaaGNpQnRZWEpyZFhBZ1BTQnBiblJsY201aGJFbHVjM1JoYm1ObExtMXZkVzUwUTI5dGNHOXVaVzUwS0hKdmIzUkpSQ3dnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcE8xeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUZKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNpNWphR1ZqYTBGdVpGZGhjbTVHYjNKTmRYUmhkR1ZrVUhKdmNITW9YRzRnSUNBZ0lDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYMk4xY25KbGJuUkZiR1Z0Wlc1MFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JpQWdJQ0IwY21GdWMyRmpkR2x2Ymk1blpYUlNaV0ZqZEUxdmRXNTBVbVZoWkhrb0tTNWxibkYxWlhWbEtHRjBkR0ZqYUZKbFpuTXNJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBPMXh1SUNBZ0lISmxkSFZ5YmlCdFlYSnJkWEE3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxiR1ZoYzJWeklHRnVlU0J5WlhOdmRYSmpaWE1nWVd4c2IyTmhkR1ZrSUdKNUlHQnRiM1Z1ZEVOdmJYQnZibVZ1ZEdBdVhHNGdJQ0FxWEc0Z0lDQXFJRUJtYVc1aGJGeHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lIVnViVzkxYm5SRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVcElIdGNiaUFnSUNCU1pXRmpkRkpsWmk1a1pYUmhZMmhTWldaektHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVc0lHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgyTjFjbkpsYm5SRmJHVnRaVzUwS1R0Y2JpQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMblZ1Ylc5MWJuUkRiMjF3YjI1bGJuUW9LVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZYQmtZWFJsSUdFZ1kyOXRjRzl1Wlc1MElIVnphVzVuSUdFZ2JtVjNJR1ZzWlcxbGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUkRiMjF3YjI1bGJuUjlJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJRzVsZUhSRmJHVnRaVzUwWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHTnZiblJsZUhSY2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCeVpXTmxhWFpsUTI5dGNHOXVaVzUwT2lCbWRXNWpkR2x2YmloY2JpQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMQ0J1WlhoMFJXeGxiV1Z1ZEN3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUmNiaUFnS1NCN1hHNGdJQ0FnZG1GeUlIQnlaWFpGYkdWdFpXNTBJRDBnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmWTNWeWNtVnVkRVZzWlcxbGJuUTdYRzVjYmlBZ0lDQnBaaUFvYm1WNGRFVnNaVzFsYm5RZ1BUMDlJSEJ5WlhaRmJHVnRaVzUwSUNZbUlHNWxlSFJGYkdWdFpXNTBMbDl2ZDI1bGNpQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQXZMeUJUYVc1alpTQmxiR1Z0Wlc1MGN5QmhjbVVnYVcxdGRYUmhZbXhsSUdGbWRHVnlJSFJvWlNCdmQyNWxjaUJwY3lCeVpXNWtaWEpsWkN4Y2JpQWdJQ0FnSUM4dklIZGxJR05oYmlCa2J5QmhJR05vWldGd0lHbGtaVzUwYVhSNUlHTnZiWEJoY21VZ2FHVnlaU0IwYnlCa1pYUmxjbTFwYm1VZ2FXWWdkR2hwY3lCcGN5QmhYRzRnSUNBZ0lDQXZMeUJ6ZFhCbGNtWnNkVzkxY3lCeVpXTnZibU5wYkdVdUlFbDBKM01nY0c5emMybGliR1VnWm05eUlITjBZWFJsSUhSdklHSmxJRzExZEdGaWJHVWdZblYwSUhOMVkyaGNiaUFnSUNBZ0lDOHZJR05vWVc1blpTQnphRzkxYkdRZ2RISnBaMmRsY2lCaGJpQjFjR1JoZEdVZ2IyWWdkR2hsSUc5M2JtVnlJSGRvYVdOb0lIZHZkV3hrSUhKbFkzSmxZWFJsWEc0Z0lDQWdJQ0F2THlCMGFHVWdaV3hsYldWdWRDNGdWMlVnWlhod2JHbGphWFJzZVNCamFHVmpheUJtYjNJZ2RHaGxJR1Y0YVhOMFpXNWpaU0J2WmlCaGJpQnZkMjVsY2lCemFXNWpaVnh1SUNBZ0lDQWdMeThnYVhRbmN5QndiM056YVdKc1pTQm1iM0lnWVc0Z1pXeGxiV1Z1ZENCamNtVmhkR1ZrSUc5MWRITnBaR1VnWVNCamIyMXdiM05wZEdVZ2RHOGdZbVZjYmlBZ0lDQWdJQzh2SUdSbFpYQnNlU0J0ZFhSaGRHVmtJR0Z1WkNCeVpYVnpaV1F1WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlMbU5vWldOclFXNWtWMkZ5YmtadmNrMTFkR0YwWldSUWNtOXdjeWh1WlhoMFJXeGxiV1Z1ZENrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZG1GeUlISmxabk5EYUdGdVoyVmtJRDBnVW1WaFkzUlNaV1l1YzJodmRXeGtWWEJrWVhSbFVtVm1jeWhjYmlBZ0lDQWdJSEJ5WlhaRmJHVnRaVzUwTEZ4dUlDQWdJQ0FnYm1WNGRFVnNaVzFsYm5SY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnYVdZZ0tISmxabk5EYUdGdVoyVmtLU0I3WEc0Z0lDQWdJQ0JTWldGamRGSmxaaTVrWlhSaFkyaFNaV1p6S0dsdWRHVnlibUZzU1c1emRHRnVZMlVzSUhCeVpYWkZiR1Z0Wlc1MEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTG5KbFkyVnBkbVZEYjIxd2IyNWxiblFvYm1WNGRFVnNaVzFsYm5Rc0lIUnlZVzV6WVdOMGFXOXVMQ0JqYjI1MFpYaDBLVHRjYmx4dUlDQWdJR2xtSUNoeVpXWnpRMmhoYm1kbFpDa2dlMXh1SUNBZ0lDQWdkSEpoYm5OaFkzUnBiMjR1WjJWMFVtVmhZM1JOYjNWdWRGSmxZV1I1S0NrdVpXNXhkV1YxWlNoaGRIUmhZMmhTWldaekxDQnBiblJsY201aGJFbHVjM1JoYm1ObEtUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVpzZFhOb0lHRnVlU0JrYVhKMGVTQmphR0Z1WjJWeklHbHVJR0VnWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCcGJuUmxjbTVoYkVsdWMzUmhibU5sWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0J3WlhKbWIzSnRWWEJrWVhSbFNXWk9aV05sYzNOaGNuazZJR1oxYm1OMGFXOXVLRnh1SUNBZ0lHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVc1hHNGdJQ0FnZEhKaGJuTmhZM1JwYjI1Y2JpQWdLU0I3WEc0Z0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNXdaWEptYjNKdFZYQmtZWFJsU1daT1pXTmxjM05oY25rb2RISmhibk5oWTNScGIyNHBPMXh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JTWldOdmJtTnBiR1Z5TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RSZWZcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RPd25lclwiKTtcblxudmFyIFJlYWN0UmVmID0ge307XG5cbmZ1bmN0aW9uIGF0dGFjaFJlZihyZWYsIGNvbXBvbmVudCwgb3duZXIpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZWYoY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIExlZ2FjeSByZWZcbiAgICBSZWFjdE93bmVyLmFkZENvbXBvbmVudEFzUmVmVG8oY29tcG9uZW50LCByZWYsIG93bmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRhY2hSZWYocmVmLCBjb21wb25lbnQsIG93bmVyKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKG51bGwpO1xuICB9IGVsc2Uge1xuICAgIC8vIExlZ2FjeSByZWZcbiAgICBSZWFjdE93bmVyLnJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbShjb21wb25lbnQsIHJlZiwgb3duZXIpO1xuICB9XG59XG5cblJlYWN0UmVmLmF0dGFjaFJlZnMgPSBmdW5jdGlvbihpbnN0YW5jZSwgZWxlbWVudCkge1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4gIGlmIChyZWYgIT0gbnVsbCkge1xuICAgIGF0dGFjaFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50Ll9vd25lcik7XG4gIH1cbn07XG5cblJlYWN0UmVmLnNob3VsZFVwZGF0ZVJlZnMgPSBmdW5jdGlvbihwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpIHtcbiAgLy8gSWYgZWl0aGVyIHRoZSBvd25lciBvciBhIGByZWZgIGhhcyBjaGFuZ2VkLCBtYWtlIHN1cmUgdGhlIG5ld2VzdCBvd25lclxuICAvLyBoYXMgc3RvcmVkIGEgcmVmZXJlbmNlIHRvIGB0aGlzYCwgYW5kIHRoZSBwcmV2aW91cyBvd25lciAoaWYgZGlmZmVyZW50KVxuICAvLyBoYXMgZm9yZ290dGVuIHRoZSByZWZlcmVuY2UgdG8gYHRoaXNgLiBXZSB1c2UgdGhlIGVsZW1lbnQgaW5zdGVhZFxuICAvLyBvZiB0aGUgcHVibGljIHRoaXMucHJvcHMgYmVjYXVzZSB0aGUgcG9zdCBwcm9jZXNzaW5nIGNhbm5vdCBkZXRlcm1pbmVcbiAgLy8gYSByZWYuIFRoZSByZWYgY29uY2VwdHVhbGx5IGxpdmVzIG9uIHRoZSBlbGVtZW50LlxuXG4gIC8vIFRPRE86IFNob3VsZCB0aGlzIGV2ZW4gYmUgcG9zc2libGU/IFRoZSBvd25lciBjYW5ub3QgY2hhbmdlIGJlY2F1c2VcbiAgLy8gaXQncyBmb3JiaWRkZW4gYnkgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQuIFRoZSByZWYgY2FuIGNoYW5nZVxuICAvLyBpZiB5b3Ugc3dhcCB0aGUga2V5cyBvZiBidXQgbm90IHRoZSByZWZzLiBSZWNvbnNpZGVyIHdoZXJlIHRoaXMgY2hlY2tcbiAgLy8gaXMgbWFkZS4gSXQgcHJvYmFibHkgYmVsb25ncyB3aGVyZSB0aGUga2V5IGNoZWNraW5nIGFuZFxuICAvLyBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50IGlzIGRvbmUuXG5cbiAgcmV0dXJuIChcbiAgICBuZXh0RWxlbWVudC5fb3duZXIgIT09IHByZXZFbGVtZW50Ll9vd25lciB8fFxuICAgIG5leHRFbGVtZW50LnJlZiAhPT0gcHJldkVsZW1lbnQucmVmXG4gICk7XG59O1xuXG5SZWFjdFJlZi5kZXRhY2hSZWZzID0gZnVuY3Rpb24oaW5zdGFuY2UsIGVsZW1lbnQpIHtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuICBpZiAocmVmICE9IG51bGwpIHtcbiAgICBkZXRhY2hSZWYocmVmLCBpbnN0YW5jZSwgZWxlbWVudC5fb3duZXIpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UmVmO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Um9vdEluZGV4XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Um9vdEluZGV4SW5qZWN0aW9uID0ge1xuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gX2NyZWF0ZVJlYWN0Um9vdEluZGV4XG4gICAqL1xuICBpbmplY3RDcmVhdGVSZWFjdFJvb3RJbmRleDogZnVuY3Rpb24oX2NyZWF0ZVJlYWN0Um9vdEluZGV4KSB7XG4gICAgUmVhY3RSb290SW5kZXguY3JlYXRlUmVhY3RSb290SW5kZXggPSBfY3JlYXRlUmVhY3RSb290SW5kZXg7XG4gIH1cbn07XG5cbnZhciBSZWFjdFJvb3RJbmRleCA9IHtcbiAgY3JlYXRlUmVhY3RSb290SW5kZXg6IG51bGwsXG4gIGluamVjdGlvbjogUmVhY3RSb290SW5kZXhJbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSb290SW5kZXg7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFNlcnZlclJlbmRlcmluZ1xuICovXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcbnZhciBSZWFjdE1hcmt1cENoZWNrc3VtID0gcmVxdWlyZShcIi4vUmVhY3RNYXJrdXBDaGVja3N1bVwiKTtcbnZhciBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uID1cbiAgcmVxdWlyZShcIi4vUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvblwiKTtcblxudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZShcIi4vZW1wdHlPYmplY3RcIik7XG52YXIgaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnRcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBIVE1MIG1hcmt1cFxuICovXG5mdW5jdGlvbiByZW5kZXJUb1N0cmluZyhlbGVtZW50KSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpLFxuICAgICdyZW5kZXJUb1N0cmluZygpOiBZb3UgbXVzdCBwYXNzIGEgdmFsaWQgUmVhY3RFbGVtZW50LidcbiAgKSA6IGludmFyaWFudChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpKTtcblxuICB2YXIgdHJhbnNhY3Rpb247XG4gIHRyeSB7XG4gICAgdmFyIGlkID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RSb290SUQoKTtcbiAgICB0cmFuc2FjdGlvbiA9IFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKGZhbHNlKTtcblxuICAgIHJldHVybiB0cmFuc2FjdGlvbi5wZXJmb3JtKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChlbGVtZW50LCBudWxsKTtcbiAgICAgIHZhciBtYXJrdXAgPVxuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5tb3VudENvbXBvbmVudChpZCwgdHJhbnNhY3Rpb24sIGVtcHR5T2JqZWN0KTtcbiAgICAgIHJldHVybiBSZWFjdE1hcmt1cENoZWNrc3VtLmFkZENoZWNrc3VtVG9NYXJrdXAobWFya3VwKTtcbiAgICB9LCBudWxsKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLnJlbGVhc2UodHJhbnNhY3Rpb24pO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIEhUTUwgbWFya3VwLCB3aXRob3V0IHRoZSBleHRyYSBSZWFjdCBJRCBhbmQgY2hlY2tzdW1cbiAqIChmb3IgZ2VuZXJhdGluZyBzdGF0aWMgcGFnZXMpXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclRvU3RhdGljTWFya3VwKGVsZW1lbnQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCksXG4gICAgJ3JlbmRlclRvU3RhdGljTWFya3VwKCk6IFlvdSBtdXN0IHBhc3MgYSB2YWxpZCBSZWFjdEVsZW1lbnQuJ1xuICApIDogaW52YXJpYW50KFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSkpO1xuXG4gIHZhciB0cmFuc2FjdGlvbjtcbiAgdHJ5IHtcbiAgICB2YXIgaWQgPSBSZWFjdEluc3RhbmNlSGFuZGxlcy5jcmVhdGVSZWFjdFJvb3RJRCgpO1xuICAgIHRyYW5zYWN0aW9uID0gUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbi5nZXRQb29sZWQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ucGVyZm9ybShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoZWxlbWVudCwgbnVsbCk7XG4gICAgICByZXR1cm4gY29tcG9uZW50SW5zdGFuY2UubW91bnRDb21wb25lbnQoaWQsIHRyYW5zYWN0aW9uLCBlbXB0eU9iamVjdCk7XG4gICAgfSwgbnVsbCk7XG4gIH0gZmluYWxseSB7XG4gICAgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVuZGVyVG9TdHJpbmc6IHJlbmRlclRvU3RyaW5nLFxuICByZW5kZXJUb1N0YXRpY01hcmt1cDogcmVuZGVyVG9TdGF0aWNNYXJrdXBcbn07XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSVFpYSjJaWEpTWlc1a1pYSnBibWN1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBVMlZ5ZG1WeVVtVnVaR1Z5YVc1blhHNGdLaTljYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBUV0Z5YTNWd1EyaGxZMnR6ZFcwZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFMWhjbXQxY0VOb1pXTnJjM1Z0WENJcE8xeHVkbUZ5SUZKbFlXTjBVMlZ5ZG1WeVVtVnVaR1Z5YVc1blZISmhibk5oWTNScGIyNGdQVnh1SUNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1WENJcE8xeHVYRzUyWVhJZ1pXMXdkSGxQWW1wbFkzUWdQU0J5WlhGMWFYSmxLRndpTGk5bGJYQjBlVTlpYW1WamRGd2lLVHRjYm5aaGNpQnBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1emRHRnVkR2xoZEdWU1pXRmpkRU52YlhCdmJtVnVkRndpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJR1ZzWlcxbGJuUmNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnZEdobElFaFVUVXdnYldGeWEzVndYRzRnS2k5Y2JtWjFibU4wYVc5dUlISmxibVJsY2xSdlUzUnlhVzVuS0dWc1pXMWxiblFwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCU1pXRmpkRVZzWlcxbGJuUXVhWE5XWVd4cFpFVnNaVzFsYm5Rb1pXeGxiV1Z1ZENrc1hHNGdJQ0FnSjNKbGJtUmxjbFJ2VTNSeWFXNW5LQ2s2SUZsdmRTQnRkWE4wSUhCaGMzTWdZU0IyWVd4cFpDQlNaV0ZqZEVWc1pXMWxiblF1SjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0ZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENobGJHVnRaVzUwS1NrcE8xeHVYRzRnSUhaaGNpQjBjbUZ1YzJGamRHbHZianRjYmlBZ2RISjVJSHRjYmlBZ0lDQjJZWElnYVdRZ1BTQlNaV0ZqZEVsdWMzUmhibU5sU0dGdVpHeGxjeTVqY21WaGRHVlNaV0ZqZEZKdmIzUkpSQ2dwTzF4dUlDQWdJSFJ5WVc1ellXTjBhVzl1SUQwZ1VtVmhZM1JUWlhKMlpYSlNaVzVrWlhKcGJtZFVjbUZ1YzJGamRHbHZiaTVuWlhSUWIyOXNaV1FvWm1Gc2MyVXBPMXh1WEc0Z0lDQWdjbVYwZFhKdUlIUnlZVzV6WVdOMGFXOXVMbkJsY21admNtMG9ablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0IyWVhJZ1kyOXRjRzl1Wlc1MFNXNXpkR0Z1WTJVZ1BTQnBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MEtHVnNaVzFsYm5Rc0lHNTFiR3dwTzF4dUlDQWdJQ0FnZG1GeUlHMWhjbXQxY0NBOVhHNGdJQ0FnSUNBZ0lHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObExtMXZkVzUwUTI5dGNHOXVaVzUwS0dsa0xDQjBjbUZ1YzJGamRHbHZiaXdnWlcxd2RIbFBZbXBsWTNRcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUZKbFlXTjBUV0Z5YTNWd1EyaGxZMnR6ZFcwdVlXUmtRMmhsWTJ0emRXMVViMDFoY210MWNDaHRZWEpyZFhBcE8xeHVJQ0FnSUgwc0lHNTFiR3dwTzF4dUlDQjlJR1pwYm1Gc2JIa2dlMXh1SUNBZ0lGSmxZV04wVTJWeWRtVnlVbVZ1WkdWeWFXNW5WSEpoYm5OaFkzUnBiMjR1Y21Wc1pXRnpaU2gwY21GdWMyRmpkR2x2YmlrN1hHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnWld4bGJXVnVkRnh1SUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCMGFHVWdTRlJOVENCdFlYSnJkWEFzSUhkcGRHaHZkWFFnZEdobElHVjRkSEpoSUZKbFlXTjBJRWxFSUdGdVpDQmphR1ZqYTNOMWJWeHVJQ29nS0dadmNpQm5aVzVsY21GMGFXNW5JSE4wWVhScFl5QndZV2RsY3lsY2JpQXFMMXh1Wm5WdVkzUnBiMjRnY21WdVpHVnlWRzlUZEdGMGFXTk5ZWEpyZFhBb1pXeGxiV1Z1ZENrZ2UxeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaGxiR1Z0Wlc1MEtTeGNiaUFnSUNBbmNtVnVaR1Z5Vkc5VGRHRjBhV05OWVhKcmRYQW9LVG9nV1c5MUlHMTFjM1FnY0dGemN5QmhJSFpoYkdsa0lGSmxZV04wUld4bGJXVnVkQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0dWc1pXMWxiblFwS1NrN1hHNWNiaUFnZG1GeUlIUnlZVzV6WVdOMGFXOXVPMXh1SUNCMGNua2dlMXh1SUNBZ0lIWmhjaUJwWkNBOUlGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMbU55WldGMFpWSmxZV04wVW05dmRFbEVLQ2s3WEc0Z0lDQWdkSEpoYm5OaFkzUnBiMjRnUFNCU1pXRmpkRk5sY25abGNsSmxibVJsY21sdVoxUnlZVzV6WVdOMGFXOXVMbWRsZEZCdmIyeGxaQ2gwY25WbEtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCMGNtRnVjMkZqZEdsdmJpNXdaWEptYjNKdEtHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdkbUZ5SUdOdmJYQnZibVZ1ZEVsdWMzUmhibU5sSUQwZ2FXNXpkR0Z1ZEdsaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZENobGJHVnRaVzUwTENCdWRXeHNLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmpiMjF3YjI1bGJuUkpibk4wWVc1alpTNXRiM1Z1ZEVOdmJYQnZibVZ1ZENocFpDd2dkSEpoYm5OaFkzUnBiMjRzSUdWdGNIUjVUMkpxWldOMEtUdGNiaUFnSUNCOUxDQnVkV3hzS1R0Y2JpQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQlNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1TG5KbGJHVmhjMlVvZEhKaGJuTmhZM1JwYjI0cE8xeHVJQ0I5WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdlMXh1SUNCeVpXNWtaWEpVYjFOMGNtbHVaem9nY21WdVpHVnlWRzlUZEhKcGJtY3NYRzRnSUhKbGJtUmxjbFJ2VTNSaGRHbGpUV0Z5YTNWd09pQnlaVzVrWlhKVWIxTjBZWFJwWTAxaGNtdDFjRnh1ZlR0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb25cbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcbnZhciBDYWxsYmFja1F1ZXVlID0gcmVxdWlyZShcIi4vQ2FsbGJhY2tRdWV1ZVwiKTtcbnZhciBSZWFjdFB1dExpc3RlbmVyUXVldWUgPSByZXF1aXJlKFwiLi9SZWFjdFB1dExpc3RlbmVyUXVldWVcIik7XG52YXIgVHJhbnNhY3Rpb24gPSByZXF1aXJlKFwiLi9UcmFuc2FjdGlvblwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBgQ2FsbGJhY2tRdWV1ZWAgcXVldWUgZm9yIGNvbGxlY3RpbmcgYG9uRE9NUmVhZHlgIGNhbGxiYWNrc1xuICogZHVyaW5nIHRoZSBwZXJmb3JtaW5nIG9mIHRoZSB0cmFuc2FjdGlvbi5cbiAqL1xudmFyIE9OX0RPTV9SRUFEWV9RVUVVRUlORyA9IHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBgb25ET01SZWFkeWAgcXVldWUuXG4gICAqL1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlYWN0TW91bnRSZWFkeS5yZXNldCgpO1xuICB9LFxuXG4gIGNsb3NlOiBlbXB0eUZ1bmN0aW9uXG59O1xuXG52YXIgUFVUX0xJU1RFTkVSX1FVRVVFSU5HID0ge1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1dExpc3RlbmVyUXVldWUucmVzZXQoKTtcbiAgfSxcblxuICBjbG9zZTogZW1wdHlGdW5jdGlvblxufTtcblxuLyoqXG4gKiBFeGVjdXRlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBgVHJhbnNhY3Rpb25gIGluc3RhbmNlLiBDb25zaWRlciB0aGVzZSBhc1xuICogYmVpbmcgbWVtYmVyIG1ldGhvZHMsIGJ1dCB3aXRoIGFuIGltcGxpZWQgb3JkZXJpbmcgd2hpbGUgYmVpbmcgaXNvbGF0ZWQgZnJvbVxuICogZWFjaCBvdGhlci5cbiAqL1xudmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW1xuICBQVVRfTElTVEVORVJfUVVFVUVJTkcsXG4gIE9OX0RPTV9SRUFEWV9RVUVVRUlOR1xuXTtcblxuLyoqXG4gKiBAY2xhc3MgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvblxuICogQHBhcmFtIHtib29sZWFufSByZW5kZXJUb1N0YXRpY01hcmt1cFxuICovXG5mdW5jdGlvbiBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uKHJlbmRlclRvU3RhdGljTWFya3VwKSB7XG4gIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbiAgdGhpcy5yZW5kZXJUb1N0YXRpY01hcmt1cCA9IHJlbmRlclRvU3RhdGljTWFya3VwO1xuICB0aGlzLnJlYWN0TW91bnRSZWFkeSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKG51bGwpO1xuICB0aGlzLnB1dExpc3RlbmVyUXVldWUgPSBSZWFjdFB1dExpc3RlbmVyUXVldWUuZ2V0UG9vbGVkKCk7XG59XG5cbnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEBzZWUgVHJhbnNhY3Rpb25cbiAgICogQGFic3RyYWN0XG4gICAqIEBmaW5hbFxuICAgKiBAcmV0dXJuIHthcnJheX0gRW1wdHkgbGlzdCBvZiBvcGVyYXRpb24gd3JhcCBwcm9jZWVkdXJlcy5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfSxcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUgdG8gY29sbGVjdCBgb25ET01SZWFkeWAgY2FsbGJhY2tzIHdpdGguXG4gICAqL1xuICBnZXRSZWFjdE1vdW50UmVhZHk6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeTtcbiAgfSxcblxuICBnZXRQdXRMaXN0ZW5lclF1ZXVlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wdXRMaXN0ZW5lclF1ZXVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciB0aGlzLCBhbmQgd2lsbCBpbnZva2UgdGhpcyBiZWZvcmUgYWxsb3dpbmcgdGhpc1xuICAgKiBpbnN0YW5jZSB0byBiZSByZXN1c2VkLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgQ2FsbGJhY2tRdWV1ZS5yZWxlYXNlKHRoaXMucmVhY3RNb3VudFJlYWR5KTtcbiAgICB0aGlzLnJlYWN0TW91bnRSZWFkeSA9IG51bGw7XG5cbiAgICBSZWFjdFB1dExpc3RlbmVyUXVldWUucmVsZWFzZSh0aGlzLnB1dExpc3RlbmVyUXVldWUpO1xuICAgIHRoaXMucHV0TGlzdGVuZXJRdWV1ZSA9IG51bGw7XG4gIH1cbn07XG5cblxuYXNzaWduKFxuICBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLnByb3RvdHlwZSxcbiAgVHJhbnNhY3Rpb24uTWl4aW4sXG4gIE1peGluXG4pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbik7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFN0YXRlU2V0dGVyc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0U3RhdGVTZXR0ZXJzID0ge1xuICAvKipcbiAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uLCBhbmQgdXNlcyB0aGUgcmVzdWx0XG4gICAqIG9mIHRoYXQgdG8gc2V0IHRoZSBjb21wb25lbnQncyBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvc2l0ZUNvbXBvbmVudH0gY29tcG9uZW50XG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmNSZXR1cm5pbmdTdGF0ZSBSZXR1cm5lZCBjYWxsYmFjayB1c2VzIHRoaXMgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSBob3cgdG8gdXBkYXRlIHN0YXRlLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gY2FsbGJhY2sgdGhhdCB3aGVuIGludm9rZWQgdXNlcyBmdW5jUmV0dXJuaW5nU3RhdGUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgIGRldGVybWluZWQgdGhlIG9iamVjdCBsaXRlcmFsIHRvIHNldFN0YXRlLlxuICAgKi9cbiAgY3JlYXRlU3RhdGVTZXR0ZXI6IGZ1bmN0aW9uKGNvbXBvbmVudCwgZnVuY1JldHVybmluZ1N0YXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIHZhciBwYXJ0aWFsU3RhdGUgPSBmdW5jUmV0dXJuaW5nU3RhdGUuY2FsbChjb21wb25lbnQsIGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgaWYgKHBhcnRpYWxTdGF0ZSkge1xuICAgICAgICBjb21wb25lbnQuc2V0U3RhdGUocGFydGlhbFN0YXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2luZ2xlLWFyZ3VtZW50IGNhbGxiYWNrIHRoYXQgY2FuIGJlIHVzZWQgdG8gdXBkYXRlIGEgc2luZ2xlXG4gICAqIGtleSBpbiB0aGUgY29tcG9uZW50J3Mgc3RhdGUuXG4gICAqXG4gICAqIE5vdGU6IHRoaXMgaXMgbWVtb2l6ZWQgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IGluZXhwZW5zaXZlIHRvIGNhbGwuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb3NpdGVDb21wb25lbnR9IGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgaW4gdGhlIHN0YXRlIHRoYXQgeW91IHNob3VsZCB1cGRhdGUuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBjYWxsYmFjayBvZiAxIGFyZ3VtZW50IHdoaWNoIGNhbGxzIHNldFN0YXRlKCkgd2l0aFxuICAgKiAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGtleU5hbWUgYW5kIGNhbGxiYWNrIGFyZ3VtZW50LlxuICAgKi9cbiAgY3JlYXRlU3RhdGVLZXlTZXR0ZXI6IGZ1bmN0aW9uKGNvbXBvbmVudCwga2V5KSB7XG4gICAgLy8gTWVtb2l6ZSB0aGUgc2V0dGVycy5cbiAgICB2YXIgY2FjaGUgPSBjb21wb25lbnQuX19rZXlTZXR0ZXJzIHx8IChjb21wb25lbnQuX19rZXlTZXR0ZXJzID0ge30pO1xuICAgIHJldHVybiBjYWNoZVtrZXldIHx8IChjYWNoZVtrZXldID0gY3JlYXRlU3RhdGVLZXlTZXR0ZXIoY29tcG9uZW50LCBrZXkpKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU3RhdGVLZXlTZXR0ZXIoY29tcG9uZW50LCBrZXkpIHtcbiAgLy8gUGFydGlhbCBzdGF0ZSBpcyBhbGxvY2F0ZWQgb3V0c2lkZSBvZiB0aGUgZnVuY3Rpb24gY2xvc3VyZSBzbyBpdCBjYW4gYmVcbiAgLy8gcmV1c2VkIHdpdGggZXZlcnkgY2FsbCwgYXZvaWRpbmcgbWVtb3J5IGFsbG9jYXRpb24gd2hlbiB0aGlzIGZ1bmN0aW9uXG4gIC8vIGlzIGNhbGxlZC5cbiAgdmFyIHBhcnRpYWxTdGF0ZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gc3RhdGVLZXlTZXR0ZXIodmFsdWUpIHtcbiAgICBwYXJ0aWFsU3RhdGVba2V5XSA9IHZhbHVlO1xuICAgIGNvbXBvbmVudC5zZXRTdGF0ZShwYXJ0aWFsU3RhdGUpO1xuICB9O1xufVxuXG5SZWFjdFN0YXRlU2V0dGVycy5NaXhpbiA9IHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiwgYW5kIHVzZXMgdGhlIHJlc3VsdFxuICAgKiBvZiB0aGF0IHRvIHNldCB0aGUgY29tcG9uZW50J3Mgc3RhdGUuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0aGVzZSBzdGF0ZW1lbnRzIGFyZSBlcXVpdmFsZW50OlxuICAgKlxuICAgKiAgIHRoaXMuc2V0U3RhdGUoe3g6IDF9KTtcbiAgICogICB0aGlzLmNyZWF0ZVN0YXRlU2V0dGVyKGZ1bmN0aW9uKHhWYWx1ZSkge1xuICAgKiAgICAgcmV0dXJuIHt4OiB4VmFsdWV9O1xuICAgKiAgIH0pKDEpO1xuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jUmV0dXJuaW5nU3RhdGUgUmV0dXJuZWQgY2FsbGJhY2sgdXNlcyB0aGlzIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgaG93IHRvIHVwZGF0ZSBzdGF0ZS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IGNhbGxiYWNrIHRoYXQgd2hlbiBpbnZva2VkIHVzZXMgZnVuY1JldHVybmluZ1N0YXRlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVkIHRoZSBvYmplY3QgbGl0ZXJhbCB0byBzZXRTdGF0ZS5cbiAgICovXG4gIGNyZWF0ZVN0YXRlU2V0dGVyOiBmdW5jdGlvbihmdW5jUmV0dXJuaW5nU3RhdGUpIHtcbiAgICByZXR1cm4gUmVhY3RTdGF0ZVNldHRlcnMuY3JlYXRlU3RhdGVTZXR0ZXIodGhpcywgZnVuY1JldHVybmluZ1N0YXRlKTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhIHNpbmdsZS1hcmd1bWVudCBjYWxsYmFjayB0aGF0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSBhIHNpbmdsZVxuICAgKiBrZXkgaW4gdGhlIGNvbXBvbmVudCdzIHN0YXRlLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgdGhlc2Ugc3RhdGVtZW50cyBhcmUgZXF1aXZhbGVudDpcbiAgICpcbiAgICogICB0aGlzLnNldFN0YXRlKHt4OiAxfSk7XG4gICAqICAgdGhpcy5jcmVhdGVTdGF0ZUtleVNldHRlcigneCcpKDEpO1xuICAgKlxuICAgKiBOb3RlOiB0aGlzIGlzIG1lbW9pemVkIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBpdCBpbmV4cGVuc2l2ZSB0byBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgaW4gdGhlIHN0YXRlIHRoYXQgeW91IHNob3VsZCB1cGRhdGUuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBjYWxsYmFjayBvZiAxIGFyZ3VtZW50IHdoaWNoIGNhbGxzIHNldFN0YXRlKCkgd2l0aFxuICAgKiAgICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGtleU5hbWUgYW5kIGNhbGxiYWNrIGFyZ3VtZW50LlxuICAgKi9cbiAgY3JlYXRlU3RhdGVLZXlTZXR0ZXI6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBSZWFjdFN0YXRlU2V0dGVycy5jcmVhdGVTdGF0ZUtleVNldHRlcih0aGlzLCBrZXkpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0U3RhdGVTZXR0ZXJzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0VGVzdFV0aWxzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luSHViXCIpO1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKFwiLi9FdmVudFByb3BhZ2F0b3JzXCIpO1xudmFyIFJlYWN0ID0gcmVxdWlyZShcIi4vUmVhY3RcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RW1wdHlDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVtcHR5Q29tcG9uZW50XCIpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlclwiKTtcbnZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0SW5zdGFuY2VIYW5kbGVzID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXNcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZShcIi4vZW1wdHlPYmplY3RcIik7XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxuZnVuY3Rpb24gRXZlbnQoc3VmZml4KSB7fVxuXG4vKipcbiAqIEBjbGFzcyBSZWFjdFRlc3RVdGlsc1xuICovXG5cbi8qKlxuICogVG9kbzogU3VwcG9ydCB0aGUgZW50aXJlIERPTS5zY3J5IHF1ZXJ5IHN5bnRheC4gRm9yIG5vdywgdGhlc2Ugc2ltcGxlXG4gKiB1dGlsaXRpZXMgd2lsbCBzdWZmaWNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICogQGxlbmRzIFJlYWN0VGVzdFV0aWxzXG4gKi9cbnZhciBSZWFjdFRlc3RVdGlscyA9IHtcbiAgcmVuZGVySW50b0RvY3VtZW50OiBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAvLyBOb25lIG9mIG91ciB0ZXN0cyBhY3R1YWxseSByZXF1aXJlIGF0dGFjaGluZyB0aGUgY29udGFpbmVyIHRvIHRoZVxuICAgIC8vIERPTSwgYW5kIGRvaW5nIHNvIGNyZWF0ZXMgYSBtZXNzIHRoYXQgd2UgcmVseSBvbiB0ZXN0IGlzb2xhdGlvbiB0b1xuICAgIC8vIGNsZWFuIHVwLCBzbyB3ZSdyZSBnb2luZyB0byBzdG9wIGhvbm9yaW5nIHRoZSBuYW1lIG9mIHRoaXMgbWV0aG9kXG4gICAgLy8gKGFuZCBwcm9iYWJseSByZW5hbWUgaXQgZXZlbnR1YWxseSkgaWYgbm8gcHJvYmxlbXMgYXJpc2UuXG4gICAgLy8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGRpdik7XG4gICAgcmV0dXJuIFJlYWN0LnJlbmRlcihpbnN0YW5jZSwgZGl2KTtcbiAgfSxcblxuICBpc0VsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpO1xuICB9LFxuXG4gIGlzRWxlbWVudE9mVHlwZTogZnVuY3Rpb24oaW5zdCwgY29udmVuaWVuY2VDb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiAoXG4gICAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoaW5zdCkgJiZcbiAgICAgIGluc3QudHlwZSA9PT0gY29udmVuaWVuY2VDb25zdHJ1Y3RvclxuICAgICk7XG4gIH0sXG5cbiAgaXNET01Db21wb25lbnQ6IGZ1bmN0aW9uKGluc3QpIHtcbiAgICAvLyBUT0RPOiBGaXggdGhpcyBoZXVyaXN0aWMuIEl0J3MganVzdCBoZXJlIGJlY2F1c2UgY29tcG9zaXRlcyBjYW4gY3VycmVudGx5XG4gICAgLy8gcHJldGVuZCB0byBiZSBET00gY29tcG9uZW50cy5cbiAgICByZXR1cm4gISEoaW5zdCAmJiBpbnN0LnRhZ05hbWUgJiYgaW5zdC5nZXRET01Ob2RlKTtcbiAgfSxcblxuICBpc0RPTUNvbXBvbmVudEVsZW1lbnQ6IGZ1bmN0aW9uKGluc3QpIHtcbiAgICByZXR1cm4gISEoaW5zdCAmJlxuICAgICAgICAgICAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoaW5zdCkgJiZcbiAgICAgICAgICAgICAgISFpbnN0LnRhZ05hbWUpO1xuICB9LFxuXG4gIGlzQ29tcG9zaXRlQ29tcG9uZW50OiBmdW5jdGlvbihpbnN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpbnN0LnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICB0eXBlb2YgaW5zdC5zZXRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgfSxcblxuICBpc0NvbXBvc2l0ZUNvbXBvbmVudFdpdGhUeXBlOiBmdW5jdGlvbihpbnN0LCB0eXBlKSB7XG4gICAgcmV0dXJuICEhKFJlYWN0VGVzdFV0aWxzLmlzQ29tcG9zaXRlQ29tcG9uZW50KGluc3QpICYmXG4gICAgICAgICAgICAgKGluc3QuY29uc3RydWN0b3IgPT09IHR5cGUpKTtcbiAgfSxcblxuICBpc0NvbXBvc2l0ZUNvbXBvbmVudEVsZW1lbnQ6IGZ1bmN0aW9uKGluc3QpIHtcbiAgICBpZiAoIVJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChpbnN0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBXZSBjaGVjayB0aGUgcHJvdG90eXBlIG9mIHRoZSB0eXBlIHRoYXQgd2lsbCBnZXQgbW91bnRlZCwgbm90IHRoZVxuICAgIC8vIGluc3RhbmNlIGl0c2VsZi4gVGhpcyBpcyBhIGZ1dHVyZSBwcm9vZiB3YXkgb2YgZHVjayB0eXBpbmcuXG4gICAgdmFyIHByb3RvdHlwZSA9IGluc3QudHlwZS5wcm90b3R5cGU7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiBwcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgcHJvdG90eXBlLnNldFN0YXRlID09PSAnZnVuY3Rpb24nXG4gICAgKTtcbiAgfSxcblxuICBpc0NvbXBvc2l0ZUNvbXBvbmVudEVsZW1lbnRXaXRoVHlwZTogZnVuY3Rpb24oaW5zdCwgdHlwZSkge1xuICAgIHJldHVybiAhIShSZWFjdFRlc3RVdGlscy5pc0NvbXBvc2l0ZUNvbXBvbmVudEVsZW1lbnQoaW5zdCkgJiZcbiAgICAgICAgICAgICAoaW5zdC5jb25zdHJ1Y3RvciA9PT0gdHlwZSkpO1xuICB9LFxuXG4gIGdldFJlbmRlcmVkQ2hpbGRPZkNvbXBvc2l0ZUNvbXBvbmVudDogZnVuY3Rpb24oaW5zdCkge1xuICAgIGlmICghUmVhY3RUZXN0VXRpbHMuaXNDb21wb3NpdGVDb21wb25lbnQoaW5zdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KGluc3QpO1xuICAgIHJldHVybiBpbnRlcm5hbEluc3RhbmNlLl9yZW5kZXJlZENvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICB9LFxuXG4gIGZpbmRBbGxJblJlbmRlcmVkVHJlZTogZnVuY3Rpb24oaW5zdCwgdGVzdCkge1xuICAgIGlmICghaW5zdCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB2YXIgcmV0ID0gdGVzdChpbnN0KSA/IFtpbnN0XSA6IFtdO1xuICAgIGlmIChSZWFjdFRlc3RVdGlscy5pc0RPTUNvbXBvbmVudChpbnN0KSkge1xuICAgICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldChpbnN0KTtcbiAgICAgIHZhciByZW5kZXJlZENoaWxkcmVuID0gaW50ZXJuYWxJbnN0YW5jZVxuICAgICAgICAuX3JlbmRlcmVkQ29tcG9uZW50XG4gICAgICAgIC5fcmVuZGVyZWRDaGlsZHJlbjtcbiAgICAgIHZhciBrZXk7XG4gICAgICBmb3IgKGtleSBpbiByZW5kZXJlZENoaWxkcmVuKSB7XG4gICAgICAgIGlmICghcmVuZGVyZWRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZW5kZXJlZENoaWxkcmVuW2tleV0uZ2V0UHVibGljSW5zdGFuY2UpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXQgPSByZXQuY29uY2F0KFxuICAgICAgICAgIFJlYWN0VGVzdFV0aWxzLmZpbmRBbGxJblJlbmRlcmVkVHJlZShcbiAgICAgICAgICAgIHJlbmRlcmVkQ2hpbGRyZW5ba2V5XS5nZXRQdWJsaWNJbnN0YW5jZSgpLFxuICAgICAgICAgICAgdGVzdFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFJlYWN0VGVzdFV0aWxzLmlzQ29tcG9zaXRlQ29tcG9uZW50KGluc3QpKSB7XG4gICAgICByZXQgPSByZXQuY29uY2F0KFxuICAgICAgICBSZWFjdFRlc3RVdGlscy5maW5kQWxsSW5SZW5kZXJlZFRyZWUoXG4gICAgICAgICAgUmVhY3RUZXN0VXRpbHMuZ2V0UmVuZGVyZWRDaGlsZE9mQ29tcG9zaXRlQ29tcG9uZW50KGluc3QpLFxuICAgICAgICAgIHRlc3RcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICAvKipcbiAgICogRmluZHMgYWxsIGluc3RhbmNlIG9mIGNvbXBvbmVudHMgaW4gdGhlIHJlbmRlcmVkIHRyZWUgdGhhdCBhcmUgRE9NXG4gICAqIGNvbXBvbmVudHMgd2l0aCB0aGUgY2xhc3MgbmFtZSBtYXRjaGluZyBgY2xhc3NOYW1lYC5cbiAgICogQHJldHVybiBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXMuXG4gICAqL1xuICBzY3J5UmVuZGVyZWRET01Db21wb25lbnRzV2l0aENsYXNzOiBmdW5jdGlvbihyb290LCBjbGFzc05hbWUpIHtcbiAgICByZXR1cm4gUmVhY3RUZXN0VXRpbHMuZmluZEFsbEluUmVuZGVyZWRUcmVlKHJvb3QsIGZ1bmN0aW9uKGluc3QpIHtcbiAgICAgIHZhciBpbnN0Q2xhc3NOYW1lID0gaW5zdC5wcm9wcy5jbGFzc05hbWU7XG4gICAgICByZXR1cm4gUmVhY3RUZXN0VXRpbHMuaXNET01Db21wb25lbnQoaW5zdCkgJiYgKFxuICAgICAgICAoaW5zdENsYXNzTmFtZSAmJiAoJyAnICsgaW5zdENsYXNzTmFtZSArICcgJykuaW5kZXhPZignICcgKyBjbGFzc05hbWUgKyAnICcpICE9PSAtMSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExpa2Ugc2NyeVJlbmRlcmVkRE9NQ29tcG9uZW50c1dpdGhDbGFzcyBidXQgZXhwZWN0cyB0aGVyZSB0byBiZSBvbmUgcmVzdWx0LFxuICAgKiBhbmQgcmV0dXJucyB0aGF0IG9uZSByZXN1bHQsIG9yIHRocm93cyBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW55IG90aGVyXG4gICAqIG51bWJlciBvZiBtYXRjaGVzIGJlc2lkZXMgb25lLlxuICAgKiBAcmV0dXJuIHshUmVhY3RET01Db21wb25lbnR9IFRoZSBvbmUgbWF0Y2guXG4gICAqL1xuICBmaW5kUmVuZGVyZWRET01Db21wb25lbnRXaXRoQ2xhc3M6IGZ1bmN0aW9uKHJvb3QsIGNsYXNzTmFtZSkge1xuICAgIHZhciBhbGwgPVxuICAgICAgUmVhY3RUZXN0VXRpbHMuc2NyeVJlbmRlcmVkRE9NQ29tcG9uZW50c1dpdGhDbGFzcyhyb290LCBjbGFzc05hbWUpO1xuICAgIGlmIChhbGwubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpZCBub3QgZmluZCBleGFjdGx5IG9uZSBtYXRjaCAnICtcbiAgICAgICAgJyhmb3VuZDogJyArIGFsbC5sZW5ndGggKyAnKSBmb3IgY2xhc3M6JyArIGNsYXNzTmFtZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbFswXTtcbiAgfSxcblxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbGwgaW5zdGFuY2Ugb2YgY29tcG9uZW50cyBpbiB0aGUgcmVuZGVyZWQgdHJlZSB0aGF0IGFyZSBET01cbiAgICogY29tcG9uZW50cyB3aXRoIHRoZSB0YWcgbmFtZSBtYXRjaGluZyBgdGFnTmFtZWAuXG4gICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzLlxuICAgKi9cbiAgc2NyeVJlbmRlcmVkRE9NQ29tcG9uZW50c1dpdGhUYWc6IGZ1bmN0aW9uKHJvb3QsIHRhZ05hbWUpIHtcbiAgICByZXR1cm4gUmVhY3RUZXN0VXRpbHMuZmluZEFsbEluUmVuZGVyZWRUcmVlKHJvb3QsIGZ1bmN0aW9uKGluc3QpIHtcbiAgICAgIHJldHVybiBSZWFjdFRlc3RVdGlscy5pc0RPTUNvbXBvbmVudChpbnN0KSAmJlxuICAgICAgICAgICAgaW5zdC50YWdOYW1lID09PSB0YWdOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExpa2Ugc2NyeVJlbmRlcmVkRE9NQ29tcG9uZW50c1dpdGhUYWcgYnV0IGV4cGVjdHMgdGhlcmUgdG8gYmUgb25lIHJlc3VsdCxcbiAgICogYW5kIHJldHVybnMgdGhhdCBvbmUgcmVzdWx0LCBvciB0aHJvd3MgZXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFueSBvdGhlclxuICAgKiBudW1iZXIgb2YgbWF0Y2hlcyBiZXNpZGVzIG9uZS5cbiAgICogQHJldHVybiB7IVJlYWN0RE9NQ29tcG9uZW50fSBUaGUgb25lIG1hdGNoLlxuICAgKi9cbiAgZmluZFJlbmRlcmVkRE9NQ29tcG9uZW50V2l0aFRhZzogZnVuY3Rpb24ocm9vdCwgdGFnTmFtZSkge1xuICAgIHZhciBhbGwgPSBSZWFjdFRlc3RVdGlscy5zY3J5UmVuZGVyZWRET01Db21wb25lbnRzV2l0aFRhZyhyb290LCB0YWdOYW1lKTtcbiAgICBpZiAoYWxsLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IGZpbmQgZXhhY3RseSBvbmUgbWF0Y2ggZm9yIHRhZzonICsgdGFnTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBhbGxbMF07XG4gIH0sXG5cblxuICAvKipcbiAgICogRmluZHMgYWxsIGluc3RhbmNlcyBvZiBjb21wb25lbnRzIHdpdGggdHlwZSBlcXVhbCB0byBgY29tcG9uZW50VHlwZWAuXG4gICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzLlxuICAgKi9cbiAgc2NyeVJlbmRlcmVkQ29tcG9uZW50c1dpdGhUeXBlOiBmdW5jdGlvbihyb290LCBjb21wb25lbnRUeXBlKSB7XG4gICAgcmV0dXJuIFJlYWN0VGVzdFV0aWxzLmZpbmRBbGxJblJlbmRlcmVkVHJlZShyb290LCBmdW5jdGlvbihpbnN0KSB7XG4gICAgICByZXR1cm4gUmVhY3RUZXN0VXRpbHMuaXNDb21wb3NpdGVDb21wb25lbnRXaXRoVHlwZShcbiAgICAgICAgaW5zdCxcbiAgICAgICAgY29tcG9uZW50VHlwZVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogU2FtZSBhcyBgc2NyeVJlbmRlcmVkQ29tcG9uZW50c1dpdGhUeXBlYCBidXQgZXhwZWN0cyB0aGVyZSB0byBiZSBvbmUgcmVzdWx0XG4gICAqIGFuZCByZXR1cm5zIHRoYXQgb25lIHJlc3VsdCwgb3IgdGhyb3dzIGV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbnkgb3RoZXJcbiAgICogbnVtYmVyIG9mIG1hdGNoZXMgYmVzaWRlcyBvbmUuXG4gICAqIEByZXR1cm4geyFSZWFjdENvbXBvbmVudH0gVGhlIG9uZSBtYXRjaC5cbiAgICovXG4gIGZpbmRSZW5kZXJlZENvbXBvbmVudFdpdGhUeXBlOiBmdW5jdGlvbihyb290LCBjb21wb25lbnRUeXBlKSB7XG4gICAgdmFyIGFsbCA9IFJlYWN0VGVzdFV0aWxzLnNjcnlSZW5kZXJlZENvbXBvbmVudHNXaXRoVHlwZShcbiAgICAgIHJvb3QsXG4gICAgICBjb21wb25lbnRUeXBlXG4gICAgKTtcbiAgICBpZiAoYWxsLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRGlkIG5vdCBmaW5kIGV4YWN0bHkgb25lIG1hdGNoIGZvciBjb21wb25lbnRUeXBlOicgKyBjb21wb25lbnRUeXBlXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYWxsWzBdO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQYXNzIGEgbW9ja2VkIGNvbXBvbmVudCBtb2R1bGUgdG8gdGhpcyBtZXRob2QgdG8gYXVnbWVudCBpdCB3aXRoXG4gICAqIHVzZWZ1bCBtZXRob2RzIHRoYXQgYWxsb3cgaXQgdG8gYmUgdXNlZCBhcyBhIGR1bW15IFJlYWN0IGNvbXBvbmVudC5cbiAgICogSW5zdGVhZCBvZiByZW5kZXJpbmcgYXMgdXN1YWwsIHRoZSBjb21wb25lbnQgd2lsbCBiZWNvbWUgYSBzaW1wbGVcbiAgICogPGRpdj4gY29udGFpbmluZyBhbnkgcHJvdmlkZWQgY2hpbGRyZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtb2R1bGUgdGhlIG1vY2sgZnVuY3Rpb24gb2JqZWN0IGV4cG9ydGVkIGZyb20gYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSB0aGF0IGRlZmluZXMgdGhlIGNvbXBvbmVudCB0byBiZSBtb2NrZWRcbiAgICogQHBhcmFtIHs/c3RyaW5nfSBtb2NrVGFnTmFtZSBvcHRpb25hbCBkdW1teSByb290IHRhZyBuYW1lIHRvIHJldHVyblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gcmVuZGVyIG1ldGhvZCAob3ZlcnJpZGVzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLm1vY2tUYWdOYW1lIGlmIHByb3ZpZGVkKVxuICAgKiBAcmV0dXJuIHtvYmplY3R9IHRoZSBSZWFjdFRlc3RVdGlscyBvYmplY3QgKGZvciBjaGFpbmluZylcbiAgICovXG4gIG1vY2tDb21wb25lbnQ6IGZ1bmN0aW9uKG1vZHVsZSwgbW9ja1RhZ05hbWUpIHtcbiAgICBtb2NrVGFnTmFtZSA9IG1vY2tUYWdOYW1lIHx8IG1vZHVsZS5tb2NrVGFnTmFtZSB8fCBcImRpdlwiO1xuXG4gICAgbW9kdWxlLnByb3RvdHlwZS5yZW5kZXIubW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIG1vY2tUYWdOYW1lLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNpbXVsYXRlcyBhIHRvcCBsZXZlbCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZyb20gYSByYXcgZXZlbnQgdGhhdCBvY2N1cmVkXG4gICAqIG9uIGFuIGBFbGVtZW50YCBub2RlLlxuICAgKiBAcGFyYW0gdG9wTGV2ZWxUeXBlIHtPYmplY3R9IEEgdHlwZSBmcm9tIGBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzYFxuICAgKiBAcGFyYW0geyFFbGVtZW50fSBub2RlIFRoZSBkb20gdG8gc2ltdWxhdGUgYW4gZXZlbnQgb2NjdXJyaW5nIG9uLlxuICAgKiBAcGFyYW0gez9FdmVudH0gZmFrZU5hdGl2ZUV2ZW50IEZha2UgbmF0aXZlIGV2ZW50IHRvIHVzZSBpbiBTeW50aGV0aWNFdmVudC5cbiAgICovXG4gIHNpbXVsYXRlTmF0aXZlRXZlbnRPbk5vZGU6IGZ1bmN0aW9uKHRvcExldmVsVHlwZSwgbm9kZSwgZmFrZU5hdGl2ZUV2ZW50KSB7XG4gICAgZmFrZU5hdGl2ZUV2ZW50LnRhcmdldCA9IG5vZGU7XG4gICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci5kaXNwYXRjaEV2ZW50KFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgZmFrZU5hdGl2ZUV2ZW50XG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogU2ltdWxhdGVzIGEgdG9wIGxldmVsIGV2ZW50IGJlaW5nIGRpc3BhdGNoZWQgZnJvbSBhIHJhdyBldmVudCB0aGF0IG9jY3VyZWRcbiAgICogb24gdGhlIGBSZWFjdERPTUNvbXBvbmVudGAgYGNvbXBgLlxuICAgKiBAcGFyYW0gdG9wTGV2ZWxUeXBlIHtPYmplY3R9IEEgdHlwZSBmcm9tIGBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzYC5cbiAgICogQHBhcmFtIGNvbXAgeyFSZWFjdERPTUNvbXBvbmVudH1cbiAgICogQHBhcmFtIHs/RXZlbnR9IGZha2VOYXRpdmVFdmVudCBGYWtlIG5hdGl2ZSBldmVudCB0byB1c2UgaW4gU3ludGhldGljRXZlbnQuXG4gICAqL1xuICBzaW11bGF0ZU5hdGl2ZUV2ZW50T25ET01Db21wb25lbnQ6IGZ1bmN0aW9uKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgY29tcCxcbiAgICAgIGZha2VOYXRpdmVFdmVudCkge1xuICAgIFJlYWN0VGVzdFV0aWxzLnNpbXVsYXRlTmF0aXZlRXZlbnRPbk5vZGUoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICBjb21wLmdldERPTU5vZGUoKSxcbiAgICAgIGZha2VOYXRpdmVFdmVudFxuICAgICk7XG4gIH0sXG5cbiAgbmF0aXZlVG91Y2hEYXRhOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdWNoZXM6IFtcbiAgICAgICAge3BhZ2VYOiB4LCBwYWdlWTogeX1cbiAgICAgIF1cbiAgICB9O1xuICB9LFxuXG4gIGNyZWF0ZVJlbmRlcmVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlYWN0U2hhbGxvd1JlbmRlcmVyKCk7XG4gIH0sXG5cbiAgU2ltdWxhdGU6IG51bGwsXG4gIFNpbXVsYXRlTmF0aXZlOiB7fVxufTtcblxuLyoqXG4gKiBAY2xhc3MgUmVhY3RTaGFsbG93UmVuZGVyZXJcbiAqL1xudmFyIFJlYWN0U2hhbGxvd1JlbmRlcmVyID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2luc3RhbmNlID0gbnVsbDtcbn07XG5cblJlYWN0U2hhbGxvd1JlbmRlcmVyLnByb3RvdHlwZS5nZXRSZW5kZXJPdXRwdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIChcbiAgICAodGhpcy5faW5zdGFuY2UgJiYgdGhpcy5faW5zdGFuY2UuX3JlbmRlcmVkQ29tcG9uZW50ICYmXG4gICAgIHRoaXMuX2luc3RhbmNlLl9yZW5kZXJlZENvbXBvbmVudC5fcmVuZGVyZWRPdXRwdXQpXG4gICAgfHwgbnVsbFxuICApO1xufTtcblxudmFyIE5vb3BJbnRlcm5hbENvbXBvbmVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgdGhpcy5fcmVuZGVyZWRPdXRwdXQgPSBlbGVtZW50O1xuICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gZmFsc2UgP1xuICAgIFJlYWN0RW1wdHlDb21wb25lbnQuZW1wdHlFbGVtZW50IDpcbiAgICBlbGVtZW50O1xufTtcblxuTm9vcEludGVybmFsQ29tcG9uZW50LnByb3RvdHlwZSA9IHtcblxuICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24oKSB7XG4gIH0sXG5cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHRoaXMuX3JlbmRlcmVkT3V0cHV0ID0gZWxlbWVudDtcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gZmFsc2UgP1xuICAgICAgUmVhY3RFbXB0eUNvbXBvbmVudC5lbXB0eUVsZW1lbnQgOlxuICAgICAgZWxlbWVudDtcbiAgfSxcblxuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbigpIHtcbiAgfVxuXG59O1xuXG52YXIgU2hhbGxvd0NvbXBvbmVudFdyYXBwZXIgPSBmdW5jdGlvbigpIHsgfTtcbmFzc2lnbihcbiAgU2hhbGxvd0NvbXBvbmVudFdyYXBwZXIucHJvdG90eXBlLFxuICBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5NaXhpbiwge1xuICAgIF9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gbmV3IE5vb3BJbnRlcm5hbENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9LFxuICAgIF9yZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEOiBmdW5jdGlvbigpIHt9LFxuICAgIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQ6XG4gICAgICBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5NaXhpbi5cbiAgICAgICAgX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dFxuICB9XG4pO1xuXG5SZWFjdFNoYWxsb3dSZW5kZXJlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZWxlbWVudCwgY29udGV4dCkge1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICBjb250ZXh0ID0gZW1wdHlPYmplY3Q7XG4gIH1cbiAgdmFyIHRyYW5zYWN0aW9uID0gUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7XG4gIHRoaXMuX3JlbmRlcihlbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLnJlbGVhc2UodHJhbnNhY3Rpb24pO1xufTtcblxuUmVhY3RTaGFsbG93UmVuZGVyZXIucHJvdG90eXBlLnVubW91bnQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX2luc3RhbmNlKSB7XG4gICAgdGhpcy5faW5zdGFuY2UudW5tb3VudENvbXBvbmVudCgpO1xuICB9XG59O1xuXG5SZWFjdFNoYWxsb3dSZW5kZXJlci5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICB2YXIgcm9vdElEID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RSb290SUQoKTtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgU2hhbGxvd0NvbXBvbmVudFdyYXBwZXIoZWxlbWVudC50eXBlKTtcbiAgICBpbnN0YW5jZS5jb25zdHJ1Y3QoZWxlbWVudCk7XG5cbiAgICBpbnN0YW5jZS5tb3VudENvbXBvbmVudChyb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcblxuICAgIHRoaXMuX2luc3RhbmNlID0gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5faW5zdGFuY2UucmVjZWl2ZUNvbXBvbmVudChlbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gIH1cbn07XG5cbi8qKlxuICogRXhwb3J0czpcbiAqXG4gKiAtIGBSZWFjdFRlc3RVdGlscy5TaW11bGF0ZS5jbGljayhFbGVtZW50L1JlYWN0RE9NQ29tcG9uZW50KWBcbiAqIC0gYFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlLm1vdXNlTW92ZShFbGVtZW50L1JlYWN0RE9NQ29tcG9uZW50KWBcbiAqIC0gYFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlLmNoYW5nZShFbGVtZW50L1JlYWN0RE9NQ29tcG9uZW50KWBcbiAqIC0gLi4uIChBbGwga2V5cyBmcm9tIGV2ZW50IHBsdWdpbiBgZXZlbnRUeXBlc2Agb2JqZWN0cylcbiAqL1xuZnVuY3Rpb24gbWFrZVNpbXVsYXRvcihldmVudFR5cGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGRvbUNvbXBvbmVudE9yTm9kZSwgZXZlbnREYXRhKSB7XG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKFJlYWN0VGVzdFV0aWxzLmlzRE9NQ29tcG9uZW50KGRvbUNvbXBvbmVudE9yTm9kZSkpIHtcbiAgICAgIG5vZGUgPSBkb21Db21wb25lbnRPck5vZGUuZ2V0RE9NTm9kZSgpO1xuICAgIH0gZWxzZSBpZiAoZG9tQ29tcG9uZW50T3JOb2RlLnRhZ05hbWUpIHtcbiAgICAgIG5vZGUgPSBkb21Db21wb25lbnRPck5vZGU7XG4gICAgfVxuXG4gICAgdmFyIGZha2VOYXRpdmVFdmVudCA9IG5ldyBFdmVudCgpO1xuICAgIGZha2VOYXRpdmVFdmVudC50YXJnZXQgPSBub2RlO1xuICAgIC8vIFdlIGRvbid0IHVzZSBTeW50aGV0aWNFdmVudC5nZXRQb29sZWQgaW4gb3JkZXIgdG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXRcbiAgICAvLyBwcm9wZXJseSBkZXN0cm95aW5nIGFueSBwcm9wZXJ0aWVzIGFzc2lnbmVkIGZyb20gYGV2ZW50RGF0YWAgdXBvbiByZWxlYXNlXG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KFxuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmV2ZW50TmFtZURpc3BhdGNoQ29uZmlnc1tldmVudFR5cGVdLFxuICAgICAgUmVhY3RNb3VudC5nZXRJRChub2RlKSxcbiAgICAgIGZha2VOYXRpdmVFdmVudFxuICAgICk7XG4gICAgYXNzaWduKGV2ZW50LCBldmVudERhdGEpO1xuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG5cbiAgICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24oKSB7XG4gICAgICBFdmVudFBsdWdpbkh1Yi5lbnF1ZXVlRXZlbnRzKGV2ZW50KTtcbiAgICAgIEV2ZW50UGx1Z2luSHViLnByb2Nlc3NFdmVudFF1ZXVlKCk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU2ltdWxhdG9ycygpIHtcbiAgUmVhY3RUZXN0VXRpbHMuU2ltdWxhdGUgPSB7fTtcblxuICB2YXIgZXZlbnRUeXBlO1xuICBmb3IgKGV2ZW50VHlwZSBpbiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHshRWxlbWVudCB8fCBSZWFjdERPTUNvbXBvbmVudH0gZG9tQ29tcG9uZW50T3JOb2RlXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBldmVudERhdGEgRmFrZSBldmVudCBkYXRhIHRvIHVzZSBpbiBTeW50aGV0aWNFdmVudC5cbiAgICAgKi9cbiAgICBSZWFjdFRlc3RVdGlscy5TaW11bGF0ZVtldmVudFR5cGVdID0gbWFrZVNpbXVsYXRvcihldmVudFR5cGUpO1xuICB9XG59XG5cbi8vIFJlYnVpbGQgUmVhY3RUZXN0VXRpbHMuU2ltdWxhdGUgd2hlbmV2ZXIgZXZlbnQgcGx1Z2lucyBhcmUgaW5qZWN0ZWRcbnZhciBvbGRJbmplY3RFdmVudFBsdWdpbk9yZGVyID0gRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luT3JkZXI7XG5FdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5PcmRlciA9IGZ1bmN0aW9uKCkge1xuICBvbGRJbmplY3RFdmVudFBsdWdpbk9yZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGJ1aWxkU2ltdWxhdG9ycygpO1xufTtcbnZhciBvbGRJbmplY3RFdmVudFBsdWdpbnMgPSBFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lO1xuRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSA9IGZ1bmN0aW9uKCkge1xuICBvbGRJbmplY3RFdmVudFBsdWdpbnMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgYnVpbGRTaW11bGF0b3JzKCk7XG59O1xuXG5idWlsZFNpbXVsYXRvcnMoKTtcblxuLyoqXG4gKiBFeHBvcnRzOlxuICpcbiAqIC0gYFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlTmF0aXZlLmNsaWNrKEVsZW1lbnQvUmVhY3RET01Db21wb25lbnQpYFxuICogLSBgUmVhY3RUZXN0VXRpbHMuU2ltdWxhdGVOYXRpdmUubW91c2VNb3ZlKEVsZW1lbnQvUmVhY3RET01Db21wb25lbnQpYFxuICogLSBgUmVhY3RUZXN0VXRpbHMuU2ltdWxhdGVOYXRpdmUubW91c2VJbi9SZWFjdERPTUNvbXBvbmVudClgXG4gKiAtIGBSZWFjdFRlc3RVdGlscy5TaW11bGF0ZU5hdGl2ZS5tb3VzZU91dChFbGVtZW50L1JlYWN0RE9NQ29tcG9uZW50KWBcbiAqIC0gLi4uIChBbGwga2V5cyBmcm9tIGBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzYClcbiAqXG4gKiBOb3RlOiBUb3AgbGV2ZWwgZXZlbnQgdHlwZXMgYXJlIGEgc3Vic2V0IG9mIHRoZSBlbnRpcmUgc2V0IG9mIGhhbmRsZXIgdHlwZXNcbiAqICh3aGljaCBpbmNsdWRlIGEgYnJvYWRlciBzZXQgb2YgXCJzeW50aGV0aWNcIiBldmVudHMpLiBGb3IgZXhhbXBsZSwgb25EcmFnRG9uZVxuICogaXMgYSBzeW50aGV0aWMgZXZlbnQuIEV4Y2VwdCB3aGVuIHRlc3RpbmcgYW4gZXZlbnQgcGx1Z2luIG9yIFJlYWN0J3MgZXZlbnRcbiAqIGhhbmRsaW5nIGNvZGUgc3BlY2lmaWNhbGx5LCB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UgUmVhY3RUZXN0VXRpbHMuU2ltdWxhdGVcbiAqIHRvIGRpc3BhdGNoIHN5bnRoZXRpYyBldmVudHMuXG4gKi9cblxuZnVuY3Rpb24gbWFrZU5hdGl2ZVNpbXVsYXRvcihldmVudFR5cGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGRvbUNvbXBvbmVudE9yTm9kZSwgbmF0aXZlRXZlbnREYXRhKSB7XG4gICAgdmFyIGZha2VOYXRpdmVFdmVudCA9IG5ldyBFdmVudChldmVudFR5cGUpO1xuICAgIGFzc2lnbihmYWtlTmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50RGF0YSk7XG4gICAgaWYgKFJlYWN0VGVzdFV0aWxzLmlzRE9NQ29tcG9uZW50KGRvbUNvbXBvbmVudE9yTm9kZSkpIHtcbiAgICAgIFJlYWN0VGVzdFV0aWxzLnNpbXVsYXRlTmF0aXZlRXZlbnRPbkRPTUNvbXBvbmVudChcbiAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICBkb21Db21wb25lbnRPck5vZGUsXG4gICAgICAgIGZha2VOYXRpdmVFdmVudFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCEhZG9tQ29tcG9uZW50T3JOb2RlLnRhZ05hbWUpIHtcbiAgICAgIC8vIFdpbGwgYWxsb3cgb24gYWN0dWFsIGRvbSBub2Rlcy5cbiAgICAgIFJlYWN0VGVzdFV0aWxzLnNpbXVsYXRlTmF0aXZlRXZlbnRPbk5vZGUoXG4gICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgZG9tQ29tcG9uZW50T3JOb2RlLFxuICAgICAgICBmYWtlTmF0aXZlRXZlbnRcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgZXZlbnRUeXBlO1xuZm9yIChldmVudFR5cGUgaW4gdG9wTGV2ZWxUeXBlcykge1xuICAvLyBFdmVudCB0eXBlIGlzIHN0b3JlZCBhcyAndG9wQ2xpY2snIC0gd2UgdHJhbnNmb3JtIHRoYXQgdG8gJ2NsaWNrJ1xuICB2YXIgY29udmVuaWVuY2VOYW1lID0gZXZlbnRUeXBlLmluZGV4T2YoJ3RvcCcpID09PSAwID9cbiAgICBldmVudFR5cGUuY2hhckF0KDMpLnRvTG93ZXJDYXNlKCkgKyBldmVudFR5cGUuc3Vic3RyKDQpIDogZXZlbnRUeXBlO1xuICAvKipcbiAgICogQHBhcmFtIHshRWxlbWVudCB8fCBSZWFjdERPTUNvbXBvbmVudH0gZG9tQ29tcG9uZW50T3JOb2RlXG4gICAqIEBwYXJhbSB7P0V2ZW50fSBuYXRpdmVFdmVudERhdGEgRmFrZSBuYXRpdmUgZXZlbnQgdG8gdXNlIGluIFN5bnRoZXRpY0V2ZW50LlxuICAgKi9cbiAgUmVhY3RUZXN0VXRpbHMuU2ltdWxhdGVOYXRpdmVbY29udmVuaWVuY2VOYW1lXSA9XG4gICAgbWFrZU5hdGl2ZVNpbXVsYXRvcihldmVudFR5cGUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VGVzdFV0aWxzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmdcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdENoaWxkcmVuID0gcmVxdWlyZShcIi4vUmVhY3RDaGlsZHJlblwiKTtcbnZhciBSZWFjdEZyYWdtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RGcmFnbWVudFwiKTtcblxudmFyIFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZyA9IHtcbiAgLyoqXG4gICAqIEdpdmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYCwgcmV0dXJuIGFuIG9iamVjdCBtYXBwaW5nIGtleSB0byBjaGlsZC4gSnVzdFxuICAgKiBzaW1wbGUgc3ludGFjdGljIHN1Z2FyIGFyb3VuZCBSZWFjdENoaWxkcmVuLm1hcCgpLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGNoaWxkcmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYFxuICAgKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gICAqL1xuICBnZXRDaGlsZE1hcHBpbmc6IGZ1bmN0aW9uKGNoaWxkcmVuKSB7XG4gICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3RGcmFnbWVudC5leHRyYWN0KFJlYWN0Q2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0pKTtcbiAgfSxcblxuICAvKipcbiAgICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gICAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICAgKiBhbmltYXRlIGVsZW1lbnRzIGluIGFuZCBvdXQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwcmV2aW91cyBzZXQgb2Yga2V5c1xuICAgKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAgICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAgICogUmVhY3RNdWx0aUNoaWxkIHRvIG1ha2UgdGhpcyBlYXN5LCBidXQgZm9yIG5vdyBSZWFjdCBpdHNlbGYgZG9lcyBub3RcbiAgICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gICAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAgICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0IG5leHQgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICAgKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAgICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gICAqIGluIGBuZXh0YCBpbiBhIHJlYXNvbmFibGUgb3JkZXIuXG4gICAqL1xuICBtZXJnZUNoaWxkTWFwcGluZ3M6IGZ1bmN0aW9uKHByZXYsIG5leHQpIHtcbiAgICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgICBuZXh0ID0gbmV4dCB8fCB7fTtcblxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgICAgaWYgKG5leHQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICByZXR1cm4gbmV4dFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHByZXZba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgICAvLyB0aGUgY29tYmluZWQgbGlzdFxuICAgIHZhciBuZXh0S2V5c1BlbmRpbmcgPSB7fTtcblxuICAgIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuICAgIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgICAgaWYgKG5leHQuaGFzT3duUHJvcGVydHkocHJldktleSkpIHtcbiAgICAgICAgaWYgKHBlbmRpbmdLZXlzLmxlbmd0aCkge1xuICAgICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGk7XG4gICAgdmFyIGNoaWxkTWFwcGluZyA9IHt9O1xuICAgIGZvciAodmFyIG5leHRLZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKG5leHRLZXlzUGVuZGluZy5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHBlbmRpbmdOZXh0S2V5ID0gbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldO1xuICAgICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkoXG4gICAgICAgICAgICBwZW5kaW5nTmV4dEtleVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICAgIH1cblxuICAgIC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuICAgIGZvciAoaSA9IDA7IGkgPCBwZW5kaW5nS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRNYXBwaW5nO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFRyYW5zaXRpb25FdmVudHNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG4vKipcbiAqIEVWRU5UX05BTUVfTUFQIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV2ZW50IGZpcmVkIHdoZW4gYVxuICogdHJhbnNpdGlvbi9hbmltYXRpb24gZW5kcywgYmFzZWQgb24gdGhlIHN0eWxlIHByb3BlcnR5IHVzZWQgdG9cbiAqIGRlZmluZSB0aGF0IGV2ZW50LlxuICovXG52YXIgRVZFTlRfTkFNRV9NQVAgPSB7XG4gIHRyYW5zaXRpb25lbmQ6IHtcbiAgICAndHJhbnNpdGlvbic6ICd0cmFuc2l0aW9uZW5kJyxcbiAgICAnV2Via2l0VHJhbnNpdGlvbic6ICd3ZWJraXRUcmFuc2l0aW9uRW5kJyxcbiAgICAnTW96VHJhbnNpdGlvbic6ICdtb3pUcmFuc2l0aW9uRW5kJyxcbiAgICAnT1RyYW5zaXRpb24nOiAnb1RyYW5zaXRpb25FbmQnLFxuICAgICdtc1RyYW5zaXRpb24nOiAnTVNUcmFuc2l0aW9uRW5kJ1xuICB9LFxuXG4gIGFuaW1hdGlvbmVuZDoge1xuICAgICdhbmltYXRpb24nOiAnYW5pbWF0aW9uZW5kJyxcbiAgICAnV2Via2l0QW5pbWF0aW9uJzogJ3dlYmtpdEFuaW1hdGlvbkVuZCcsXG4gICAgJ01vekFuaW1hdGlvbic6ICdtb3pBbmltYXRpb25FbmQnLFxuICAgICdPQW5pbWF0aW9uJzogJ29BbmltYXRpb25FbmQnLFxuICAgICdtc0FuaW1hdGlvbic6ICdNU0FuaW1hdGlvbkVuZCdcbiAgfVxufTtcblxudmFyIGVuZEV2ZW50cyA9IFtdO1xuXG5mdW5jdGlvbiBkZXRlY3RFdmVudHMoKSB7XG4gIHZhciB0ZXN0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgdmFyIHN0eWxlID0gdGVzdEVsLnN0eWxlO1xuXG4gIC8vIE9uIHNvbWUgcGxhdGZvcm1zLCBpbiBwYXJ0aWN1bGFyIHNvbWUgcmVsZWFzZXMgb2YgQW5kcm9pZCA0LngsXG4gIC8vIHRoZSB1bi1wcmVmaXhlZCBcImFuaW1hdGlvblwiIGFuZCBcInRyYW5zaXRpb25cIiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZVxuICAvLyBzdHlsZSBvYmplY3QgYnV0IHRoZSBldmVudHMgdGhhdCBmaXJlIHdpbGwgc3RpbGwgYmUgcHJlZml4ZWQsIHNvIHdlIG5lZWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlIHVuLXByZWZpeGVkIGV2ZW50cyBhcmUgdXNlYWJsZSwgYW5kIGlmIG5vdCByZW1vdmUgdGhlbVxuICAvLyBmcm9tIHRoZSBtYXBcbiAgaWYgKCEoJ0FuaW1hdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIEVWRU5UX05BTUVfTUFQLmFuaW1hdGlvbmVuZC5hbmltYXRpb247XG4gIH1cblxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIEVWRU5UX05BTUVfTUFQLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxuXG4gIGZvciAodmFyIGJhc2VFdmVudE5hbWUgaW4gRVZFTlRfTkFNRV9NQVApIHtcbiAgICB2YXIgYmFzZUV2ZW50cyA9IEVWRU5UX05BTUVfTUFQW2Jhc2VFdmVudE5hbWVdO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBiYXNlRXZlbnRzKSB7XG4gICAgICBpZiAoc3R5bGVOYW1lIGluIHN0eWxlKSB7XG4gICAgICAgIGVuZEV2ZW50cy5wdXNoKGJhc2VFdmVudHNbc3R5bGVOYW1lXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIGRldGVjdEV2ZW50cygpO1xufVxuXG4vLyBXZSB1c2UgdGhlIHJhdyB7YWRkfHJlbW92ZX1FdmVudExpc3RlbmVyKCkgY2FsbCBiZWNhdXNlIEV2ZW50TGlzdGVuZXJcbi8vIGRvZXMgbm90IGtub3cgaG93IHRvIHJlbW92ZSBldmVudCBsaXN0ZW5lcnMgYW5kIHdlIHJlYWxseSBzaG91bGRcbi8vIGNsZWFuIHVwLiBBbHNvLCB0aGVzZSBldmVudHMgYXJlIG5vdCB0cmlnZ2VyZWQgaW4gb2xkZXIgYnJvd3NlcnNcbi8vIHNvIHdlIHNob3VsZCBiZSBBLU9LIGhlcmUuXG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBldmVudExpc3RlbmVyKSB7XG4gIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihub2RlLCBldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIpIHtcbiAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lciwgZmFsc2UpO1xufVxuXG52YXIgUmVhY3RUcmFuc2l0aW9uRXZlbnRzID0ge1xuICBhZGRFbmRFdmVudExpc3RlbmVyOiBmdW5jdGlvbihub2RlLCBldmVudExpc3RlbmVyKSB7XG4gICAgaWYgKGVuZEV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIElmIENTUyB0cmFuc2l0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdHJpZ2dlciBhbiBcImVuZCBhbmltYXRpb25cIlxuICAgICAgLy8gZXZlbnQgaW1tZWRpYXRlbHkuXG4gICAgICB3aW5kb3cuc2V0VGltZW91dChldmVudExpc3RlbmVyLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW5kRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZW5kRXZlbnQpIHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kRXZlbnQsIGV2ZW50TGlzdGVuZXIpO1xuICAgIH0pO1xuICB9LFxuXG4gIHJlbW92ZUVuZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKG5vZGUsIGV2ZW50TGlzdGVuZXIpIHtcbiAgICBpZiAoZW5kRXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbmRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihlbmRFdmVudCkge1xuICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7XG4gICAgfSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RUcmFuc2l0aW9uRXZlbnRzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0VHJhbnNpdGlvbkdyb3VwXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKFwiLi9SZWFjdFwiKTtcbnZhciBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcgPSByZXF1aXJlKFwiLi9SZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmdcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGNsb25lV2l0aFByb3BzID0gcmVxdWlyZShcIi4vY2xvbmVXaXRoUHJvcHNcIik7XG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbnZhciBSZWFjdFRyYW5zaXRpb25Hcm91cCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdFRyYW5zaXRpb25Hcm91cCcsXG5cbiAgcHJvcFR5cGVzOiB7XG4gICAgY29tcG9uZW50OiBSZWFjdC5Qcm9wVHlwZXMuYW55LFxuICAgIGNoaWxkRmFjdG9yeTogUmVhY3QuUHJvcFR5cGVzLmZ1bmNcbiAgfSxcblxuICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wb25lbnQ6ICdzcGFuJyxcbiAgICAgIGNoaWxkRmFjdG9yeTogZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50XG4gICAgfTtcbiAgfSxcblxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKVxuICAgIH07XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzID0ge307XG4gICAgdGhpcy5rZXlzVG9FbnRlciA9IFtdO1xuICAgIHRoaXMua2V5c1RvTGVhdmUgPSBbXTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGluaXRpYWxDaGlsZE1hcHBpbmcgPSB0aGlzLnN0YXRlLmNoaWxkcmVuO1xuICAgIGZvciAodmFyIGtleSBpbiBpbml0aWFsQ2hpbGRNYXBwaW5nKSB7XG4gICAgICBpZiAoaW5pdGlhbENoaWxkTWFwcGluZ1trZXldKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUFwcGVhcihrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBmdW5jdGlvbihuZXh0UHJvcHMpIHtcbiAgICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoXG4gICAgICBuZXh0UHJvcHMuY2hpbGRyZW5cbiAgICApO1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gdGhpcy5zdGF0ZS5jaGlsZHJlbjtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY2hpbGRyZW46IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5tZXJnZUNoaWxkTWFwcGluZ3MoXG4gICAgICAgIHByZXZDaGlsZE1hcHBpbmcsXG4gICAgICAgIG5leHRDaGlsZE1hcHBpbmdcbiAgICAgIClcbiAgICB9KTtcblxuICAgIHZhciBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKSB7XG4gICAgICB2YXIgaGFzUHJldiA9IHByZXZDaGlsZE1hcHBpbmcgJiYgcHJldkNoaWxkTWFwcGluZy5oYXNPd25Qcm9wZXJ0eShrZXkpO1xuICAgICAgaWYgKG5leHRDaGlsZE1hcHBpbmdba2V5XSAmJiAhaGFzUHJldiAmJlxuICAgICAgICAgICF0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2tleV0pIHtcbiAgICAgICAgdGhpcy5rZXlzVG9FbnRlci5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChrZXkgaW4gcHJldkNoaWxkTWFwcGluZykge1xuICAgICAgdmFyIGhhc05leHQgPSBuZXh0Q2hpbGRNYXBwaW5nICYmIG5leHRDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KTtcbiAgICAgIGlmIChwcmV2Q2hpbGRNYXBwaW5nW2tleV0gJiYgIWhhc05leHQgJiZcbiAgICAgICAgICAhdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldKSB7XG4gICAgICAgIHRoaXMua2V5c1RvTGVhdmUucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIHdhbnQgdG8gc29tZWRheSBjaGVjayBmb3IgcmVvcmRlcmluZywgd2UgY291bGQgZG8gaXQgaGVyZS5cbiAgfSxcblxuICBjb21wb25lbnREaWRVcGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzVG9FbnRlciA9IHRoaXMua2V5c1RvRW50ZXI7XG4gICAgdGhpcy5rZXlzVG9FbnRlciA9IFtdO1xuICAgIGtleXNUb0VudGVyLmZvckVhY2godGhpcy5wZXJmb3JtRW50ZXIpO1xuXG4gICAgdmFyIGtleXNUb0xlYXZlID0gdGhpcy5rZXlzVG9MZWF2ZTtcbiAgICB0aGlzLmtleXNUb0xlYXZlID0gW107XG4gICAga2V5c1RvTGVhdmUuZm9yRWFjaCh0aGlzLnBlcmZvcm1MZWF2ZSk7XG4gIH0sXG5cbiAgcGVyZm9ybUFwcGVhcjogZnVuY3Rpb24oa2V5KSB7XG4gICAgdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldID0gdHJ1ZTtcblxuICAgIHZhciBjb21wb25lbnQgPSB0aGlzLnJlZnNba2V5XTtcblxuICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50V2lsbEFwcGVhcikge1xuICAgICAgY29tcG9uZW50LmNvbXBvbmVudFdpbGxBcHBlYXIoXG4gICAgICAgIHRoaXMuX2hhbmRsZURvbmVBcHBlYXJpbmcuYmluZCh0aGlzLCBrZXkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9oYW5kbGVEb25lQXBwZWFyaW5nKGtleSk7XG4gICAgfVxuICB9LFxuXG4gIF9oYW5kbGVEb25lQXBwZWFyaW5nOiBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5yZWZzW2tleV07XG4gICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnREaWRBcHBlYXIpIHtcbiAgICAgIGNvbXBvbmVudC5jb21wb25lbnREaWRBcHBlYXIoKTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldO1xuXG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKFxuICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICk7XG5cbiAgICBpZiAoIWN1cnJlbnRDaGlsZE1hcHBpbmcgfHwgIWN1cnJlbnRDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgLy8gVGhpcyB3YXMgcmVtb3ZlZCBiZWZvcmUgaXQgaGFkIGZ1bGx5IGFwcGVhcmVkLiBSZW1vdmUgaXQuXG4gICAgICB0aGlzLnBlcmZvcm1MZWF2ZShrZXkpO1xuICAgIH1cbiAgfSxcblxuICBwZXJmb3JtRW50ZXI6IGZ1bmN0aW9uKGtleSkge1xuICAgIHRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XSA9IHRydWU7XG5cbiAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5yZWZzW2tleV07XG5cbiAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxFbnRlcikge1xuICAgICAgY29tcG9uZW50LmNvbXBvbmVudFdpbGxFbnRlcihcbiAgICAgICAgdGhpcy5faGFuZGxlRG9uZUVudGVyaW5nLmJpbmQodGhpcywga2V5KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGFuZGxlRG9uZUVudGVyaW5nKGtleSk7XG4gICAgfVxuICB9LFxuXG4gIF9oYW5kbGVEb25lRW50ZXJpbmc6IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBjb21wb25lbnQgPSB0aGlzLnJlZnNba2V5XTtcbiAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZEVudGVyKSB7XG4gICAgICBjb21wb25lbnQuY29tcG9uZW50RGlkRW50ZXIoKTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldO1xuXG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKFxuICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICk7XG5cbiAgICBpZiAoIWN1cnJlbnRDaGlsZE1hcHBpbmcgfHwgIWN1cnJlbnRDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgLy8gVGhpcyB3YXMgcmVtb3ZlZCBiZWZvcmUgaXQgaGFkIGZ1bGx5IGVudGVyZWQuIFJlbW92ZSBpdC5cbiAgICAgIHRoaXMucGVyZm9ybUxlYXZlKGtleSk7XG4gICAgfVxuICB9LFxuXG4gIHBlcmZvcm1MZWF2ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldID0gdHJ1ZTtcblxuICAgIHZhciBjb21wb25lbnQgPSB0aGlzLnJlZnNba2V5XTtcbiAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxMZWF2ZSkge1xuICAgICAgY29tcG9uZW50LmNvbXBvbmVudFdpbGxMZWF2ZSh0aGlzLl9oYW5kbGVEb25lTGVhdmluZy5iaW5kKHRoaXMsIGtleSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBzb21ld2hhdCBkYW5nZXJvdXMgYi9jIGl0IGNhbGxzIHNldFN0YXRlKClcbiAgICAgIC8vIGFnYWluLCBlZmZlY3RpdmVseSBtdXRhdGluZyB0aGUgY29tcG9uZW50IGJlZm9yZSBhbGwgdGhlIHdvcmtcbiAgICAgIC8vIGlzIGRvbmUuXG4gICAgICB0aGlzLl9oYW5kbGVEb25lTGVhdmluZyhrZXkpO1xuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlRG9uZUxlYXZpbmc6IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBjb21wb25lbnQgPSB0aGlzLnJlZnNba2V5XTtcblxuICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50RGlkTGVhdmUpIHtcbiAgICAgIGNvbXBvbmVudC5jb21wb25lbnREaWRMZWF2ZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2tleV07XG5cbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoXG4gICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgKTtcblxuICAgIGlmIChjdXJyZW50Q2hpbGRNYXBwaW5nICYmIGN1cnJlbnRDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgLy8gVGhpcyBlbnRlcmVkIGFnYWluIGJlZm9yZSBpdCBmdWxseSBsZWZ0LiBBZGQgaXQgYWdhaW4uXG4gICAgICB0aGlzLnBlcmZvcm1FbnRlcihrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbmV3Q2hpbGRyZW4gPSBhc3NpZ24oe30sIHRoaXMuc3RhdGUuY2hpbGRyZW4pO1xuICAgICAgZGVsZXRlIG5ld0NoaWxkcmVuW2tleV07XG4gICAgICB0aGlzLnNldFN0YXRlKHtjaGlsZHJlbjogbmV3Q2hpbGRyZW59KTtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAvLyBUT0RPOiB3ZSBjb3VsZCBnZXQgcmlkIG9mIHRoZSBuZWVkIGZvciB0aGUgd3JhcHBlciBub2RlXG4gICAgLy8gYnkgY2xvbmluZyBhIHNpbmdsZSBjaGlsZFxuICAgIHZhciBjaGlsZHJlblRvUmVuZGVyID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuc3RhdGUuY2hpbGRyZW4pIHtcbiAgICAgIHZhciBjaGlsZCA9IHRoaXMuc3RhdGUuY2hpbGRyZW5ba2V5XTtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAvLyBZb3UgbWF5IG5lZWQgdG8gYXBwbHkgcmVhY3RpdmUgdXBkYXRlcyB0byBhIGNoaWxkIGFzIGl0IGlzIGxlYXZpbmcuXG4gICAgICAgIC8vIFRoZSBub3JtYWwgUmVhY3Qgd2F5IHRvIGRvIGl0IHdvbid0IHdvcmsgc2luY2UgdGhlIGNoaWxkIHdpbGwgaGF2ZVxuICAgICAgICAvLyBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4gSW4gY2FzZSB5b3UgbmVlZCB0aGlzIGJlaGF2aW9yIHlvdSBjYW4gcHJvdmlkZVxuICAgICAgICAvLyBhIGNoaWxkRmFjdG9yeSBmdW5jdGlvbiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlXG4gICAgICAgIC8vIGxlYXZpbmcuXG4gICAgICAgIGNoaWxkcmVuVG9SZW5kZXIucHVzaChjbG9uZVdpdGhQcm9wcyhcbiAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkRmFjdG9yeShjaGlsZCksXG4gICAgICAgICAge3JlZjoga2V5LCBrZXk6IGtleX1cbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnQsXG4gICAgICB0aGlzLnByb3BzLFxuICAgICAgY2hpbGRyZW5Ub1JlbmRlclxuICAgICk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VHJhbnNpdGlvbkdyb3VwO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RVcGRhdGVRdWV1ZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0TGlmZUN5Y2xlID0gcmVxdWlyZShcIi4vUmVhY3RMaWZlQ3ljbGVcIik7XG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKFwiLi9SZWFjdEN1cnJlbnRPd25lclwiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSkge1xuICBpZiAoaW50ZXJuYWxJbnN0YW5jZSAhPT0gUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5TW91bnRpbmdJbnN0YW5jZSkge1xuICAgIC8vIElmIHdlJ3JlIGluIGEgY29tcG9uZW50V2lsbE1vdW50IGhhbmRsZXIsIGRvbid0IGVucXVldWUgYSByZXJlbmRlclxuICAgIC8vIGJlY2F1c2UgUmVhY3RVcGRhdGVzIGFzc3VtZXMgd2UncmUgaW4gYSBicm93c2VyIGNvbnRleHQgKHdoaWNoIGlzXG4gICAgLy8gd3JvbmcgZm9yIHNlcnZlciByZW5kZXJpbmcpIGFuZCB3ZSdyZSBhYm91dCB0byBkbyBhIHJlbmRlciBhbnl3YXkuXG4gICAgLy8gU2VlIGJ1ZyBpbiAjMTc0MC5cbiAgICBSZWFjdFVwZGF0ZXMuZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID09IG51bGwsXG4gICAgJyVzKC4uLik6IENhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gJyArXG4gICAgJyhzdWNoIGFzIHdpdGhpbiBgcmVuZGVyYCkuIFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gJyArXG4gICAgJ29mIHByb3BzIGFuZCBzdGF0ZS4nLFxuICAgIGNhbGxlck5hbWVcbiAgKSA6IGludmFyaWFudChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID09IG51bGwpKTtcblxuICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KHB1YmxpY0luc3RhbmNlKTtcbiAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgLy8gT25seSB3YXJuIHdoZW4gd2UgaGF2ZSBhIGNhbGxlck5hbWUuIE90aGVyd2lzZSB3ZSBzaG91bGQgYmUgc2lsZW50LlxuICAgICAgLy8gV2UncmUgcHJvYmFibHkgY2FsbGluZyBmcm9tIGVucXVldWVDYWxsYmFjay4gV2UgZG9uJ3Qgd2FudCB0byB3YXJuXG4gICAgICAvLyB0aGVyZSBiZWNhdXNlIHdlIGFscmVhZHkgd2FybmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBsaWZlY3ljbGUgbWV0aG9kLlxuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICFjYWxsZXJOYW1lLFxuICAgICAgICAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRlIGEgbW91bnRlZCBvciBtb3VudGluZyBjb21wb25lbnQuICcgK1xuICAgICAgICAnVGhpcyB1c3VhbGx5IG1lYW5zIHlvdSBjYWxsZWQgJXMoKSBvbiBhbiB1bm1vdW50ZWQgJyArXG4gICAgICAgICdjb21wb25lbnQuIFRoaXMgaXMgYSBuby1vcC4nLFxuICAgICAgICBjYWxsZXJOYW1lLFxuICAgICAgICBjYWxsZXJOYW1lXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGludGVybmFsSW5zdGFuY2UgPT09IFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseVVubW91bnRpbmdJbnN0YW5jZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGludGVybmFsSW5zdGFuY2U7XG59XG5cbi8qKlxuICogUmVhY3RVcGRhdGVRdWV1ZSBhbGxvd3MgZm9yIHN0YXRlIHVwZGF0ZXMgdG8gYmUgc2NoZWR1bGVkIGludG8gYSBsYXRlclxuICogcmVjb25jaWxpYXRpb24gc3RlcC5cbiAqL1xudmFyIFJlYWN0VXBkYXRlUXVldWUgPSB7XG5cbiAgLyoqXG4gICAqIEVucXVldWUgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBwZW5kaW5nIHVwZGF0ZXNcbiAgICogaGF2ZSBwcm9jZXNzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRvIHVzZSBhcyBgdGhpc2AgY29udGV4dC5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVDYWxsYmFjazogZnVuY3Rpb24ocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdlbnF1ZXVlQ2FsbGJhY2soLi4uKTogWW91IGNhbGxlZCBgc2V0UHJvcHNgLCBgcmVwbGFjZVByb3BzYCwgJyArXG4gICAgICAnYHNldFN0YXRlYCwgYHJlcGxhY2VTdGF0ZWAsIG9yIGBmb3JjZVVwZGF0ZWAgd2l0aCBhIGNhbGxiYWNrIHRoYXQgJyArXG4gICAgICAnaXNuXFwndCBjYWxsYWJsZS4nXG4gICAgKSA6IGludmFyaWFudCh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpKTtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG5cbiAgICAvLyBQcmV2aW91c2x5IHdlIHdvdWxkIHRocm93IGFuIGVycm9yIGlmIHdlIGRpZG4ndCBoYXZlIGFuIGludGVybmFsXG4gICAgLy8gaW5zdGFuY2UuIFNpbmNlIHdlIHdhbnQgdG8gbWFrZSBpdCBhIG5vLW9wIGluc3RlYWQsIHdlIG1pcnJvciB0aGUgc2FtZVxuICAgIC8vIGJlaGF2aW9yIHdlIGhhdmUgaW4gb3RoZXIgZW5xdWV1ZSogbWV0aG9kcy5cbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gaWdub3JlIGNhbGxiYWNrcyBpbiBjb21wb25lbnRXaWxsTW91bnQuIFNlZVxuICAgIC8vIGVucXVldWVVcGRhdGVzLlxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSB8fFxuICAgICAgICBpbnRlcm5hbEluc3RhbmNlID09PSBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlNb3VudGluZ0luc3RhbmNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcykge1xuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgfVxuICAgIC8vIFRPRE86IFRoZSBjYWxsYmFjayBoZXJlIGlzIGlnbm9yZWQgd2hlbiBzZXRTdGF0ZSBpcyBjYWxsZWQgZnJvbVxuICAgIC8vIGNvbXBvbmVudFdpbGxNb3VudC4gRWl0aGVyIGZpeCBpdCBvciBkaXNhbGxvdyBkb2luZyBzbyBjb21wbGV0ZWx5IGluXG4gICAgLy8gZmF2b3Igb2YgZ2V0SW5pdGlhbFN0YXRlLiBBbHRlcm5hdGl2ZWx5LCB3ZSBjYW4gZGlzYWxsb3dcbiAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZHVyaW5nIHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIGVucXVldWVDYWxsYmFja0ludGVybmFsOiBmdW5jdGlvbihpbnRlcm5hbEluc3RhbmNlLCBjYWxsYmFjaykge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicsXG4gICAgICAnZW5xdWV1ZUNhbGxiYWNrKC4uLik6IFlvdSBjYWxsZWQgYHNldFByb3BzYCwgYHJlcGxhY2VQcm9wc2AsICcgK1xuICAgICAgJ2BzZXRTdGF0ZWAsIGByZXBsYWNlU3RhdGVgLCBvciBgZm9yY2VVcGRhdGVgIHdpdGggYSBjYWxsYmFjayB0aGF0ICcgK1xuICAgICAgJ2lzblxcJ3QgY2FsbGFibGUuJ1xuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSk7XG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkVXBkYXRlQ29tcG9uZW50YCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24ocHVibGljSW5zdGFuY2UpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShcbiAgICAgIHB1YmxpY0luc3RhbmNlLFxuICAgICAgJ2ZvcmNlVXBkYXRlJ1xuICAgICk7XG5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSB0cnVlO1xuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUoXG4gICAgICBwdWJsaWNJbnN0YW5jZSxcbiAgICAgICdyZXBsYWNlU3RhdGUnXG4gICAgKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gW2NvbXBsZXRlU3RhdGVdO1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSB0cnVlO1xuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24ocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSkge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKFxuICAgICAgcHVibGljSW5zdGFuY2UsXG4gICAgICAnc2V0U3RhdGUnXG4gICAgKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBxdWV1ZSA9XG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nU3RhdGVRdWV1ZSB8fFxuICAgICAgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gW10pO1xuICAgIHF1ZXVlLnB1c2gocGFydGlhbFN0YXRlKTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHByb3BzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxQcm9wcyBTdWJzZXQgb2YgdGhlIG5leHQgcHJvcHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFByb3BzOiBmdW5jdGlvbihwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFByb3BzKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUoXG4gICAgICBwdWJsaWNJbnN0YW5jZSxcbiAgICAgICdzZXRQcm9wcydcbiAgICApO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX2lzVG9wTGV2ZWwsXG4gICAgICAnc2V0UHJvcHMoLi4uKTogWW91IGNhbGxlZCBgc2V0UHJvcHNgIG9uIGEgJyArXG4gICAgICAnY29tcG9uZW50IHdpdGggYSBwYXJlbnQuIFRoaXMgaXMgYW4gYW50aS1wYXR0ZXJuIHNpbmNlIHByb3BzIHdpbGwgJyArXG4gICAgICAnZ2V0IHJlYWN0aXZlbHkgdXBkYXRlZCB3aGVuIHJlbmRlcmVkLiBJbnN0ZWFkLCBjaGFuZ2UgdGhlIG93bmVyXFwncyAnICtcbiAgICAgICdgcmVuZGVyYCBtZXRob2QgdG8gcGFzcyB0aGUgY29ycmVjdCB2YWx1ZSBhcyBwcm9wcyB0byB0aGUgY29tcG9uZW50ICcgK1xuICAgICAgJ3doZXJlIGl0IGlzIGNyZWF0ZWQuJ1xuICAgICkgOiBpbnZhcmlhbnQoaW50ZXJuYWxJbnN0YW5jZS5faXNUb3BMZXZlbCkpO1xuXG4gICAgLy8gTWVyZ2Ugd2l0aCB0aGUgcGVuZGluZyBlbGVtZW50IGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHdpdGggZXhpc3RpbmdcbiAgICAvLyBlbGVtZW50IHByb3BzLlxuICAgIHZhciBlbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0VsZW1lbnQgfHxcbiAgICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcywgcGFydGlhbFByb3BzKTtcbiAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jbG9uZUFuZFJlcGxhY2VQcm9wcyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcm9wc1xuICAgICk7XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHByb3BzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHByb3BzIE5ldyBwcm9wcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVByb3BzOiBmdW5jdGlvbihwdWJsaWNJbnN0YW5jZSwgcHJvcHMpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShcbiAgICAgIHB1YmxpY0luc3RhbmNlLFxuICAgICAgJ3JlcGxhY2VQcm9wcydcbiAgICApO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX2lzVG9wTGV2ZWwsXG4gICAgICAncmVwbGFjZVByb3BzKC4uLik6IFlvdSBjYWxsZWQgYHJlcGxhY2VQcm9wc2Agb24gYSAnICtcbiAgICAgICdjb21wb25lbnQgd2l0aCBhIHBhcmVudC4gVGhpcyBpcyBhbiBhbnRpLXBhdHRlcm4gc2luY2UgcHJvcHMgd2lsbCAnICtcbiAgICAgICdnZXQgcmVhY3RpdmVseSB1cGRhdGVkIHdoZW4gcmVuZGVyZWQuIEluc3RlYWQsIGNoYW5nZSB0aGUgb3duZXJcXCdzICcgK1xuICAgICAgJ2ByZW5kZXJgIG1ldGhvZCB0byBwYXNzIHRoZSBjb3JyZWN0IHZhbHVlIGFzIHByb3BzIHRvIHRoZSBjb21wb25lbnQgJyArXG4gICAgICAnd2hlcmUgaXQgaXMgY3JlYXRlZC4nXG4gICAgKSA6IGludmFyaWFudChpbnRlcm5hbEluc3RhbmNlLl9pc1RvcExldmVsKSk7XG5cbiAgICAvLyBNZXJnZSB3aXRoIHRoZSBwZW5kaW5nIGVsZW1lbnQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2Ugd2l0aCBleGlzdGluZ1xuICAgIC8vIGVsZW1lbnQgcHJvcHMuXG4gICAgdmFyIGVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nRWxlbWVudCB8fFxuICAgICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQ7XG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlUHJvcHMoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHNcbiAgICApO1xuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICBlbnF1ZXVlRWxlbWVudEludGVybmFsOiBmdW5jdGlvbihpbnRlcm5hbEluc3RhbmNlLCBuZXdFbGVtZW50KSB7XG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0VsZW1lbnQgPSBuZXdFbGVtZW50O1xuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFVwZGF0ZVF1ZXVlO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRGVndaR0YwWlZGMVpYVmxYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnVW1WaFkzUk1hV1psUTNsamJHVWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRXhwWm1WRGVXTnNaVndpS1R0Y2JuWmhjaUJTWldGamRFTjFjbkpsYm5SUGQyNWxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUTNWeWNtVnVkRTkzYm1WeVhDSXBPMXh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFRXRndJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JKYm5OMFlXNWpaVTFoY0Z3aUtUdGNiblpoY2lCU1pXRmpkRlZ3WkdGMFpYTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRlZ3WkdGMFpYTmNJaWs3WEc1Y2JuWmhjaUJoYzNOcFoyNGdQU0J5WlhGMWFYSmxLRndpTGk5UFltcGxZM1F1WVhOemFXZHVYQ0lwTzF4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVablZ1WTNScGIyNGdaVzV4ZFdWMVpWVndaR0YwWlNocGJuUmxjbTVoYkVsdWMzUmhibU5sS1NCN1hHNGdJR2xtSUNocGJuUmxjbTVoYkVsdWMzUmhibU5sSUNFOVBTQlNaV0ZqZEV4cFptVkRlV05zWlM1amRYSnlaVzUwYkhsTmIzVnVkR2x1WjBsdWMzUmhibU5sS1NCN1hHNGdJQ0FnTHk4Z1NXWWdkMlVuY21VZ2FXNGdZU0JqYjIxd2IyNWxiblJYYVd4c1RXOTFiblFnYUdGdVpHeGxjaXdnWkc5dUozUWdaVzV4ZFdWMVpTQmhJSEpsY21WdVpHVnlYRzRnSUNBZ0x5OGdZbVZqWVhWelpTQlNaV0ZqZEZWd1pHRjBaWE1nWVhOemRXMWxjeUIzWlNkeVpTQnBiaUJoSUdKeWIzZHpaWElnWTI5dWRHVjRkQ0FvZDJocFkyZ2dhWE5jYmlBZ0lDQXZMeUIzY205dVp5Qm1iM0lnYzJWeWRtVnlJSEpsYm1SbGNtbHVaeWtnWVc1a0lIZGxKM0psSUdGaWIzVjBJSFJ2SUdSdklHRWdjbVZ1WkdWeUlHRnVlWGRoZVM1Y2JpQWdJQ0F2THlCVFpXVWdZblZuSUdsdUlDTXhOelF3TGx4dUlDQWdJRkpsWVdOMFZYQmtZWFJsY3k1bGJuRjFaWFZsVlhCa1lYUmxLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBPMXh1SUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUdkbGRFbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJWU1pXRmtlVVp2Y2xWd1pHRjBaU2h3ZFdKc2FXTkpibk4wWVc1alpTd2dZMkZzYkdWeVRtRnRaU2tnZTF4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblFnUFQwZ2JuVnNiQ3hjYmlBZ0lDQW5KWE1vTGk0dUtUb2dRMkZ1Ym05MElIVndaR0YwWlNCa2RYSnBibWNnWVc0Z1pYaHBjM1JwYm1jZ2MzUmhkR1VnZEhKaGJuTnBkR2x2YmlBbklDdGNiaUFnSUNBbktITjFZMmdnWVhNZ2QybDBhR2x1SUdCeVpXNWtaWEpnS1M0Z1VtVnVaR1Z5SUcxbGRHaHZaSE1nYzJodmRXeGtJR0psSUdFZ2NIVnlaU0JtZFc1amRHbHZiaUFuSUN0Y2JpQWdJQ0FuYjJZZ2NISnZjSE1nWVc1a0lITjBZWFJsTGljc1hHNGdJQ0FnWTJGc2JHVnlUbUZ0WlZ4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0ZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblFnUFQwZ2JuVnNiQ2twTzF4dVhHNGdJSFpoY2lCcGJuUmxjbTVoYkVsdWMzUmhibU5sSUQwZ1VtVmhZM1JKYm5OMFlXNWpaVTFoY0M1blpYUW9jSFZpYkdsalNXNXpkR0Z1WTJVcE8xeHVJQ0JwWmlBb0lXbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVcElIdGNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNBdkx5QlBibXg1SUhkaGNtNGdkMmhsYmlCM1pTQm9ZWFpsSUdFZ1kyRnNiR1Z5VG1GdFpTNGdUM1JvWlhKM2FYTmxJSGRsSUhOb2IzVnNaQ0JpWlNCemFXeGxiblF1WEc0Z0lDQWdJQ0F2THlCWFpTZHlaU0J3Y205aVlXSnNlU0JqWVd4c2FXNW5JR1p5YjIwZ1pXNXhkV1YxWlVOaGJHeGlZV05yTGlCWFpTQmtiMjRuZENCM1lXNTBJSFJ2SUhkaGNtNWNiaUFnSUNBZ0lDOHZJSFJvWlhKbElHSmxZMkYxYzJVZ2QyVWdZV3h5WldGa2VTQjNZWEp1WldRZ1ptOXlJSFJvWlNCamIzSnlaWE53YjI1a2FXNW5JR3hwWm1WamVXTnNaU0J0WlhSb2IyUXVYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lXTmhiR3hsY2s1aGJXVXNYRzRnSUNBZ0lDQWdJQ2NsY3lndUxpNHBPaUJEWVc0Z2IyNXNlU0IxY0dSaGRHVWdZU0J0YjNWdWRHVmtJRzl5SUcxdmRXNTBhVzVuSUdOdmJYQnZibVZ1ZEM0Z0p5QXJYRzRnSUNBZ0lDQWdJQ2RVYUdseklIVnpkV0ZzYkhrZ2JXVmhibk1nZVc5MUlHTmhiR3hsWkNBbGN5Z3BJRzl1SUdGdUlIVnViVzkxYm5SbFpDQW5JQ3RjYmlBZ0lDQWdJQ0FnSjJOdmJYQnZibVZ1ZEM0Z1ZHaHBjeUJwY3lCaElHNXZMVzl3TGljc1hHNGdJQ0FnSUNBZ0lHTmhiR3hsY2s1aGJXVXNYRzRnSUNBZ0lDQWdJR05oYkd4bGNrNWhiV1ZjYmlBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgxY2JseHVJQ0JwWmlBb2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNBOVBUMGdVbVZoWTNSTWFXWmxRM2xqYkdVdVkzVnljbVZ1ZEd4NVZXNXRiM1Z1ZEdsdVowbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdhVzUwWlhKdVlXeEpibk4wWVc1alpUdGNibjFjYmx4dUx5b3FYRzRnS2lCU1pXRmpkRlZ3WkdGMFpWRjFaWFZsSUdGc2JHOTNjeUJtYjNJZ2MzUmhkR1VnZFhCa1lYUmxjeUIwYnlCaVpTQnpZMmhsWkhWc1pXUWdhVzUwYnlCaElHeGhkR1Z5WEc0Z0tpQnlaV052Ym1OcGJHbGhkR2x2YmlCemRHVndMbHh1SUNvdlhHNTJZWElnVW1WaFkzUlZjR1JoZEdWUmRXVjFaU0E5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUlc1eGRXVjFaU0JoSUdOaGJHeGlZV05ySUhSb1lYUWdkMmxzYkNCaVpTQmxlR1ZqZFhSbFpDQmhablJsY2lCaGJHd2dkR2hsSUhCbGJtUnBibWNnZFhCa1lYUmxjMXh1SUNBZ0tpQm9ZWFpsSUhCeWIyTmxjM05sWkM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVOc1lYTnpmU0J3ZFdKc2FXTkpibk4wWVc1alpTQlVhR1VnYVc1emRHRnVZMlVnZEc4Z2RYTmxJR0Z6SUdCMGFHbHpZQ0JqYjI1MFpYaDBMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2V6OW1kVzVqZEdsdmJuMGdZMkZzYkdKaFkyc2dRMkZzYkdWa0lHRm1kR1Z5SUhOMFlYUmxJR2x6SUhWd1pHRjBaV1F1WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWlc1eGRXVjFaVU5oYkd4aVlXTnJPaUJtZFc1amRHbHZiaWh3ZFdKc2FXTkpibk4wWVc1alpTd2dZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2RIbHdaVzltSUdOaGJHeGlZV05ySUQwOVBTQW5ablZ1WTNScGIyNG5MRnh1SUNBZ0lDQWdKMlZ1Y1hWbGRXVkRZV3hzWW1GamF5Z3VMaTRwT2lCWmIzVWdZMkZzYkdWa0lHQnpaWFJRY205d2MyQXNJR0J5WlhCc1lXTmxVSEp2Y0hOZ0xDQW5JQ3RjYmlBZ0lDQWdJQ2RnYzJWMFUzUmhkR1ZnTENCZ2NtVndiR0ZqWlZOMFlYUmxZQ3dnYjNJZ1lHWnZjbU5sVlhCa1lYUmxZQ0IzYVhSb0lHRWdZMkZzYkdKaFkyc2dkR2hoZENBbklDdGNiaUFnSUNBZ0lDZHBjMjVjWENkMElHTmhiR3hoWW14bExpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLSFI1Y0dWdlppQmpZV3hzWW1GamF5QTlQVDBnSjJaMWJtTjBhVzl1SnlrcE8xeHVJQ0FnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdaMlYwU1c1MFpYSnVZV3hKYm5OMFlXNWpaVkpsWVdSNVJtOXlWWEJrWVhSbEtIQjFZbXhwWTBsdWMzUmhibU5sS1R0Y2JseHVJQ0FnSUM4dklGQnlaWFpwYjNWemJIa2dkMlVnZDI5MWJHUWdkR2h5YjNjZ1lXNGdaWEp5YjNJZ2FXWWdkMlVnWkdsa2JpZDBJR2hoZG1VZ1lXNGdhVzUwWlhKdVlXeGNiaUFnSUNBdkx5QnBibk4wWVc1alpTNGdVMmx1WTJVZ2QyVWdkMkZ1ZENCMGJ5QnRZV3RsSUdsMElHRWdibTh0YjNBZ2FXNXpkR1ZoWkN3Z2QyVWdiV2x5Y205eUlIUm9aU0J6WVcxbFhHNGdJQ0FnTHk4Z1ltVm9ZWFpwYjNJZ2QyVWdhR0YyWlNCcGJpQnZkR2hsY2lCbGJuRjFaWFZsS2lCdFpYUm9iMlJ6TGx4dUlDQWdJQzh2SUZkbElHRnNjMjhnYm1WbFpDQjBieUJwWjI1dmNtVWdZMkZzYkdKaFkydHpJR2x1SUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZEM0Z1UyVmxYRzRnSUNBZ0x5OGdaVzV4ZFdWMVpWVndaR0YwWlhNdVhHNGdJQ0FnYVdZZ0tDRnBiblJsY201aGJFbHVjM1JoYm1ObElIeDhYRzRnSUNBZ0lDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVWdQVDA5SUZKbFlXTjBUR2xtWlVONVkyeGxMbU4xY25KbGJuUnNlVTF2ZFc1MGFXNW5TVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNocGJuUmxjbTVoYkVsdWMzUmhibU5sTGw5d1pXNWthVzVuUTJGc2JHSmhZMnR6S1NCN1hHNGdJQ0FnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTGw5d1pXNWthVzVuUTJGc2JHSmhZMnR6TG5CMWMyZ29ZMkZzYkdKaFkyc3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTGw5d1pXNWthVzVuUTJGc2JHSmhZMnR6SUQwZ1cyTmhiR3hpWVdOclhUdGNiaUFnSUNCOVhHNGdJQ0FnTHk4Z1ZFOUVUem9nVkdobElHTmhiR3hpWVdOcklHaGxjbVVnYVhNZ2FXZHViM0psWkNCM2FHVnVJSE5sZEZOMFlYUmxJR2x6SUdOaGJHeGxaQ0JtY205dFhHNGdJQ0FnTHk4Z1kyOXRjRzl1Wlc1MFYybHNiRTF2ZFc1MExpQkZhWFJvWlhJZ1ptbDRJR2wwSUc5eUlHUnBjMkZzYkc5M0lHUnZhVzVuSUhOdklHTnZiWEJzWlhSbGJIa2dhVzVjYmlBZ0lDQXZMeUJtWVhadmNpQnZaaUJuWlhSSmJtbDBhV0ZzVTNSaGRHVXVJRUZzZEdWeWJtRjBhWFpsYkhrc0lIZGxJR05oYmlCa2FYTmhiR3h2ZDF4dUlDQWdJQzh2SUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZENCa2RYSnBibWNnYzJWeWRtVnlMWE5wWkdVZ2NtVnVaR1Z5YVc1bkxseHVJQ0FnSUdWdWNYVmxkV1ZWY0dSaGRHVW9hVzUwWlhKdVlXeEpibk4wWVc1alpTazdYRzRnSUgwc1hHNWNiaUFnWlc1eGRXVjFaVU5oYkd4aVlXTnJTVzUwWlhKdVlXdzZJR1oxYm1OMGFXOXVLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXNJR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lIUjVjR1Z2WmlCallXeHNZbUZqYXlBOVBUMGdKMloxYm1OMGFXOXVKeXhjYmlBZ0lDQWdJQ2RsYm5GMVpYVmxRMkZzYkdKaFkyc29MaTR1S1RvZ1dXOTFJR05oYkd4bFpDQmdjMlYwVUhKdmNITmdMQ0JnY21Wd2JHRmpaVkJ5YjNCellDd2dKeUFyWEc0Z0lDQWdJQ0FuWUhObGRGTjBZWFJsWUN3Z1lISmxjR3hoWTJWVGRHRjBaV0FzSUc5eUlHQm1iM0pqWlZWd1pHRjBaV0FnZDJsMGFDQmhJR05oYkd4aVlXTnJJSFJvWVhRZ0p5QXJYRzRnSUNBZ0lDQW5hWE51WEZ3bmRDQmpZV3hzWVdKc1pTNG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2gwZVhCbGIyWWdZMkZzYkdKaFkyc2dQVDA5SUNkbWRXNWpkR2x2YmljcEtUdGNiaUFnSUNCcFppQW9hVzUwWlhKdVlXeEpibk4wWVc1alpTNWZjR1Z1WkdsdVowTmhiR3hpWVdOcmN5a2dlMXh1SUNBZ0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNWZjR1Z1WkdsdVowTmhiR3hpWVdOcmN5NXdkWE5vS0dOaGJHeGlZV05yS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNWZjR1Z1WkdsdVowTmhiR3hpWVdOcmN5QTlJRnRqWVd4c1ltRmphMTA3WEc0Z0lDQWdmVnh1SUNBZ0lHVnVjWFZsZFdWVmNHUmhkR1VvYVc1MFpYSnVZV3hKYm5OMFlXNWpaU2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFWnZjbU5sY3lCaGJpQjFjR1JoZEdVdUlGUm9hWE1nYzJodmRXeGtJRzl1YkhrZ1ltVWdhVzUyYjJ0bFpDQjNhR1Z1SUdsMElHbHpJR3R1YjNkdUlIZHBkR2hjYmlBZ0lDb2dZMlZ5ZEdGcGJuUjVJSFJvWVhRZ2QyVWdZWEpsSUNvcWJtOTBLaW9nYVc0Z1lTQkVUMDBnZEhKaGJuTmhZM1JwYjI0dVhHNGdJQ0FxWEc0Z0lDQXFJRmx2ZFNCdFlYa2dkMkZ1ZENCMGJ5QmpZV3hzSUhSb2FYTWdkMmhsYmlCNWIzVWdhMjV2ZHlCMGFHRjBJSE52YldVZ1pHVmxjR1Z5SUdGemNHVmpkQ0J2WmlCMGFHVmNiaUFnSUNvZ1kyOXRjRzl1Wlc1MEozTWdjM1JoZEdVZ2FHRnpJR05vWVc1blpXUWdZblYwSUdCelpYUlRkR0YwWldBZ2QyRnpJRzV2ZENCallXeHNaV1F1WEc0Z0lDQXFYRzRnSUNBcUlGUm9hWE1nZDJsc2JDQnViM1FnYVc1MmIydGxJR0J6YUc5MWJHUlZjR1JoZEdWRGIyMXdiMjVsYm5SZ0xDQmlkWFFnYVhRZ2QybHNiQ0JwYm5admEyVmNiaUFnSUNvZ1lHTnZiWEJ2Ym1WdWRGZHBiR3hWY0dSaGRHVmdJR0Z1WkNCZ1kyOXRjRzl1Wlc1MFJHbGtWWEJrWVhSbFlDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFTnNZWE56ZlNCd2RXSnNhV05KYm5OMFlXNWpaU0JVYUdVZ2FXNXpkR0Z1WTJVZ2RHaGhkQ0J6YUc5MWJHUWdjbVZ5Wlc1a1pYSXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaVzV4ZFdWMVpVWnZjbU5sVlhCa1lYUmxPaUJtZFc1amRHbHZiaWh3ZFdKc2FXTkpibk4wWVc1alpTa2dlMXh1SUNBZ0lIWmhjaUJwYm5SbGNtNWhiRWx1YzNSaGJtTmxJRDBnWjJWMFNXNTBaWEp1WVd4SmJuTjBZVzVqWlZKbFlXUjVSbTl5VlhCa1lYUmxLRnh1SUNBZ0lDQWdjSFZpYkdsalNXNXpkR0Z1WTJVc1hHNGdJQ0FnSUNBblptOXlZMlZWY0dSaGRHVW5YRzRnSUNBZ0tUdGNibHh1SUNBZ0lHbG1JQ2doYVc1MFpYSnVZV3hKYm5OMFlXNWpaU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgzQmxibVJwYm1kR2IzSmpaVlZ3WkdGMFpTQTlJSFJ5ZFdVN1hHNWNiaUFnSUNCbGJuRjFaWFZsVlhCa1lYUmxLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYQnNZV05sY3lCaGJHd2diMllnZEdobElITjBZWFJsTGlCQmJIZGhlWE1nZFhObElIUm9hWE1nYjNJZ1lITmxkRk4wWVhSbFlDQjBieUJ0ZFhSaGRHVWdjM1JoZEdVdVhHNGdJQ0FxSUZsdmRTQnphRzkxYkdRZ2RISmxZWFFnWUhSb2FYTXVjM1JoZEdWZ0lHRnpJR2x0YlhWMFlXSnNaUzVjYmlBZ0lDcGNiaUFnSUNvZ1ZHaGxjbVVnYVhNZ2JtOGdaM1ZoY21GdWRHVmxJSFJvWVhRZ1lIUm9hWE11YzNSaGRHVmdJSGRwYkd3Z1ltVWdhVzF0WldScFlYUmxiSGtnZFhCa1lYUmxaQ3dnYzI5Y2JpQWdJQ29nWVdOalpYTnphVzVuSUdCMGFHbHpMbk4wWVhSbFlDQmhablJsY2lCallXeHNhVzVuSUhSb2FYTWdiV1YwYUc5a0lHMWhlU0J5WlhSMWNtNGdkR2hsSUc5c1pDQjJZV3gxWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVOc1lYTnpmU0J3ZFdKc2FXTkpibk4wWVc1alpTQlVhR1VnYVc1emRHRnVZMlVnZEdoaGRDQnphRzkxYkdRZ2NtVnlaVzVrWlhJdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JqYjIxd2JHVjBaVk4wWVhSbElFNWxlSFFnYzNSaGRHVXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaVzV4ZFdWMVpWSmxjR3hoWTJWVGRHRjBaVG9nWm5WdVkzUnBiMjRvY0hWaWJHbGpTVzV6ZEdGdVkyVXNJR052YlhCc1pYUmxVM1JoZEdVcElIdGNiaUFnSUNCMllYSWdhVzUwWlhKdVlXeEpibk4wWVc1alpTQTlJR2RsZEVsdWRHVnlibUZzU1c1emRHRnVZMlZTWldGa2VVWnZjbFZ3WkdGMFpTaGNiaUFnSUNBZ0lIQjFZbXhwWTBsdWMzUmhibU5sTEZ4dUlDQWdJQ0FnSjNKbGNHeGhZMlZUZEdGMFpTZGNiaUFnSUNBcE8xeHVYRzRnSUNBZ2FXWWdLQ0ZwYm5SbGNtNWhiRWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmNHVnVaR2x1WjFOMFlYUmxVWFZsZFdVZ1BTQmJZMjl0Y0d4bGRHVlRkR0YwWlYwN1hHNGdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaMUpsY0d4aFkyVlRkR0YwWlNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0JsYm5GMVpYVmxWWEJrWVhSbEtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVcE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJUWlhSeklHRWdjM1ZpYzJWMElHOW1JSFJvWlNCemRHRjBaUzRnVkdocGN5QnZibXg1SUdWNGFYTjBjeUJpWldOaGRYTmxJRjl3Wlc1a2FXNW5VM1JoZEdVZ2FYTmNiaUFnSUNvZ2FXNTBaWEp1WVd3dUlGUm9hWE1nY0hKdmRtbGtaWE1nWVNCdFpYSm5hVzVuSUhOMGNtRjBaV2Q1SUhSb1lYUWdhWE1nYm05MElHRjJZV2xzWVdKc1pTQjBieUJrWldWd1hHNGdJQ0FxSUhCeWIzQmxjblJwWlhNZ2QyaHBZMmdnYVhNZ1kyOXVablZ6YVc1bkxpQlVUMFJQT2lCRmVIQnZjMlVnY0dWdVpHbHVaMU4wWVhSbElHOXlJR1J2YmlkMElIVnpaU0JwZEZ4dUlDQWdLaUJrZFhKcGJtY2dkR2hsSUcxbGNtZGxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMnhoYzNOOUlIQjFZbXhwWTBsdWMzUmhibU5sSUZSb1pTQnBibk4wWVc1alpTQjBhR0YwSUhOb2IzVnNaQ0J5WlhKbGJtUmxjaTVjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlIQmhjblJwWVd4VGRHRjBaU0JPWlhoMElIQmhjblJwWVd3Z2MzUmhkR1VnZEc4Z1ltVWdiV1Z5WjJWa0lIZHBkR2dnYzNSaGRHVXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaVzV4ZFdWMVpWTmxkRk4wWVhSbE9pQm1kVzVqZEdsdmJpaHdkV0pzYVdOSmJuTjBZVzVqWlN3Z2NHRnlkR2xoYkZOMFlYUmxLU0I3WEc0Z0lDQWdkbUZ5SUdsdWRHVnlibUZzU1c1emRHRnVZMlVnUFNCblpYUkpiblJsY201aGJFbHVjM1JoYm1ObFVtVmhaSGxHYjNKVmNHUmhkR1VvWEc0Z0lDQWdJQ0J3ZFdKc2FXTkpibk4wWVc1alpTeGNiaUFnSUNBZ0lDZHpaWFJUZEdGMFpTZGNiaUFnSUNBcE8xeHVYRzRnSUNBZ2FXWWdLQ0ZwYm5SbGNtNWhiRWx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJSEYxWlhWbElEMWNiaUFnSUNBZ0lHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgzQmxibVJwYm1kVGRHRjBaVkYxWlhWbElIeDhYRzRnSUNBZ0lDQW9hVzUwWlhKdVlXeEpibk4wWVc1alpTNWZjR1Z1WkdsdVoxTjBZWFJsVVhWbGRXVWdQU0JiWFNrN1hHNGdJQ0FnY1hWbGRXVXVjSFZ6YUNod1lYSjBhV0ZzVTNSaGRHVXBPMXh1WEc0Z0lDQWdaVzV4ZFdWMVpWVndaR0YwWlNocGJuUmxjbTVoYkVsdWMzUmhibU5sS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVMlYwY3lCaElITjFZbk5sZENCdlppQjBhR1VnY0hKdmNITXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUkRiR0Z6YzMwZ2NIVmliR2xqU1c1emRHRnVZMlVnVkdobElHbHVjM1JoYm1ObElIUm9ZWFFnYzJodmRXeGtJSEpsY21WdVpHVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2NHRnlkR2xoYkZCeWIzQnpJRk4xWW5ObGRDQnZaaUIwYUdVZ2JtVjRkQ0J3Y205d2N5NWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQmxibkYxWlhWbFUyVjBVSEp2Y0hNNklHWjFibU4wYVc5dUtIQjFZbXhwWTBsdWMzUmhibU5sTENCd1lYSjBhV0ZzVUhKdmNITXBJSHRjYmlBZ0lDQjJZWElnYVc1MFpYSnVZV3hKYm5OMFlXNWpaU0E5SUdkbGRFbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJWU1pXRmtlVVp2Y2xWd1pHRjBaU2hjYmlBZ0lDQWdJSEIxWW14cFkwbHVjM1JoYm1ObExGeHVJQ0FnSUNBZ0ozTmxkRkJ5YjNCekoxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCcFppQW9JV2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmYVhOVWIzQk1aWFpsYkN4Y2JpQWdJQ0FnSUNkelpYUlFjbTl3Y3lndUxpNHBPaUJaYjNVZ1kyRnNiR1ZrSUdCelpYUlFjbTl3YzJBZ2IyNGdZU0FuSUN0Y2JpQWdJQ0FnSUNkamIyMXdiMjVsYm5RZ2QybDBhQ0JoSUhCaGNtVnVkQzRnVkdocGN5QnBjeUJoYmlCaGJuUnBMWEJoZEhSbGNtNGdjMmx1WTJVZ2NISnZjSE1nZDJsc2JDQW5JQ3RjYmlBZ0lDQWdJQ2RuWlhRZ2NtVmhZM1JwZG1Wc2VTQjFjR1JoZEdWa0lIZG9aVzRnY21WdVpHVnlaV1F1SUVsdWMzUmxZV1FzSUdOb1lXNW5aU0IwYUdVZ2IzZHVaWEpjWENkeklDY2dLMXh1SUNBZ0lDQWdKMkJ5Wlc1a1pYSmdJRzFsZEdodlpDQjBieUJ3WVhOeklIUm9aU0JqYjNKeVpXTjBJSFpoYkhWbElHRnpJSEJ5YjNCeklIUnZJSFJvWlNCamIyMXdiMjVsYm5RZ0p5QXJYRzRnSUNBZ0lDQW5kMmhsY21VZ2FYUWdhWE1nWTNKbFlYUmxaQzRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENocGJuUmxjbTVoYkVsdWMzUmhibU5sTGw5cGMxUnZjRXhsZG1Wc0tTazdYRzVjYmlBZ0lDQXZMeUJOWlhKblpTQjNhWFJvSUhSb1pTQndaVzVrYVc1bklHVnNaVzFsYm5RZ2FXWWdhWFFnWlhocGMzUnpMQ0J2ZEdobGNuZHBjMlVnZDJsMGFDQmxlR2x6ZEdsdVoxeHVJQ0FnSUM4dklHVnNaVzFsYm5RZ2NISnZjSE11WEc0Z0lDQWdkbUZ5SUdWc1pXMWxiblFnUFNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTGw5d1pXNWthVzVuUld4bGJXVnVkQ0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZlkzVnljbVZ1ZEVWc1pXMWxiblE3WEc0Z0lDQWdkbUZ5SUhCeWIzQnpJRDBnWVhOemFXZHVLSHQ5TENCbGJHVnRaVzUwTG5CeWIzQnpMQ0J3WVhKMGFXRnNVSEp2Y0hNcE8xeHVJQ0FnSUdsdWRHVnlibUZzU1c1emRHRnVZMlV1WDNCbGJtUnBibWRGYkdWdFpXNTBJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnNiMjVsUVc1a1VtVndiR0ZqWlZCeWIzQnpLRnh1SUNBZ0lDQWdaV3hsYldWdWRDeGNiaUFnSUNBZ0lIQnliM0J6WEc0Z0lDQWdLVHRjYmx4dUlDQWdJR1Z1Y1hWbGRXVlZjR1JoZEdVb2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsY0d4aFkyVnpJR0ZzYkNCdlppQjBhR1VnY0hKdmNITXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUkRiR0Z6YzMwZ2NIVmliR2xqU1c1emRHRnVZMlVnVkdobElHbHVjM1JoYm1ObElIUm9ZWFFnYzJodmRXeGtJSEpsY21WdVpHVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2NISnZjSE1nVG1WM0lIQnliM0J6TGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUdWdWNYVmxkV1ZTWlhCc1lXTmxVSEp2Y0hNNklHWjFibU4wYVc5dUtIQjFZbXhwWTBsdWMzUmhibU5sTENCd2NtOXdjeWtnZTF4dUlDQWdJSFpoY2lCcGJuUmxjbTVoYkVsdWMzUmhibU5sSUQwZ1oyVjBTVzUwWlhKdVlXeEpibk4wWVc1alpWSmxZV1I1Um05eVZYQmtZWFJsS0Z4dUlDQWdJQ0FnY0hWaWJHbGpTVzV6ZEdGdVkyVXNYRzRnSUNBZ0lDQW5jbVZ3YkdGalpWQnliM0J6SjF4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0JwWmlBb0lXbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVcElIdGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNWZhWE5VYjNCTVpYWmxiQ3hjYmlBZ0lDQWdJQ2R5WlhCc1lXTmxVSEp2Y0hNb0xpNHVLVG9nV1c5MUlHTmhiR3hsWkNCZ2NtVndiR0ZqWlZCeWIzQnpZQ0J2YmlCaElDY2dLMXh1SUNBZ0lDQWdKMk52YlhCdmJtVnVkQ0IzYVhSb0lHRWdjR0Z5Wlc1MExpQlVhR2x6SUdseklHRnVJR0Z1ZEdrdGNHRjBkR1Z5YmlCemFXNWpaU0J3Y205d2N5QjNhV3hzSUNjZ0sxeHVJQ0FnSUNBZ0oyZGxkQ0J5WldGamRHbDJaV3g1SUhWd1pHRjBaV1FnZDJobGJpQnlaVzVrWlhKbFpDNGdTVzV6ZEdWaFpDd2dZMmhoYm1kbElIUm9aU0J2ZDI1bGNseGNKM01nSnlBclhHNGdJQ0FnSUNBbllISmxibVJsY21BZ2JXVjBhRzlrSUhSdklIQmhjM01nZEdobElHTnZjbkpsWTNRZ2RtRnNkV1VnWVhNZ2NISnZjSE1nZEc4Z2RHaGxJR052YlhCdmJtVnVkQ0FuSUN0Y2JpQWdJQ0FnSUNkM2FHVnlaU0JwZENCcGN5QmpjbVZoZEdWa0xpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYMmx6Vkc5d1RHVjJaV3dwS1R0Y2JseHVJQ0FnSUM4dklFMWxjbWRsSUhkcGRHZ2dkR2hsSUhCbGJtUnBibWNnWld4bGJXVnVkQ0JwWmlCcGRDQmxlR2x6ZEhNc0lHOTBhR1Z5ZDJselpTQjNhWFJvSUdWNGFYTjBhVzVuWEc0Z0lDQWdMeThnWld4bGJXVnVkQ0J3Y205d2N5NWNiaUFnSUNCMllYSWdaV3hsYldWdWRDQTlJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYM0JsYm1ScGJtZEZiR1Z0Wlc1MElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbDlqZFhKeVpXNTBSV3hsYldWdWREdGNiaUFnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTGw5d1pXNWthVzVuUld4bGJXVnVkQ0E5SUZKbFlXTjBSV3hsYldWdWRDNWpiRzl1WlVGdVpGSmxjR3hoWTJWUWNtOXdjeWhjYmlBZ0lDQWdJR1ZzWlcxbGJuUXNYRzRnSUNBZ0lDQndjbTl3YzF4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0JsYm5GMVpYVmxWWEJrWVhSbEtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVcE8xeHVJQ0I5TEZ4dVhHNGdJR1Z1Y1hWbGRXVkZiR1Z0Wlc1MFNXNTBaWEp1WVd3NklHWjFibU4wYVc5dUtHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVc0lHNWxkMFZzWlcxbGJuUXBJSHRjYmlBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blJXeGxiV1Z1ZENBOUlHNWxkMFZzWlcxbGJuUTdYRzRnSUNBZ1pXNXhkV1YxWlZWd1pHRjBaU2hwYm5SbGNtNWhiRWx1YzNSaGJtTmxLVHRjYmlBZ2ZWeHVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wVlhCa1lYUmxVWFZsZFdVN1hHNGlYWDA9IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFVwZGF0ZXNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBDYWxsYmFja1F1ZXVlID0gcmVxdWlyZShcIi4vQ2FsbGJhY2tRdWV1ZVwiKTtcbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoXCIuL1Bvb2xlZENsYXNzXCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlclwiKTtcbnZhciBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoXCIuL1RyYW5zYWN0aW9uXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBkaXJ0eUNvbXBvbmVudHMgPSBbXTtcbnZhciBhc2FwQ2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKCk7XG52YXIgYXNhcEVucXVldWVkID0gZmFsc2U7XG5cbnZhciBiYXRjaGluZ1N0cmF0ZWd5ID0gbnVsbDtcblxuZnVuY3Rpb24gZW5zdXJlSW5qZWN0ZWQoKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24gJiYgYmF0Y2hpbmdTdHJhdGVneSxcbiAgICAnUmVhY3RVcGRhdGVzOiBtdXN0IGluamVjdCBhIHJlY29uY2lsZSB0cmFuc2FjdGlvbiBjbGFzcyBhbmQgYmF0Y2hpbmcgJyArXG4gICAgJ3N0cmF0ZWd5J1xuICApIDogaW52YXJpYW50KFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uICYmIGJhdGNoaW5nU3RyYXRlZ3kpKTtcbn1cblxudmFyIE5FU1RFRF9VUERBVEVTID0ge1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCA9IGRpcnR5Q29tcG9uZW50cy5sZW5ndGg7XG4gIH0sXG4gIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggIT09IGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgIC8vIEFkZGl0aW9uYWwgdXBkYXRlcyB3ZXJlIGVucXVldWVkIGJ5IGNvbXBvbmVudERpZFVwZGF0ZSBoYW5kbGVycyBvclxuICAgICAgLy8gc2ltaWxhcjsgYmVmb3JlIG91ciBvd24gVVBEQVRFX1FVRVVFSU5HIHdyYXBwZXIgY2xvc2VzLCB3ZSB3YW50IHRvIHJ1blxuICAgICAgLy8gdGhlc2UgbmV3IHVwZGF0ZXMgc28gdGhhdCBpZiBBJ3MgY29tcG9uZW50RGlkVXBkYXRlIGNhbGxzIHNldFN0YXRlIG9uXG4gICAgICAvLyBCLCBCIHdpbGwgdXBkYXRlIGJlZm9yZSB0aGUgY2FsbGJhY2sgQSdzIHVwZGF0ZXIgcHJvdmlkZWQgd2hlbiBjYWxsaW5nXG4gICAgICAvLyBzZXRTdGF0ZS5cbiAgICAgIGRpcnR5Q29tcG9uZW50cy5zcGxpY2UoMCwgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGgpO1xuICAgICAgZmx1c2hCYXRjaGVkVXBkYXRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBVUERBVEVfUVVFVUVJTkcgPSB7XG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2FsbGJhY2tRdWV1ZS5yZXNldCgpO1xuICB9LFxuICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jYWxsYmFja1F1ZXVlLm5vdGlmeUFsbCgpO1xuICB9XG59O1xuXG52YXIgVFJBTlNBQ1RJT05fV1JBUFBFUlMgPSBbTkVTVEVEX1VQREFURVMsIFVQREFURV9RVUVVRUlOR107XG5cbmZ1bmN0aW9uIFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24oKSB7XG4gIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbiAgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggPSBudWxsO1xuICB0aGlzLmNhbGxiYWNrUXVldWUgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpO1xuICB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uID1cbiAgICBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoKTtcbn1cblxuYXNzaWduKFxuICBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLnByb3RvdHlwZSxcbiAgVHJhbnNhY3Rpb24uTWl4aW4sIHtcbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFRSQU5TQUNUSU9OX1dSQVBQRVJTO1xuICB9LFxuXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoID0gbnVsbDtcbiAgICBDYWxsYmFja1F1ZXVlLnJlbGVhc2UodGhpcy5jYWxsYmFja1F1ZXVlKTtcbiAgICB0aGlzLmNhbGxiYWNrUXVldWUgPSBudWxsO1xuICAgIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLnJlbGVhc2UodGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbiA9IG51bGw7XG4gIH0sXG5cbiAgcGVyZm9ybTogZnVuY3Rpb24obWV0aG9kLCBzY29wZSwgYSkge1xuICAgIC8vIEVzc2VudGlhbGx5IGNhbGxzIGB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLnBlcmZvcm0obWV0aG9kLCBzY29wZSwgYSlgXG4gICAgLy8gd2l0aCB0aGlzIHRyYW5zYWN0aW9uJ3Mgd3JhcHBlcnMgYXJvdW5kIGl0LlxuICAgIHJldHVybiBUcmFuc2FjdGlvbi5NaXhpbi5wZXJmb3JtLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbi5wZXJmb3JtLFxuICAgICAgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbixcbiAgICAgIG1ldGhvZCxcbiAgICAgIHNjb3BlLFxuICAgICAgYVxuICAgICk7XG4gIH1cbn0pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbik7XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzKGNhbGxiYWNrLCBhLCBiLCBjLCBkKSB7XG4gIGVuc3VyZUluamVjdGVkKCk7XG4gIGJhdGNoaW5nU3RyYXRlZ3kuYmF0Y2hlZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIsIGMsIGQpO1xufVxuXG4vKipcbiAqIEFycmF5IGNvbXBhcmF0b3IgZm9yIFJlYWN0Q29tcG9uZW50cyBieSBtb3VudCBvcmRlcmluZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjMSBmaXJzdCBjb21wb25lbnQgeW91J3JlIGNvbXBhcmluZ1xuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gYzIgc2Vjb25kIGNvbXBvbmVudCB5b3UncmUgY29tcGFyaW5nXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybiB2YWx1ZSB1c2FibGUgYnkgQXJyYXkucHJvdG90eXBlLnNvcnQoKS5cbiAqL1xuZnVuY3Rpb24gbW91bnRPcmRlckNvbXBhcmF0b3IoYzEsIGMyKSB7XG4gIHJldHVybiBjMS5fbW91bnRPcmRlciAtIGMyLl9tb3VudE9yZGVyO1xufVxuXG5mdW5jdGlvbiBydW5CYXRjaGVkVXBkYXRlcyh0cmFuc2FjdGlvbikge1xuICB2YXIgbGVuID0gdHJhbnNhY3Rpb24uZGlydHlDb21wb25lbnRzTGVuZ3RoO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGxlbiA9PT0gZGlydHlDb21wb25lbnRzLmxlbmd0aCxcbiAgICAnRXhwZWN0ZWQgZmx1c2ggdHJhbnNhY3Rpb25cXCdzIHN0b3JlZCBkaXJ0eS1jb21wb25lbnRzIGxlbmd0aCAoJXMpIHRvICcgK1xuICAgICdtYXRjaCBkaXJ0eS1jb21wb25lbnRzIGFycmF5IGxlbmd0aCAoJXMpLicsXG4gICAgbGVuLFxuICAgIGRpcnR5Q29tcG9uZW50cy5sZW5ndGhcbiAgKSA6IGludmFyaWFudChsZW4gPT09IGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpKTtcblxuICAvLyBTaW5jZSByZWNvbmNpbGluZyBhIGNvbXBvbmVudCBoaWdoZXIgaW4gdGhlIG93bmVyIGhpZXJhcmNoeSB1c3VhbGx5IChub3RcbiAgLy8gYWx3YXlzIC0tIHNlZSBzaG91bGRDb21wb25lbnRVcGRhdGUoKSkgd2lsbCByZWNvbmNpbGUgY2hpbGRyZW4sIHJlY29uY2lsZVxuICAvLyB0aGVtIGJlZm9yZSB0aGVpciBjaGlsZHJlbiBieSBzb3J0aW5nIHRoZSBhcnJheS5cbiAgZGlydHlDb21wb25lbnRzLnNvcnQobW91bnRPcmRlckNvbXBhcmF0b3IpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAvLyBJZiBhIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQgYmVmb3JlIHBlbmRpbmcgY2hhbmdlcyBhcHBseSwgaXQgd2lsbCBzdGlsbFxuICAgIC8vIGJlIGhlcmUsIGJ1dCB3ZSBhc3N1bWUgdGhhdCBpdCBoYXMgY2xlYXJlZCBpdHMgX3BlbmRpbmdDYWxsYmFja3MgYW5kXG4gICAgLy8gdGhhdCBwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkgaXMgYSBub29wLlxuICAgIHZhciBjb21wb25lbnQgPSBkaXJ0eUNvbXBvbmVudHNbaV07XG5cbiAgICAvLyBJZiBwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkgaGFwcGVucyB0byBlbnF1ZXVlIGFueSBuZXcgdXBkYXRlcywgd2VcbiAgICAvLyBzaG91bGRuJ3QgZXhlY3V0ZSB0aGUgY2FsbGJhY2tzIHVudGlsIHRoZSBuZXh0IHJlbmRlciBoYXBwZW5zLCBzb1xuICAgIC8vIHN0YXNoIHRoZSBjYWxsYmFja3MgZmlyc3RcbiAgICB2YXIgY2FsbGJhY2tzID0gY29tcG9uZW50Ll9wZW5kaW5nQ2FsbGJhY2tzO1xuICAgIGNvbXBvbmVudC5fcGVuZGluZ0NhbGxiYWNrcyA9IG51bGw7XG5cbiAgICBSZWFjdFJlY29uY2lsZXIucGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5KFxuICAgICAgY29tcG9uZW50LFxuICAgICAgdHJhbnNhY3Rpb24ucmVjb25jaWxlVHJhbnNhY3Rpb25cbiAgICApO1xuXG4gICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjYWxsYmFja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uY2FsbGJhY2tRdWV1ZS5lbnF1ZXVlKFxuICAgICAgICAgIGNhbGxiYWNrc1tqXSxcbiAgICAgICAgICBjb21wb25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZmx1c2hCYXRjaGVkVXBkYXRlcyA9IGZ1bmN0aW9uKCkge1xuICAvLyBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uJ3Mgd3JhcHBlcnMgd2lsbCBjbGVhciB0aGUgZGlydHlDb21wb25lbnRzXG4gIC8vIGFycmF5IGFuZCBwZXJmb3JtIGFueSB1cGRhdGVzIGVucXVldWVkIGJ5IG1vdW50LXJlYWR5IGhhbmRsZXJzIChpLmUuLFxuICAvLyBjb21wb25lbnREaWRVcGRhdGUpIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIGhlcmUgdG9vIGluIG9yZGVyIHRvIGNhdGNoXG4gIC8vIHVwZGF0ZXMgZW5xdWV1ZWQgYnkgc2V0U3RhdGUgY2FsbGJhY2tzIGFuZCBhc2FwIGNhbGxzLlxuICB3aGlsZSAoZGlydHlDb21wb25lbnRzLmxlbmd0aCB8fCBhc2FwRW5xdWV1ZWQpIHtcbiAgICBpZiAoZGlydHlDb21wb25lbnRzLmxlbmd0aCkge1xuICAgICAgdmFyIHRyYW5zYWN0aW9uID0gUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbi5nZXRQb29sZWQoKTtcbiAgICAgIHRyYW5zYWN0aW9uLnBlcmZvcm0ocnVuQmF0Y2hlZFVwZGF0ZXMsIG51bGwsIHRyYW5zYWN0aW9uKTtcbiAgICAgIFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKGFzYXBFbnF1ZXVlZCkge1xuICAgICAgYXNhcEVucXVldWVkID0gZmFsc2U7XG4gICAgICB2YXIgcXVldWUgPSBhc2FwQ2FsbGJhY2tRdWV1ZTtcbiAgICAgIGFzYXBDYWxsYmFja1F1ZXVlID0gQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQoKTtcbiAgICAgIHF1ZXVlLm5vdGlmeUFsbCgpO1xuICAgICAgQ2FsbGJhY2tRdWV1ZS5yZWxlYXNlKHF1ZXVlKTtcbiAgICB9XG4gIH1cbn07XG5mbHVzaEJhdGNoZWRVcGRhdGVzID0gUmVhY3RQZXJmLm1lYXN1cmUoXG4gICdSZWFjdFVwZGF0ZXMnLFxuICAnZmx1c2hCYXRjaGVkVXBkYXRlcycsXG4gIGZsdXNoQmF0Y2hlZFVwZGF0ZXNcbik7XG5cbi8qKlxuICogTWFyayBhIGNvbXBvbmVudCBhcyBuZWVkaW5nIGEgcmVyZW5kZXIsIGFkZGluZyBhbiBvcHRpb25hbCBjYWxsYmFjayB0byBhXG4gKiBsaXN0IG9mIGZ1bmN0aW9ucyB3aGljaCB3aWxsIGJlIGV4ZWN1dGVkIG9uY2UgdGhlIHJlcmVuZGVyIG9jY3Vycy5cbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShjb21wb25lbnQpIHtcbiAgZW5zdXJlSW5qZWN0ZWQoKTtcblxuICAvLyBWYXJpb3VzIHBhcnRzIG9mIG91ciBjb2RlIChzdWNoIGFzIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50J3NcbiAgLy8gX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCkgYXNzdW1lIHRoYXQgY2FsbHMgdG8gcmVuZGVyIGFyZW4ndCBuZXN0ZWQ7XG4gIC8vIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgY2FzZS4gKFRoaXMgaXMgY2FsbGVkIGJ5IGVhY2ggdG9wLWxldmVsIHVwZGF0ZVxuICAvLyBmdW5jdGlvbiwgbGlrZSBzZXRQcm9wcywgc2V0U3RhdGUsIGZvcmNlVXBkYXRlLCBldGMuOyBjcmVhdGlvbiBhbmRcbiAgLy8gZGVzdHJ1Y3Rpb24gb2YgdG9wLWxldmVsIGNvbXBvbmVudHMgaXMgZ3VhcmRlZCBpbiBSZWFjdE1vdW50LilcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsLFxuICAgICdlbnF1ZXVlVXBkYXRlKCk6IFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgJyArXG4gICAgJ2FuZCBzdGF0ZTsgdHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgaXMgbm90ICcgK1xuICAgICdhbGxvd2VkLiBJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gJyArXG4gICAgJ2NvbXBvbmVudERpZFVwZGF0ZS4nXG4gICkgOiBudWxsKTtcblxuICBpZiAoIWJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMpIHtcbiAgICBiYXRjaGluZ1N0cmF0ZWd5LmJhdGNoZWRVcGRhdGVzKGVucXVldWVVcGRhdGUsIGNvbXBvbmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGlydHlDb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbn1cblxuLyoqXG4gKiBFbnF1ZXVlIGEgY2FsbGJhY2sgdG8gYmUgcnVuIGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgYmF0Y2hpbmcgY3ljbGUuIFRocm93c1xuICogaWYgbm8gdXBkYXRlcyBhcmUgY3VycmVudGx5IGJlaW5nIHBlcmZvcm1lZC5cbiAqL1xuZnVuY3Rpb24gYXNhcChjYWxsYmFjaywgY29udGV4dCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMsXG4gICAgJ1JlYWN0VXBkYXRlcy5hc2FwOiBDYW5cXCd0IGVucXVldWUgYW4gYXNhcCBjYWxsYmFjayBpbiBhIGNvbnRleHQgd2hlcmUnICtcbiAgICAndXBkYXRlcyBhcmUgbm90IGJlaW5nIGJhdGNoZWQuJ1xuICApIDogaW52YXJpYW50KGJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMpKTtcbiAgYXNhcENhbGxiYWNrUXVldWUuZW5xdWV1ZShjYWxsYmFjaywgY29udGV4dCk7XG4gIGFzYXBFbnF1ZXVlZCA9IHRydWU7XG59XG5cbnZhciBSZWFjdFVwZGF0ZXNJbmplY3Rpb24gPSB7XG4gIGluamVjdFJlY29uY2lsZVRyYW5zYWN0aW9uOiBmdW5jdGlvbihSZWNvbmNpbGVUcmFuc2FjdGlvbikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBSZWNvbmNpbGVUcmFuc2FjdGlvbixcbiAgICAgICdSZWFjdFVwZGF0ZXM6IG11c3QgcHJvdmlkZSBhIHJlY29uY2lsZSB0cmFuc2FjdGlvbiBjbGFzcydcbiAgICApIDogaW52YXJpYW50KFJlY29uY2lsZVRyYW5zYWN0aW9uKSk7XG4gICAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24gPSBSZWNvbmNpbGVUcmFuc2FjdGlvbjtcbiAgfSxcblxuICBpbmplY3RCYXRjaGluZ1N0cmF0ZWd5OiBmdW5jdGlvbihfYmF0Y2hpbmdTdHJhdGVneSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBfYmF0Y2hpbmdTdHJhdGVneSxcbiAgICAgICdSZWFjdFVwZGF0ZXM6IG11c3QgcHJvdmlkZSBhIGJhdGNoaW5nIHN0cmF0ZWd5J1xuICAgICkgOiBpbnZhcmlhbnQoX2JhdGNoaW5nU3RyYXRlZ3kpKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIF9iYXRjaGluZ1N0cmF0ZWd5LmJhdGNoZWRVcGRhdGVzID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ1JlYWN0VXBkYXRlczogbXVzdCBwcm92aWRlIGEgYmF0Y2hlZFVwZGF0ZXMoKSBmdW5jdGlvbidcbiAgICApIDogaW52YXJpYW50KHR5cGVvZiBfYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyA9PT0gJ2Z1bmN0aW9uJykpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgX2JhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPT09ICdib29sZWFuJyxcbiAgICAgICdSZWFjdFVwZGF0ZXM6IG11c3QgcHJvdmlkZSBhbiBpc0JhdGNoaW5nVXBkYXRlcyBib29sZWFuIGF0dHJpYnV0ZSdcbiAgICApIDogaW52YXJpYW50KHR5cGVvZiBfYmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcyA9PT0gJ2Jvb2xlYW4nKSk7XG4gICAgYmF0Y2hpbmdTdHJhdGVneSA9IF9iYXRjaGluZ1N0cmF0ZWd5O1xuICB9XG59O1xuXG52YXIgUmVhY3RVcGRhdGVzID0ge1xuICAvKipcbiAgICogUmVhY3QgcmVmZXJlbmNlcyBgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbmAgdXNpbmcgdGhpcyBwcm9wZXJ0eSBpbiBvcmRlclxuICAgKiB0byBhbGxvdyBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uOiBudWxsLFxuXG4gIGJhdGNoZWRVcGRhdGVzOiBiYXRjaGVkVXBkYXRlcyxcbiAgZW5xdWV1ZVVwZGF0ZTogZW5xdWV1ZVVwZGF0ZSxcbiAgZmx1c2hCYXRjaGVkVXBkYXRlczogZmx1c2hCYXRjaGVkVXBkYXRlcyxcbiAgaW5qZWN0aW9uOiBSZWFjdFVwZGF0ZXNJbmplY3Rpb24sXG4gIGFzYXA6IGFzYXBcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RVcGRhdGVzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUlZjR1JoZEdWekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlNaV0ZqZEZWd1pHRjBaWE5jYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCRFlXeHNZbUZqYTFGMVpYVmxJRDBnY21WeGRXbHlaU2hjSWk0dlEyRnNiR0poWTJ0UmRXVjFaVndpS1R0Y2JuWmhjaUJRYjI5c1pXUkRiR0Z6Y3lBOUlISmxjWFZwY21Vb1hDSXVMMUJ2YjJ4bFpFTnNZWE56WENJcE8xeHVkbUZ5SUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSmNJaWs3WEc1MllYSWdVbVZoWTNSUVpYSm1JRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JRWlhKbVhDSXBPMXh1ZG1GeUlGSmxZV04wVW1WamIyNWphV3hsY2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVtVmpiMjVqYVd4bGNsd2lLVHRjYm5aaGNpQlVjbUZ1YzJGamRHbHZiaUE5SUhKbGNYVnBjbVVvWENJdUwxUnlZVzV6WVdOMGFXOXVYQ0lwTzF4dVhHNTJZWElnWVhOemFXZHVJRDBnY21WeGRXbHlaU2hjSWk0dlQySnFaV04wTG1GemMybG5ibHdpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiblpoY2lCa2FYSjBlVU52YlhCdmJtVnVkSE1nUFNCYlhUdGNiblpoY2lCaGMyRndRMkZzYkdKaFkydFJkV1YxWlNBOUlFTmhiR3hpWVdOclVYVmxkV1V1WjJWMFVHOXZiR1ZrS0NrN1hHNTJZWElnWVhOaGNFVnVjWFZsZFdWa0lEMGdabUZzYzJVN1hHNWNiblpoY2lCaVlYUmphR2x1WjFOMGNtRjBaV2Q1SUQwZ2JuVnNiRHRjYmx4dVpuVnVZM1JwYjI0Z1pXNXpkWEpsU1c1cVpXTjBaV1FvS1NCN1hHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ1VtVmhZM1JWY0dSaGRHVnpMbEpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNGdKaVlnWW1GMFkyaHBibWRUZEhKaGRHVm5lU3hjYmlBZ0lDQW5VbVZoWTNSVmNHUmhkR1Z6T2lCdGRYTjBJR2x1YW1WamRDQmhJSEpsWTI5dVkybHNaU0IwY21GdWMyRmpkR2x2YmlCamJHRnpjeUJoYm1RZ1ltRjBZMmhwYm1jZ0p5QXJYRzRnSUNBZ0ozTjBjbUYwWldkNUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZV04wVlhCa1lYUmxjeTVTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVJQ1ltSUdKaGRHTm9hVzVuVTNSeVlYUmxaM2twS1R0Y2JuMWNibHh1ZG1GeUlFNUZVMVJGUkY5VlVFUkJWRVZUSUQwZ2UxeHVJQ0JwYm1sMGFXRnNhWHBsT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCMGFHbHpMbVJwY25SNVEyOXRjRzl1Wlc1MGMweGxibWQwYUNBOUlHUnBjblI1UTI5dGNHOXVaVzUwY3k1c1pXNW5kR2c3WEc0Z0lIMHNYRzRnSUdOc2IzTmxPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVrYVhKMGVVTnZiWEJ2Ym1WdWRITk1aVzVuZEdnZ0lUMDlJR1JwY25SNVEyOXRjRzl1Wlc1MGN5NXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDOHZJRUZrWkdsMGFXOXVZV3dnZFhCa1lYUmxjeUIzWlhKbElHVnVjWFZsZFdWa0lHSjVJR052YlhCdmJtVnVkRVJwWkZWd1pHRjBaU0JvWVc1a2JHVnljeUJ2Y2x4dUlDQWdJQ0FnTHk4Z2MybHRhV3hoY2pzZ1ltVm1iM0psSUc5MWNpQnZkMjRnVlZCRVFWUkZYMUZWUlZWRlNVNUhJSGR5WVhCd1pYSWdZMnh2YzJWekxDQjNaU0IzWVc1MElIUnZJSEoxYmx4dUlDQWdJQ0FnTHk4Z2RHaGxjMlVnYm1WM0lIVndaR0YwWlhNZ2MyOGdkR2hoZENCcFppQkJKM01nWTI5dGNHOXVaVzUwUkdsa1ZYQmtZWFJsSUdOaGJHeHpJSE5sZEZOMFlYUmxJRzl1WEc0Z0lDQWdJQ0F2THlCQ0xDQkNJSGRwYkd3Z2RYQmtZWFJsSUdKbFptOXlaU0IwYUdVZ1kyRnNiR0poWTJzZ1FTZHpJSFZ3WkdGMFpYSWdjSEp2ZG1sa1pXUWdkMmhsYmlCallXeHNhVzVuWEc0Z0lDQWdJQ0F2THlCelpYUlRkR0YwWlM1Y2JpQWdJQ0FnSUdScGNuUjVRMjl0Y0c5dVpXNTBjeTV6Y0d4cFkyVW9NQ3dnZEdocGN5NWthWEowZVVOdmJYQnZibVZ1ZEhOTVpXNW5kR2dwTzF4dUlDQWdJQ0FnWm14MWMyaENZWFJqYUdWa1ZYQmtZWFJsY3lncE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JrYVhKMGVVTnZiWEJ2Ym1WdWRITXViR1Z1WjNSb0lEMGdNRHRjYmlBZ0lDQjlYRzRnSUgxY2JuMDdYRzVjYm5aaGNpQlZVRVJCVkVWZlVWVkZWVVZKVGtjZ1BTQjdYRzRnSUdsdWFYUnBZV3hwZW1VNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lIUm9hWE11WTJGc2JHSmhZMnRSZFdWMVpTNXlaWE5sZENncE8xeHVJQ0I5TEZ4dUlDQmpiRzl6WlRvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2RHaHBjeTVqWVd4c1ltRmphMUYxWlhWbExtNXZkR2xtZVVGc2JDZ3BPMXh1SUNCOVhHNTlPMXh1WEc1MllYSWdWRkpCVGxOQlExUkpUMDVmVjFKQlVGQkZVbE1nUFNCYlRrVlRWRVZFWDFWUVJFRlVSVk1zSUZWUVJFRlVSVjlSVlVWVlJVbE9SMTA3WEc1Y2JtWjFibU4wYVc5dUlGSmxZV04wVlhCa1lYUmxjMFpzZFhOb1ZISmhibk5oWTNScGIyNG9LU0I3WEc0Z0lIUm9hWE11Y21WcGJtbDBhV0ZzYVhwbFZISmhibk5oWTNScGIyNG9LVHRjYmlBZ2RHaHBjeTVrYVhKMGVVTnZiWEJ2Ym1WdWRITk1aVzVuZEdnZ1BTQnVkV3hzTzF4dUlDQjBhR2x6TG1OaGJHeGlZV05yVVhWbGRXVWdQU0JEWVd4c1ltRmphMUYxWlhWbExtZGxkRkJ2YjJ4bFpDZ3BPMXh1SUNCMGFHbHpMbkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1SUQxY2JpQWdJQ0JTWldGamRGVndaR0YwWlhNdVVtVmhZM1JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ymk1blpYUlFiMjlzWldRb0tUdGNibjFjYmx4dVlYTnphV2R1S0Z4dUlDQlNaV0ZqZEZWd1pHRjBaWE5HYkhWemFGUnlZVzV6WVdOMGFXOXVMbkJ5YjNSdmRIbHdaU3hjYmlBZ1ZISmhibk5oWTNScGIyNHVUV2w0YVc0c0lIdGNiaUFnWjJWMFZISmhibk5oWTNScGIyNVhjbUZ3Y0dWeWN6b2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlGUlNRVTVUUVVOVVNVOU9YMWRTUVZCUVJWSlRPMXh1SUNCOUxGeHVYRzRnSUdSbGMzUnlkV04wYjNJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lIUm9hWE11WkdseWRIbERiMjF3YjI1bGJuUnpUR1Z1WjNSb0lEMGdiblZzYkR0Y2JpQWdJQ0JEWVd4c1ltRmphMUYxWlhWbExuSmxiR1ZoYzJVb2RHaHBjeTVqWVd4c1ltRmphMUYxWlhWbEtUdGNiaUFnSUNCMGFHbHpMbU5oYkd4aVlXTnJVWFZsZFdVZ1BTQnVkV3hzTzF4dUlDQWdJRkpsWVdOMFZYQmtZWFJsY3k1U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1TG5KbGJHVmhjMlVvZEdocGN5NXlaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZiaWs3WEc0Z0lDQWdkR2hwY3k1eVpXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpQTlJRzUxYkd3N1hHNGdJSDBzWEc1Y2JpQWdjR1Z5Wm05eWJUb2dablZ1WTNScGIyNG9iV1YwYUc5a0xDQnpZMjl3WlN3Z1lTa2dlMXh1SUNBZ0lDOHZJRVZ6YzJWdWRHbGhiR3g1SUdOaGJHeHpJR0IwYUdsekxuSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVMbkJsY21admNtMG9iV1YwYUc5a0xDQnpZMjl3WlN3Z1lTbGdYRzRnSUNBZ0x5OGdkMmwwYUNCMGFHbHpJSFJ5WVc1ellXTjBhVzl1SjNNZ2QzSmhjSEJsY25NZ1lYSnZkVzVrSUdsMExseHVJQ0FnSUhKbGRIVnliaUJVY21GdWMyRmpkR2x2Ymk1TmFYaHBiaTV3WlhKbWIzSnRMbU5oYkd3b1hHNGdJQ0FnSUNCMGFHbHpMRnh1SUNBZ0lDQWdkR2hwY3k1eVpXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpNXdaWEptYjNKdExGeHVJQ0FnSUNBZ2RHaHBjeTV5WldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Yml4Y2JpQWdJQ0FnSUcxbGRHaHZaQ3hjYmlBZ0lDQWdJSE5qYjNCbExGeHVJQ0FnSUNBZ1lWeHVJQ0FnSUNrN1hHNGdJSDFjYm4wcE8xeHVYRzVRYjI5c1pXUkRiR0Z6Y3k1aFpHUlFiMjlzYVc1blZHOG9VbVZoWTNSVmNHUmhkR1Z6Um14MWMyaFVjbUZ1YzJGamRHbHZiaWs3WEc1Y2JtWjFibU4wYVc5dUlHSmhkR05vWldSVmNHUmhkR1Z6S0dOaGJHeGlZV05yTENCaExDQmlMQ0JqTENCa0tTQjdYRzRnSUdWdWMzVnlaVWx1YW1WamRHVmtLQ2s3WEc0Z0lHSmhkR05vYVc1blUzUnlZWFJsWjNrdVltRjBZMmhsWkZWd1pHRjBaWE1vWTJGc2JHSmhZMnNzSUdFc0lHSXNJR01zSUdRcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVGeWNtRjVJR052YlhCaGNtRjBiM0lnWm05eUlGSmxZV04wUTI5dGNHOXVaVzUwY3lCaWVTQnRiM1Z1ZENCdmNtUmxjbWx1Wnk1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JqTVNCbWFYSnpkQ0JqYjIxd2IyNWxiblFnZVc5MUozSmxJR052YlhCaGNtbHVaMXh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRU52YlhCdmJtVnVkSDBnWXpJZ2MyVmpiMjVrSUdOdmJYQnZibVZ1ZENCNWIzVW5jbVVnWTI5dGNHRnlhVzVuWEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlGSmxkSFZ5YmlCMllXeDFaU0IxYzJGaWJHVWdZbmtnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbk52Y25Rb0tTNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2JXOTFiblJQY21SbGNrTnZiWEJoY21GMGIzSW9ZekVzSUdNeUtTQjdYRzRnSUhKbGRIVnliaUJqTVM1ZmJXOTFiblJQY21SbGNpQXRJR015TGw5dGIzVnVkRTl5WkdWeU8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCeWRXNUNZWFJqYUdWa1ZYQmtZWFJsY3loMGNtRnVjMkZqZEdsdmJpa2dlMXh1SUNCMllYSWdiR1Z1SUQwZ2RISmhibk5oWTNScGIyNHVaR2x5ZEhsRGIyMXdiMjVsYm5SelRHVnVaM1JvTzF4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUd4bGJpQTlQVDBnWkdseWRIbERiMjF3YjI1bGJuUnpMbXhsYm1kMGFDeGNiaUFnSUNBblJYaHdaV04wWldRZ1pteDFjMmdnZEhKaGJuTmhZM1JwYjI1Y1hDZHpJSE4wYjNKbFpDQmthWEowZVMxamIyMXdiMjVsYm5SeklHeGxibWQwYUNBb0pYTXBJSFJ2SUNjZ0sxeHVJQ0FnSUNkdFlYUmphQ0JrYVhKMGVTMWpiMjF3YjI1bGJuUnpJR0Z5Y21GNUlHeGxibWQwYUNBb0pYTXBMaWNzWEc0Z0lDQWdiR1Z1TEZ4dUlDQWdJR1JwY25SNVEyOXRjRzl1Wlc1MGN5NXNaVzVuZEdoY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENoc1pXNGdQVDA5SUdScGNuUjVRMjl0Y0c5dVpXNTBjeTVzWlc1bmRHZ3BLVHRjYmx4dUlDQXZMeUJUYVc1alpTQnlaV052Ym1OcGJHbHVaeUJoSUdOdmJYQnZibVZ1ZENCb2FXZG9aWElnYVc0Z2RHaGxJRzkzYm1WeUlHaHBaWEpoY21Ob2VTQjFjM1ZoYkd4NUlDaHViM1JjYmlBZ0x5OGdZV3gzWVhseklDMHRJSE5sWlNCemFHOTFiR1JEYjIxd2IyNWxiblJWY0dSaGRHVW9LU2tnZDJsc2JDQnlaV052Ym1OcGJHVWdZMmhwYkdSeVpXNHNJSEpsWTI5dVkybHNaVnh1SUNBdkx5QjBhR1Z0SUdKbFptOXlaU0IwYUdWcGNpQmphR2xzWkhKbGJpQmllU0J6YjNKMGFXNW5JSFJvWlNCaGNuSmhlUzVjYmlBZ1pHbHlkSGxEYjIxd2IyNWxiblJ6TG5OdmNuUW9iVzkxYm5SUGNtUmxja052YlhCaGNtRjBiM0lwTzF4dVhHNGdJR1p2Y2lBb2RtRnlJR2tnUFNBd095QnBJRHdnYkdWdU95QnBLeXNwSUh0Y2JpQWdJQ0F2THlCSlppQmhJR052YlhCdmJtVnVkQ0JwY3lCMWJtMXZkVzUwWldRZ1ltVm1iM0psSUhCbGJtUnBibWNnWTJoaGJtZGxjeUJoY0hCc2VTd2dhWFFnZDJsc2JDQnpkR2xzYkZ4dUlDQWdJQzh2SUdKbElHaGxjbVVzSUdKMWRDQjNaU0JoYzNOMWJXVWdkR2hoZENCcGRDQm9ZWE1nWTJ4bFlYSmxaQ0JwZEhNZ1gzQmxibVJwYm1kRFlXeHNZbUZqYTNNZ1lXNWtYRzRnSUNBZ0x5OGdkR2hoZENCd1pYSm1iM0p0VlhCa1lYUmxTV1pPWldObGMzTmhjbmtnYVhNZ1lTQnViMjl3TGx4dUlDQWdJSFpoY2lCamIyMXdiMjVsYm5RZ1BTQmthWEowZVVOdmJYQnZibVZ1ZEhOYmFWMDdYRzVjYmlBZ0lDQXZMeUJKWmlCd1pYSm1iM0p0VlhCa1lYUmxTV1pPWldObGMzTmhjbmtnYUdGd2NHVnVjeUIwYnlCbGJuRjFaWFZsSUdGdWVTQnVaWGNnZFhCa1lYUmxjeXdnZDJWY2JpQWdJQ0F2THlCemFHOTFiR1J1SjNRZ1pYaGxZM1YwWlNCMGFHVWdZMkZzYkdKaFkydHpJSFZ1ZEdsc0lIUm9aU0J1WlhoMElISmxibVJsY2lCb1lYQndaVzV6TENCemIxeHVJQ0FnSUM4dklITjBZWE5vSUhSb1pTQmpZV3hzWW1GamEzTWdabWx5YzNSY2JpQWdJQ0IyWVhJZ1kyRnNiR0poWTJ0eklEMGdZMjl0Y0c5dVpXNTBMbDl3Wlc1a2FXNW5RMkZzYkdKaFkydHpPMXh1SUNBZ0lHTnZiWEJ2Ym1WdWRDNWZjR1Z1WkdsdVowTmhiR3hpWVdOcmN5QTlJRzUxYkd3N1hHNWNiaUFnSUNCU1pXRmpkRkpsWTI5dVkybHNaWEl1Y0dWeVptOXliVlZ3WkdGMFpVbG1UbVZqWlhOellYSjVLRnh1SUNBZ0lDQWdZMjl0Y0c5dVpXNTBMRnh1SUNBZ0lDQWdkSEpoYm5OaFkzUnBiMjR1Y21WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI1Y2JpQWdJQ0FwTzF4dVhHNGdJQ0FnYVdZZ0tHTmhiR3hpWVdOcmN5a2dlMXh1SUNBZ0lDQWdabTl5SUNoMllYSWdhaUE5SURBN0lHb2dQQ0JqWVd4c1ltRmphM011YkdWdVozUm9PeUJxS3lzcElIdGNiaUFnSUNBZ0lDQWdkSEpoYm5OaFkzUnBiMjR1WTJGc2JHSmhZMnRSZFdWMVpTNWxibkYxWlhWbEtGeHVJQ0FnSUNBZ0lDQWdJR05oYkd4aVlXTnJjMXRxWFN4Y2JpQWdJQ0FnSUNBZ0lDQmpiMjF3YjI1bGJuUXVaMlYwVUhWaWJHbGpTVzV6ZEdGdVkyVW9LVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVmVnh1WEc1MllYSWdabXgxYzJoQ1lYUmphR1ZrVlhCa1lYUmxjeUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0F2THlCU1pXRmpkRlZ3WkdGMFpYTkdiSFZ6YUZSeVlXNXpZV04wYVc5dUozTWdkM0poY0hCbGNuTWdkMmxzYkNCamJHVmhjaUIwYUdVZ1pHbHlkSGxEYjIxd2IyNWxiblJ6WEc0Z0lDOHZJR0Z5Y21GNUlHRnVaQ0J3WlhKbWIzSnRJR0Z1ZVNCMWNHUmhkR1Z6SUdWdWNYVmxkV1ZrSUdKNUlHMXZkVzUwTFhKbFlXUjVJR2hoYm1Sc1pYSnpJQ2hwTG1VdUxGeHVJQ0F2THlCamIyMXdiMjVsYm5SRWFXUlZjR1JoZEdVcElHSjFkQ0IzWlNCdVpXVmtJSFJ2SUdOb1pXTnJJR2hsY21VZ2RHOXZJR2x1SUc5eVpHVnlJSFJ2SUdOaGRHTm9YRzRnSUM4dklIVndaR0YwWlhNZ1pXNXhkV1YxWldRZ1lua2djMlYwVTNSaGRHVWdZMkZzYkdKaFkydHpJR0Z1WkNCaGMyRndJR05oYkd4ekxseHVJQ0IzYUdsc1pTQW9aR2x5ZEhsRGIyMXdiMjVsYm5SekxteGxibWQwYUNCOGZDQmhjMkZ3Ulc1eGRXVjFaV1FwSUh0Y2JpQWdJQ0JwWmlBb1pHbHlkSGxEYjIxd2IyNWxiblJ6TG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnZG1GeUlIUnlZVzV6WVdOMGFXOXVJRDBnVW1WaFkzUlZjR1JoZEdWelJteDFjMmhVY21GdWMyRmpkR2x2Ymk1blpYUlFiMjlzWldRb0tUdGNiaUFnSUNBZ0lIUnlZVzV6WVdOMGFXOXVMbkJsY21admNtMG9jblZ1UW1GMFkyaGxaRlZ3WkdGMFpYTXNJRzUxYkd3c0lIUnlZVzV6WVdOMGFXOXVLVHRjYmlBZ0lDQWdJRkpsWVdOMFZYQmtZWFJsYzBac2RYTm9WSEpoYm5OaFkzUnBiMjR1Y21Wc1pXRnpaU2gwY21GdWMyRmpkR2x2YmlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHRnpZWEJGYm5GMVpYVmxaQ2tnZTF4dUlDQWdJQ0FnWVhOaGNFVnVjWFZsZFdWa0lEMGdabUZzYzJVN1hHNGdJQ0FnSUNCMllYSWdjWFZsZFdVZ1BTQmhjMkZ3UTJGc2JHSmhZMnRSZFdWMVpUdGNiaUFnSUNBZ0lHRnpZWEJEWVd4c1ltRmphMUYxWlhWbElEMGdRMkZzYkdKaFkydFJkV1YxWlM1blpYUlFiMjlzWldRb0tUdGNiaUFnSUNBZ0lIRjFaWFZsTG01dmRHbG1lVUZzYkNncE8xeHVJQ0FnSUNBZ1EyRnNiR0poWTJ0UmRXVjFaUzV5Wld4bFlYTmxLSEYxWlhWbEtUdGNiaUFnSUNCOVhHNGdJSDFjYm4wN1hHNW1iSFZ6YUVKaGRHTm9aV1JWY0dSaGRHVnpJRDBnVW1WaFkzUlFaWEptTG0xbFlYTjFjbVVvWEc0Z0lDZFNaV0ZqZEZWd1pHRjBaWE1uTEZ4dUlDQW5abXgxYzJoQ1lYUmphR1ZrVlhCa1lYUmxjeWNzWEc0Z0lHWnNkWE5vUW1GMFkyaGxaRlZ3WkdGMFpYTmNiaWs3WEc1Y2JpOHFLbHh1SUNvZ1RXRnlheUJoSUdOdmJYQnZibVZ1ZENCaGN5QnVaV1ZrYVc1bklHRWdjbVZ5Wlc1a1pYSXNJR0ZrWkdsdVp5QmhiaUJ2Y0hScGIyNWhiQ0JqWVd4c1ltRmpheUIwYnlCaFhHNGdLaUJzYVhOMElHOW1JR1oxYm1OMGFXOXVjeUIzYUdsamFDQjNhV3hzSUdKbElHVjRaV04xZEdWa0lHOXVZMlVnZEdobElISmxjbVZ1WkdWeUlHOWpZM1Z5Y3k1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWlc1eGRXVjFaVlZ3WkdGMFpTaGpiMjF3YjI1bGJuUXBJSHRjYmlBZ1pXNXpkWEpsU1c1cVpXTjBaV1FvS1R0Y2JseHVJQ0F2THlCV1lYSnBiM1Z6SUhCaGNuUnpJRzltSUc5MWNpQmpiMlJsSUNoemRXTm9JR0Z6SUZKbFlXTjBRMjl0Y0c5emFYUmxRMjl0Y0c5dVpXNTBKM05jYmlBZ0x5OGdYM0psYm1SbGNsWmhiR2xrWVhSbFpFTnZiWEJ2Ym1WdWRDa2dZWE56ZFcxbElIUm9ZWFFnWTJGc2JITWdkRzhnY21WdVpHVnlJR0Z5Wlc0bmRDQnVaWE4wWldRN1hHNGdJQzh2SUhabGNtbG1lU0IwYUdGMElIUm9ZWFFuY3lCMGFHVWdZMkZ6WlM0Z0tGUm9hWE1nYVhNZ1kyRnNiR1ZrSUdKNUlHVmhZMmdnZEc5d0xXeGxkbVZzSUhWd1pHRjBaVnh1SUNBdkx5Qm1kVzVqZEdsdmJpd2diR2xyWlNCelpYUlFjbTl3Y3l3Z2MyVjBVM1JoZEdVc0lHWnZjbU5sVlhCa1lYUmxMQ0JsZEdNdU95QmpjbVZoZEdsdmJpQmhibVJjYmlBZ0x5OGdaR1Z6ZEhKMVkzUnBiMjRnYjJZZ2RHOXdMV3hsZG1Wc0lHTnZiWEJ2Ym1WdWRITWdhWE1nWjNWaGNtUmxaQ0JwYmlCU1pXRmpkRTF2ZFc1MExpbGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJdVkzVnljbVZ1ZENBOVBTQnVkV3hzTEZ4dUlDQWdJQ2RsYm5GMVpYVmxWWEJrWVhSbEtDazZJRkpsYm1SbGNpQnRaWFJvYjJSeklITm9iM1ZzWkNCaVpTQmhJSEIxY21VZ1puVnVZM1JwYjI0Z2IyWWdjSEp2Y0hNZ0p5QXJYRzRnSUNBZ0oyRnVaQ0J6ZEdGMFpUc2dkSEpwWjJkbGNtbHVaeUJ1WlhOMFpXUWdZMjl0Y0c5dVpXNTBJSFZ3WkdGMFpYTWdabkp2YlNCeVpXNWtaWElnYVhNZ2JtOTBJQ2NnSzF4dUlDQWdJQ2RoYkd4dmQyVmtMaUJKWmlCdVpXTmxjM05oY25rc0lIUnlhV2RuWlhJZ2JtVnpkR1ZrSUhWd1pHRjBaWE1nYVc0Z0p5QXJYRzRnSUNBZ0oyTnZiWEJ2Ym1WdWRFUnBaRlZ3WkdGMFpTNG5YRzRnSUNrZ09pQnVkV3hzS1R0Y2JseHVJQ0JwWmlBb0lXSmhkR05vYVc1blUzUnlZWFJsWjNrdWFYTkNZWFJqYUdsdVoxVndaR0YwWlhNcElIdGNiaUFnSUNCaVlYUmphR2x1WjFOMGNtRjBaV2Q1TG1KaGRHTm9aV1JWY0dSaGRHVnpLR1Z1Y1hWbGRXVlZjR1JoZEdVc0lHTnZiWEJ2Ym1WdWRDazdYRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzVjYmlBZ1pHbHlkSGxEYjIxd2IyNWxiblJ6TG5CMWMyZ29ZMjl0Y0c5dVpXNTBLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkZibkYxWlhWbElHRWdZMkZzYkdKaFkyc2dkRzhnWW1VZ2NuVnVJR0YwSUhSb1pTQmxibVFnYjJZZ2RHaGxJR04xY25KbGJuUWdZbUYwWTJocGJtY2dZM2xqYkdVdUlGUm9jbTkzYzF4dUlDb2dhV1lnYm04Z2RYQmtZWFJsY3lCaGNtVWdZM1Z5Y21WdWRHeDVJR0psYVc1bklIQmxjbVp2Y20xbFpDNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1lYTmhjQ2hqWVd4c1ltRmpheXdnWTI5dWRHVjRkQ2tnZTF4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUdKaGRHTm9hVzVuVTNSeVlYUmxaM2t1YVhOQ1lYUmphR2x1WjFWd1pHRjBaWE1zWEc0Z0lDQWdKMUpsWVdOMFZYQmtZWFJsY3k1aGMyRndPaUJEWVc1Y1hDZDBJR1Z1Y1hWbGRXVWdZVzRnWVhOaGNDQmpZV3hzWW1GamF5QnBiaUJoSUdOdmJuUmxlSFFnZDJobGNtVW5JQ3RjYmlBZ0lDQW5kWEJrWVhSbGN5QmhjbVVnYm05MElHSmxhVzVuSUdKaGRHTm9aV1F1SjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0dKaGRHTm9hVzVuVTNSeVlYUmxaM2t1YVhOQ1lYUmphR2x1WjFWd1pHRjBaWE1wS1R0Y2JpQWdZWE5oY0VOaGJHeGlZV05yVVhWbGRXVXVaVzV4ZFdWMVpTaGpZV3hzWW1GamF5d2dZMjl1ZEdWNGRDazdYRzRnSUdGellYQkZibkYxWlhWbFpDQTlJSFJ5ZFdVN1hHNTlYRzVjYm5aaGNpQlNaV0ZqZEZWd1pHRjBaWE5KYm1wbFkzUnBiMjRnUFNCN1hHNGdJR2x1YW1WamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVPaUJtZFc1amRHbHZiaWhTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2YmlrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Yml4Y2JpQWdJQ0FnSUNkU1pXRmpkRlZ3WkdGMFpYTTZJRzExYzNRZ2NISnZkbWxrWlNCaElISmxZMjl1WTJsc1pTQjBjbUZ1YzJGamRHbHZiaUJqYkdGemN5ZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1S1NrN1hHNGdJQ0FnVW1WaFkzUlZjR1JoZEdWekxsSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI0Z1BTQlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZianRjYmlBZ2ZTeGNibHh1SUNCcGJtcGxZM1JDWVhSamFHbHVaMU4wY21GMFpXZDVPaUJtZFc1amRHbHZiaWhmWW1GMFkyaHBibWRUZEhKaGRHVm5lU2tnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQmZZbUYwWTJocGJtZFRkSEpoZEdWbmVTeGNiaUFnSUNBZ0lDZFNaV0ZqZEZWd1pHRjBaWE02SUcxMWMzUWdjSEp2ZG1sa1pTQmhJR0poZEdOb2FXNW5JSE4wY21GMFpXZDVKMXh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvWDJKaGRHTm9hVzVuVTNSeVlYUmxaM2twS1R0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdkSGx3Wlc5bUlGOWlZWFJqYUdsdVoxTjBjbUYwWldkNUxtSmhkR05vWldSVmNHUmhkR1Z6SUQwOVBTQW5ablZ1WTNScGIyNG5MRnh1SUNBZ0lDQWdKMUpsWVdOMFZYQmtZWFJsY3pvZ2JYVnpkQ0J3Y205MmFXUmxJR0VnWW1GMFkyaGxaRlZ3WkdGMFpYTW9LU0JtZFc1amRHbHZiaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hSNWNHVnZaaUJmWW1GMFkyaHBibWRUZEhKaGRHVm5lUzVpWVhSamFHVmtWWEJrWVhSbGN5QTlQVDBnSjJaMWJtTjBhVzl1SnlrcE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0IwZVhCbGIyWWdYMkpoZEdOb2FXNW5VM1J5WVhSbFoza3VhWE5DWVhSamFHbHVaMVZ3WkdGMFpYTWdQVDA5SUNkaWIyOXNaV0Z1Snl4Y2JpQWdJQ0FnSUNkU1pXRmpkRlZ3WkdGMFpYTTZJRzExYzNRZ2NISnZkbWxrWlNCaGJpQnBjMEpoZEdOb2FXNW5WWEJrWVhSbGN5QmliMjlzWldGdUlHRjBkSEpwWW5WMFpTZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLSFI1Y0dWdlppQmZZbUYwWTJocGJtZFRkSEpoZEdWbmVTNXBjMEpoZEdOb2FXNW5WWEJrWVhSbGN5QTlQVDBnSjJKdmIyeGxZVzRuS1NrN1hHNGdJQ0FnWW1GMFkyaHBibWRUZEhKaGRHVm5lU0E5SUY5aVlYUmphR2x1WjFOMGNtRjBaV2Q1TzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnVW1WaFkzUlZjR1JoZEdWeklEMGdlMXh1SUNBdktpcGNiaUFnSUNvZ1VtVmhZM1FnY21WbVpYSmxibU5sY3lCZ1VtVmhZM1JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ym1BZ2RYTnBibWNnZEdocGN5QndjbTl3WlhKMGVTQnBiaUJ2Y21SbGNseHVJQ0FnS2lCMGJ5QmhiR3h2ZHlCa1pYQmxibVJsYm1ONUlHbHVhbVZqZEdsdmJpNWNiaUFnSUNwY2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCU1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1T2lCdWRXeHNMRnh1WEc0Z0lHSmhkR05vWldSVmNHUmhkR1Z6T2lCaVlYUmphR1ZrVlhCa1lYUmxjeXhjYmlBZ1pXNXhkV1YxWlZWd1pHRjBaVG9nWlc1eGRXVjFaVlZ3WkdGMFpTeGNiaUFnWm14MWMyaENZWFJqYUdWa1ZYQmtZWFJsY3pvZ1pteDFjMmhDWVhSamFHVmtWWEJrWVhSbGN5eGNiaUFnYVc1cVpXTjBhVzl1T2lCU1pXRmpkRlZ3WkdGMFpYTkpibXBsWTNScGIyNHNYRzRnSUdGellYQTZJR0Z6WVhCY2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUlZjR1JoZEdWek8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFdpdGhBZGRvbnNcbiAqL1xuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGV4aXN0cyBwdXJlbHkgaW4gdGhlIG9wZW4gc291cmNlIHByb2plY3QsIGFuZCBpcyBtZWFudCBhcyBhIHdheVxuICogdG8gY3JlYXRlIGEgc2VwYXJhdGUgc3RhbmRhbG9uZSBidWlsZCBvZiBSZWFjdC4gVGhpcyBidWlsZCBoYXMgXCJhZGRvbnNcIiwgb3JcbiAqIGZ1bmN0aW9uYWxpdHkgd2UndmUgYnVpbHQgYW5kIHRoaW5rIG1pZ2h0IGJlIHVzZWZ1bCBidXQgZG9lc24ndCBoYXZlIGEgZ29vZFxuICogcGxhY2UgdG8gbGl2ZSBpbnNpZGUgUmVhY3QgY29yZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBMaW5rZWRTdGF0ZU1peGluID0gcmVxdWlyZShcIi4vTGlua2VkU3RhdGVNaXhpblwiKTtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCIuL1JlYWN0XCIpO1xudmFyIFJlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpbiA9XG4gIHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpblwiKTtcbnZhciBSZWFjdENTU1RyYW5zaXRpb25Hcm91cCA9IHJlcXVpcmUoXCIuL1JlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwXCIpO1xudmFyIFJlYWN0RnJhZ21lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEZyYWdtZW50XCIpO1xudmFyIFJlYWN0VHJhbnNpdGlvbkdyb3VwID0gcmVxdWlyZShcIi4vUmVhY3RUcmFuc2l0aW9uR3JvdXBcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgY3ggPSByZXF1aXJlKFwiLi9jeFwiKTtcbnZhciBjbG9uZVdpdGhQcm9wcyA9IHJlcXVpcmUoXCIuL2Nsb25lV2l0aFByb3BzXCIpO1xudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIuL3VwZGF0ZVwiKTtcblxuUmVhY3QuYWRkb25zID0ge1xuICBDU1NUcmFuc2l0aW9uR3JvdXA6IFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwLFxuICBMaW5rZWRTdGF0ZU1peGluOiBMaW5rZWRTdGF0ZU1peGluLFxuICBQdXJlUmVuZGVyTWl4aW46IFJlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpbixcbiAgVHJhbnNpdGlvbkdyb3VwOiBSZWFjdFRyYW5zaXRpb25Hcm91cCxcblxuICBiYXRjaGVkVXBkYXRlczogUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzLFxuICBjbGFzc1NldDogY3gsXG4gIGNsb25lV2l0aFByb3BzOiBjbG9uZVdpdGhQcm9wcyxcbiAgY3JlYXRlRnJhZ21lbnQ6IFJlYWN0RnJhZ21lbnQuY3JlYXRlLFxuICB1cGRhdGU6IHVwZGF0ZVxufTtcblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICBSZWFjdC5hZGRvbnMuUGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0RGVmYXVsdFBlcmZcIik7XG4gIFJlYWN0LmFkZG9ucy5UZXN0VXRpbHMgPSByZXF1aXJlKFwiLi9SZWFjdFRlc3RVdGlsc1wiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JYYVhSb1FXUmtiMjV6TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSWGFYUm9RV1JrYjI1elhHNGdLaTljYmx4dUx5b3FYRzRnS2lCVWFHbHpJRzF2WkhWc1pTQmxlR2x6ZEhNZ2NIVnlaV3g1SUdsdUlIUm9aU0J2Y0dWdUlITnZkWEpqWlNCd2NtOXFaV04wTENCaGJtUWdhWE1nYldWaGJuUWdZWE1nWVNCM1lYbGNiaUFxSUhSdklHTnlaV0YwWlNCaElITmxjR0Z5WVhSbElITjBZVzVrWVd4dmJtVWdZblZwYkdRZ2IyWWdVbVZoWTNRdUlGUm9hWE1nWW5WcGJHUWdhR0Z6SUZ3aVlXUmtiMjV6WENJc0lHOXlYRzRnS2lCbWRXNWpkR2x2Ym1Gc2FYUjVJSGRsSjNabElHSjFhV3gwSUdGdVpDQjBhR2x1YXlCdGFXZG9kQ0JpWlNCMWMyVm1kV3dnWW5WMElHUnZaWE51SjNRZ2FHRjJaU0JoSUdkdmIyUmNiaUFxSUhCc1lXTmxJSFJ2SUd4cGRtVWdhVzV6YVdSbElGSmxZV04wSUdOdmNtVXVYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnVEdsdWEyVmtVM1JoZEdWTmFYaHBiaUE5SUhKbGNYVnBjbVVvWENJdUwweHBibXRsWkZOMFlYUmxUV2w0YVc1Y0lpazdYRzUyWVhJZ1VtVmhZM1FnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZ3aUtUdGNiblpoY2lCU1pXRmpkRU52YlhCdmJtVnVkRmRwZEdoUWRYSmxVbVZ1WkdWeVRXbDRhVzRnUFZ4dUlDQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiWEJ2Ym1WdWRGZHBkR2hRZFhKbFVtVnVaR1Z5VFdsNGFXNWNJaWs3WEc1MllYSWdVbVZoWTNSRFUxTlVjbUZ1YzJsMGFXOXVSM0p2ZFhBZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTlRVMVJ5WVc1emFYUnBiMjVIY205MWNGd2lLVHRjYm5aaGNpQlNaV0ZqZEVaeVlXZHRaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSR2NtRm5iV1Z1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRlJ5WVc1emFYUnBiMjVIY205MWNDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBWSEpoYm5OcGRHbHZia2R5YjNWd1hDSXBPMXh1ZG1GeUlGSmxZV04wVlhCa1lYUmxjeUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVlhCa1lYUmxjMXdpS1R0Y2JseHVkbUZ5SUdONElEMGdjbVZ4ZFdseVpTaGNJaTR2WTNoY0lpazdYRzUyWVhJZ1kyeHZibVZYYVhSb1VISnZjSE1nUFNCeVpYRjFhWEpsS0Z3aUxpOWpiRzl1WlZkcGRHaFFjbTl3YzF3aUtUdGNiblpoY2lCMWNHUmhkR1VnUFNCeVpYRjFhWEpsS0Z3aUxpOTFjR1JoZEdWY0lpazdYRzVjYmxKbFlXTjBMbUZrWkc5dWN5QTlJSHRjYmlBZ1ExTlRWSEpoYm5OcGRHbHZia2R5YjNWd09pQlNaV0ZqZEVOVFUxUnlZVzV6YVhScGIyNUhjbTkxY0N4Y2JpQWdUR2x1YTJWa1UzUmhkR1ZOYVhocGJqb2dUR2x1YTJWa1UzUmhkR1ZOYVhocGJpeGNiaUFnVUhWeVpWSmxibVJsY2sxcGVHbHVPaUJTWldGamRFTnZiWEJ2Ym1WdWRGZHBkR2hRZFhKbFVtVnVaR1Z5VFdsNGFXNHNYRzRnSUZSeVlXNXphWFJwYjI1SGNtOTFjRG9nVW1WaFkzUlVjbUZ1YzJsMGFXOXVSM0p2ZFhBc1hHNWNiaUFnWW1GMFkyaGxaRlZ3WkdGMFpYTTZJRkpsWVdOMFZYQmtZWFJsY3k1aVlYUmphR1ZrVlhCa1lYUmxjeXhjYmlBZ1kyeGhjM05UWlhRNklHTjRMRnh1SUNCamJHOXVaVmRwZEdoUWNtOXdjem9nWTJ4dmJtVlhhWFJvVUhKdmNITXNYRzRnSUdOeVpXRjBaVVp5WVdkdFpXNTBPaUJTWldGamRFWnlZV2R0Wlc1MExtTnlaV0YwWlN4Y2JpQWdkWEJrWVhSbE9pQjFjR1JoZEdWY2JuMDdYRzVjYm1sbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdVbVZoWTNRdVlXUmtiMjV6TGxCbGNtWWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVJsWm1GMWJIUlFaWEptWENJcE8xeHVJQ0JTWldGamRDNWhaR1J2Ym5NdVZHVnpkRlYwYVd4eklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlVaWE4wVlhScGJITmNJaWs3WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNRN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFNWR0RPTVByb3BlcnR5Q29uZmlnXG4gKi9cblxuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZShcIi4vRE9NUHJvcGVydHlcIik7XG5cbnZhciBNVVNUX1VTRV9BVFRSSUJVVEUgPSBET01Qcm9wZXJ0eS5pbmplY3Rpb24uTVVTVF9VU0VfQVRUUklCVVRFO1xuXG52YXIgU1ZHRE9NUHJvcGVydHlDb25maWcgPSB7XG4gIFByb3BlcnRpZXM6IHtcbiAgICBjbGlwUGF0aDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGN4OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgY3k6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBkOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZHg6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBkeTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZpbGw6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmaWxsT3BhY2l0eTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZvbnRGYW1pbHk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmb250U2l6ZTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZ4OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZnk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBncmFkaWVudFRyYW5zZm9ybTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGdyYWRpZW50VW5pdHM6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBtYXJrZXJFbmQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBtYXJrZXJNaWQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBtYXJrZXJTdGFydDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIG9mZnNldDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIG9wYWNpdHk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBwYXR0ZXJuQ29udGVudFVuaXRzOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcGF0dGVyblVuaXRzOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcG9pbnRzOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcHJlc2VydmVBc3BlY3RSYXRpbzogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHI6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICByeDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHJ5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3ByZWFkTWV0aG9kOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3RvcENvbG9yOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3RvcE9wYWNpdHk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzdHJva2U6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzdHJva2VEYXNoYXJyYXk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzdHJva2VMaW5lY2FwOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3Ryb2tlT3BhY2l0eTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0cm9rZVdpZHRoOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgdGV4dEFuY2hvcjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHRyYW5zZm9ybTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHZlcnNpb246IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB2aWV3Qm94OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgeDE6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB4MjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHg6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB5MTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHkyOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgeTogTVVTVF9VU0VfQVRUUklCVVRFXG4gIH0sXG4gIERPTUF0dHJpYnV0ZU5hbWVzOiB7XG4gICAgY2xpcFBhdGg6ICdjbGlwLXBhdGgnLFxuICAgIGZpbGxPcGFjaXR5OiAnZmlsbC1vcGFjaXR5JyxcbiAgICBmb250RmFtaWx5OiAnZm9udC1mYW1pbHknLFxuICAgIGZvbnRTaXplOiAnZm9udC1zaXplJyxcbiAgICBncmFkaWVudFRyYW5zZm9ybTogJ2dyYWRpZW50VHJhbnNmb3JtJyxcbiAgICBncmFkaWVudFVuaXRzOiAnZ3JhZGllbnRVbml0cycsXG4gICAgbWFya2VyRW5kOiAnbWFya2VyLWVuZCcsXG4gICAgbWFya2VyTWlkOiAnbWFya2VyLW1pZCcsXG4gICAgbWFya2VyU3RhcnQ6ICdtYXJrZXItc3RhcnQnLFxuICAgIHBhdHRlcm5Db250ZW50VW5pdHM6ICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgICBwYXR0ZXJuVW5pdHM6ICdwYXR0ZXJuVW5pdHMnLFxuICAgIHByZXNlcnZlQXNwZWN0UmF0aW86ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcbiAgICBzcHJlYWRNZXRob2Q6ICdzcHJlYWRNZXRob2QnLFxuICAgIHN0b3BDb2xvcjogJ3N0b3AtY29sb3InLFxuICAgIHN0b3BPcGFjaXR5OiAnc3RvcC1vcGFjaXR5JyxcbiAgICBzdHJva2VEYXNoYXJyYXk6ICdzdHJva2UtZGFzaGFycmF5JyxcbiAgICBzdHJva2VMaW5lY2FwOiAnc3Ryb2tlLWxpbmVjYXAnLFxuICAgIHN0cm9rZU9wYWNpdHk6ICdzdHJva2Utb3BhY2l0eScsXG4gICAgc3Ryb2tlV2lkdGg6ICdzdHJva2Utd2lkdGgnLFxuICAgIHRleHRBbmNob3I6ICd0ZXh0LWFuY2hvcicsXG4gICAgdmlld0JveDogJ3ZpZXdCb3gnXG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU1ZHRE9NUHJvcGVydHlDb25maWc7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU2VsZWN0RXZlbnRQbHVnaW5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKFwiLi9FdmVudFByb3BhZ2F0b3JzXCIpO1xudmFyIFJlYWN0SW5wdXRTZWxlY3Rpb24gPSByZXF1aXJlKFwiLi9SZWFjdElucHV0U2VsZWN0aW9uXCIpO1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG5cbnZhciBnZXRBY3RpdmVFbGVtZW50ID0gcmVxdWlyZShcIi4vZ2V0QWN0aXZlRWxlbWVudFwiKTtcbnZhciBpc1RleHRJbnB1dEVsZW1lbnQgPSByZXF1aXJlKFwiLi9pc1RleHRJbnB1dEVsZW1lbnRcIik7XG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcbnZhciBzaGFsbG93RXF1YWwgPSByZXF1aXJlKFwiLi9zaGFsbG93RXF1YWxcIik7XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIHNlbGVjdDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25TZWxlY3Q6IG51bGx9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25TZWxlY3RDYXB0dXJlOiBudWxsfSlcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BCbHVyLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BDb250ZXh0TWVudSxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wRm9jdXMsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleURvd24sXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlRG93bixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VVcCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdlXG4gICAgXVxuICB9XG59O1xuXG52YXIgYWN0aXZlRWxlbWVudCA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudElEID0gbnVsbDtcbnZhciBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbnZhciBtb3VzZURvd24gPSBmYWxzZTtcblxuLyoqXG4gKiBHZXQgYW4gb2JqZWN0IHdoaWNoIGlzIGEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgbm90IGJlIGNvbnNpc3RlbnQgYWNyb3NzIG5vZGVzIG9yIGJyb3dzZXJzLCBidXRcbiAqIHR3byBpZGVudGljYWwgc2VsZWN0aW9ucyBvbiB0aGUgc2FtZSBub2RlIHdpbGwgcmV0dXJuIGlkZW50aWNhbCBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihub2RlKSB7XG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIG5vZGUgJiZcbiAgICAgIFJlYWN0SW5wdXRTZWxlY3Rpb24uaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKSB7XG4gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudEVsZW1lbnQ6IHJhbmdlLnBhcmVudEVsZW1lbnQoKSxcbiAgICAgIHRleHQ6IHJhbmdlLnRleHQsXG4gICAgICB0b3A6IHJhbmdlLmJvdW5kaW5nVG9wLFxuICAgICAgbGVmdDogcmFuZ2UuYm91bmRpbmdMZWZ0XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9TeW50aGV0aWNFdmVudH1cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFuZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBtYXRjaGVzIG5hdGl2ZSBgc2VsZWN0YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3RcbiAgLy8gZmlyZXMgb25seSBvbiBpbnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5vIGZvY3VzZWQgZWxlbWVudCB3ZVxuICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgaWYgKG1vdXNlRG93biB8fFxuICAgICAgYWN0aXZlRWxlbWVudCA9PSBudWxsIHx8XG4gICAgICBhY3RpdmVFbGVtZW50ICE9PSBnZXRBY3RpdmVFbGVtZW50KCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE9ubHkgZmlyZSB3aGVuIHNlbGVjdGlvbiBoYXMgYWN0dWFsbHkgY2hhbmdlZC5cbiAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oYWN0aXZlRWxlbWVudCk7XG4gIGlmICghbGFzdFNlbGVjdGlvbiB8fCAhc2hhbGxvd0VxdWFsKGxhc3RTZWxlY3Rpb24sIGN1cnJlbnRTZWxlY3Rpb24pKSB7XG4gICAgbGFzdFNlbGVjdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb247XG5cbiAgICB2YXIgc3ludGhldGljRXZlbnQgPSBTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoXG4gICAgICBldmVudFR5cGVzLnNlbGVjdCxcbiAgICAgIGFjdGl2ZUVsZW1lbnRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKTtcblxuICAgIHN5bnRoZXRpY0V2ZW50LnR5cGUgPSAnc2VsZWN0JztcbiAgICBzeW50aGV0aWNFdmVudC50YXJnZXQgPSBhY3RpdmVFbGVtZW50O1xuXG4gICAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKHN5bnRoZXRpY0V2ZW50KTtcblxuICAgIHJldHVybiBzeW50aGV0aWNFdmVudDtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uU2VsZWN0YCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgc2VsZWN0IGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gY29udGVudEVkaXRhYmxlXG4gKlxuICogVGhpcyBkaWZmZXJzIGZyb20gbmF0aXZlIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqIC0gRmlyZXMgb24gY29udGVudEVkaXRhYmxlIGZpZWxkcyBhcyB3ZWxsIGFzIGlucHV0cy5cbiAqIC0gRmlyZXMgZm9yIGNvbGxhcHNlZCBzZWxlY3Rpb24uXG4gKiAtIEZpcmVzIGFmdGVyIHVzZXIgaW5wdXQuXG4gKi9cbnZhciBTZWxlY3RFdmVudFBsdWdpbiA9IHtcblxuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50c31cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnQpIHtcblxuICAgIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgICAvLyBUcmFjayB0aGUgaW5wdXQgbm9kZSB0aGF0IGhhcyBmb2N1cy5cbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BGb2N1czpcbiAgICAgICAgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0b3BMZXZlbFRhcmdldCkgfHxcbiAgICAgICAgICAgIHRvcExldmVsVGFyZ2V0LmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgYWN0aXZlRWxlbWVudCA9IHRvcExldmVsVGFyZ2V0O1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnRJRCA9IHRvcExldmVsVGFyZ2V0SUQ7XG4gICAgICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQmx1cjpcbiAgICAgICAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnRJRCA9IG51bGw7XG4gICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gRG9uJ3QgZmlyZSB0aGUgZXZlbnQgd2hpbGUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcuIFRoaXMgbWF0Y2hlcyB0aGVcbiAgICAgIC8vIHNlbWFudGljcyBvZiB0aGUgbmF0aXZlIHNlbGVjdCBldmVudC5cbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd246XG4gICAgICAgIG1vdXNlRG93biA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvbnRleHRNZW51OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlVXA6XG4gICAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gY29uc3RydWN0U2VsZWN0RXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgICAvLyBDaHJvbWUgYW5kIElFIGZpcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHdoZW4gc2VsZWN0aW9uIGlzIGNoYW5nZWQgKGFuZFxuICAgICAgLy8gc29tZXRpbWVzIHdoZW4gaXQgaGFzbid0KS5cbiAgICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvbmNoYW5nZSwgc28gY2hlY2sgc2VsZWN0aW9uIHN0YXR1c1xuICAgICAgLy8gYWZ0ZXIgZWFjaCBrZXkgZW50cnkuIFRoZSBzZWxlY3Rpb24gY2hhbmdlcyBhZnRlciBrZXlkb3duIGFuZCBiZWZvcmVcbiAgICAgIC8vIGtleXVwLCBidXQgd2UgY2hlY2sgb24ga2V5ZG93biBhcyB3ZWxsIGluIHRoZSBjYXNlIG9mIGhvbGRpbmcgZG93biBhXG4gICAgICAvLyBrZXksIHdoZW4gbXVsdGlwbGUga2V5ZG93biBldmVudHMgYXJlIGZpcmVkIGJ1dCBvbmx5IG9uZSBrZXl1cCBpcy5cbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BTZWxlY3Rpb25DaGFuZ2U6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5RG93bjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcDpcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFNlbGVjdEV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0RXZlbnRQbHVnaW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU2VydmVyUmVhY3RSb290SW5kZXhcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNpemUgb2YgdGhlIHJlYWN0Um9vdCBJRCBzcGFjZS4gV2UgZ2VuZXJhdGUgcmFuZG9tIG51bWJlcnMgZm9yIFJlYWN0IHJvb3RcbiAqIElEcyBhbmQgaWYgdGhlcmUncyBhIGNvbGxpc2lvbiB0aGUgZXZlbnRzIGFuZCBET00gdXBkYXRlIHN5c3RlbSB3aWxsXG4gKiBnZXQgY29uZnVzZWQuIEluIHRoZSBmdXR1cmUgd2UgbmVlZCBhIHdheSB0byBnZW5lcmF0ZSBHVUlEcyBidXQgZm9yXG4gKiBub3cgdGhpcyB3aWxsIHdvcmsgb24gYSBzbWFsbGVyIHNjYWxlLlxuICovXG52YXIgR0xPQkFMX01PVU5UX1BPSU5UX01BWCA9IE1hdGgucG93KDIsIDUzKTtcblxudmFyIFNlcnZlclJlYWN0Um9vdEluZGV4ID0ge1xuICBjcmVhdGVSZWFjdFJvb3RJbmRleDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbChNYXRoLnJhbmRvbSgpICogR0xPQkFMX01PVU5UX1BPSU5UX01BWCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2VydmVyUmVhY3RSb290SW5kZXg7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFNpbXBsZUV2ZW50UGx1Z2luXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFBsdWdpblV0aWxzID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5VdGlsc1wiKTtcbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZShcIi4vRXZlbnRQcm9wYWdhdG9yc1wiKTtcbnZhciBTeW50aGV0aWNDbGlwYm9hcmRFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0NsaXBib2FyZEV2ZW50XCIpO1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG52YXIgU3ludGhldGljRm9jdXNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0ZvY3VzRXZlbnRcIik7XG52YXIgU3ludGhldGljS2V5Ym9hcmRFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0tleWJvYXJkRXZlbnRcIik7XG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY01vdXNlRXZlbnRcIik7XG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRHJhZ0V2ZW50XCIpO1xudmFyIFN5bnRoZXRpY1RvdWNoRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNUb3VjaEV2ZW50XCIpO1xudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNVSUV2ZW50XCIpO1xudmFyIFN5bnRoZXRpY1doZWVsRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNXaGVlbEV2ZW50XCIpO1xuXG52YXIgZ2V0RXZlbnRDaGFyQ29kZSA9IHJlcXVpcmUoXCIuL2dldEV2ZW50Q2hhckNvZGVcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzO1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgYmx1cjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25CbHVyOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQmx1ckNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgY2xpY2s6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ2xpY2s6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25DbGlja0NhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgY29udGV4dE1lbnU6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ29udGV4dE1lbnU6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Db250ZXh0TWVudUNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgY29weToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Db3B5OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ29weUNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgY3V0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkN1dDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkN1dENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZG91YmxlQ2xpY2s6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRG91YmxlQ2xpY2s6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Eb3VibGVDbGlja0NhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZHJhZzoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ0NhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZHJhZ0VuZDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnRW5kOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ0VuZENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZHJhZ0VudGVyOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdFbnRlcjogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdFbnRlckNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZHJhZ0V4aXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZ0V4aXQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnRXhpdENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZHJhZ0xlYXZlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdMZWF2ZTogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdMZWF2ZUNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZHJhZ092ZXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZ092ZXI6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnT3ZlckNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZHJhZ1N0YXJ0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdTdGFydDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdTdGFydENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZHJvcDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Ecm9wOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJvcENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZm9jdXM6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRm9jdXM6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Gb2N1c0NhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgaW5wdXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uSW5wdXQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25JbnB1dENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAga2V5RG93bjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25LZXlEb3duOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uS2V5RG93bkNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAga2V5UHJlc3M6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uS2V5UHJlc3M6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25LZXlQcmVzc0NhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAga2V5VXA6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uS2V5VXA6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25LZXlVcENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgbG9hZDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Mb2FkOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uTG9hZENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRXJyb3I6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25FcnJvckNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgLy8gTm90ZTogV2UgZG8gbm90IGFsbG93IGxpc3RlbmluZyB0byBtb3VzZU92ZXIgZXZlbnRzLiBJbnN0ZWFkLCB1c2UgdGhlXG4gIC8vIG9uTW91c2VFbnRlci9vbk1vdXNlTGVhdmUgY3JlYXRlZCBieSBgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luYC5cbiAgbW91c2VEb3duOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbk1vdXNlRG93bjogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbk1vdXNlRG93bkNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgbW91c2VNb3ZlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbk1vdXNlTW92ZTogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbk1vdXNlTW92ZUNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgbW91c2VPdXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uTW91c2VPdXQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZU91dENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgbW91c2VPdmVyOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbk1vdXNlT3ZlcjogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbk1vdXNlT3ZlckNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgbW91c2VVcDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZVVwOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uTW91c2VVcENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgcGFzdGU6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uUGFzdGU6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25QYXN0ZUNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgcmVzZXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uUmVzZXQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25SZXNldENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgc2Nyb2xsOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblNjcm9sbDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblNjcm9sbENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgc3VibWl0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblN1Ym1pdDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblN1Ym1pdENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgdG91Y2hDYW5jZWw6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uVG91Y2hDYW5jZWw6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Ub3VjaENhbmNlbENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgdG91Y2hFbmQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uVG91Y2hFbmQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Ub3VjaEVuZENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgdG91Y2hNb3ZlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblRvdWNoTW92ZTogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblRvdWNoTW92ZUNhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgdG91Y2hTdGFydDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Ub3VjaFN0YXJ0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uVG91Y2hTdGFydENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfSxcbiAgd2hlZWw6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uV2hlZWw6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25XaGVlbENhcHR1cmU6IHRydWV9KVxuICAgIH1cbiAgfVxufTtcblxudmFyIHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZyA9IHtcbiAgdG9wQmx1cjogICAgICAgIGV2ZW50VHlwZXMuYmx1cixcbiAgdG9wQ2xpY2s6ICAgICAgIGV2ZW50VHlwZXMuY2xpY2ssXG4gIHRvcENvbnRleHRNZW51OiBldmVudFR5cGVzLmNvbnRleHRNZW51LFxuICB0b3BDb3B5OiAgICAgICAgZXZlbnRUeXBlcy5jb3B5LFxuICB0b3BDdXQ6ICAgICAgICAgZXZlbnRUeXBlcy5jdXQsXG4gIHRvcERvdWJsZUNsaWNrOiBldmVudFR5cGVzLmRvdWJsZUNsaWNrLFxuICB0b3BEcmFnOiAgICAgICAgZXZlbnRUeXBlcy5kcmFnLFxuICB0b3BEcmFnRW5kOiAgICAgZXZlbnRUeXBlcy5kcmFnRW5kLFxuICB0b3BEcmFnRW50ZXI6ICAgZXZlbnRUeXBlcy5kcmFnRW50ZXIsXG4gIHRvcERyYWdFeGl0OiAgICBldmVudFR5cGVzLmRyYWdFeGl0LFxuICB0b3BEcmFnTGVhdmU6ICAgZXZlbnRUeXBlcy5kcmFnTGVhdmUsXG4gIHRvcERyYWdPdmVyOiAgICBldmVudFR5cGVzLmRyYWdPdmVyLFxuICB0b3BEcmFnU3RhcnQ6ICAgZXZlbnRUeXBlcy5kcmFnU3RhcnQsXG4gIHRvcERyb3A6ICAgICAgICBldmVudFR5cGVzLmRyb3AsXG4gIHRvcEVycm9yOiAgICAgICBldmVudFR5cGVzLmVycm9yLFxuICB0b3BGb2N1czogICAgICAgZXZlbnRUeXBlcy5mb2N1cyxcbiAgdG9wSW5wdXQ6ICAgICAgIGV2ZW50VHlwZXMuaW5wdXQsXG4gIHRvcEtleURvd246ICAgICBldmVudFR5cGVzLmtleURvd24sXG4gIHRvcEtleVByZXNzOiAgICBldmVudFR5cGVzLmtleVByZXNzLFxuICB0b3BLZXlVcDogICAgICAgZXZlbnRUeXBlcy5rZXlVcCxcbiAgdG9wTG9hZDogICAgICAgIGV2ZW50VHlwZXMubG9hZCxcbiAgdG9wTW91c2VEb3duOiAgIGV2ZW50VHlwZXMubW91c2VEb3duLFxuICB0b3BNb3VzZU1vdmU6ICAgZXZlbnRUeXBlcy5tb3VzZU1vdmUsXG4gIHRvcE1vdXNlT3V0OiAgICBldmVudFR5cGVzLm1vdXNlT3V0LFxuICB0b3BNb3VzZU92ZXI6ICAgZXZlbnRUeXBlcy5tb3VzZU92ZXIsXG4gIHRvcE1vdXNlVXA6ICAgICBldmVudFR5cGVzLm1vdXNlVXAsXG4gIHRvcFBhc3RlOiAgICAgICBldmVudFR5cGVzLnBhc3RlLFxuICB0b3BSZXNldDogICAgICAgZXZlbnRUeXBlcy5yZXNldCxcbiAgdG9wU2Nyb2xsOiAgICAgIGV2ZW50VHlwZXMuc2Nyb2xsLFxuICB0b3BTdWJtaXQ6ICAgICAgZXZlbnRUeXBlcy5zdWJtaXQsXG4gIHRvcFRvdWNoQ2FuY2VsOiBldmVudFR5cGVzLnRvdWNoQ2FuY2VsLFxuICB0b3BUb3VjaEVuZDogICAgZXZlbnRUeXBlcy50b3VjaEVuZCxcbiAgdG9wVG91Y2hNb3ZlOiAgIGV2ZW50VHlwZXMudG91Y2hNb3ZlLFxuICB0b3BUb3VjaFN0YXJ0OiAgZXZlbnRUeXBlcy50b3VjaFN0YXJ0LFxuICB0b3BXaGVlbDogICAgICAgZXZlbnRUeXBlcy53aGVlbFxufTtcblxuZm9yICh2YXIgdHlwZSBpbiB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWcpIHtcbiAgdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnW3R5cGVdLmRlcGVuZGVuY2llcyA9IFt0eXBlXTtcbn1cblxudmFyIFNpbXBsZUV2ZW50UGx1Z2luID0ge1xuXG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgLyoqXG4gICAqIFNhbWUgYXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGV4Y2VwdCBjYW5jZWxzIHRoZSBldmVudCB3aGVuIHJldHVyblxuICAgKiB2YWx1ZSBpcyBmYWxzZS4gVGhpcyBiZWhhdmlvciB3aWxsIGJlIGRpc2FibGVkIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBFdmVudCB0byBiZSBkaXNwYXRjaGVkLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBBcHBsaWNhdGlvbi1sZXZlbCBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRvbUlEIERPTSBJRCB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIGV4ZWN1dGVEaXNwYXRjaDogZnVuY3Rpb24oZXZlbnQsIGxpc3RlbmVyLCBkb21JRCkge1xuICAgIHZhciByZXR1cm5WYWx1ZSA9IEV2ZW50UGx1Z2luVXRpbHMuZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgZG9tSUQpO1xuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICB0eXBlb2YgcmV0dXJuVmFsdWUgIT09ICdib29sZWFuJyxcbiAgICAgICdSZXR1cm5pbmcgYGZhbHNlYCBmcm9tIGFuIGV2ZW50IGhhbmRsZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSAnICtcbiAgICAgICdpZ25vcmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIEluc3RlYWQsIG1hbnVhbGx5IGNhbGwgJyArXG4gICAgICAnZS5zdG9wUHJvcGFnYXRpb24oKSBvciBlLnByZXZlbnREZWZhdWx0KCksIGFzIGFwcHJvcHJpYXRlLidcbiAgICApIDogbnVsbCk7XG5cbiAgICBpZiAocmV0dXJuVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50c31cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnQpIHtcbiAgICB2YXIgZGlzcGF0Y2hDb25maWcgPSB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWdbdG9wTGV2ZWxUeXBlXTtcbiAgICBpZiAoIWRpc3BhdGNoQ29uZmlnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIEV2ZW50Q29uc3RydWN0b3I7XG4gICAgc3dpdGNoICh0b3BMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BJbnB1dDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BMb2FkOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEVycm9yOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFJlc2V0OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFN1Ym1pdDpcbiAgICAgICAgLy8gSFRNTCBFdmVudHNcbiAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9pbmRleC5odG1sI2V2ZW50cy0wXG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3M6XG4gICAgICAgIC8vIEZpcmVGb3ggY3JlYXRlcyBhIGtleXByZXNzIGV2ZW50IGZvciBmdW5jdGlvbiBrZXlzIHRvby4gVGhpcyByZW1vdmVzXG4gICAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBldmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAgIC8vIG5vbi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBpc24ndCkuXG4gICAgICAgIGlmIChnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVVwOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQmx1cjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BGb2N1czpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENsaWNrOlxuICAgICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBjbGljayBldmVudCBvbiByaWdodCBtb3VzZSBjbGlja3MuIFRoaXMgcmVtb3ZlcyB0aGVcbiAgICAgICAgLy8gdW53YW50ZWQgY2xpY2sgZXZlbnRzLlxuICAgICAgICBpZiAobmF0aXZlRXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvbnRleHRNZW51OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERvdWJsZUNsaWNrOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlRG93bjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU1vdmU6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VPdXQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VPdmVyOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlVXA6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyYWdFbmQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ0VudGVyOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyYWdFeGl0OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyYWdMZWF2ZTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnT3ZlcjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnU3RhcnQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJvcDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0RyYWdFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wVG91Y2hDYW5jZWw6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wVG91Y2hFbmQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wVG91Y2hNb3ZlOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoU3RhcnQ6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BTY3JvbGw6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNVSUV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BXaGVlbDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvcHk6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wQ3V0OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFBhc3RlOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgRXZlbnRDb25zdHJ1Y3RvcixcbiAgICAgICdTaW1wbGVFdmVudFBsdWdpbjogVW5oYW5kbGVkIGV2ZW50IHR5cGUsIGAlc2AuJyxcbiAgICAgIHRvcExldmVsVHlwZVxuICAgICkgOiBpbnZhcmlhbnQoRXZlbnRDb25zdHJ1Y3RvcikpO1xuICAgIHZhciBldmVudCA9IEV2ZW50Q29uc3RydWN0b3IuZ2V0UG9vbGVkKFxuICAgICAgZGlzcGF0Y2hDb25maWcsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApO1xuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2ltcGxlRXZlbnRQbHVnaW47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVMmx0Y0d4bFJYWmxiblJRYkhWbmFXNHVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JUYVcxd2JHVkZkbVZ1ZEZCc2RXZHBibHh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUVWMlpXNTBRMjl1YzNSaGJuUnpJRDBnY21WeGRXbHlaU2hjSWk0dlJYWmxiblJEYjI1emRHRnVkSE5jSWlrN1hHNTJZWElnUlhabGJuUlFiSFZuYVc1VmRHbHNjeUE5SUhKbGNYVnBjbVVvWENJdUwwVjJaVzUwVUd4MVoybHVWWFJwYkhOY0lpazdYRzUyWVhJZ1JYWmxiblJRY205d1lXZGhkRzl5Y3lBOUlISmxjWFZwY21Vb1hDSXVMMFYyWlc1MFVISnZjR0ZuWVhSdmNuTmNJaWs3WEc1MllYSWdVM2x1ZEdobGRHbGpRMnhwY0dKdllYSmtSWFpsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlUZVc1MGFHVjBhV05EYkdsd1ltOWhjbVJGZG1WdWRGd2lLVHRjYm5aaGNpQlRlVzUwYUdWMGFXTkZkbVZ1ZENBOUlISmxjWFZwY21Vb1hDSXVMMU41Ym5Sb1pYUnBZMFYyWlc1MFhDSXBPMXh1ZG1GeUlGTjViblJvWlhScFkwWnZZM1Z6UlhabGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5VGVXNTBhR1YwYVdOR2IyTjFjMFYyWlc1MFhDSXBPMXh1ZG1GeUlGTjViblJvWlhScFkwdGxlV0p2WVhKa1JYWmxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVRlVzUwYUdWMGFXTkxaWGxpYjJGeVpFVjJaVzUwWENJcE8xeHVkbUZ5SUZONWJuUm9aWFJwWTAxdmRYTmxSWFpsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlUZVc1MGFHVjBhV05OYjNWelpVVjJaVzUwWENJcE8xeHVkbUZ5SUZONWJuUm9aWFJwWTBSeVlXZEZkbVZ1ZENBOUlISmxjWFZwY21Vb1hDSXVMMU41Ym5Sb1pYUnBZMFJ5WVdkRmRtVnVkRndpS1R0Y2JuWmhjaUJUZVc1MGFHVjBhV05VYjNWamFFVjJaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVM2x1ZEdobGRHbGpWRzkxWTJoRmRtVnVkRndpS1R0Y2JuWmhjaUJUZVc1MGFHVjBhV05WU1VWMlpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlUzbHVkR2hsZEdsalZVbEZkbVZ1ZEZ3aUtUdGNiblpoY2lCVGVXNTBhR1YwYVdOWGFHVmxiRVYyWlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VTNsdWRHaGxkR2xqVjJobFpXeEZkbVZ1ZEZ3aUtUdGNibHh1ZG1GeUlHZGxkRVYyWlc1MFEyaGhja052WkdVZ1BTQnlaWEYxYVhKbEtGd2lMaTluWlhSRmRtVnVkRU5vWVhKRGIyUmxYQ0lwTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dWRtRnlJR3RsZVU5bUlEMGdjbVZ4ZFdseVpTaGNJaTR2YTJWNVQyWmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiblpoY2lCMGIzQk1aWFpsYkZSNWNHVnpJRDBnUlhabGJuUkRiMjV6ZEdGdWRITXVkRzl3VEdWMlpXeFVlWEJsY3p0Y2JseHVkbUZ5SUdWMlpXNTBWSGx3WlhNZ1BTQjdYRzRnSUdKc2RYSTZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVFteDFjam9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZia0pzZFhKRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR05zYVdOck9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtOc2FXTnJPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVRMnhwWTJ0RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR052Ym5SbGVIUk5aVzUxT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia052Ym5SbGVIUk5aVzUxT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1UTI5dWRHVjRkRTFsYm5WRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR052Y0hrNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1UTI5d2VUb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJrTnZjSGxEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHTjFkRG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNURkWFE2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVEZFhSRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J2ZFdKc1pVTnNhV05yT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia1J2ZFdKc1pVTnNhV05yT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1Ukc5MVlteGxRMnhwWTJ0RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdjNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1UkhKaFp6b2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJrUnlZV2REWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnlZV2RGYm1RNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1UkhKaFowVnVaRG9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZia1J5WVdkRmJtUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXZEZiblJsY2pvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVFY21GblJXNTBaWEk2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVFY21GblJXNTBaWEpEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnlZV2RGZUdsME9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtSeVlXZEZlR2wwT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1UkhKaFowVjRhWFJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnlZV2RNWldGMlpUb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1RWNtRm5UR1ZoZG1VNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1RWNtRm5UR1ZoZG1WRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdkUGRtVnlPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrUnlZV2RQZG1WeU9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVJISmhaMDkyWlhKRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdkVGRHRnlkRG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNUVjbUZuVTNSaGNuUTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNUVjbUZuVTNSaGNuUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeWIzQTZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVJISnZjRG9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZia1J5YjNCRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1p2WTNWek9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtadlkzVnpPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVSbTlqZFhORFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR2x1Y0hWME9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtsdWNIVjBPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVTVzV3ZFhSRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR3RsZVVSdmQyNDZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVMyVjVSRzkzYmpvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2Ymt0bGVVUnZkMjVEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHdGxlVkJ5WlhOek9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2Ymt0bGVWQnlaWE56T2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1UzJWNVVISmxjM05EWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHdGxlVlZ3T2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia3RsZVZWd09pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVMyVjVWWEJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHeHZZV1E2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVURzloWkRvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2Ymt4dllXUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdWeWNtOXlPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrVnljbTl5T2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1UlhKeWIzSkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUM4dklFNXZkR1U2SUZkbElHUnZJRzV2ZENCaGJHeHZkeUJzYVhOMFpXNXBibWNnZEc4Z2JXOTFjMlZQZG1WeUlHVjJaVzUwY3k0Z1NXNXpkR1ZoWkN3Z2RYTmxJSFJvWlZ4dUlDQXZMeUJ2YmsxdmRYTmxSVzUwWlhJdmIyNU5iM1Z6WlV4bFlYWmxJR055WldGMFpXUWdZbmtnWUVWdWRHVnlUR1ZoZG1WRmRtVnVkRkJzZFdkcGJtQXVYRzRnSUcxdmRYTmxSRzkzYmpvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVOYjNWelpVUnZkMjQ2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVOYjNWelpVUnZkMjVEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHMXZkWE5sVFc5MlpUb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1TmIzVnpaVTF2ZG1VNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1TmIzVnpaVTF2ZG1WRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJRzF2ZFhObFQzVjBPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrMXZkWE5sVDNWME9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVRXOTFjMlZQZFhSRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJRzF2ZFhObFQzWmxjam9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNU5iM1Z6WlU5MlpYSTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNU5iM1Z6WlU5MlpYSkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUcxdmRYTmxWWEE2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVUVzkxYzJWVmNEb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJrMXZkWE5sVlhCRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSEJoYzNSbE9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmxCaGMzUmxPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVVR0Z6ZEdWRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSEpsYzJWME9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmxKbGMyVjBPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVVbVZ6WlhSRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSE5qY205c2JEb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1VFkzSnZiR3c2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVUWTNKdmJHeERZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhOMVltMXBkRG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNVRkV0p0YVhRNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1VGRXSnRhWFJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lIUnZkV05vUTJGdVkyVnNPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJsUnZkV05vUTJGdVkyVnNPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVWRzkxWTJoRFlXNWpaV3hEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lIUnZkV05vUlc1a09pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmxSdmRXTm9SVzVrT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1Vkc5MVkyaEZibVJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lIUnZkV05vVFc5MlpUb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1VWIzVmphRTF2ZG1VNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1VWIzVmphRTF2ZG1WRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSFJ2ZFdOb1UzUmhjblE2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVWRzkxWTJoVGRHRnlkRG9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZibFJ2ZFdOb1UzUmhjblJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lIZG9aV1ZzT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZibGRvWldWc09pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVYyaGxaV3hEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDFjYm4wN1hHNWNiblpoY2lCMGIzQk1aWFpsYkVWMlpXNTBjMVJ2UkdsemNHRjBZMmhEYjI1bWFXY2dQU0I3WEc0Z0lIUnZjRUpzZFhJNklDQWdJQ0FnSUNCbGRtVnVkRlI1Y0dWekxtSnNkWElzWEc0Z0lIUnZjRU5zYVdOck9pQWdJQ0FnSUNCbGRtVnVkRlI1Y0dWekxtTnNhV05yTEZ4dUlDQjBiM0JEYjI1MFpYaDBUV1Z1ZFRvZ1pYWmxiblJVZVhCbGN5NWpiMjUwWlhoMFRXVnVkU3hjYmlBZ2RHOXdRMjl3ZVRvZ0lDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdVkyOXdlU3hjYmlBZ2RHOXdRM1YwT2lBZ0lDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdVkzVjBMRnh1SUNCMGIzQkViM1ZpYkdWRGJHbGphem9nWlhabGJuUlVlWEJsY3k1a2IzVmliR1ZEYkdsamF5eGNiaUFnZEc5d1JISmhaem9nSUNBZ0lDQWdJR1YyWlc1MFZIbHdaWE11WkhKaFp5eGNiaUFnZEc5d1JISmhaMFZ1WkRvZ0lDQWdJR1YyWlc1MFZIbHdaWE11WkhKaFowVnVaQ3hjYmlBZ2RHOXdSSEpoWjBWdWRHVnlPaUFnSUdWMlpXNTBWSGx3WlhNdVpISmhaMFZ1ZEdWeUxGeHVJQ0IwYjNCRWNtRm5SWGhwZERvZ0lDQWdaWFpsYm5SVWVYQmxjeTVrY21GblJYaHBkQ3hjYmlBZ2RHOXdSSEpoWjB4bFlYWmxPaUFnSUdWMlpXNTBWSGx3WlhNdVpISmhaMHhsWVhabExGeHVJQ0IwYjNCRWNtRm5UM1psY2pvZ0lDQWdaWFpsYm5SVWVYQmxjeTVrY21GblQzWmxjaXhjYmlBZ2RHOXdSSEpoWjFOMFlYSjBPaUFnSUdWMlpXNTBWSGx3WlhNdVpISmhaMU4wWVhKMExGeHVJQ0IwYjNCRWNtOXdPaUFnSUNBZ0lDQWdaWFpsYm5SVWVYQmxjeTVrY205d0xGeHVJQ0IwYjNCRmNuSnZjam9nSUNBZ0lDQWdaWFpsYm5SVWVYQmxjeTVsY25KdmNpeGNiaUFnZEc5d1JtOWpkWE02SUNBZ0lDQWdJR1YyWlc1MFZIbHdaWE11Wm05amRYTXNYRzRnSUhSdmNFbHVjSFYwT2lBZ0lDQWdJQ0JsZG1WdWRGUjVjR1Z6TG1sdWNIVjBMRnh1SUNCMGIzQkxaWGxFYjNkdU9pQWdJQ0FnWlhabGJuUlVlWEJsY3k1clpYbEViM2R1TEZ4dUlDQjBiM0JMWlhsUWNtVnpjem9nSUNBZ1pYWmxiblJVZVhCbGN5NXJaWGxRY21WemN5eGNiaUFnZEc5d1MyVjVWWEE2SUNBZ0lDQWdJR1YyWlc1MFZIbHdaWE11YTJWNVZYQXNYRzRnSUhSdmNFeHZZV1E2SUNBZ0lDQWdJQ0JsZG1WdWRGUjVjR1Z6TG14dllXUXNYRzRnSUhSdmNFMXZkWE5sUkc5M2Jqb2dJQ0JsZG1WdWRGUjVjR1Z6TG0xdmRYTmxSRzkzYml4Y2JpQWdkRzl3VFc5MWMyVk5iM1psT2lBZ0lHVjJaVzUwVkhsd1pYTXViVzkxYzJWTmIzWmxMRnh1SUNCMGIzQk5iM1Z6WlU5MWREb2dJQ0FnWlhabGJuUlVlWEJsY3k1dGIzVnpaVTkxZEN4Y2JpQWdkRzl3VFc5MWMyVlBkbVZ5T2lBZ0lHVjJaVzUwVkhsd1pYTXViVzkxYzJWUGRtVnlMRnh1SUNCMGIzQk5iM1Z6WlZWd09pQWdJQ0FnWlhabGJuUlVlWEJsY3k1dGIzVnpaVlZ3TEZ4dUlDQjBiM0JRWVhOMFpUb2dJQ0FnSUNBZ1pYWmxiblJVZVhCbGN5NXdZWE4wWlN4Y2JpQWdkRzl3VW1WelpYUTZJQ0FnSUNBZ0lHVjJaVzUwVkhsd1pYTXVjbVZ6WlhRc1hHNGdJSFJ2Y0ZOamNtOXNiRG9nSUNBZ0lDQmxkbVZ1ZEZSNWNHVnpMbk5qY205c2JDeGNiaUFnZEc5d1UzVmliV2wwT2lBZ0lDQWdJR1YyWlc1MFZIbHdaWE11YzNWaWJXbDBMRnh1SUNCMGIzQlViM1ZqYUVOaGJtTmxiRG9nWlhabGJuUlVlWEJsY3k1MGIzVmphRU5oYm1ObGJDeGNiaUFnZEc5d1ZHOTFZMmhGYm1RNklDQWdJR1YyWlc1MFZIbHdaWE11ZEc5MVkyaEZibVFzWEc0Z0lIUnZjRlJ2ZFdOb1RXOTJaVG9nSUNCbGRtVnVkRlI1Y0dWekxuUnZkV05vVFc5MlpTeGNiaUFnZEc5d1ZHOTFZMmhUZEdGeWREb2dJR1YyWlc1MFZIbHdaWE11ZEc5MVkyaFRkR0Z5ZEN4Y2JpQWdkRzl3VjJobFpXdzZJQ0FnSUNBZ0lHVjJaVzUwVkhsd1pYTXVkMmhsWld4Y2JuMDdYRzVjYm1admNpQW9kbUZ5SUhSNWNHVWdhVzRnZEc5d1RHVjJaV3hGZG1WdWRITlViMFJwYzNCaGRHTm9RMjl1Wm1sbktTQjdYRzRnSUhSdmNFeGxkbVZzUlhabGJuUnpWRzlFYVhOd1lYUmphRU52Ym1acFoxdDBlWEJsWFM1a1pYQmxibVJsYm1OcFpYTWdQU0JiZEhsd1pWMDdYRzU5WEc1Y2JuWmhjaUJUYVcxd2JHVkZkbVZ1ZEZCc2RXZHBiaUE5SUh0Y2JseHVJQ0JsZG1WdWRGUjVjR1Z6T2lCbGRtVnVkRlI1Y0dWekxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVFlXMWxJR0Z6SUhSb1pTQmtaV1poZFd4MElHbHRjR3hsYldWdWRHRjBhVzl1TENCbGVHTmxjSFFnWTJGdVkyVnNjeUIwYUdVZ1pYWmxiblFnZDJobGJpQnlaWFIxY201Y2JpQWdJQ29nZG1Gc2RXVWdhWE1nWm1Gc2MyVXVJRlJvYVhNZ1ltVm9ZWFpwYjNJZ2QybHNiQ0JpWlNCa2FYTmhZbXhsWkNCcGJpQmhJR1oxZEhWeVpTQnlaV3hsWVhObExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdSWFpsYm5RZ2RHOGdZbVVnWkdsemNHRjBZMmhsWkM1Y2JpQWdJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnUVhCd2JHbGpZWFJwYjI0dGJHVjJaV3dnWTJGc2JHSmhZMnN1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmtiMjFKUkNCRVQwMGdTVVFnZEc4Z2NHRnpjeUIwYnlCMGFHVWdZMkZzYkdKaFkyc3VYRzRnSUNBcUwxeHVJQ0JsZUdWamRYUmxSR2x6Y0dGMFkyZzZJR1oxYm1OMGFXOXVLR1YyWlc1MExDQnNhWE4wWlc1bGNpd2daRzl0U1VRcElIdGNiaUFnSUNCMllYSWdjbVYwZFhKdVZtRnNkV1VnUFNCRmRtVnVkRkJzZFdkcGJsVjBhV3h6TG1WNFpXTjFkR1ZFYVhOd1lYUmphQ2hsZG1WdWRDd2diR2x6ZEdWdVpYSXNJR1J2YlVsRUtUdGNibHh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnZEhsd1pXOW1JSEpsZEhWeWJsWmhiSFZsSUNFOVBTQW5ZbTl2YkdWaGJpY3NYRzRnSUNBZ0lDQW5VbVYwZFhKdWFXNW5JR0JtWVd4elpXQWdabkp2YlNCaGJpQmxkbVZ1ZENCb1lXNWtiR1Z5SUdseklHUmxjSEpsWTJGMFpXUWdZVzVrSUhkcGJHd2dZbVVnSnlBclhHNGdJQ0FnSUNBbmFXZHViM0psWkNCcGJpQmhJR1oxZEhWeVpTQnlaV3hsWVhObExpQkpibk4wWldGa0xDQnRZVzUxWVd4c2VTQmpZV3hzSUNjZ0sxeHVJQ0FnSUNBZ0oyVXVjM1J2Y0ZCeWIzQmhaMkYwYVc5dUtDa2diM0lnWlM1d2NtVjJaVzUwUkdWbVlYVnNkQ2dwTENCaGN5QmhjSEJ5YjNCeWFXRjBaUzRuWEc0Z0lDQWdLU0E2SUc1MWJHd3BPMXh1WEc0Z0lDQWdhV1lnS0hKbGRIVnlibFpoYkhWbElEMDlQU0JtWVd4elpTa2dlMXh1SUNBZ0lDQWdaWFpsYm5RdWMzUnZjRkJ5YjNCaFoyRjBhVzl1S0NrN1hHNGdJQ0FnSUNCbGRtVnVkQzV3Y21WMlpXNTBSR1ZtWVhWc2RDZ3BPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFJ2Y0V4bGRtVnNWSGx3WlNCU1pXTnZjbVFnWm5KdmJTQmdSWFpsYm5SRGIyNXpkR0Z1ZEhOZ0xseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVjJaVzUwVkdGeVoyVjBmU0IwYjNCTVpYWmxiRlJoY21kbGRDQlVhR1VnYkdsemRHVnVhVzVuSUdOdmJYQnZibVZ1ZENCeWIyOTBJRzV2WkdVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IwYjNCTVpYWmxiRlJoY21kbGRFbEVJRWxFSUc5bUlHQjBiM0JNWlhabGJGUmhjbWRsZEdBdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J1WVhScGRtVkZkbVZ1ZENCT1lYUnBkbVVnWW5KdmQzTmxjaUJsZG1WdWRDNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN0tuMGdRVzRnWVdOamRXMTFiR0YwYVc5dUlHOW1JSE41Ym5Sb1pYUnBZeUJsZG1WdWRITXVYRzRnSUNBcUlFQnpaV1VnZTBWMlpXNTBVR3gxWjJsdVNIVmlMbVY0ZEhKaFkzUkZkbVZ1ZEhOOVhHNGdJQ0FxTDF4dUlDQmxlSFJ5WVdOMFJYWmxiblJ6T2lCbWRXNWpkR2x2YmloY2JpQWdJQ0FnSUhSdmNFeGxkbVZzVkhsd1pTeGNiaUFnSUNBZ0lIUnZjRXhsZG1Wc1ZHRnlaMlYwTEZ4dUlDQWdJQ0FnZEc5d1RHVjJaV3hVWVhKblpYUkpSQ3hjYmlBZ0lDQWdJRzVoZEdsMlpVVjJaVzUwS1NCN1hHNGdJQ0FnZG1GeUlHUnBjM0JoZEdOb1EyOXVabWxuSUQwZ2RHOXdUR1YyWld4RmRtVnVkSE5VYjBScGMzQmhkR05vUTI5dVptbG5XM1J2Y0V4bGRtVnNWSGx3WlYwN1hHNGdJQ0FnYVdZZ0tDRmthWE53WVhSamFFTnZibVpwWnlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQkZkbVZ1ZEVOdmJuTjBjblZqZEc5eU8xeHVJQ0FnSUhOM2FYUmphQ0FvZEc5d1RHVjJaV3hVZVhCbEtTQjdYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3U1c1d2RYUTZYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3VEc5aFpEcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JGY25KdmNqcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JTWlhObGREcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JUZFdKdGFYUTZYRzRnSUNBZ0lDQWdJQzh2SUVoVVRVd2dSWFpsYm5SelhHNGdJQ0FnSUNBZ0lDOHZJRUJ6WldVZ2FIUjBjRG92TDNkM2R5NTNNeTV2Y21jdlZGSXZhSFJ0YkRVdmFXNWtaWGd1YUhSdGJDTmxkbVZ1ZEhNdE1GeHVJQ0FnSUNBZ0lDQkZkbVZ1ZEVOdmJuTjBjblZqZEc5eUlEMGdVM2x1ZEdobGRHbGpSWFpsYm5RN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFdGxlVkJ5WlhOek9seHVJQ0FnSUNBZ0lDQXZMeUJHYVhKbFJtOTRJR055WldGMFpYTWdZU0JyWlhsd2NtVnpjeUJsZG1WdWRDQm1iM0lnWm5WdVkzUnBiMjRnYTJWNWN5QjBiMjh1SUZSb2FYTWdjbVZ0YjNabGMxeHVJQ0FnSUNBZ0lDQXZMeUIwYUdVZ2RXNTNZVzUwWldRZ2EyVjVjSEpsYzNNZ1pYWmxiblJ6TGlCRmJuUmxjaUJwY3lCb2IzZGxkbVZ5SUdKdmRHZ2djSEpwYm5SaFlteGxJR0Z1WkZ4dUlDQWdJQ0FnSUNBdkx5QnViMjR0Y0hKcGJuUmhZbXhsTGlCUGJtVWdkMjkxYkdRZ1pYaHdaV04wSUZSaFlpQjBieUJpWlNCaGN5QjNaV3hzSUNoaWRYUWdhWFFnYVhOdUozUXBMbHh1SUNBZ0lDQWdJQ0JwWmlBb1oyVjBSWFpsYm5SRGFHRnlRMjlrWlNodVlYUnBkbVZGZG1WdWRDa2dQVDA5SURBcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQXZLaUJtWVd4c2N5QjBhSEp2ZFdkb0lDb3ZYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3UzJWNVJHOTNianBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCTFpYbFZjRHBjYmlBZ0lDQWdJQ0FnUlhabGJuUkRiMjV6ZEhKMVkzUnZjaUE5SUZONWJuUm9aWFJwWTB0bGVXSnZZWEprUlhabGJuUTdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRUpzZFhJNlhHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdSbTlqZFhNNlhHNGdJQ0FnSUNBZ0lFVjJaVzUwUTI5dWMzUnlkV04wYjNJZ1BTQlRlVzUwYUdWMGFXTkdiMk4xYzBWMlpXNTBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JEYkdsamF6cGNiaUFnSUNBZ0lDQWdMeThnUm1seVpXWnZlQ0JqY21WaGRHVnpJR0VnWTJ4cFkyc2daWFpsYm5RZ2IyNGdjbWxuYUhRZ2JXOTFjMlVnWTJ4cFkydHpMaUJVYUdseklISmxiVzkyWlhNZ2RHaGxYRzRnSUNBZ0lDQWdJQzh2SUhWdWQyRnVkR1ZrSUdOc2FXTnJJR1YyWlc1MGN5NWNiaUFnSUNBZ0lDQWdhV1lnS0c1aGRHbDJaVVYyWlc1MExtSjFkSFJ2YmlBOVBUMGdNaWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4cUlHWmhiR3h6SUhSb2NtOTFaMmdnS2k5Y2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkRiMjUwWlhoMFRXVnVkVHBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRWIzVmliR1ZEYkdsamF6cGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JOYjNWelpVUnZkMjQ2WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1RXOTFjMlZOYjNabE9seHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRTF2ZFhObFQzVjBPbHh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0UxdmRYTmxUM1psY2pwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQk5iM1Z6WlZWd09seHVJQ0FnSUNBZ0lDQkZkbVZ1ZEVOdmJuTjBjblZqZEc5eUlEMGdVM2x1ZEdobGRHbGpUVzkxYzJWRmRtVnVkRHRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3UkhKaFp6cGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JFY21GblJXNWtPbHh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0VSeVlXZEZiblJsY2pwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkVjbUZuUlhocGREcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JFY21GblRHVmhkbVU2WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1JISmhaMDkyWlhJNlhHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdSSEpoWjFOMFlYSjBPbHh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0VSeWIzQTZYRzRnSUNBZ0lDQWdJRVYyWlc1MFEyOXVjM1J5ZFdOMGIzSWdQU0JUZVc1MGFHVjBhV05FY21GblJYWmxiblE3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0ZSdmRXTm9RMkZ1WTJWc09seHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRlJ2ZFdOb1JXNWtPbHh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0ZSdmRXTm9UVzkyWlRwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQlViM1ZqYUZOMFlYSjBPbHh1SUNBZ0lDQWdJQ0JGZG1WdWRFTnZibk4wY25WamRHOXlJRDBnVTNsdWRHaGxkR2xqVkc5MVkyaEZkbVZ1ZER0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1UyTnliMnhzT2x4dUlDQWdJQ0FnSUNCRmRtVnVkRU52Ym5OMGNuVmpkRzl5SUQwZ1UzbHVkR2hsZEdsalZVbEZkbVZ1ZER0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1YyaGxaV3c2WEc0Z0lDQWdJQ0FnSUVWMlpXNTBRMjl1YzNSeWRXTjBiM0lnUFNCVGVXNTBhR1YwYVdOWGFHVmxiRVYyWlc1ME8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkRiM0I1T2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFTjFkRHBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCUVlYTjBaVHBjYmlBZ0lDQWdJQ0FnUlhabGJuUkRiMjV6ZEhKMVkzUnZjaUE5SUZONWJuUm9aWFJwWTBOc2FYQmliMkZ5WkVWMlpXNTBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJRVYyWlc1MFEyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQW5VMmx0Y0d4bFJYWmxiblJRYkhWbmFXNDZJRlZ1YUdGdVpHeGxaQ0JsZG1WdWRDQjBlWEJsTENCZ0pYTmdMaWNzWEc0Z0lDQWdJQ0IwYjNCTVpYWmxiRlI1Y0dWY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtFVjJaVzUwUTI5dWMzUnlkV04wYjNJcEtUdGNiaUFnSUNCMllYSWdaWFpsYm5RZ1BTQkZkbVZ1ZEVOdmJuTjBjblZqZEc5eUxtZGxkRkJ2YjJ4bFpDaGNiaUFnSUNBZ0lHUnBjM0JoZEdOb1EyOXVabWxuTEZ4dUlDQWdJQ0FnZEc5d1RHVjJaV3hVWVhKblpYUkpSQ3hjYmlBZ0lDQWdJRzVoZEdsMlpVVjJaVzUwWEc0Z0lDQWdLVHRjYmlBZ0lDQkZkbVZ1ZEZCeWIzQmhaMkYwYjNKekxtRmpZM1Z0ZFd4aGRHVlVkMjlRYUdGelpVUnBjM0JoZEdOb1pYTW9aWFpsYm5RcE8xeHVJQ0FnSUhKbGRIVnliaUJsZG1WdWREdGNiaUFnZlZ4dVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZOcGJYQnNaVVYyWlc1MFVHeDFaMmx1TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljQ2xpcGJvYXJkRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NsaXBib2FyZC1hcGlzL1xuICovXG52YXIgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICdjbGlwYm9hcmREYXRhJyBpbiBldmVudCA/XG4gICAgICAgIGV2ZW50LmNsaXBib2FyZERhdGEgOlxuICAgICAgICB3aW5kb3cuY2xpcGJvYXJkRGF0YVxuICAgICk7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50LCBDbGlwYm9hcmRFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljQ29tcG9zaXRpb25FdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtY29tcG9zaXRpb25ldmVudHNcbiAqL1xudmFyIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGRhdGE6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoXG4gIGRpc3BhdGNoQ29uZmlnLFxuICBkaXNwYXRjaE1hcmtlcixcbiAgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzKFxuICBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LFxuICBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlXG4pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljRHJhZ0V2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNNb3VzZUV2ZW50XCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRHJhZ0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIERyYWdFdmVudEludGVyZmFjZSA9IHtcbiAgZGF0YVRyYW5zZmVyOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNEcmFnRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNNb3VzZUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY01vdXNlRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY0RyYWdFdmVudCwgRHJhZ0V2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG52YXIgZ2V0RXZlbnRUYXJnZXQgPSByZXF1aXJlKFwiLi9nZXRFdmVudFRhcmdldFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICB0eXBlOiBudWxsLFxuICB0YXJnZXQ6IGdldEV2ZW50VGFyZ2V0LFxuICAvLyBjdXJyZW50VGFyZ2V0IGlzIHNldCB3aGVuIGRpc3BhdGNoaW5nOyBubyB1c2UgaW4gY29weWluZyBpdCBoZXJlXG4gIGN1cnJlbnRUYXJnZXQ6IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsLFxuICBldmVudFBoYXNlOiBudWxsLFxuICBidWJibGVzOiBudWxsLFxuICBjYW5jZWxhYmxlOiBudWxsLFxuICB0aW1lU3RhbXA6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICB9LFxuICBkZWZhdWx0UHJldmVudGVkOiBudWxsLFxuICBpc1RydXN0ZWQ6IG51bGxcbn07XG5cbi8qKlxuICogU3ludGhldGljIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2FsbHkgaW4gcmVzcG9uc2UgdG8gYVxuICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlci5cbiAqXG4gKiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICogY29sbGVjdGlvbi4gVGhlIHN5c3RlbSBzaG91bGQgY2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gKiBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgaW50byB0aGUgcG9vbCBhZnRlciBiZWluZyBkaXNwYXRjaGVkLiBVc2VycyB0aGF0XG4gKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZva2UgYHBlcnNpc3RgLlxuICpcbiAqIFN5bnRoZXRpYyBldmVudHMgKGFuZCBzdWJjbGFzc2VzKSBpbXBsZW1lbnQgdGhlIERPTSBMZXZlbCAzIEV2ZW50cyBBUEkgYnlcbiAqIG5vcm1hbGl6aW5nIGJyb3dzZXIgcXVpcmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxlbWVudCBhXG4gKiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZlbnRzIGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHRoaXMuZGlzcGF0Y2hDb25maWcgPSBkaXNwYXRjaENvbmZpZztcbiAgdGhpcy5kaXNwYXRjaE1hcmtlciA9IGRpc3BhdGNoTWFya2VyO1xuICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG5cbiAgdmFyIEludGVyZmFjZSA9IHRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO1xuICBmb3IgKHZhciBwcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICBpZiAoIUludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgbm9ybWFsaXplID0gSW50ZXJmYWNlW3Byb3BOYW1lXTtcbiAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICB0aGlzW3Byb3BOYW1lXSA9IG5vcm1hbGl6ZShuYXRpdmVFdmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbcHJvcE5hbWVdO1xuICAgIH1cbiAgfVxuXG4gIHZhciBkZWZhdWx0UHJldmVudGVkID0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID9cbiAgICBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkIDpcbiAgICBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG4gIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZTtcbiAgfVxuICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlO1xufVxuXG5hc3NpZ24oU3ludGhldGljRXZlbnQucHJvdG90eXBlLCB7XG5cbiAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWU7XG4gIH0sXG5cbiAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdlIHJlbGVhc2UgYWxsIGRpc3BhdGNoZWQgYFN5bnRoZXRpY0V2ZW50YHMgYWZ0ZXIgZWFjaCBldmVudCBsb29wLCBhZGRpbmdcbiAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICovXG4gIHBlcnNpc3Q6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNQZXJzaXN0ZW50ID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBzaG91bGQgbm90IGJlIHJlbGVhc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBpc1BlcnNpc3RlbnQ6IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZSxcblxuICAvKipcbiAgICogYFBvb2xlZENsYXNzYCBsb29rcyBmb3IgYGRlc3RydWN0b3JgIG9uIGVhY2ggaW5zdGFuY2UgaXQgcmVsZWFzZXMuXG4gICAqL1xuICBkZXN0cnVjdG9yOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgSW50ZXJmYWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgICB0aGlzW3Byb3BOYW1lXSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuZGlzcGF0Y2hDb25maWcgPSBudWxsO1xuICAgIHRoaXMuZGlzcGF0Y2hNYXJrZXIgPSBudWxsO1xuICAgIHRoaXMubmF0aXZlRXZlbnQgPSBudWxsO1xuICB9XG5cbn0pO1xuXG5TeW50aGV0aWNFdmVudC5JbnRlcmZhY2UgPSBFdmVudEludGVyZmFjZTtcblxuLyoqXG4gKiBIZWxwZXIgdG8gcmVkdWNlIGJvaWxlcnBsYXRlIHdoZW4gY3JlYXRpbmcgc3ViY2xhc3Nlcy5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBDbGFzc1xuICogQHBhcmFtIHs/b2JqZWN0fSBJbnRlcmZhY2VcbiAqL1xuU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzID0gZnVuY3Rpb24oQ2xhc3MsIEludGVyZmFjZSkge1xuICB2YXIgU3VwZXIgPSB0aGlzO1xuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN1cGVyLnByb3RvdHlwZSk7XG4gIGFzc2lnbihwcm90b3R5cGUsIENsYXNzLnByb3RvdHlwZSk7XG4gIENsYXNzLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xhc3M7XG5cbiAgQ2xhc3MuSW50ZXJmYWNlID0gYXNzaWduKHt9LCBTdXBlci5JbnRlcmZhY2UsIEludGVyZmFjZSk7XG4gIENsYXNzLmF1Z21lbnRDbGFzcyA9IFN1cGVyLmF1Z21lbnRDbGFzcztcblxuICBQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oQ2xhc3MsIFBvb2xlZENsYXNzLnRocmVlQXJndW1lbnRQb29sZXIpO1xufTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFN5bnRoZXRpY0V2ZW50LCBQb29sZWRDbGFzcy50aHJlZUFyZ3VtZW50UG9vbGVyKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNGb2N1c0V2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNVSUV2ZW50XCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBGb2N1c0V2ZW50SW50ZXJmYWNlID0ge1xuICByZWxhdGVkVGFyZ2V0OiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNGb2N1c0V2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljVUlFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNGb2N1c0V2ZW50LCBGb2N1c0V2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0lucHV0RXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1XG4gKiAgICAgIC8jZXZlbnRzLWlucHV0ZXZlbnRzXG4gKi9cbnZhciBJbnB1dEV2ZW50SW50ZXJmYWNlID0ge1xuICBkYXRhOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNJbnB1dEV2ZW50KFxuICBkaXNwYXRjaENvbmZpZyxcbiAgZGlzcGF0Y2hNYXJrZXIsXG4gIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhcbiAgU3ludGhldGljSW5wdXRFdmVudCxcbiAgSW5wdXRFdmVudEludGVyZmFjZVxuKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNJbnB1dEV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0tleWJvYXJkRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY1VJRXZlbnRcIik7XG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRDaGFyQ29kZVwiKTtcbnZhciBnZXRFdmVudEtleSA9IHJlcXVpcmUoXCIuL2dldEV2ZW50S2V5XCIpO1xudmFyIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSA9IHJlcXVpcmUoXCIuL2dldEV2ZW50TW9kaWZpZXJTdGF0ZVwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEtleWJvYXJkRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgbG9jYXRpb246IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIHJlcGVhdDogbnVsbCxcbiAgbG9jYWxlOiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZhY2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgLy8gYGNoYXJDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5UHJlc3MgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gdGhlIGFjdHVhbCBwcmludGFibGUgY2hhcmFjdGVyLlxuXG4gICAgLy8gS2V5UHJlc3MgaXMgZGVwcmVjYXRlZCwgYnV0IGl0cyByZXBsYWNlbWVudCBpcyBub3QgeWV0IGZpbmFsIGFuZCBub3RcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBhbnkgbWFqb3IgYnJvd3Nlci4gT25seSBLZXlQcmVzcyBoYXMgY2hhckNvZGUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIGtleUNvZGU6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgLy8gYGtleUNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlEb3duL1VwIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHBoeXNpY2FsIGtleWJvYXJkIGtleS5cblxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBpbmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMgbGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICB3aGljaDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNLZXlib2FyZEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljVUlFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNLZXlib2FyZEV2ZW50LCBLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY01vdXNlRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY1VJRXZlbnRcIik7XG52YXIgVmlld3BvcnRNZXRyaWNzID0gcmVxdWlyZShcIi4vVmlld3BvcnRNZXRyaWNzXCIpO1xuXG52YXIgZ2V0RXZlbnRNb2RpZmllclN0YXRlID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRNb2RpZmllclN0YXRlXCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBNb3VzZUV2ZW50SW50ZXJmYWNlID0ge1xuICBzY3JlZW5YOiBudWxsLFxuICBzY3JlZW5ZOiBudWxsLFxuICBjbGllbnRYOiBudWxsLFxuICBjbGllbnRZOiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAvLyBXZWJraXQsIEZpcmVmb3gsIElFOStcbiAgICAvLyB3aGljaDogIDEgMiAzXG4gICAgLy8gYnV0dG9uOiAwIDEgMiAoc3RhbmRhcmQpXG4gICAgdmFyIGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcbiAgICBpZiAoJ3doaWNoJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGJ1dHRvbjtcbiAgICB9XG4gICAgLy8gSUU8OVxuICAgIC8vIHdoaWNoOiAgdW5kZWZpbmVkXG4gICAgLy8gYnV0dG9uOiAwIDAgMFxuICAgIC8vIGJ1dHRvbjogMSA0IDIgKG9ubW91c2V1cClcbiAgICByZXR1cm4gYnV0dG9uID09PSAyID8gMiA6IGJ1dHRvbiA9PT0gNCA/IDEgOiAwO1xuICB9LFxuICBidXR0b25zOiBudWxsLFxuICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiBldmVudC5yZWxhdGVkVGFyZ2V0IHx8IChcbiAgICAgICgoZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVudCkpXG4gICAgKTtcbiAgfSxcbiAgLy8gXCJQcm9wcmlldGFyeVwiIEludGVyZmFjZS5cbiAgcGFnZVg6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuICdwYWdlWCcgaW4gZXZlbnQgP1xuICAgICAgZXZlbnQucGFnZVggOlxuICAgICAgZXZlbnQuY2xpZW50WCArIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsTGVmdDtcbiAgfSxcbiAgcGFnZVk6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuICdwYWdlWScgaW4gZXZlbnQgP1xuICAgICAgZXZlbnQucGFnZVkgOlxuICAgICAgZXZlbnQuY2xpZW50WSArIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsVG9wO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNNb3VzZUV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljVUlFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNNb3VzZUV2ZW50LCBNb3VzZUV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY1RvdWNoRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY1VJRXZlbnRcIik7XG5cbnZhciBnZXRFdmVudE1vZGlmaWVyU3RhdGUgPSByZXF1aXJlKFwiLi9nZXRFdmVudE1vZGlmaWVyU3RhdGVcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBUb3VjaEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3RvdWNoLWV2ZW50cy9cbiAqL1xudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHRvdWNoZXM6IG51bGwsXG4gIHRhcmdldFRvdWNoZXM6IG51bGwsXG4gIGNoYW5nZWRUb3VjaGVzOiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY1RvdWNoRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY1RvdWNoRXZlbnQsIFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljVUlFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xuXG52YXIgZ2V0RXZlbnRUYXJnZXQgPSByZXF1aXJlKFwiLi9nZXRFdmVudFRhcmdldFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIFVJRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgVUlFdmVudEludGVyZmFjZSA9IHtcbiAgdmlldzogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudmlldykge1xuICAgICAgcmV0dXJuIGV2ZW50LnZpZXc7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGV2ZW50KTtcbiAgICBpZiAodGFyZ2V0ICE9IG51bGwgJiYgdGFyZ2V0LndpbmRvdyA9PT0gdGFyZ2V0KSB7XG4gICAgICAvLyB0YXJnZXQgaXMgYSB3aW5kb3cgb2JqZWN0XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHZhciBkb2MgPSB0YXJnZXQub3duZXJEb2N1bWVudDtcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoeSBgb3duZXJEb2N1bWVudGAgaXMgc29tZXRpbWVzIHVuZGVmaW5lZCBpbiBJRTguXG4gICAgaWYgKGRvYykge1xuICAgICAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgfSxcbiAgZGV0YWlsOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiBldmVudC5kZXRhaWwgfHwgMDtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY1VJRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljVUlFdmVudCwgVUlFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljVUlFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNXaGVlbEV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNNb3VzZUV2ZW50XCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBXaGVlbEV2ZW50SW50ZXJmYWNlID0ge1xuICBkZWx0YVg6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDpcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWGAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChyaWdodCBpcyBwb3NpdGl2ZSkuXG4gICAgICAnd2hlZWxEZWx0YVgnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFYIDogMFxuICAgICk7XG4gIH0sXG4gIGRlbHRhWTogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOlxuICAgICAgLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFZYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICAgJ3doZWVsRGVsdGFZJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWSA6XG4gICAgICAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgICAnd2hlZWxEZWx0YScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YSA6IDBcbiAgICApO1xuICB9LFxuICBkZWx0YVo6IG51bGwsXG5cbiAgLy8gQnJvd3NlcnMgd2l0aG91dCBcImRlbHRhTW9kZVwiIGlzIHJlcG9ydGluZyBpbiByYXcgd2hlZWwgZGVsdGEgd2hlcmUgb25lXG4gIC8vIG5vdGNoIG9uIHRoZSBzY3JvbGwgaXMgYWx3YXlzICsvLSAxMjAsIHJvdWdobHkgZXF1aXZhbGVudCB0byBwaXhlbHMuXG4gIC8vIEEgZ29vZCBhcHByb3hpbWF0aW9uIG9mIERPTV9ERUxUQV9MSU5FICgxKSBpcyA1JSBvZiB2aWV3cG9ydCBzaXplIG9yXG4gIC8vIH40MCBwaXhlbHMsIGZvciBET01fREVMVEFfU0NSRUVOICgyKSBpdCBpcyA4Ny41JSBvZiB2aWV3cG9ydCBzaXplLlxuICBkZWx0YU1vZGU6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY01vdXNlRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY1doZWVsRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNNb3VzZUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY01vdXNlRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY1doZWVsRXZlbnQsIFdoZWVsRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFRyYW5zYWN0aW9uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIGBUcmFuc2FjdGlvbmAgY3JlYXRlcyBhIGJsYWNrIGJveCB0aGF0IGlzIGFibGUgdG8gd3JhcCBhbnkgbWV0aG9kIHN1Y2ggdGhhdFxuICogY2VydGFpbiBpbnZhcmlhbnRzIGFyZSBtYWludGFpbmVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG1ldGhvZCBpcyBpbnZva2VkXG4gKiAoRXZlbiBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIHdoaWxlIGludm9raW5nIHRoZSB3cmFwcGVkIG1ldGhvZCkuIFdob2V2ZXJcbiAqIGluc3RhbnRpYXRlcyBhIHRyYW5zYWN0aW9uIGNhbiBwcm92aWRlIGVuZm9yY2VycyBvZiB0aGUgaW52YXJpYW50cyBhdFxuICogY3JlYXRpb24gdGltZS4gVGhlIGBUcmFuc2FjdGlvbmAgY2xhc3MgaXRzZWxmIHdpbGwgc3VwcGx5IG9uZSBhZGRpdGlvbmFsXG4gKiBhdXRvbWF0aWMgaW52YXJpYW50IGZvciB5b3UgLSB0aGUgaW52YXJpYW50IHRoYXQgYW55IHRyYW5zYWN0aW9uIGluc3RhbmNlXG4gKiBzaG91bGQgbm90IGJlIHJ1biB3aGlsZSBpdCBpcyBhbHJlYWR5IGJlaW5nIHJ1bi4gWW91IHdvdWxkIHR5cGljYWxseSBjcmVhdGUgYVxuICogc2luZ2xlIGluc3RhbmNlIG9mIGEgYFRyYW5zYWN0aW9uYCBmb3IgcmV1c2UgbXVsdGlwbGUgdGltZXMsIHRoYXQgcG90ZW50aWFsbHlcbiAqIGlzIHVzZWQgdG8gd3JhcCBzZXZlcmFsIGRpZmZlcmVudCBtZXRob2RzLiBXcmFwcGVycyBhcmUgZXh0cmVtZWx5IHNpbXBsZSAtXG4gKiB0aGV5IG9ubHkgcmVxdWlyZSBpbXBsZW1lbnRpbmcgdHdvIG1ldGhvZHMuXG4gKlxuICogPHByZT5cbiAqICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVycyAoaW5qZWN0ZWQgYXQgY3JlYXRpb24gdGltZSlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICAgICAgICArXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB2ICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICstLS0tLS0tLS0tLS0tLS0rICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICArLS18ICAgIHdyYXBwZXIxICAgfC0tLXwtLS0tKyAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgKy0tLS0tLS0tLS0tLS0tLSsgICB2ICAgIHwgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgICAgKy0tLS0tLS0tLS0tLS0rICB8ICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICArLS0tLXwgICB3cmFwcGVyMiAgfC0tLS0tLS0tKyAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgfCAgICArLS0tLS0tLS0tLS0tLSsgIHwgICAgIHwgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB2ICAgICB2ICAgICAgICAgICAgICAgICAgICAgdiAgICAgdiAgIHwgd3JhcHBlclxuICogICAgICAgICAgICAgICAgICAgIHwgKy0tLSsgKy0tLSsgICArLS0tLS0tLS0tKyAgICstLS0rICstLS0rIHwgaW52YXJpYW50c1xuICogcGVyZm9ybShhbnlNZXRob2QpIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8IHwgICB8IHwgbWFpbnRhaW5lZFxuICogKy0tLS0tLS0tLS0tLS0tLS0tPnwtfC0tLXwtfC0tLXwtLT58YW55TWV0aG9kfC0tLXwtLS18LXwtLS18LXwtLS0tLS0tLT5cbiAqICAgICAgICAgICAgICAgICAgICB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfFxuICogICAgICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8IHwgICB8IHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICstLS0rICstLS0rICAgKy0tLS0tLS0tLSsgICArLS0tKyArLS0tKyB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgaW5pdGlhbGl6ZSAgICAgICAgICAgICAgICAgICAgY2xvc2UgICAgfFxuICogICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAqIDwvcHJlPlxuICpcbiAqIFVzZSBjYXNlczpcbiAqIC0gUHJlc2VydmluZyB0aGUgaW5wdXQgc2VsZWN0aW9uIHJhbmdlcyBiZWZvcmUvYWZ0ZXIgcmVjb25jaWxpYXRpb24uXG4gKiAgIFJlc3RvcmluZyBzZWxlY3Rpb24gZXZlbiBpbiB0aGUgZXZlbnQgb2YgYW4gdW5leHBlY3RlZCBlcnJvci5cbiAqIC0gRGVhY3RpdmF0aW5nIGV2ZW50cyB3aGlsZSByZWFycmFuZ2luZyB0aGUgRE9NLCBwcmV2ZW50aW5nIGJsdXJzL2ZvY3VzZXMsXG4gKiAgIHdoaWxlIGd1YXJhbnRlZWluZyB0aGF0IGFmdGVyd2FyZHMsIHRoZSBldmVudCBzeXN0ZW0gaXMgcmVhY3RpdmF0ZWQuXG4gKiAtIEZsdXNoaW5nIGEgcXVldWUgb2YgY29sbGVjdGVkIERPTSBtdXRhdGlvbnMgdG8gdGhlIG1haW4gVUkgdGhyZWFkIGFmdGVyIGFcbiAqICAgcmVjb25jaWxpYXRpb24gdGFrZXMgcGxhY2UgaW4gYSB3b3JrZXIgdGhyZWFkLlxuICogLSBJbnZva2luZyBhbnkgY29sbGVjdGVkIGBjb21wb25lbnREaWRVcGRhdGVgIGNhbGxiYWNrcyBhZnRlciByZW5kZXJpbmcgbmV3XG4gKiAgIGNvbnRlbnQuXG4gKiAtIChGdXR1cmUgdXNlIGNhc2UpOiBXcmFwcGluZyBwYXJ0aWN1bGFyIGZsdXNoZXMgb2YgdGhlIGBSZWFjdFdvcmtlcmAgcXVldWVcbiAqICAgdG8gcHJlc2VydmUgdGhlIGBzY3JvbGxUb3BgIChhbiBhdXRvbWF0aWMgc2Nyb2xsIGF3YXJlIERPTSkuXG4gKiAtIChGdXR1cmUgdXNlIGNhc2UpOiBMYXlvdXQgY2FsY3VsYXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgRE9NIHVwZGF0ZXMuXG4gKlxuICogVHJhbnNhY3Rpb25hbCBwbHVnaW4gQVBJOlxuICogLSBBIG1vZHVsZSB0aGF0IGhhcyBhbiBgaW5pdGlhbGl6ZWAgbWV0aG9kIHRoYXQgcmV0dXJucyBhbnkgcHJlY29tcHV0YXRpb24uXG4gKiAtIGFuZCBhIGBjbG9zZWAgbWV0aG9kIHRoYXQgYWNjZXB0cyB0aGUgcHJlY29tcHV0YXRpb24uIGBjbG9zZWAgaXMgaW52b2tlZFxuICogICB3aGVuIHRoZSB3cmFwcGVkIHByb2Nlc3MgaXMgY29tcGxldGVkLCBvciBoYXMgZmFpbGVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8VHJhbnNhY3Rpb25hbFdyYXBwZXI+fSB0cmFuc2FjdGlvbldyYXBwZXIgV3JhcHBlciBtb2R1bGVzXG4gKiB0aGF0IGltcGxlbWVudCBgaW5pdGlhbGl6ZWAgYW5kIGBjbG9zZWAuXG4gKiBAcmV0dXJuIHtUcmFuc2FjdGlvbn0gU2luZ2xlIHRyYW5zYWN0aW9uIGZvciByZXVzZSBpbiB0aHJlYWQuXG4gKlxuICogQGNsYXNzIFRyYW5zYWN0aW9uXG4gKi9cbnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIFNldHMgdXAgdGhpcyBpbnN0YW5jZSBzbyB0aGF0IGl0IGlzIHByZXBhcmVkIGZvciBjb2xsZWN0aW5nIG1ldHJpY3MuIERvZXNcbiAgICogc28gc3VjaCB0aGF0IHRoaXMgc2V0dXAgbWV0aG9kIG1heSBiZSB1c2VkIG9uIGFuIGluc3RhbmNlIHRoYXQgaXMgYWxyZWFkeVxuICAgKiBpbml0aWFsaXplZCwgaW4gYSB3YXkgdGhhdCBkb2VzIG5vdCBjb25zdW1lIGFkZGl0aW9uYWwgbWVtb3J5IHVwb24gcmV1c2UuXG4gICAqIFRoYXQgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgZGVjaWRlIHRvIG1ha2UgeW91ciBzdWJjbGFzcyBvZiB0aGlzIG1peGluIGFcbiAgICogXCJQb29sZWRDbGFzc1wiLlxuICAgKi9cbiAgcmVpbml0aWFsaXplVHJhbnNhY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycyA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25XcmFwcGVycygpO1xuICAgIGlmICghdGhpcy53cmFwcGVySW5pdERhdGEpIHtcbiAgICAgIHRoaXMud3JhcHBlckluaXREYXRhID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud3JhcHBlckluaXREYXRhLmxlbmd0aCA9IDA7XG4gICAgfVxuICAgIHRoaXMuX2lzSW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9LFxuXG4gIF9pc0luVHJhbnNhY3Rpb246IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybiB7QXJyYXk8VHJhbnNhY3Rpb25XcmFwcGVyPn0gQXJyYXkgb2YgdHJhbnNhY3Rpb24gd3JhcHBlcnMuXG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBudWxsLFxuXG4gIGlzSW5UcmFuc2FjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5faXNJblRyYW5zYWN0aW9uO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgZnVuY3Rpb24gd2l0aGluIGEgc2FmZXR5IHdpbmRvdy4gVXNlIHRoaXMgZm9yIHRoZSB0b3AgbGV2ZWxcbiAgICogbWV0aG9kcyB0aGF0IHJlc3VsdCBpbiBsYXJnZSBhbW91bnRzIG9mIGNvbXB1dGF0aW9uL211dGF0aW9ucyB0aGF0IHdvdWxkXG4gICAqIG5lZWQgdG8gYmUgc2FmZXR5IGNoZWNrZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCBNZW1iZXIgb2Ygc2NvcGUgdG8gY2FsbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIFNjb3BlIHRvIGludm9rZSBmcm9tLlxuICAgKiBAcGFyYW0ge09iamVjdD89fSBhcmdzLi4uIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBtZXRob2QgKG9wdGlvbmFsKS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBIZWxwcyBwcmV2ZW50IG5lZWQgdG8gYmluZCBpbiBtYW55IGNhc2VzLlxuICAgKiBAcmV0dXJuIFJldHVybiB2YWx1ZSBmcm9tIGBtZXRob2RgLlxuICAgKi9cbiAgcGVyZm9ybTogZnVuY3Rpb24obWV0aG9kLCBzY29wZSwgYSwgYiwgYywgZCwgZSwgZikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhdGhpcy5pc0luVHJhbnNhY3Rpb24oKSxcbiAgICAgICdUcmFuc2FjdGlvbi5wZXJmb3JtKC4uLik6IENhbm5vdCBpbml0aWFsaXplIGEgdHJhbnNhY3Rpb24gd2hlbiB0aGVyZSAnICtcbiAgICAgICdpcyBhbHJlYWR5IGFuIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9uLidcbiAgICApIDogaW52YXJpYW50KCF0aGlzLmlzSW5UcmFuc2FjdGlvbigpKSk7XG4gICAgdmFyIGVycm9yVGhyb3duO1xuICAgIHZhciByZXQ7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2lzSW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gICAgICAvLyBDYXRjaGluZyBlcnJvcnMgbWFrZXMgZGVidWdnaW5nIG1vcmUgZGlmZmljdWx0LCBzbyB3ZSBzdGFydCB3aXRoXG4gICAgICAvLyBlcnJvclRocm93biBzZXQgdG8gdHJ1ZSBiZWZvcmUgc2V0dGluZyBpdCB0byBmYWxzZSBhZnRlciBjYWxsaW5nXG4gICAgICAvLyBjbG9zZSAtLSBpZiBpdCdzIHN0aWxsIHNldCB0byB0cnVlIGluIHRoZSBmaW5hbGx5IGJsb2NrLCBpdCBtZWFuc1xuICAgICAgLy8gb25lIG9mIHRoZXNlIGNhbGxzIHRocmV3LlxuICAgICAgZXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgdGhpcy5pbml0aWFsaXplQWxsKDApO1xuICAgICAgcmV0ID0gbWV0aG9kLmNhbGwoc2NvcGUsIGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgZXJyb3JUaHJvd24gPSBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgLy8gSWYgYG1ldGhvZGAgdGhyb3dzLCBwcmVmZXIgdG8gc2hvdyB0aGF0IHN0YWNrIHRyYWNlIG92ZXIgYW55IHRocm93blxuICAgICAgICAgIC8vIGJ5IGludm9raW5nIGBjbG9zZUFsbGAuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBbGwoMCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpbmNlIGBtZXRob2RgIGRpZG4ndCB0aHJvdywgd2UgZG9uJ3Qgd2FudCB0byBzaWxlbmNlIHRoZSBleGNlcHRpb25cbiAgICAgICAgICAvLyBoZXJlLlxuICAgICAgICAgIHRoaXMuY2xvc2VBbGwoMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2lzSW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9LFxuXG4gIGluaXRpYWxpemVBbGw6IGZ1bmN0aW9uKHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgdHJhbnNhY3Rpb25XcmFwcGVycyA9IHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycztcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRyYW5zYWN0aW9uV3JhcHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3cmFwcGVyID0gdHJhbnNhY3Rpb25XcmFwcGVyc1tpXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcgbW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGggdGhlXG4gICAgICAgIC8vIE9CU0VSVkVEX0VSUk9SIHN0YXRlIGJlZm9yZSBvdmVyd3JpdGluZyBpdCB3aXRoIHRoZSByZWFsIHJldHVybiB2YWx1ZVxuICAgICAgICAvLyBvZiBpbml0aWFsaXplIC0tIGlmIGl0J3Mgc3RpbGwgc2V0IHRvIE9CU0VSVkVEX0VSUk9SIGluIHRoZSBmaW5hbGx5XG4gICAgICAgIC8vIGJsb2NrLCBpdCBtZWFucyB3cmFwcGVyLmluaXRpYWxpemUgdGhyZXcuXG4gICAgICAgIHRoaXMud3JhcHBlckluaXREYXRhW2ldID0gVHJhbnNhY3Rpb24uT0JTRVJWRURfRVJST1I7XG4gICAgICAgIHRoaXMud3JhcHBlckluaXREYXRhW2ldID0gd3JhcHBlci5pbml0aWFsaXplID9cbiAgICAgICAgICB3cmFwcGVyLmluaXRpYWxpemUuY2FsbCh0aGlzKSA6XG4gICAgICAgICAgbnVsbDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBwZXJJbml0RGF0YVtpXSA9PT0gVHJhbnNhY3Rpb24uT0JTRVJWRURfRVJST1IpIHtcbiAgICAgICAgICAvLyBUaGUgaW5pdGlhbGl6ZXIgZm9yIHdyYXBwZXIgaSB0aHJldyBhbiBlcnJvcjsgaW5pdGlhbGl6ZSB0aGVcbiAgICAgICAgICAvLyByZW1haW5pbmcgd3JhcHBlcnMgYnV0IHNpbGVuY2UgYW55IGV4Y2VwdGlvbnMgZnJvbSB0aGVtIHRvIGVuc3VyZVxuICAgICAgICAgIC8vIHRoYXQgdGhlIGZpcnN0IGVycm9yIGlzIHRoZSBvbmUgdG8gYnViYmxlIHVwLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVBbGwoaSArIDEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogSW52b2tlcyBlYWNoIG9mIGB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMuY2xvc2VbaV1gIGZ1bmN0aW9ucywgcGFzc2luZyBpbnRvXG4gICAqIHRoZW0gdGhlIHJlc3BlY3RpdmUgcmV0dXJuIHZhbHVlcyBvZiBgdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLmluaXRbaV1gXG4gICAqIChgY2xvc2VgcnMgdGhhdCBjb3JyZXNwb25kIHRvIGluaXRpYWxpemVycyB0aGF0IGZhaWxlZCB3aWxsIG5vdCBiZVxuICAgKiBpbnZva2VkKS5cbiAgICovXG4gIGNsb3NlQWxsOiBmdW5jdGlvbihzdGFydEluZGV4KSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHRoaXMuaXNJblRyYW5zYWN0aW9uKCksXG4gICAgICAnVHJhbnNhY3Rpb24uY2xvc2VBbGwoKTogQ2Fubm90IGNsb3NlIHRyYW5zYWN0aW9uIHdoZW4gbm9uZSBhcmUgb3Blbi4nXG4gICAgKSA6IGludmFyaWFudCh0aGlzLmlzSW5UcmFuc2FjdGlvbigpKSk7XG4gICAgdmFyIHRyYW5zYWN0aW9uV3JhcHBlcnMgPSB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnM7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0cmFuc2FjdGlvbldyYXBwZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgd3JhcHBlciA9IHRyYW5zYWN0aW9uV3JhcHBlcnNbaV07XG4gICAgICB2YXIgaW5pdERhdGEgPSB0aGlzLndyYXBwZXJJbml0RGF0YVtpXTtcbiAgICAgIHZhciBlcnJvclRocm93bjtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcgbW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGhcbiAgICAgICAgLy8gZXJyb3JUaHJvd24gc2V0IHRvIHRydWUgYmVmb3JlIHNldHRpbmcgaXQgdG8gZmFsc2UgYWZ0ZXIgY2FsbGluZ1xuICAgICAgICAvLyBjbG9zZSAtLSBpZiBpdCdzIHN0aWxsIHNldCB0byB0cnVlIGluIHRoZSBmaW5hbGx5IGJsb2NrLCBpdCBtZWFuc1xuICAgICAgICAvLyB3cmFwcGVyLmNsb3NlIHRocmV3LlxuICAgICAgICBlcnJvclRocm93biA9IHRydWU7XG4gICAgICAgIGlmIChpbml0RGF0YSAhPT0gVHJhbnNhY3Rpb24uT0JTRVJWRURfRVJST1IgJiYgd3JhcHBlci5jbG9zZSkge1xuICAgICAgICAgIHdyYXBwZXIuY2xvc2UuY2FsbCh0aGlzLCBpbml0RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3JUaHJvd24gPSBmYWxzZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgIC8vIFRoZSBjbG9zZXIgZm9yIHdyYXBwZXIgaSB0aHJldyBhbiBlcnJvcjsgY2xvc2UgdGhlIHJlbWFpbmluZ1xuICAgICAgICAgIC8vIHdyYXBwZXJzIGJ1dCBzaWxlbmNlIGFueSBleGNlcHRpb25zIGZyb20gdGhlbSB0byBlbnN1cmUgdGhhdCB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBlcnJvciBpcyB0aGUgb25lIHRvIGJ1YmJsZSB1cC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFsbChpICsgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGggPSAwO1xuICB9XG59O1xuXG52YXIgVHJhbnNhY3Rpb24gPSB7XG5cbiAgTWl4aW46IE1peGluLFxuXG4gIC8qKlxuICAgKiBUb2tlbiB0byBsb29rIGZvciB0byBkZXRlcm1pbmUgaWYgYW4gZXJyb3Igb2NjdXJlZC5cbiAgICovXG4gIE9CU0VSVkVEX0VSUk9SOiB7fVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zYWN0aW9uO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VkhKaGJuTmhZM1JwYjI0dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdWSEpoYm5OaFkzUnBiMjVjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiaThxS2x4dUlDb2dZRlJ5WVc1ellXTjBhVzl1WUNCamNtVmhkR1Z6SUdFZ1lteGhZMnNnWW05NElIUm9ZWFFnYVhNZ1lXSnNaU0IwYnlCM2NtRndJR0Z1ZVNCdFpYUm9iMlFnYzNWamFDQjBhR0YwWEc0Z0tpQmpaWEowWVdsdUlHbHVkbUZ5YVdGdWRITWdZWEpsSUcxaGFXNTBZV2x1WldRZ1ltVm1iM0psSUdGdVpDQmhablJsY2lCMGFHVWdiV1YwYUc5a0lHbHpJR2x1ZG05clpXUmNiaUFxSUNoRmRtVnVJR2xtSUdGdUlHVjRZMlZ3ZEdsdmJpQnBjeUIwYUhKdmQyNGdkMmhwYkdVZ2FXNTJiMnRwYm1jZ2RHaGxJSGR5WVhCd1pXUWdiV1YwYUc5a0tTNGdWMmh2WlhabGNseHVJQ29nYVc1emRHRnVkR2xoZEdWeklHRWdkSEpoYm5OaFkzUnBiMjRnWTJGdUlIQnliM1pwWkdVZ1pXNW1iM0pqWlhKeklHOW1JSFJvWlNCcGJuWmhjbWxoYm5SeklHRjBYRzRnS2lCamNtVmhkR2x2YmlCMGFXMWxMaUJVYUdVZ1lGUnlZVzV6WVdOMGFXOXVZQ0JqYkdGemN5QnBkSE5sYkdZZ2QybHNiQ0J6ZFhCd2JIa2diMjVsSUdGa1pHbDBhVzl1WVd4Y2JpQXFJR0YxZEc5dFlYUnBZeUJwYm5aaGNtbGhiblFnWm05eUlIbHZkU0F0SUhSb1pTQnBiblpoY21saGJuUWdkR2hoZENCaGJua2dkSEpoYm5OaFkzUnBiMjRnYVc1emRHRnVZMlZjYmlBcUlITm9iM1ZzWkNCdWIzUWdZbVVnY25WdUlIZG9hV3hsSUdsMElHbHpJR0ZzY21WaFpIa2dZbVZwYm1jZ2NuVnVMaUJaYjNVZ2QyOTFiR1FnZEhsd2FXTmhiR3g1SUdOeVpXRjBaU0JoWEc0Z0tpQnphVzVuYkdVZ2FXNXpkR0Z1WTJVZ2IyWWdZU0JnVkhKaGJuTmhZM1JwYjI1Z0lHWnZjaUJ5WlhWelpTQnRkV3gwYVhCc1pTQjBhVzFsY3l3Z2RHaGhkQ0J3YjNSbGJuUnBZV3hzZVZ4dUlDb2dhWE1nZFhObFpDQjBieUIzY21Gd0lITmxkbVZ5WVd3Z1pHbG1abVZ5Wlc1MElHMWxkR2h2WkhNdUlGZHlZWEJ3WlhKeklHRnlaU0JsZUhSeVpXMWxiSGtnYzJsdGNHeGxJQzFjYmlBcUlIUm9aWGtnYjI1c2VTQnlaWEYxYVhKbElHbHRjR3hsYldWdWRHbHVaeUIwZDI4Z2JXVjBhRzlrY3k1Y2JpQXFYRzRnS2lBOGNISmxQbHh1SUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSGR5WVhCd1pYSnpJQ2hwYm1wbFkzUmxaQ0JoZENCamNtVmhkR2x2YmlCMGFXMWxLVnh1SUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDc2dJQ0FnSUNBZ0lDdGNiaUFxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOElDQWdJQ0FnSUNCOFhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS3kwdExTMHRMUzB0TFMwdExTMHRMUzB0ZkMwdExTMHRMUzB0ZkMwdExTMHRMUzB0TFMwdExTMHRLMXh1SUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lId2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWWdJQ0FnSUNBZ0lId2dJQ0FnSUNBZ0lDQWdJQ0FnSUh4Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I4SUNBZ0lDQWdLeTB0TFMwdExTMHRMUzB0TFMwdExTc2dJQ0I4SUNBZ0lDQWdJQ0FnSUNBZ0lDQjhYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZDQWdJQ3N0TFh3Z0lDQWdkM0poY0hCbGNqRWdJQ0I4TFMwdGZDMHRMUzBySUNBZ0lDQWdJQ0FnZkZ4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHdnSUNCOElDQXJMUzB0TFMwdExTMHRMUzB0TFMwdEt5QWdJSFlnSUNBZ2ZDQWdJQ0FnSUNBZ0lIeGNiaUFxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOElDQWdmQ0FnSUNBZ0lDQWdJQ0FyTFMwdExTMHRMUzB0TFMwdExTc2dJSHdnSUNBZ0lDQWdJQ0I4WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmQ0FnSUh3Z0lDQWdJQ3N0TFMwdGZDQWdJSGR5WVhCd1pYSXlJQ0I4TFMwdExTMHRMUzBySUNBZ2ZGeHVJQ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh3Z0lDQjhJQ0FnSUNCOElDQWdJQ3N0TFMwdExTMHRMUzB0TFMwdEt5QWdmQ0FnSUNBZ2ZDQWdJSHhjYmlBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjhJQ0FnZkNBZ0lDQWdmQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh3Z0lDQWdJSHdnSUNCOFhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZkNBZ0lIWWdJQ0FnSUhZZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJJQ0FnSUNCMklDQWdmQ0IzY21Gd2NHVnlYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZDQXJMUzB0S3lBckxTMHRLeUFnSUNzdExTMHRMUzB0TFMwcklDQWdLeTB0TFNzZ0t5MHRMU3NnZkNCcGJuWmhjbWxoYm5SelhHNGdLaUJ3WlhKbWIzSnRLR0Z1ZVUxbGRHaHZaQ2tnZkNCOElDQWdmQ0I4SUNBZ2ZDQWdJSHdnSUNBZ0lDQWdJQ0I4SUNBZ2ZDQWdJSHdnZkNBZ0lId2dmQ0J0WVdsdWRHRnBibVZrWEc0Z0tpQXJMUzB0TFMwdExTMHRMUzB0TFMwdExTMCtmQzE4TFMwdGZDMThMUzB0ZkMwdFBueGhibmxOWlhSb2IyUjhMUzB0ZkMwdExYd3RmQzB0TFh3dGZDMHRMUzB0TFMwdFBseHVJQ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh3Z2ZDQWdJSHdnZkNBZ0lId2dJQ0I4SUNBZ0lDQWdJQ0FnZkNBZ0lId2dJQ0I4SUh3Z0lDQjhJSHhjYmlBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjhJSHdnSUNCOElId2dJQ0I4SUNBZ2ZDQWdJQ0FnSUNBZ0lId2dJQ0I4SUNBZ2ZDQjhJQ0FnZkNCOFhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZkNCOElDQWdmQ0I4SUNBZ2ZDQWdJSHdnSUNBZ0lDQWdJQ0I4SUNBZ2ZDQWdJSHdnZkNBZ0lId2dmRnh1SUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lId2dLeTB0TFNzZ0t5MHRMU3NnSUNBckxTMHRMUzB0TFMwdEt5QWdJQ3N0TFMwcklDc3RMUzBySUh4Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I4SUNCcGJtbDBhV0ZzYVhwbElDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiRzl6WlNBZ0lDQjhYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0t5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0SzF4dUlDb2dQQzl3Y21VK1hHNGdLbHh1SUNvZ1ZYTmxJR05oYzJWek9seHVJQ29nTFNCUWNtVnpaWEoyYVc1bklIUm9aU0JwYm5CMWRDQnpaV3hsWTNScGIyNGdjbUZ1WjJWeklHSmxabTl5WlM5aFpuUmxjaUJ5WldOdmJtTnBiR2xoZEdsdmJpNWNiaUFxSUNBZ1VtVnpkRzl5YVc1bklITmxiR1ZqZEdsdmJpQmxkbVZ1SUdsdUlIUm9aU0JsZG1WdWRDQnZaaUJoYmlCMWJtVjRjR1ZqZEdWa0lHVnljbTl5TGx4dUlDb2dMU0JFWldGamRHbDJZWFJwYm1jZ1pYWmxiblJ6SUhkb2FXeGxJSEpsWVhKeVlXNW5hVzVuSUhSb1pTQkVUMDBzSUhCeVpYWmxiblJwYm1jZ1lteDFjbk12Wm05amRYTmxjeXhjYmlBcUlDQWdkMmhwYkdVZ1ozVmhjbUZ1ZEdWbGFXNW5JSFJvWVhRZ1lXWjBaWEozWVhKa2N5d2dkR2hsSUdWMlpXNTBJSE41YzNSbGJTQnBjeUJ5WldGamRHbDJZWFJsWkM1Y2JpQXFJQzBnUm14MWMyaHBibWNnWVNCeGRXVjFaU0J2WmlCamIyeHNaV04wWldRZ1JFOU5JRzExZEdGMGFXOXVjeUIwYnlCMGFHVWdiV0ZwYmlCVlNTQjBhSEpsWVdRZ1lXWjBaWElnWVZ4dUlDb2dJQ0J5WldOdmJtTnBiR2xoZEdsdmJpQjBZV3RsY3lCd2JHRmpaU0JwYmlCaElIZHZjbXRsY2lCMGFISmxZV1F1WEc0Z0tpQXRJRWx1ZG05cmFXNW5JR0Z1ZVNCamIyeHNaV04wWldRZ1lHTnZiWEJ2Ym1WdWRFUnBaRlZ3WkdGMFpXQWdZMkZzYkdKaFkydHpJR0ZtZEdWeUlISmxibVJsY21sdVp5QnVaWGRjYmlBcUlDQWdZMjl1ZEdWdWRDNWNiaUFxSUMwZ0tFWjFkSFZ5WlNCMWMyVWdZMkZ6WlNrNklGZHlZWEJ3YVc1bklIQmhjblJwWTNWc1lYSWdabXgxYzJobGN5QnZaaUIwYUdVZ1lGSmxZV04wVjI5eWEyVnlZQ0J4ZFdWMVpWeHVJQ29nSUNCMGJ5QndjbVZ6WlhKMlpTQjBhR1VnWUhOamNtOXNiRlJ2Y0dBZ0tHRnVJR0YxZEc5dFlYUnBZeUJ6WTNKdmJHd2dZWGRoY21VZ1JFOU5LUzVjYmlBcUlDMGdLRVoxZEhWeVpTQjFjMlVnWTJGelpTazZJRXhoZVc5MWRDQmpZV3hqZFd4aGRHbHZibk1nWW1WbWIzSmxJR0Z1WkNCaFpuUmxjaUJFVDAwZ2RYQmtZWFJsY3k1Y2JpQXFYRzRnS2lCVWNtRnVjMkZqZEdsdmJtRnNJSEJzZFdkcGJpQkJVRWs2WEc0Z0tpQXRJRUVnYlc5a2RXeGxJSFJvWVhRZ2FHRnpJR0Z1SUdCcGJtbDBhV0ZzYVhwbFlDQnRaWFJvYjJRZ2RHaGhkQ0J5WlhSMWNtNXpJR0Z1ZVNCd2NtVmpiMjF3ZFhSaGRHbHZiaTVjYmlBcUlDMGdZVzVrSUdFZ1lHTnNiM05sWUNCdFpYUm9iMlFnZEdoaGRDQmhZMk5sY0hSeklIUm9aU0J3Y21WamIyMXdkWFJoZEdsdmJpNGdZR05zYjNObFlDQnBjeUJwYm5admEyVmtYRzRnS2lBZ0lIZG9aVzRnZEdobElIZHlZWEJ3WldRZ2NISnZZMlZ6Y3lCcGN5QmpiMjF3YkdWMFpXUXNJRzl5SUdoaGN5Qm1ZV2xzWldRdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0QmNuSmhlVHhVY21GdWMyRmpkR2x2Ym1Gc1YzSmhjSEJsY2o1OUlIUnlZVzV6WVdOMGFXOXVWM0poY0hCbGNpQlhjbUZ3Y0dWeUlHMXZaSFZzWlhOY2JpQXFJSFJvWVhRZ2FXMXdiR1Z0Wlc1MElHQnBibWwwYVdGc2FYcGxZQ0JoYm1RZ1lHTnNiM05sWUM1Y2JpQXFJRUJ5WlhSMWNtNGdlMVJ5WVc1ellXTjBhVzl1ZlNCVGFXNW5iR1VnZEhKaGJuTmhZM1JwYjI0Z1ptOXlJSEpsZFhObElHbHVJSFJvY21WaFpDNWNiaUFxWEc0Z0tpQkFZMnhoYzNNZ1ZISmhibk5oWTNScGIyNWNiaUFxTDF4dWRtRnlJRTFwZUdsdUlEMGdlMXh1SUNBdktpcGNiaUFnSUNvZ1UyVjBjeUIxY0NCMGFHbHpJR2x1YzNSaGJtTmxJSE52SUhSb1lYUWdhWFFnYVhNZ2NISmxjR0Z5WldRZ1ptOXlJR052Ykd4bFkzUnBibWNnYldWMGNtbGpjeTRnUkc5bGMxeHVJQ0FnS2lCemJ5QnpkV05vSUhSb1lYUWdkR2hwY3lCelpYUjFjQ0J0WlhSb2IyUWdiV0Y1SUdKbElIVnpaV1FnYjI0Z1lXNGdhVzV6ZEdGdVkyVWdkR2hoZENCcGN5QmhiSEpsWVdSNVhHNGdJQ0FxSUdsdWFYUnBZV3hwZW1Wa0xDQnBiaUJoSUhkaGVTQjBhR0YwSUdSdlpYTWdibTkwSUdOdmJuTjFiV1VnWVdSa2FYUnBiMjVoYkNCdFpXMXZjbmtnZFhCdmJpQnlaWFZ6WlM1Y2JpQWdJQ29nVkdoaGRDQmpZVzRnWW1VZ2RYTmxablZzSUdsbUlIbHZkU0JrWldOcFpHVWdkRzhnYldGclpTQjViM1Z5SUhOMVltTnNZWE56SUc5bUlIUm9hWE1nYldsNGFXNGdZVnh1SUNBZ0tpQmNJbEJ2YjJ4bFpFTnNZWE56WENJdVhHNGdJQ0FxTDF4dUlDQnlaV2x1YVhScFlXeHBlbVZVY21GdWMyRmpkR2x2YmpvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2RHaHBjeTUwY21GdWMyRmpkR2x2YmxkeVlYQndaWEp6SUQwZ2RHaHBjeTVuWlhSVWNtRnVjMkZqZEdsdmJsZHlZWEJ3WlhKektDazdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxuZHlZWEJ3WlhKSmJtbDBSR0YwWVNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTUzY21Gd2NHVnlTVzVwZEVSaGRHRWdQU0JiWFR0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdkR2hwY3k1M2NtRndjR1Z5U1c1cGRFUmhkR0V1YkdWdVozUm9JRDBnTUR0Y2JpQWdJQ0I5WEc0Z0lDQWdkR2hwY3k1ZmFYTkpibFJ5WVc1ellXTjBhVzl1SUQwZ1ptRnNjMlU3WEc0Z0lIMHNYRzVjYmlBZ1gybHpTVzVVY21GdWMyRmpkR2x2YmpvZ1ptRnNjMlVzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJoWW5OMGNtRmpkRnh1SUNBZ0tpQkFjbVYwZFhKdUlIdEJjbkpoZVR4VWNtRnVjMkZqZEdsdmJsZHlZWEJ3WlhJK2ZTQkJjbkpoZVNCdlppQjBjbUZ1YzJGamRHbHZiaUIzY21Gd2NHVnljeTVjYmlBZ0lDb3ZYRzRnSUdkbGRGUnlZVzV6WVdOMGFXOXVWM0poY0hCbGNuTTZJRzUxYkd3c1hHNWNiaUFnYVhOSmJsUnlZVzV6WVdOMGFXOXVPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdJU0YwYUdsekxsOXBjMGx1VkhKaGJuTmhZM1JwYjI0N1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVY0WldOMWRHVnpJSFJvWlNCbWRXNWpkR2x2YmlCM2FYUm9hVzRnWVNCellXWmxkSGtnZDJsdVpHOTNMaUJWYzJVZ2RHaHBjeUJtYjNJZ2RHaGxJSFJ2Y0NCc1pYWmxiRnh1SUNBZ0tpQnRaWFJvYjJSeklIUm9ZWFFnY21WemRXeDBJR2x1SUd4aGNtZGxJR0Z0YjNWdWRITWdiMllnWTI5dGNIVjBZWFJwYjI0dmJYVjBZWFJwYjI1eklIUm9ZWFFnZDI5MWJHUmNiaUFnSUNvZ2JtVmxaQ0IwYnlCaVpTQnpZV1psZEhrZ1kyaGxZMnRsWkM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdiV1YwYUc5a0lFMWxiV0psY2lCdlppQnpZMjl3WlNCMGJ5QmpZV3hzTGx4dUlDQWdLaUJBY0dGeVlXMGdlMDlpYW1WamRIMGdjMk52Y0dVZ1UyTnZjR1VnZEc4Z2FXNTJiMnRsSUdaeWIyMHVYRzRnSUNBcUlFQndZWEpoYlNCN1QySnFaV04wUHoxOUlHRnlaM011TGk0Z1FYSm5kVzFsYm5SeklIUnZJSEJoYzNNZ2RHOGdkR2hsSUcxbGRHaHZaQ0FvYjNCMGFXOXVZV3dwTGx4dUlDQWdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRWhsYkhCeklIQnlaWFpsYm5RZ2JtVmxaQ0IwYnlCaWFXNWtJR2x1SUcxaGJua2dZMkZ6WlhNdVhHNGdJQ0FxSUVCeVpYUjFjbTRnVW1WMGRYSnVJSFpoYkhWbElHWnliMjBnWUcxbGRHaHZaR0F1WEc0Z0lDQXFMMXh1SUNCd1pYSm1iM0p0T2lCbWRXNWpkR2x2YmlodFpYUm9iMlFzSUhOamIzQmxMQ0JoTENCaUxDQmpMQ0JrTENCbExDQm1LU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDRjBhR2x6TG1selNXNVVjbUZ1YzJGamRHbHZiaWdwTEZ4dUlDQWdJQ0FnSjFSeVlXNXpZV04wYVc5dUxuQmxjbVp2Y20wb0xpNHVLVG9nUTJGdWJtOTBJR2x1YVhScFlXeHBlbVVnWVNCMGNtRnVjMkZqZEdsdmJpQjNhR1Z1SUhSb1pYSmxJQ2NnSzF4dUlDQWdJQ0FnSjJseklHRnNjbVZoWkhrZ1lXNGdiM1YwYzNSaGJtUnBibWNnZEhKaGJuTmhZM1JwYjI0dUoxeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JWFJvYVhNdWFYTkpibFJ5WVc1ellXTjBhVzl1S0NrcEtUdGNiaUFnSUNCMllYSWdaWEp5YjNKVWFISnZkMjQ3WEc0Z0lDQWdkbUZ5SUhKbGREdGNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZmFYTkpibFJ5WVc1ellXTjBhVzl1SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQzh2SUVOaGRHTm9hVzVuSUdWeWNtOXljeUJ0WVd0bGN5QmtaV0oxWjJkcGJtY2diVzl5WlNCa2FXWm1hV04xYkhRc0lITnZJSGRsSUhOMFlYSjBJSGRwZEdoY2JpQWdJQ0FnSUM4dklHVnljbTl5VkdoeWIzZHVJSE5sZENCMGJ5QjBjblZsSUdKbFptOXlaU0J6WlhSMGFXNW5JR2wwSUhSdklHWmhiSE5sSUdGbWRHVnlJR05oYkd4cGJtZGNiaUFnSUNBZ0lDOHZJR05zYjNObElDMHRJR2xtSUdsMEozTWdjM1JwYkd3Z2MyVjBJSFJ2SUhSeWRXVWdhVzRnZEdobElHWnBibUZzYkhrZ1lteHZZMnNzSUdsMElHMWxZVzV6WEc0Z0lDQWdJQ0F2THlCdmJtVWdiMllnZEdobGMyVWdZMkZzYkhNZ2RHaHlaWGN1WEc0Z0lDQWdJQ0JsY25KdmNsUm9jbTkzYmlBOUlIUnlkV1U3WEc0Z0lDQWdJQ0IwYUdsekxtbHVhWFJwWVd4cGVtVkJiR3dvTUNrN1hHNGdJQ0FnSUNCeVpYUWdQU0J0WlhSb2IyUXVZMkZzYkNoelkyOXdaU3dnWVN3Z1lpd2dZeXdnWkN3Z1pTd2daaWs3WEc0Z0lDQWdJQ0JsY25KdmNsUm9jbTkzYmlBOUlHWmhiSE5sTzF4dUlDQWdJSDBnWm1sdVlXeHNlU0I3WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWlhKeWIzSlVhSEp2ZDI0cElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCSlppQmdiV1YwYUc5a1lDQjBhSEp2ZDNNc0lIQnlaV1psY2lCMGJ5QnphRzkzSUhSb1lYUWdjM1JoWTJzZ2RISmhZMlVnYjNabGNpQmhibmtnZEdoeWIzZHVYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1lua2dhVzUyYjJ0cGJtY2dZR05zYjNObFFXeHNZQzVjYmlBZ0lDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVqYkc5elpVRnNiQ2d3S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxjbklwSUh0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1UybHVZMlVnWUcxbGRHaHZaR0FnWkdsa2JpZDBJSFJvY205M0xDQjNaU0JrYjI0bmRDQjNZVzUwSUhSdklITnBiR1Z1WTJVZ2RHaGxJR1Y0WTJWd2RHbHZibHh1SUNBZ0lDQWdJQ0FnSUM4dklHaGxjbVV1WEc0Z0lDQWdJQ0FnSUNBZ2RHaHBjeTVqYkc5elpVRnNiQ2d3S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTQm1hVzVoYkd4NUlIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZmFYTkpibFJ5WVc1ellXTjBhVzl1SUQwZ1ptRnNjMlU3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCeVpYUTdYRzRnSUgwc1hHNWNiaUFnYVc1cGRHbGhiR2w2WlVGc2JEb2dablZ1WTNScGIyNG9jM1JoY25SSmJtUmxlQ2tnZTF4dUlDQWdJSFpoY2lCMGNtRnVjMkZqZEdsdmJsZHlZWEJ3WlhKeklEMGdkR2hwY3k1MGNtRnVjMkZqZEdsdmJsZHlZWEJ3WlhKek8xeHVJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQnpkR0Z5ZEVsdVpHVjRPeUJwSUR3Z2RISmhibk5oWTNScGIyNVhjbUZ3Y0dWeWN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnZG1GeUlIZHlZWEJ3WlhJZ1BTQjBjbUZ1YzJGamRHbHZibGR5WVhCd1pYSnpXMmxkTzF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdMeThnUTJGMFkyaHBibWNnWlhKeWIzSnpJRzFoYTJWeklHUmxZblZuWjJsdVp5QnRiM0psSUdScFptWnBZM1ZzZEN3Z2MyOGdkMlVnYzNSaGNuUWdkMmwwYUNCMGFHVmNiaUFnSUNBZ0lDQWdMeThnVDBKVFJWSldSVVJmUlZKU1QxSWdjM1JoZEdVZ1ltVm1iM0psSUc5MlpYSjNjbWwwYVc1bklHbDBJSGRwZEdnZ2RHaGxJSEpsWVd3Z2NtVjBkWEp1SUhaaGJIVmxYRzRnSUNBZ0lDQWdJQzh2SUc5bUlHbHVhWFJwWVd4cGVtVWdMUzBnYVdZZ2FYUW5jeUJ6ZEdsc2JDQnpaWFFnZEc4Z1QwSlRSVkpXUlVSZlJWSlNUMUlnYVc0Z2RHaGxJR1pwYm1Gc2JIbGNiaUFnSUNBZ0lDQWdMeThnWW14dlkyc3NJR2wwSUcxbFlXNXpJSGR5WVhCd1pYSXVhVzVwZEdsaGJHbDZaU0IwYUhKbGR5NWNiaUFnSUNBZ0lDQWdkR2hwY3k1M2NtRndjR1Z5U1c1cGRFUmhkR0ZiYVYwZ1BTQlVjbUZ1YzJGamRHbHZiaTVQUWxORlVsWkZSRjlGVWxKUFVqdGNiaUFnSUNBZ0lDQWdkR2hwY3k1M2NtRndjR1Z5U1c1cGRFUmhkR0ZiYVYwZ1BTQjNjbUZ3Y0dWeUxtbHVhWFJwWVd4cGVtVWdQMXh1SUNBZ0lDQWdJQ0FnSUhkeVlYQndaWEl1YVc1cGRHbGhiR2w2WlM1allXeHNLSFJvYVhNcElEcGNiaUFnSUNBZ0lDQWdJQ0J1ZFd4c08xeHVJQ0FnSUNBZ2ZTQm1hVzVoYkd4NUlIdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVkM0poY0hCbGNrbHVhWFJFWVhSaFcybGRJRDA5UFNCVWNtRnVjMkZqZEdsdmJpNVBRbE5GVWxaRlJGOUZVbEpQVWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUZSb1pTQnBibWwwYVdGc2FYcGxjaUJtYjNJZ2QzSmhjSEJsY2lCcElIUm9jbVYzSUdGdUlHVnljbTl5T3lCcGJtbDBhV0ZzYVhwbElIUm9aVnh1SUNBZ0lDQWdJQ0FnSUM4dklISmxiV0ZwYm1sdVp5QjNjbUZ3Y0dWeWN5QmlkWFFnYzJsc1pXNWpaU0JoYm5rZ1pYaGpaWEIwYVc5dWN5Qm1jbTl0SUhSb1pXMGdkRzhnWlc1emRYSmxYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2RHaGhkQ0IwYUdVZ1ptbHljM1FnWlhKeWIzSWdhWE1nZEdobElHOXVaU0IwYnlCaWRXSmliR1VnZFhBdVhHNGdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWFXNXBkR2xoYkdsNlpVRnNiQ2hwSUNzZ01TazdYRzRnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlhKeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkpiblp2YTJWeklHVmhZMmdnYjJZZ1lIUm9hWE11ZEhKaGJuTmhZM1JwYjI1WGNtRndjR1Z5Y3k1amJHOXpaVnRwWFdBZ1puVnVZM1JwYjI1ekxDQndZWE56YVc1bklHbHVkRzljYmlBZ0lDb2dkR2hsYlNCMGFHVWdjbVZ6Y0dWamRHbDJaU0J5WlhSMWNtNGdkbUZzZFdWeklHOW1JR0IwYUdsekxuUnlZVzV6WVdOMGFXOXVWM0poY0hCbGNuTXVhVzVwZEZ0cFhXQmNiaUFnSUNvZ0tHQmpiRzl6WldCeWN5QjBhR0YwSUdOdmNuSmxjM0J2Ym1RZ2RHOGdhVzVwZEdsaGJHbDZaWEp6SUhSb1lYUWdabUZwYkdWa0lIZHBiR3dnYm05MElHSmxYRzRnSUNBcUlHbHVkbTlyWldRcExseHVJQ0FnS2k5Y2JpQWdZMnh2YzJWQmJHdzZJR1oxYm1OMGFXOXVLSE4wWVhKMFNXNWtaWGdwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdkR2hwY3k1cGMwbHVWSEpoYm5OaFkzUnBiMjRvS1N4Y2JpQWdJQ0FnSUNkVWNtRnVjMkZqZEdsdmJpNWpiRzl6WlVGc2JDZ3BPaUJEWVc1dWIzUWdZMnh2YzJVZ2RISmhibk5oWTNScGIyNGdkMmhsYmlCdWIyNWxJR0Z5WlNCdmNHVnVMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hSb2FYTXVhWE5KYmxSeVlXNXpZV04wYVc5dUtDa3BLVHRjYmlBZ0lDQjJZWElnZEhKaGJuTmhZM1JwYjI1WGNtRndjR1Z5Y3lBOUlIUm9hWE11ZEhKaGJuTmhZM1JwYjI1WGNtRndjR1Z5Y3p0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ2MzUmhjblJKYm1SbGVEc2dhU0E4SUhSeVlXNXpZV04wYVc5dVYzSmhjSEJsY25NdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJSFpoY2lCM2NtRndjR1Z5SUQwZ2RISmhibk5oWTNScGIyNVhjbUZ3Y0dWeWMxdHBYVHRjYmlBZ0lDQWdJSFpoY2lCcGJtbDBSR0YwWVNBOUlIUm9hWE11ZDNKaGNIQmxja2x1YVhSRVlYUmhXMmxkTzF4dUlDQWdJQ0FnZG1GeUlHVnljbTl5VkdoeWIzZHVPMXh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0x5OGdRMkYwWTJocGJtY2daWEp5YjNKeklHMWhhMlZ6SUdSbFluVm5aMmx1WnlCdGIzSmxJR1JwWm1acFkzVnNkQ3dnYzI4Z2QyVWdjM1JoY25RZ2QybDBhRnh1SUNBZ0lDQWdJQ0F2THlCbGNuSnZjbFJvY205M2JpQnpaWFFnZEc4Z2RISjFaU0JpWldadmNtVWdjMlYwZEdsdVp5QnBkQ0IwYnlCbVlXeHpaU0JoWm5SbGNpQmpZV3hzYVc1blhHNGdJQ0FnSUNBZ0lDOHZJR05zYjNObElDMHRJR2xtSUdsMEozTWdjM1JwYkd3Z2MyVjBJSFJ2SUhSeWRXVWdhVzRnZEdobElHWnBibUZzYkhrZ1lteHZZMnNzSUdsMElHMWxZVzV6WEc0Z0lDQWdJQ0FnSUM4dklIZHlZWEJ3WlhJdVkyeHZjMlVnZEdoeVpYY3VYRzRnSUNBZ0lDQWdJR1Z5Y205eVZHaHliM2R1SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHbHVhWFJFWVhSaElDRTlQU0JVY21GdWMyRmpkR2x2Ymk1UFFsTkZVbFpGUkY5RlVsSlBVaUFtSmlCM2NtRndjR1Z5TG1Oc2IzTmxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2QzSmhjSEJsY2k1amJHOXpaUzVqWVd4c0tIUm9hWE1zSUdsdWFYUkVZWFJoS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmxjbkp2Y2xSb2NtOTNiaUE5SUdaaGJITmxPMXh1SUNBZ0lDQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHVnljbTl5VkdoeWIzZHVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdWR2hsSUdOc2IzTmxjaUJtYjNJZ2QzSmhjSEJsY2lCcElIUm9jbVYzSUdGdUlHVnljbTl5T3lCamJHOXpaU0IwYUdVZ2NtVnRZV2x1YVc1blhHNGdJQ0FnSUNBZ0lDQWdMeThnZDNKaGNIQmxjbk1nWW5WMElITnBiR1Z1WTJVZ1lXNTVJR1Y0WTJWd2RHbHZibk1nWm5KdmJTQjBhR1Z0SUhSdklHVnVjM1Z5WlNCMGFHRjBJSFJvWlZ4dUlDQWdJQ0FnSUNBZ0lDOHZJR1pwY25OMElHVnljbTl5SUdseklIUm9aU0J2Ym1VZ2RHOGdZblZpWW14bElIVndMbHh1SUNBZ0lDQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbU5zYjNObFFXeHNLR2tnS3lBeEtUdGNiaUFnSUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11ZDNKaGNIQmxja2x1YVhSRVlYUmhMbXhsYm1kMGFDQTlJREE3WEc0Z0lIMWNibjA3WEc1Y2JuWmhjaUJVY21GdWMyRmpkR2x2YmlBOUlIdGNibHh1SUNCTmFYaHBiam9nVFdsNGFXNHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGUnZhMlZ1SUhSdklHeHZiMnNnWm05eUlIUnZJR1JsZEdWeWJXbHVaU0JwWmlCaGJpQmxjbkp2Y2lCdlkyTjFjbVZrTGx4dUlDQWdLaTljYmlBZ1QwSlRSVkpXUlVSZlJWSlNUMUk2SUh0OVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1ZISmhibk5oWTNScGIyNDdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBWaWV3cG9ydE1ldHJpY3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBWaWV3cG9ydE1ldHJpY3MgPSB7XG5cbiAgY3VycmVudFNjcm9sbExlZnQ6IDAsXG5cbiAgY3VycmVudFNjcm9sbFRvcDogMCxcblxuICByZWZyZXNoU2Nyb2xsVmFsdWVzOiBmdW5jdGlvbihzY3JvbGxQb3NpdGlvbikge1xuICAgIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsTGVmdCA9IHNjcm9sbFBvc2l0aW9uLng7XG4gICAgVmlld3BvcnRNZXRyaWNzLmN1cnJlbnRTY3JvbGxUb3AgPSBzY3JvbGxQb3NpdGlvbi55O1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVmlld3BvcnRNZXRyaWNzO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBhY2N1bXVsYXRlSW50b1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKlxuICogQWNjdW11bGF0ZXMgaXRlbXMgdGhhdCBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBpbnRvIHRoZSBmaXJzdCBvbmUuIFRoaXNcbiAqIGlzIHVzZWQgdG8gY29uc2VydmUgbWVtb3J5IGJ5IGF2b2lkaW5nIGFycmF5IGFsbG9jYXRpb25zLCBhbmQgdGh1cyBzYWNyaWZpY2VzXG4gKiBBUEkgY2xlYW5uZXNzLiBTaW5jZSBgY3VycmVudGAgY2FuIGJlIG51bGwgYmVmb3JlIGJlaW5nIHBhc3NlZCBpbiBhbmQgbm90XG4gKiBudWxsIGFmdGVyIHRoaXMgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0byBhc3NpZ24gaXQgYmFjayB0byBgY3VycmVudGA6XG4gKlxuICogYGEgPSBhY2N1bXVsYXRlSW50byhhLCBiKTtgXG4gKlxuICogVGhpcyBBUEkgc2hvdWxkIGJlIHNwYXJpbmdseSB1c2VkLiBUcnkgYGFjY3VtdWxhdGVgIGZvciBzb21ldGhpbmcgY2xlYW5lci5cbiAqXG4gKiBAcmV0dXJuIHsqfGFycmF5PCo+fSBBbiBhY2N1bXVsYXRpb24gb2YgaXRlbXMuXG4gKi9cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUludG8oY3VycmVudCwgbmV4dCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIG5leHQgIT0gbnVsbCxcbiAgICAnYWNjdW11bGF0ZUludG8oLi4uKTogQWNjdW11bGF0ZWQgaXRlbXMgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuJ1xuICApIDogaW52YXJpYW50KG5leHQgIT0gbnVsbCkpO1xuICBpZiAoY3VycmVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICAvLyBCb3RoIGFyZSBub3QgZW1wdHkuIFdhcm5pbmc6IE5ldmVyIGNhbGwgeC5jb25jYXQoeSkgd2hlbiB5b3UgYXJlIG5vdFxuICAvLyBjZXJ0YWluIHRoYXQgeCBpcyBhbiBBcnJheSAoeCBjb3VsZCBiZSBhIHN0cmluZyB3aXRoIGNvbmNhdCBtZXRob2QpLlxuICB2YXIgY3VycmVudElzQXJyYXkgPSBBcnJheS5pc0FycmF5KGN1cnJlbnQpO1xuICB2YXIgbmV4dElzQXJyYXkgPSBBcnJheS5pc0FycmF5KG5leHQpO1xuXG4gIGlmIChjdXJyZW50SXNBcnJheSAmJiBuZXh0SXNBcnJheSkge1xuICAgIGN1cnJlbnQucHVzaC5hcHBseShjdXJyZW50LCBuZXh0KTtcbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIGlmIChjdXJyZW50SXNBcnJheSkge1xuICAgIGN1cnJlbnQucHVzaChuZXh0KTtcbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIGlmIChuZXh0SXNBcnJheSkge1xuICAgIC8vIEEgYml0IHRvbyBkYW5nZXJvdXMgdG8gbXV0YXRlIGBuZXh0YC5cbiAgICByZXR1cm4gW2N1cnJlbnRdLmNvbmNhdChuZXh0KTtcbiAgfVxuXG4gIHJldHVybiBbY3VycmVudCwgbmV4dF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjdW11bGF0ZUludG87XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZZV05qZFcxMWJHRjBaVWx1ZEc4dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE5DMHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElHRmpZM1Z0ZFd4aGRHVkpiblJ2WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzR2S2lwY2JpQXFYRzRnS2lCQlkyTjFiWFZzWVhSbGN5QnBkR1Z0Y3lCMGFHRjBJRzExYzNRZ2JtOTBJR0psSUc1MWJHd2diM0lnZFc1a1pXWnBibVZrSUdsdWRHOGdkR2hsSUdacGNuTjBJRzl1WlM0Z1ZHaHBjMXh1SUNvZ2FYTWdkWE5sWkNCMGJ5QmpiMjV6WlhKMlpTQnRaVzF2Y25rZ1lua2dZWFp2YVdScGJtY2dZWEp5WVhrZ1lXeHNiMk5oZEdsdmJuTXNJR0Z1WkNCMGFIVnpJSE5oWTNKcFptbGpaWE5jYmlBcUlFRlFTU0JqYkdWaGJtNWxjM011SUZOcGJtTmxJR0JqZFhKeVpXNTBZQ0JqWVc0Z1ltVWdiblZzYkNCaVpXWnZjbVVnWW1WcGJtY2djR0Z6YzJWa0lHbHVJR0Z1WkNCdWIzUmNiaUFxSUc1MWJHd2dZV1owWlhJZ2RHaHBjeUJtZFc1amRHbHZiaXdnYldGclpTQnpkWEpsSUhSdklHRnpjMmxuYmlCcGRDQmlZV05ySUhSdklHQmpkWEp5Wlc1MFlEcGNiaUFxWEc0Z0tpQmdZU0E5SUdGalkzVnRkV3hoZEdWSmJuUnZLR0VzSUdJcE8yQmNiaUFxWEc0Z0tpQlVhR2x6SUVGUVNTQnphRzkxYkdRZ1ltVWdjM0JoY21sdVoyeDVJSFZ6WldRdUlGUnllU0JnWVdOamRXMTFiR0YwWldBZ1ptOXlJSE52YldWMGFHbHVaeUJqYkdWaGJtVnlMbHh1SUNwY2JpQXFJRUJ5WlhSMWNtNGdleXA4WVhKeVlYazhLajU5SUVGdUlHRmpZM1Z0ZFd4aGRHbHZiaUJ2WmlCcGRHVnRjeTVjYmlBcUwxeHVYRzVtZFc1amRHbHZiaUJoWTJOMWJYVnNZWFJsU1c1MGJ5aGpkWEp5Wlc1MExDQnVaWGgwS1NCN1hHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ2JtVjRkQ0FoUFNCdWRXeHNMRnh1SUNBZ0lDZGhZMk4xYlhWc1lYUmxTVzUwYnlndUxpNHBPaUJCWTJOMWJYVnNZWFJsWkNCcGRHVnRjeUJ0ZFhOMElHNXZkQ0JpWlNCdWRXeHNJRzl5SUhWdVpHVm1hVzVsWkM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2JtVjRkQ0FoUFNCdWRXeHNLU2s3WEc0Z0lHbG1JQ2hqZFhKeVpXNTBJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjRkRHRjYmlBZ2ZWeHVYRzRnSUM4dklFSnZkR2dnWVhKbElHNXZkQ0JsYlhCMGVTNGdWMkZ5Ym1sdVp6b2dUbVYyWlhJZ1kyRnNiQ0I0TG1OdmJtTmhkQ2g1S1NCM2FHVnVJSGx2ZFNCaGNtVWdibTkwWEc0Z0lDOHZJR05sY25SaGFXNGdkR2hoZENCNElHbHpJR0Z1SUVGeWNtRjVJQ2g0SUdOdmRXeGtJR0psSUdFZ2MzUnlhVzVuSUhkcGRHZ2dZMjl1WTJGMElHMWxkR2h2WkNrdVhHNGdJSFpoY2lCamRYSnlaVzUwU1hOQmNuSmhlU0E5SUVGeWNtRjVMbWx6UVhKeVlYa29ZM1Z5Y21WdWRDazdYRzRnSUhaaGNpQnVaWGgwU1hOQmNuSmhlU0E5SUVGeWNtRjVMbWx6UVhKeVlYa29ibVY0ZENrN1hHNWNiaUFnYVdZZ0tHTjFjbkpsYm5SSmMwRnljbUY1SUNZbUlHNWxlSFJKYzBGeWNtRjVLU0I3WEc0Z0lDQWdZM1Z5Y21WdWRDNXdkWE5vTG1Gd2NHeDVLR04xY25KbGJuUXNJRzVsZUhRcE8xeHVJQ0FnSUhKbGRIVnliaUJqZFhKeVpXNTBPMXh1SUNCOVhHNWNiaUFnYVdZZ0tHTjFjbkpsYm5SSmMwRnljbUY1S1NCN1hHNGdJQ0FnWTNWeWNtVnVkQzV3ZFhOb0tHNWxlSFFwTzF4dUlDQWdJSEpsZEhWeWJpQmpkWEp5Wlc1ME8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0c1bGVIUkpjMEZ5Y21GNUtTQjdYRzRnSUNBZ0x5OGdRU0JpYVhRZ2RHOXZJR1JoYm1kbGNtOTFjeUIwYnlCdGRYUmhkR1VnWUc1bGVIUmdMbHh1SUNBZ0lISmxkSFZ5YmlCYlkzVnljbVZ1ZEYwdVkyOXVZMkYwS0c1bGVIUXBPMXh1SUNCOVhHNWNiaUFnY21WMGRYSnVJRnRqZFhKeVpXNTBMQ0J1WlhoMFhUdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCaFkyTjFiWFZzWVhSbFNXNTBienRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgYWRsZXIzMlxuICovXG5cbi8qIGpzbGludCBiaXR3aXNlOnRydWUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgTU9EID0gNjU1MjE7XG5cbi8vIFRoaXMgaXMgYSBjbGVhbi1yb29tIGltcGxlbWVudGF0aW9uIG9mIGFkbGVyMzIgZGVzaWduZWQgZm9yIGRldGVjdGluZ1xuLy8gaWYgbWFya3VwIGlzIG5vdCB3aGF0IHdlIGV4cGVjdCBpdCB0byBiZS4gSXQgZG9lcyBub3QgbmVlZCB0byBiZVxuLy8gY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nLCBvbmx5IHJlYXNvbmFibHkgZ29vZCBhdCBkZXRlY3RpbmcgaWYgbWFya3VwXG4vLyBnZW5lcmF0ZWQgb24gdGhlIHNlcnZlciBpcyBkaWZmZXJlbnQgdGhhbiB0aGF0IG9uIHRoZSBjbGllbnQuXG5mdW5jdGlvbiBhZGxlcjMyKGRhdGEpIHtcbiAgdmFyIGEgPSAxO1xuICB2YXIgYiA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGEgPSAoYSArIGRhdGEuY2hhckNvZGVBdChpKSkgJSBNT0Q7XG4gICAgYiA9IChiICsgYSkgJSBNT0Q7XG4gIH1cbiAgcmV0dXJuIGEgfCAoYiA8PCAxNik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYWRsZXIzMjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBjYW1lbGl6ZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgX2h5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuXG4vKipcbiAqIENhbWVsY2FzZXMgYSBoeXBoZW5hdGVkIHN0cmluZywgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGNhbWVsaXplKCdiYWNrZ3JvdW5kLWNvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmRDb2xvclwiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF9oeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbihfLCBjaGFyYWN0ZXIpIHtcbiAgICByZXR1cm4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbWVsaXplO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGNhbWVsaXplU3R5bGVOYW1lXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgY2FtZWxpemUgPSByZXF1aXJlKFwiLi9jYW1lbGl6ZVwiKTtcblxudmFyIG1zUGF0dGVybiA9IC9eLW1zLS87XG5cbi8qKlxuICogQ2FtZWxjYXNlcyBhIGh5cGhlbmF0ZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBjYW1lbGl6ZVN0eWxlTmFtZSgnYmFja2dyb3VuZC1jb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICogICA+IGNhbWVsaXplU3R5bGVOYW1lKCctbW96LXRyYW5zaXRpb24nKVxuICogICA8IFwiTW96VHJhbnNpdGlvblwiXG4gKiAgID4gY2FtZWxpemVTdHlsZU5hbWUoJy1tcy10cmFuc2l0aW9uJylcbiAqICAgPCBcIm1zVHJhbnNpdGlvblwiXG4gKlxuICogQXMgQW5kaSBTbWl0aCBzdWdnZXN0c1xuICogKGh0dHA6Ly93d3cuYW5kaXNtaXRoLmNvbS9ibG9nLzIwMTIvMDIvbW9kZXJuaXpyLXByZWZpeGVkLyksIGFuIGAtbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY2FtZWxpemVTdHlsZU5hbWUoc3RyaW5nKSB7XG4gIHJldHVybiBjYW1lbGl6ZShzdHJpbmcucmVwbGFjZShtc1BhdHRlcm4sICdtcy0nKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FtZWxpemVTdHlsZU5hbWU7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqIEBwcm92aWRlc01vZHVsZSBjbG9uZVdpdGhQcm9wc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdFByb3BUcmFuc2ZlcmVyID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHJhbnNmZXJlclwiKTtcblxudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBDSElMRFJFTl9QUk9QID0ga2V5T2Yoe2NoaWxkcmVuOiBudWxsfSk7XG5cbi8qKlxuICogU29tZXRpbWVzIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgcHJvcHMgb2YgYSBjaGlsZCBwYXNzZWQgdG8geW91LiBVc3VhbGx5XG4gKiB0aGlzIGlzIHRvIGFkZCBhIENTUyBjbGFzcy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gY2hpbGQgY2hpbGQgZWxlbWVudCB5b3UnZCBsaWtlIHRvIGNsb25lXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgcHJvcHMgeW91J2QgbGlrZSB0byBtb2RpZnkuIGNsYXNzTmFtZSBhbmQgc3R5bGUgd2lsbCBiZVxuICogbWVyZ2VkIGF1dG9tYXRpY2FsbHkuXG4gKiBAcmV0dXJuIHtSZWFjdEVsZW1lbnR9IGEgY2xvbmUgb2YgY2hpbGQgd2l0aCBwcm9wcyBtZXJnZWQgaW4uXG4gKi9cbmZ1bmN0aW9uIGNsb25lV2l0aFByb3BzKGNoaWxkLCBwcm9wcykge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAhY2hpbGQucmVmLFxuICAgICAgJ1lvdSBhcmUgY2FsbGluZyBjbG9uZVdpdGhQcm9wcygpIG9uIGEgY2hpbGQgd2l0aCBhIHJlZi4gVGhpcyBpcyAnICtcbiAgICAgICdkYW5nZXJvdXMgYmVjYXVzZSB5b3VcXCdyZSBjcmVhdGluZyBhIG5ldyBjaGlsZCB3aGljaCB3aWxsIG5vdCBiZSAnICtcbiAgICAgICdhZGRlZCBhcyBhIHJlZiB0byBpdHMgcGFyZW50LidcbiAgICApIDogbnVsbCk7XG4gIH1cblxuICB2YXIgbmV3UHJvcHMgPSBSZWFjdFByb3BUcmFuc2ZlcmVyLm1lcmdlUHJvcHMocHJvcHMsIGNoaWxkLnByb3BzKTtcblxuICAvLyBVc2UgYGNoaWxkLnByb3BzLmNoaWxkcmVuYCBpZiBpdCBpcyBwcm92aWRlZC5cbiAgaWYgKCFuZXdQcm9wcy5oYXNPd25Qcm9wZXJ0eShDSElMRFJFTl9QUk9QKSAmJlxuICAgICAgY2hpbGQucHJvcHMuaGFzT3duUHJvcGVydHkoQ0hJTERSRU5fUFJPUCkpIHtcbiAgICBuZXdQcm9wcy5jaGlsZHJlbiA9IGNoaWxkLnByb3BzLmNoaWxkcmVuO1xuICB9XG5cbiAgLy8gVGhlIGN1cnJlbnQgQVBJIGRvZXNuJ3QgcmV0YWluIF9vd25lciBhbmQgX2NvbnRleHQsIHdoaWNoIGlzIHdoeSB0aGlzXG4gIC8vIGRvZXNuJ3QgdXNlIFJlYWN0RWxlbWVudC5jbG9uZUFuZFJlcGxhY2VQcm9wcy5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50KGNoaWxkLnR5cGUsIG5ld1Byb3BzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVdpdGhQcm9wcztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlkyeHZibVZYYVhSb1VISnZjSE11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQjBlWEJsWTJobFkydHpJSE4wWVhScFl5MXZibXg1WEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1kyeHZibVZYYVhSb1VISnZjSE5jYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSUWNtOXdWSEpoYm5ObVpYSmxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVUhKdmNGUnlZVzV6Wm1WeVpYSmNJaWs3WEc1Y2JuWmhjaUJyWlhsUFppQTlJSEpsY1hWcGNtVW9YQ0l1TDJ0bGVVOW1YQ0lwTzF4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzUyWVhJZ1EwaEpURVJTUlU1ZlVGSlBVQ0E5SUd0bGVVOW1LSHRqYUdsc1pISmxiam9nYm5Wc2JIMHBPMXh1WEc0dktpcGNiaUFxSUZOdmJXVjBhVzFsY3lCNWIzVWdkMkZ1ZENCMGJ5QmphR0Z1WjJVZ2RHaGxJSEJ5YjNCeklHOW1JR0VnWTJocGJHUWdjR0Z6YzJWa0lIUnZJSGx2ZFM0Z1ZYTjFZV3hzZVZ4dUlDb2dkR2hwY3lCcGN5QjBieUJoWkdRZ1lTQkRVMU1nWTJ4aGMzTXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUdOb2FXeGtJR05vYVd4a0lHVnNaVzFsYm5RZ2VXOTFKMlFnYkdsclpTQjBieUJqYkc5dVpWeHVJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJ5YjNCeklIQnliM0J6SUhsdmRTZGtJR3hwYTJVZ2RHOGdiVzlrYVdaNUxpQmpiR0Z6YzA1aGJXVWdZVzVrSUhOMGVXeGxJSGRwYkd3Z1ltVmNiaUFxSUcxbGNtZGxaQ0JoZFhSdmJXRjBhV05oYkd4NUxseHVJQ29nUUhKbGRIVnliaUI3VW1WaFkzUkZiR1Z0Wlc1MGZTQmhJR05zYjI1bElHOW1JR05vYVd4a0lIZHBkR2dnY0hKdmNITWdiV1Z5WjJWa0lHbHVMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmpiRzl1WlZkcGRHaFFjbTl3Y3loamFHbHNaQ3dnY0hKdmNITXBJSHRjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJV05vYVd4a0xuSmxaaXhjYmlBZ0lDQWdJQ2RaYjNVZ1lYSmxJR05oYkd4cGJtY2dZMnh2Ym1WWGFYUm9VSEp2Y0hNb0tTQnZiaUJoSUdOb2FXeGtJSGRwZEdnZ1lTQnlaV1l1SUZSb2FYTWdhWE1nSnlBclhHNGdJQ0FnSUNBblpHRnVaMlZ5YjNWeklHSmxZMkYxYzJVZ2VXOTFYRnduY21VZ1kzSmxZWFJwYm1jZ1lTQnVaWGNnWTJocGJHUWdkMmhwWTJnZ2QybHNiQ0J1YjNRZ1ltVWdKeUFyWEc0Z0lDQWdJQ0FuWVdSa1pXUWdZWE1nWVNCeVpXWWdkRzhnYVhSeklIQmhjbVZ1ZEM0blhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQjlYRzVjYmlBZ2RtRnlJRzVsZDFCeWIzQnpJRDBnVW1WaFkzUlFjbTl3VkhKaGJuTm1aWEpsY2k1dFpYSm5aVkJ5YjNCektIQnliM0J6TENCamFHbHNaQzV3Y205d2N5azdYRzVjYmlBZ0x5OGdWWE5sSUdCamFHbHNaQzV3Y205d2N5NWphR2xzWkhKbGJtQWdhV1lnYVhRZ2FYTWdjSEp2ZG1sa1pXUXVYRzRnSUdsbUlDZ2hibVYzVUhKdmNITXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb1EwaEpURVJTUlU1ZlVGSlBVQ2tnSmlaY2JpQWdJQ0FnSUdOb2FXeGtMbkJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0VOSVNVeEVVa1ZPWDFCU1QxQXBLU0I3WEc0Z0lDQWdibVYzVUhKdmNITXVZMmhwYkdSeVpXNGdQU0JqYUdsc1pDNXdjbTl3Y3k1amFHbHNaSEpsYmp0Y2JpQWdmVnh1WEc0Z0lDOHZJRlJvWlNCamRYSnlaVzUwSUVGUVNTQmtiMlZ6YmlkMElISmxkR0ZwYmlCZmIzZHVaWElnWVc1a0lGOWpiMjUwWlhoMExDQjNhR2xqYUNCcGN5QjNhSGtnZEdocGMxeHVJQ0F2THlCa2IyVnpiaWQwSUhWelpTQlNaV0ZqZEVWc1pXMWxiblF1WTJ4dmJtVkJibVJTWlhCc1lXTmxVSEp2Y0hNdVhHNGdJSEpsZEhWeWJpQlNaV0ZqZEVWc1pXMWxiblF1WTNKbFlYUmxSV3hsYldWdWRDaGphR2xzWkM1MGVYQmxMQ0J1WlhkUWNtOXdjeWs3WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdZMnh2Ym1WWGFYUm9VSEp2Y0hNN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGNvbnRhaW5zTm9kZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgaXNUZXh0Tm9kZSA9IHJlcXVpcmUoXCIuL2lzVGV4dE5vZGVcIik7XG5cbi8qanNsaW50IGJpdHdpc2U6dHJ1ZSAqL1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIERPTSBub2RlIGNvbnRhaW5zIG9yIGlzIGFub3RoZXIgRE9NIG5vZGUuXG4gKlxuICogQHBhcmFtIHs/RE9NTm9kZX0gb3V0ZXJOb2RlIE91dGVyIERPTSBub2RlLlxuICogQHBhcmFtIHs/RE9NTm9kZX0gaW5uZXJOb2RlIElubmVyIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb3V0ZXJOb2RlYCBjb250YWlucyBvciBpcyBgaW5uZXJOb2RlYC5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIGlmICghb3V0ZXJOb2RlIHx8ICFpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlID09PSBpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG91dGVyTm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShpbm5lck5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUuY29udGFpbnMpIHtcbiAgICByZXR1cm4gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuICEhKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpbm5lck5vZGUpICYgMTYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbnRhaW5zTm9kZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBjcmVhdGVBcnJheUZyb21NaXhlZFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgdG9BcnJheSA9IHJlcXVpcmUoXCIuL3RvQXJyYXlcIik7XG5cbi8qKlxuICogUGVyZm9ybSBhIGhldXJpc3RpYyB0ZXN0IHRvIGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgXCJhcnJheS1saWtlXCIuXG4gKlxuICogICBBIG1vbmsgYXNrZWQgSm9zaHUsIGEgWmVuIG1hc3RlciwgXCJIYXMgYSBkb2cgQnVkZGhhIG5hdHVyZT9cIlxuICogICBKb3NodSByZXBsaWVkOiBcIk11LlwiXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGl0cyBhcmd1bWVudCBoYXMgXCJhcnJheSBuYXR1cmVcIjogaXQgcmV0dXJuc1xuICogdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYWN0dWFsIGFycmF5LCBhbiBgYXJndW1lbnRzJyBvYmplY3QsIG9yIGFuXG4gKiBIVE1MQ29sbGVjdGlvbiAoZS5nLiBub2RlLmNoaWxkTm9kZXMgb3Igbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgpKS5cbiAqXG4gKiBJdCB3aWxsIHJldHVybiBmYWxzZSBmb3Igb3RoZXIgYXJyYXktbGlrZSBvYmplY3RzIGxpa2UgRmlsZWxpc3QuXG4gKlxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0FycmF5TmF0dXJlKG9iaikge1xuICByZXR1cm4gKFxuICAgIC8vIG5vdCBudWxsL2ZhbHNlXG4gICAgISFvYmogJiZcbiAgICAvLyBhcnJheXMgYXJlIG9iamVjdHMsIE5vZGVMaXN0cyBhcmUgZnVuY3Rpb25zIGluIFNhZmFyaVxuICAgICh0eXBlb2Ygb2JqID09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAvLyBxdWFja3MgbGlrZSBhbiBhcnJheVxuICAgICgnbGVuZ3RoJyBpbiBvYmopICYmXG4gICAgLy8gbm90IHdpbmRvd1xuICAgICEoJ3NldEludGVydmFsJyBpbiBvYmopICYmXG4gICAgLy8gbm8gRE9NIG5vZGUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gYXJyYXktbGlrZVxuICAgIC8vIGEgJ3NlbGVjdCcgZWxlbWVudCBoYXMgJ2xlbmd0aCcgYW5kICdpdGVtJyBwcm9wZXJ0aWVzIG9uIElFOFxuICAgICh0eXBlb2Ygb2JqLm5vZGVUeXBlICE9ICdudW1iZXInKSAmJlxuICAgIChcbiAgICAgIC8vIGEgcmVhbCBhcnJheVxuICAgICAgKC8vIEhUTUxDb2xsZWN0aW9uL05vZGVMaXN0XG4gICAgICAoQXJyYXkuaXNBcnJheShvYmopIHx8XG4gICAgICAvLyBhcmd1bWVudHNcbiAgICAgICgnY2FsbGVlJyBpbiBvYmopIHx8ICdpdGVtJyBpbiBvYmopKVxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXkgYnkgd3JhcHBpbmcgaXQgaW4gYW4gYXJyYXkgaWYgaXQgaXMgbm90LlxuICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIGFyZ3VtZW50IGlmIGl0IGlzIGFscmVhZHkgYW4gYXJyYXkuXG4gKlxuICogVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGlkaW9tYXRpY2FsbHk6XG4gKlxuICogICB2YXIgY3JlYXRlQXJyYXlGcm9tTWl4ZWQgPSByZXF1aXJlKCdjcmVhdGVBcnJheUZyb21NaXhlZCcpO1xuICpcbiAqICAgZnVuY3Rpb24gdGFrZXNPbmVPck1vcmVUaGluZ3ModGhpbmdzKSB7XG4gKiAgICAgdGhpbmdzID0gY3JlYXRlQXJyYXlGcm9tTWl4ZWQodGhpbmdzKTtcbiAqICAgICAuLi5cbiAqICAgfVxuICpcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byB0cmVhdCBgdGhpbmdzJyBhcyBhbiBhcnJheSwgYnV0IGFjY2VwdCBzY2FsYXJzIGluIHRoZSBBUEkuXG4gKlxuICogSWYgeW91IG5lZWQgdG8gY29udmVydCBhbiBhcnJheS1saWtlIG9iamVjdCwgbGlrZSBgYXJndW1lbnRzYCwgaW50byBhbiBhcnJheVxuICogdXNlIHRvQXJyYXkgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybiB7YXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFycmF5RnJvbU1peGVkKG9iaikge1xuICBpZiAoIWhhc0FycmF5TmF0dXJlKG9iaikpIHtcbiAgICByZXR1cm4gW29ial07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5zbGljZSgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0b0FycmF5KG9iaik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBcnJheUZyb21NaXhlZDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgY3JlYXRlRnVsbFBhZ2VDb21wb25lbnRcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBEZWZlYXQgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSByZXF1aXJpbmcgdGhpcyBkaXJlY3RseS5cbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogQ3JlYXRlIGEgY29tcG9uZW50IHRoYXQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiB1bm1vdW50ZWQuXG4gKlxuICogQ29tcG9uZW50cyBsaWtlIDxodG1sPiA8aGVhZD4gYW5kIDxib2R5PiBjYW4ndCBiZSByZW1vdmVkIG9yIGFkZGVkXG4gKiBlYXNpbHkgaW4gYSBjcm9zcy1icm93c2VyIHdheSwgaG93ZXZlciBpdCdzIHZhbHVhYmxlIHRvIGJlIGFibGUgdG9cbiAqIHRha2UgYWR2YW50YWdlIG9mIFJlYWN0J3MgcmVjb25jaWxpYXRpb24gZm9yIHN0eWxpbmcgYW5kIDx0aXRsZT5cbiAqIG1hbmFnZW1lbnQuIFNvIHdlIGp1c3QgZG9jdW1lbnQgaXQgYW5kIHRocm93IGluIGRhbmdlcm91cyBjYXNlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSB0YWcgdG8gd3JhcFxuICogQHJldHVybiB7ZnVuY3Rpb259IGNvbnZlbmllbmNlIGNvbnN0cnVjdG9yIG9mIG5ldyBjb21wb25lbnRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQodGFnKSB7XG4gIHZhciBlbGVtZW50RmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KHRhZyk7XG5cbiAgdmFyIEZ1bGxQYWdlQ29tcG9uZW50ID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gICAgdGFnTmFtZTogdGFnLnRvVXBwZXJDYXNlKCksXG4gICAgZGlzcGxheU5hbWU6ICdSZWFjdEZ1bGxQYWdlQ29tcG9uZW50JyArIHRhZyxcblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbigpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICAnJXMgdHJpZWQgdG8gdW5tb3VudC4gQmVjYXVzZSBvZiBjcm9zcy1icm93c2VyIHF1aXJrcyBpdCBpcyAnICtcbiAgICAgICAgJ2ltcG9zc2libGUgdG8gdW5tb3VudCBzb21lIHRvcC1sZXZlbCBjb21wb25lbnRzIChlZyA8aHRtbD4sIDxoZWFkPiwgJyArXG4gICAgICAgICdhbmQgPGJvZHk+KSByZWxpYWJseSBhbmQgZWZmaWNpZW50bHkuIFRvIGZpeCB0aGlzLCBoYXZlIGEgc2luZ2xlICcgK1xuICAgICAgICAndG9wLWxldmVsIGNvbXBvbmVudCB0aGF0IG5ldmVyIHVubW91bnRzIHJlbmRlciB0aGVzZSBlbGVtZW50cy4nLFxuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lXG4gICAgICApIDogaW52YXJpYW50KGZhbHNlKSk7XG4gICAgfSxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZWxlbWVudEZhY3RvcnkodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gRnVsbFBhZ2VDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZZM0psWVhSbFJuVnNiRkJoWjJWRGIyMXdiMjVsYm5RdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCamNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkRnh1SUNvZ1FIUjVjR1ZqYUdWamEzTmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JpOHZJRVJsWm1WaGRDQmphWEpqZFd4aGNpQnlaV1psY21WdVkyVnpJR0o1SUhKbGNYVnBjbWx1WnlCMGFHbHpJR1JwY21WamRHeDVMbHh1ZG1GeUlGSmxZV04wUTJ4aGMzTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU5zWVhOelhDSXBPMXh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVMeW9xWEc0Z0tpQkRjbVZoZEdVZ1lTQmpiMjF3YjI1bGJuUWdkR2hoZENCM2FXeHNJSFJvY205M0lHRnVJR1Y0WTJWd2RHbHZiaUIzYUdWdUlIVnViVzkxYm5SbFpDNWNiaUFxWEc0Z0tpQkRiMjF3YjI1bGJuUnpJR3hwYTJVZ1BHaDBiV3crSUR4b1pXRmtQaUJoYm1RZ1BHSnZaSGsrSUdOaGJpZDBJR0psSUhKbGJXOTJaV1FnYjNJZ1lXUmtaV1JjYmlBcUlHVmhjMmxzZVNCcGJpQmhJR055YjNOekxXSnliM2R6WlhJZ2QyRjVMQ0JvYjNkbGRtVnlJR2wwSjNNZ2RtRnNkV0ZpYkdVZ2RHOGdZbVVnWVdKc1pTQjBiMXh1SUNvZ2RHRnJaU0JoWkhaaGJuUmhaMlVnYjJZZ1VtVmhZM1FuY3lCeVpXTnZibU5wYkdsaGRHbHZiaUJtYjNJZ2MzUjViR2x1WnlCaGJtUWdQSFJwZEd4bFBseHVJQ29nYldGdVlXZGxiV1Z1ZEM0Z1UyOGdkMlVnYW5WemRDQmtiMk4xYldWdWRDQnBkQ0JoYm1RZ2RHaHliM2NnYVc0Z1pHRnVaMlZ5YjNWeklHTmhjMlZ6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IwWVdjZ1ZHaGxJSFJoWnlCMGJ5QjNjbUZ3WEc0Z0tpQkFjbVYwZFhKdUlIdG1kVzVqZEdsdmJuMGdZMjl1ZG1WdWFXVnVZMlVnWTI5dWMzUnlkV04wYjNJZ2IyWWdibVYzSUdOdmJYQnZibVZ1ZEZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJqY21WaGRHVkdkV3hzVUdGblpVTnZiWEJ2Ym1WdWRDaDBZV2NwSUh0Y2JpQWdkbUZ5SUdWc1pXMWxiblJHWVdOMGIzSjVJRDBnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVaaFkzUnZjbmtvZEdGbktUdGNibHh1SUNCMllYSWdSblZzYkZCaFoyVkRiMjF3YjI1bGJuUWdQU0JTWldGamRFTnNZWE56TG1OeVpXRjBaVU5zWVhOektIdGNiaUFnSUNCMFlXZE9ZVzFsT2lCMFlXY3VkRzlWY0hCbGNrTmhjMlVvS1N4Y2JpQWdJQ0JrYVhOd2JHRjVUbUZ0WlRvZ0oxSmxZV04wUm5Wc2JGQmhaMlZEYjIxd2IyNWxiblFuSUNzZ2RHRm5MRnh1WEc0Z0lDQWdZMjl0Y0c5dVpXNTBWMmxzYkZWdWJXOTFiblE2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNjbGN5QjBjbWxsWkNCMGJ5QjFibTF2ZFc1MExpQkNaV05oZFhObElHOW1JR055YjNOekxXSnliM2R6WlhJZ2NYVnBjbXR6SUdsMElHbHpJQ2NnSzF4dUlDQWdJQ0FnSUNBbmFXMXdiM056YVdKc1pTQjBieUIxYm0xdmRXNTBJSE52YldVZ2RHOXdMV3hsZG1Wc0lHTnZiWEJ2Ym1WdWRITWdLR1ZuSUR4b2RHMXNQaXdnUEdobFlXUStMQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0oyRnVaQ0E4WW05a2VUNHBJSEpsYkdsaFlteDVJR0Z1WkNCbFptWnBZMmxsYm5Sc2VTNGdWRzhnWm1sNElIUm9hWE1zSUdoaGRtVWdZU0J6YVc1bmJHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNkMGIzQXRiR1YyWld3Z1kyOXRjRzl1Wlc1MElIUm9ZWFFnYm1WMlpYSWdkVzV0YjNWdWRITWdjbVZ1WkdWeUlIUm9aWE5sSUdWc1pXMWxiblJ6TGljc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5dWMzUnlkV04wYjNJdVpHbHpjR3hoZVU1aGJXVmNiaUFnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvWm1Gc2MyVXBLVHRjYmlBZ0lDQjlMRnh1WEc0Z0lDQWdjbVZ1WkdWeU9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmxiR1Z0Wlc1MFJtRmpkRzl5ZVNoMGFHbHpMbkJ5YjNCektUdGNiaUFnSUNCOVhHNGdJSDBwTzF4dVhHNGdJSEpsZEhWeWJpQkdkV3hzVUdGblpVTnZiWEJ2Ym1WdWREdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCamNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkRHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGNyZWF0ZU5vZGVzRnJvbU1hcmt1cFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4vKmpzbGludCBldmlsOiB0cnVlLCBzdWI6IHRydWUgKi9cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBjcmVhdGVBcnJheUZyb21NaXhlZCA9IHJlcXVpcmUoXCIuL2NyZWF0ZUFycmF5RnJvbU1peGVkXCIpO1xudmFyIGdldE1hcmt1cFdyYXAgPSByZXF1aXJlKFwiLi9nZXRNYXJrdXBXcmFwXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBEdW1teSBjb250YWluZXIgdXNlZCB0byByZW5kZXIgYWxsIG1hcmt1cC5cbiAqL1xudmFyIGR1bW15Tm9kZSA9XG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIDogbnVsbDtcblxuLyoqXG4gKiBQYXR0ZXJuIHVzZWQgYnkgYGdldE5vZGVOYW1lYC5cbiAqL1xudmFyIG5vZGVOYW1lUGF0dGVybiA9IC9eXFxzKjwoXFx3KykvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBgbm9kZU5hbWVgIG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIGEgc3RyaW5nIG9mIG1hcmt1cC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIFN0cmluZyBvZiBtYXJrdXAuXG4gKiBAcmV0dXJuIHs/c3RyaW5nfSBOb2RlIG5hbWUgb2YgdGhlIHN1cHBsaWVkIG1hcmt1cC5cbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZU5hbWUobWFya3VwKSB7XG4gIHZhciBub2RlTmFtZU1hdGNoID0gbWFya3VwLm1hdGNoKG5vZGVOYW1lUGF0dGVybik7XG4gIHJldHVybiBub2RlTmFtZU1hdGNoICYmIG5vZGVOYW1lTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5vZGVzIHJlbmRlcmVkIGZyb20gdGhlIHN1cHBsaWVkIG1hcmt1cC4gVGhlXG4gKiBvcHRpb25hbGx5IHN1cHBsaWVkIGBoYW5kbGVTY3JpcHRgIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBvbmNlIGZvciBlYWNoXG4gKiA8c2NyaXB0PiBlbGVtZW50IHRoYXQgaXMgcmVuZGVyZWQuIElmIG5vIGBoYW5kbGVTY3JpcHRgIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLFxuICogYW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiBhbnkgPHNjcmlwdD4gZWxlbWVudHMgYXJlIHJlbmRlcmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgQSBzdHJpbmcgb2YgdmFsaWQgSFRNTCBtYXJrdXAuXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gaGFuZGxlU2NyaXB0IEludm9rZWQgb25jZSBmb3IgZWFjaCByZW5kZXJlZCA8c2NyaXB0Pi5cbiAqIEByZXR1cm4ge2FycmF5PERPTUVsZW1lbnR8RE9NVGV4dE5vZGU+fSBBbiBhcnJheSBvZiByZW5kZXJlZCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTm9kZXNGcm9tTWFya3VwKG1hcmt1cCwgaGFuZGxlU2NyaXB0KSB7XG4gIHZhciBub2RlID0gZHVtbXlOb2RlO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KCEhZHVtbXlOb2RlLCAnY3JlYXRlTm9kZXNGcm9tTWFya3VwIGR1bW15IG5vdCBpbml0aWFsaXplZCcpIDogaW52YXJpYW50KCEhZHVtbXlOb2RlKSk7XG4gIHZhciBub2RlTmFtZSA9IGdldE5vZGVOYW1lKG1hcmt1cCk7XG5cbiAgdmFyIHdyYXAgPSBub2RlTmFtZSAmJiBnZXRNYXJrdXBXcmFwKG5vZGVOYW1lKTtcbiAgaWYgKHdyYXApIHtcbiAgICBub2RlLmlubmVySFRNTCA9IHdyYXBbMV0gKyBtYXJrdXAgKyB3cmFwWzJdO1xuXG4gICAgdmFyIHdyYXBEZXB0aCA9IHdyYXBbMF07XG4gICAgd2hpbGUgKHdyYXBEZXB0aC0tKSB7XG4gICAgICBub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5vZGUuaW5uZXJIVE1MID0gbWFya3VwO1xuICB9XG5cbiAgdmFyIHNjcmlwdHMgPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgaWYgKHNjcmlwdHMubGVuZ3RoKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGhhbmRsZVNjcmlwdCxcbiAgICAgICdjcmVhdGVOb2Rlc0Zyb21NYXJrdXAoLi4uKTogVW5leHBlY3RlZCA8c2NyaXB0PiBlbGVtZW50IHJlbmRlcmVkLidcbiAgICApIDogaW52YXJpYW50KGhhbmRsZVNjcmlwdCkpO1xuICAgIGNyZWF0ZUFycmF5RnJvbU1peGVkKHNjcmlwdHMpLmZvckVhY2goaGFuZGxlU2NyaXB0KTtcbiAgfVxuXG4gIHZhciBub2RlcyA9IGNyZWF0ZUFycmF5RnJvbU1peGVkKG5vZGUuY2hpbGROb2Rlcyk7XG4gIHdoaWxlIChub2RlLmxhc3RDaGlsZCkge1xuICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5sYXN0Q2hpbGQpO1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXA7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZZM0psWVhSbFRtOWtaWE5HY205dFRXRnlhM1Z3TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQmpjbVZoZEdWT2IyUmxjMFp5YjIxTllYSnJkWEJjYmlBcUlFQjBlWEJsWTJobFkydHpYRzRnS2k5Y2JseHVMeXBxYzJ4cGJuUWdaWFpwYkRvZ2RISjFaU3dnYzNWaU9pQjBjblZsSUNvdlhHNWNiblpoY2lCRmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDBWNFpXTjFkR2x2YmtWdWRtbHliMjV0Wlc1MFhDSXBPMXh1WEc1MllYSWdZM0psWVhSbFFYSnlZWGxHY205dFRXbDRaV1FnUFNCeVpYRjFhWEpsS0Z3aUxpOWpjbVZoZEdWQmNuSmhlVVp5YjIxTmFYaGxaRndpS1R0Y2JuWmhjaUJuWlhSTllYSnJkWEJYY21Gd0lEMGdjbVZ4ZFdseVpTaGNJaTR2WjJWMFRXRnlhM1Z3VjNKaGNGd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYmk4cUtseHVJQ29nUkhWdGJYa2dZMjl1ZEdGcGJtVnlJSFZ6WldRZ2RHOGdjbVZ1WkdWeUlHRnNiQ0J0WVhKcmRYQXVYRzRnS2k5Y2JuWmhjaUJrZFcxdGVVNXZaR1VnUFZ4dUlDQkZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQzVqWVc1VmMyVkVUMDBnUHlCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBLQ2RrYVhZbktTQTZJRzUxYkd3N1hHNWNiaThxS2x4dUlDb2dVR0YwZEdWeWJpQjFjMlZrSUdKNUlHQm5aWFJPYjJSbFRtRnRaV0F1WEc0Z0tpOWNiblpoY2lCdWIyUmxUbUZ0WlZCaGRIUmxjbTRnUFNBdlhseGNjeW84S0Z4Y2R5c3BMenRjYmx4dUx5b3FYRzRnS2lCRmVIUnlZV04wY3lCMGFHVWdZRzV2WkdWT1lXMWxZQ0J2WmlCMGFHVWdabWx5YzNRZ1pXeGxiV1Z1ZENCcGJpQmhJSE4wY21sdVp5QnZaaUJ0WVhKcmRYQXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHMWhjbXQxY0NCVGRISnBibWNnYjJZZ2JXRnlhM1Z3TGx4dUlDb2dRSEpsZEhWeWJpQjdQM04wY21sdVozMGdUbTlrWlNCdVlXMWxJRzltSUhSb1pTQnpkWEJ3YkdsbFpDQnRZWEpyZFhBdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdkbGRFNXZaR1ZPWVcxbEtHMWhjbXQxY0NrZ2UxeHVJQ0IyWVhJZ2JtOWtaVTVoYldWTllYUmphQ0E5SUcxaGNtdDFjQzV0WVhSamFDaHViMlJsVG1GdFpWQmhkSFJsY200cE8xeHVJQ0J5WlhSMWNtNGdibTlrWlU1aGJXVk5ZWFJqYUNBbUppQnViMlJsVG1GdFpVMWhkR05vV3pGZExuUnZURzkzWlhKRFlYTmxLQ2s3WEc1OVhHNWNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhiaUJoY25KaGVTQmpiMjUwWVdsdWFXNW5JSFJvWlNCdWIyUmxjeUJ5Wlc1a1pYSmxaQ0JtY205dElIUm9aU0J6ZFhCd2JHbGxaQ0J0WVhKcmRYQXVJRlJvWlZ4dUlDb2diM0IwYVc5dVlXeHNlU0J6ZFhCd2JHbGxaQ0JnYUdGdVpHeGxVMk55YVhCMFlDQm1kVzVqZEdsdmJpQjNhV3hzSUdKbElHbHVkbTlyWldRZ2IyNWpaU0JtYjNJZ1pXRmphRnh1SUNvZ1BITmpjbWx3ZEQ0Z1pXeGxiV1Z1ZENCMGFHRjBJR2x6SUhKbGJtUmxjbVZrTGlCSlppQnVieUJnYUdGdVpHeGxVMk55YVhCMFlDQm1kVzVqZEdsdmJpQnBjeUJ6ZFhCd2JHbGxaQ3hjYmlBcUlHRnVJR1Y0WTJWd2RHbHZiaUJwY3lCMGFISnZkMjRnYVdZZ1lXNTVJRHh6WTNKcGNIUStJR1ZzWlcxbGJuUnpJR0Z5WlNCeVpXNWtaWEpsWkM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYldGeWEzVndJRUVnYzNSeWFXNW5JRzltSUhaaGJHbGtJRWhVVFV3Z2JXRnlhM1Z3TGx4dUlDb2dRSEJoY21GdElIcy9ablZ1WTNScGIyNTlJR2hoYm1Sc1pWTmpjbWx3ZENCSmJuWnZhMlZrSUc5dVkyVWdabTl5SUdWaFkyZ2djbVZ1WkdWeVpXUWdQSE5qY21sd2RENHVYRzRnS2lCQWNtVjBkWEp1SUh0aGNuSmhlVHhFVDAxRmJHVnRaVzUwZkVSUFRWUmxlSFJPYjJSbFBuMGdRVzRnWVhKeVlYa2diMllnY21WdVpHVnlaV1FnYm05a1pYTXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHTnlaV0YwWlU1dlpHVnpSbkp2YlUxaGNtdDFjQ2h0WVhKcmRYQXNJR2hoYm1Sc1pWTmpjbWx3ZENrZ2UxeHVJQ0IyWVhJZ2JtOWtaU0E5SUdSMWJXMTVUbTlrWlR0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDZ2hJV1IxYlcxNVRtOWtaU3dnSjJOeVpXRjBaVTV2WkdWelJuSnZiVTFoY210MWNDQmtkVzF0ZVNCdWIzUWdhVzVwZEdsaGJHbDZaV1FuS1NBNklHbHVkbUZ5YVdGdWRDZ2hJV1IxYlcxNVRtOWtaU2twTzF4dUlDQjJZWElnYm05a1pVNWhiV1VnUFNCblpYUk9iMlJsVG1GdFpTaHRZWEpyZFhBcE8xeHVYRzRnSUhaaGNpQjNjbUZ3SUQwZ2JtOWtaVTVoYldVZ0ppWWdaMlYwVFdGeWEzVndWM0poY0NodWIyUmxUbUZ0WlNrN1hHNGdJR2xtSUNoM2NtRndLU0I3WEc0Z0lDQWdibTlrWlM1cGJtNWxja2hVVFV3Z1BTQjNjbUZ3V3pGZElDc2diV0Z5YTNWd0lDc2dkM0poY0ZzeVhUdGNibHh1SUNBZ0lIWmhjaUIzY21Gd1JHVndkR2dnUFNCM2NtRndXekJkTzF4dUlDQWdJSGRvYVd4bElDaDNjbUZ3UkdWd2RHZ3RMU2tnZTF4dUlDQWdJQ0FnYm05a1pTQTlJRzV2WkdVdWJHRnpkRU5vYVd4a08xeHVJQ0FnSUgxY2JpQWdmU0JsYkhObElIdGNiaUFnSUNCdWIyUmxMbWx1Ym1WeVNGUk5UQ0E5SUcxaGNtdDFjRHRjYmlBZ2ZWeHVYRzRnSUhaaGNpQnpZM0pwY0hSeklEMGdibTlrWlM1blpYUkZiR1Z0Wlc1MGMwSjVWR0ZuVG1GdFpTZ25jMk55YVhCMEp5azdYRzRnSUdsbUlDaHpZM0pwY0hSekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JvWVc1a2JHVlRZM0pwY0hRc1hHNGdJQ0FnSUNBblkzSmxZWFJsVG05a1pYTkdjbTl0VFdGeWEzVndLQzR1TGlrNklGVnVaWGh3WldOMFpXUWdQSE5qY21sd2RENGdaV3hsYldWdWRDQnlaVzVrWlhKbFpDNG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hvWVc1a2JHVlRZM0pwY0hRcEtUdGNiaUFnSUNCamNtVmhkR1ZCY25KaGVVWnliMjFOYVhobFpDaHpZM0pwY0hSektTNW1iM0pGWVdOb0tHaGhibVJzWlZOamNtbHdkQ2s3WEc0Z0lIMWNibHh1SUNCMllYSWdibTlrWlhNZ1BTQmpjbVZoZEdWQmNuSmhlVVp5YjIxTmFYaGxaQ2h1YjJSbExtTm9hV3hrVG05a1pYTXBPMXh1SUNCM2FHbHNaU0FvYm05a1pTNXNZWE4wUTJocGJHUXBJSHRjYmlBZ0lDQnViMlJsTG5KbGJXOTJaVU5vYVd4a0tHNXZaR1V1YkdGemRFTm9hV3hrS1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYm05a1pYTTdYRzU5WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1kzSmxZWFJsVG05a1pYTkdjbTl0VFdGeWEzVndPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgY3hcbiAqL1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYXJrIHN0cmluZyBsaXRlcmFscyByZXByZXNlbnRpbmcgQ1NTIGNsYXNzIG5hbWVzXG4gKiBzbyB0aGF0IHRoZXkgY2FuIGJlIHRyYW5zZm9ybWVkIHN0YXRpY2FsbHkuIFRoaXMgYWxsb3dzIGZvciBtb2R1bGFyaXphdGlvblxuICogYW5kIG1pbmlmaWNhdGlvbiBvZiBDU1MgY2xhc3MgbmFtZXMuXG4gKlxuICogSW4gc3RhdGljX3Vwc3RyZWFtLCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLCBidXQgaXQgc2hvdWxkXG4gKiBldmVudHVhbGx5IGJlIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nIG1vcmUgZGVzY3JpcHRpdmUsIGFuZCB0aGUgdHJhbnNmb3JtXG4gKiB0aGF0IGlzIHVzZWQgaW4gdGhlIG1haW4gc3RhY2sgc2hvdWxkIGJlIHBvcnRlZCBmb3IgdXNlIGVsc2V3aGVyZS5cbiAqXG4gKiBAcGFyYW0gc3RyaW5nfG9iamVjdCBjbGFzc05hbWUgdG8gbW9kdWxhcml6ZSwgb3IgYW4gb2JqZWN0IG9mIGtleS92YWx1ZXMuXG4gKiAgICAgICAgICAgICAgICAgICAgICBJbiB0aGUgb2JqZWN0IGNhc2UsIHRoZSB2YWx1ZXMgYXJlIGNvbmRpdGlvbnMgdGhhdFxuICogICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBjbGFzc05hbWUga2V5cyBzaG91bGQgYmUgaW5jbHVkZWQuXG4gKiBAcGFyYW0gW3N0cmluZyAuLi5dICBWYXJpYWJsZSBsaXN0IG9mIGNsYXNzTmFtZXMgaW4gdGhlIHN0cmluZyBjYXNlLlxuICogQHJldHVybiBzdHJpbmcgICAgICAgUmVuZGVyYWJsZSBzcGFjZS1zZXBhcmF0ZWQgQ1NTIGNsYXNzTmFtZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciB3YXJuZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gY3goY2xhc3NOYW1lcykge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICB3YXJuZWQsXG4gICAgICAnUmVhY3QuYWRkb25zLmNsYXNzU2V0IHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBTZWUgJyArXG4gICAgICAnaHR0cDovL2ZiLm1lL3JlYWN0LWFkZG9ucy1jbGFzc3NldCdcbiAgICApIDogbnVsbCk7XG4gICAgd2FybmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2xhc3NOYW1lcyA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjbGFzc05hbWVzKS5maWx0ZXIoZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lc1tjbGFzc05hbWVdO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsICcgJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjeDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlkzZ3Vhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCamVGeHVJQ292WEc1Y2JpOHFLbHh1SUNvZ1ZHaHBjeUJtZFc1amRHbHZiaUJwY3lCMWMyVmtJSFJ2SUcxaGNtc2djM1J5YVc1bklHeHBkR1Z5WVd4eklISmxjSEpsYzJWdWRHbHVaeUJEVTFNZ1kyeGhjM01nYm1GdFpYTmNiaUFxSUhOdklIUm9ZWFFnZEdobGVTQmpZVzRnWW1VZ2RISmhibk5tYjNKdFpXUWdjM1JoZEdsallXeHNlUzRnVkdocGN5QmhiR3h2ZDNNZ1ptOXlJRzF2WkhWc1lYSnBlbUYwYVc5dVhHNGdLaUJoYm1RZ2JXbHVhV1pwWTJGMGFXOXVJRzltSUVOVFV5QmpiR0Z6Y3lCdVlXMWxjeTVjYmlBcVhHNGdLaUJKYmlCemRHRjBhV05mZFhCemRISmxZVzBzSUhSb2FYTWdablZ1WTNScGIyNGdhWE1nWVdOMGRXRnNiSGtnYVcxd2JHVnRaVzUwWldRc0lHSjFkQ0JwZENCemFHOTFiR1JjYmlBcUlHVjJaVzUwZFdGc2JIa2dZbVVnY21Wd2JHRmpaV1FnZDJsMGFDQnpiMjFsZEdocGJtY2diVzl5WlNCa1pYTmpjbWx3ZEdsMlpTd2dZVzVrSUhSb1pTQjBjbUZ1YzJadmNtMWNiaUFxSUhSb1lYUWdhWE1nZFhObFpDQnBiaUIwYUdVZ2JXRnBiaUJ6ZEdGamF5QnphRzkxYkdRZ1ltVWdjRzl5ZEdWa0lHWnZjaUIxYzJVZ1pXeHpaWGRvWlhKbExseHVJQ3BjYmlBcUlFQndZWEpoYlNCemRISnBibWQ4YjJKcVpXTjBJR05zWVhOelRtRnRaU0IwYnlCdGIyUjFiR0Z5YVhwbExDQnZjaUJoYmlCdlltcGxZM1FnYjJZZ2EyVjVMM1poYkhWbGN5NWNiaUFxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFbHVJSFJvWlNCdlltcGxZM1FnWTJGelpTd2dkR2hsSUhaaGJIVmxjeUJoY21VZ1kyOXVaR2wwYVc5dWN5QjBhR0YwWEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWlhSbGNtMXBibVVnYVdZZ2RHaGxJR05zWVhOelRtRnRaU0JyWlhseklITm9iM1ZzWkNCaVpTQnBibU5zZFdSbFpDNWNiaUFxSUVCd1lYSmhiU0JiYzNSeWFXNW5JQzR1TGwwZ0lGWmhjbWxoWW14bElHeHBjM1FnYjJZZ1kyeGhjM05PWVcxbGN5QnBiaUIwYUdVZ2MzUnlhVzVuSUdOaGMyVXVYRzRnS2lCQWNtVjBkWEp1SUhOMGNtbHVaeUFnSUNBZ0lDQlNaVzVrWlhKaFlteGxJSE53WVdObExYTmxjR0Z5WVhSbFpDQkRVMU1nWTJ4aGMzTk9ZVzFsTGx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNiblpoY2lCM1lYSnVhVzVuSUQwZ2NtVnhkV2x5WlNoY0lpNHZkMkZ5Ym1sdVoxd2lLVHRjYmx4dWRtRnlJSGRoY201bFpDQTlJR1poYkhObE8xeHVYRzVtZFc1amRHbHZiaUJqZUNoamJHRnpjMDVoYldWektTQjdYRzRnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lIZGhjbTVsWkN4Y2JpQWdJQ0FnSUNkU1pXRmpkQzVoWkdSdmJuTXVZMnhoYzNOVFpYUWdkMmxzYkNCaVpTQmtaWEJ5WldOaGRHVmtJR2x1SUdFZ1puVjBkWEpsSUhabGNuTnBiMjR1SUZObFpTQW5JQ3RjYmlBZ0lDQWdJQ2RvZEhSd09pOHZabUl1YldVdmNtVmhZM1F0WVdSa2IyNXpMV05zWVhOemMyVjBKMXh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNCM1lYSnVaV1FnUFNCMGNuVmxPMXh1SUNCOVhHNWNiaUFnYVdZZ0tIUjVjR1Z2WmlCamJHRnpjMDVoYldWeklEMDlJQ2R2WW1wbFkzUW5LU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLR05zWVhOelRtRnRaWE1wTG1acGJIUmxjaWhtZFc1amRHbHZiaWhqYkdGemMwNWhiV1VwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqYkdGemMwNWhiV1Z6VzJOc1lYTnpUbUZ0WlYwN1hHNGdJQ0FnZlNrdWFtOXBiaWduSUNjcE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCQmNuSmhlUzV3Y205MGIzUjVjR1V1YW05cGJpNWpZV3hzS0dGeVozVnRaVzUwY3l3Z0p5QW5LVHRjYmlBZ2ZWeHVmVnh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUdONE8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGRhbmdlcm91c1N0eWxlVmFsdWVcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ1NTUHJvcGVydHkgPSByZXF1aXJlKFwiLi9DU1NQcm9wZXJ0eVwiKTtcblxudmFyIGlzVW5pdGxlc3NOdW1iZXIgPSBDU1NQcm9wZXJ0eS5pc1VuaXRsZXNzTnVtYmVyO1xuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdyaXRhYmxlIHZhbHVlLiBUaGUgc3R5bGUgbmFtZSBgbmFtZWBcbiAqIHNob3VsZCBiZSBsb2dpY2FsIChubyBoeXBoZW5zKSwgYXMgc3BlY2lmaWVkXG4gKiBpbiBgQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ1NTIHByb3BlcnR5IG5hbWUgc3VjaCBhcyBgdG9wTWFyZ2luYC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZhbHVlIHN1Y2ggYXMgYDEwcHhgLlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIHN0eWxlIHZhbHVlIHdpdGggZGltZW5zaW9ucyBhcHBsaWVkLlxuICovXG5mdW5jdGlvbiBkYW5nZXJvdXNTdHlsZVZhbHVlKG5hbWUsIHZhbHVlKSB7XG4gIC8vIE5vdGUgdGhhdCB3ZSd2ZSByZW1vdmVkIGVzY2FwZVRleHRGb3JCcm93c2VyKCkgY2FsbHMgaGVyZSBzaW5jZSB0aGVcbiAgLy8gd2hvbGUgc3RyaW5nIHdpbGwgYmUgZXNjYXBlZCB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgaW5qZWN0ZWQgaW50b1xuICAvLyB0aGUgbWFya3VwLiBJZiB5b3UgcHJvdmlkZSB1bnNhZmUgdXNlciBkYXRhIGhlcmUgdGhleSBjYW4gaW5qZWN0XG4gIC8vIGFyYml0cmFyeSBDU1Mgd2hpY2ggbWF5IGJlIHByb2JsZW1hdGljIChJIGNvdWxkbid0IHJlcHJvIHRoaXMpOlxuICAvLyBodHRwczovL3d3dy5vd2FzcC5vcmcvaW5kZXgucGhwL1hTU19GaWx0ZXJfRXZhc2lvbl9DaGVhdF9TaGVldFxuICAvLyBodHRwOi8vd3d3LnRoZXNwYW5uZXIuY28udWsvMjAwNy8xMS8yNi91bHRpbWF0ZS14c3MtY3NzLWluamVjdGlvbi9cbiAgLy8gVGhpcyBpcyBub3QgYW4gWFNTIGhvbGUgYnV0IGluc3RlYWQgYSBwb3RlbnRpYWwgQ1NTIGluamVjdGlvbiBpc3N1ZVxuICAvLyB3aGljaCBoYXMgbGVhZCB0byBhIGdyZWF0ZXIgZGlzY3Vzc2lvbiBhYm91dCBob3cgd2UncmUgZ29pbmcgdG9cbiAgLy8gdHJ1c3QgVVJMcyBtb3ZpbmcgZm9yd2FyZC4gU2VlICMyMTE1OTAxXG5cbiAgdmFyIGlzRW1wdHkgPSB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcbiAgaWYgKGlzRW1wdHkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB2YXIgaXNOb25OdW1lcmljID0gaXNOYU4odmFsdWUpO1xuICBpZiAoaXNOb25OdW1lcmljIHx8IHZhbHVlID09PSAwIHx8XG4gICAgICBpc1VuaXRsZXNzTnVtYmVyLmhhc093blByb3BlcnR5KG5hbWUpICYmIGlzVW5pdGxlc3NOdW1iZXJbbmFtZV0pIHtcbiAgICByZXR1cm4gJycgKyB2YWx1ZTsgLy8gY2FzdCB0byBzdHJpbmdcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlICsgJ3B4Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkYW5nZXJvdXNTdHlsZVZhbHVlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGVtcHR5RnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBtYWtlRW1wdHlGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcmc7XG4gIH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGFuZCBkaXNjYXJkcyBpbnB1dHM7IGl0IGhhcyBubyBzaWRlIGVmZmVjdHMuIFRoaXMgaXNcbiAqIHByaW1hcmlseSB1c2VmdWwgaWRpb21hdGljYWxseSBmb3Igb3ZlcnJpZGFibGUgZnVuY3Rpb24gZW5kcG9pbnRzIHdoaWNoXG4gKiBhbHdheXMgbmVlZCB0byBiZSBjYWxsYWJsZSwgc2luY2UgSlMgbGFja3MgYSBudWxsLWNhbGwgaWRpb20gYWxhIENvY29hLlxuICovXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cblxuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJucyA9IG1ha2VFbXB0eUZ1bmN0aW9uO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlID0gbWFrZUVtcHR5RnVuY3Rpb24oZmFsc2UpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWUgPSBtYWtlRW1wdHlGdW5jdGlvbih0cnVlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsID0gbWFrZUVtcHR5RnVuY3Rpb24obnVsbCk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVGhpcyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCA9IGZ1bmN0aW9uKGFyZykgeyByZXR1cm4gYXJnOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGVtcHR5T2JqZWN0XG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVtcHR5T2JqZWN0O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2Wlcxd2RIbFBZbXBsWTNRdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUdWdGNIUjVUMkpxWldOMFhHNGdLaTljYmx4dVhDSjFjMlVnYzNSeWFXTjBYQ0k3WEc1Y2JuWmhjaUJsYlhCMGVVOWlhbVZqZENBOUlIdDlPMXh1WEc1cFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJRTlpYW1WamRDNW1jbVZsZW1Vb1pXMXdkSGxQWW1wbFkzUXBPMXh1ZlZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlHVnRjSFI1VDJKcVpXTjBPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFU0NBUEVfTE9PS1VQID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc+JzogJyZndDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gICdcXCcnOiAnJiN4Mjc7J1xufTtcblxudmFyIEVTQ0FQRV9SRUdFWCA9IC9bJj48XCInXS9nO1xuXG5mdW5jdGlvbiBlc2NhcGVyKG1hdGNoKSB7XG4gIHJldHVybiBFU0NBUEVfTE9PS1VQW21hdGNoXTtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHRleHQgdG8gcHJldmVudCBzY3JpcHRpbmcgYXR0YWNrcy5cbiAqXG4gKiBAcGFyYW0geyp9IHRleHQgVGV4dCB2YWx1ZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEFuIGVzY2FwZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIodGV4dCkge1xuICByZXR1cm4gKCcnICsgdGV4dCkucmVwbGFjZShFU0NBUEVfUkVHRVgsIGVzY2FwZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlcjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZmluZERPTU5vZGVcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKFwiLi9SZWFjdEN1cnJlbnRPd25lclwiKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZU1hcFwiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciBpc05vZGUgPSByZXF1aXJlKFwiLi9pc05vZGVcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgRE9NIG5vZGUgcmVuZGVyZWQgYnkgdGhpcyBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR8RE9NRWxlbWVudH0gY29tcG9uZW50T3JFbGVtZW50XG4gKiBAcmV0dXJuIHtET01FbGVtZW50fSBUaGUgcm9vdCBub2RlIG9mIHRoaXMgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gZmluZERPTU5vZGUoY29tcG9uZW50T3JFbGVtZW50KSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIGlmIChvd25lciAhPT0gbnVsbCkge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIG93bmVyLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcixcbiAgICAgICAgJyVzIGlzIGFjY2Vzc2luZyBnZXRET01Ob2RlIG9yIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgK1xuICAgICAgICAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICtcbiAgICAgICAgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgK1xuICAgICAgICAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArXG4gICAgICAgICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgICAgb3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGlzTm9kZShjb21wb25lbnRPckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgfVxuICBpZiAoUmVhY3RJbnN0YW5jZU1hcC5oYXMoY29tcG9uZW50T3JFbGVtZW50KSkge1xuICAgIHJldHVybiBSZWFjdE1vdW50LmdldE5vZGVGcm9tSW5zdGFuY2UoY29tcG9uZW50T3JFbGVtZW50KTtcbiAgfVxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGNvbXBvbmVudE9yRWxlbWVudC5yZW5kZXIgPT0gbnVsbCB8fFxuICAgIHR5cGVvZiBjb21wb25lbnRPckVsZW1lbnQucmVuZGVyICE9PSAnZnVuY3Rpb24nLFxuICAgICdDb21wb25lbnQgKHdpdGgga2V5czogJXMpIGNvbnRhaW5zIGByZW5kZXJgIG1ldGhvZCAnICtcbiAgICAnYnV0IGlzIG5vdCBtb3VudGVkIGluIHRoZSBET00nLFxuICAgIE9iamVjdC5rZXlzKGNvbXBvbmVudE9yRWxlbWVudClcbiAgKSA6IGludmFyaWFudChjb21wb25lbnRPckVsZW1lbnQucmVuZGVyID09IG51bGwgfHxcbiAgdHlwZW9mIGNvbXBvbmVudE9yRWxlbWVudC5yZW5kZXIgIT09ICdmdW5jdGlvbicpKTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBmYWxzZSxcbiAgICAnRWxlbWVudCBhcHBlYXJzIHRvIGJlIG5laXRoZXIgUmVhY3RDb21wb25lbnQgbm9yIERPTU5vZGUgKGtleXM6ICVzKScsXG4gICAgT2JqZWN0LmtleXMoY29tcG9uZW50T3JFbGVtZW50KVxuICApIDogaW52YXJpYW50KGZhbHNlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZERPTU5vZGU7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZabWx1WkVSUFRVNXZaR1V1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnWm1sdVpFUlBUVTV2WkdWY2JpQXFJRUIwZVhCbFkyaGxZMnR6SUhOMFlYUnBZeTF2Ym14NVhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU4xY25KbGJuUlBkMjVsY2x3aUtUdGNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxUV0Z3SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSSmJuTjBZVzVqWlUxaGNGd2lLVHRjYm5aaGNpQlNaV0ZqZEUxdmRXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JOYjNWdWRGd2lLVHRjYmx4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYm5aaGNpQnBjMDV2WkdVZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYzA1dlpHVmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjBhR1VnUkU5TklHNXZaR1VnY21WdVpHVnlaV1FnWW5rZ2RHaHBjeUJsYkdWdFpXNTBMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRGIyMXdiMjVsYm5SOFJFOU5SV3hsYldWdWRIMGdZMjl0Y0c5dVpXNTBUM0pGYkdWdFpXNTBYRzRnS2lCQWNtVjBkWEp1SUh0RVQwMUZiR1Z0Wlc1MGZTQlVhR1VnY205dmRDQnViMlJsSUc5bUlIUm9hWE1nWld4bGJXVnVkQzVjYmlBcUwxeHVablZ1WTNScGIyNGdabWx1WkVSUFRVNXZaR1VvWTI5dGNHOXVaVzUwVDNKRmJHVnRaVzUwS1NCN1hHNGdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQjJZWElnYjNkdVpYSWdQU0JTWldGamRFTjFjbkpsYm5SUGQyNWxjaTVqZFhKeVpXNTBPMXh1SUNBZ0lHbG1JQ2h2ZDI1bGNpQWhQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lHOTNibVZ5TGw5M1lYSnVaV1JCWW05MWRGSmxabk5KYmxKbGJtUmxjaXhjYmlBZ0lDQWdJQ0FnSnlWeklHbHpJR0ZqWTJWemMybHVaeUJuWlhSRVQwMU9iMlJsSUc5eUlHWnBibVJFVDAxT2IyUmxJR2x1YzJsa1pTQnBkSE1nY21WdVpHVnlLQ2t1SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5jbVZ1WkdWeUtDa2djMmh2ZFd4a0lHSmxJR0VnY0hWeVpTQm1kVzVqZEdsdmJpQnZaaUJ3Y205d2N5QmhibVFnYzNSaGRHVXVJRWwwSUhOb2IzVnNaQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0oyNWxkbVZ5SUdGalkyVnpjeUJ6YjIxbGRHaHBibWNnZEdoaGRDQnlaWEYxYVhKbGN5QnpkR0ZzWlNCa1lYUmhJR1p5YjIwZ2RHaGxJSEJ5WlhacGIzVnpJQ2NnSzF4dUlDQWdJQ0FnSUNBbmNtVnVaR1Z5TENCemRXTm9JR0Z6SUhKbFpuTXVJRTF2ZG1VZ2RHaHBjeUJzYjJkcFl5QjBieUJqYjIxd2IyNWxiblJFYVdSTmIzVnVkQ0JoYm1RZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RqYjIxd2IyNWxiblJFYVdSVmNHUmhkR1VnYVc1emRHVmhaQzRuTEZ4dUlDQWdJQ0FnSUNCdmQyNWxjaTVuWlhST1lXMWxLQ2tnZkh3Z0owRWdZMjl0Y0c5dVpXNTBKMXh1SUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdiM2R1WlhJdVgzZGhjbTVsWkVGaWIzVjBVbVZtYzBsdVVtVnVaR1Z5SUQwZ2RISjFaVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdhV1lnS0dOdmJYQnZibVZ1ZEU5eVJXeGxiV1Z1ZENBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzUxYkd3N1hHNGdJSDFjYmlBZ2FXWWdLR2x6VG05a1pTaGpiMjF3YjI1bGJuUlBja1ZzWlcxbGJuUXBLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHTnZiWEJ2Ym1WdWRFOXlSV3hsYldWdWREdGNiaUFnZlZ4dUlDQnBaaUFvVW1WaFkzUkpibk4wWVc1alpVMWhjQzVvWVhNb1kyOXRjRzl1Wlc1MFQzSkZiR1Z0Wlc1MEtTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCU1pXRmpkRTF2ZFc1MExtZGxkRTV2WkdWR2NtOXRTVzV6ZEdGdVkyVW9ZMjl0Y0c5dVpXNTBUM0pGYkdWdFpXNTBLVHRjYmlBZ2ZWeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lHTnZiWEJ2Ym1WdWRFOXlSV3hsYldWdWRDNXlaVzVrWlhJZ1BUMGdiblZzYkNCOGZGeHVJQ0FnSUhSNWNHVnZaaUJqYjIxd2IyNWxiblJQY2tWc1pXMWxiblF1Y21WdVpHVnlJQ0U5UFNBblpuVnVZM1JwYjI0bkxGeHVJQ0FnSUNkRGIyMXdiMjVsYm5RZ0tIZHBkR2dnYTJWNWN6b2dKWE1wSUdOdmJuUmhhVzV6SUdCeVpXNWtaWEpnSUcxbGRHaHZaQ0FuSUN0Y2JpQWdJQ0FuWW5WMElHbHpJRzV2ZENCdGIzVnVkR1ZrSUdsdUlIUm9aU0JFVDAwbkxGeHVJQ0FnSUU5aWFtVmpkQzVyWlhsektHTnZiWEJ2Ym1WdWRFOXlSV3hsYldWdWRDbGNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaGpiMjF3YjI1bGJuUlBja1ZzWlcxbGJuUXVjbVZ1WkdWeUlEMDlJRzUxYkd3Z2ZIeGNiaUFnZEhsd1pXOW1JR052YlhCdmJtVnVkRTl5Uld4bGJXVnVkQzV5Wlc1a1pYSWdJVDA5SUNkbWRXNWpkR2x2YmljcEtUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FuUld4bGJXVnVkQ0JoY0hCbFlYSnpJSFJ2SUdKbElHNWxhWFJvWlhJZ1VtVmhZM1JEYjIxd2IyNWxiblFnYm05eUlFUlBUVTV2WkdVZ0tHdGxlWE02SUNWektTY3NYRzRnSUNBZ1QySnFaV04wTG10bGVYTW9ZMjl0Y0c5dVpXNTBUM0pGYkdWdFpXNTBLVnh1SUNBcElEb2dhVzUyWVhKcFlXNTBLR1poYkhObEtTazdYRzU5WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1ptbHVaRVJQVFU1dlpHVTdYRzRpWFgwPSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZmxhdHRlbkNoaWxkcmVuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IHJlcXVpcmUoXCIuL3RyYXZlcnNlQWxsQ2hpbGRyZW5cIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgcGFzc2VkIHRocm91Z2ggdHJhdmVyc2FsLlxuICogQHBhcmFtIHs/UmVhY3RDb21wb25lbnR9IGNoaWxkIFJlYWN0IGNoaWxkIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZSBTdHJpbmcgbmFtZSBvZiBrZXkgcGF0aCB0byBjaGlsZC5cbiAqL1xuZnVuY3Rpb24gZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSkge1xuICAvLyBXZSBmb3VuZCBhIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgdmFyIHJlc3VsdCA9IHRyYXZlcnNlQ29udGV4dDtcbiAgdmFyIGtleVVuaXF1ZSA9ICFyZXN1bHQuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIGtleVVuaXF1ZSxcbiAgICAgICdmbGF0dGVuQ2hpbGRyZW4oLi4uKTogRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCAnICtcbiAgICAgICdgJXNgLiBDaGlsZCBrZXlzIG11c3QgYmUgdW5pcXVlOyB3aGVuIHR3byBjaGlsZHJlbiBzaGFyZSBhIGtleSwgb25seSAnICtcbiAgICAgICd0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSB1c2VkLicsXG4gICAgICBuYW1lXG4gICAgKSA6IG51bGwpO1xuICB9XG4gIGlmIChrZXlVbmlxdWUgJiYgY2hpbGQgIT0gbnVsbCkge1xuICAgIHJlc3VsdFtuYW1lXSA9IGNoaWxkO1xuICB9XG59XG5cbi8qKlxuICogRmxhdHRlbnMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLiBBbnkgbnVsbFxuICogY2hpbGRyZW4gd2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBvYmplY3QuXG4gKiBAcmV0dXJuIHshb2JqZWN0fSBmbGF0dGVuZWQgY2hpbGRyZW4ga2V5ZWQgYnkgbmFtZS5cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkNoaWxkcmVuO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2Wm14aGRIUmxia05vYVd4a2NtVnVMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElHWnNZWFIwWlc1RGFHbHNaSEpsYmx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlIUnlZWFpsY25ObFFXeHNRMmhwYkdSeVpXNGdQU0J5WlhGMWFYSmxLRndpTGk5MGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdVhDSXBPMXh1ZG1GeUlIZGhjbTVwYm1jZ1BTQnlaWEYxYVhKbEtGd2lMaTkzWVhKdWFXNW5YQ0lwTzF4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlIUnlZWFpsY25ObFEyOXVkR1Y0ZENCRGIyNTBaWGgwSUhCaGMzTmxaQ0IwYUhKdmRXZG9JSFJ5WVhabGNuTmhiQzVjYmlBcUlFQndZWEpoYlNCN1AxSmxZV04wUTI5dGNHOXVaVzUwZlNCamFHbHNaQ0JTWldGamRDQmphR2xzWkNCamIyMXdiMjVsYm5RdVhHNGdLaUJBY0dGeVlXMGdleUZ6ZEhKcGJtZDlJRzVoYldVZ1UzUnlhVzVuSUc1aGJXVWdiMllnYTJWNUlIQmhkR2dnZEc4Z1kyaHBiR1F1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1pzWVhSMFpXNVRhVzVuYkdWRGFHbHNaRWx1ZEc5RGIyNTBaWGgwS0hSeVlYWmxjbk5sUTI5dWRHVjRkQ3dnWTJocGJHUXNJRzVoYldVcElIdGNiaUFnTHk4Z1YyVWdabTkxYm1RZ1lTQmpiMjF3YjI1bGJuUWdhVzV6ZEdGdVkyVXVYRzRnSUhaaGNpQnlaWE4xYkhRZ1BTQjBjbUYyWlhKelpVTnZiblJsZUhRN1hHNGdJSFpoY2lCclpYbFZibWx4ZFdVZ1BTQWhjbVZ6ZFd4MExtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBPMXh1SUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQnJaWGxWYm1seGRXVXNYRzRnSUNBZ0lDQW5abXhoZEhSbGJrTm9hV3hrY21WdUtDNHVMaWs2SUVWdVkyOTFiblJsY21Wa0lIUjNieUJqYUdsc1pISmxiaUIzYVhSb0lIUm9aU0J6WVcxbElHdGxlU3dnSnlBclhHNGdJQ0FnSUNBbllDVnpZQzRnUTJocGJHUWdhMlY1Y3lCdGRYTjBJR0psSUhWdWFYRjFaVHNnZDJobGJpQjBkMjhnWTJocGJHUnlaVzRnYzJoaGNtVWdZU0JyWlhrc0lHOXViSGtnSnlBclhHNGdJQ0FnSUNBbmRHaGxJR1pwY25OMElHTm9hV3hrSUhkcGJHd2dZbVVnZFhObFpDNG5MRnh1SUNBZ0lDQWdibUZ0WlZ4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ2ZWeHVJQ0JwWmlBb2EyVjVWVzVwY1hWbElDWW1JR05vYVd4a0lDRTlJRzUxYkd3cElIdGNiaUFnSUNCeVpYTjFiSFJiYm1GdFpWMGdQU0JqYUdsc1pEdGNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRVpzWVhSMFpXNXpJR05vYVd4a2NtVnVJSFJvWVhRZ1lYSmxJSFI1Y0dsallXeHNlU0J6Y0dWamFXWnBaV1FnWVhNZ1lIQnliM0J6TG1Ob2FXeGtjbVZ1WUM0Z1FXNTVJRzUxYkd4Y2JpQXFJR05vYVd4a2NtVnVJSGRwYkd3Z2JtOTBJR0psSUdsdVkyeDFaR1ZrSUdsdUlIUm9aU0J5WlhOMWJIUnBibWNnYjJKcVpXTjBMbHh1SUNvZ1FISmxkSFZ5YmlCN0lXOWlhbVZqZEgwZ1pteGhkSFJsYm1Wa0lHTm9hV3hrY21WdUlHdGxlV1ZrSUdKNUlHNWhiV1V1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1pzWVhSMFpXNURhR2xzWkhKbGJpaGphR2xzWkhKbGJpa2dlMXh1SUNCcFppQW9ZMmhwYkdSeVpXNGdQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCamFHbHNaSEpsYmp0Y2JpQWdmVnh1SUNCMllYSWdjbVZ6ZFd4MElEMGdlMzA3WEc0Z0lIUnlZWFpsY25ObFFXeHNRMmhwYkdSeVpXNG9ZMmhwYkdSeVpXNHNJR1pzWVhSMFpXNVRhVzVuYkdWRGFHbHNaRWx1ZEc5RGIyNTBaWGgwTENCeVpYTjFiSFFwTzF4dUlDQnlaWFIxY200Z2NtVnpkV3gwTzF4dWZWeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJR1pzWVhSMFpXNURhR2xzWkhKbGJqdGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBmb2N1c05vZGVcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGUgaW5wdXQvdGV4dGFyZWEgdG8gZm9jdXNcbiAqL1xuZnVuY3Rpb24gZm9jdXNOb2RlKG5vZGUpIHtcbiAgLy8gSUU4IGNhbiB0aHJvdyBcIkNhbid0IG1vdmUgZm9jdXMgdG8gdGhlIGNvbnRyb2wgYmVjYXVzZSBpdCBpcyBpbnZpc2libGUsXG4gIC8vIG5vdCBlbmFibGVkLCBvciBvZiBhIHR5cGUgdGhhdCBkb2VzIG5vdCBhY2NlcHQgdGhlIGZvY3VzLlwiIGZvciBhbGwga2luZHMgb2ZcbiAgLy8gcmVhc29ucyB0aGF0IGFyZSB0b28gZXhwZW5zaXZlIGFuZCBmcmFnaWxlIHRvIHRlc3QuXG4gIHRyeSB7XG4gICAgbm9kZS5mb2N1cygpO1xuICB9IGNhdGNoKGUpIHtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvY3VzTm9kZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBmb3JFYWNoQWNjdW11bGF0ZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQHBhcmFtIHthcnJheX0gYW4gXCJhY2N1bXVsYXRpb25cIiBvZiBpdGVtcyB3aGljaCBpcyBlaXRoZXIgYW4gQXJyYXkgb3JcbiAqIGEgc2luZ2xlIGl0ZW0uIFVzZWZ1bCB3aGVuIHBhaXJlZCB3aXRoIHRoZSBgYWNjdW11bGF0ZWAgbW9kdWxlLiBUaGlzIGlzIGFcbiAqIHNpbXBsZSB1dGlsaXR5IHRoYXQgYWxsb3dzIHVzIHRvIHJlYXNvbiBhYm91dCBhIGNvbGxlY3Rpb24gb2YgaXRlbXMsIGJ1dFxuICogaGFuZGxpbmcgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBleGFjdGx5IG9uZSBpdGVtIChhbmQgd2UgZG8gbm90IG5lZWQgdG9cbiAqIGFsbG9jYXRlIGFuIGFycmF5KS5cbiAqL1xudmFyIGZvckVhY2hBY2N1bXVsYXRlZCA9IGZ1bmN0aW9uKGFyciwgY2IsIHNjb3BlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBhcnIuZm9yRWFjaChjYiwgc2NvcGUpO1xuICB9IGVsc2UgaWYgKGFycikge1xuICAgIGNiLmNhbGwoc2NvcGUsIGFycik7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZm9yRWFjaEFjY3VtdWxhdGVkO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldEFjdGl2ZUVsZW1lbnRcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLyoqXG4gKiBTYW1lIGFzIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYnV0IHdyYXBzIGluIGEgdHJ5LWNhdGNoIGJsb2NrLiBJbiBJRSBpdCBpc1xuICogbm90IHNhZmUgdG8gY2FsbCBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlmIHRoZXJlIGlzIG5vdGhpbmcgZm9jdXNlZC5cbiAqXG4gKiBUaGUgYWN0aXZlRWxlbWVudCB3aWxsIGJlIG51bGwgb25seSBpZiB0aGUgZG9jdW1lbnQgYm9keSBpcyBub3QgeWV0IGRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoKSAvKj9ET01FbGVtZW50Ki8ge1xuICB0cnkge1xuICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFjdGl2ZUVsZW1lbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0RXZlbnRDaGFyQ29kZVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogYGNoYXJDb2RlYCByZXByZXNlbnRzIHRoZSBhY3R1YWwgXCJjaGFyYWN0ZXIgY29kZVwiIGFuZCBpcyBzYWZlIHRvIHVzZSB3aXRoXG4gKiBgU3RyaW5nLmZyb21DaGFyQ29kZWAuIEFzIHN1Y2gsIG9ubHkga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJpbnRhYmxlXG4gKiBjaGFyYWN0ZXJzIHByb2R1Y2UgYSB2YWxpZCBgY2hhckNvZGVgLCB0aGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBFbnRlci5cbiAqIFRoZSBUYWIta2V5IGlzIGNvbnNpZGVyZWQgbm9uLXByaW50YWJsZSBhbmQgZG9lcyBub3QgaGF2ZSBhIGBjaGFyQ29kZWAsXG4gKiBwcmVzdW1hYmx5IGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHRhYi1jaGFyYWN0ZXIgaW4gYnJvd3NlcnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBjaGFyQ29kZWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGNoYXJDb2RlO1xuICB2YXIga2V5Q29kZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG5cbiAgaWYgKCdjaGFyQ29kZScgaW4gbmF0aXZlRXZlbnQpIHtcbiAgICBjaGFyQ29kZSA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlO1xuXG4gICAgLy8gRkYgZG9lcyBub3Qgc2V0IGBjaGFyQ29kZWAgZm9yIHRoZSBFbnRlci1rZXksIGNoZWNrIGFnYWluc3QgYGtleUNvZGVgLlxuICAgIGlmIChjaGFyQ29kZSA9PT0gMCAmJiBrZXlDb2RlID09PSAxMykge1xuICAgICAgY2hhckNvZGUgPSAxMztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBgY2hhckNvZGVgLCBidXQgYGtleUNvZGVgIGhhcyB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICBjaGFyQ29kZSA9IGtleUNvZGU7XG4gIH1cblxuICAvLyBTb21lIG5vbi1wcmludGFibGUga2V5cyBhcmUgcmVwb3J0ZWQgaW4gYGNoYXJDb2RlYC9ga2V5Q29kZWAsIGRpc2NhcmQgdGhlbS5cbiAgLy8gTXVzdCBub3QgZGlzY2FyZCB0aGUgKG5vbi0pcHJpbnRhYmxlIEVudGVyLWtleS5cbiAgaWYgKGNoYXJDb2RlID49IDMyIHx8IGNoYXJDb2RlID09PSAxMykge1xuICAgIHJldHVybiBjaGFyQ29kZTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEV2ZW50Q2hhckNvZGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0RXZlbnRLZXlcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0RXZlbnRDaGFyQ29kZSA9IHJlcXVpcmUoXCIuL2dldEV2ZW50Q2hhckNvZGVcIik7XG5cbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFyIG5vcm1hbGl6ZUtleSA9IHtcbiAgJ0VzYyc6ICdFc2NhcGUnLFxuICAnU3BhY2ViYXInOiAnICcsXG4gICdMZWZ0JzogJ0Fycm93TGVmdCcsXG4gICdVcCc6ICdBcnJvd1VwJyxcbiAgJ1JpZ2h0JzogJ0Fycm93UmlnaHQnLFxuICAnRG93bic6ICdBcnJvd0Rvd24nLFxuICAnRGVsJzogJ0RlbGV0ZScsXG4gICdXaW4nOiAnT1MnLFxuICAnTWVudSc6ICdDb250ZXh0TWVudScsXG4gICdBcHBzJzogJ0NvbnRleHRNZW51JyxcbiAgJ1Njcm9sbCc6ICdTY3JvbGxMb2NrJyxcbiAgJ01velByaW50YWJsZUtleSc6ICdVbmlkZW50aWZpZWQnXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFyIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICA4OiAnQmFja3NwYWNlJyxcbiAgOTogJ1RhYicsXG4gIDEyOiAnQ2xlYXInLFxuICAxMzogJ0VudGVyJyxcbiAgMTY6ICdTaGlmdCcsXG4gIDE3OiAnQ29udHJvbCcsXG4gIDE4OiAnQWx0JyxcbiAgMTk6ICdQYXVzZScsXG4gIDIwOiAnQ2Fwc0xvY2snLFxuICAyNzogJ0VzY2FwZScsXG4gIDMyOiAnICcsXG4gIDMzOiAnUGFnZVVwJyxcbiAgMzQ6ICdQYWdlRG93bicsXG4gIDM1OiAnRW5kJyxcbiAgMzY6ICdIb21lJyxcbiAgMzc6ICdBcnJvd0xlZnQnLFxuICAzODogJ0Fycm93VXAnLFxuICAzOTogJ0Fycm93UmlnaHQnLFxuICA0MDogJ0Fycm93RG93bicsXG4gIDQ1OiAnSW5zZXJ0JyxcbiAgNDY6ICdEZWxldGUnLFxuICAxMTI6ICdGMScsIDExMzogJ0YyJywgMTE0OiAnRjMnLCAxMTU6ICdGNCcsIDExNjogJ0Y1JywgMTE3OiAnRjYnLFxuICAxMTg6ICdGNycsIDExOTogJ0Y4JywgMTIwOiAnRjknLCAxMjE6ICdGMTAnLCAxMjI6ICdGMTEnLCAxMjM6ICdGMTInLFxuICAxNDQ6ICdOdW1Mb2NrJyxcbiAgMTQ1OiAnU2Nyb2xsTG9jaycsXG4gIDIyNDogJ01ldGEnXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRLZXkobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgIC8vIE5vcm1hbGl6ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJyb3dzZXJzIGR1ZSB0b1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQgc3BlY2lmaWNhdGlvbi5cblxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cblxuICAvLyBCcm93c2VyIGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwgYXMgbXVjaCBvZiBpdCBhcyB3ZSBjYW4uXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7XG5cbiAgICAvLyBUaGUgZW50ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxlIGFuZCBub24tcHJpbnRhYmxlIGFuZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBrZXlwcmVzc2AsIG5vIG90aGVyIG5vbi1wcmludGFibGUga2V5IHNob3VsZC5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRLZXk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0RXZlbnRNb2RpZmllclN0YXRlXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIG1vZGlmaWVyIGtleSB0byB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0eSBpbiB0aGUgZXZlbnQuXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8ja2V5cy1Nb2RpZmllcnNcbiAqL1xuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gICdBbHQnOiAnYWx0S2V5JyxcbiAgJ0NvbnRyb2wnOiAnY3RybEtleScsXG4gICdNZXRhJzogJ21ldGFLZXknLFxuICAnU2hpZnQnOiAnc2hpZnRLZXknXG59O1xuXG4vLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGdldE1vZGlmaWVyU3RhdGUgc28gd2Ugc2ltcGx5IG1hcCBpdCB0byB0aGUgb25seVxuLy8gbW9kaWZpZXIga2V5cyBleHBvc2VkIGJ5IHRoZSBldmVudCBpdHNlbGYsIGRvZXMgbm90IHN1cHBvcnQgTG9jay1rZXlzLlxuLy8gQ3VycmVudGx5LCBhbGwgbWFqb3IgYnJvd3NlcnMgZXhjZXB0IENocm9tZSBzZWVtcyB0byBzdXBwb3J0IExvY2sta2V5cy5cbmZ1bmN0aW9uIG1vZGlmaWVyU3RhdGVHZXR0ZXIoa2V5QXJnKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBzeW50aGV0aWNFdmVudCA9IHRoaXM7XG4gIHZhciBuYXRpdmVFdmVudCA9IHN5bnRoZXRpY0V2ZW50Lm5hdGl2ZUV2ZW50O1xuICBpZiAobmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSkge1xuICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZyk7XG4gIH1cbiAgdmFyIGtleVByb3AgPSBtb2RpZmllcktleVRvUHJvcFtrZXlBcmddO1xuICByZXR1cm4ga2V5UHJvcCA/ICEhbmF0aXZlRXZlbnRba2V5UHJvcF0gOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRNb2RpZmllclN0YXRlKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBtb2RpZmllclN0YXRlR2V0dGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEV2ZW50TW9kaWZpZXJTdGF0ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRFdmVudFRhcmdldFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogR2V0cyB0aGUgdGFyZ2V0IG5vZGUgZnJvbSBhIG5hdGl2ZSBicm93c2VyIGV2ZW50IGJ5IGFjY291bnRpbmcgZm9yXG4gKiBpbmNvbnNpc3RlbmNpZXMgaW4gYnJvd3NlciBET00gQVBJcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtET01FdmVudFRhcmdldH0gVGFyZ2V0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7XG4gIC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAoTm9kZS5URVhUX05PREUgaXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfcHJvcGVydGllcy5odG1sXG4gIHJldHVybiB0YXJnZXQubm9kZVR5cGUgPT09IDMgPyB0YXJnZXQucGFyZW50Tm9kZSA6IHRhcmdldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRFdmVudFRhcmdldDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRJdGVyYXRvckZuXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyogZ2xvYmFsIFN5bWJvbCAqL1xudmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbi8qKlxuICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxuICpcbiAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICpcbiAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcbiAqICAgICAgIC4uLlxuICogICAgIH1cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoXG4gICAgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pXG4gICk7XG4gIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBpdGVyYXRvckZuO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SXRlcmF0b3JGbjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0TWFya3VwV3JhcFxuICovXG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIER1bW15IGNvbnRhaW5lciB1c2VkIHRvIGRldGVjdCB3aGljaCB3cmFwcyBhcmUgbmVjZXNzYXJ5LlxuICovXG52YXIgZHVtbXlOb2RlID1cbiAgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykgOiBudWxsO1xuXG4vKipcbiAqIFNvbWUgYnJvd3NlcnMgY2Fubm90IHVzZSBgaW5uZXJIVE1MYCB0byByZW5kZXIgY2VydGFpbiBlbGVtZW50cyBzdGFuZGFsb25lLFxuICogc28gd2Ugd3JhcCB0aGVtLCByZW5kZXIgdGhlIHdyYXBwZWQgbm9kZXMsIHRoZW4gZXh0cmFjdCB0aGUgZGVzaXJlZCBub2RlLlxuICpcbiAqIEluIElFOCwgY2VydGFpbiBlbGVtZW50cyBjYW5ub3QgcmVuZGVyIGFsb25lLCBzbyB3cmFwIGFsbCBlbGVtZW50cyAoJyonKS5cbiAqL1xudmFyIHNob3VsZFdyYXAgPSB7XG4gIC8vIEZvcmNlIHdyYXBwaW5nIGZvciBTVkcgZWxlbWVudHMgYmVjYXVzZSBpZiB0aGV5IGdldCBjcmVhdGVkIGluc2lkZSBhIDxkaXY+LFxuICAvLyB0aGV5IHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW4gdGhlIHdyb25nIG5hbWVzcGFjZSAoYW5kIHdpbGwgbm90IGRpc3BsYXkpLlxuICAnY2lyY2xlJzogdHJ1ZSxcbiAgJ2NsaXBQYXRoJzogdHJ1ZSxcbiAgJ2RlZnMnOiB0cnVlLFxuICAnZWxsaXBzZSc6IHRydWUsXG4gICdnJzogdHJ1ZSxcbiAgJ2xpbmUnOiB0cnVlLFxuICAnbGluZWFyR3JhZGllbnQnOiB0cnVlLFxuICAncGF0aCc6IHRydWUsXG4gICdwb2x5Z29uJzogdHJ1ZSxcbiAgJ3BvbHlsaW5lJzogdHJ1ZSxcbiAgJ3JhZGlhbEdyYWRpZW50JzogdHJ1ZSxcbiAgJ3JlY3QnOiB0cnVlLFxuICAnc3RvcCc6IHRydWUsXG4gICd0ZXh0JzogdHJ1ZVxufTtcblxudmFyIHNlbGVjdFdyYXAgPSBbMSwgJzxzZWxlY3QgbXVsdGlwbGU9XCJ0cnVlXCI+JywgJzwvc2VsZWN0PiddO1xudmFyIHRhYmxlV3JhcCA9IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddO1xudmFyIHRyV3JhcCA9IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddO1xuXG52YXIgc3ZnV3JhcCA9IFsxLCAnPHN2Zz4nLCAnPC9zdmc+J107XG5cbnZhciBtYXJrdXBXcmFwID0ge1xuICAnKic6IFsxLCAnPzxkaXY+JywgJzwvZGl2PiddLFxuXG4gICdhcmVhJzogWzEsICc8bWFwPicsICc8L21hcD4nXSxcbiAgJ2NvbCc6IFsyLCAnPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4nLCAnPC9jb2xncm91cD48L3RhYmxlPiddLFxuICAnbGVnZW5kJzogWzEsICc8ZmllbGRzZXQ+JywgJzwvZmllbGRzZXQ+J10sXG4gICdwYXJhbSc6IFsxLCAnPG9iamVjdD4nLCAnPC9vYmplY3Q+J10sXG4gICd0cic6IFsyLCAnPHRhYmxlPjx0Ym9keT4nLCAnPC90Ym9keT48L3RhYmxlPiddLFxuXG4gICdvcHRncm91cCc6IHNlbGVjdFdyYXAsXG4gICdvcHRpb24nOiBzZWxlY3RXcmFwLFxuXG4gICdjYXB0aW9uJzogdGFibGVXcmFwLFxuICAnY29sZ3JvdXAnOiB0YWJsZVdyYXAsXG4gICd0Ym9keSc6IHRhYmxlV3JhcCxcbiAgJ3Rmb290JzogdGFibGVXcmFwLFxuICAndGhlYWQnOiB0YWJsZVdyYXAsXG5cbiAgJ3RkJzogdHJXcmFwLFxuICAndGgnOiB0cldyYXAsXG5cbiAgJ2NpcmNsZSc6IHN2Z1dyYXAsXG4gICdjbGlwUGF0aCc6IHN2Z1dyYXAsXG4gICdkZWZzJzogc3ZnV3JhcCxcbiAgJ2VsbGlwc2UnOiBzdmdXcmFwLFxuICAnZyc6IHN2Z1dyYXAsXG4gICdsaW5lJzogc3ZnV3JhcCxcbiAgJ2xpbmVhckdyYWRpZW50Jzogc3ZnV3JhcCxcbiAgJ3BhdGgnOiBzdmdXcmFwLFxuICAncG9seWdvbic6IHN2Z1dyYXAsXG4gICdwb2x5bGluZSc6IHN2Z1dyYXAsXG4gICdyYWRpYWxHcmFkaWVudCc6IHN2Z1dyYXAsXG4gICdyZWN0Jzogc3ZnV3JhcCxcbiAgJ3N0b3AnOiBzdmdXcmFwLFxuICAndGV4dCc6IHN2Z1dyYXBcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbWFya3VwIHdyYXAgY29uZmlndXJhdGlvbiBmb3IgdGhlIHN1cHBsaWVkIGBub2RlTmFtZWAuXG4gKlxuICogTk9URTogVGhpcyBsYXppbHkgZGV0ZWN0cyB3aGljaCB3cmFwcyBhcmUgbmVjZXNzYXJ5IGZvciB0aGUgY3VycmVudCBicm93c2VyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub2RlTmFtZSBMb3dlcmNhc2UgYG5vZGVOYW1lYC5cbiAqIEByZXR1cm4gez9hcnJheX0gTWFya3VwIHdyYXAgY29uZmlndXJhdGlvbiwgaWYgYXBwbGljYWJsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFya3VwV3JhcChub2RlTmFtZSkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KCEhZHVtbXlOb2RlLCAnTWFya3VwIHdyYXBwaW5nIG5vZGUgbm90IGluaXRpYWxpemVkJykgOiBpbnZhcmlhbnQoISFkdW1teU5vZGUpKTtcbiAgaWYgKCFtYXJrdXBXcmFwLmhhc093blByb3BlcnR5KG5vZGVOYW1lKSkge1xuICAgIG5vZGVOYW1lID0gJyonO1xuICB9XG4gIGlmICghc2hvdWxkV3JhcC5oYXNPd25Qcm9wZXJ0eShub2RlTmFtZSkpIHtcbiAgICBpZiAobm9kZU5hbWUgPT09ICcqJykge1xuICAgICAgZHVtbXlOb2RlLmlubmVySFRNTCA9ICc8bGluayAvPic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSAnPCcgKyBub2RlTmFtZSArICc+PC8nICsgbm9kZU5hbWUgKyAnPic7XG4gICAgfVxuICAgIHNob3VsZFdyYXBbbm9kZU5hbWVdID0gIWR1bW15Tm9kZS5maXJzdENoaWxkO1xuICB9XG4gIHJldHVybiBzaG91bGRXcmFwW25vZGVOYW1lXSA/IG1hcmt1cFdyYXBbbm9kZU5hbWVdIDogbnVsbDtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcmt1cFdyYXA7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZaMlYwVFdGeWEzVndWM0poY0M1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJR2RsZEUxaGNtdDFjRmR5WVhCY2JpQXFMMXh1WEc1MllYSWdSWGhsWTNWMGFXOXVSVzUyYVhKdmJtMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOUZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkRndpS1R0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVMeW9xWEc0Z0tpQkVkVzF0ZVNCamIyNTBZV2x1WlhJZ2RYTmxaQ0IwYnlCa1pYUmxZM1FnZDJocFkyZ2dkM0poY0hNZ1lYSmxJRzVsWTJWemMyRnllUzVjYmlBcUwxeHVkbUZ5SUdSMWJXMTVUbTlrWlNBOVhHNGdJRVY0WldOMWRHbHZia1Z1ZG1seWIyNXRaVzUwTG1OaGJsVnpaVVJQVFNBL0lHUnZZM1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblFvSjJScGRpY3BJRG9nYm5Wc2JEdGNibHh1THlvcVhHNGdLaUJUYjIxbElHSnliM2R6WlhKeklHTmhibTV2ZENCMWMyVWdZR2x1Ym1WeVNGUk5UR0FnZEc4Z2NtVnVaR1Z5SUdObGNuUmhhVzRnWld4bGJXVnVkSE1nYzNSaGJtUmhiRzl1WlN4Y2JpQXFJSE52SUhkbElIZHlZWEFnZEdobGJTd2djbVZ1WkdWeUlIUm9aU0IzY21Gd2NHVmtJRzV2WkdWekxDQjBhR1Z1SUdWNGRISmhZM1FnZEdobElHUmxjMmx5WldRZ2JtOWtaUzVjYmlBcVhHNGdLaUJKYmlCSlJUZ3NJR05sY25SaGFXNGdaV3hsYldWdWRITWdZMkZ1Ym05MElISmxibVJsY2lCaGJHOXVaU3dnYzI4Z2QzSmhjQ0JoYkd3Z1pXeGxiV1Z1ZEhNZ0tDY3FKeWt1WEc0Z0tpOWNiblpoY2lCemFHOTFiR1JYY21Gd0lEMGdlMXh1SUNBdkx5QkdiM0pqWlNCM2NtRndjR2x1WnlCbWIzSWdVMVpISUdWc1pXMWxiblJ6SUdKbFkyRjFjMlVnYVdZZ2RHaGxlU0JuWlhRZ1kzSmxZWFJsWkNCcGJuTnBaR1VnWVNBOFpHbDJQaXhjYmlBZ0x5OGdkR2hsZVNCM2FXeHNJR0psSUdsdWFYUnBZV3hwZW1Wa0lHbHVJSFJvWlNCM2NtOXVaeUJ1WVcxbGMzQmhZMlVnS0dGdVpDQjNhV3hzSUc1dmRDQmthWE53YkdGNUtTNWNiaUFnSjJOcGNtTnNaU2M2SUhSeWRXVXNYRzRnSUNkamJHbHdVR0YwYUNjNklIUnlkV1VzWEc0Z0lDZGtaV1p6SnpvZ2RISjFaU3hjYmlBZ0oyVnNiR2x3YzJVbk9pQjBjblZsTEZ4dUlDQW5aeWM2SUhSeWRXVXNYRzRnSUNkc2FXNWxKem9nZEhKMVpTeGNiaUFnSjJ4cGJtVmhja2R5WVdScFpXNTBKem9nZEhKMVpTeGNiaUFnSjNCaGRHZ25PaUIwY25WbExGeHVJQ0FuY0c5c2VXZHZiaWM2SUhSeWRXVXNYRzRnSUNkd2IyeDViR2x1WlNjNklIUnlkV1VzWEc0Z0lDZHlZV1JwWVd4SGNtRmthV1Z1ZENjNklIUnlkV1VzWEc0Z0lDZHlaV04wSnpvZ2RISjFaU3hjYmlBZ0ozTjBiM0FuT2lCMGNuVmxMRnh1SUNBbmRHVjRkQ2M2SUhSeWRXVmNibjA3WEc1Y2JuWmhjaUJ6Wld4bFkzUlhjbUZ3SUQwZ1d6RXNJQ2M4YzJWc1pXTjBJRzExYkhScGNHeGxQVndpZEhKMVpWd2lQaWNzSUNjOEwzTmxiR1ZqZEQ0blhUdGNiblpoY2lCMFlXSnNaVmR5WVhBZ1BTQmJNU3dnSnp4MFlXSnNaVDRuTENBblBDOTBZV0pzWlQ0blhUdGNiblpoY2lCMGNsZHlZWEFnUFNCYk15d2dKengwWVdKc1pUNDhkR0p2WkhrK1BIUnlQaWNzSUNjOEwzUnlQand2ZEdKdlpIaytQQzkwWVdKc1pUNG5YVHRjYmx4dWRtRnlJSE4yWjFkeVlYQWdQU0JiTVN3Z0p6eHpkbWMrSnl3Z0p6d3ZjM1puUGlkZE8xeHVYRzUyWVhJZ2JXRnlhM1Z3VjNKaGNDQTlJSHRjYmlBZ0p5b25PaUJiTVN3Z0p6ODhaR2wyUGljc0lDYzhMMlJwZGo0blhTeGNibHh1SUNBbllYSmxZU2M2SUZzeExDQW5QRzFoY0Q0bkxDQW5QQzl0WVhBK0oxMHNYRzRnSUNkamIyd25PaUJiTWl3Z0p6eDBZV0pzWlQ0OGRHSnZaSGsrUEM5MFltOWtlVDQ4WTI5c1ozSnZkWEErSnl3Z0p6d3ZZMjlzWjNKdmRYQStQQzkwWVdKc1pUNG5YU3hjYmlBZ0oyeGxaMlZ1WkNjNklGc3hMQ0FuUEdacFpXeGtjMlYwUGljc0lDYzhMMlpwWld4a2MyVjBQaWRkTEZ4dUlDQW5jR0Z5WVcwbk9pQmJNU3dnSnp4dlltcGxZM1ErSnl3Z0p6d3ZiMkpxWldOMFBpZGRMRnh1SUNBbmRISW5PaUJiTWl3Z0p6eDBZV0pzWlQ0OGRHSnZaSGsrSnl3Z0p6d3ZkR0p2WkhrK1BDOTBZV0pzWlQ0blhTeGNibHh1SUNBbmIzQjBaM0p2ZFhBbk9pQnpaV3hsWTNSWGNtRndMRnh1SUNBbmIzQjBhVzl1SnpvZ2MyVnNaV04wVjNKaGNDeGNibHh1SUNBblkyRndkR2x2YmljNklIUmhZbXhsVjNKaGNDeGNiaUFnSjJOdmJHZHliM1Z3SnpvZ2RHRmliR1ZYY21Gd0xGeHVJQ0FuZEdKdlpIa25PaUIwWVdKc1pWZHlZWEFzWEc0Z0lDZDBabTl2ZENjNklIUmhZbXhsVjNKaGNDeGNiaUFnSjNSb1pXRmtKem9nZEdGaWJHVlhjbUZ3TEZ4dVhHNGdJQ2QwWkNjNklIUnlWM0poY0N4Y2JpQWdKM1JvSnpvZ2RISlhjbUZ3TEZ4dVhHNGdJQ2RqYVhKamJHVW5PaUJ6ZG1kWGNtRndMRnh1SUNBblkyeHBjRkJoZEdnbk9pQnpkbWRYY21Gd0xGeHVJQ0FuWkdWbWN5YzZJSE4yWjFkeVlYQXNYRzRnSUNkbGJHeHBjSE5sSnpvZ2MzWm5WM0poY0N4Y2JpQWdKMmNuT2lCemRtZFhjbUZ3TEZ4dUlDQW5iR2x1WlNjNklITjJaMWR5WVhBc1hHNGdJQ2RzYVc1bFlYSkhjbUZrYVdWdWRDYzZJSE4yWjFkeVlYQXNYRzRnSUNkd1lYUm9Kem9nYzNablYzSmhjQ3hjYmlBZ0ozQnZiSGxuYjI0bk9pQnpkbWRYY21Gd0xGeHVJQ0FuY0c5c2VXeHBibVVuT2lCemRtZFhjbUZ3TEZ4dUlDQW5jbUZrYVdGc1IzSmhaR2xsYm5Rbk9pQnpkbWRYY21Gd0xGeHVJQ0FuY21WamRDYzZJSE4yWjFkeVlYQXNYRzRnSUNkemRHOXdKem9nYzNablYzSmhjQ3hjYmlBZ0ozUmxlSFFuT2lCemRtZFhjbUZ3WEc1OU8xeHVYRzR2S2lwY2JpQXFJRWRsZEhNZ2RHaGxJRzFoY210MWNDQjNjbUZ3SUdOdmJtWnBaM1Z5WVhScGIyNGdabTl5SUhSb1pTQnpkWEJ3YkdsbFpDQmdibTlrWlU1aGJXVmdMbHh1SUNwY2JpQXFJRTVQVkVVNklGUm9hWE1nYkdGNmFXeDVJR1JsZEdWamRITWdkMmhwWTJnZ2QzSmhjSE1nWVhKbElHNWxZMlZ6YzJGeWVTQm1iM0lnZEdobElHTjFjbkpsYm5RZ1luSnZkM05sY2k1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYm05a1pVNWhiV1VnVEc5M1pYSmpZWE5sSUdCdWIyUmxUbUZ0WldBdVhHNGdLaUJBY21WMGRYSnVJSHMvWVhKeVlYbDlJRTFoY210MWNDQjNjbUZ3SUdOdmJtWnBaM1Z5WVhScGIyNHNJR2xtSUdGd2NHeHBZMkZpYkdVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdkbGRFMWhjbXQxY0ZkeVlYQW9ibTlrWlU1aGJXVXBJSHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENnaElXUjFiVzE1VG05a1pTd2dKMDFoY210MWNDQjNjbUZ3Y0dsdVp5QnViMlJsSUc1dmRDQnBibWwwYVdGc2FYcGxaQ2NwSURvZ2FXNTJZWEpwWVc1MEtDRWhaSFZ0YlhsT2IyUmxLU2s3WEc0Z0lHbG1JQ2doYldGeWEzVndWM0poY0M1b1lYTlBkMjVRY205d1pYSjBlU2h1YjJSbFRtRnRaU2twSUh0Y2JpQWdJQ0J1YjJSbFRtRnRaU0E5SUNjcUp6dGNiaUFnZlZ4dUlDQnBaaUFvSVhOb2IzVnNaRmR5WVhBdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm05a1pVNWhiV1VwS1NCN1hHNGdJQ0FnYVdZZ0tHNXZaR1ZPWVcxbElEMDlQU0FuS2ljcElIdGNiaUFnSUNBZ0lHUjFiVzE1VG05a1pTNXBibTVsY2toVVRVd2dQU0FuUEd4cGJtc2dMejRuTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmtkVzF0ZVU1dlpHVXVhVzV1WlhKSVZFMU1JRDBnSnp3bklDc2dibTlrWlU1aGJXVWdLeUFuUGp3dkp5QXJJRzV2WkdWT1lXMWxJQ3NnSno0bk8xeHVJQ0FnSUgxY2JpQWdJQ0J6YUc5MWJHUlhjbUZ3VzI1dlpHVk9ZVzFsWFNBOUlDRmtkVzF0ZVU1dlpHVXVabWx5YzNSRGFHbHNaRHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdjMmh2ZFd4a1YzSmhjRnR1YjJSbFRtRnRaVjBnUHlCdFlYSnJkWEJYY21Gd1cyNXZaR1ZPWVcxbFhTQTZJRzUxYkd3N1hHNTlYRzVjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCblpYUk5ZWEpyZFhCWGNtRndPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdpdmVuIGFueSBub2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5mdW5jdGlvbiBnZXRMZWFmTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlICYmIG5vZGUuZmlyc3RDaGlsZCkge1xuICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuZXh0IHNpYmxpbmcgd2l0aGluIGEgY29udGFpbmVyLiBUaGlzIHdpbGwgd2FsayB1cCB0aGVcbiAqIERPTSBpZiBhIG5vZGUncyBzaWJsaW5ncyBoYXZlIGJlZW4gZXhoYXVzdGVkLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cbmZ1bmN0aW9uIGdldFNpYmxpbmdOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG5vZGVzIHdoaWNoIGNvbnRhaW4gY2hhcmFjdGVycyBhdCBvZmZzZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSByb290XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KHJvb3QsIG9mZnNldCkge1xuICB2YXIgbm9kZSA9IGdldExlYWZOb2RlKHJvb3QpO1xuICB2YXIgbm9kZVN0YXJ0ID0gMDtcbiAgdmFyIG5vZGVFbmQgPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgIG5vZGVFbmQgPSBub2RlU3RhcnQgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVTdGFydCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIG9mZnNldDogb2Zmc2V0IC0gbm9kZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG5vZGVTdGFydCA9IG5vZGVFbmQ7XG4gICAgfVxuXG4gICAgbm9kZSA9IGdldExlYWZOb2RlKGdldFNpYmxpbmdOb2RlKG5vZGUpKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9DX05PREVfVFlQRSA9IDk7XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTURvY3VtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdGhhdCBtYXkgY29udGFpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBSZWFjdCBjb21wb25lbnRcbiAqIEByZXR1cm4gez8qfSBET00gZWxlbWVudCB0aGF0IG1heSBoYXZlIHRoZSByZWFjdFJvb3QgSUQsIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0VGV4dENvbnRlbnRBY2Nlc3NvclxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBjb250ZW50S2V5ID0gbnVsbDtcblxuLyoqXG4gKiBHZXRzIHRoZSBrZXkgdXNlZCB0byBhY2Nlc3MgdGV4dCBjb250ZW50IG9uIGEgRE9NIG5vZGUuXG4gKlxuICogQHJldHVybiB7P3N0cmluZ30gS2V5IHVzZWQgdG8gYWNjZXNzIHRleHQgY29udGVudC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRUZXh0Q29udGVudEFjY2Vzc29yKCkge1xuICBpZiAoIWNvbnRlbnRLZXkgJiYgRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gICAgLy8gUHJlZmVyIHRleHRDb250ZW50IHRvIGlubmVyVGV4dCBiZWNhdXNlIG1hbnkgYnJvd3NlcnMgc3VwcG9ydCBib3RoIGJ1dFxuICAgIC8vIFNWRyA8dGV4dD4gZWxlbWVudHMgZG9uJ3Qgc3VwcG9ydCBpbm5lclRleHQgZXZlbiB3aGVuIDxkaXY+IGRvZXMuXG4gICAgY29udGVudEtleSA9ICd0ZXh0Q29udGVudCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ID9cbiAgICAgICd0ZXh0Q29udGVudCcgOlxuICAgICAgJ2lubmVyVGV4dCc7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnRLZXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvblxuICogQHR5cGVjaGVja3NcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBHZXRzIHRoZSBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIHN1cHBsaWVkIGVsZW1lbnQgb3Igd2luZG93LlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWVzIGFyZSB1bmJvdW5kZWQsIHVubGlrZSBgZ2V0U2Nyb2xsUG9zaXRpb25gLiBUaGlzIG1lYW5zIHRoZXlcbiAqIG1heSBiZSBuZWdhdGl2ZSBvciBleGNlZWQgdGhlIGVsZW1lbnQgYm91bmRhcmllcyAod2hpY2ggaXMgcG9zc2libGUgdXNpbmdcbiAqIGluZXJ0aWFsIHNjcm9sbGluZykuXG4gKlxuICogQHBhcmFtIHtET01XaW5kb3d8RE9NRWxlbWVudH0gc2Nyb2xsYWJsZVxuICogQHJldHVybiB7b2JqZWN0fSBNYXAgd2l0aCBgeGAgYW5kIGB5YCBrZXlzLlxuICovXG5mdW5jdGlvbiBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbihzY3JvbGxhYmxlKSB7XG4gIGlmIChzY3JvbGxhYmxlID09PSB3aW5kb3cpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgeTogd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogc2Nyb2xsYWJsZS5zY3JvbGxMZWZ0LFxuICAgIHk6IHNjcm9sbGFibGUuc2Nyb2xsVG9wXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb247XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgaHlwaGVuYXRlXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBfdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2c7XG5cbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgc3RyaW5nLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gaHlwaGVuYXRlKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZC1jb2xvclwiXG4gKlxuICogRm9yIENTUyBzdHlsZSBuYW1lcywgdXNlIGBoeXBoZW5hdGVTdHlsZU5hbWVgIGluc3RlYWQgd2hpY2ggd29ya3MgcHJvcGVybHlcbiAqIHdpdGggYWxsIHZlbmRvciBwcmVmaXhlcywgaW5jbHVkaW5nIGBtc2AuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoeXBoZW5hdGUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShfdXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJDYXNlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaHlwaGVuYXRlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGh5cGhlbmF0ZVN0eWxlTmFtZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGh5cGhlbmF0ZSA9IHJlcXVpcmUoXCIuL2h5cGhlbmF0ZVwiKTtcblxudmFyIG1zUGF0dGVybiA9IC9ebXMtLztcblxuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBDU1MgcHJvcGVydHkgbmFtZSwgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnTW96VHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbW96LXRyYW5zaXRpb25cIlxuICogICA+IGh5cGhlbmF0ZVN0eWxlTmFtZSgnbXNUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tcy10cmFuc2l0aW9uXCJcbiAqXG4gKiBBcyBNb2Rlcm5penIgc3VnZ2VzdHMgKGh0dHA6Ly9tb2Rlcm5penIuY29tL2RvY3MvI3ByZWZpeGVkKSwgYW4gYG1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBgLW1zLWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoeXBoZW5hdGVTdHlsZU5hbWUoc3RyaW5nKSB7XG4gIHJldHVybiBoeXBoZW5hdGUoc3RyaW5nKS5yZXBsYWNlKG1zUGF0dGVybiwgJy1tcy0nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoeXBoZW5hdGVTdHlsZU5hbWU7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDb21wb3NpdGVDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbXB0eUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdE5hdGl2ZUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0TmF0aXZlQ29tcG9uZW50XCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbi8vIFRvIGF2b2lkIGEgY3ljbGljIGRlcGVuZGVuY3ksIHdlIGNyZWF0ZSB0aGUgZmluYWwgY2xhc3MgaW4gdGhpcyBtb2R1bGVcbnZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudFdyYXBwZXIgPSBmdW5jdGlvbigpIHsgfTtcbmFzc2lnbihcbiAgUmVhY3RDb21wb3NpdGVDb21wb25lbnRXcmFwcGVyLnByb3RvdHlwZSxcbiAgUmVhY3RDb21wb3NpdGVDb21wb25lbnQuTWl4aW4sXG4gIHtcbiAgICBfaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudDogaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudFxuICB9XG4pO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB0eXBlIHJlZmVyZW5jZSBpcyBhIGtub3duIGludGVybmFsIHR5cGUuIEkuZS4gbm90IGEgdXNlclxuICogcHJvdmlkZWQgY29tcG9zaXRlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSB2YWxpZCBpbnRlcm5hbCB0eXBlLlxuICovXG5mdW5jdGlvbiBpc0ludGVybmFsQ29tcG9uZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdHlwZS5wcm90b3R5cGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIHR5cGUucHJvdG90eXBlLm1vdW50Q29tcG9uZW50ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHR5cGUucHJvdG90eXBlLnJlY2VpdmVDb21wb25lbnQgPT09ICdmdW5jdGlvbidcbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIFJlYWN0Tm9kZSwgY3JlYXRlIGFuIGluc3RhbmNlIHRoYXQgd2lsbCBhY3R1YWxseSBiZSBtb3VudGVkLlxuICpcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlXG4gKiBAcGFyYW0geyp9IHBhcmVudENvbXBvc2l0ZVR5cGUgVGhlIGNvbXBvc2l0ZSB0eXBlIHRoYXQgcmVzb2x2ZWQgdGhpcy5cbiAqIEByZXR1cm4ge29iamVjdH0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGVsZW1lbnQncyBjb25zdHJ1Y3Rvci5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuZnVuY3Rpb24gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChub2RlLCBwYXJlbnRDb21wb3NpdGVUeXBlKSB7XG4gIHZhciBpbnN0YW5jZTtcblxuICBpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSBmYWxzZSkge1xuICAgIG5vZGUgPSBSZWFjdEVtcHR5Q29tcG9uZW50LmVtcHR5RWxlbWVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgZWxlbWVudCA9IG5vZGU7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIGVsZW1lbnQgJiYgKHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ3N0cmluZycpLFxuICAgICAgICAnT25seSBmdW5jdGlvbnMgb3Igc3RyaW5ncyBjYW4gYmUgbW91bnRlZCBhcyBSZWFjdCBjb21wb25lbnRzLidcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2Ugc3RyaW5nIHZhbHVlc1xuICAgIGlmIChwYXJlbnRDb21wb3NpdGVUeXBlID09PSBlbGVtZW50LnR5cGUgJiZcbiAgICAgICAgdHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIEF2b2lkIHJlY3Vyc2lvbiBpZiB0aGUgd3JhcHBlciByZW5kZXJzIGl0c2VsZi5cbiAgICAgIGluc3RhbmNlID0gUmVhY3ROYXRpdmVDb21wb25lbnQuY3JlYXRlSW50ZXJuYWxDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICAvLyBBbGwgbmF0aXZlIGNvbXBvbmVudHMgYXJlIGN1cnJlbnRseSB3cmFwcGVkIGluIGEgY29tcG9zaXRlIHNvIHdlJ3JlXG4gICAgICAvLyBzYWZlIHRvIGFzc3VtZSB0aGF0IHRoaXMgaXMgd2hhdCB3ZSBzaG91bGQgaW5zdGFudGlhdGUuXG4gICAgfSBlbHNlIGlmIChpc0ludGVybmFsQ29tcG9uZW50VHlwZShlbGVtZW50LnR5cGUpKSB7XG4gICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3IgY3VzdG9tIGNvbXBvbmVudHMgdGhhdCBhcmUgbm90IHN0cmluZ1xuICAgICAgLy8gcmVwcmVzZW5hdGlvbnMuIEkuZS4gQVJULiBPbmNlIHRob3NlIGFyZSB1cGRhdGVkIHRvIHVzZSB0aGUgc3RyaW5nXG4gICAgICAvLyByZXByZXNlbnRhdGlvbiwgd2UgY2FuIGRyb3AgdGhpcyBjb2RlIHBhdGguXG4gICAgICBpbnN0YW5jZSA9IG5ldyBlbGVtZW50LnR5cGUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlID0gbmV3IFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlcigpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5vZGUgPT09ICdudW1iZXInKSB7XG4gICAgaW5zdGFuY2UgPSBSZWFjdE5hdGl2ZUNvbXBvbmVudC5jcmVhdGVJbnN0YW5jZUZvclRleHQobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGZhbHNlLFxuICAgICAgJ0VuY291bnRlcmVkIGludmFsaWQgUmVhY3Qgbm9kZSBvZiB0eXBlICVzJyxcbiAgICAgIHR5cGVvZiBub2RlXG4gICAgKSA6IGludmFyaWFudChmYWxzZSkpO1xuICB9XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgdHlwZW9mIGluc3RhbmNlLmNvbnN0cnVjdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIGluc3RhbmNlLm1vdW50Q29tcG9uZW50ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgaW5zdGFuY2UucmVjZWl2ZUNvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIGluc3RhbmNlLnVubW91bnRDb21wb25lbnQgPT09ICdmdW5jdGlvbicsXG4gICAgICAnT25seSBSZWFjdCBDb21wb25lbnRzIGNhbiBiZSBtb3VudGVkLidcbiAgICApIDogbnVsbCk7XG4gIH1cblxuICAvLyBTZXRzIHVwIHRoZSBpbnN0YW5jZS4gVGhpcyBjYW4gcHJvYmFibHkganVzdCBtb3ZlIGludG8gdGhlIGNvbnN0cnVjdG9yIG5vdy5cbiAgaW5zdGFuY2UuY29uc3RydWN0KG5vZGUpO1xuXG4gIC8vIFRoZXNlIHR3byBmaWVsZHMgYXJlIHVzZWQgYnkgdGhlIERPTSBhbmQgQVJUIGRpZmZpbmcgYWxnb3JpdGhtc1xuICAvLyByZXNwZWN0aXZlbHkuIEluc3RlYWQgb2YgdXNpbmcgZXhwYW5kb3Mgb24gY29tcG9uZW50cywgd2Ugc2hvdWxkIGJlXG4gIC8vIHN0b3JpbmcgdGhlIHN0YXRlIG5lZWRlZCBieSB0aGUgZGlmZmluZyBhbGdvcml0aG1zIGVsc2V3aGVyZS5cbiAgaW5zdGFuY2UuX21vdW50SW5kZXggPSAwO1xuICBpbnN0YW5jZS5fbW91bnRJbWFnZSA9IG51bGw7XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIGluc3RhbmNlLl9pc093bmVyTmVjZXNzYXJ5ID0gZmFsc2U7XG4gICAgaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gZmFsc2U7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBpbnN0YW5jZXMgc2hvdWxkIGZ1bGx5IGNvbnN0cnVjdGVkIGF0IHRoaXMgcG9pbnQsIHNvIHRoZXkgc2hvdWxkXG4gIC8vIG5vdCBnZXQgYW55IG5ldyBmaWVsZHMgYWRkZWQgdG8gdGhlbSBhdCB0aGlzIHBvaW50LlxuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgaWYgKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucykge1xuICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdmFXNXpkR0Z1ZEdsaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZEM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ2FXNXpkR0Z1ZEdsaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZEZ4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wUlcxd2RIbERiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZ0Y0hSNVEyOXRjRzl1Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wVG1GMGFYWmxRMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JPWVhScGRtVkRiMjF3YjI1bGJuUmNJaWs3WEc1Y2JuWmhjaUJoYzNOcFoyNGdQU0J5WlhGMWFYSmxLRndpTGk5UFltcGxZM1F1WVhOemFXZHVYQ0lwTzF4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVMeThnVkc4Z1lYWnZhV1FnWVNCamVXTnNhV01nWkdWd1pXNWtaVzVqZVN3Z2QyVWdZM0psWVhSbElIUm9aU0JtYVc1aGJDQmpiR0Z6Y3lCcGJpQjBhR2x6SUcxdlpIVnNaVnh1ZG1GeUlGSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwVjNKaGNIQmxjaUE5SUdaMWJtTjBhVzl1S0NrZ2V5QjlPMXh1WVhOemFXZHVLRnh1SUNCU1pXRmpkRU52YlhCdmMybDBaVU52YlhCdmJtVnVkRmR5WVhCd1pYSXVjSEp2ZEc5MGVYQmxMRnh1SUNCU1pXRmpkRU52YlhCdmMybDBaVU52YlhCdmJtVnVkQzVOYVhocGJpeGNiaUFnZTF4dUlDQWdJRjlwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBPaUJwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBYRzRnSUgxY2JpazdYRzVjYmk4cUtseHVJQ29nUTJobFkyc2dhV1lnZEdobElIUjVjR1VnY21WbVpYSmxibU5sSUdseklHRWdhMjV2ZDI0Z2FXNTBaWEp1WVd3Z2RIbHdaUzRnU1M1bExpQnViM1FnWVNCMWMyVnlYRzRnS2lCd2NtOTJhV1JsWkNCamIyMXdiM05wZEdVZ2RIbHdaUzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0IwZVhCbFhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmU0JTWlhSMWNtNXpJSFJ5ZFdVZ2FXWWdkR2hwY3lCcGN5QmhJSFpoYkdsa0lHbHVkR1Z5Ym1Gc0lIUjVjR1V1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2x6U1c1MFpYSnVZV3hEYjIxd2IyNWxiblJVZVhCbEtIUjVjR1VwSUh0Y2JpQWdjbVYwZFhKdUlDaGNiaUFnSUNCMGVYQmxiMllnZEhsd1pTQTlQVDBnSjJaMWJtTjBhVzl1SnlBbUpseHVJQ0FnSUhSNWNHVnZaaUIwZVhCbExuQnliM1J2ZEhsd1pTQWhQVDBnSjNWdVpHVm1hVzVsWkNjZ0ppWmNiaUFnSUNCMGVYQmxiMllnZEhsd1pTNXdjbTkwYjNSNWNHVXViVzkxYm5SRGIyMXdiMjVsYm5RZ1BUMDlJQ2RtZFc1amRHbHZiaWNnSmlaY2JpQWdJQ0IwZVhCbGIyWWdkSGx3WlM1d2NtOTBiM1I1Y0dVdWNtVmpaV2wyWlVOdmJYQnZibVZ1ZENBOVBUMGdKMloxYm1OMGFXOXVKMXh1SUNBcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVkcGRtVnVJR0VnVW1WaFkzUk9iMlJsTENCamNtVmhkR1VnWVc0Z2FXNXpkR0Z1WTJVZ2RHaGhkQ0IzYVd4c0lHRmpkSFZoYkd4NUlHSmxJRzF2ZFc1MFpXUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEU1dlpHVjlJRzV2WkdWY2JpQXFJRUJ3WVhKaGJTQjdLbjBnY0dGeVpXNTBRMjl0Y0c5emFYUmxWSGx3WlNCVWFHVWdZMjl0Y0c5emFYUmxJSFI1Y0dVZ2RHaGhkQ0J5WlhOdmJIWmxaQ0IwYUdsekxseHVJQ29nUUhKbGRIVnliaUI3YjJKcVpXTjBmU0JCSUc1bGR5QnBibk4wWVc1alpTQnZaaUIwYUdVZ1pXeGxiV1Z1ZENkeklHTnZibk4wY25WamRHOXlMbHh1SUNvZ1FIQnliM1JsWTNSbFpGeHVJQ292WEc1bWRXNWpkR2x2YmlCcGJuTjBZVzUwYVdGMFpWSmxZV04wUTI5dGNHOXVaVzUwS0c1dlpHVXNJSEJoY21WdWRFTnZiWEJ2YzJsMFpWUjVjR1VwSUh0Y2JpQWdkbUZ5SUdsdWMzUmhibU5sTzF4dVhHNGdJR2xtSUNodWIyUmxJRDA5UFNCdWRXeHNJSHg4SUc1dlpHVWdQVDA5SUdaaGJITmxLU0I3WEc0Z0lDQWdibTlrWlNBOUlGSmxZV04wUlcxd2RIbERiMjF3YjI1bGJuUXVaVzF3ZEhsRmJHVnRaVzUwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLSFI1Y0dWdlppQnViMlJsSUQwOVBTQW5iMkpxWldOMEp5a2dlMXh1SUNBZ0lIWmhjaUJsYkdWdFpXNTBJRDBnYm05a1pUdGNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnWld4bGJXVnVkQ0FtSmlBb2RIbHdaVzltSUdWc1pXMWxiblF1ZEhsd1pTQTlQVDBnSjJaMWJtTjBhVzl1SnlCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdaV3hsYldWdWRDNTBlWEJsSUQwOVBTQW5jM1J5YVc1bkp5a3NYRzRnSUNBZ0lDQWdJQ2RQYm14NUlHWjFibU4wYVc5dWN5QnZjaUJ6ZEhKcGJtZHpJR05oYmlCaVpTQnRiM1Z1ZEdWa0lHRnpJRkpsWVdOMElHTnZiWEJ2Ym1WdWRITXVKMXh1SUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRk53WldOcFlXd2dZMkZ6WlNCemRISnBibWNnZG1Gc2RXVnpYRzRnSUNBZ2FXWWdLSEJoY21WdWRFTnZiWEJ2YzJsMFpWUjVjR1VnUFQwOUlHVnNaVzFsYm5RdWRIbHdaU0FtSmx4dUlDQWdJQ0FnSUNCMGVYQmxiMllnWld4bGJXVnVkQzUwZVhCbElEMDlQU0FuYzNSeWFXNW5KeWtnZTF4dUlDQWdJQ0FnTHk4Z1FYWnZhV1FnY21WamRYSnphVzl1SUdsbUlIUm9aU0IzY21Gd2NHVnlJSEpsYm1SbGNuTWdhWFJ6Wld4bUxseHVJQ0FnSUNBZ2FXNXpkR0Z1WTJVZ1BTQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkQzVqY21WaGRHVkpiblJsY201aGJFTnZiWEJ2Ym1WdWRDaGxiR1Z0Wlc1MEtUdGNiaUFnSUNBZ0lDOHZJRUZzYkNCdVlYUnBkbVVnWTI5dGNHOXVaVzUwY3lCaGNtVWdZM1Z5Y21WdWRHeDVJSGR5WVhCd1pXUWdhVzRnWVNCamIyMXdiM05wZEdVZ2MyOGdkMlVuY21WY2JpQWdJQ0FnSUM4dklITmhabVVnZEc4Z1lYTnpkVzFsSUhSb1lYUWdkR2hwY3lCcGN5QjNhR0YwSUhkbElITm9iM1ZzWkNCcGJuTjBZVzUwYVdGMFpTNWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHbHpTVzUwWlhKdVlXeERiMjF3YjI1bGJuUlVlWEJsS0dWc1pXMWxiblF1ZEhsd1pTa3BJSHRjYmlBZ0lDQWdJQzh2SUZSb2FYTWdhWE1nZEdWdGNHOXlZWEpwYkhrZ1lYWmhhV3hoWW14bElHWnZjaUJqZFhOMGIyMGdZMjl0Y0c5dVpXNTBjeUIwYUdGMElHRnlaU0J1YjNRZ2MzUnlhVzVuWEc0Z0lDQWdJQ0F2THlCeVpYQnlaWE5sYm1GMGFXOXVjeTRnU1M1bExpQkJVbFF1SUU5dVkyVWdkR2h2YzJVZ1lYSmxJSFZ3WkdGMFpXUWdkRzhnZFhObElIUm9aU0J6ZEhKcGJtZGNiaUFnSUNBZ0lDOHZJSEpsY0hKbGMyVnVkR0YwYVc5dUxDQjNaU0JqWVc0Z1pISnZjQ0IwYUdseklHTnZaR1VnY0dGMGFDNWNiaUFnSUNBZ0lHbHVjM1JoYm1ObElEMGdibVYzSUdWc1pXMWxiblF1ZEhsd1pTaGxiR1Z0Wlc1MEtUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYVc1emRHRnVZMlVnUFNCdVpYY2dVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5SWGNtRndjR1Z5S0NrN1hHNGdJQ0FnZlZ4dUlDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQnViMlJsSUQwOVBTQW5jM1J5YVc1bkp5QjhmQ0IwZVhCbGIyWWdibTlrWlNBOVBUMGdKMjUxYldKbGNpY3BJSHRjYmlBZ0lDQnBibk4wWVc1alpTQTlJRkpsWVdOMFRtRjBhWFpsUTI5dGNHOXVaVzUwTG1OeVpXRjBaVWx1YzNSaGJtTmxSbTl5VkdWNGRDaHViMlJsS1R0Y2JpQWdmU0JsYkhObElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQW5SVzVqYjNWdWRHVnlaV1FnYVc1MllXeHBaQ0JTWldGamRDQnViMlJsSUc5bUlIUjVjR1VnSlhNbkxGeHVJQ0FnSUNBZ2RIbHdaVzltSUc1dlpHVmNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLR1poYkhObEtTazdYRzRnSUgxY2JseHVJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNCMGVYQmxiMllnYVc1emRHRnVZMlV1WTI5dWMzUnlkV04wSUQwOVBTQW5ablZ1WTNScGIyNG5JQ1ltWEc0Z0lDQWdJQ0IwZVhCbGIyWWdhVzV6ZEdGdVkyVXViVzkxYm5SRGIyMXdiMjVsYm5RZ1BUMDlJQ2RtZFc1amRHbHZiaWNnSmlaY2JpQWdJQ0FnSUhSNWNHVnZaaUJwYm5OMFlXNWpaUzV5WldObGFYWmxRMjl0Y0c5dVpXNTBJRDA5UFNBblpuVnVZM1JwYjI0bklDWW1YRzRnSUNBZ0lDQjBlWEJsYjJZZ2FXNXpkR0Z1WTJVdWRXNXRiM1Z1ZEVOdmJYQnZibVZ1ZENBOVBUMGdKMloxYm1OMGFXOXVKeXhjYmlBZ0lDQWdJQ2RQYm14NUlGSmxZV04wSUVOdmJYQnZibVZ1ZEhNZ1kyRnVJR0psSUcxdmRXNTBaV1F1SjF4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ2ZWeHVYRzRnSUM4dklGTmxkSE1nZFhBZ2RHaGxJR2x1YzNSaGJtTmxMaUJVYUdseklHTmhiaUJ3Y205aVlXSnNlU0JxZFhOMElHMXZkbVVnYVc1MGJ5QjBhR1VnWTI5dWMzUnlkV04wYjNJZ2JtOTNMbHh1SUNCcGJuTjBZVzVqWlM1amIyNXpkSEoxWTNRb2JtOWtaU2s3WEc1Y2JpQWdMeThnVkdobGMyVWdkSGR2SUdacFpXeGtjeUJoY21VZ2RYTmxaQ0JpZVNCMGFHVWdSRTlOSUdGdVpDQkJVbFFnWkdsbVptbHVaeUJoYkdkdmNtbDBhRzF6WEc0Z0lDOHZJSEpsYzNCbFkzUnBkbVZzZVM0Z1NXNXpkR1ZoWkNCdlppQjFjMmx1WnlCbGVIQmhibVJ2Y3lCdmJpQmpiMjF3YjI1bGJuUnpMQ0IzWlNCemFHOTFiR1FnWW1WY2JpQWdMeThnYzNSdmNtbHVaeUIwYUdVZ2MzUmhkR1VnYm1WbFpHVmtJR0o1SUhSb1pTQmthV1ptYVc1bklHRnNaMjl5YVhSb2JYTWdaV3h6Wlhkb1pYSmxMbHh1SUNCcGJuTjBZVzVqWlM1ZmJXOTFiblJKYm1SbGVDQTlJREE3WEc0Z0lHbHVjM1JoYm1ObExsOXRiM1Z1ZEVsdFlXZGxJRDBnYm5Wc2JEdGNibHh1SUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnYVc1emRHRnVZMlV1WDJselQzZHVaWEpPWldObGMzTmhjbmtnUFNCbVlXeHpaVHRjYmlBZ0lDQnBibk4wWVc1alpTNWZkMkZ5Ym1Wa1FXSnZkWFJTWldaelNXNVNaVzVrWlhJZ1BTQm1ZV3h6WlR0Y2JpQWdmVnh1WEc0Z0lDOHZJRWx1ZEdWeWJtRnNJR2x1YzNSaGJtTmxjeUJ6YUc5MWJHUWdablZzYkhrZ1kyOXVjM1J5ZFdOMFpXUWdZWFFnZEdocGN5QndiMmx1ZEN3Z2MyOGdkR2hsZVNCemFHOTFiR1JjYmlBZ0x5OGdibTkwSUdkbGRDQmhibmtnYm1WM0lHWnBaV3hrY3lCaFpHUmxaQ0IwYnlCMGFHVnRJR0YwSUhSb2FYTWdjRzlwYm5RdVhHNGdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQnBaaUFvVDJKcVpXTjBMbkJ5WlhabGJuUkZlSFJsYm5OcGIyNXpLU0I3WEc0Z0lDQWdJQ0JQWW1wbFkzUXVjSEpsZG1WdWRFVjRkR1Z1YzJsdmJuTW9hVzV6ZEdGdVkyVXBPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQnBibk4wWVc1alpUdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCcGJuTjBZVzUwYVdGMFpWSmxZV04wUTI5dGNHOXVaVzUwTzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGludmFyaWFudFxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cbiAqXG4gKiBQcm92aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1cHBvcnRlZCkgYW5kIGFyZ3VtZW50c1xuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXG4gKiBleHBlY3RpbmcuXG4gKlxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcbiAqIHdpbGwgcmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5vdCBkaWZmZXIgaW4gcHJvZHVjdGlvbi5cbiAqL1xuXG52YXIgaW52YXJpYW50ID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdJbnZhcmlhbnQgVmlvbGF0aW9uOiAnICtcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdmFXNTJZWEpwWVc1MExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQnBiblpoY21saGJuUmNiaUFxTDF4dVhHNWNJblZ6WlNCemRISnBZM1JjSWp0Y2JseHVMeW9xWEc0Z0tpQlZjMlVnYVc1MllYSnBZVzUwS0NrZ2RHOGdZWE56WlhKMElITjBZWFJsSUhkb2FXTm9JSGx2ZFhJZ2NISnZaM0poYlNCaGMzTjFiV1Z6SUhSdklHSmxJSFJ5ZFdVdVhHNGdLbHh1SUNvZ1VISnZkbWxrWlNCemNISnBiblJtTFhOMGVXeGxJR1p2Y20xaGRDQW9iMjVzZVNBbGN5QnBjeUJ6ZFhCd2IzSjBaV1FwSUdGdVpDQmhjbWQxYldWdWRITmNiaUFxSUhSdklIQnliM1pwWkdVZ2FXNW1iM0p0WVhScGIyNGdZV0p2ZFhRZ2QyaGhkQ0JpY205clpTQmhibVFnZDJoaGRDQjViM1VnZDJWeVpWeHVJQ29nWlhod1pXTjBhVzVuTGx4dUlDcGNiaUFxSUZSb1pTQnBiblpoY21saGJuUWdiV1Z6YzJGblpTQjNhV3hzSUdKbElITjBjbWx3Y0dWa0lHbHVJSEJ5YjJSMVkzUnBiMjRzSUdKMWRDQjBhR1VnYVc1MllYSnBZVzUwWEc0Z0tpQjNhV3hzSUhKbGJXRnBiaUIwYnlCbGJuTjFjbVVnYkc5bmFXTWdaRzlsY3lCdWIzUWdaR2xtWm1WeUlHbHVJSEJ5YjJSMVkzUnBiMjR1WEc0Z0tpOWNibHh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJR1oxYm1OMGFXOXVLR052Ym1ScGRHbHZiaXdnWm05eWJXRjBMQ0JoTENCaUxDQmpMQ0JrTENCbExDQm1LU0I3WEc0Z0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNCcFppQW9abTl5YldGMElEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduYVc1MllYSnBZVzUwSUhKbGNYVnBjbVZ6SUdGdUlHVnljbTl5SUcxbGMzTmhaMlVnWVhKbmRXMWxiblFuS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCcFppQW9JV052Ym1ScGRHbHZiaWtnZTF4dUlDQWdJSFpoY2lCbGNuSnZjanRjYmlBZ0lDQnBaaUFvWm05eWJXRjBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lHVnljbTl5SUQwZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQW5UV2x1YVdacFpXUWdaWGhqWlhCMGFXOXVJRzlqWTNWeWNtVmtPeUIxYzJVZ2RHaGxJRzV2YmkxdGFXNXBabWxsWkNCa1pYWWdaVzUyYVhKdmJtMWxiblFnSnlBclhHNGdJQ0FnSUNBZ0lDZG1iM0lnZEdobElHWjFiR3dnWlhKeWIzSWdiV1Z6YzJGblpTQmhibVFnWVdSa2FYUnBiMjVoYkNCb1pXeHdablZzSUhkaGNtNXBibWR6TGlkY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFpoY2lCaGNtZHpJRDBnVzJFc0lHSXNJR01zSUdRc0lHVXNJR1pkTzF4dUlDQWdJQ0FnZG1GeUlHRnlaMGx1WkdWNElEMGdNRHRjYmlBZ0lDQWdJR1Z5Y205eUlEMGdibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0FuU1c1MllYSnBZVzUwSUZacGIyeGhkR2x2YmpvZ0p5QXJYRzRnSUNBZ0lDQWdJR1p2Y20xaGRDNXlaWEJzWVdObEtDOGxjeTluTENCbWRXNWpkR2x2YmlncElIc2djbVYwZFhKdUlHRnlaM05iWVhKblNXNWtaWGdySzEwN0lIMHBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHVnljbTl5TG1aeVlXMWxjMVJ2VUc5d0lEMGdNVHNnTHk4Z2QyVWdaRzl1SjNRZ1kyRnlaU0JoWW05MWRDQnBiblpoY21saGJuUW5jeUJ2ZDI0Z1puSmhiV1ZjYmlBZ0lDQjBhSEp2ZHlCbGNuSnZjanRjYmlBZ2ZWeHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCcGJuWmhjbWxoYm5RN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGlzRXZlbnRTdXBwb3J0ZWRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgdXNlSGFzRmVhdHVyZTtcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgdXNlSGFzRmVhdHVyZSA9XG4gICAgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24gJiZcbiAgICBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlICYmXG4gICAgLy8gYWx3YXlzIHJldHVybnMgdHJ1ZSBpbiBuZXdlciBicm93c2VycyBhcyBwZXIgdGhlIHN0YW5kYXJkLlxuICAgIC8vIEBzZWUgaHR0cDovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1kb21pbXBsZW1lbnRhdGlvbi1oYXNmZWF0dXJlXG4gICAgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnJywgJycpICE9PSB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuICpcbiAqIE5PVEU6IFRoaXMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG5vbi1nZW5lcmljIGV2ZW50cyBzdWNoIGFzIGBjaGFuZ2VgLFxuICogYHJlc2V0YCwgYGxvYWRgLCBgZXJyb3JgLCBhbmQgYHNlbGVjdGAuXG4gKlxuICogQm9ycm93cyBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lU3VmZml4IEV2ZW50IG5hbWUsIGUuZy4gXCJjbGlja1wiLlxuICogQHBhcmFtIHs/Ym9vbGVhbn0gY2FwdHVyZSBDaGVjayBpZiB0aGUgY2FwdHVyZSBwaGFzZSBpcyBzdXBwb3J0ZWQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCBpcyBzdXBwb3J0ZWQuXG4gKiBAaW50ZXJuYWxcbiAqIEBsaWNlbnNlIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuICovXG5mdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKGV2ZW50TmFtZVN1ZmZpeCwgY2FwdHVyZSkge1xuICBpZiAoIUV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSB8fFxuICAgICAgY2FwdHVyZSAmJiAhKCdhZGRFdmVudExpc3RlbmVyJyBpbiBkb2N1bWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZVN1ZmZpeDtcbiAgdmFyIGlzU3VwcG9ydGVkID0gZXZlbnROYW1lIGluIGRvY3VtZW50O1xuXG4gIGlmICghaXNTdXBwb3J0ZWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBpZiAoIWlzU3VwcG9ydGVkICYmIHVzZUhhc0ZlYXR1cmUgJiYgZXZlbnROYW1lU3VmZml4ID09PSAnd2hlZWwnKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gdGVzdCBzdXBwb3J0IGZvciB0aGUgYHdoZWVsYCBldmVudCBpbiBJRTkrLlxuICAgIGlzU3VwcG9ydGVkID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRzLndoZWVsJywgJzMuMCcpO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRXZlbnRTdXBwb3J0ZWQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgaXNOb2RlXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbi8qKlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIG9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaXMgYSBET00gbm9kZS5cbiAqL1xuZnVuY3Rpb24gaXNOb2RlKG9iamVjdCkge1xuICByZXR1cm4gISEob2JqZWN0ICYmIChcbiAgICAoKHR5cGVvZiBOb2RlID09PSAnZnVuY3Rpb24nID8gb2JqZWN0IGluc3RhbmNlb2YgTm9kZSA6IHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5ub2RlVHlwZSA9PT0gJ251bWJlcicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0Lm5vZGVOYW1lID09PSAnc3RyaW5nJykpXG4gICkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTm9kZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpc1RleHRJbnB1dEVsZW1lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cbnZhciBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICAnY29sb3InOiB0cnVlLFxuICAnZGF0ZSc6IHRydWUsXG4gICdkYXRldGltZSc6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWUsXG4gICdlbWFpbCc6IHRydWUsXG4gICdtb250aCc6IHRydWUsXG4gICdudW1iZXInOiB0cnVlLFxuICAncGFzc3dvcmQnOiB0cnVlLFxuICAncmFuZ2UnOiB0cnVlLFxuICAnc2VhcmNoJzogdHJ1ZSxcbiAgJ3RlbCc6IHRydWUsXG4gICd0ZXh0JzogdHJ1ZSxcbiAgJ3RpbWUnOiB0cnVlLFxuICAndXJsJzogdHJ1ZSxcbiAgJ3dlZWsnOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICByZXR1cm4gZWxlbSAmJiAoXG4gICAgKGVsZW0ubm9kZU5hbWUgPT09ICdJTlBVVCcgJiYgc3VwcG9ydGVkSW5wdXRUeXBlc1tlbGVtLnR5cGVdIHx8IGVsZW0ubm9kZU5hbWUgPT09ICdURVhUQVJFQScpXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUZXh0SW5wdXRFbGVtZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGlzVGV4dE5vZGVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIGlzTm9kZSA9IHJlcXVpcmUoXCIuL2lzTm9kZVwiKTtcblxuLyoqXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIG9iamVjdCBpcyBhIERPTSB0ZXh0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGlzVGV4dE5vZGUob2JqZWN0KSB7XG4gIHJldHVybiBpc05vZGUob2JqZWN0KSAmJiBvYmplY3Qubm9kZVR5cGUgPT0gMztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1RleHROb2RlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGpvaW5DbGFzc2VzXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBjbGFzc05hbWUgc3RyaW5ncyBpbnRvIG9uZS5cbiAqIGh0dHA6Ly9qc3BlcmYuY29tL2pvaW5jbGFzc2VzLWFyZ3MtdnMtYXJyYXlcbiAqXG4gKiBAcGFyYW0gey4uLj9zdHJpbmd9IGNsYXNzZXNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gam9pbkNsYXNzZXMoY2xhc3NOYW1lLyosIC4uLiAqLykge1xuICBpZiAoIWNsYXNzTmFtZSkge1xuICAgIGNsYXNzTmFtZSA9ICcnO1xuICB9XG4gIHZhciBuZXh0Q2xhc3M7XG4gIHZhciBhcmdMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICBpZiAoYXJnTGVuZ3RoID4gMSkge1xuICAgIGZvciAodmFyIGlpID0gMTsgaWkgPCBhcmdMZW5ndGg7IGlpKyspIHtcbiAgICAgIG5leHRDbGFzcyA9IGFyZ3VtZW50c1tpaV07XG4gICAgICBpZiAobmV4dENsYXNzKSB7XG4gICAgICAgIGNsYXNzTmFtZSA9IChjbGFzc05hbWUgPyBjbGFzc05hbWUgKyAnICcgOiAnJykgKyBuZXh0Q2xhc3M7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gam9pbkNsYXNzZXM7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGtleU1pcnJvclxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBlbnVtZXJhdGlvbiB3aXRoIGtleXMgZXF1YWwgdG8gdGhlaXIgdmFsdWUuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKlxuICogICB2YXIgQ09MT1JTID0ga2V5TWlycm9yKHtibHVlOiBudWxsLCByZWQ6IG51bGx9KTtcbiAqICAgdmFyIG15Q29sb3IgPSBDT0xPUlMuYmx1ZTtcbiAqICAgdmFyIGlzQ29sb3JWYWxpZCA9ICEhQ09MT1JTW215Q29sb3JdO1xuICpcbiAqIFRoZSBsYXN0IGxpbmUgY291bGQgbm90IGJlIHBlcmZvcm1lZCBpZiB0aGUgdmFsdWVzIG9mIHRoZSBnZW5lcmF0ZWQgZW51bSB3ZXJlXG4gKiBub3QgZXF1YWwgdG8gdGhlaXIga2V5cy5cbiAqXG4gKiAgIElucHV0OiAge2tleTE6IHZhbDEsIGtleTI6IHZhbDJ9XG4gKiAgIE91dHB1dDoge2tleTE6IGtleTEsIGtleTI6IGtleTJ9XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG52YXIga2V5TWlycm9yID0gZnVuY3Rpb24ob2JqKSB7XG4gIHZhciByZXQgPSB7fTtcbiAgdmFyIGtleTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBvYmogaW5zdGFuY2VvZiBPYmplY3QgJiYgIUFycmF5LmlzQXJyYXkob2JqKSxcbiAgICAna2V5TWlycm9yKC4uLik6IEFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LidcbiAgKSA6IGludmFyaWFudChvYmogaW5zdGFuY2VvZiBPYmplY3QgJiYgIUFycmF5LmlzQXJyYXkob2JqKSkpO1xuICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0W2tleV0gPSBrZXk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5TWlycm9yO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2YTJWNVRXbHljbTl5TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUd0bGVVMXBjbkp2Y2x4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYmk4cUtseHVJQ29nUTI5dWMzUnlkV04wY3lCaGJpQmxiblZ0WlhKaGRHbHZiaUIzYVhSb0lHdGxlWE1nWlhGMVlXd2dkRzhnZEdobGFYSWdkbUZzZFdVdVhHNGdLbHh1SUNvZ1JtOXlJR1Y0WVcxd2JHVTZYRzRnS2x4dUlDb2dJQ0IyWVhJZ1EwOU1UMUpUSUQwZ2EyVjVUV2x5Y205eUtIdGliSFZsT2lCdWRXeHNMQ0J5WldRNklHNTFiR3g5S1R0Y2JpQXFJQ0FnZG1GeUlHMTVRMjlzYjNJZ1BTQkRUMHhQVWxNdVlteDFaVHRjYmlBcUlDQWdkbUZ5SUdselEyOXNiM0pXWVd4cFpDQTlJQ0VoUTA5TVQxSlRXMjE1UTI5c2IzSmRPMXh1SUNwY2JpQXFJRlJvWlNCc1lYTjBJR3hwYm1VZ1kyOTFiR1FnYm05MElHSmxJSEJsY21admNtMWxaQ0JwWmlCMGFHVWdkbUZzZFdWeklHOW1JSFJvWlNCblpXNWxjbUYwWldRZ1pXNTFiU0IzWlhKbFhHNGdLaUJ1YjNRZ1pYRjFZV3dnZEc4Z2RHaGxhWElnYTJWNWN5NWNiaUFxWEc0Z0tpQWdJRWx1Y0hWME9pQWdlMnRsZVRFNklIWmhiREVzSUd0bGVUSTZJSFpoYkRKOVhHNGdLaUFnSUU5MWRIQjFkRG9nZTJ0bGVURTZJR3RsZVRFc0lHdGxlVEk2SUd0bGVUSjlYRzRnS2x4dUlDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHOWlhbHh1SUNvZ1FISmxkSFZ5YmlCN2IySnFaV04wZlZ4dUlDb3ZYRzUyWVhJZ2EyVjVUV2x5Y205eUlEMGdablZ1WTNScGIyNG9iMkpxS1NCN1hHNGdJSFpoY2lCeVpYUWdQU0I3ZlR0Y2JpQWdkbUZ5SUd0bGVUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQnZZbW9nYVc1emRHRnVZMlZ2WmlCUFltcGxZM1FnSmlZZ0lVRnljbUY1TG1selFYSnlZWGtvYjJKcUtTeGNiaUFnSUNBbmEyVjVUV2x5Y205eUtDNHVMaWs2SUVGeVozVnRaVzUwSUcxMWMzUWdZbVVnWVc0Z2IySnFaV04wTGlkY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENodlltb2dhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUWdKaVlnSVVGeWNtRjVMbWx6UVhKeVlYa29iMkpxS1NrcE8xeHVJQ0JtYjNJZ0tHdGxlU0JwYmlCdlltb3BJSHRjYmlBZ0lDQnBaaUFvSVc5aWFpNW9ZWE5QZDI1UWNtOXdaWEowZVNoclpYa3BLU0I3WEc0Z0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBXMnRsZVYwZ1BTQnJaWGs3WEc0Z0lIMWNiaUFnY21WMGRYSnVJSEpsZER0Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnYTJWNVRXbHljbTl5TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUga2V5T2ZcbiAqL1xuXG4vKipcbiAqIEFsbG93cyBleHRyYWN0aW9uIG9mIGEgbWluaWZpZWQga2V5LiBMZXQncyB0aGUgYnVpbGQgc3lzdGVtIG1pbmlmeSBrZXlzXG4gKiB3aXRob3V0IGxvb3NpbmcgdGhlIGFiaWxpdHkgdG8gZHluYW1pY2FsbHkgdXNlIGtleSBzdHJpbmdzIGFzIHZhbHVlc1xuICogdGhlbXNlbHZlcy4gUGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBhIHNpbmdsZSBrZXkvdmFsIHBhaXIgYW5kIGl0IHdpbGwgcmV0dXJuXG4gKiB5b3UgdGhlIHN0cmluZyBrZXkgb2YgdGhhdCBzaW5nbGUgcmVjb3JkLiBTdXBwb3NlIHlvdSB3YW50IHRvIGdyYWIgdGhlXG4gKiB2YWx1ZSBmb3IgYSBrZXkgJ2NsYXNzTmFtZScgaW5zaWRlIG9mIGFuIG9iamVjdC4gS2V5L3ZhbCBtaW5pZmljYXRpb24gbWF5XG4gKiBoYXZlIGFsaWFzZWQgdGhhdCBrZXkgdG8gYmUgJ3hhMTInLiBrZXlPZih7Y2xhc3NOYW1lOiBudWxsfSkgd2lsbCByZXR1cm5cbiAqICd4YTEyJyBpbiB0aGF0IGNhc2UuIFJlc29sdmUga2V5cyB5b3Ugd2FudCB0byB1c2Ugb25jZSBhdCBzdGFydHVwIHRpbWUsIHRoZW5cbiAqIHJldXNlIHRob3NlIHJlc29sdXRpb25zLlxuICovXG52YXIga2V5T2YgPSBmdW5jdGlvbihvbmVLZXlPYmopIHtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gb25lS2V5T2JqKSB7XG4gICAgaWYgKCFvbmVLZXlPYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0ga2V5T2Y7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgbWFwT2JqZWN0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBwcm92aWRlZCBgY2FsbGJhY2tgIG9uY2UgZm9yIGVhY2ggZW51bWVyYWJsZSBvd24gcHJvcGVydHkgaW4gdGhlXG4gKiBvYmplY3QgYW5kIGNvbnN0cnVjdHMgYSBuZXcgb2JqZWN0IGZyb20gdGhlIHJlc3VsdHMuIFRoZSBgY2FsbGJhY2tgIGlzXG4gKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICpcbiAqICAtIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogIC0gdGhlIHByb3BlcnR5IG5hbWVcbiAqICAtIHRoZSBvYmplY3QgYmVpbmcgdHJhdmVyc2VkXG4gKlxuICogUHJvcGVydGllcyB0aGF0IGFyZSBhZGRlZCBhZnRlciB0aGUgY2FsbCB0byBgbWFwT2JqZWN0YCB3aWxsIG5vdCBiZSB2aXNpdGVkXG4gKiBieSBgY2FsbGJhY2tgLiBJZiB0aGUgdmFsdWVzIG9mIGV4aXN0aW5nIHByb3BlcnRpZXMgYXJlIGNoYW5nZWQsIHRoZSB2YWx1ZVxuICogcGFzc2VkIHRvIGBjYWxsYmFja2Agd2lsbCBiZSB0aGUgdmFsdWUgYXQgdGhlIHRpbWUgYG1hcE9iamVjdGAgdmlzaXRzIHRoZW0uXG4gKiBQcm9wZXJ0aWVzIHRoYXQgYXJlIGRlbGV0ZWQgYmVmb3JlIGJlaW5nIHZpc2l0ZWQgYXJlIG5vdCB2aXNpdGVkLlxuICpcbiAqIEBncmVwIGZ1bmN0aW9uIG9iamVjdE1hcCgpXG4gKiBAZ3JlcCBmdW5jdGlvbiBvYmpNYXAoKVxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHsqfSBjb250ZXh0XG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5mdW5jdGlvbiBtYXBPYmplY3Qob2JqZWN0LCBjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIG5hbWUpKSB7XG4gICAgICByZXN1bHRbbmFtZV0gPSBjYWxsYmFjay5jYWxsKGNvbnRleHQsIG9iamVjdFtuYW1lXSwgbmFtZSwgb2JqZWN0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBPYmplY3Q7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgbWVtb2l6ZVN0cmluZ09ubHlcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1lbW9pemVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgb25lIHN0cmluZyBhcmd1bWVudC5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVTdHJpbmdPbmx5KGNhbGxiYWNrKSB7XG4gIHZhciBjYWNoZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgaWYgKCFjYWNoZS5oYXNPd25Qcm9wZXJ0eShzdHJpbmcpKSB7XG4gICAgICBjYWNoZVtzdHJpbmddID0gY2FsbGJhY2suY2FsbCh0aGlzLCBzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVbc3RyaW5nXTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplU3RyaW5nT25seTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgb25seUNoaWxkXG4gKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzXG4gKiBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYSBzaW5nbGUgY2hpbGQgZ2V0cyBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGVcbiAqIHB1cnBvc2Ugb2YgdGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdG8gYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmVcbiAqIG9mIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gY2hpbGRyZW4gQ2hpbGQgY29sbGVjdGlvbiBzdHJ1Y3R1cmUuXG4gKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdENvbXBvbmVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5mdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4pIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pLFxuICAgICdvbmx5Q2hpbGQgbXVzdCBiZSBwYXNzZWQgYSBjaGlsZHJlbiB3aXRoIGV4YWN0bHkgb25lIGNoaWxkLidcbiAgKSA6IGludmFyaWFudChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvbmx5Q2hpbGQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZiMjVzZVVOb2FXeGtMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElHOXViSGxEYUdsc1pGeHVJQ292WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNWNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QjBhR1VnWm1seWMzUWdZMmhwYkdRZ2FXNGdZU0JqYjJ4c1pXTjBhVzl1SUc5bUlHTm9hV3hrY21WdUlHRnVaQ0IyWlhKcFptbGxjeUIwYUdGMElIUm9aWEpsWEc0Z0tpQnBjeUJ2Ym14NUlHOXVaU0JqYUdsc1pDQnBiaUIwYUdVZ1kyOXNiR1ZqZEdsdmJpNGdWR2hsSUdOMWNuSmxiblFnYVcxd2JHVnRaVzUwWVhScGIyNGdiMllnZEdocGMxeHVJQ29nWm5WdVkzUnBiMjRnWVhOemRXMWxjeUIwYUdGMElHRWdjMmx1WjJ4bElHTm9hV3hrSUdkbGRITWdjR0Z6YzJWa0lIZHBkR2h2ZFhRZ1lTQjNjbUZ3Y0dWeUxDQmlkWFFnZEdobFhHNGdLaUJ3ZFhKd2IzTmxJRzltSUhSb2FYTWdhR1ZzY0dWeUlHWjFibU4wYVc5dUlHbHpJSFJ2SUdGaWMzUnlZV04wSUdGM1lYa2dkR2hsSUhCaGNuUnBZM1ZzWVhJZ2MzUnlkV04wZFhKbFhHNGdLaUJ2WmlCamFHbHNaSEpsYmk1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZXo5dlltcGxZM1I5SUdOb2FXeGtjbVZ1SUVOb2FXeGtJR052Ykd4bFkzUnBiMjRnYzNSeWRXTjBkWEpsTGx4dUlDb2dRSEpsZEhWeWJpQjdVbVZoWTNSRGIyMXdiMjVsYm5SOUlGUm9aU0JtYVhKemRDQmhibVFnYjI1c2VTQmdVbVZoWTNSRGIyMXdiMjVsYm5SZ0lHTnZiblJoYVc1bFpDQnBiaUIwYUdWY2JpQXFJSE4wY25WamRIVnlaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdiMjVzZVVOb2FXeGtLR05vYVd4a2NtVnVLU0I3WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0dOb2FXeGtjbVZ1S1N4Y2JpQWdJQ0FuYjI1c2VVTm9hV3hrSUcxMWMzUWdZbVVnY0dGemMyVmtJR0VnWTJocGJHUnlaVzRnZDJsMGFDQmxlR0ZqZEd4NUlHOXVaU0JqYUdsc1pDNG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9VbVZoWTNSRmJHVnRaVzUwTG1selZtRnNhV1JGYkdWdFpXNTBLR05vYVd4a2NtVnVLU2twTzF4dUlDQnlaWFIxY200Z1kyaHBiR1J5Wlc0N1hHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnYjI1c2VVTm9hV3hrTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgcGVyZm9ybWFuY2VcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgcGVyZm9ybWFuY2U7XG5cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgcGVyZm9ybWFuY2UgPVxuICAgIHdpbmRvdy5wZXJmb3JtYW5jZSB8fFxuICAgIHdpbmRvdy5tc1BlcmZvcm1hbmNlIHx8XG4gICAgd2luZG93LndlYmtpdFBlcmZvcm1hbmNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBlcmZvcm1hbmNlIHx8IHt9O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHBlcmZvcm1hbmNlTm93XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBwZXJmb3JtYW5jZSA9IHJlcXVpcmUoXCIuL3BlcmZvcm1hbmNlXCIpO1xuXG4vKipcbiAqIERldGVjdCBpZiB3ZSBjYW4gdXNlIGB3aW5kb3cucGVyZm9ybWFuY2Uubm93KClgIGFuZCBncmFjZWZ1bGx5IGZhbGxiYWNrIHRvXG4gKiBgRGF0ZS5ub3coKWAgaWYgaXQgZG9lc24ndCBleGlzdC4gV2UgbmVlZCB0byBzdXBwb3J0IEZpcmVmb3ggPCAxNSBmb3Igbm93XG4gKiBiZWNhdXNlIG9mIEZhY2Vib29rJ3MgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7XG4gIHBlcmZvcm1hbmNlID0gRGF0ZTtcbn1cblxudmFyIHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93LmJpbmQocGVyZm9ybWFuY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBlcmZvcm1hbmNlTm93O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZShcIi4vZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyXCIpO1xuXG4vKipcbiAqIEVzY2FwZXMgYXR0cmlidXRlIHZhbHVlIHRvIHByZXZlbnQgc2NyaXB0aW5nIGF0dGFja3MuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEFuIGVzY2FwZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3Nlcih2YWx1ZSkge1xuICByZXR1cm4gJ1wiJyArIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlcih2YWx1ZSkgKyAnXCInO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHNldElubmVySFRNTFxuICovXG5cbi8qIGdsb2JhbHMgTVNBcHAgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIFdISVRFU1BBQ0VfVEVTVCA9IC9eWyBcXHJcXG5cXHRcXGZdLztcbnZhciBOT05WSVNJQkxFX1RFU1QgPSAvPCghLS18bGlua3xub3NjcmlwdHxtZXRhfHNjcmlwdHxzdHlsZSlbIFxcclxcblxcdFxcZlxcLz5dLztcblxuLyoqXG4gKiBTZXQgdGhlIGlubmVySFRNTCBwcm9wZXJ0eSBvZiBhIG5vZGUsIGVuc3VyaW5nIHRoYXQgd2hpdGVzcGFjZSBpcyBwcmVzZXJ2ZWRcbiAqIGV2ZW4gaW4gSUU4LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgc2V0SW5uZXJIVE1MID0gZnVuY3Rpb24obm9kZSwgaHRtbCkge1xuICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG59O1xuXG4vLyBXaW44IGFwcHM6IEFsbG93IGFsbCBodG1sIHRvIGJlIGluc2VydGVkXG5pZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICBzZXRJbm5lckhUTUwgPSBmdW5jdGlvbihub2RlLCBodG1sKSB7XG4gICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKSB7XG4gICAgICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgfSk7XG4gIH07XG59XG5cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gSUU4OiBXaGVuIHVwZGF0aW5nIGEganVzdCBjcmVhdGVkIG5vZGUgd2l0aCBpbm5lckhUTUwgb25seSBsZWFkaW5nXG4gIC8vIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZC4gV2hlbiB1cGRhdGluZyBhbiBleGlzdGluZyBub2RlIHdpdGggaW5uZXJIVE1MXG4gIC8vIHdoaXRlc3BhY2UgaW4gcm9vdCBUZXh0Tm9kZXMgaXMgYWxzbyBjb2xsYXBzZWQuXG4gIC8vIEBzZWUgcXVpcmtzbW9kZS5vcmcvYnVncmVwb3J0cy9hcmNoaXZlcy8yMDA0LzExL2lubmVyaHRtbF9hbmRfdC5odG1sXG5cbiAgLy8gRmVhdHVyZSBkZXRlY3Rpb247IG9ubHkgSUU4IGlzIGtub3duIHRvIGJlaGF2ZSBpbXByb3Blcmx5IGxpa2UgdGhpcy5cbiAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHRlc3RFbGVtZW50LmlubmVySFRNTCA9ICcgJztcbiAgaWYgKHRlc3RFbGVtZW50LmlubmVySFRNTCA9PT0gJycpIHtcbiAgICBzZXRJbm5lckhUTUwgPSBmdW5jdGlvbihub2RlLCBodG1sKSB7XG4gICAgICAvLyBNYWdpYyB0aGVvcnk6IElFOCBzdXBwb3NlZGx5IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gYWRkZWQgYW5kIHVwZGF0ZWRcbiAgICAgIC8vIG5vZGVzIHdoZW4gcHJvY2Vzc2luZyBpbm5lckhUTUwsIGlubmVySFRNTCBvbiB1cGRhdGVkIG5vZGVzIHN1ZmZlcnNcbiAgICAgIC8vIGZyb20gd29yc2Ugd2hpdGVzcGFjZSBiZWhhdmlvci4gUmUtYWRkaW5nIGEgbm9kZSBsaWtlIHRoaXMgdHJpZ2dlcnNcbiAgICAgIC8vIHRoZSBpbml0aWFsIGFuZCBtb3JlIGZhdm9yYWJsZSB3aGl0ZXNwYWNlIGJlaGF2aW9yLlxuICAgICAgLy8gVE9ETzogV2hhdCB0byBkbyBvbiBhIGRldGFjaGVkIG5vZGU/XG4gICAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobm9kZSwgbm9kZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGFsc28gaW1wbGVtZW50IGEgd29ya2Fyb3VuZCBmb3Igbm9uLXZpc2libGUgdGFncyBkaXNhcHBlYXJpbmcgaW50b1xuICAgICAgLy8gdGhpbiBhaXIgb24gSUU4LCB0aGlzIG9ubHkgaGFwcGVucyBpZiB0aGVyZSBpcyBubyB2aXNpYmxlIHRleHRcbiAgICAgIC8vIGluLWZyb250IG9mIHRoZSBub24tdmlzaWJsZSB0YWdzLiBQaWdneWJhY2sgb24gdGhlIHdoaXRlc3BhY2UgZml4XG4gICAgICAvLyBhbmQgc2ltcGx5IGNoZWNrIGlmIGFueSBub24tdmlzaWJsZSB0YWdzIGFwcGVhciBpbiB0aGUgc291cmNlLlxuICAgICAgaWYgKFdISVRFU1BBQ0VfVEVTVC50ZXN0KGh0bWwpIHx8XG4gICAgICAgICAgaHRtbFswXSA9PT0gJzwnICYmIE5PTlZJU0lCTEVfVEVTVC50ZXN0KGh0bWwpKSB7XG4gICAgICAgIC8vIFJlY292ZXIgbGVhZGluZyB3aGl0ZXNwYWNlIGJ5IHRlbXBvcmFyaWx5IHByZXBlbmRpbmcgYW55IGNoYXJhY3Rlci5cbiAgICAgICAgLy8gXFx1RkVGRiBoYXMgdGhlIHBvdGVudGlhbCBhZHZhbnRhZ2Ugb2YgYmVpbmcgemVyby13aWR0aC9pbnZpc2libGUuXG4gICAgICAgIG5vZGUuaW5uZXJIVE1MID0gJ1xcdUZFRkYnICsgaHRtbDtcblxuICAgICAgICAvLyBkZWxldGVEYXRhIGxlYXZlcyBhbiBlbXB0eSBgVGV4dE5vZGVgIHdoaWNoIG9mZnNldHMgdGhlIGluZGV4IG9mIGFsbFxuICAgICAgICAvLyBjaGlsZHJlbi4gRGVmaW5pdGVseSB3YW50IHRvIGF2b2lkIHRoaXMuXG4gICAgICAgIHZhciB0ZXh0Tm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKHRleHROb2RlLmRhdGEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgbm9kZS5yZW1vdmVDaGlsZCh0ZXh0Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dE5vZGUuZGVsZXRlRGF0YSgwLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRJbm5lckhUTUw7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgc2V0VGV4dENvbnRlbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xudmFyIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlciA9IHJlcXVpcmUoXCIuL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlclwiKTtcbnZhciBzZXRJbm5lckhUTUwgPSByZXF1aXJlKFwiLi9zZXRJbm5lckhUTUxcIik7XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0Q29udGVudCBwcm9wZXJ0eSBvZiBhIG5vZGUsIGVuc3VyaW5nIHRoYXQgd2hpdGVzcGFjZSBpcyBwcmVzZXJ2ZWRcbiAqIGV2ZW4gaW4gSUU4LiBpbm5lclRleHQgaXMgYSBwb29yIHN1YnN0aXR1dGUgZm9yIHRleHRDb250ZW50IGFuZCwgYW1vbmcgbWFueVxuICogaXNzdWVzLCBpbnNlcnRzIDxicj4gaW5zdGVhZCBvZiB0aGUgbGl0ZXJhbCBuZXdsaW5lIGNoYXJzLiBpbm5lckhUTUwgYmVoYXZlc1xuICogYXMgaXQgc2hvdWxkLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbihub2RlLCB0ZXh0KSB7XG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufTtcblxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICBpZiAoISgndGV4dENvbnRlbnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpIHtcbiAgICBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uKG5vZGUsIHRleHQpIHtcbiAgICAgIHNldElubmVySFRNTChub2RlLCBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIodGV4dCkpO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUZXh0Q29udGVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBzaGFsbG93RXF1YWxcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUGVyZm9ybXMgZXF1YWxpdHkgYnkgaXRlcmF0aW5nIHRocm91Z2gga2V5cyBvbiBhbiBvYmplY3QgYW5kIHJldHVybmluZ1xuICogZmFsc2Ugd2hlbiBhbnkga2V5IGhhcyB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBzdHJpY3RseSBlcXVhbCBiZXR3ZWVuXG4gKiBvYmpBIGFuZCBvYmpCLiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWVzIG9mIGFsbCBrZXlzIGFyZSBzdHJpY3RseSBlcXVhbC5cbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBrZXk7XG4gIC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG4gIGZvciAoa2V5IGluIG9iakEpIHtcbiAgICBpZiAob2JqQS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICghb2JqQi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IG9iakFba2V5XSAhPT0gb2JqQltrZXldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBUZXN0IGZvciBCJ3Mga2V5cyBtaXNzaW5nIGZyb20gQS5cbiAgZm9yIChrZXkgaW4gb2JqQikge1xuICAgIGlmIChvYmpCLmhhc093blByb3BlcnR5KGtleSkgJiYgIW9iakEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaGFsbG93RXF1YWw7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vKipcbiAqIEdpdmVuIGEgYHByZXZFbGVtZW50YCBhbmQgYG5leHRFbGVtZW50YCwgZGV0ZXJtaW5lcyBpZiB0aGUgZXhpc3RpbmdcbiAqIGluc3RhbmNlIHNob3VsZCBiZSB1cGRhdGVkIGFzIG9wcG9zZWQgdG8gYmVpbmcgZGVzdHJveWVkIG9yIHJlcGxhY2VkIGJ5IGEgbmV3XG4gKiBpbnN0YW5jZS4gQm90aCBhcmd1bWVudHMgYXJlIGVsZW1lbnRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlzIGxvZ2ljIGNhblxuICogb3BlcmF0ZSBvbiBzdGF0ZWxlc3MgdHJlZXMgd2l0aG91dCBhbnkgYmFja2luZyBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IHByZXZFbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG5leHRFbGVtZW50XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBleGlzdGluZyBpbnN0YW5jZSBzaG91bGQgYmUgdXBkYXRlZC5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KSB7XG4gIGlmIChwcmV2RWxlbWVudCAhPSBudWxsICYmIG5leHRFbGVtZW50ICE9IG51bGwpIHtcbiAgICB2YXIgcHJldlR5cGUgPSB0eXBlb2YgcHJldkVsZW1lbnQ7XG4gICAgdmFyIG5leHRUeXBlID0gdHlwZW9mIG5leHRFbGVtZW50O1xuICAgIGlmIChwcmV2VHlwZSA9PT0gJ3N0cmluZycgfHwgcHJldlR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gKG5leHRUeXBlID09PSAnc3RyaW5nJyB8fCBuZXh0VHlwZSA9PT0gJ251bWJlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV4dFR5cGUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgcHJldkVsZW1lbnQudHlwZSA9PT0gbmV4dEVsZW1lbnQudHlwZSAmJlxuICAgICAgICAgIHByZXZFbGVtZW50LmtleSA9PT0gbmV4dEVsZW1lbnQua2V5KSB7XG4gICAgICAgIHZhciBvd25lcnNNYXRjaCA9IHByZXZFbGVtZW50Ll9vd25lciA9PT0gbmV4dEVsZW1lbnQuX293bmVyO1xuICAgICAgICB2YXIgcHJldk5hbWUgPSBudWxsO1xuICAgICAgICB2YXIgbmV4dE5hbWUgPSBudWxsO1xuICAgICAgICB2YXIgbmV4dERpc3BsYXlOYW1lID0gbnVsbDtcbiAgICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAgIGlmICghb3duZXJzTWF0Y2gpIHtcbiAgICAgICAgICAgIGlmIChwcmV2RWxlbWVudC5fb3duZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHByZXZFbGVtZW50Ll9vd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBwcmV2RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3RvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHByZXZOYW1lID1cbiAgICAgICAgICAgICAgICBwcmV2RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudC5fb3duZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIG5leHRFbGVtZW50Ll9vd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3RvciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG5leHROYW1lID1cbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudC50eXBlICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC50eXBlLmRpc3BsYXlOYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgbmV4dERpc3BsYXlOYW1lID0gbmV4dEVsZW1lbnQudHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudC50eXBlICE9IG51bGwgJiYgdHlwZW9mIG5leHRFbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG5leHREaXNwbGF5TmFtZSA9IG5leHRFbGVtZW50LnR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5leHRFbGVtZW50LnR5cGUgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQudHlwZSA9PT0gJ2lucHV0JyB8fFxuICAgICAgICAgICAgICAgIG5leHRFbGVtZW50LnR5cGUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgICAgICAgaWYgKChwcmV2RWxlbWVudC5fb3duZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgcHJldkVsZW1lbnQuX293bmVyLl9pc093bmVyTmVjZXNzYXJ5ID09PSBmYWxzZSkgfHxcbiAgICAgICAgICAgICAgICAgIChuZXh0RWxlbWVudC5fb3duZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuX293bmVyLl9pc093bmVyTmVjZXNzYXJ5ID09PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldkVsZW1lbnQuX293bmVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHByZXZFbGVtZW50Ll9vd25lci5faXNPd25lck5lY2Vzc2FyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudC5fb3duZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuX293bmVyLl9pc093bmVyTmVjZXNzYXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICc8JXMgLz4gaXMgYmVpbmcgcmVuZGVyZWQgYnkgYm90aCAlcyBhbmQgJXMgdXNpbmcgdGhlIHNhbWUgJyArXG4gICAgICAgICAgICAgICAgICAna2V5ICglcykgaW4gdGhlIHNhbWUgcGxhY2UuIEN1cnJlbnRseSwgdGhpcyBtZWFucyB0aGF0ICcgK1xuICAgICAgICAgICAgICAgICAgJ3RoZXkgZG9uXFwndCBwcmVzZXJ2ZSBzdGF0ZS4gVGhpcyBiZWhhdmlvciBzaG91bGQgYmUgdmVyeSAnICtcbiAgICAgICAgICAgICAgICAgICdyYXJlIHNvIHdlXFwncmUgY29uc2lkZXJpbmcgZGVwcmVjYXRpbmcgaXQuIFBsZWFzZSBjb250YWN0ICcgK1xuICAgICAgICAgICAgICAgICAgJ3RoZSBSZWFjdCB0ZWFtIGFuZCBleHBsYWluIHlvdXIgdXNlIGNhc2Ugc28gdGhhdCB3ZSBjYW4gJyArXG4gICAgICAgICAgICAgICAgICAndGFrZSB0aGF0IGludG8gY29uc2lkZXJhdGlvbi4nLFxuICAgICAgICAgICAgICAgICAgbmV4dERpc3BsYXlOYW1lIHx8ICdVbmtub3duIENvbXBvbmVudCcsXG4gICAgICAgICAgICAgICAgICBwcmV2TmFtZSB8fCAnW1Vua25vd25dJyxcbiAgICAgICAgICAgICAgICAgIG5leHROYW1lIHx8ICdbVW5rbm93bl0nLFxuICAgICAgICAgICAgICAgICAgcHJldkVsZW1lbnQua2V5XG4gICAgICAgICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvd25lcnNNYXRjaDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2YzJodmRXeGtWWEJrWVhSbFVtVmhZM1JEYjIxd2IyNWxiblF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCemFHOTFiR1JWY0dSaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZEZ4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVMeW9xWEc0Z0tpQkhhWFpsYmlCaElHQndjbVYyUld4bGJXVnVkR0FnWVc1a0lHQnVaWGgwUld4bGJXVnVkR0FzSUdSbGRHVnliV2x1WlhNZ2FXWWdkR2hsSUdWNGFYTjBhVzVuWEc0Z0tpQnBibk4wWVc1alpTQnphRzkxYkdRZ1ltVWdkWEJrWVhSbFpDQmhjeUJ2Y0hCdmMyVmtJSFJ2SUdKbGFXNW5JR1JsYzNSeWIzbGxaQ0J2Y2lCeVpYQnNZV05sWkNCaWVTQmhJRzVsZDF4dUlDb2dhVzV6ZEdGdVkyVXVJRUp2ZEdnZ1lYSm5kVzFsYm5SeklHRnlaU0JsYkdWdFpXNTBjeTRnVkdocGN5Qmxibk4xY21WeklIUm9ZWFFnZEdocGN5QnNiMmRwWXlCallXNWNiaUFxSUc5d1pYSmhkR1VnYjI0Z2MzUmhkR1ZzWlhOeklIUnlaV1Z6SUhkcGRHaHZkWFFnWVc1NUlHSmhZMnRwYm1jZ2FXNXpkR0Z1WTJVdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCd2NtVjJSV3hsYldWdWRGeHVJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J1WlhoMFJXeGxiV1Z1ZEZ4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMGdWSEoxWlNCcFppQjBhR1VnWlhocGMzUnBibWNnYVc1emRHRnVZMlVnYzJodmRXeGtJR0psSUhWd1pHRjBaV1F1WEc0Z0tpQkFjSEp2ZEdWamRHVmtYRzRnS2k5Y2JtWjFibU4wYVc5dUlITm9iM1ZzWkZWd1pHRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MEtIQnlaWFpGYkdWdFpXNTBMQ0J1WlhoMFJXeGxiV1Z1ZENrZ2UxeHVJQ0JwWmlBb2NISmxka1ZzWlcxbGJuUWdJVDBnYm5Wc2JDQW1KaUJ1WlhoMFJXeGxiV1Z1ZENBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnZG1GeUlIQnlaWFpVZVhCbElEMGdkSGx3Wlc5bUlIQnlaWFpGYkdWdFpXNTBPMXh1SUNBZ0lIWmhjaUJ1WlhoMFZIbHdaU0E5SUhSNWNHVnZaaUJ1WlhoMFJXeGxiV1Z1ZER0Y2JpQWdJQ0JwWmlBb2NISmxkbFI1Y0dVZ1BUMDlJQ2R6ZEhKcGJtY25JSHg4SUhCeVpYWlVlWEJsSUQwOVBTQW5iblZ0WW1WeUp5a2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlDaHVaWGgwVkhsd1pTQTlQVDBnSjNOMGNtbHVaeWNnZkh3Z2JtVjRkRlI1Y0dVZ1BUMDlJQ2R1ZFcxaVpYSW5LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2FXWWdLRzVsZUhSVWVYQmxJRDA5UFNBbmIySnFaV04wSnlBbUpseHVJQ0FnSUNBZ0lDQWdJSEJ5WlhaRmJHVnRaVzUwTG5SNWNHVWdQVDA5SUc1bGVIUkZiR1Z0Wlc1MExuUjVjR1VnSmlaY2JpQWdJQ0FnSUNBZ0lDQndjbVYyUld4bGJXVnVkQzVyWlhrZ1BUMDlJRzVsZUhSRmJHVnRaVzUwTG10bGVTa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2IzZHVaWEp6VFdGMFkyZ2dQU0J3Y21WMlJXeGxiV1Z1ZEM1ZmIzZHVaWElnUFQwOUlHNWxlSFJGYkdWdFpXNTBMbDl2ZDI1bGNqdGNiaUFnSUNBZ0lDQWdkbUZ5SUhCeVpYWk9ZVzFsSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnZG1GeUlHNWxlSFJPWVcxbElEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2RtRnlJRzVsZUhSRWFYTndiR0Y1VG1GdFpTQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb0lXOTNibVZ5YzAxaGRHTm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY0hKbGRrVnNaVzFsYm5RdVgyOTNibVZ5SUNFOUlHNTFiR3dnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2NtVjJSV3hsYldWdWRDNWZiM2R1WlhJdVoyVjBVSFZpYkdsalNXNXpkR0Z1WTJVb0tTQWhQU0J1ZFd4c0lDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjSEpsZGtWc1pXMWxiblF1WDI5M2JtVnlMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2t1WTI5dWMzUnlkV04wYjNJZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2NtVjJUbUZ0WlNBOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NISmxka1ZzWlcxbGJuUXVYMjkzYm1WeUxtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDa3VZMjl1YzNSeWRXTjBiM0l1WkdsemNHeGhlVTVoYldVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRFVnNaVzFsYm5RdVgyOTNibVZ5SUNFOUlHNTFiR3dnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBSV3hsYldWdWRDNWZiM2R1WlhJdVoyVjBVSFZpYkdsalNXNXpkR0Z1WTJVb0tTQWhQU0J1ZFd4c0lDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdibVY0ZEVWc1pXMWxiblF1WDI5M2JtVnlMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2t1WTI5dWMzUnlkV04wYjNJZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBUbUZ0WlNBOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRVZzWlcxbGJuUXVYMjkzYm1WeUxtZGxkRkIxWW14cFkwbHVjM1JoYm1ObEtDa3VZMjl1YzNSeWRXTjBiM0l1WkdsemNHeGhlVTVoYldVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRFVnNaVzFsYm5RdWRIbHdaU0FoUFNCdWRXeHNJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFVnNaVzFsYm5RdWRIbHdaUzVrYVhOd2JHRjVUbUZ0WlNBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUc1bGVIUkVhWE53YkdGNVRtRnRaU0E5SUc1bGVIUkZiR1Z0Wlc1MExuUjVjR1V1WkdsemNHeGhlVTVoYldVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYm1WNGRFVnNaVzFsYm5RdWRIbHdaU0FoUFNCdWRXeHNJQ1ltSUhSNWNHVnZaaUJ1WlhoMFJXeGxiV1Z1ZEM1MGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBSR2x6Y0d4aGVVNWhiV1VnUFNCdVpYaDBSV3hsYldWdWRDNTBlWEJsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnVaWGgwUld4bGJXVnVkQzUwZVhCbElDRTlQU0FuYzNSeWFXNW5KeUI4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc1bGVIUkZiR1Z0Wlc1MExuUjVjR1VnUFQwOUlDZHBibkIxZENjZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwUld4bGJXVnVkQzUwZVhCbElEMDlQU0FuZEdWNGRHRnlaV0VuS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDZ29jSEpsZGtWc1pXMWxiblF1WDI5M2JtVnlJQ0U5SUc1MWJHd2dKaVpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCeVpYWkZiR1Z0Wlc1MExsOXZkMjVsY2k1ZmFYTlBkMjVsY2s1bFkyVnpjMkZ5ZVNBOVBUMGdabUZzYzJVcElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FvYm1WNGRFVnNaVzFsYm5RdVgyOTNibVZ5SUNFOUlHNTFiR3dnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFJGYkdWdFpXNTBMbDl2ZDI1bGNpNWZhWE5QZDI1bGNrNWxZMlZ6YzJGeWVTQTlQVDBnWm1Gc2MyVXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIQnlaWFpGYkdWdFpXNTBMbDl2ZDI1bGNpQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J3Y21WMlJXeGxiV1Z1ZEM1ZmIzZHVaWEl1WDJselQzZHVaWEpPWldObGMzTmhjbmtnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JtVjRkRVZzWlcxbGJuUXVYMjkzYm1WeUlDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhSRmJHVnRaVzUwTGw5dmQyNWxjaTVmYVhOUGQyNWxjazVsWTJWemMyRnllU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5QQ1Z6SUM4K0lHbHpJR0psYVc1bklISmxibVJsY21Wa0lHSjVJR0p2ZEdnZ0pYTWdZVzVrSUNWeklIVnphVzVuSUhSb1pTQnpZVzFsSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKMnRsZVNBb0pYTXBJR2x1SUhSb1pTQnpZVzFsSUhCc1lXTmxMaUJEZFhKeVpXNTBiSGtzSUhSb2FYTWdiV1ZoYm5NZ2RHaGhkQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDZDBhR1Y1SUdSdmJseGNKM1FnY0hKbGMyVnlkbVVnYzNSaGRHVXVJRlJvYVhNZ1ltVm9ZWFpwYjNJZ2MyaHZkV3hrSUdKbElIWmxjbmtnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5jbUZ5WlNCemJ5QjNaVnhjSjNKbElHTnZibk5wWkdWeWFXNW5JR1JsY0hKbFkyRjBhVzVuSUdsMExpQlFiR1ZoYzJVZ1kyOXVkR0ZqZENBbklDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2QwYUdVZ1VtVmhZM1FnZEdWaGJTQmhibVFnWlhod2JHRnBiaUI1YjNWeUlIVnpaU0JqWVhObElITnZJSFJvWVhRZ2QyVWdZMkZ1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKM1JoYTJVZ2RHaGhkQ0JwYm5SdklHTnZibk5wWkdWeVlYUnBiMjR1Snl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFJFYVhOd2JHRjVUbUZ0WlNCOGZDQW5WVzVyYm05M2JpQkRiMjF3YjI1bGJuUW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0hKbGRrNWhiV1VnZkh3Z0oxdFZibXR1YjNkdVhTY3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFRtRnRaU0I4ZkNBblcxVnVhMjV2ZDI1ZEp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJ5WlhaRmJHVnRaVzUwTG10bGVWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdiM2R1WlhKelRXRjBZMmc3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNGdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JuMWNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0J6YUc5MWJHUlZjR1JoZEdWU1pXRmpkRU52YlhCdmJtVnVkRHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHRvQXJyYXlcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5LWxpa2Ugb2JqZWN0cyB0byBhcnJheXMuXG4gKlxuICogVGhpcyBBUEkgYXNzdW1lcyB0aGUgY2FsbGVyIGtub3dzIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YSB0eXBlLiBGb3IgbGVzc1xuICogd2VsbCBkZWZpbmVkIGlucHV0cyB1c2UgY3JlYXRlQXJyYXlGcm9tTWl4ZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb258ZmlsZWxpc3R9IG9ialxuICogQHJldHVybiB7YXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7XG4gIHZhciBsZW5ndGggPSBvYmoubGVuZ3RoO1xuXG4gIC8vIFNvbWUgYnJvd3NlIGJ1aWx0aW4gb2JqZWN0cyBjYW4gcmVwb3J0IHR5cGVvZiAnZnVuY3Rpb24nIChlLmcuIE5vZGVMaXN0IGluXG4gIC8vIG9sZCB2ZXJzaW9ucyBvZiBTYWZhcmkpLlxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICFBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgICAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyksXG4gICAgJ3RvQXJyYXk6IEFycmF5LWxpa2Ugb2JqZWN0IGV4cGVjdGVkJ1xuICApIDogaW52YXJpYW50KCFBcnJheS5pc0FycmF5KG9iaikgJiZcbiAgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpKSk7XG5cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICB0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJyxcbiAgICAndG9BcnJheTogT2JqZWN0IG5lZWRzIGEgbGVuZ3RoIHByb3BlcnR5J1xuICApIDogaW52YXJpYW50KHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInKSk7XG5cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBsZW5ndGggPT09IDAgfHxcbiAgICAobGVuZ3RoIC0gMSkgaW4gb2JqLFxuICAgICd0b0FycmF5OiBPYmplY3Qgc2hvdWxkIGhhdmUga2V5cyBmb3IgaW5kaWNlcydcbiAgKSA6IGludmFyaWFudChsZW5ndGggPT09IDAgfHxcbiAgKGxlbmd0aCAtIDEpIGluIG9iaikpO1xuXG4gIC8vIE9sZCBJRSBkb2Vzbid0IGdpdmUgY29sbGVjdGlvbnMgYWNjZXNzIHRvIGhhc093blByb3BlcnR5LiBBc3N1bWUgaW5wdXRzXG4gIC8vIHdpdGhvdXQgbWV0aG9kIHdpbGwgdGhyb3cgZHVyaW5nIHRoZSBzbGljZSBjYWxsIGFuZCBza2lwIHN0cmFpZ2h0IHRvIHRoZVxuICAvLyBmYWxsYmFjay5cbiAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJRSA8IDkgZG9lcyBub3Qgc3VwcG9ydCBBcnJheSNzbGljZSBvbiBjb2xsZWN0aW9ucyBvYmplY3RzXG4gICAgfVxuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGNvcHlpbmcga2V5IGJ5IGtleS4gVGhpcyBhc3N1bWVzIGFsbCBrZXlzIGhhdmUgYSB2YWx1ZSxcbiAgLy8gc28gd2lsbCBub3QgcHJlc2VydmUgc3BhcnNlbHkgcG9wdWxhdGVkIGlucHV0cy5cbiAgdmFyIHJldCA9IEFycmF5KGxlbmd0aCk7XG4gIGZvciAodmFyIGlpID0gMDsgaWkgPCBsZW5ndGg7IGlpKyspIHtcbiAgICByZXRbaWldID0gb2JqW2lpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvQXJyYXk7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZkRzlCY25KaGVTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREUwTFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnZEc5QmNuSmhlVnh1SUNvZ1FIUjVjR1ZqYUdWamEzTmNiaUFxTDF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNHZLaXBjYmlBcUlFTnZiblpsY25RZ1lYSnlZWGt0YkdsclpTQnZZbXBsWTNSeklIUnZJR0Z5Y21GNWN5NWNiaUFxWEc0Z0tpQlVhR2x6SUVGUVNTQmhjM04xYldWeklIUm9aU0JqWVd4c1pYSWdhMjV2ZDNNZ2RHaGxJR052Ym5SbGJuUnpJRzltSUhSb1pTQmtZWFJoSUhSNWNHVXVJRVp2Y2lCc1pYTnpYRzRnS2lCM1pXeHNJR1JsWm1sdVpXUWdhVzV3ZFhSeklIVnpaU0JqY21WaGRHVkJjbkpoZVVaeWIyMU5hWGhsWkM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSHhtZFc1amRHbHZibnhtYVd4bGJHbHpkSDBnYjJKcVhHNGdLaUJBY21WMGRYSnVJSHRoY25KaGVYMWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2RHOUJjbkpoZVNodlltb3BJSHRjYmlBZ2RtRnlJR3hsYm1kMGFDQTlJRzlpYWk1c1pXNW5kR2c3WEc1Y2JpQWdMeThnVTI5dFpTQmljbTkzYzJVZ1luVnBiSFJwYmlCdlltcGxZM1J6SUdOaGJpQnlaWEJ2Y25RZ2RIbHdaVzltSUNkbWRXNWpkR2x2YmljZ0tHVXVaeTRnVG05a1pVeHBjM1FnYVc1Y2JpQWdMeThnYjJ4a0lIWmxjbk5wYjI1eklHOW1JRk5oWm1GeWFTa3VYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJVUZ5Y21GNUxtbHpRWEp5WVhrb2IySnFLU0FtSmx4dUlDQWdJQ2gwZVhCbGIyWWdiMkpxSUQwOVBTQW5iMkpxWldOMEp5QjhmQ0IwZVhCbGIyWWdiMkpxSUQwOVBTQW5ablZ1WTNScGIyNG5LU3hjYmlBZ0lDQW5kRzlCY25KaGVUb2dRWEp5WVhrdGJHbHJaU0J2WW1wbFkzUWdaWGh3WldOMFpXUW5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9JVUZ5Y21GNUxtbHpRWEp5WVhrb2IySnFLU0FtSmx4dUlDQW9kSGx3Wlc5bUlHOWlhaUE5UFQwZ0oyOWlhbVZqZENjZ2ZId2dkSGx3Wlc5bUlHOWlhaUE5UFQwZ0oyWjFibU4wYVc5dUp5a3BLVHRjYmx4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUhSNWNHVnZaaUJzWlc1bmRHZ2dQVDA5SUNkdWRXMWlaWEluTEZ4dUlDQWdJQ2QwYjBGeWNtRjVPaUJQWW1wbFkzUWdibVZsWkhNZ1lTQnNaVzVuZEdnZ2NISnZjR1Z5ZEhrblhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2RIbHdaVzltSUd4bGJtZDBhQ0E5UFQwZ0oyNTFiV0psY2ljcEtUdGNibHh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJR3hsYm1kMGFDQTlQVDBnTUNCOGZGeHVJQ0FnSUNoc1pXNW5kR2dnTFNBeEtTQnBiaUJ2WW1vc1hHNGdJQ0FnSjNSdlFYSnlZWGs2SUU5aWFtVmpkQ0J6YUc5MWJHUWdhR0YyWlNCclpYbHpJR1p2Y2lCcGJtUnBZMlZ6SjF4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0d4bGJtZDBhQ0E5UFQwZ01DQjhmRnh1SUNBb2JHVnVaM1JvSUMwZ01Ta2dhVzRnYjJKcUtTazdYRzVjYmlBZ0x5OGdUMnhrSUVsRklHUnZaWE51SjNRZ1oybDJaU0JqYjJ4c1pXTjBhVzl1Y3lCaFkyTmxjM01nZEc4Z2FHRnpUM2R1VUhKdmNHVnlkSGt1SUVGemMzVnRaU0JwYm5CMWRITmNiaUFnTHk4Z2QybDBhRzkxZENCdFpYUm9iMlFnZDJsc2JDQjBhSEp2ZHlCa2RYSnBibWNnZEdobElITnNhV05sSUdOaGJHd2dZVzVrSUhOcmFYQWdjM1J5WVdsbmFIUWdkRzhnZEdobFhHNGdJQzh2SUdaaGJHeGlZV05yTGx4dUlDQnBaaUFvYjJKcUxtaGhjMDkzYmxCeWIzQmxjblI1S1NCN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCQmNuSmhlUzV3Y205MGIzUjVjR1V1YzJ4cFkyVXVZMkZzYkNodlltb3BPMXh1SUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQzh2SUVsRklEd2dPU0JrYjJWeklHNXZkQ0J6ZFhCd2IzSjBJRUZ5Y21GNUkzTnNhV05sSUc5dUlHTnZiR3hsWTNScGIyNXpJRzlpYW1WamRITmNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQXZMeUJHWVd4c0lHSmhZMnNnZEc4Z1kyOXdlV2x1WnlCclpYa2dZbmtnYTJWNUxpQlVhR2x6SUdGemMzVnRaWE1nWVd4c0lHdGxlWE1nYUdGMlpTQmhJSFpoYkhWbExGeHVJQ0F2THlCemJ5QjNhV3hzSUc1dmRDQndjbVZ6WlhKMlpTQnpjR0Z5YzJWc2VTQndiM0IxYkdGMFpXUWdhVzV3ZFhSekxseHVJQ0IyWVhJZ2NtVjBJRDBnUVhKeVlYa29iR1Z1WjNSb0tUdGNiaUFnWm05eUlDaDJZWElnYVdrZ1BTQXdPeUJwYVNBOElHeGxibWQwYURzZ2FXa3JLeWtnZTF4dUlDQWdJSEpsZEZ0cGFWMGdQU0J2WW1wYmFXbGRPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnlaWFE3WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdkRzlCY25KaGVUdGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgdHJhdmVyc2VBbGxDaGlsZHJlblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEZyYWdtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RGcmFnbWVudFwiKTtcbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzXCIpO1xuXG52YXIgZ2V0SXRlcmF0b3JGbiA9IHJlcXVpcmUoXCIuL2dldEl0ZXJhdG9yRm5cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgU0VQQVJBVE9SID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuU0VQQVJBVE9SO1xudmFyIFNVQlNFUEFSQVRPUiA9ICc6JztcblxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZXJMb29rdXAgPSB7XG4gICc9JzogJz0wJyxcbiAgJy4nOiAnPTEnLFxuICAnOic6ICc9Midcbn07XG5cbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9bPS46XS9nO1xuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1c2VyUHJvdmlkZWRLZXlFc2NhcGVyKG1hdGNoKSB7XG4gIHJldHVybiB1c2VyUHJvdmlkZWRLZXlFc2NhcGVyTG9va3VwW21hdGNoXTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnRLZXkoY29tcG9uZW50LCBpbmRleCkge1xuICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC5rZXkgIT0gbnVsbCkge1xuICAgIC8vIEV4cGxpY2l0IGtleVxuICAgIHJldHVybiB3cmFwVXNlclByb3ZpZGVkS2V5KGNvbXBvbmVudC5rZXkpO1xuICB9XG4gIC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbi8qKlxuICogRXNjYXBlIGEgY29tcG9uZW50IGtleSBzbyB0aGF0IGl0IGlzIHNhZmUgdG8gdXNlIGluIGEgcmVhY3RpZC5cbiAqXG4gKiBAcGFyYW0geyp9IGtleSBDb21wb25lbnQga2V5IHRvIGJlIGVzY2FwZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEFuIGVzY2FwZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkge1xuICByZXR1cm4gKCcnICsgdGV4dCkucmVwbGFjZShcbiAgICB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCxcbiAgICB1c2VyUHJvdmlkZWRLZXlFc2NhcGVyXG4gICk7XG59XG5cbi8qKlxuICogV3JhcCBhIGBrZXlgIHZhbHVlIGV4cGxpY2l0bHkgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbVxuICogaW1wbGljaXRseS1nZW5lcmF0ZWQga2V5cyBnZW5lcmF0ZWQgYnkgYSBjb21wb25lbnQncyBpbmRleCBpbiBpdHMgcGFyZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVmFsdWUgb2YgYSB1c2VyLXByb3ZpZGVkIGBrZXlgIGF0dHJpYnV0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB3cmFwVXNlclByb3ZpZGVkS2V5KGtleSkge1xuICByZXR1cm4gJyQnICsgZXNjYXBlVXNlclByb3ZpZGVkS2V5KGtleSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuXG4gKiBAcGFyYW0geyFudW1iZXJ9IGluZGV4U29GYXIgTnVtYmVyIG9mIGNoaWxkcmVuIGVuY291bnRlcmVkIHVudGlsIHRoaXMgcG9pbnQuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsXG4gKiBwcm9jZXNzLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKFxuICBjaGlsZHJlbixcbiAgbmFtZVNvRmFyLFxuICBpbmRleFNvRmFyLFxuICBjYWxsYmFjayxcbiAgdHJhdmVyc2VDb250ZXh0XG4pIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCB8fFxuICAgICAgdHlwZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgIHR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgY2FsbGJhY2soXG4gICAgICB0cmF2ZXJzZUNvbnRleHQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5XG4gICAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzLlxuICAgICAgbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZHJlbiwgMCkgOiBuYW1lU29GYXIsXG4gICAgICBpbmRleFNvRmFyXG4gICAgKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZCwgbmV4dE5hbWUsIG5leHRJbmRleDtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIG5leHROYW1lID0gKFxuICAgICAgICAobmFtZVNvRmFyICE9PSAnJyA/IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUiA6IFNFUEFSQVRPUikgK1xuICAgICAgICBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGkpXG4gICAgICApO1xuICAgICAgbmV4dEluZGV4ID0gaW5kZXhTb0ZhciArIHN1YnRyZWVDb3VudDtcbiAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIG5leHROYW1lLFxuICAgICAgICBuZXh0SW5kZXgsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICB0cmF2ZXJzZUNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG4gICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChjaGlsZHJlbik7XG4gICAgICB2YXIgc3RlcDtcbiAgICAgIGlmIChpdGVyYXRvckZuICE9PSBjaGlsZHJlbi5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpaSA9IDA7XG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgbmV4dE5hbWUgPSAoXG4gICAgICAgICAgICAobmFtZVNvRmFyICE9PSAnJyA/IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUiA6IFNFUEFSQVRPUikgK1xuICAgICAgICAgICAgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpaSsrKVxuICAgICAgICAgICk7XG4gICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXhTb0ZhciArIHN1YnRyZWVDb3VudDtcbiAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoXG4gICAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICAgIG5leHROYW1lLFxuICAgICAgICAgICAgbmV4dEluZGV4LFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICB0cmF2ZXJzZUNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzLFxuICAgICAgICAgICAgJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIEl0IGlzIGFuICcgK1xuICAgICAgICAgICAgJ2V4cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgbWlnaHQgYmUgcmVtb3ZlZC4gQ29udmVydCBpdCB0byBhICcgK1xuICAgICAgICAgICAgJ3NlcXVlbmNlIC8gaXRlcmFibGUgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLidcbiAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgY2hpbGQgPSBlbnRyeVsxXTtcbiAgICAgICAgICAgIG5leHROYW1lID0gKFxuICAgICAgICAgICAgICAobmFtZVNvRmFyICE9PSAnJyA/IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUiA6IFNFUEFSQVRPUikgK1xuICAgICAgICAgICAgICB3cmFwVXNlclByb3ZpZGVkS2V5KGVudHJ5WzBdKSArIFNVQlNFUEFSQVRPUiArXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudEtleShjaGlsZCwgMClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleFNvRmFyICsgc3VidHJlZUNvdW50O1xuICAgICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKFxuICAgICAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICAgICAgbmV4dE5hbWUsXG4gICAgICAgICAgICAgIG5leHRJbmRleCxcbiAgICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICAgIHRyYXZlcnNlQ29udGV4dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBjaGlsZHJlbi5ub2RlVHlwZSAhPT0gMSxcbiAgICAgICAgJ3RyYXZlcnNlQWxsQ2hpbGRyZW4oLi4uKTogRW5jb3VudGVyZWQgYW4gaW52YWxpZCBjaGlsZDsgRE9NICcgK1xuICAgICAgICAnZWxlbWVudHMgYXJlIG5vdCB2YWxpZCBjaGlsZHJlbiBvZiBSZWFjdCBjb21wb25lbnRzLidcbiAgICAgICkgOiBpbnZhcmlhbnQoY2hpbGRyZW4ubm9kZVR5cGUgIT09IDEpKTtcbiAgICAgIHZhciBmcmFnbWVudCA9IFJlYWN0RnJhZ21lbnQuZXh0cmFjdChjaGlsZHJlbik7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gZnJhZ21lbnQpIHtcbiAgICAgICAgaWYgKGZyYWdtZW50Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBjaGlsZCA9IGZyYWdtZW50W2tleV07XG4gICAgICAgICAgbmV4dE5hbWUgPSAoXG4gICAgICAgICAgICAobmFtZVNvRmFyICE9PSAnJyA/IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUiA6IFNFUEFSQVRPUikgK1xuICAgICAgICAgICAgd3JhcFVzZXJQcm92aWRlZEtleShrZXkpICsgU1VCU0VQQVJBVE9SICtcbiAgICAgICAgICAgIGdldENvbXBvbmVudEtleShjaGlsZCwgMClcbiAgICAgICAgICApO1xuICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4U29GYXIgKyBzdWJ0cmVlQ291bnQ7XG4gICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKFxuICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICBuZXh0TmFtZSxcbiAgICAgICAgICAgIG5leHRJbmRleCxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgdHJhdmVyc2VDb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCwgYnV0XG4gKiBtaWdodCBhbHNvIGJlIHNwZWNpZmllZCB0aHJvdWdoIGF0dHJpYnV0ZXM6XG4gKlxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmNoaWxkcmVuLCAuLi4pYFxuICogLSBgdHJhdmVyc2VBbGxDaGlsZHJlbih0aGlzLnByb3BzLmxlZnRQYW5lbENoaWxkcmVuLCAuLi4pYFxuICpcbiAqIFRoZSBgdHJhdmVyc2VDb250ZXh0YCBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZVxuICogZW50aXJlIHRyYXZlcnNhbC4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYWNjdW11bGF0aW9ucyBvciBhbnl0aGluZyBlbHNlIHRoYXRcbiAqIHRoZSBjYWxsYmFjayBtaWdodCBmaW5kIHJlbGV2YW50LlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgb2JqZWN0LlxuICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIFRvIGludm9rZSB1cG9uIHRyYXZlcnNpbmcgZWFjaCBjaGlsZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IGZvciB0cmF2ZXJzYWwuXG4gKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCAnJywgMCwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdHJhdmVyc2VBbGxDaGlsZHJlbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdmRISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wUm5KaFoyMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVaeVlXZHRaVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWeklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkpibk4wWVc1alpVaGhibVJzWlhOY0lpazdYRzVjYm5aaGNpQm5aWFJKZEdWeVlYUnZja1p1SUQwZ2NtVnhkV2x5WlNoY0lpNHZaMlYwU1hSbGNtRjBiM0pHYmx3aUtUdGNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQlRSVkJCVWtGVVQxSWdQU0JTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3k1VFJWQkJVa0ZVVDFJN1hHNTJZWElnVTFWQ1UwVlFRVkpCVkU5U0lEMGdKem9uTzF4dVhHNHZLaXBjYmlBcUlGUlBSRTg2SUZSbGMzUWdkR2hoZENCaElITnBibWRzWlNCamFHbHNaQ0JoYm1RZ1lXNGdZWEp5WVhrZ2QybDBhQ0J2Ym1VZ2FYUmxiU0JvWVhabElIUm9aU0J6WVcxbElHdGxlVnh1SUNvZ2NHRjBkR1Z5Ymk1Y2JpQXFMMXh1WEc1MllYSWdkWE5sY2xCeWIzWnBaR1ZrUzJWNVJYTmpZWEJsY2t4dmIydDFjQ0E5SUh0Y2JpQWdKejBuT2lBblBUQW5MRnh1SUNBbkxpYzZJQ2M5TVNjc1hHNGdJQ2M2SnpvZ0p6MHlKMXh1ZlR0Y2JseHVkbUZ5SUhWelpYSlFjbTkyYVdSbFpFdGxlVVZ6WTJGd1pWSmxaMlY0SUQwZ0wxczlManBkTDJjN1hHNWNiblpoY2lCa2FXUlhZWEp1UVdKdmRYUk5ZWEJ6SUQwZ1ptRnNjMlU3WEc1Y2JtWjFibU4wYVc5dUlIVnpaWEpRY205MmFXUmxaRXRsZVVWelkyRndaWElvYldGMFkyZ3BJSHRjYmlBZ2NtVjBkWEp1SUhWelpYSlFjbTkyYVdSbFpFdGxlVVZ6WTJGd1pYSk1iMjlyZFhCYmJXRjBZMmhkTzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRsYm1WeVlYUmxJR0VnYTJWNUlITjBjbWx1WnlCMGFHRjBJR2xrWlc1MGFXWnBaWE1nWVNCamIyMXdiMjVsYm5RZ2QybDBhR2x1SUdFZ2MyVjBMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdLbjBnWTI5dGNHOXVaVzUwSUVFZ1kyOXRjRzl1Wlc1MElIUm9ZWFFnWTI5MWJHUWdZMjl1ZEdGcGJpQmhJRzFoYm5WaGJDQnJaWGt1WEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ2FXNWtaWGdnU1c1a1pYZ2dkR2hoZENCcGN5QjFjMlZrSUdsbUlHRWdiV0Z1ZFdGc0lHdGxlU0JwY3lCdWIzUWdjSEp2ZG1sa1pXUXVYRzRnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2RsZEVOdmJYQnZibVZ1ZEV0bGVTaGpiMjF3YjI1bGJuUXNJR2x1WkdWNEtTQjdYRzRnSUdsbUlDaGpiMjF3YjI1bGJuUWdKaVlnWTI5dGNHOXVaVzUwTG10bGVTQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0x5OGdSWGh3YkdsamFYUWdhMlY1WEc0Z0lDQWdjbVYwZFhKdUlIZHlZWEJWYzJWeVVISnZkbWxrWldSTFpYa29ZMjl0Y0c5dVpXNTBMbXRsZVNrN1hHNGdJSDFjYmlBZ0x5OGdTVzF3YkdsamFYUWdhMlY1SUdSbGRHVnliV2x1WldRZ1lua2dkR2hsSUdsdVpHVjRJR2x1SUhSb1pTQnpaWFJjYmlBZ2NtVjBkWEp1SUdsdVpHVjRMblJ2VTNSeWFXNW5LRE0yS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJGYzJOaGNHVWdZU0JqYjIxd2IyNWxiblFnYTJWNUlITnZJSFJvWVhRZ2FYUWdhWE1nYzJGbVpTQjBieUIxYzJVZ2FXNGdZU0J5WldGamRHbGtMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdLbjBnYTJWNUlFTnZiWEJ2Ym1WdWRDQnJaWGtnZEc4Z1ltVWdaWE5qWVhCbFpDNWNiaUFxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnUVc0Z1pYTmpZWEJsWkNCemRISnBibWN1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1Z6WTJGd1pWVnpaWEpRY205MmFXUmxaRXRsZVNoMFpYaDBLU0I3WEc0Z0lISmxkSFZ5YmlBb0p5Y2dLeUIwWlhoMEtTNXlaWEJzWVdObEtGeHVJQ0FnSUhWelpYSlFjbTkyYVdSbFpFdGxlVVZ6WTJGd1pWSmxaMlY0TEZ4dUlDQWdJSFZ6WlhKUWNtOTJhV1JsWkV0bGVVVnpZMkZ3WlhKY2JpQWdLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlhjbUZ3SUdFZ1lHdGxlV0FnZG1Gc2RXVWdaWGh3YkdsamFYUnNlU0J3Y205MmFXUmxaQ0JpZVNCMGFHVWdkWE5sY2lCMGJ5QmthWE4wYVc1bmRXbHphQ0JwZENCbWNtOXRYRzRnS2lCcGJYQnNhV05wZEd4NUxXZGxibVZ5WVhSbFpDQnJaWGx6SUdkbGJtVnlZWFJsWkNCaWVTQmhJR052YlhCdmJtVnVkQ2R6SUdsdVpHVjRJR2x1SUdsMGN5QndZWEpsYm5RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUd0bGVTQldZV3gxWlNCdlppQmhJSFZ6WlhJdGNISnZkbWxrWldRZ1lHdGxlV0FnWVhSMGNtbGlkWFJsWEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm1aMWJtTjBhVzl1SUhkeVlYQlZjMlZ5VUhKdmRtbGtaV1JMWlhrb2EyVjVLU0I3WEc0Z0lISmxkSFZ5YmlBbkpDY2dLeUJsYzJOaGNHVlZjMlZ5VUhKdmRtbGtaV1JMWlhrb2EyVjVLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2V6OHFmU0JqYUdsc1pISmxiaUJEYUdsc1pISmxiaUIwY21WbElHTnZiblJoYVc1bGNpNWNiaUFxSUVCd1lYSmhiU0I3SVhOMGNtbHVaMzBnYm1GdFpWTnZSbUZ5SUU1aGJXVWdiMllnZEdobElHdGxlU0J3WVhSb0lITnZJR1poY2k1Y2JpQXFJRUJ3WVhKaGJTQjdJVzUxYldKbGNuMGdhVzVrWlhoVGIwWmhjaUJPZFcxaVpYSWdiMllnWTJocGJHUnlaVzRnWlc1amIzVnVkR1Z5WldRZ2RXNTBhV3dnZEdocGN5QndiMmx1ZEM1Y2JpQXFJRUJ3WVhKaGJTQjdJV1oxYm1OMGFXOXVmU0JqWVd4c1ltRmpheUJEWVd4c1ltRmpheUIwYnlCcGJuWnZhMlVnZDJsMGFDQmxZV05vSUdOb2FXeGtJR1p2ZFc1a0xseHVJQ29nUUhCaGNtRnRJSHMvS24wZ2RISmhkbVZ5YzJWRGIyNTBaWGgwSUZWelpXUWdkRzhnY0dGemN5QnBibVp2Y20xaGRHbHZiaUIwYUhKdmRXZG9iM1YwSUhSb1pTQjBjbUYyWlhKellXeGNiaUFxSUhCeWIyTmxjM011WEc0Z0tpQkFjbVYwZFhKdUlIc2hiblZ0WW1WeWZTQlVhR1VnYm5WdFltVnlJRzltSUdOb2FXeGtjbVZ1SUdsdUlIUm9hWE1nYzNWaWRISmxaUzVjYmlBcUwxeHVablZ1WTNScGIyNGdkSEpoZG1WeWMyVkJiR3hEYUdsc1pISmxia2x0Y0d3b1hHNGdJR05vYVd4a2NtVnVMRnh1SUNCdVlXMWxVMjlHWVhJc1hHNGdJR2x1WkdWNFUyOUdZWElzWEc0Z0lHTmhiR3hpWVdOckxGeHVJQ0IwY21GMlpYSnpaVU52Ym5SbGVIUmNiaWtnZTF4dUlDQjJZWElnZEhsd1pTQTlJSFI1Y0dWdlppQmphR2xzWkhKbGJqdGNibHh1SUNCcFppQW9kSGx3WlNBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NnZkh3Z2RIbHdaU0E5UFQwZ0oySnZiMnhsWVc0bktTQjdYRzRnSUNBZ0x5OGdRV3hzSUc5bUlIUm9aU0JoWW05MlpTQmhjbVVnY0dWeVkyVnBkbVZrSUdGeklHNTFiR3d1WEc0Z0lDQWdZMmhwYkdSeVpXNGdQU0J1ZFd4c08xeHVJQ0I5WEc1Y2JpQWdhV1lnS0dOb2FXeGtjbVZ1SUQwOVBTQnVkV3hzSUh4OFhHNGdJQ0FnSUNCMGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlCOGZGeHVJQ0FnSUNBZ2RIbHdaU0E5UFQwZ0oyNTFiV0psY2ljZ2ZIeGNiaUFnSUNBZ0lGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaGphR2xzWkhKbGJpa3BJSHRjYmlBZ0lDQmpZV3hzWW1GamF5aGNiaUFnSUNBZ0lIUnlZWFpsY25ObFEyOXVkR1Y0ZEN4Y2JpQWdJQ0FnSUdOb2FXeGtjbVZ1TEZ4dUlDQWdJQ0FnTHk4Z1NXWWdhWFFuY3lCMGFHVWdiMjVzZVNCamFHbHNaQ3dnZEhKbFlYUWdkR2hsSUc1aGJXVWdZWE1nYVdZZ2FYUWdkMkZ6SUhkeVlYQndaV1FnYVc0Z1lXNGdZWEp5WVhsY2JpQWdJQ0FnSUM4dklITnZJSFJvWVhRZ2FYUW5jeUJqYjI1emFYTjBaVzUwSUdsbUlIUm9aU0J1ZFcxaVpYSWdiMllnWTJocGJHUnlaVzRnWjNKdmQzTXVYRzRnSUNBZ0lDQnVZVzFsVTI5R1lYSWdQVDA5SUNjbklEOGdVMFZRUVZKQlZFOVNJQ3NnWjJWMFEyOXRjRzl1Wlc1MFMyVjVLR05vYVd4a2NtVnVMQ0F3S1NBNklHNWhiV1ZUYjBaaGNpeGNiaUFnSUNBZ0lHbHVaR1Y0VTI5R1lYSmNiaUFnSUNBcE8xeHVJQ0FnSUhKbGRIVnliaUF4TzF4dUlDQjlYRzVjYmlBZ2RtRnlJR05vYVd4a0xDQnVaWGgwVG1GdFpTd2dibVY0ZEVsdVpHVjRPMXh1SUNCMllYSWdjM1ZpZEhKbFpVTnZkVzUwSUQwZ01Ec2dMeThnUTI5MWJuUWdiMllnWTJocGJHUnlaVzRnWm05MWJtUWdhVzRnZEdobElHTjFjbkpsYm5RZ2MzVmlkSEpsWlM1Y2JseHVJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2hqYUdsc1pISmxiaWtwSUh0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdOb2FXeGtjbVZ1TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQmphR2xzWkNBOUlHTm9hV3hrY21WdVcybGRPMXh1SUNBZ0lDQWdibVY0ZEU1aGJXVWdQU0FvWEc0Z0lDQWdJQ0FnSUNodVlXMWxVMjlHWVhJZ0lUMDlJQ2NuSUQ4Z2JtRnRaVk52Um1GeUlDc2dVMVZDVTBWUVFWSkJWRTlTSURvZ1UwVlFRVkpCVkU5U0tTQXJYRzRnSUNBZ0lDQWdJR2RsZEVOdmJYQnZibVZ1ZEV0bGVTaGphR2xzWkN3Z2FTbGNiaUFnSUNBZ0lDazdYRzRnSUNBZ0lDQnVaWGgwU1c1a1pYZ2dQU0JwYm1SbGVGTnZSbUZ5SUNzZ2MzVmlkSEpsWlVOdmRXNTBPMXh1SUNBZ0lDQWdjM1ZpZEhKbFpVTnZkVzUwSUNzOUlIUnlZWFpsY25ObFFXeHNRMmhwYkdSeVpXNUpiWEJzS0Z4dUlDQWdJQ0FnSUNCamFHbHNaQ3hjYmlBZ0lDQWdJQ0FnYm1WNGRFNWhiV1VzWEc0Z0lDQWdJQ0FnSUc1bGVIUkpibVJsZUN4Y2JpQWdJQ0FnSUNBZ1kyRnNiR0poWTJzc1hHNGdJQ0FnSUNBZ0lIUnlZWFpsY25ObFEyOXVkR1Y0ZEZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnZG1GeUlHbDBaWEpoZEc5eVJtNGdQU0JuWlhSSmRHVnlZWFJ2Y2tadUtHTm9hV3hrY21WdUtUdGNiaUFnSUNCcFppQW9hWFJsY21GMGIzSkdiaWtnZTF4dUlDQWdJQ0FnZG1GeUlHbDBaWEpoZEc5eUlEMGdhWFJsY21GMGIzSkdiaTVqWVd4c0tHTm9hV3hrY21WdUtUdGNiaUFnSUNBZ0lIWmhjaUJ6ZEdWd08xeHVJQ0FnSUNBZ2FXWWdLR2wwWlhKaGRHOXlSbTRnSVQwOUlHTm9hV3hrY21WdUxtVnVkSEpwWlhNcElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdscElEMGdNRHRjYmlBZ0lDQWdJQ0FnZDJocGJHVWdLQ0VvYzNSbGNDQTlJR2wwWlhKaGRHOXlMbTVsZUhRb0tTa3VaRzl1WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05vYVd4a0lEMGdjM1JsY0M1MllXeDFaVHRjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBUbUZ0WlNBOUlDaGNiaUFnSUNBZ0lDQWdJQ0FnSUNodVlXMWxVMjlHWVhJZ0lUMDlJQ2NuSUQ4Z2JtRnRaVk52Um1GeUlDc2dVMVZDVTBWUVFWSkJWRTlTSURvZ1UwVlFRVkpCVkU5U0tTQXJYRzRnSUNBZ0lDQWdJQ0FnSUNCblpYUkRiMjF3YjI1bGJuUkxaWGtvWTJocGJHUXNJR2xwS3lzcFhHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBTVzVrWlhnZ1BTQnBibVJsZUZOdlJtRnlJQ3NnYzNWaWRISmxaVU52ZFc1ME8xeHVJQ0FnSUNBZ0lDQWdJSE4xWW5SeVpXVkRiM1Z1ZENBclBTQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVTVzF3YkNoY2JpQWdJQ0FnSUNBZ0lDQWdJR05vYVd4a0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFNWhiV1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnVaWGgwU1c1a1pYZ3NYRzRnSUNBZ0lDQWdJQ0FnSUNCallXeHNZbUZqYXl4Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ5WVhabGNuTmxRMjl1ZEdWNGRGeHVJQ0FnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lDQWdJR1JwWkZkaGNtNUJZbTkxZEUxaGNITXNYRzRnSUNBZ0lDQWdJQ0FnSUNBblZYTnBibWNnVFdGd2N5QmhjeUJqYUdsc1pISmxiaUJwY3lCdWIzUWdlV1YwSUdaMWJHeDVJSE4xY0hCdmNuUmxaQzRnU1hRZ2FYTWdZVzRnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FuWlhod1pYSnBiV1Z1ZEdGc0lHWmxZWFIxY21VZ2RHaGhkQ0J0YVdkb2RDQmlaU0J5WlcxdmRtVmtMaUJEYjI1MlpYSjBJR2wwSUhSdklHRWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5jMlZ4ZFdWdVkyVWdMeUJwZEdWeVlXSnNaU0J2WmlCclpYbGxaQ0JTWldGamRFVnNaVzFsYm5SeklHbHVjM1JsWVdRdUoxeHVJQ0FnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnSUNCa2FXUlhZWEp1UVdKdmRYUk5ZWEJ6SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBdkx5QkpkR1Z5WVhSdmNpQjNhV3hzSUhCeWIzWnBaR1VnWlc1MGNua2dXMnNzZGwwZ2RIVndiR1Z6SUhKaGRHaGxjaUIwYUdGdUlIWmhiSFZsY3k1Y2JpQWdJQ0FnSUNBZ2QyaHBiR1VnS0NFb2MzUmxjQ0E5SUdsMFpYSmhkRzl5TG01bGVIUW9LU2t1Wkc5dVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhaaGNpQmxiblJ5ZVNBOUlITjBaWEF1ZG1Gc2RXVTdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHVnVkSEo1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYUdsc1pDQTlJR1Z1ZEhKNVd6RmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRTVoYldVZ1BTQW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDaHVZVzFsVTI5R1lYSWdJVDA5SUNjbklEOGdibUZ0WlZOdlJtRnlJQ3NnVTFWQ1UwVlFRVkpCVkU5U0lEb2dVMFZRUVZKQlZFOVNLU0FyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSGR5WVhCVmMyVnlVSEp2ZG1sa1pXUkxaWGtvWlc1MGNubGJNRjBwSUNzZ1UxVkNVMFZRUVZKQlZFOVNJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdaMlYwUTI5dGNHOXVaVzUwUzJWNUtHTm9hV3hrTENBd0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVsZUhSSmJtUmxlQ0E5SUdsdVpHVjRVMjlHWVhJZ0t5QnpkV0owY21WbFEyOTFiblE3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkV0owY21WbFEyOTFiblFnS3owZ2RISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJrbHRjR3dvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR05vYVd4a0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFbHVaR1Y0TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVd4c1ltRmpheXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkSEpoZG1WeWMyVkRiMjUwWlhoMFhHNGdJQ0FnSUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3WlNBOVBUMGdKMjlpYW1WamRDY3BJSHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJR05vYVd4a2NtVnVMbTV2WkdWVWVYQmxJQ0U5UFNBeExGeHVJQ0FnSUNBZ0lDQW5kSEpoZG1WeWMyVkJiR3hEYUdsc1pISmxiaWd1TGk0cE9pQkZibU52ZFc1MFpYSmxaQ0JoYmlCcGJuWmhiR2xrSUdOb2FXeGtPeUJFVDAwZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RsYkdWdFpXNTBjeUJoY21VZ2JtOTBJSFpoYkdsa0lHTm9hV3hrY21WdUlHOW1JRkpsWVdOMElHTnZiWEJ2Ym1WdWRITXVKMXh1SUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoamFHbHNaSEpsYmk1dWIyUmxWSGx3WlNBaFBUMGdNU2twTzF4dUlDQWdJQ0FnZG1GeUlHWnlZV2R0Wlc1MElEMGdVbVZoWTNSR2NtRm5iV1Z1ZEM1bGVIUnlZV04wS0dOb2FXeGtjbVZ1S1R0Y2JpQWdJQ0FnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUJtY21GbmJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9abkpoWjIxbGJuUXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2EyVjVLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTm9hV3hrSUQwZ1puSmhaMjFsYm5SYmEyVjVYVHRjYmlBZ0lDQWdJQ0FnSUNCdVpYaDBUbUZ0WlNBOUlDaGNiaUFnSUNBZ0lDQWdJQ0FnSUNodVlXMWxVMjlHWVhJZ0lUMDlJQ2NuSUQ4Z2JtRnRaVk52Um1GeUlDc2dVMVZDVTBWUVFWSkJWRTlTSURvZ1UwVlFRVkpCVkU5U0tTQXJYRzRnSUNBZ0lDQWdJQ0FnSUNCM2NtRndWWE5sY2xCeWIzWnBaR1ZrUzJWNUtHdGxlU2tnS3lCVFZVSlRSVkJCVWtGVVQxSWdLMXh1SUNBZ0lDQWdJQ0FnSUNBZ1oyVjBRMjl0Y0c5dVpXNTBTMlY1S0dOb2FXeGtMQ0F3S1Z4dUlDQWdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQWdJQ0FnYm1WNGRFbHVaR1Y0SUQwZ2FXNWtaWGhUYjBaaGNpQXJJSE4xWW5SeVpXVkRiM1Z1ZER0Y2JpQWdJQ0FnSUNBZ0lDQnpkV0owY21WbFEyOTFiblFnS3owZ2RISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJrbHRjR3dvWEc0Z0lDQWdJQ0FnSUNBZ0lDQmphR2xzWkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVsZUhST1lXMWxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRWx1WkdWNExGeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGc2JHSmhZMnNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBjbUYyWlhKelpVTnZiblJsZUhSY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJSE4xWW5SeVpXVkRiM1Z1ZER0Y2JuMWNibHh1THlvcVhHNGdLaUJVY21GMlpYSnpaWE1nWTJocGJHUnlaVzRnZEdoaGRDQmhjbVVnZEhsd2FXTmhiR3g1SUhOd1pXTnBabWxsWkNCaGN5QmdjSEp2Y0hNdVkyaHBiR1J5Wlc1Z0xDQmlkWFJjYmlBcUlHMXBaMmgwSUdGc2MyOGdZbVVnYzNCbFkybG1hV1ZrSUhSb2NtOTFaMmdnWVhSMGNtbGlkWFJsY3pwY2JpQXFYRzRnS2lBdElHQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVLSFJvYVhNdWNISnZjSE11WTJocGJHUnlaVzRzSUM0dUxpbGdYRzRnS2lBdElHQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVLSFJvYVhNdWNISnZjSE11YkdWbWRGQmhibVZzUTJocGJHUnlaVzRzSUM0dUxpbGdYRzRnS2x4dUlDb2dWR2hsSUdCMGNtRjJaWEp6WlVOdmJuUmxlSFJnSUdseklHRnVJRzl3ZEdsdmJtRnNJR0Z5WjNWdFpXNTBJSFJvWVhRZ2FYTWdjR0Z6YzJWa0lIUm9jbTkxWjJnZ2RHaGxYRzRnS2lCbGJuUnBjbVVnZEhKaGRtVnljMkZzTGlCSmRDQmpZVzRnWW1VZ2RYTmxaQ0IwYnlCemRHOXlaU0JoWTJOMWJYVnNZWFJwYjI1eklHOXlJR0Z1ZVhSb2FXNW5JR1ZzYzJVZ2RHaGhkRnh1SUNvZ2RHaGxJR05oYkd4aVlXTnJJRzFwWjJoMElHWnBibVFnY21Wc1pYWmhiblF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHMvS24wZ1kyaHBiR1J5Wlc0Z1EyaHBiR1J5Wlc0Z2RISmxaU0J2WW1wbFkzUXVYRzRnS2lCQWNHRnlZVzBnZXlGbWRXNWpkR2x2Ym4wZ1kyRnNiR0poWTJzZ1ZHOGdhVzUyYjJ0bElIVndiMjRnZEhKaGRtVnljMmx1WnlCbFlXTm9JR05vYVd4a0xseHVJQ29nUUhCaGNtRnRJSHMvS24wZ2RISmhkbVZ5YzJWRGIyNTBaWGgwSUVOdmJuUmxlSFFnWm05eUlIUnlZWFpsY25OaGJDNWNiaUFxSUVCeVpYUjFjbTRnZXlGdWRXMWlaWEo5SUZSb1pTQnVkVzFpWlhJZ2IyWWdZMmhwYkdSeVpXNGdhVzRnZEdocGN5QnpkV0owY21WbExseHVJQ292WEc1bWRXNWpkR2x2YmlCMGNtRjJaWEp6WlVGc2JFTm9hV3hrY21WdUtHTm9hV3hrY21WdUxDQmpZV3hzWW1GamF5d2dkSEpoZG1WeWMyVkRiMjUwWlhoMEtTQjdYRzRnSUdsbUlDaGphR2xzWkhKbGJpQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ2NtVjBkWEp1SURBN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2RISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJrbHRjR3dvWTJocGJHUnlaVzRzSUNjbkxDQXdMQ0JqWVd4c1ltRmpheXdnZEhKaGRtVnljMlZEYjI1MFpYaDBLVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgdXBkYXRlXG4gKi9cblxuIC8qIGdsb2JhbCBoYXNPd25Qcm9wZXJ0eTp0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gc2hhbGxvd0NvcHkoeCkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHJldHVybiB4LmNvbmNhdCgpO1xuICB9IGVsc2UgaWYgKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGFzc2lnbihuZXcgeC5jb25zdHJ1Y3RvcigpLCB4KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geDtcbiAgfVxufVxuXG52YXIgQ09NTUFORF9QVVNIID0ga2V5T2YoeyRwdXNoOiBudWxsfSk7XG52YXIgQ09NTUFORF9VTlNISUZUID0ga2V5T2YoeyR1bnNoaWZ0OiBudWxsfSk7XG52YXIgQ09NTUFORF9TUExJQ0UgPSBrZXlPZih7JHNwbGljZTogbnVsbH0pO1xudmFyIENPTU1BTkRfU0VUID0ga2V5T2YoeyRzZXQ6IG51bGx9KTtcbnZhciBDT01NQU5EX01FUkdFID0ga2V5T2YoeyRtZXJnZTogbnVsbH0pO1xudmFyIENPTU1BTkRfQVBQTFkgPSBrZXlPZih7JGFwcGx5OiBudWxsfSk7XG5cbnZhciBBTExfQ09NTUFORFNfTElTVCA9IFtcbiAgQ09NTUFORF9QVVNILFxuICBDT01NQU5EX1VOU0hJRlQsXG4gIENPTU1BTkRfU1BMSUNFLFxuICBDT01NQU5EX1NFVCxcbiAgQ09NTUFORF9NRVJHRSxcbiAgQ09NTUFORF9BUFBMWVxuXTtcblxudmFyIEFMTF9DT01NQU5EU19TRVQgPSB7fTtcblxuQUxMX0NPTU1BTkRTX0xJU1QuZm9yRWFjaChmdW5jdGlvbihjb21tYW5kKSB7XG4gIEFMTF9DT01NQU5EU19TRVRbY29tbWFuZF0gPSB0cnVlO1xufSk7XG5cbmZ1bmN0aW9uIGludmFyaWFudEFycmF5Q2FzZSh2YWx1ZSwgc3BlYywgY29tbWFuZCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIEFycmF5LmlzQXJyYXkodmFsdWUpLFxuICAgICd1cGRhdGUoKTogZXhwZWN0ZWQgdGFyZ2V0IG9mICVzIHRvIGJlIGFuIGFycmF5OyBnb3QgJXMuJyxcbiAgICBjb21tYW5kLFxuICAgIHZhbHVlXG4gICkgOiBpbnZhcmlhbnQoQXJyYXkuaXNBcnJheSh2YWx1ZSkpKTtcbiAgdmFyIHNwZWNWYWx1ZSA9IHNwZWNbY29tbWFuZF07XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgQXJyYXkuaXNBcnJheShzcGVjVmFsdWUpLFxuICAgICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheTsgZ290ICVzLiAnICtcbiAgICAnRGlkIHlvdSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBhcmFtZXRlciBpbiBhbiBhcnJheT8nLFxuICAgIGNvbW1hbmQsXG4gICAgc3BlY1ZhbHVlXG4gICkgOiBpbnZhcmlhbnQoQXJyYXkuaXNBcnJheShzcGVjVmFsdWUpKSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgc3BlYykge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHR5cGVvZiBzcGVjID09PSAnb2JqZWN0JyxcbiAgICAndXBkYXRlKCk6IFlvdSBwcm92aWRlZCBhIGtleSBwYXRoIHRvIHVwZGF0ZSgpIHRoYXQgZGlkIG5vdCBjb250YWluIG9uZSAnICtcbiAgICAnb2YgJXMuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgeyVzOiAuLi59PycsXG4gICAgQUxMX0NPTU1BTkRTX0xJU1Quam9pbignLCAnKSxcbiAgICBDT01NQU5EX1NFVFxuICApIDogaW52YXJpYW50KHR5cGVvZiBzcGVjID09PSAnb2JqZWN0JykpO1xuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfU0VUKSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBPYmplY3Qua2V5cyhzcGVjKS5sZW5ndGggPT09IDEsXG4gICAgICAnQ2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBrZXkgaW4gYW4gb2JqZWN0IHdpdGggJXMnLFxuICAgICAgQ09NTUFORF9TRVRcbiAgICApIDogaW52YXJpYW50KE9iamVjdC5rZXlzKHNwZWMpLmxlbmd0aCA9PT0gMSkpO1xuXG4gICAgcmV0dXJuIHNwZWNbQ09NTUFORF9TRVRdO1xuICB9XG5cbiAgdmFyIG5leHRWYWx1ZSA9IHNoYWxsb3dDb3B5KHZhbHVlKTtcblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX01FUkdFKSkge1xuICAgIHZhciBtZXJnZU9iaiA9IHNwZWNbQ09NTUFORF9NRVJHRV07XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIG1lcmdlT2JqICYmIHR5cGVvZiBtZXJnZU9iaiA9PT0gJ29iamVjdCcsXG4gICAgICAndXBkYXRlKCk6ICVzIGV4cGVjdHMgYSBzcGVjIG9mIHR5cGUgXFwnb2JqZWN0XFwnOyBnb3QgJXMnLFxuICAgICAgQ09NTUFORF9NRVJHRSxcbiAgICAgIG1lcmdlT2JqXG4gICAgKSA6IGludmFyaWFudChtZXJnZU9iaiAmJiB0eXBlb2YgbWVyZ2VPYmogPT09ICdvYmplY3QnKSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIG5leHRWYWx1ZSAmJiB0eXBlb2YgbmV4dFZhbHVlID09PSAnb2JqZWN0JyxcbiAgICAgICd1cGRhdGUoKTogJXMgZXhwZWN0cyBhIHRhcmdldCBvZiB0eXBlIFxcJ29iamVjdFxcJzsgZ290ICVzJyxcbiAgICAgIENPTU1BTkRfTUVSR0UsXG4gICAgICBuZXh0VmFsdWVcbiAgICApIDogaW52YXJpYW50KG5leHRWYWx1ZSAmJiB0eXBlb2YgbmV4dFZhbHVlID09PSAnb2JqZWN0JykpO1xuICAgIGFzc2lnbihuZXh0VmFsdWUsIHNwZWNbQ09NTUFORF9NRVJHRV0pO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9QVVNIKSkge1xuICAgIGludmFyaWFudEFycmF5Q2FzZSh2YWx1ZSwgc3BlYywgQ09NTUFORF9QVVNIKTtcbiAgICBzcGVjW0NPTU1BTkRfUFVTSF0uZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICBuZXh0VmFsdWUucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfVU5TSElGVCkpIHtcbiAgICBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIENPTU1BTkRfVU5TSElGVCk7XG4gICAgc3BlY1tDT01NQU5EX1VOU0hJRlRdLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgbmV4dFZhbHVlLnVuc2hpZnQoaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX1NQTElDRSkpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSksXG4gICAgICAnRXhwZWN0ZWQgJXMgdGFyZ2V0IHRvIGJlIGFuIGFycmF5OyBnb3QgJXMnLFxuICAgICAgQ09NTUFORF9TUExJQ0UsXG4gICAgICB2YWx1ZVxuICAgICkgOiBpbnZhcmlhbnQoQXJyYXkuaXNBcnJheSh2YWx1ZSkpKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgQXJyYXkuaXNBcnJheShzcGVjW0NPTU1BTkRfU1BMSUNFXSksXG4gICAgICAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYW4gYXJyYXkgb2YgYXJyYXlzOyBnb3QgJXMuICcgK1xuICAgICAgJ0RpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXJzIGluIGFuIGFycmF5PycsXG4gICAgICBDT01NQU5EX1NQTElDRSxcbiAgICAgIHNwZWNbQ09NTUFORF9TUExJQ0VdXG4gICAgKSA6IGludmFyaWFudChBcnJheS5pc0FycmF5KHNwZWNbQ09NTUFORF9TUExJQ0VdKSkpO1xuICAgIHNwZWNbQ09NTUFORF9TUExJQ0VdLmZvckVhY2goZnVuY3Rpb24oYXJncykge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSxcbiAgICAgICAgJ3VwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICVzIHRvIGJlIGFuIGFycmF5IG9mIGFycmF5czsgZ290ICVzLiAnICtcbiAgICAgICAgJ0RpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXJzIGluIGFuIGFycmF5PycsXG4gICAgICAgIENPTU1BTkRfU1BMSUNFLFxuICAgICAgICBzcGVjW0NPTU1BTkRfU1BMSUNFXVxuICAgICAgKSA6IGludmFyaWFudChBcnJheS5pc0FycmF5KGFyZ3MpKSk7XG4gICAgICBuZXh0VmFsdWUuc3BsaWNlLmFwcGx5KG5leHRWYWx1ZSwgYXJncyk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX0FQUExZKSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2Ygc3BlY1tDT01NQU5EX0FQUExZXSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhIGZ1bmN0aW9uOyBnb3QgJXMuJyxcbiAgICAgIENPTU1BTkRfQVBQTFksXG4gICAgICBzcGVjW0NPTU1BTkRfQVBQTFldXG4gICAgKSA6IGludmFyaWFudCh0eXBlb2Ygc3BlY1tDT01NQU5EX0FQUExZXSA9PT0gJ2Z1bmN0aW9uJykpO1xuICAgIG5leHRWYWx1ZSA9IHNwZWNbQ09NTUFORF9BUFBMWV0obmV4dFZhbHVlKTtcbiAgfVxuXG4gIGZvciAodmFyIGsgaW4gc3BlYykge1xuICAgIGlmICghKEFMTF9DT01NQU5EU19TRVQuaGFzT3duUHJvcGVydHkoaykgJiYgQUxMX0NPTU1BTkRTX1NFVFtrXSkpIHtcbiAgICAgIG5leHRWYWx1ZVtrXSA9IHVwZGF0ZSh2YWx1ZVtrXSwgc3BlY1trXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGRhdGU7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZkWEJrWVhSbExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0IxY0dSaGRHVmNiaUFxTDF4dVhHNGdMeW9nWjJ4dlltRnNJR2hoYzA5M2JsQnliM0JsY25SNU9uUnlkV1VnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnWVhOemFXZHVJRDBnY21WeGRXbHlaU2hjSWk0dlQySnFaV04wTG1GemMybG5ibHdpS1R0Y2JuWmhjaUJyWlhsUFppQTlJSEpsY1hWcGNtVW9YQ0l1TDJ0bGVVOW1YQ0lwTzF4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYm5aaGNpQm9ZWE5QZDI1UWNtOXdaWEowZVNBOUlIdDlMbWhoYzA5M2JsQnliM0JsY25SNU8xeHVYRzVtZFc1amRHbHZiaUJ6YUdGc2JHOTNRMjl3ZVNoNEtTQjdYRzRnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0hncEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhndVkyOXVZMkYwS0NrN1hHNGdJSDBnWld4elpTQnBaaUFvZUNBbUppQjBlWEJsYjJZZ2VDQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZWE56YVdkdUtHNWxkeUI0TG1OdmJuTjBjblZqZEc5eUtDa3NJSGdwTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUI0TzF4dUlDQjlYRzU5WEc1Y2JuWmhjaUJEVDAxTlFVNUVYMUJWVTBnZ1BTQnJaWGxQWmloN0pIQjFjMmc2SUc1MWJHeDlLVHRjYm5aaGNpQkRUMDFOUVU1RVgxVk9VMGhKUmxRZ1BTQnJaWGxQWmloN0pIVnVjMmhwWm5RNklHNTFiR3g5S1R0Y2JuWmhjaUJEVDAxTlFVNUVYMU5RVEVsRFJTQTlJR3RsZVU5bUtIc2tjM0JzYVdObE9pQnVkV3hzZlNrN1hHNTJZWElnUTA5TlRVRk9SRjlUUlZRZ1BTQnJaWGxQWmloN0pITmxkRG9nYm5Wc2JIMHBPMXh1ZG1GeUlFTlBUVTFCVGtSZlRVVlNSMFVnUFNCclpYbFBaaWg3SkcxbGNtZGxPaUJ1ZFd4c2ZTazdYRzUyWVhJZ1EwOU5UVUZPUkY5QlVGQk1XU0E5SUd0bGVVOW1LSHNrWVhCd2JIazZJRzUxYkd4OUtUdGNibHh1ZG1GeUlFRk1URjlEVDAxTlFVNUVVMTlNU1ZOVUlEMGdXMXh1SUNCRFQwMU5RVTVFWDFCVlUwZ3NYRzRnSUVOUFRVMUJUa1JmVlU1VFNFbEdWQ3hjYmlBZ1EwOU5UVUZPUkY5VFVFeEpRMFVzWEc0Z0lFTlBUVTFCVGtSZlUwVlVMRnh1SUNCRFQwMU5RVTVFWDAxRlVrZEZMRnh1SUNCRFQwMU5RVTVFWDBGUVVFeFpYRzVkTzF4dVhHNTJZWElnUVV4TVgwTlBUVTFCVGtSVFgxTkZWQ0E5SUh0OU8xeHVYRzVCVEV4ZlEwOU5UVUZPUkZOZlRFbFRWQzVtYjNKRllXTm9LR1oxYm1OMGFXOXVLR052YlcxaGJtUXBJSHRjYmlBZ1FVeE1YME5QVFUxQlRrUlRYMU5GVkZ0amIyMXRZVzVrWFNBOUlIUnlkV1U3WEc1OUtUdGNibHh1Wm5WdVkzUnBiMjRnYVc1MllYSnBZVzUwUVhKeVlYbERZWE5sS0haaGJIVmxMQ0J6Y0dWakxDQmpiMjF0WVc1a0tTQjdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdRWEp5WVhrdWFYTkJjbkpoZVNoMllXeDFaU2tzWEc0Z0lDQWdKM1Z3WkdGMFpTZ3BPaUJsZUhCbFkzUmxaQ0IwWVhKblpYUWdiMllnSlhNZ2RHOGdZbVVnWVc0Z1lYSnlZWGs3SUdkdmRDQWxjeTRuTEZ4dUlDQWdJR052YlcxaGJtUXNYRzRnSUNBZ2RtRnNkV1ZjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hCY25KaGVTNXBjMEZ5Y21GNUtIWmhiSFZsS1NrcE8xeHVJQ0IyWVhJZ2MzQmxZMVpoYkhWbElEMGdjM0JsWTF0amIyMXRZVzVrWFR0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCQmNuSmhlUzVwYzBGeWNtRjVLSE53WldOV1lXeDFaU2tzWEc0Z0lDQWdKM1Z3WkdGMFpTZ3BPaUJsZUhCbFkzUmxaQ0J6Y0dWaklHOW1JQ1Z6SUhSdklHSmxJR0Z1SUdGeWNtRjVPeUJuYjNRZ0pYTXVJQ2NnSzF4dUlDQWdJQ2RFYVdRZ2VXOTFJR1p2Y21kbGRDQjBieUIzY21Gd0lIbHZkWElnY0dGeVlXMWxkR1Z5SUdsdUlHRnVJR0Z5Y21GNVB5Y3NYRzRnSUNBZ1kyOXRiV0Z1WkN4Y2JpQWdJQ0J6Y0dWalZtRnNkV1ZjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hCY25KaGVTNXBjMEZ5Y21GNUtITndaV05XWVd4MVpTa3BLVHRjYm4xY2JseHVablZ1WTNScGIyNGdkWEJrWVhSbEtIWmhiSFZsTENCemNHVmpLU0I3WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnZEhsd1pXOW1JSE53WldNZ1BUMDlJQ2R2WW1wbFkzUW5MRnh1SUNBZ0lDZDFjR1JoZEdVb0tUb2dXVzkxSUhCeWIzWnBaR1ZrSUdFZ2EyVjVJSEJoZEdnZ2RHOGdkWEJrWVhSbEtDa2dkR2hoZENCa2FXUWdibTkwSUdOdmJuUmhhVzRnYjI1bElDY2dLMXh1SUNBZ0lDZHZaaUFsY3k0Z1JHbGtJSGx2ZFNCbWIzSm5aWFFnZEc4Z2FXNWpiSFZrWlNCN0pYTTZJQzR1TG4wL0p5eGNiaUFnSUNCQlRFeGZRMDlOVFVGT1JGTmZURWxUVkM1cWIybHVLQ2NzSUNjcExGeHVJQ0FnSUVOUFRVMUJUa1JmVTBWVVhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2RIbHdaVzltSUhOd1pXTWdQVDA5SUNkdlltcGxZM1FuS1NrN1hHNWNiaUFnYVdZZ0tHaGhjMDkzYmxCeWIzQmxjblI1TG1OaGJHd29jM0JsWXl3Z1EwOU5UVUZPUkY5VFJWUXBLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lFOWlhbVZqZEM1clpYbHpLSE53WldNcExteGxibWQwYUNBOVBUMGdNU3hjYmlBZ0lDQWdJQ2REWVc1dWIzUWdhR0YyWlNCdGIzSmxJSFJvWVc0Z2IyNWxJR3RsZVNCcGJpQmhiaUJ2WW1wbFkzUWdkMmwwYUNBbGN5Y3NYRzRnSUNBZ0lDQkRUMDFOUVU1RVgxTkZWRnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvVDJKcVpXTjBMbXRsZVhNb2MzQmxZeWt1YkdWdVozUm9JRDA5UFNBeEtTazdYRzVjYmlBZ0lDQnlaWFIxY200Z2MzQmxZMXREVDAxTlFVNUVYMU5GVkYwN1hHNGdJSDFjYmx4dUlDQjJZWElnYm1WNGRGWmhiSFZsSUQwZ2MyaGhiR3h2ZDBOdmNIa29kbUZzZFdVcE8xeHVYRzRnSUdsbUlDaG9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLSE53WldNc0lFTlBUVTFCVGtSZlRVVlNSMFVwS1NCN1hHNGdJQ0FnZG1GeUlHMWxjbWRsVDJKcUlEMGdjM0JsWTF0RFQwMU5RVTVFWDAxRlVrZEZYVHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2JXVnlaMlZQWW1vZ0ppWWdkSGx3Wlc5bUlHMWxjbWRsVDJKcUlEMDlQU0FuYjJKcVpXTjBKeXhjYmlBZ0lDQWdJQ2QxY0dSaGRHVW9LVG9nSlhNZ1pYaHdaV04wY3lCaElITndaV01nYjJZZ2RIbHdaU0JjWENkdlltcGxZM1JjWENjN0lHZHZkQ0FsY3ljc1hHNGdJQ0FnSUNCRFQwMU5RVTVFWDAxRlVrZEZMRnh1SUNBZ0lDQWdiV1Z5WjJWUFltcGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRzFsY21kbFQySnFJQ1ltSUhSNWNHVnZaaUJ0WlhKblpVOWlhaUE5UFQwZ0oyOWlhbVZqZENjcEtUdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnYm1WNGRGWmhiSFZsSUNZbUlIUjVjR1Z2WmlCdVpYaDBWbUZzZFdVZ1BUMDlJQ2R2WW1wbFkzUW5MRnh1SUNBZ0lDQWdKM1Z3WkdGMFpTZ3BPaUFsY3lCbGVIQmxZM1J6SUdFZ2RHRnlaMlYwSUc5bUlIUjVjR1VnWEZ3bmIySnFaV04wWEZ3bk95Qm5iM1FnSlhNbkxGeHVJQ0FnSUNBZ1EwOU5UVUZPUkY5TlJWSkhSU3hjYmlBZ0lDQWdJRzVsZUhSV1lXeDFaVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvYm1WNGRGWmhiSFZsSUNZbUlIUjVjR1Z2WmlCdVpYaDBWbUZzZFdVZ1BUMDlJQ2R2WW1wbFkzUW5LU2s3WEc0Z0lDQWdZWE56YVdkdUtHNWxlSFJXWVd4MVpTd2djM0JsWTF0RFQwMU5RVTVFWDAxRlVrZEZYU2s3WEc0Z0lIMWNibHh1SUNCcFppQW9hR0Z6VDNkdVVISnZjR1Z5ZEhrdVkyRnNiQ2h6Y0dWakxDQkRUMDFOUVU1RVgxQlZVMGdwS1NCN1hHNGdJQ0FnYVc1MllYSnBZVzUwUVhKeVlYbERZWE5sS0haaGJIVmxMQ0J6Y0dWakxDQkRUMDFOUVU1RVgxQlZVMGdwTzF4dUlDQWdJSE53WldOYlEwOU5UVUZPUkY5UVZWTklYUzVtYjNKRllXTm9LR1oxYm1OMGFXOXVLR2wwWlcwcElIdGNiaUFnSUNBZ0lHNWxlSFJXWVd4MVpTNXdkWE5vS0dsMFpXMHBPMXh1SUNBZ0lIMHBPMXh1SUNCOVhHNWNiaUFnYVdZZ0tHaGhjMDkzYmxCeWIzQmxjblI1TG1OaGJHd29jM0JsWXl3Z1EwOU5UVUZPUkY5VlRsTklTVVpVS1NrZ2UxeHVJQ0FnSUdsdWRtRnlhV0Z1ZEVGeWNtRjVRMkZ6WlNoMllXeDFaU3dnYzNCbFl5d2dRMDlOVFVGT1JGOVZUbE5JU1VaVUtUdGNiaUFnSUNCemNHVmpXME5QVFUxQlRrUmZWVTVUU0VsR1ZGMHVabTl5UldGamFDaG1kVzVqZEdsdmJpaHBkR1Z0S1NCN1hHNGdJQ0FnSUNCdVpYaDBWbUZzZFdVdWRXNXphR2xtZENocGRHVnRLVHRjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaG9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLSE53WldNc0lFTlBUVTFCVGtSZlUxQk1TVU5GS1NrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JCY25KaGVTNXBjMEZ5Y21GNUtIWmhiSFZsS1N4Y2JpQWdJQ0FnSUNkRmVIQmxZM1JsWkNBbGN5QjBZWEpuWlhRZ2RHOGdZbVVnWVc0Z1lYSnlZWGs3SUdkdmRDQWxjeWNzWEc0Z0lDQWdJQ0JEVDAxTlFVNUVYMU5RVEVsRFJTeGNiaUFnSUNBZ0lIWmhiSFZsWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoQmNuSmhlUzVwYzBGeWNtRjVLSFpoYkhWbEtTa3BPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCQmNuSmhlUzVwYzBGeWNtRjVLSE53WldOYlEwOU5UVUZPUkY5VFVFeEpRMFZkS1N4Y2JpQWdJQ0FnSUNkMWNHUmhkR1VvS1RvZ1pYaHdaV04wWldRZ2MzQmxZeUJ2WmlBbGN5QjBieUJpWlNCaGJpQmhjbkpoZVNCdlppQmhjbkpoZVhNN0lHZHZkQ0FsY3k0Z0p5QXJYRzRnSUNBZ0lDQW5SR2xrSUhsdmRTQm1iM0puWlhRZ2RHOGdkM0poY0NCNWIzVnlJSEJoY21GdFpYUmxjbk1nYVc0Z1lXNGdZWEp5WVhrL0p5eGNiaUFnSUNBZ0lFTlBUVTFCVGtSZlUxQk1TVU5GTEZ4dUlDQWdJQ0FnYzNCbFkxdERUMDFOUVU1RVgxTlFURWxEUlYxY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtFRnljbUY1TG1selFYSnlZWGtvYzNCbFkxdERUMDFOUVU1RVgxTlFURWxEUlYwcEtTazdYRzRnSUNBZ2MzQmxZMXREVDAxTlFVNUVYMU5RVEVsRFJWMHVabTl5UldGamFDaG1kVzVqZEdsdmJpaGhjbWR6S1NCN1hHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSUNCQmNuSmhlUzVwYzBGeWNtRjVLR0Z5WjNNcExGeHVJQ0FnSUNBZ0lDQW5kWEJrWVhSbEtDazZJR1Y0Y0dWamRHVmtJSE53WldNZ2IyWWdKWE1nZEc4Z1ltVWdZVzRnWVhKeVlYa2diMllnWVhKeVlYbHpPeUJuYjNRZ0pYTXVJQ2NnSzF4dUlDQWdJQ0FnSUNBblJHbGtJSGx2ZFNCbWIzSm5aWFFnZEc4Z2QzSmhjQ0I1YjNWeUlIQmhjbUZ0WlhSbGNuTWdhVzRnWVc0Z1lYSnlZWGsvSnl4Y2JpQWdJQ0FnSUNBZ1EwOU5UVUZPUkY5VFVFeEpRMFVzWEc0Z0lDQWdJQ0FnSUhOd1pXTmJRMDlOVFVGT1JGOVRVRXhKUTBWZFhHNGdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLRUZ5Y21GNUxtbHpRWEp5WVhrb1lYSm5jeWtwS1R0Y2JpQWdJQ0FnSUc1bGVIUldZV3gxWlM1emNHeHBZMlV1WVhCd2JIa29ibVY0ZEZaaGJIVmxMQ0JoY21kektUdGNiaUFnSUNCOUtUdGNiaUFnZlZ4dVhHNGdJR2xtSUNob1lYTlBkMjVRY205d1pYSjBlUzVqWVd4c0tITndaV01zSUVOUFRVMUJUa1JmUVZCUVRGa3BLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lIUjVjR1Z2WmlCemNHVmpXME5QVFUxQlRrUmZRVkJRVEZsZElEMDlQU0FuWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ0FnSjNWd1pHRjBaU2dwT2lCbGVIQmxZM1JsWkNCemNHVmpJRzltSUNWeklIUnZJR0psSUdFZ1puVnVZM1JwYjI0N0lHZHZkQ0FsY3k0bkxGeHVJQ0FnSUNBZ1EwOU5UVUZPUkY5QlVGQk1XU3hjYmlBZ0lDQWdJSE53WldOYlEwOU5UVUZPUkY5QlVGQk1XVjFjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hSNWNHVnZaaUJ6Y0dWalcwTlBUVTFCVGtSZlFWQlFURmxkSUQwOVBTQW5ablZ1WTNScGIyNG5LU2s3WEc0Z0lDQWdibVY0ZEZaaGJIVmxJRDBnYzNCbFkxdERUMDFOUVU1RVgwRlFVRXhaWFNodVpYaDBWbUZzZFdVcE8xeHVJQ0I5WEc1Y2JpQWdabTl5SUNoMllYSWdheUJwYmlCemNHVmpLU0I3WEc0Z0lDQWdhV1lnS0NFb1FVeE1YME5QVFUxQlRrUlRYMU5GVkM1b1lYTlBkMjVRY205d1pYSjBlU2hyS1NBbUppQkJURXhmUTA5TlRVRk9SRk5mVTBWVVcydGRLU2tnZTF4dUlDQWdJQ0FnYm1WNGRGWmhiSFZsVzJ0ZElEMGdkWEJrWVhSbEtIWmhiSFZsVzJ0ZExDQnpjR1ZqVzJ0ZEtUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2JtVjRkRlpoYkhWbE8xeHVmVnh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUhWd1pHRjBaVHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHdhcm5pbmdcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgd2FybmluZyA9IGVtcHR5RnVuY3Rpb247XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgd2FybmluZyA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0ICkge2ZvciAodmFyIGFyZ3M9W10sJF9fMD0yLCRfXzE9YXJndW1lbnRzLmxlbmd0aDskX18wPCRfXzE7JF9fMCsrKSBhcmdzLnB1c2goYXJndW1lbnRzWyRfXzBdKTtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgK1xuICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdC5sZW5ndGggPCAxMCB8fCAvXltzXFxXXSokLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSB3YXJuaW5nIGZvcm1hdCBzaG91bGQgYmUgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzICcgK1xuICAgICAgICAnd2FybmluZy4gUGxlYXNlLCB1c2UgYSBtb3JlIGRlc2NyaXB0aXZlIGZvcm1hdCB0aGFuOiAnICsgZm9ybWF0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQuaW5kZXhPZignRmFpbGVkIENvbXBvc2l0ZSBwcm9wVHlwZTogJykgPT09IDApIHtcbiAgICAgIHJldHVybjsgLy8gSWdub3JlIENvbXBvc2l0ZUNvbXBvbmVudCBwcm9wdHlwZSBjaGVjay5cbiAgICB9XG5cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSAge3JldHVybiBhcmdzW2FyZ0luZGV4KytdO30pO1xuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2goeCkge31cbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdmQyRnlibWx1Wnk1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERTBMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdkMkZ5Ym1sdVoxeHVJQ292WEc1Y2Jsd2lkWE5sSUhOMGNtbGpkRndpTzF4dVhHNTJZWElnWlcxd2RIbEdkVzVqZEdsdmJpQTlJSEpsY1hWcGNtVW9YQ0l1TDJWdGNIUjVSblZ1WTNScGIyNWNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1UybHRhV3hoY2lCMGJ5QnBiblpoY21saGJuUWdZblYwSUc5dWJIa2diRzluY3lCaElIZGhjbTVwYm1jZ2FXWWdkR2hsSUdOdmJtUnBkR2x2YmlCcGN5QnViM1FnYldWMExseHVJQ29nVkdocGN5QmpZVzRnWW1VZ2RYTmxaQ0IwYnlCc2IyY2dhWE56ZFdWeklHbHVJR1JsZG1Wc2IzQnRaVzUwSUdWdWRtbHliMjV0Wlc1MGN5QnBiaUJqY21sMGFXTmhiRnh1SUNvZ2NHRjBhSE11SUZKbGJXOTJhVzVuSUhSb1pTQnNiMmRuYVc1bklHTnZaR1VnWm05eUlIQnliMlIxWTNScGIyNGdaVzUyYVhKdmJtMWxiblJ6SUhkcGJHd2dhMlZsY0NCMGFHVmNiaUFxSUhOaGJXVWdiRzluYVdNZ1lXNWtJR1p2Ykd4dmR5QjBhR1VnYzJGdFpTQmpiMlJsSUhCaGRHaHpMbHh1SUNvdlhHNWNiblpoY2lCM1lYSnVhVzVuSUQwZ1pXMXdkSGxHZFc1amRHbHZianRjYmx4dWFXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0IzWVhKdWFXNW5JRDBnWm5WdVkzUnBiMjRvWTI5dVpHbDBhVzl1TENCbWIzSnRZWFFnS1NCN1ptOXlJQ2gyWVhJZ1lYSm5jejFiWFN3a1gxOHdQVElzSkY5Zk1UMWhjbWQxYldWdWRITXViR1Z1WjNSb095UmZYekE4SkY5Zk1Uc2tYMTh3S3lzcElHRnlaM011Y0hWemFDaGhjbWQxYldWdWRITmJKRjlmTUYwcE8xeHVJQ0FnSUdsbUlDaG1iM0p0WVhRZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0FuWUhkaGNtNXBibWNvWTI5dVpHbDBhVzl1TENCbWIzSnRZWFFzSUM0dUxtRnlaM01wWUNCeVpYRjFhWEpsY3lCaElIZGhjbTVwYm1jZ0p5QXJYRzRnSUNBZ0lDQWdJQ2R0WlhOellXZGxJR0Z5WjNWdFpXNTBKMXh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvWm05eWJXRjBMbXhsYm1kMGFDQThJREV3SUh4OElDOWVXM05jWEZkZEtpUXZMblJsYzNRb1ptOXliV0YwS1NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Z4dUlDQWdJQ0FnSUNBblZHaGxJSGRoY201cGJtY2dabTl5YldGMElITm9iM1ZzWkNCaVpTQmhZbXhsSUhSdklIVnVhWEYxWld4NUlHbGtaVzUwYVdaNUlIUm9hWE1nSnlBclhHNGdJQ0FnSUNBZ0lDZDNZWEp1YVc1bkxpQlFiR1ZoYzJVc0lIVnpaU0JoSUcxdmNtVWdaR1Z6WTNKcGNIUnBkbVVnWm05eWJXRjBJSFJvWVc0NklDY2dLeUJtYjNKdFlYUmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLR1p2Y20xaGRDNXBibVJsZUU5bUtDZEdZV2xzWldRZ1EyOXRjRzl6YVhSbElIQnliM0JVZVhCbE9pQW5LU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdjbVYwZFhKdU95QXZMeUJKWjI1dmNtVWdRMjl0Y0c5emFYUmxRMjl0Y0c5dVpXNTBJSEJ5YjNCMGVYQmxJR05vWldOckxseHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDZ2hZMjl1WkdsMGFXOXVLU0I3WEc0Z0lDQWdJQ0IyWVhJZ1lYSm5TVzVrWlhnZ1BTQXdPMXh1SUNBZ0lDQWdkbUZ5SUcxbGMzTmhaMlVnUFNBblYyRnlibWx1WnpvZ0p5QXJJR1p2Y20xaGRDNXlaWEJzWVdObEtDOGxjeTluTENCbWRXNWpkR2x2YmlncElDQjdjbVYwZFhKdUlHRnlaM05iWVhKblNXNWtaWGdySzEwN2ZTazdYRzRnSUNBZ0lDQmpiMjV6YjJ4bExuZGhjbTRvYldWemMyRm5aU2s3WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQXZMeUF0TFMwZ1YyVnNZMjl0WlNCMGJ5QmtaV0oxWjJkcGJtY2dVbVZoWTNRZ0xTMHRYRzRnSUNBZ0lDQWdJQzh2SUZSb2FYTWdaWEp5YjNJZ2QyRnpJSFJvY205M2JpQmhjeUJoSUdOdmJuWmxibWxsYm1ObElITnZJSFJvWVhRZ2VXOTFJR05oYmlCMWMyVWdkR2hwY3lCemRHRmphMXh1SUNBZ0lDQWdJQ0F2THlCMGJ5Qm1hVzVrSUhSb1pTQmpZV3hzYzJsMFpTQjBhR0YwSUdOaGRYTmxaQ0IwYUdseklIZGhjbTVwYm1jZ2RHOGdabWx5WlM1Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0cxbGMzTmhaMlVwTzF4dUlDQWdJQ0FnZlNCallYUmphQ2g0S1NCN2ZWeHVJQ0FnSUgxY2JpQWdmVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQjNZWEp1YVc1bk8xeHVJbDE5IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9SZWFjdCcpO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFRhYmxlSGVhZGVyIGZyb20gJy4vVGFibGVIZWFkZXInO1xuaW1wb3J0IFRhYmxlQm9keSBmcm9tICcuL1RhYmxlQm9keSc7XG5pbXBvcnQgUGFnaW5hdGlvbkxpc3QgZnJvbSAnLi9wYWdpbmF0aW9uL1BhZ2luYXRpb25MaXN0JztcbmltcG9ydCBUb29sQmFyIGZyb20gJy4vdG9vbGJhci9Ub29sQmFyJztcbmltcG9ydCBUYWJsZUZpbHRlciBmcm9tICcuL1RhYmxlRmlsdGVyJztcbmltcG9ydCB7VGFibGVEYXRhU3RvcmV9IGZyb20gJy4vc3RvcmUvVGFibGVEYXRhU3RvcmUnO1xuXG5jbGFzcyBCb290c3RyYXBUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuX2F0dGFjaENlbGxFZGl0RnVuYygpO1xuICAgIGxldCBrZXlGaWVsZCA9IG51bGw7XG4gICAgbGV0IGN1c3RvbVNvcnRGdW5jTWFwID0ge307XG5cbiAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHRoaXMucHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uKGNvbHVtbil7XG4gICAgICBpZihjb2x1bW4ucHJvcHMuaXNLZXkpe1xuICAgICAgICBpZihrZXlGaWVsZCAhPSBudWxsKSB0aHJvdyBcIkVycm9yLiBNdWx0aXBsZSBrZXkgY29sdW1uIGJlIGRldGVjdGVkIGluIFRhYmxlSGVhZGVyQ29sdW1uLlwiO1xuICAgICAgICBrZXlGaWVsZCA9IGNvbHVtbi5wcm9wcy5kYXRhRmllbGQ7XG4gICAgICB9XG4gICAgICBpZihjb2x1bW4ucHJvcHMuc29ydEZ1bmMpe1xuICAgICAgICBjdXN0b21Tb3J0RnVuY01hcFtjb2x1bW4ucHJvcHMuZGF0YUZpZWxkXSA9IGNvbHVtbi5wcm9wcy5zb3J0RnVuYztcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcblxuICAgIGlmKGtleUZpZWxkID09IG51bGwpXG4gICAgICB0aHJvdyBcIkVycm9yLiBObyBhbnkga2V5IGNvbHVtbiBkZWZpbmVkIGluIFRhYmxlSGVhZGVyQ29sdW1uLiBVc2UgJ2lzS2V5PXt0cnVlfScgdG8gc3BlY2lmeSBhbiB1bmlxdWUgY29sdW1uIGFmdGVyIHZlcnNpb24gMC41LjQuXCI7XG5cbiAgICBpZighQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmRhdGEpKXtcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgVGFibGVEYXRhU3RvcmUodGhpcy5wcm9wcy5kYXRhLmdldERhdGEoKSk7XG4gICAgICB0aGlzLnByb3BzLmRhdGEuY2xlYXIoKTtcbiAgICAgIHRoaXMucHJvcHMuZGF0YS5vbignY2hhbmdlJywgKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKGRhdGEpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBkYXRhOiB0aGlzLmdldFRhYmxlRGF0YSgpXG4gICAgICAgIH0pXG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0gZWxzZXtcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgVGFibGVEYXRhU3RvcmUodGhpcy5wcm9wcy5kYXRhKTtcbiAgICB9XG4gICAgdGhpcy5zdG9yZS5zZXRQcm9wcyh0aGlzLnByb3BzLnBhZ2luYXRpb24sIGtleUZpZWxkLCBjdXN0b21Tb3J0RnVuY01hcCk7XG5cbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdyAmJiB0aGlzLnByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCl7XG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KHRoaXMucHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZGF0YTogdGhpcy5nZXRUYWJsZURhdGEoKSxcbiAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKVxuICAgIH07XG4gIH1cblxuICBnZXRUYWJsZURhdGEoKSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGlmKHRoaXMucHJvcHMucGFnaW5hdGlvbil7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UodGhpcy5wcm9wcy5vcHRpb25zLnBhZ2UgfHwgMSxcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5zaXplUGVyUGFnZSB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1RbMF0pXG4gICAgICAgICAgICAgICAgICAuZ2V0KCk7XG4gICAgfSBlbHNle1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKXtcbiAgICBpZihBcnJheS5pc0FycmF5KG5leHRQcm9wcy5kYXRhKSl7XG4gICAgICB0aGlzLnN0b3JlLnNldERhdGEobmV4dFByb3BzLmRhdGEpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHRoaXMuZ2V0VGFibGVEYXRhKClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZihuZXh0UHJvcHMuc2VsZWN0Um93ICYmIG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQpe1xuICAgICAgLy9zZXQgZGVmYXVsdCBzZWxlY3Qgcm93cyB0byBzdG9yZS5cbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkobmV4dFByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBuZXh0UHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKXtcbiAgICB0aGlzLl9hdHRhY2hDZWxsRWRpdEZ1bmMoKTtcbiAgICBpZih0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJUYWJsZUNvbXBsZXRlKVxuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyVGFibGVDb21wbGV0ZSgpO1xuICB9XG5cbiAgX2F0dGFjaENlbGxFZGl0RnVuYygpe1xuICAgIGlmKHRoaXMucHJvcHMuY2VsbEVkaXQpe1xuICAgICAgdGhpcy5wcm9wcy5jZWxsRWRpdC5fX29uQ29tcGxldGVFZGl0X18gPSB0aGlzLmhhbmRsZUVkaXRDZWxsLmJpbmQodGhpcyk7XG4gICAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgIT09IENvbnN0LkNFTExfRURJVF9OT05FKVxuICAgICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIHRhYmxlQ2xhc3MgPSBjbGFzc1NldChcInJlYWN0LWJzLXRhYmxlXCIpO1xuICAgIHZhciBjaGlsZHJlbnMgPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBzdHlsZSA9IHtcbiAgICAgIGhlaWdodDogdGhpcy5wcm9wcy5oZWlnaHRcbiAgICB9O1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pKXtcbiAgICAgIGNoaWxkcmVucyA9IFt0aGlzLnByb3BzLmNoaWxkcmVuXTtcbiAgICB9XG4gICAgdmFyIGNvbHVtbnMgPSBjaGlsZHJlbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBjb2x1bW4ucHJvcHMuZGF0YUZpZWxkLFxuICAgICAgICBhbGlnbjogY29sdW1uLnByb3BzLmRhdGFBbGlnbixcbiAgICAgICAgc29ydDogY29sdW1uLnByb3BzLmRhdGFTb3J0LFxuICAgICAgICBmb3JtYXQ6IGNvbHVtbi5wcm9wcy5kYXRhRm9ybWF0LFxuICAgICAgICBlZGl0YWJsZTogY29sdW1uLnByb3BzLmVkaXRhYmxlLFxuICAgICAgICBoaWRkZW46IGNvbHVtbi5wcm9wcy5oaWRkZW4sXG4gICAgICAgIGNsYXNzTmFtZTpjb2x1bW4ucHJvcHMuY29sdW1uQ2xhc3NOYW1lLFxuICAgICAgICB3aWR0aDogY29sdW1uLnByb3BzLndpZHRoLFxuICAgICAgICBpbmRleDogaVxuICAgICAgfTtcbiAgICB9LCB0aGlzKTtcblxuICAgIHZhciBwYWdpbmF0aW9uID0gdGhpcy5yZW5kZXJQYWdpbmF0aW9uKCk7XG4gICAgdmFyIHRvb2xCYXIgPSB0aGlzLnJlbmRlclRvb2xCYXIoKTtcbiAgICB2YXIgdGFibGVGaWx0ZXIgPSB0aGlzLnJlbmRlclRhYmxlRmlsdGVyKGNvbHVtbnMpO1xuICAgIHJldHVybihcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVhY3QtYnMtY29udGFpbmVyXCI+XG4gICAgICAgIHt0b29sQmFyfVxuICAgICAgICA8ZGl2IHJlZj1cInRhYmxlXCIgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e3RhYmxlQ2xhc3N9PlxuICAgICAgICAgIDxUYWJsZUhlYWRlciByb3dTZWxlY3RUeXBlPXt0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICBoaWRlU2VsZWN0Q29sdW1uPXt0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1ufVxuICAgICAgICAgICAgICAgICAgICAgICBzb3J0TmFtZT17dGhpcy5wcm9wcy5vcHRpb25zLnNvcnROYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICBzb3J0T3JkZXI9e3RoaXMucHJvcHMub3B0aW9ucy5zb3J0T3JkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uU29ydD17dGhpcy5oYW5kbGVTb3J0LmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0QWxsUm93PXt0aGlzLmhhbmRsZVNlbGVjdEFsbFJvdy5iaW5kKHRoaXMpfT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgIDwvVGFibGVIZWFkZXI+XG4gICAgICAgICAgPFRhYmxlQm9keSByZWY9XCJib2R5XCIgZGF0YT17dGhpcy5zdGF0ZS5kYXRhfSBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgdHJDbGFzc05hbWU9e3RoaXMucHJvcHMudHJDbGFzc05hbWV9XG4gICAgICAgICAgICBzdHJpcGVkPXt0aGlzLnByb3BzLnN0cmlwZWR9XG4gICAgICAgICAgICBob3Zlcj17dGhpcy5wcm9wcy5ob3Zlcn1cbiAgICAgICAgICAgIGtleUZpZWxkPXt0aGlzLnN0b3JlLmdldEtleUZpZWxkKCl9XG4gICAgICAgICAgICBjb25kZW5zZWQ9e3RoaXMucHJvcHMuY29uZGVuc2VkfVxuICAgICAgICAgICAgc2VsZWN0Um93PXt0aGlzLnByb3BzLnNlbGVjdFJvd31cbiAgICAgICAgICAgIGNlbGxFZGl0PXt0aGlzLnByb3BzLmNlbGxFZGl0fVxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dLZXlzPXt0aGlzLnN0YXRlLnNlbGVjdGVkUm93S2V5c31cbiAgICAgICAgICAgIG9uU2VsZWN0Um93PXt0aGlzLmhhbmRsZVNlbGVjdFJvdy5iaW5kKHRoaXMpfS8+XG4gICAgICAgICAge3RhYmxlRmlsdGVyfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3BhZ2luYXRpb259XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBoYW5kbGVTb3J0KG9yZGVyLCBzb3J0RmllbGQpe1xuICAgIGxldCByZXN1bHQgPSB0aGlzLnN0b3JlLnNvcnQob3JkZXIsIHNvcnRGaWVsZCkuZ2V0KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVBhZ2luYXRpb25EYXRhKHBhZ2UsIHNpemVQZXJQYWdlKXtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKHBhZ2UsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2VsZWN0QWxsUm93KGUpe1xuICAgIHZhciBpc1NlbGVjdGVkID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgbGV0IHNlbGVjdGVkUm93S2V5cyA9IFtdO1xuICAgIGlmKGlzU2VsZWN0ZWQpe1xuICAgICAgc2VsZWN0ZWRSb3dLZXlzID0gdGhpcy5zdG9yZS5nZXRBbGxSb3drZXkoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KHNlbGVjdGVkUm93S2V5cyk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3RlZFJvd0tleXM6IHNlbGVjdGVkUm93S2V5c1xuICAgIH0pO1xuICAgIGlmKHRoaXMucHJvcHMuc2VsZWN0Um93Lm9uU2VsZWN0QWxsKXtcbiAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93Lm9uU2VsZWN0QWxsKGlzU2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlbGVjdFJvdyhyb3csIGlzU2VsZWN0ZWQpe1xuICAgIGxldCBjdXJyU2VsZWN0ZWQgPSB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpO1xuICAgIGxldCByb3dLZXkgPSByb3dbdGhpcy5zdG9yZS5nZXRLZXlGaWVsZCgpXTtcbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlID09PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSl7XG4gICAgICBjdXJyU2VsZWN0ZWQgPSBpc1NlbGVjdGVkP1tyb3dLZXldOltdXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgY3VyclNlbGVjdGVkLnB1c2gocm93S2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZCA9IGN1cnJTZWxlY3RlZC5maWx0ZXIoZnVuY3Rpb24oa2V5KXtcbiAgICAgICAgICByZXR1cm4gcm93S2V5ICE9PSBrZXk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoY3VyclNlbGVjdGVkKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNlbGVjdGVkUm93S2V5czogY3VyclNlbGVjdGVkXG4gICAgfSk7XG5cbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdCl7XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdChyb3csIGlzU2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUVkaXRDZWxsKG5ld1ZhbCwgcm93SW5kZXgsIGNvbEluZGV4KXtcbiAgICBsZXQgZmllbGROYW1lO1xuICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2godGhpcy5wcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24oY29sdW1uLCBpKXtcbiAgICAgIGlmKGkgPT0gY29sSW5kZXgpe1xuICAgICAgICBmaWVsZE5hbWUgPSBjb2x1bW4ucHJvcHMuZGF0YUZpZWxkO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5zdG9yZS5lZGl0KG5ld1ZhbCwgcm93SW5kZXgsIGZpZWxkTmFtZSkuZ2V0KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9KTtcblxuICAgIGlmKHRoaXMucHJvcHMuY2VsbEVkaXQuYWZ0ZXJTYXZlQ2VsbCl7XG4gICAgICB0aGlzLnByb3BzLmNlbGxFZGl0LmFmdGVyU2F2ZUNlbGwodGhpcy5zdGF0ZS5kYXRhW3Jvd0luZGV4XSwgZmllbGROYW1lLCBuZXdWYWwpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFkZFJvd0JlZ2luKCl7XG4gICAgaWYodGhpcy5yZWZzLmJvZHkpe1xuICAgICAgLy8gdGhpcy5yZWZzLmJvZHkuY2FuY2VsRWRpdCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFkZFJvdyhuZXdPYmope1xuICAgIGxldCBtc2cgPSBudWxsLCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc3RvcmUuYWRkKG5ld09iaik7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgIHJldHVybiBlO1xuICAgIH1cblxuICAgIGlmKHRoaXMucHJvcHMucGFnaW5hdGlvbil7XG4gICAgICAvL2lmIHBhZ2luYXRpb24gaXMgZW5hYmxlZCBhbmQgaW5zZXJ0IHJvdyBiZSB0cmlnZ2VyLCBjaGFuZ2UgdG8gbGFzdCBwYWdlXG4gICAgICBsZXQgc2l6ZVBlclBhZ2UgPSB0aGlzLnJlZnMucGFnaW5hdGlvbi5nZXRTaXplUGVyUGFnZSgpO1xuICAgICAgbGV0IGN1cnJMYXN0UGFnZSA9IE1hdGguY2VpbCh0aGlzLnN0b3JlLmdldERhdGFOdW0oKS9zaXplUGVyUGFnZSk7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoY3Vyckxhc3RQYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcy5wYWdpbmF0aW9uLmNoYW5nZVBhZ2UoY3Vyckxhc3RQYWdlKTtcbiAgICB9IGVsc2V7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5wcm9wcy5vcHRpb25zLmFmdGVySW5zZXJ0Um93KXtcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckluc2VydFJvdyhuZXdPYmopO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZURyb3BSb3coKXtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBkcm9wUm93S2V5cyA9IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKCk7XG4gICAgLy9hZGQgY29uZmlybSBiZWZvciB0aGUgZGVsZXRlIGFjdGlvblxuICAgIGlmKGRyb3BSb3dLZXlzJiZkcm9wUm93S2V5cy5sZW5ndGg+MCl7XG4gICAgICBpZighY29uZmlybSgnQXJlIHlvdSBzdXJlIHdhbnQgZGVsZXRlPycpKXtyZXR1cm59XG4gICAgfVxuICAgIHRoaXMuc3RvcmUucmVtb3ZlKGRyb3BSb3dLZXlzKTsgIC8vcmVtb3ZlIHNlbGVjdGVkIFJvd1xuICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRSb3dLZXkoW10pOyAgLy9jbGVhciBzZWxlY3RlZCByb3cga2V5XG5cbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgbGV0IHNpemVQZXJQYWdlID0gdGhpcy5yZWZzLnBhZ2luYXRpb24uZ2V0U2l6ZVBlclBhZ2UoKTtcbiAgICAgIGxldCBjdXJyTGFzdFBhZ2UgPSBNYXRoLmNlaWwodGhpcy5zdG9yZS5nZXREYXRhTnVtKCkvc2l6ZVBlclBhZ2UpO1xuICAgICAgbGV0IGN1cnJlbnRQYWdlID0gdGhpcy5yZWZzLnBhZ2luYXRpb24uZ2V0Q3VycmVudFBhZ2UoKTtcbiAgICAgIGlmKGN1cnJlbnRQYWdlID4gY3Vyckxhc3RQYWdlKVxuICAgICAgICBjdXJyZW50UGFnZSA9IGN1cnJMYXN0UGFnZTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShjdXJyZW50UGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzOiB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcy5wYWdpbmF0aW9uLmNoYW5nZVBhZ2UoY3VycmVudFBhZ2UpO1xuICAgIH1lbHNle1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckRlbGV0ZVJvdyl7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJEZWxldGVSb3coZHJvcFJvd0tleXMpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbHRlckRhdGEoZmlsdGVyT2JqKXtcbiAgICB0aGlzLnN0b3JlLmZpbHRlcihmaWx0ZXJPYmopO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYodGhpcy5wcm9wcy5wYWdpbmF0aW9uKXtcbiAgICAgIGxldCBzaXplUGVyUGFnZSA9IHRoaXMucmVmcy5wYWdpbmF0aW9uLmdldFNpemVQZXJQYWdlKCk7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoMSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5yZWZzLnBhZ2luYXRpb24uY2hhbmdlUGFnZSgxKTtcbiAgICB9ZWxzZXtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTZWFyY2goc2VhcmNoVGV4dCl7XG4gICAgdGhpcy5zdG9yZS5zZWFyY2goc2VhcmNoVGV4dCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgbGV0IHNpemVQZXJQYWdlID0gdGhpcy5yZWZzLnBhZ2luYXRpb24uZ2V0U2l6ZVBlclBhZ2UoKTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZSgxLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgICB0aGlzLnJlZnMucGFnaW5hdGlvbi5jaGFuZ2VQYWdlKDEpO1xuICAgIH1lbHNle1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlclBhZ2luYXRpb24oKXtcbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgcmV0dXJuKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxQYWdpbmF0aW9uTGlzdCByZWY9XCJwYWdpbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyclBhZ2U9e3RoaXMucHJvcHMub3B0aW9ucy5wYWdlIHx8IDF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVBhZ2U9e3RoaXMuaGFuZGxlUGFnaW5hdGlvbkRhdGEuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZVBlclBhZ2U9e3RoaXMucHJvcHMub3B0aW9ucy5zaXplUGVyUGFnZSB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1RbMF19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVQZXJQYWdlTGlzdD17dGhpcy5wcm9wcy5vcHRpb25zLnNpemVQZXJQYWdlTGlzdCB8fCBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb25TaXplPXt0aGlzLnByb3BzLm9wdGlvbnMucGFnaW5hdGlvblNpemUgfHwgQ29uc3QuUEFHSU5BVElPTl9TSVpFfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZT17dGhpcy5zdG9yZS5nZXREYXRhTnVtKCl9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKVxuICAgIH1lbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclRvb2xCYXIoKXtcbiAgICBsZXQgY29sdW1ucztcbiAgICBpZihBcnJheS5pc0FycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pKXtcbiAgICAgIGNvbHVtbnMgPSB0aGlzLnByb3BzLmNoaWxkcmVuLm1hcChmdW5jdGlvbihjb2x1bW4pe1xuICAgICAgICB2YXIgcHJvcHM9Y29sdW1uLnByb3BzO1xuICAgICAgICByZXR1cm4ge1xuLy8gPDw8PDw8PCBIRUFEXG4vLyAgICAgICAgICAgbmFtZTogY29sdW1uLnByb3BzLmNoaWxkcmVuLFxuLy8gICAgICAgICAgIGZpZWxkOiBjb2x1bW4ucHJvcHMuZGF0YUZpZWxkLFxuLy8gICAgICAgICAgIGVkaXRhYmxlOiBjb2x1bW4ucHJvcHMuZWRpdGFibGVcbi8vID09PT09PT1cbiAgICAgICAgICBuYW1lOiBwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBmaWVsZDogcHJvcHMuZGF0YUZpZWxkLFxuICAgICAgICAgIC8vd2hlbiB5b3Ugd2FudCBzYW1lIGF1dG8gZ2VuZXJhdGUgdmFsdWUgYW5kIG5vdCBhbGxvdyBlZGl0LCBleGFtcGxlIElEIGZpZWxkXG4gICAgICAgICAgYXV0b1ZhbHVlOnByb3BzLmF1dG9WYWx1ZXx8ZmFsc2UsXG4gICAgICAgICAgLy9mb3IgY3JlYXRlIGVpZHRvciwgbm8gcGFyYW1zIGZvciBjb2x1bW4uZWRpdGFibGUoKSBpbmRpY2F0ZSB0aGF0IGVkaXRvciBmb3IgbmV3IHJvd1xuICAgICAgICAgIGVkaXRhYmxlOnByb3BzLmVkaXRhYmxlJiYodHlwZW9mIHByb3BzLmVkaXRhYmxlPT09XCJmdW5jdGlvblwiKT9wcm9wcy5lZGl0YWJsZSgpOnByb3BzLmVkaXRhYmxlLFxuICAgICAgICAgIGZvcm1hdDpwcm9wcy5mb3JtYXQ/Zm9ybWF0OmZhbHNlXG4vLyA+Pj4+Pj4+IDk5Y2Q0NTlkZWZmZDUyNjJkODg2OTFlOGIwNzU5NzdiYzBhMjgxMWZcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW5zID0gW3tcbiAgICAgICAgbmFtZTogdGhpcy5wcm9wcy5jaGlsZHJlbi5wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgZmllbGQ6IHRoaXMucHJvcHMuY2hpbGRyZW4ucHJvcHMuZGF0YUZpZWxkLFxuICAgICAgICBlZGl0YWJsZTogdGhpcy5wcm9wcy5jaGlsZHJlbi5wcm9wcy5lZGl0YWJsZVxuICAgICAgfV07XG4gICAgfVxuICAgIGlmKHRoaXMucHJvcHMuaW5zZXJ0Um93IHx8IHRoaXMucHJvcHMuZGVsZXRlUm93IHx8IHRoaXMucHJvcHMuc2VhcmNoKXtcbiAgICAgIHJldHVybihcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0b29sLWJhclwiPlxuICAgICAgICAgIDxUb29sQmFyIGVuYWJsZUluc2VydD17dGhpcy5wcm9wcy5pbnNlcnRSb3d9XG4gICAgICAgICAgICAgICAgICAgZW5hYmxlRGVsZXRlPXt0aGlzLnByb3BzLmRlbGV0ZVJvd31cbiAgICAgICAgICAgICAgICAgICBlbmFibGVTZWFyY2g9e3RoaXMucHJvcHMuc2VhcmNofVxuICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9e3RoaXMucHJvcHMuc2VhcmNoUGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgb25BZGRSb3c9e3RoaXMuaGFuZGxlQWRkUm93LmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgb25BZGRSb3dCZWdpbj17dGhpcy5oYW5kbGVBZGRSb3dCZWdpbi5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgIG9uRHJvcFJvdz17dGhpcy5oYW5kbGVEcm9wUm93LmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e3RoaXMuaGFuZGxlU2VhcmNoLmJpbmQodGhpcyl9Lz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApXG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXJUYWJsZUZpbHRlcihjb2x1bW5zKXtcbiAgICBpZih0aGlzLnByb3BzLmNvbHVtbkZpbHRlcil7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGFibGVGaWx0ZXIgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgIHJvd1NlbGVjdFR5cGU9e3RoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGV9XG4gICAgICAgICAgICAgICAgICAgICBvbkZpbHRlcj17dGhpcy5oYW5kbGVGaWx0ZXJEYXRhLmJpbmQodGhpcyl9Lz5cbiAgICAgICk7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbkJvb3RzdHJhcFRhYmxlLnByb3BUeXBlcyA9IHtcbiAgaGVpZ2h0OiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRhOiBSZWFjdC5Qcm9wVHlwZXMuYXJyYXksXG4gIHN0cmlwZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBob3ZlcjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNvbmRlbnNlZDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2luYXRpb246IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hQbGFjZWhvbGRlcjogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0Um93OiBSZWFjdC5Qcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgYmdDb2xvcjogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZDogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uU2VsZWN0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgICBvblNlbGVjdEFsbDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xpY2tUb1NlbGVjdDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gICAgaGlkZVNlbGVjdENvbHVtbjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbFxuICB9KSxcbiAgY2VsbEVkaXQ6IFJlYWN0LlByb3BUeXBlcy5zaGFwZSh7XG4gICAgbW9kZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgICBibHVyVG9TYXZlOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgICBhZnRlclNhdmVDZWxsOiBSZWFjdC5Qcm9wVHlwZXMuZnVuY1xuICB9KSxcbiAgaW5zZXJ0Um93OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgZGVsZXRlUm93OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgY29sdW1uRmlsdGVyOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgdHJDbGFzc05hbWU6IFJlYWN0LlByb3BUeXBlcy5hbnksXG4gIG9wdGlvbnM6IFJlYWN0LlByb3BUeXBlcy5zaGFwZSh7XG4gICAgc29ydE5hbWU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgc29ydE9yZGVyOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFmdGVyVGFibGVDb21wbGV0ZTogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJEZWxldGVSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICAgIGFmdGVySW5zZXJ0Um93OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgICBwYWdlOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICAgIHNpemVQZXJQYWdlTGlzdDogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICAgIHNpemVQZXJQYWdlOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICAgIHBhZ2luYXRpb25TaXplOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyXG4gIH0pXG59O1xuQm9vdHN0cmFwVGFibGUuZGVmYXVsdFByb3BzID0ge1xuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICBzdHJpcGVkOiBmYWxzZSxcbiAgaG92ZXI6IGZhbHNlLFxuICBjb25kZW5zZWQ6IGZhbHNlLFxuICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgc2VsZWN0Um93OiB7XG4gICAgbW9kZTogQ29uc3QuUk9XX1NFTEVDVF9OT05FLFxuICAgIGJnQ29sb3I6IENvbnN0LlJPV19TRUxFQ1RfQkdfQ09MT1IsXG4gICAgc2VsZWN0ZWQ6IFtdLFxuICAgIG9uU2VsZWN0OiB1bmRlZmluZWQsXG4gICAgb25TZWxlY3RBbGw6IHVuZGVmaW5lZCxcbiAgICBjbGlja1RvU2VsZWN0OiBmYWxzZSxcbiAgICBoaWRlU2VsZWN0Q29sdW1uOiBmYWxzZSxcbiAgICBjbGlja1RvU2VsZWN0QW5kRWRpdENlbGw6IGZhbHNlXG4gIH0sXG4gIGNlbGxFZGl0OntcbiAgICBtb2RlOiBDb25zdC5DRUxMX0VESVRfTk9ORSxcbiAgICBibHVyVG9TYXZlOiBmYWxzZSxcbiAgICBhZnRlclNhdmVDZWxsOiB1bmRlZmluZWRcbiAgfSxcbiAgaW5zZXJ0Um93OiBmYWxzZSxcbiAgZGVsZXRlUm93OiBmYWxzZSxcbiAgc2VhcmNoOiBmYWxzZSxcbiAgY29sdW1uRmlsdGVyOiBmYWxzZSxcbiAgdHJDbGFzc05hbWU6ICcnLFxuICBvcHRpb25zOiB7XG4gICAgc29ydE5hbWU6IHVuZGVmaW5lZCxcbiAgICBzb3J0T3JkZXI6IENvbnN0LlNPUlRfREVTQyxcbiAgICBhZnRlclRhYmxlQ29tcGxldGU6IHVuZGVmaW5lZCxcbiAgICBhZnRlckRlbGV0ZVJvdzogdW5kZWZpbmVkLFxuICAgIGFmdGVySW5zZXJ0Um93OiB1bmRlZmluZWQsXG4gICAgcGFnZTogMSxcbiAgICBzaXplUGVyUGFnZUxpc3Q6IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVCxcbiAgICBzaXplUGVyUGFnZTogQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUWzBdLFxuICAgIHBhZ2luYXRpb25TaXplOiBDb25zdC5QQUdJTkFUSU9OX1NJWkVcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQm9vdHN0cmFwVGFibGU7XG4iLCJleHBvcnQgZGVmYXVsdCB7XG4gIFNPUlRfREVTQzogXCJkZXNjXCIsXG4gIFNPUlRfQVNDOiBcImFzY1wiLFxuICBTSVpFX1BFUl9QQUdFOiAxMCxcbiAgTkVYVF9QQUdFOiBcIj5cIixcbiAgTEFTVF9QQUdFOiBcIj4+XCIsXG4gIFBSRV9QQUdFOiBcIjxcIixcbiAgRklSU1RfUEFHRTogXCI8PFwiLFxuICBST1dfU0VMRUNUX0JHX0NPTE9SOiBcIlwiLFxuICBST1dfU0VMRUNUX05PTkU6IFwibm9uZVwiLFxuICBST1dfU0VMRUNUX1NJTkdMRTogXCJyYWRpb1wiLFxuICBST1dfU0VMRUNUX01VTFRJOiBcImNoZWNrYm94XCIsXG4gIENFTExfRURJVF9OT05FOiBcIm5vbmVcIixcbiAgQ0VMTF9FRElUX0NMSUNLOiBcImNsaWNrXCIsXG4gIENFTExfRURJVF9EQkNMSUNLOiBcImRiY2xpY2tcIixcbiAgU0laRV9QRVJfUEFHRV9MSVNUOiBbMTAsIDI1LCAzMCwgNTBdLFxuICBQQUdJTkFUSU9OX1NJWkU6IDVcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgRWRpdG9yPWZ1bmN0aW9uKGVkaXRhYmxlLCBhdHRyLCBmb3JtYXQsIGVkaXRvckNsYXNzLCBkZWZhdWx0VmFsdWUpe1xuXG5cbiAgICBpZihlZGl0YWJsZT09PXRydWV8fHR5cGVvZiBlZGl0YWJsZT09PVwic3RyaW5nXCIpey8vc2ltcGxlIGRlY2xhcmVcbiAgICAgICAgdmFyIHR5cGU9ZWRpdGFibGU9PT10cnVlPyd0ZXh0JzplZGl0YWJsZTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxpbnB1dCB7Li4uYXR0cn0gdHlwZT17dHlwZX0gZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsoZWRpdG9yQ2xhc3N8fFwiXCIpK1wiIGZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0XCJ9IC8+XG4gICAgICAgIClcbiAgICB9IGVsc2UgaWYoIWVkaXRhYmxlKXtcbiAgICAgIHZhciB0eXBlPWVkaXRhYmxlPT09dHJ1ZT8ndGV4dCc6ZWRpdGFibGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAgIDxpbnB1dCB7Li4uYXR0cn0gdHlwZT17dHlwZX0gZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9IGRpc2FibGVkPSdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsoZWRpdG9yQ2xhc3N8fFwiXCIpK1wiIGZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC10ZXh0XCJ9IC8+XG4gICAgICApXG4gICAgfSBlbHNlIGlmKGVkaXRhYmxlLnR5cGUpey8vc3RhbmRhcmQgZGVjbGFyZVxuICAgICAgICAvL3B1dCBzdHlsZSBpZiBleGlzdFxuICAgICAgICBlZGl0YWJsZS5zdHlsZSYmKGF0dHIuc3R5bGU9ZWRpdGFibGUuc3R5bGUpO1xuXG4gICAgICAgIC8vcHV0IGNsYXNzIGlmIGV4aXN0XG4gICAgICAgIGF0dHIuY2xhc3NOYW1lID0gKGVkaXRvckNsYXNzfHxcIlwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgXCIgZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LVwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZS50eXBlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAoZWRpdGFibGUuY2xhc3NOYW1lPyhcIiBcIitlZGl0YWJsZS5jbGFzc05hbWUpOlwiXCIpO1xuXG4gICAgICAgIGlmKGVkaXRhYmxlLnR5cGUgPT09ICdzZWxlY3QnKXsvL3Byb2Nlc3Mgc2VsZWN0IGlucHV0XG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IFtdLCB2YWx1ZXM9ZWRpdGFibGUub3B0aW9ucy52YWx1ZXM7XG4gICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHZhbHVlcykpey8vb25seSBjYW4gdXNlIGFycnJheSBkYXRhIGZvciBvcHRpb25zXG4gICAgICAgICAgICAgICAgdmFyIHJvd1ZhbHVlO1xuICAgICAgICAgICAgICAgIG9wdGlvbnM9dmFsdWVzLm1hcChmdW5jdGlvbihkLGkpe1xuICAgICAgICAgICAgICAgICAgICByb3dWYWx1ZT1mb3JtYXQ/Zm9ybWF0KGQpOmQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXsnb3B0aW9uJytpfSB2YWx1ZT17ZH0+e3Jvd1ZhbHVlfTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICAgICAgPHNlbGVjdCB7Li4uYXR0cn0gZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9PntvcHRpb25zfTwvc2VsZWN0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmKGVkaXRhYmxlLnR5cGUgPT09ICd0ZXh0YXJlYScpey8vcHJvY2VzcyB0ZXh0YXJlYSBpbnB1dFxuICAgICAgICAgICAgLy9wdXQgIG90aGVyIGlmIGV4aXN0XG4gICAgICAgICAgICBlZGl0YWJsZS5jb2xzJiYoYXR0ci5jb2xzPWVkaXRhYmxlLmNvbHMpO1xuICAgICAgICAgICAgZWRpdGFibGUucm93cyYmKGF0dHIucm93cz1lZGl0YWJsZS5yb3dzKTtcbiAgICAgICAgICAgIHZhciBrZXlVcEhhbmRsZXI9YXR0ci5vbktleURvd24sc2F2ZUJ0bj1udWxsO1xuICAgICAgICAgICAgaWYoa2V5VXBIYW5kbGVyKXtcbiAgICAgICAgICAgICAgICBhdHRyLm9uS2V5RG93bj1mdW5jdGlvbihlKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSAhPSAxMykgeyAvL25vdCBQcmVzc2VkIEVOVEVSXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlVcEhhbmRsZXIoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHNhdmVCdG49PGJ1dHRvIGNsYXNzTmFtZT1cImJ0biBidG4taW5mbyBidG4teHMgdGV4dGFyZWEtc2F2ZS1idG5cIiBvbkNsaWNrPXtrZXlVcEhhbmRsZXJ9PnNhdmU8L2J1dHRvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHsuLi5hdHRyfSBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX0+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAge3NhdmVCdG59XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZihlZGl0YWJsZS50eXBlID09PSAnY2hlY2tib3gnKXtcbiAgICAgICAgICBsZXQgdmFsdWVzID0gJ3RydWU6ZmFsc2UnO1xuICAgICAgICAgIGlmKGVkaXRhYmxlLm9wdGlvbnMgJiYgZWRpdGFibGUub3B0aW9ucy52YWx1ZXMpe1xuICAgICAgICAgICAgLy8gdmFsdWVzID0gZWRpdGFibGUub3B0aW9ucy52YWx1ZXMuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHZhbHVlcyA9IGVkaXRhYmxlLm9wdGlvbnMudmFsdWVzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyLmNsYXNzTmFtZSA9IGF0dHIuY2xhc3NOYW1lLnJlcGxhY2UoJ2Zvcm0tY29udHJvbCcsJycpO1xuICAgICAgICAgIGF0dHIuY2xhc3NOYW1lICs9ICcgY2hlY2tib3ggcHVsbC1yaWdodCc7XG5cbiAgICAgICAgICBsZXQgY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZSA9PSB2YWx1ZXMuc3BsaXQoJzonKVswXT90cnVlOmZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxpbnB1dCB7Li4uYXR0cn0gdHlwZT0nY2hlY2tib3gnIHZhbHVlPXt2YWx1ZXN9IGRlZmF1bHRDaGVja2VkPXtjaGVja2VkfS8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNley8vcHJvY2VzcyBvdGhlciBpbnB1dCB0eXBlLiBhcyBwYXNzd29yZCx1cmwsZW1haWwuLi5cbiAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICA8aW5wdXQgey4uLmF0dHJ9IHR5cGU9e3R5cGV9IGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfS8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9kZWZhdWx0IHJldHVybiBmb3Igb3RoZXIgY2FzZSBvZiBlZGl0YWJsZVxuICAgIHJldHVybihcbiAgICAgICAgPGlucHV0IHsuLi5hdHRyfSB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT17KGVkaXRvckNsYXNzfHxcIlwiKStcIiBmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dFwifS8+XG4gICAgKVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRWRpdG9yO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBUb2FzdHIgZnJvbSAncmVhY3QtdG9hc3RyJztcblxudmFyIFRvYXN0ckNvbnRhaW5lcj1Ub2FzdHIuVG9hc3RDb250YWluZXI7XG52YXIgVG9hc3RyTWVzc2FnZUZhY3Rvcnk9UmVhY3QuY3JlYXRlRmFjdG9yeShUb2FzdHIuVG9hc3RNZXNzYWdlLmFuaW1hdGlvbik7XG5cbmNsYXNzIE5vdGlmaWNhdGlvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcbiAgLy8gYWxsb3cgdHlwZSBpcyBzdWNjZXNzLGluZm8sd2FybmluZyxlcnJvclxuICBub3RpY2UodHlwZSxtc2csdGl0bGUpe1xuICAgIHRoaXMucmVmcy50b2FzdHJbdHlwZV0oXG4gICAgICAgIG1zZyx0aXRsZSwge1xuICAgICAgICAgIG1vZGU6J3NpbmdsZScsXG4gICAgICAgICAgdGltZU91dDogNTAwMCxcbiAgICAgICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDAsXG4gICAgICAgICAgc2hvd0FuaW1hdGlvbjogXCJhbmltYXRlZCAgYm91bmNlSW5cIixcbiAgICAgICAgICBoaWRlQW5pbWF0aW9uOiBcImFuaW1hdGVkIGJvdW5jZU91dFwiXG4gICAgICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgcmV0dXJuKFxuICAgICAgICA8VG9hc3RyQ29udGFpbmVyIHJlZj1cInRvYXN0clwiIHRvYXN0TWVzc2FnZUZhY3Rvcnk9e1RvYXN0ck1lc3NhZ2VGYWN0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidG9hc3QtY29udGFpbmVyXCIgIGNsYXNzTmFtZT1cInRvYXN0LXRvcC1yaWdodFwiPjwvVG9hc3RyQ29udGFpbmVyPlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOb3RpZmljYXRpb247XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuXG5jbGFzcyBTZWxlY3RSb3dIZWFkZXJDb2x1bW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIHRoU3R5bGUgPSB7XG4gICAgICB3aWR0aDogMzVcbiAgICB9O1xuXG4gICAgcmV0dXJuKFxuICAgICAgPHRoIHN0eWxlPXt0aFN0eWxlfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aC1pbm5lciB0YWJsZS1oZWFkZXItY29sdW1uXCI+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90aD5cbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0Um93SGVhZGVyQ29sdW1uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBUYWJsZVJvdyBmcm9tICcuL1RhYmxlUm93JztcbmltcG9ydCBUYWJsZUNvbHVtbiBmcm9tICcuL1RhYmxlQ29sdW1uJztcbmltcG9ydCBUYWJsZUVkaXRDb2x1bW4gZnJvbSAnLi9UYWJsZUVkaXRDb2x1bW4nO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG52YXIgaXNGdW49ZnVuY3Rpb24ob2JqKXtcbiAgcmV0dXJuIG9iaiYmKHR5cGVvZiBvYmo9PT1cImZ1bmN0aW9uXCIpO1xuXG59O1xuY2xhc3MgVGFibGVCb2R5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjdXJyRWRpdENlbGw6IG51bGxcbiAgICB9O1xuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIGNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc1NldChcInRhYmxlLWNvbnRhaW5lclwiKTtcblxuICAgIHZhciB0YWJsZUNsYXNzZXMgPSBjbGFzc1NldChcInRhYmxlXCIsIFwidGFibGUtYm9yZGVyZWRcIiwge1xuICAgICAgJ3RhYmxlLXN0cmlwZWQnOiB0aGlzLnByb3BzLnN0cmlwZWQsXG4gICAgICAndGFibGUtaG92ZXInOiB0aGlzLnByb3BzLmhvdmVyLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IHRoaXMucHJvcHMuY29uZGVuc2VkXG4gICAgfSk7XG5cbiAgICB2YXIgaXNTZWxlY3RSb3dEZWZpbmVkID0gdGhpcy5faXNTZWxlY3RSb3dEZWZpbmVkKCk7XG4gICAgdmFyIHRhYmxlSGVhZGVyID0gdGhpcy5yZW5kZXJUYWJsZUhlYWRlcihpc1NlbGVjdFJvd0RlZmluZWQpO1xuXG4gICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucHJvcHMuZGF0YS5tYXAoZnVuY3Rpb24oZGF0YSwgcil7XG4gICAgICB2YXIgdGFibGVDb2x1bW5zID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpe1xuICAgICAgICB2YXIgZmllbGRWYWx1ZSA9IGRhdGFbY29sdW1uLm5hbWVdO1xuICAgICAgICBpZih0aGlzLmVkaXRpbmcgJiZcbiAgICAgICAgICBjb2x1bW4ubmFtZSAhPT0gdGhpcy5wcm9wcy5rZXlGaWVsZCAmJiAvLyBLZXkgZmllbGQgY2FuJ3QgYmUgZWRpdFxuICAgICAgICAgIGNvbHVtbi5lZGl0YWJsZSAmJiAvLyBjb2x1bW4gaXMgZWRpdGFibGU/IGRlZmF1bHQgaXMgdHJ1ZSwgdXNlciBjYW4gc2V0IGl0IGZhbHNlXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyRWRpdENlbGwgIT0gbnVsbCAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsLnJpZCA9PSByICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyRWRpdENlbGwuY2lkID09IGkpe1xuICAgICAgICAgICAgdmFyIGZvcm1hdD1jb2x1bW4uZm9ybWF0P2Z1bmN0aW9uKHZhbHVlKXtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5mb3JtYXQodmFsdWUsZGF0YSkucmVwbGFjZSgvPC4qPz4vZywnJyk7XG4gICAgICAgICAgICB9OmZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICA8VGFibGVFZGl0Q29sdW1uIGNvbXBsZXRlRWRpdD17dGhpcy5oYW5kbGVDb21wbGV0ZUVkaXRDZWxsLmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hZGQgYnkgYmx1ZXNwcmluZyBmb3IgY29sdW1uIGVkaXRvciBjdXN0b21pemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZT17aXNGdW4oY29sdW1uLmVkaXRhYmxlKT9jb2x1bW4uZWRpdGFibGUoZmllbGRWYWx1ZSxkYXRhLHIsaSk6Y29sdW1uLmVkaXRhYmxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD17Y29sdW1uLmZvcm1hdD9mb3JtYXQ6ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdXJUb1NhdmU9e3RoaXMucHJvcHMuY2VsbEVkaXQuYmx1clRvU2F2ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleD17cn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleD17aX0+XG4gICAgICAgICAgICAgICAge2ZpZWxkVmFsdWV9XG4gICAgICAgICAgICAgIDwvVGFibGVFZGl0Q29sdW1uPlxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgLy9hZGQgYnkgYmx1ZXNwcmluZyBmb3IgY2xhc3NOYW1lIGN1c3RvbWl6ZVxuICAgICAgICAgIHZhciB0ZENsYXNzTmFtZT1pc0Z1bihjb2x1bW4uY2xhc3NOYW1lKT9jb2x1bW4uY2xhc3NOYW1lKGZpZWxkVmFsdWUsZGF0YSxyLGkpOmNvbHVtbi5jbGFzc05hbWU7XG5cbiAgICAgICAgICBpZih0eXBlb2YgY29sdW1uLmZvcm1hdCAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICB2YXIgZm9ybWF0dGVkVmFsdWUgPSBjb2x1bW4uZm9ybWF0KGZpZWxkVmFsdWUsIGRhdGEpO1xuICAgICAgICAgICAgaWYgKCFSZWFjdC5pc1ZhbGlkRWxlbWVudChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBmb3JtYXR0ZWRWYWx1ZX19PjwvZGl2PjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgPFRhYmxlQ29sdW1uIGRhdGFBbGlnbj17Y29sdW1uLmFsaWdufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0ZENsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxFZGl0PXt0aGlzLnByb3BzLmNlbGxFZGl0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb25FZGl0PXt0aGlzLmhhbmRsZUVkaXRDZWxsLmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Y29sdW1uLndpZHRofT5cbiAgICAgICAgICAgICAgICB7Zm9ybWF0dGVkVmFsdWV9XG4gICAgICAgICAgICAgIDwvVGFibGVDb2x1bW4+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICA8VGFibGVDb2x1bW4gZGF0YUFsaWduPXtjb2x1bW4uYWxpZ259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RkQ2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbEVkaXQ9e3RoaXMucHJvcHMuY2VsbEVkaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49e2NvbHVtbi5oaWRkZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVkaXQ9e3RoaXMuaGFuZGxlRWRpdENlbGwuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtjb2x1bW4ud2lkdGh9PlxuICAgICAgICAgICAgICAgIHtmaWVsZFZhbHVlfVxuICAgICAgICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnByb3BzLnNlbGVjdGVkUm93S2V5cy5pbmRleE9mKGRhdGFbdGhpcy5wcm9wcy5rZXlGaWVsZF0pICE9IC0xO1xuLy8gPDw8PDw8PCBIRUFEXG4gICAgICB2YXIgc2VsZWN0Um93Q29sdW1uID0gaXNTZWxlY3RSb3dEZWZpbmVkICYmICF0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTZWxlY3RSb3dDb2x1bW4oc2VsZWN0ZWQpOm51bGw7XG4vLyA9PT09PT09XG4gICAgICAvLyB2YXIgc2VsZWN0Um93Q29sdW1uID0gaXNTZWxlY3RSb3dEZWZpbmVkP3RoaXMucmVuZGVyU2VsZWN0Um93Q29sdW1uKHNlbGVjdGVkKTpudWxsO1xuICAgICAgLy9hZGQgYnkgYmx1ZXNwcmluZyBmb3IgY2xhc3NOYW1lIGN1c3RvbWl6ZVxuICAgICAgdmFyIHRyQ2xhc3NOYW1lPWlzRnVuKHRoaXMucHJvcHMudHJDbGFzc05hbWUpP3RoaXMucHJvcHMudHJDbGFzc05hbWUoZGF0YSxyKTp0aGlzLnByb3BzLnRyQ2xhc3NOYW1lO1xuLy8gPj4+Pj4+PiA5OWNkNDU5ZGVmZmQ1MjYyZDg4NjkxZThiMDc1OTc3YmMwYTI4MTFmXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGFibGVSb3cgaXNTZWxlY3RlZD17c2VsZWN0ZWR9IGtleT17cn0gY2xhc3NOYW1lPXt0ckNsYXNzTmFtZX1cbiAgICAgICAgICBzZWxlY3RSb3c9e2lzU2VsZWN0Um93RGVmaW5lZD90aGlzLnByb3BzLnNlbGVjdFJvdzp1bmRlZmluZWR9XG4gICAgICAgICAgZW5hYmxlQ2VsbEVkaXQ9e3RoaXMucHJvcHMuY2VsbEVkaXQubW9kZSAhPT0gQ29uc3QuQ0VMTF9FRElUX05PTkV9XG4gICAgICAgICAgb25TZWxlY3RSb3c9e3RoaXMuaGFuZGxlU2VsZWN0Um93LmJpbmQodGhpcyl9PlxuICAgICAgICAgIHtzZWxlY3RSb3dDb2x1bW59XG4gICAgICAgICAge3RhYmxlQ29sdW1uc31cbiAgICAgICAgPC9UYWJsZVJvdz5cbiAgICAgIClcbiAgICB9LCB0aGlzKTtcblxuICAgIGlmKHRhYmxlUm93cy5sZW5ndGggPT09IDApe1xuICAgICAgdGFibGVSb3dzLnB1c2goXG4gICAgICA8VGFibGVSb3cga2V5PVwiIyN0YWJsZS1lbXB0eSMjXCI+XG4gICAgICAgIDx0ZCBjb2xTcGFuPXt0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoKyhpc1NlbGVjdFJvd0RlZmluZWQ/MTowKX1cbiAgICAgICAgICAgIHN0eWxlPXt7IHRleHRBbGlnbjogXCJjZW50ZXJcIiB9fT5cbiAgICAgICAgICAgIFRoZXJlIGlzIG5vIGRhdGEgdG8gZGlzcGxheVxuICAgICAgICA8L3RkPlxuICAgICAgPC9UYWJsZVJvdz4pO1xuICAgIH1cblxuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgIHJldHVybihcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjb250YWluZXJDbGFzc2VzfT5cbiAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGFibGVDbGFzc2VzfT5cbiAgICAgICAgICB7dGFibGVIZWFkZXJ9XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAge3RhYmxlUm93c31cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmVuZGVyVGFibGVIZWFkZXIoaXNTZWxlY3RSb3dEZWZpbmVkKXtcbiAgICB2YXIgc2VsZWN0Um93SGVhZGVyID0gbnVsbDtcblxuICAgIGlmKGlzU2VsZWN0Um93RGVmaW5lZCl7XG4gICAgICBsZXQgc3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOjM1XG4gICAgICB9XG4gICAgICBzZWxlY3RSb3dIZWFkZXIgPSB0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uP251bGw6KDx0aCBzdHlsZT17c3R5bGV9IGtleT17LTF9PjwvdGg+KTtcbiAgICB9XG4gICAgdmFyIHRoZWFkZXIgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICBsZXQgc3R5bGU9e1xuICAgICAgICBkaXNwbGF5OiBjb2x1bW4uaGlkZGVuP1wibm9uZVwiOm51bGwsXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGhcbiAgICAgIH07XG4gICAgICByZXR1cm4gKDx0aCBzdHlsZT17c3R5bGV9IGtleT17aX0gY2xhc3NOYW1lPXtjb2x1bW4uY2xhc3NOYW1lfT48L3RoPik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4oXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj57c2VsZWN0Um93SGVhZGVyfXt0aGVhZGVyfTwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgIClcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdFJvdyhyb3dJbmRleCwgaXNTZWxlY3RlZCl7XG4gICAgdmFyIGtleSwgc2VsZWN0ZWRSb3c7XG4gICAgdGhpcy5wcm9wcy5kYXRhLmZvckVhY2goZnVuY3Rpb24ocm93LCBpKXtcbiAgICAgIGlmKGkgPT0gcm93SW5kZXgtMSl7XG4gICAgICAgIGtleSA9IHJvd1t0aGlzLnByb3BzLmtleUZpZWxkXTtcbiAgICAgICAgc2VsZWN0ZWRSb3cgPSByb3c7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5wcm9wcy5vblNlbGVjdFJvdyhzZWxlY3RlZFJvdywgaXNTZWxlY3RlZCk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3RSb3dDb2x1bUNoYW5nZShlKXtcbiAgICBpZighdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCB8fCAhdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKXtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Um93KFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnJvd0luZGV4LCBlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRWRpdENlbGwocm93SW5kZXgsIGNvbHVtbkluZGV4KXtcbiAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xuICAgIGlmKHRoaXMuX2lzU2VsZWN0Um93RGVmaW5lZCgpKXtcbiAgICAgIGNvbHVtbkluZGV4LS07XG4gICAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uKVxuICAgICAgICBjb2x1bW5JbmRleCsrO1xuICAgIH1cbiAgICByb3dJbmRleC0tO1xuICAgIHZhciBzdGF0ZU9iaiA9IHtcbiAgICAgIGN1cnJFZGl0Q2VsbDoge1xuICAgICAgICByaWQ6IHJvd0luZGV4LFxuICAgICAgICBjaWQ6IGNvbHVtbkluZGV4XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmKHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbCl7XG4gICAgICAvL2lmIGVkaXQgY2VsbCwgdHJpZ2dlciByb3cgc2VsZWN0aW9ucyBhbHNvXG4gICAgICBsZXQgc2VsZWN0ZWQgPSB0aGlzLnByb3BzLnNlbGVjdGVkUm93S2V5cy5pbmRleE9mKHRoaXMucHJvcHMuZGF0YVtyb3dJbmRleF1bdGhpcy5wcm9wcy5rZXlGaWVsZF0pICE9IC0xO1xuICAgICAgdGhpcy5oYW5kbGVTZWxlY3RSb3cocm93SW5kZXgrMSwgIXNlbGVjdGVkKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZU9iaik7XG4gIH1cblxuICBjYW5jZWxFZGl0KCl7XG4gICAgdmFyIGN1cnJFZGl0Q2VsbD10aGlzLnN0YXRlLmN1cnJFZGl0Q2VsbDtcbiAgICBpZihjdXJyRWRpdENlbGwpe1xuICAgICAgdGhpcy5oYW5kbGVDb21wbGV0ZUVkaXRDZWxsKG51bGwsY3VyckVkaXRDZWxsLnJpZCxjdXJyRWRpdENlbGwuY2lkKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDb21wbGV0ZUVkaXRDZWxsKG5ld1ZhbCwgcm93SW5kZXgsIGNvbHVtbkluZGV4KXtcbiAgICB0aGlzLnNldFN0YXRlKHtjdXJyRWRpdENlbGw6IG51bGx9KTtcbiAgICBpZihudWxsICE9IG5ld1ZhbClcbiAgICAgIHRoaXMucHJvcHMuY2VsbEVkaXQuX19vbkNvbXBsZXRlRWRpdF9fKG5ld1ZhbCwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxuXG4gIHJlbmRlclNlbGVjdFJvd0NvbHVtbihzZWxlY3RlZCl7XG4gICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgcmV0dXJuICg8VGFibGVDb2x1bW4+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzZWxlY3Rpb25cIiBjaGVja2VkPXtzZWxlY3RlZH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UuYmluZCh0aGlzKX0vPjwvVGFibGVDb2x1bW4+KTtcbiAgICB9ZWxzZSB7XG4gICAgICByZXR1cm4gKDxUYWJsZUNvbHVtbiA+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNoZWNrZWQ9e3NlbGVjdGVkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3RSb3dDb2x1bUNoYW5nZS5iaW5kKHRoaXMpfS8+PC9UYWJsZUNvbHVtbj4pO1xuICAgIH1cbiAgfVxuXG4gIF9pc1NlbGVjdFJvd0RlZmluZWQoKXtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSB8fFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSTtcbiAgfVxufVxuVGFibGVCb2R5LnByb3BUeXBlcyA9IHtcbiAgZGF0YTogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICBjb2x1bW5zOiBSZWFjdC5Qcm9wVHlwZXMuYXJyYXksXG4gIHN0cmlwZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBob3ZlcjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNvbmRlbnNlZDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGtleUZpZWxkOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBzZWxlY3RlZFJvd0tleXM6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgb25TZWxlY3RSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVCb2R5O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcblxuY2xhc3MgVGFibGVDb2x1bW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG4gIH1cblxuICBoYW5kbGVDZWxsRWRpdChlKXtcbiAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT0gQ29uc3QuQ0VMTF9FRElUX0RCQ0xJQ0spe1xuICAgICAgaWYoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuICAgICAgICBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTtcbiAgICAgIH0gZWxzZSBpZih3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJvcHMub25FZGl0KFxuICAgICAgZS5jdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQucm93SW5kZXgsXG4gICAgICBlLmN1cnJlbnRUYXJnZXQuY2VsbEluZGV4KTtcbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciB0ZFN0eWxlID0ge1xuICAgICAgdGV4dEFsaWduOiB0aGlzLnByb3BzLmRhdGFBbGlnbixcbiAgICAgIGRpc3BsYXk6IHRoaXMucHJvcHMuaGlkZGVuP1wibm9uZVwiOm51bGxcbiAgICB9O1xuXG4gICAgdmFyIG9wdHMgPSB7fTtcbiAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0KXtcbiAgICAgIGlmKHRoaXMucHJvcHMuY2VsbEVkaXQubW9kZSA9PSBDb25zdC5DRUxMX0VESVRfQ0xJQ0spe1xuICAgICAgICBvcHRzLm9uQ2xpY2sgPSB0aGlzLmhhbmRsZUNlbGxFZGl0LmJpbmQodGhpcyk7XG4gICAgICB9ZWxzZSBpZih0aGlzLnByb3BzLmNlbGxFZGl0Lm1vZGUgPT0gQ29uc3QuQ0VMTF9FRElUX0RCQ0xJQ0spe1xuICAgICAgICBvcHRzLm9uRG91YmxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNlbGxFZGl0LmJpbmQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGQgc3R5bGU9e3RkU3R5bGV9IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9IHsuLi5vcHRzfT5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L3RkPlxuICAgIClcbiAgfVxufVxuVGFibGVDb2x1bW4ucHJvcFR5cGVzID0ge1xuICBkYXRhQWxpZ246IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZGRlbjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTpSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5UYWJsZUNvbHVtbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGRhdGFBbGlnbjogXCJsZWZ0XCIsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGNsYXNzTmFtZTpcIlwiXG59XG5leHBvcnQgZGVmYXVsdCBUYWJsZUNvbHVtbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgRWRpdG9yIGZyb20gJy4vRWRpdG9yJ1xuaW1wb3J0IE5vdGlmaWVyIGZyb20gJy4vTm90aWZpY2F0aW9uLmpzJztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgVGFibGVFZGl0Q29sdW1uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnRpbWVvdXRlQ2xlYXI9MDtcbiAgICAgICAgdGhpcy5zdGF0ZT17XG4gICAgICAgICAgICBzaGFrZUVkaXRvcjpmYWxzZVxuICAgICAgICB9O1xuICAgIH1cblxuICBoYW5kbGVLZXlQcmVzcyhlKXtcbiAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7IC8vUHJlc3NlZCBFTlRFUlxuICAgICAgbGV0IHZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnR5cGUgPT0gJ2NoZWNrYm94Jz9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0Q2hlY2tCb3hWYWx1ZShlKTplLmN1cnJlbnRUYXJnZXQudmFsdWU7XG5cbiAgICAgIGlmKCF0aGlzLnZhbGlkYXRvcih2YWx1ZSkpe1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICB2YWx1ZSwgdGhpcy5wcm9wcy5yb3dJbmRleCwgdGhpcy5wcm9wcy5jb2xJbmRleCk7XG4gICAgfWVsc2UgaWYoZS5rZXlDb2RlID09IDI3KXtcbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICBudWxsLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVCbHVyKGUpe1xuICAgIGlmKHRoaXMucHJvcHMuYmx1clRvU2F2ZSl7XG4gICAgICBsZXQgdmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudHlwZSA9PSAnY2hlY2tib3gnP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRDaGVja0JveFZhbHVlKGUpOmUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgIGlmKCF0aGlzLnZhbGlkYXRvcih2YWx1ZSkpe1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMuY29tcGxldGVFZGl0KFxuICAgICAgICAgIHZhbHVlLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9XG4gIH1cbiAgdmFsaWRhdG9yKHZhbHVlKXtcbiAgICAgIHZhciB0cz10aGlzO1xuICAgICAgaWYodHMucHJvcHMuZWRpdGFibGUudmFsaWRhdG9yKXtcbiAgICAgICAgICB2YXIgdmFsaWQ9dHMucHJvcHMuZWRpdGFibGUudmFsaWRhdG9yKHZhbHVlKTtcbiAgICAgICAgICBpZih2YWxpZCE9PXRydWUpe1xuICAgICAgICAgICAgICB0cy5yZWZzLm5vdGlmaWVyLm5vdGljZSgnZXJyb3InLHZhbGlkLFwiUHJlc3NlZCBFU0MgY2FuIGNhbmNlbFwiKTtcbiAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdHMucmVmcy5pbnB1dFJlZi5nZXRET01Ob2RlKCk7XG4gICAgICAgICAgICAgIC8vYW5pbWF0ZSBpbnB1dFxuICAgICAgICAgICAgICB0cy5jbGVhclRpbWVvdXQoKTtcbiAgICAgICAgICAgICAgdHMuc2V0U3RhdGUoe3NoYWtlRWRpdG9yOnRydWV9KTtcbiAgICAgICAgICAgICAgdHMudGltZW91dGVDbGVhcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHMuc2V0U3RhdGUoe3NoYWtlRWRpdG9yOmZhbHNlfSk7fSwzMDApO1xuICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuICBjbGVhclRpbWVvdXQoKXtcbiAgICAgIGlmKHRoaXMudGltZW91dGVDbGVhciE9MCl7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dGVDbGVhcik7XG4gICAgICAgICAgdGhpcy50aW1lb3V0ZUNsZWFyPTA7XG4gICAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKXtcbiAgICAgIHZhciBpbnB1dCA9IHRoaXMucmVmcy5pbnB1dFJlZi5nZXRET01Ob2RlKCk7XG4gICAgICAvLyBpbnB1dC52YWx1ZSA9IHRoaXMucHJvcHMuY2hpbGRyZW58fCcnO1xuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgZWRpdGFibGU9dGhpcy5wcm9wcy5lZGl0YWJsZSxcbiAgICAgICAgZm9ybWF0PXRoaXMucHJvcHMuZm9ybWF0LFxuICAgICAgICBhdHRyPXtcbiAgICAgICAgICAgIHJlZjpcImlucHV0UmVmXCIsXG4gICAgICAgICAgICBvbktleURvd246dGhpcy5oYW5kbGVLZXlQcmVzcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgb25CbHVyOnRoaXMuaGFuZGxlQmx1ci5iaW5kKHRoaXMpXG4gICAgICAgIH07XG4gICAgICAgIC8vcHV0IHBsYWNlaG9sZGVyIGlmIGV4aXN0XG4gICAgICAgIGVkaXRhYmxlLnBsYWNlaG9sZGVyJiYoYXR0ci5wbGFjZWhvbGRlcj1lZGl0YWJsZS5wbGFjZWhvbGRlcik7XG5cbiAgICB2YXIgZWRpdG9yQ2xhc3M9Y2xhc3NTZXQoeydhbmltYXRlZCc6dGhpcy5zdGF0ZS5zaGFrZUVkaXRvciwnc2hha2UnOnRoaXMuc3RhdGUuc2hha2VFZGl0b3J9KTtcbiAgICByZXR1cm4oXG4gICAgICAgIDx0ZCByZWY9XCJ0ZFwiIHN0eWxlPXt7cG9zaXRpb246J3JlbGF0aXZlJ319PlxuICAgICAgICAgICAge0VkaXRvcihlZGl0YWJsZSxhdHRyLGZvcm1hdCxlZGl0b3JDbGFzcyx0aGlzLnByb3BzLmNoaWxkcmVufHwnJyl9XG4gICAgICAgICAgICA8Tm90aWZpZXIgcmVmPVwibm90aWZpZXJcIj48L05vdGlmaWVyPlxuICAgICAgICA8L3RkPlxuICAgIClcbiAgfVxuXG4gIF9nZXRDaGVja0JveFZhbHVlKGUpe1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGxldCB2YWx1ZXMgPSBlLmN1cnJlbnRUYXJnZXQudmFsdWUuc3BsaXQoJzonKTtcbiAgICB2YWx1ZSA9IGUuY3VycmVudFRhcmdldC5jaGVja2VkP3ZhbHVlc1swXTp2YWx1ZXNbMV07XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbn1cblRhYmxlRWRpdENvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGNvbXBsZXRlRWRpdDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIHJvd0luZGV4OiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICBjb2xJbmRleDogUmVhY3QuUHJvcFR5cGVzLm51bWJlcixcbiAgYmx1clRvU2F2ZTogUmVhY3QuUHJvcFR5cGVzLmJvb2xcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVFZGl0Q29sdW1uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgVGFibGVGaWx0ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5maWx0ZXJPYmogPSB7fTtcbiAgfVxuXG4gIGhhbmRsZUtleVVwKGUpe1xuICAgIGlmKGUuY3VycmVudFRhcmdldC52YWx1ZS50cmltKCkgPT09IFwiXCIpXG4gICAgICBkZWxldGUgdGhpcy5maWx0ZXJPYmpbZS5jdXJyZW50VGFyZ2V0Lm5hbWVdO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuZmlsdGVyT2JqW2UuY3VycmVudFRhcmdldC5uYW1lXSA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcblxuICAgIHRoaXMucHJvcHMub25GaWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIHRhYmxlQ2xhc3NlcyA9IGNsYXNzU2V0KFwidGFibGVcIiwge1xuICAgICAgJ3RhYmxlLXN0cmlwZWQnOiB0aGlzLnByb3BzLnN0cmlwZWQsXG4gICAgICAndGFibGUtY29uZGVuc2VkJzogdGhpcy5wcm9wcy5jb25kZW5zZWRcbiAgICB9KTtcbiAgICB2YXIgc2VsZWN0Um93SGVhZGVyID0gbnVsbDtcblxuICAgIGlmKHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSB8fFxuICAgICAgICB0aGlzLnByb3BzLnJvd1NlbGVjdFR5cGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSSl7XG4gICAgICBsZXQgc3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOjM1LFxuICAgICAgICBwYWRkaW5nTGVmdDogMCxcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiAwXG4gICAgICB9XG4gICAgICBzZWxlY3RSb3dIZWFkZXIgPSAoPHRoIHN0eWxlPXtzdHlsZX0ga2V5PXstMX0+RmlsdGVyPC90aD4pO1xuICAgIH1cbiAgICB2YXIgZmlsdGVyRmllbGQgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbil7XG4gICAgICB2YXIgdGhTdHlsZSA9IHtcbiAgICAgICAgZGlzcGxheTogY29sdW1uLmhpZGRlbj9cIm5vbmVcIjpudWxsLFxuICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoXG4gICAgICB9O1xuICAgICAgcmV0dXJuKFxuICAgICAgICA8dGgga2V5PXtjb2x1bW4ubmFtZX0gc3R5bGU9e3RoU3R5bGV9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGgtaW5uZXIgdGFibGUtaGVhZGVyLWNvbHVtblwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9e2NvbHVtbi5uYW1lfSBuYW1lPXtjb2x1bW4ubmFtZX0gb25LZXlVcD17dGhpcy5oYW5kbGVLZXlVcC5iaW5kKHRoaXMpfS8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICApXG4gICAgfSwgdGhpcyk7XG4gICAgcmV0dXJuKFxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGFibGVDbGFzc2VzfSBzdHlsZT17e21hcmdpblRvcDo1fX0+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHIgc3R5bGU9e3tib3JkZXJCb3R0b21TdHlsZTogJ2hpZGRlbid9fT5cbiAgICAgICAgICAgIHtzZWxlY3RSb3dIZWFkZXJ9e2ZpbHRlckZpZWxkfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICA8L3RhYmxlPlxuICAgIClcbiAgfVxufVxuVGFibGVGaWx0ZXIucHJvcFR5cGVzID0ge1xuICBjb2x1bW5zOiBSZWFjdC5Qcm9wVHlwZXMuYXJyYXksXG4gIHJvd1NlbGVjdFR5cGU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIG9uRmlsdGVyOiBSZWFjdC5Qcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlRmlsdGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBVdGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgU2VsZWN0Um93SGVhZGVyQ29sdW1uIGZyb20gJy4vU2VsZWN0Um93SGVhZGVyQ29sdW1uJztcblxuY2xhc3MgVGFibGVIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBjbGVhclNvcnRDYXJldChvcmRlciwgc29ydEZpZWxkKXtcbiAgICB2YXIgcm93ID0gdGhpcy5yZWZzLmhlYWRlci5nZXRET01Ob2RlKCk7XG4gICAgZm9yKHZhciBpPTA7aTxyb3cuY2hpbGRFbGVtZW50Q291bnQ7aSsrKXtcbiAgICAgIHZhciBjb2x1bW4gPSByb3cuY2hpbGROb2Rlc1tpXS5jaGlsZE5vZGVzWzBdO1xuICAgICAgaWYoY29sdW1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJvcmRlclwiKS5sZW5ndGggPiAwKXtcbiAgICAgICAgY29sdW1uLnJlbW92ZUNoaWxkKGNvbHVtbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwib3JkZXJcIilbMF0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uU29ydChvcmRlciwgc29ydEZpZWxkKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCl7XG4gICAgLy9kZWZhdWx0IHNvcnRpbmdcbiAgICBpZih0aGlzLnByb3BzLnNvcnROYW1lKXtcbiAgICAgIHRoaXMuY2xlYXJTb3J0Q2FyZXQodGhpcy5wcm9wcy5zb3J0T3JkZXIsIHRoaXMucHJvcHMuc29ydE5hbWUpO1xuICAgICAgdmFyIHJvdyA9IHRoaXMucmVmcy5oZWFkZXIuZ2V0RE9NTm9kZSgpO1xuICAgICAgZm9yKHZhciBpPTA7aTxyb3cuY2hpbGRFbGVtZW50Q291bnQ7aSsrKXtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHJvdy5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXNbMF07XG4gICAgICAgIGlmKGNvbHVtbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtZmllbGQnKSA9PT0gdGhpcy5wcm9wcy5zb3J0TmFtZSl7XG4gICAgICAgICAgY29sdW1uLmFwcGVuZENoaWxkKFV0aWwucmVuZGVyU29ydENhcmV0KHRoaXMucHJvcHMuc29ydE9yZGVyKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgY29udGFpbmVyQ2xhc3NlcyA9IGNsYXNzU2V0KFwidGFibGUtaGVhZGVyXCIpO1xuICAgIHZhciBzZWxlY3RSb3dIZWFkZXJDb2wgPSB0aGlzLnByb3BzLmhpZGVTZWxlY3RDb2x1bW4/bnVsbDp0aGlzLnJlbmRlclNlbGVjdFJvd0hlYWRlcigpO1xuICAgIHRoaXMuX2F0dGFjaENsZWFyU29ydENhcmV0RnVuYygpO1xuXG4gICAgcmV0dXJuKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbnRhaW5lckNsYXNzZXN9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidGFibGUgdGFibGUtaG92ZXIgdGFibGUtYm9yZGVyZWRcIj5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHIgcmVmPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RSb3dIZWFkZXJDb2x9XG4gICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmVuZGVyU2VsZWN0Um93SGVhZGVyKCl7XG4gICAgaWYodGhpcy5wcm9wcy5yb3dTZWxlY3RUeXBlID09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFKSB7XG4gICAgICByZXR1cm4gKDxTZWxlY3RSb3dIZWFkZXJDb2x1bW4+PC9TZWxlY3RSb3dIZWFkZXJDb2x1bW4+KTtcbiAgICB9ZWxzZSBpZih0aGlzLnByb3BzLnJvd1NlbGVjdFR5cGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSSl7XG4gICAgICByZXR1cm4gKDxTZWxlY3RSb3dIZWFkZXJDb2x1bW4+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uU2VsZWN0QWxsUm93fS8+PC9TZWxlY3RSb3dIZWFkZXJDb2x1bW4+KTtcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9hdHRhY2hDbGVhclNvcnRDYXJldEZ1bmMoKXtcbiAgICBpZihBcnJheS5pc0FycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pKXtcbiAgICAgIGZvcihsZXQgaT0wO2k8dGhpcy5wcm9wcy5jaGlsZHJlbi5sZW5ndGg7aSsrKXtcbiAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlbltpXSA9XG4gICAgICAgICAgUmVhY3QuY2xvbmVFbGVtZW50KHRoaXMucHJvcHMuY2hpbGRyZW5baV0sIHtrZXk6IGksIGNsZWFyU29ydENhcmV0OiB0aGlzLmNsZWFyU29ydENhcmV0LmJpbmQodGhpcyl9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlbiA9XG4gICAgICAgIFJlYWN0LmNsb25lRWxlbWVudCh0aGlzLnByb3BzLmNoaWxkcmVuLCB7a2V5OiAwLCBjbGVhclNvcnRDYXJldDogdGhpcy5jbGVhclNvcnRDYXJldC5iaW5kKHRoaXMpfSk7XG4gICAgfVxuICB9XG59XG5UYWJsZUhlYWRlci5wcm9wVHlwZXMgPSB7XG4gIHJvd1NlbGVjdFR5cGU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIG9uU29ydDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU2VsZWN0QWxsUm93OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgc29ydE5hbWU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIHNvcnRPcmRlcjogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgaGlkZVNlbGVjdENvbHVtbjogUmVhY3QuUHJvcFR5cGVzLmJvb2xcbn07XG5cblRhYmxlSGVhZGVyLmRlZmF1bHRQcm9wcyA9IHtcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgVXRpbCBmcm9tICcuL3V0aWwnO1xuXG5jbGFzcyBUYWJsZUhlYWRlckNvbHVtbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBvcmRlcjogQ29uc3QuU09SVF9ERVNDXG5cbiAgaGFuZGxlQ29sdW1uQ2xpY2soZSl7XG4gICAgaWYoIXRoaXMucHJvcHMuZGF0YVNvcnQpcmV0dXJuO1xuICAgIHZhciBkb20gPSB0aGlzLnJlZnMuaW5uZXJEaXYuZ2V0RE9NTm9kZSgpO1xuICAgIHRoaXMub3JkZXIgPSB0aGlzLm9yZGVyID09IENvbnN0LlNPUlRfREVTQz9Db25zdC5TT1JUX0FTQzpDb25zdC5TT1JUX0RFU0M7XG4gICAgdGhpcy5wcm9wcy5jbGVhclNvcnRDYXJldCh0aGlzLm9yZGVyLCB0aGlzLnByb3BzLmRhdGFGaWVsZCk7XG4gICAgZG9tLmFwcGVuZENoaWxkKFV0aWwucmVuZGVyU29ydENhcmV0KHRoaXMub3JkZXIpKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCl7XG4gICAgdGhpcy5yZWZzLmlubmVyRGl2LmdldERPTU5vZGUoKS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWZpZWxkXCIsIHRoaXMucHJvcHMuZGF0YUZpZWxkKTtcbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciB0aFN0eWxlID0ge1xuICAgICAgdGV4dEFsaWduOiB0aGlzLnByb3BzLmRhdGFBbGlnbixcbiAgICAgIGRpc3BsYXk6IHRoaXMucHJvcHMuaGlkZGVuP1wibm9uZVwiOm51bGwsXG4gICAgICB3aWR0aDogdGhpcy5wcm9wcy53aWR0aFxuICAgIH07XG5cbiAgICB2YXIgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NOYW1lK1wiIFwiKyh0aGlzLnByb3BzLmRhdGFTb3J0P1wic29ydC1jb2x1bW5cIjpcIlwiKTtcbiAgICByZXR1cm4oXG4gICAgICA8dGggY2xhc3NOYW1lPXtjbGFzc2VzfSBzdHlsZT17dGhTdHlsZX0+XG4gICAgICAgIDxkaXYgcmVmPVwiaW5uZXJEaXZcIiBjbGFzc05hbWU9XCJ0aC1pbm5lciB0YWJsZS1oZWFkZXItY29sdW1uXCJcbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNvbHVtbkNsaWNrLmJpbmQodGhpcyl9Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvZGl2PlxuICAgICAgPC90aD5cbiAgICApXG4gIH1cbn1cblRhYmxlSGVhZGVyQ29sdW1uLnByb3BUeXBlcyA9IHtcbiAgZGF0YUZpZWxkOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRhQWxpZ246IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIGRhdGFTb3J0OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgY2xlYXJTb3J0Q2FyZXQ6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICBkYXRhRm9ybWF0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgaXNLZXk6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBlZGl0YWJsZTogUmVhY3QuUHJvcFR5cGVzLmFueSxcbiAgaGlkZGVuOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOlJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIHdpZHRoOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBzb3J0RnVuYzogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIGNvbHVtbkNsYXNzTmFtZTogUmVhY3QuUHJvcFR5cGVzLmFueVxufTtcblxuVGFibGVIZWFkZXJDb2x1bW4uZGVmYXVsdFByb3BzID0ge1xuICBkYXRhQWxpZ246IFwibGVmdFwiLFxuICBkYXRhU29ydDogZmFsc2UsXG4gIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCxcbiAgaXNLZXk6IGZhbHNlLFxuICBlZGl0YWJsZTogdHJ1ZSxcbiAgY2xlYXJTb3J0Q2FyZXQ6IHVuZGVmaW5lZCxcbiAgaGlkZGVuOiBmYWxzZSxcbiAgY2xhc3NOYW1lOiBcIlwiLFxuICB3aWR0aDogbnVsbCxcbiAgc29ydEZ1bmM6IHVuZGVmaW5lZCxcbiAgY29sdW1uQ2xhc3NOYW1lOiAnJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXJDb2x1bW47XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuXG5jbGFzcyBUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICByb3dDbGljayhlKXtcbiAgICBpZihlLnRhcmdldC50YWdOYW1lICE9PSBcIklOUFVUXCIpXG4gICAgICB0aGlzLnByb3BzLm9uU2VsZWN0Um93KGUuY3VycmVudFRhcmdldC5yb3dJbmRleCwgIXRoaXMucHJvcHMuaXNTZWxlY3RlZCk7XG4gIH1cblxuICByZW5kZXIoKXtcblxuICAgIHZhciB0ckNzcz17XG4gICAgICBzdHlsZTp7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5wcm9wcy5pc1NlbGVjdGVkP3RoaXMucHJvcHMuc2VsZWN0Um93LmJnQ29sb3I6bnVsbFxuICAgICAgfSxcbiAgICAgIGNsYXNzTmFtZTp0aGlzLnByb3BzLmNsYXNzTmFtZXx8JydcbiAgICB9O1xuXG4gICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cgJiYgIXRoaXMucHJvcHMuZW5hYmxlQ2VsbEVkaXQgJiZcbiAgICAgICh0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0IHx8IHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbCkpe1xuICAgICAgcmV0dXJuKFxuICAgICAgICA8dHIgey4uLnRyQ3NzfSBvbkNsaWNrPXt0aGlzLnJvd0NsaWNrLmJpbmQodGhpcyl9Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvdHI+XG4gICAgICApXG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4oXG4gICAgICAgIDx0ciB7Li4udHJDc3N9Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvdHI+XG4gICAgICApXG4gICAgfVxuICB9XG59XG5UYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGlzU2VsZWN0ZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBlbmFibGVDZWxsRWRpdDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIG9uU2VsZWN0Um93OiBSZWFjdC5Qcm9wVHlwZXMuZnVuY1xufTtcbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxuY2xhc3MgUGFnZUJ1dHRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0fVxuXG4gIHBhZ2VCdG5DbGljayhlKXtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKGUuY3VycmVudFRhcmdldC50ZXh0KTtcbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciBjbGFzc2VzID0gdGhpcy5wcm9wcy5hY3RpdmU/Y2xhc3NTZXQoXCJhY3RpdmVcIik6bnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2VzfT48YSBocmVmPVwiI1wiIG9uQ2xpY2s9e3RoaXMucGFnZUJ0bkNsaWNrLmJpbmQodGhpcyl9Pnt0aGlzLnByb3BzLmNoaWxkcmVufTwvYT48L2xpPlxuICAgIClcbiAgfVxufVxuUGFnZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNoYW5nZVBhZ2U6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICBhY3RpdmU6IFJlYWN0LlByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBQYWdlQnV0dG9uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQYWdlQnV0dG9uIGZyb20gJy4vUGFnZUJ1dHRvbi5qcydcbmltcG9ydCBDb25zdCBmcm9tICcuLi9Db25zdCc7XG5cbmNsYXNzIFBhZ2luYXRpb25MaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHRcdHRoaXMuc3RhdGUgPSB7XG4gICAgICBjdXJyZW50UGFnZTogdGhpcy5wcm9wcy5jdXJyUGFnZSxcbiAgICAgIHNpemVQZXJQYWdlOiB0aGlzLnByb3BzLnNpemVQZXJQYWdlXG4gICAgfTtcblx0fVxuXG4gIGNoYW5nZVBhZ2UocGFnZSl7XG4gICAgaWYocGFnZSA9PSBDb25zdC5QUkVfUEFHRSl7XG4gICAgICBwYWdlID0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZS0xIDwgMT8xOnRoaXMuc3RhdGUuY3VycmVudFBhZ2UtMTtcbiAgICB9ZWxzZSBpZihwYWdlID09IENvbnN0Lk5FWFRfUEFHRSl7XG4gICAgICBwYWdlID0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZSsxID4gdGhpcy50b3RhbFBhZ2VzP3RoaXMudG90YWxQYWdlczp0aGlzLnN0YXRlLmN1cnJlbnRQYWdlKzE7XG4gICAgfWVsc2UgaWYocGFnZSA9PSBDb25zdC5MQVNUX1BBR0Upe1xuICAgICAgcGFnZSA9IHRoaXMudG90YWxQYWdlcztcbiAgICB9ZWxzZSBpZihwYWdlID09IENvbnN0LkZJUlNUX1BBR0Upe1xuICAgICAgcGFnZSA9IDE7XG4gICAgfWVsc2V7XG4gICAgICBwYWdlID0gcGFyc2VJbnQocGFnZSk7XG4gICAgfVxuXG4gICAgaWYocGFnZSAhPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlKXtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRQYWdlOiBwYWdlfSk7XG4gICAgICB0aGlzLnByb3BzLmNoYW5nZVBhZ2UocGFnZSwgdGhpcy5zdGF0ZS5zaXplUGVyUGFnZSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU2l6ZVBlclBhZ2UoZSl7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBzZWxlY3RTaXplID0gcGFyc2VJbnQoZS5jdXJyZW50VGFyZ2V0LnRleHQpO1xuICAgIGlmKHNlbGVjdFNpemUgIT0gdGhpcy5zdGF0ZS5zaXplUGVyUGFnZSl7XG4gICAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy5wcm9wcy5kYXRhU2l6ZS9zZWxlY3RTaXplKTtcbiAgICAgIGlmKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMpXG4gICAgICAgIHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2l6ZVBlclBhZ2U6IHNlbGVjdFNpemUsXG4gICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvcHMuY2hhbmdlUGFnZSh0aGlzLnN0YXRlLmN1cnJlbnRQYWdlLCBzZWxlY3RTaXplKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy5wcm9wcy5kYXRhU2l6ZS90aGlzLnN0YXRlLnNpemVQZXJQYWdlKTtcbiAgICB2YXIgcGFnZUJ0bnMgPSB0aGlzLm1ha2VQYWdlKCk7XG4gICAgdmFyIHBhZ2VMaXN0U3R5bGUgPSB7XG4gICAgICBtYXJnaW5Ub3A6IFwiMHB4XCIgIC8vb3ZlcnJpZGUgdGhlIG1hcmdpbi10b3AgZGVmaW5lZCBpbiAucGFnaW5hdGlvbiBjbGFzcyBpbiBib290c3RyYXAuXG4gICAgfVxuXG4gICAgdmFyIHNpemVQZXJQYWdlTGlzdCA9IHRoaXMucHJvcHMuc2l6ZVBlclBhZ2VMaXN0Lm1hcCgoc2l6ZVBlclBhZ2UpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBrZXk9e3NpemVQZXJQYWdlfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgPGEgcm9sZT1cIm1lbnVpdGVtXCIgdGFiSW5kZXg9XCItMVwiIGhyZWY9XCIjXCIgb25DbGljaz17dGhpcy5jaGFuZ2VTaXplUGVyUGFnZS5iaW5kKHRoaXMpfT57c2l6ZVBlclBhZ2V9PC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgZHJvcGRvd24tdG9nZ2xlXCIgdHlwZT1cImJ1dHRvblwiIGlkPVwicGFnZURyb3BEb3duXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnNpemVQZXJQYWdlfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnVcIiByb2xlPVwibWVudVwiIGFyaWEtbGFiZWxsZWRieT1cInBhZ2VEcm9wRG93blwiPlxuICAgICAgICAgICAgICB7c2l6ZVBlclBhZ2VMaXN0fVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwicGFnaW5hdGlvblwiIHN0eWxlPXtwYWdlTGlzdFN0eWxlfT5cbiAgICAgICAgICAgIHtwYWdlQnRuc31cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIG1ha2VQYWdlKCl7XG4gICAgdmFyIHBhZ2VzID0gdGhpcy5nZXRQYWdlcygpO1xuICAgIHJldHVybiBwYWdlcy5tYXAoZnVuY3Rpb24ocGFnZSl7XG4gICAgICB2YXIgaXNBY3RpdmUgPSBwYWdlID09IHRoaXMuc3RhdGUuY3VycmVudFBhZ2U/dHJ1ZTpmYWxzZTtcbiAgICAgIHJldHVybihcbiAgICAgICAgPFBhZ2VCdXR0b24gY2hhbmdlUGFnZT17dGhpcy5jaGFuZ2VQYWdlLmJpbmQodGhpcyl9IGFjdGl2ZT17aXNBY3RpdmV9IGtleT17cGFnZX0+e3BhZ2V9PC9QYWdlQnV0dG9uPlxuICAgICAgKVxuICAgIH0sIHRoaXMpO1xuICB9XG5cbiAgZ2V0UGFnZXMoKXtcbiAgICB2YXIgc3RhcnRQYWdlID0gMSwgZW5kUGFnZSA9IHRoaXMudG90YWxQYWdlcztcblxuICAgIHN0YXJ0UGFnZSA9IE1hdGgubWF4KHRoaXMuc3RhdGUuY3VycmVudFBhZ2UgLSBNYXRoLmZsb29yKHRoaXMucHJvcHMucGFnaW5hdGlvblNpemUvMiksIDEpO1xuICAgIGVuZFBhZ2UgICA9IHN0YXJ0UGFnZSArIHRoaXMucHJvcHMucGFnaW5hdGlvblNpemUgLSAxO1xuXG4gICAgaWYgKGVuZFBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgIGVuZFBhZ2UgICA9IHRoaXMudG90YWxQYWdlcztcbiAgICAgIHN0YXJ0UGFnZSA9IGVuZFBhZ2UgLSB0aGlzLnByb3BzLnBhZ2luYXRpb25TaXplICsgMTtcbiAgICB9XG4gICAgdmFyIHBhZ2VzID0gW0NvbnN0LkZJUlNUX1BBR0UsIENvbnN0LlBSRV9QQUdFXTtcbiAgICBmb3IodmFyIGk9c3RhcnRQYWdlO2k8PWVuZFBhZ2U7aSsrKXtcbiAgICAgIGlmKGk+MClwYWdlcy5wdXNoKGkpO1xuICAgIH1cbiAgICBwYWdlcy5wdXNoKENvbnN0Lk5FWFRfUEFHRSk7XG4gICAgcGFnZXMucHVzaChDb25zdC5MQVNUX1BBR0UpO1xuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG4gIGdldEN1cnJlbnRQYWdlKCl7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuY3VycmVudFBhZ2U7XG4gIH1cblxuICBnZXRTaXplUGVyUGFnZSgpe1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnNpemVQZXJQYWdlO1xuICB9XG59XG5QYWdpbmF0aW9uTGlzdC5wcm9wVHlwZXMgPSB7XG4gIGN1cnJQYWdlOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICBzaXplUGVyUGFnZTogUmVhY3QuUHJvcFR5cGVzLm51bWJlcixcbiAgZGF0YVNpemU6IFJlYWN0LlByb3BUeXBlcy5udW1iZXIsXG4gIGNoYW5nZVBhZ2U6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICBzaXplUGVyUGFnZUxpc3Q6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgcGFnaW5hdGlvblNpemU6IFJlYWN0LlByb3BUeXBlcy5udW1iZXJcbn07XG5cblBhZ2luYXRpb25MaXN0LmRlZmF1bHRQcm9wcyA9IHtcbiAgc2l6ZVBlclBhZ2U6IENvbnN0LlNJWkVfUEVSX1BBR0Vcbn1cbmV4cG9ydCBkZWZhdWx0IFBhZ2luYXRpb25MaXN0O1xuIiwiaW1wb3J0IENvbnN0IGZyb20gXCIuLi9Db25zdFwiO1xudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxuZnVuY3Rpb24gX3NvcnQoYXJyLCBzb3J0RmllbGQsIG9yZGVyLCBzb3J0RnVuYyl7XG4gIG9yZGVyID0gb3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgYXJyLnNvcnQoKGEsYikgPT4ge1xuICAgIGlmKHNvcnRGdW5jKXtcbiAgICAgIHJldHVybiBzb3J0RnVuYyhhLCBiLCBvcmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKG9yZGVyID09IENvbnN0LlNPUlRfREVTQyl7XG4gICAgICAgIHJldHVybiBhW3NvcnRGaWVsZF0gPiBiW3NvcnRGaWVsZF0/LTE6ICgoYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdKSA/IDEgOiAwKTtcbiAgICAgIH1lbHNle1xuICAgICAgICByZXR1cm4gYVtzb3J0RmllbGRdIDwgYltzb3J0RmllbGRdPy0xOiAoKGFbc29ydEZpZWxkXSA+IGJbc29ydEZpZWxkXSkgPyAxIDogMCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhU2V0IGV4dGVuZHMgRXZlbnRFbWl0dGVye1xuICBjb25zdHJ1Y3RvcihkYXRhKXtcbiAgICBzdXBlcihkYXRhKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhKSB7XG4gICAgdGhpcy5lbWl0KCdjaGFuZ2UnLCBkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKCl7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgfVxuXG4gIGdldERhdGEoKXtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFTdG9yZXtcblxuICBjb25zdHJ1Y3RvcihkYXRhKXtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuY3VzdG9tU29ydEZ1bmNNYXAgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICB0aGlzLmlzT25GaWx0ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICB0aGlzLnNvcnRPYmogPSBudWxsO1xuICAgIHRoaXMucGFnZU9iaiA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgfVxuXG4gIHNldFByb3BzKGlzUGFnaW5hdGlvbiwga2V5RmllbGQsIGN1c3RvbVNvcnRGdW5jTWFwKXtcbiAgICB0aGlzLmtleUZpZWxkID0ga2V5RmllbGQ7XG4gICAgdGhpcy5lbmFibGVQYWdpbmF0aW9uID0gaXNQYWdpbmF0aW9uO1xuICAgIHRoaXMuY3VzdG9tU29ydEZ1bmNNYXAgPSBjdXN0b21Tb3J0RnVuY01hcDtcbiAgfVxuXG4gIHNldERhdGEoZGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgaWYodGhpcy5pc09uRmlsdGVyKSB7XG4gICAgICBpZihudWxsICE9PSB0aGlzLmZpbHRlck9iaikgdGhpcy5maWx0ZXIodGhpcy5maWx0ZXJPYmopO1xuICAgICAgaWYobnVsbCAhPT0gdGhpcy5zZWFyY2hUZXh0KSB0aGlzLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH1cbiAgICBpZih0aGlzLnNvcnRPYmope1xuICAgICAgdGhpcy5zb3J0KHRoaXMuc29ydE9iai5vcmRlciwgdGhpcy5zb3J0T2JqLnNvcnRGaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRSb3dLZXkoc2VsZWN0ZWRSb3dLZXlzKXtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWRSb3dLZXlzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCl7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICBnZXRDdXJyZW50RGlzcGxheURhdGEoKXtcbiAgICBpZih0aGlzLmlzT25GaWx0ZXIpIHJldHVybiB0aGlzLmZpbHRlcmVkRGF0YTtcbiAgICBlbHNlIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBzb3J0KG9yZGVyLCBzb3J0RmllbGQpe1xuICAgIHRoaXMuc29ydE9iaiA9IHtcbiAgICAgIG9yZGVyOiBvcmRlcixcbiAgICAgIHNvcnRGaWVsZDogc29ydEZpZWxkXG4gICAgfTtcblxuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGxldCBzb3J0RnVuYyA9IHRoaXMuY3VzdG9tU29ydEZ1bmNNYXBbc29ydEZpZWxkXTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEgPSBfc29ydChjdXJyZW50RGlzcGxheURhdGEsIHNvcnRGaWVsZCwgb3JkZXIsIHNvcnRGdW5jKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGFnZShwYWdlLCBzaXplUGVyUGFnZSl7XG4gICAgdGhpcy5wYWdlT2JqLmVuZCA9IHBhZ2Uqc2l6ZVBlclBhZ2UtMTtcbiAgICB0aGlzLnBhZ2VPYmouc3RhcnQgPSB0aGlzLnBhZ2VPYmouZW5kIC0gKHNpemVQZXJQYWdlIC0gMSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBlZGl0KG5ld1ZhbCwgcm93SW5kZXgsIGZpZWxkTmFtZSl7XG4gICAgbGV0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgbGV0IHJvd0tleUNhY2hlO1xuICAgIGlmKCF0aGlzLmVuYWJsZVBhZ2luYXRpb24pe1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3Jvd0luZGV4XVtmaWVsZE5hbWVdID0gbmV3VmFsO1xuICAgICAgcm93S2V5Q2FjaGUgPSBjdXJyZW50RGlzcGxheURhdGFbcm93SW5kZXhdW3RoaXMua2V5RmllbGRdO1xuICAgIH1lbHNle1xuICAgICAgY3VycmVudERpc3BsYXlEYXRhW3RoaXMucGFnZU9iai5zdGFydCtyb3dJbmRleF1bZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgIHJvd0tleUNhY2hlID0gY3VycmVudERpc3BsYXlEYXRhW3RoaXMucGFnZU9iai5zdGFydCtyb3dJbmRleF1bdGhpcy5rZXlGaWVsZF07XG4gICAgfVxuICAgIGlmKHRoaXMuaXNPbkZpbHRlcil7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpe1xuICAgICAgICBpZihyb3dbdGhpcy5rZXlGaWVsZF0gPT09IHJvd0tleUNhY2hlKXtcbiAgICAgICAgICByb3dbdGhpcy5rZXlGaWVsZF1bZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkKG5ld09iail7XG4gICAgaWYobmV3T2JqW3RoaXMua2V5RmllbGRdLnRyaW0oKSA9PT0gXCJcIil7XG4gICAgICB0aHJvdyB0aGlzLmtleUZpZWxkICsgXCIgY2FuJ3QgYmUgZW1wdHkgdmFsdWUuXCI7XG4gICAgfVxuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGN1cnJlbnREaXNwbGF5RGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7XG4gICAgICBpZihyb3dbdGhpcy5rZXlGaWVsZF0udG9TdHJpbmcoKSA9PT0gbmV3T2JqW3RoaXMua2V5RmllbGRdKXtcbiAgICAgICAgdGhyb3cgdGhpcy5rZXlGaWVsZCArIFwiIFwiICsgbmV3T2JqW3RoaXMua2V5RmllbGRdICsgXCIgYWxyZWFkeSBleGlzdHNcIjtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcblxuICAgIGN1cnJlbnREaXNwbGF5RGF0YS5wdXNoKG5ld09iaik7XG4gICAgaWYodGhpcy5pc09uRmlsdGVyKXtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKG5ld09iaik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKHJvd0tleSl7XG4gICAgbGV0IGN1cnJlbnREaXNwbGF5RGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG4gICAgbGV0IHJlc3VsdCA9IGN1cnJlbnREaXNwbGF5RGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgIHJldHVybiByb3dLZXkuaW5kZXhPZihyb3dbdGhpcy5rZXlGaWVsZF0pID09IC0xO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgaWYodGhpcy5pc09uRmlsdGVyKXtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgICAgcmV0dXJuIHJvd0tleS5pbmRleE9mKHJvd1t0aGlzLmtleUZpZWxkXSkgPT0gLTE7XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gcmVzdWx0O1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5kYXRhID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlcihmaWx0ZXJPYmope1xuICAgIGlmKE9iamVjdC5rZXlzKGZpbHRlck9iaikubGVuZ3RoID09IDApe1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlck9iaiA9IG51bGw7XG4gICAgfSBlbHNle1xuICAgICAgdGhpcy5maWx0ZXJPYmogPSBmaWx0ZXJPYmo7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gZmlsdGVyT2JqKXtcbiAgICAgICAgICBpZihyb3dba2V5XS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJPYmpba2V5XS50b0xvd2VyQ2FzZSgpKSA9PSAtMSl7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZWFyY2goc2VhcmNoVGV4dCl7XG4gICAgaWYoc2VhcmNoVGV4dC50cmltKCkgPT09IFwiXCIpe1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbihyb3cpe1xuICAgICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gcm93KXtcbiAgICAgICAgICBpZihyb3dba2V5XSAmJlxuICAgICAgICAgICAgIHJvd1trZXldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgIT09IC0xKXtcbiAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0KCl7XG4gICAgbGV0IF9kYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcblxuICAgIGlmKF9kYXRhLmxlbmd0aCA9PSAwKSByZXR1cm4gX2RhdGE7XG5cbiAgICBpZighdGhpcy5lbmFibGVQYWdpbmF0aW9uKXtcbiAgICAgIHJldHVybiBfZGF0YTtcbiAgICB9ZWxzZXtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvcih2YXIgaT10aGlzLnBhZ2VPYmouc3RhcnQ7aTw9dGhpcy5wYWdlT2JqLmVuZDtpKyspe1xuICAgICAgICByZXN1bHQucHVzaChfZGF0YVtpXSk7XG4gICAgICAgIGlmKGkrMSA9PSBfZGF0YS5sZW5ndGgpYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGdldEtleUZpZWxkKCl7XG4gICAgcmV0dXJuIHRoaXMua2V5RmllbGQ7XG4gIH1cblxuICBnZXREYXRhTnVtKCl7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0QWxsUm93a2V5KCl7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAoZnVuY3Rpb24ocm93KXtcbiAgICAgIHJldHVybiByb3dbdGhpcy5rZXlGaWVsZF07XG4gICAgfSwgdGhpcyk7XG4gIH1cblxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuaW1wb3J0IEVkaXRvciBmcm9tICcuLi9FZGl0b3InO1xuaW1wb3J0IE5vdGlmaWVyIGZyb20gJy4uL05vdGlmaWNhdGlvbi5qcyc7XG5cbmNsYXNzIFRvb2xCYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG4gICAgdGhpcy50aW1lb3V0ZUNsZWFyPTA7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzSW5zZXJ0Um93VHJpZ2dlcjogdHJ1ZSxcbiAgICAgIHZhbGlkYXRlU3RhdGU6bnVsbCxcbiAgICAgIHNoYWtlRWRpdG9yOmZhbHNlXG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xuICAgIHRoaXMuY2xlYXJUaW1lb3V0KCk7XG4gIH1cbiAgY2xlYXJUaW1lb3V0KCkge1xuICAgIGlmKHRoaXMudGltZW91dGVDbGVhcil7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0ZUNsZWFyKTtcbiAgICAgIHRoaXMudGltZW91dGVDbGVhcj0wO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQW5kUGFyc2VGb3JtKCl7XG4gICAgdmFyIHRzPXRoaXMsbmV3T2JqID0ge30saXNWYWxpZD10cnVlLHRlbXBWYWx1ZSx0ZW1wTXNnLHZhbGlkYXRlU3RhdGU9e307XG4gICAgdGhpcy5wcm9wcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24oY29sdW1uLCBpKXtcbiAgICAgIGlmKGNvbHVtbi5hdXRvVmFsdWUpey8vd2hlbiB5b3Ugd2FudCBzYW1lIGF1dG8gZ2VuZXJhdGUgdmFsdWUgYW5kIG5vdCBhbGxvdyBlZGl0LCBleGFtcGxlIElEIGZpZWxkXG4gICAgICAgIHRlbXBWYWx1ZT10eXBlb2YgY29sdW1uLmF1dG9WYWx1ZT09J2Z1bmN0aW9uJz9jb2x1bW4uYXV0b1ZhbHVlKCk6KCdhdXRvdmFsdWUtJytuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgbGV0IGRvbSA9IHRoaXMucmVmc1tjb2x1bW4uZmllbGQraV0uZ2V0RE9NTm9kZSgpO1xuICAgICAgICB0ZW1wVmFsdWUgPSBkb20udmFsdWU7XG5cbiAgICAgICAgaWYoY29sdW1uLmVkaXRhYmxlICYmIGNvbHVtbi5lZGl0YWJsZS50eXBlID09ICdjaGVja2JveCcpe1xuICAgICAgICAgIGxldCB2YWx1ZXMgPSBkb20udmFsdWUuc3BsaXQoJzonKTtcbiAgICAgICAgICB0ZW1wVmFsdWUgPSBkb20uY2hlY2tlZD8gdmFsdWVzWzBdOnZhbHVlc1sxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGNvbHVtbi5lZGl0YWJsZSYmY29sdW1uLmVkaXRhYmxlLnZhbGlkYXRvcil7Ly9wcm9jZXNzIHZhbGlkYXRlXG4gICAgICAgICAgdGVtcE1zZz0gY29sdW1uLmVkaXRhYmxlLnZhbGlkYXRvcih0ZW1wVmFsdWUpXG4gICAgICAgICAgaWYodGVtcE1zZyE9PXRydWUpe1xuICAgICAgICAgICAgaXNWYWxpZD1mYWxzZTtcbiAgICAgICAgICAgIHZhbGlkYXRlU3RhdGVbY29sdW1uLmZpZWxkXT10ZW1wTXNnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdPYmpbY29sdW1uLmZpZWxkXSA9dGVtcFZhbHVlO1xuICAgIH0sIHRoaXMpO1xuXG4gICAgaWYoaXNWYWxpZCl7XG4gICAgICByZXR1cm4gbmV3T2JqO1xuICAgIH1lbHNle1xuICAgICAgdHMuY2xlYXJUaW1lb3V0KCk7XG4gICAgICAvL3Nob3cgZXJyb3IgaW4gZm9ybSBhbmQgc2hha2UgaXRcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbGlkYXRlU3RhdGU6dmFsaWRhdGVTdGF0ZSxzaGFrZUVkaXRvcjp0cnVlfSk7XG4gICAgICAvL25vdGlmaWVyIGVycm9yXG4gICAgICB0cy5yZWZzLm5vdGlmaWVyLm5vdGljZSgnZXJyb3InLFwiRm9ybSB2YWxpZGF0ZSBlcnJvcnMsIHBsZWFzZSBjaGVja2luZyFcIixcIlByZXNzZWQgRVNDIGNhbiBjYW5jZWxcIik7XG4gICAgICAvL2NsZWFyIGFuaW1hdGUgY2xhc3NcbiAgICAgIHRzLnRpbWVvdXRlQ2xlYXI9c2V0VGltZW91dChmdW5jdGlvbigpe3RzLnNldFN0YXRlKHtzaGFrZUVkaXRvcjpmYWxzZX0pO30sMzAwKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNhdmVCdG5DbGljayhlKXtcbiAgICB2YXIgbmV3T2JqID0gdGhpcy5jaGVja0FuZFBhcnNlRm9ybSgpO1xuICAgIGlmKCFuZXdPYmopey8vdmFsaWRhdGUgZXJyb3JzXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBtc2cgPSB0aGlzLnByb3BzLm9uQWRkUm93KG5ld09iaik7XG4gICAgaWYobXNnKSB7XG4gICAgICB2YXIgdHM9dGhpcztcbiAgICAgIHRzLnJlZnMubm90aWZpZXIubm90aWNlKCdlcnJvcicsbXNnLFwiUHJlc3NlZCBFU0MgY2FuIGNhbmNlbFwiKTtcbiAgICAgIHRzLmNsZWFyVGltZW91dCgpO1xuICAgICAgLy9zaGFrZSBmb3JtIGFuZCBoYWNrIHByZXZlbnQgbW9kYWwgaGlkZVxuICAgICAgdHMuc2V0U3RhdGUoe3NoYWtlRWRpdG9yOnRydWUsdmFsaWRhdGVTdGF0ZTpcInRoaXMgaXMgaGFjayBmb3IgcHJldmVudCBib290c3RyYXAgbW9kYWwgaGlkZVwifSk7XG4gICAgICAvL2NsZWFyIGFuaW1hdGUgY2xhc3NcbiAgICAgIHRzLnRpbWVvdXRlQ2xlYXI9c2V0VGltZW91dChmdW5jdGlvbigpe3RzLnNldFN0YXRlKHtzaGFrZUVkaXRvcjpmYWxzZX0pO30sMzAwKTtcbiAgICB9IGVsc2V7XG4gICAgICAvL3Jlc2V0IHN0YXRlIGFuZCBoaWRlIG1vZGFsIGhpZGVcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB2YWxpZGF0ZVN0YXRlOm51bGwsXG4gICAgICAgIHNoYWtlRWRpdG9yOmZhbHNlXG4gICAgICB9KTtcbiAgICAgIC8vcmVzZXQgZm9ybVxuICAgICAgdGhpcy5yZWZzLmZvcm0uZ2V0RE9NTm9kZSgpLnJlc2V0KCk7XG5cbiAgICB9XG4gIH1cblxuICBoYW5kbGVEcm9wUm93QnRuQ2xpY2soZSl7XG4gICAgdGhpcy5wcm9wcy5vbkRyb3BSb3coKTtcbiAgfVxuXG4gIGhhbmRsZUNsb3NlQnRuKGUpe1xuICAgIHRoaXMucmVmcy53YXJuaW5nLmdldERPTU5vZGUoKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIH1cblxuICBoYW5kbGVLZXlVcChlKXtcbiAgICB0aGlzLnByb3BzLm9uU2VhcmNoKGUuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgbW9kYWxDbGFzc05hbWUgPSBcImJzLXRhYmxlLW1vZGFsLXNtXCIrbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgdmFyIGluc2VydEJ0biA9IHRoaXMucHJvcHMuZW5hYmxlSW5zZXJ0P1xuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMucHJvcHMub25BZGRSb3dCZWdpbn0gY2xhc3NOYW1lPVwiYnRuIGJ0bi1pbmZvXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PXsnLicrbW9kYWxDbGFzc05hbWV9PlxuICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzXCI+PC9pPiBOZXc8L2J1dHRvbj46bnVsbDtcblxuICAgIHZhciBkZWxldGVCdG4gPSB0aGlzLnByb3BzLmVuYWJsZURlbGV0ZT9cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLXdhcm5pbmdcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJEcm9wIHNlbGVjdGVkIHJvd1wiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZURyb3BSb3dCdG5DbGljay5iaW5kKHRoaXMpfT5cbiAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImdseXBoaWNvbiBnbHlwaGljb24tdHJhc2hcIj48L2k+IERlbGV0ZVxuICAgICAgICAgIDwvYnV0dG9uPjpudWxsO1xuICAgIHZhciBzZWFyY2hUZXh0SW5wdXQgPSB0aGlzLnByb3BzLmVuYWJsZVNlYXJjaD9cbiAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5zZWFyY2hQbGFjZWhvbGRlcj90aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyOidTZWFyY2gnfSBvbktleVVwPXt0aGlzLmhhbmRsZUtleVVwLmJpbmQodGhpcyl9Lz46bnVsbDtcbiAgICB2YXIgbW9kYWwgPSB0aGlzLnByb3BzLmVuYWJsZUluc2VydD90aGlzLnJlbmRlckluc2VydFJvd01vZGFsKG1vZGFsQ2xhc3NOYW1lKTpudWxsO1xuICAgIHZhciB3YXJuaW5nU3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiBcIm5vbmVcIixcbiAgICAgIG1hcmdpbkJvdHRvbTogMFxuICAgIH07XG4gICAgcmV0dXJuKFxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXhzXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIi4uLlwiPlxuICAgICAgICAgIHtpbnNlcnRCdG59XG4gICAgICAgICAge2RlbGV0ZUJ0bn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzZWFyY2hUZXh0SW5wdXR9XG4gICAgICAgIDxOb3RpZmllciByZWY9XCJub3RpZmllclwiPjwvTm90aWZpZXI+XG4gICAgICAgIHttb2RhbH1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJlbmRlckluc2VydFJvd01vZGFsKG1vZGFsQ2xhc3NOYW1lKXtcbiAgICB2YXIgdmFsaWRhdGVTdGF0ZT10aGlzLnN0YXRlLnZhbGlkYXRlU3RhdGV8fHt9O1xuICAgIHZhciBpbnB1dEZpZWxkID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpe1xuLy8gPDw8PDw8PCBIRUFEXG4vLyAgICAgICBsZXQgZGlzYWJsZWQgPSBjb2x1bW4uZWRpdGFibGU/ZmFsc2U6J2Rpc2FibGVkJztcbi8vID09PT09PT1cbiAgICAgIHZhciBlZGl0YWJsZT1jb2x1bW4uZWRpdGFibGUsXG4gICAgICAgICAgZm9ybWF0PWNvbHVtbi5mb3JtYXQsXG4gICAgICAgICAgYXR0cj17cmVmOmNvbHVtbi5maWVsZCtpLHBsYWNlaG9sZGVyOmVkaXRhYmxlLnBsYWNlaG9sZGVyP2VkaXRhYmxlLnBsYWNlaG9sZGVyOmNvbHVtbi5uYW1lfTtcblxuICAgICAgaWYoY29sdW1uLmF1dG9WYWx1ZSl7Ly93aGVuIHlvdSB3YW50IHNhbWUgYXV0byBnZW5lcmF0ZSB2YWx1ZSBhbmQgbm90IGFsbG93IGVkaXQsIGV4YW1wbGUgSUQgZmllbGRcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgZXJyb3I9dmFsaWRhdGVTdGF0ZVtjb2x1bW4uZmllbGRdPyg8c3BhbiBjbGFzc05hbWU9XCJoZWxwLWJsb2NrIGJnLWRhbmdlclwiPnt2YWxpZGF0ZVN0YXRlW2NvbHVtbi5maWVsZF19PC9zcGFuPik6bnVsbDtcbi8vID4+Pj4+Pj4gOTljZDQ1OWRlZmZkNTI2MmQ4ODY5MWU4YjA3NTk3N2JjMGEyODExZlxuXG4gICAgICAvLyBsZXQgZWRpdG9yID0gRWRpdG9yKGVkaXRhYmxlLGF0dHIsZm9ybWF0KTtcbiAgICAgIC8vIGlmKGVkaXRvci5wcm9wcy50eXBlICYmIGVkaXRvci5wcm9wcy50eXBlID09ICdjaGVja2JveCcpe1xuICAgICAgcmV0dXJuKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIiBrZXk9e2NvbHVtbi5maWVsZH0+XG4gICAgICAgICAgPGxhYmVsPntjb2x1bW4ubmFtZX08L2xhYmVsPlxuICAgICAgICAgIHtFZGl0b3IoZWRpdGFibGUsYXR0cixmb3JtYXQsJycpfVxuICAgICAgICAgIHtlcnJvcn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICAgIHZhciBtb2RhbENsYXNzID0gY2xhc3NTZXQoXCJtb2RhbFwiLCBcImZhZGVcIiAsIG1vZGFsQ2xhc3NOYW1lLHtcbiAgICAgICdpbic6dGhpcy5zdGF0ZS5zaGFrZUVkaXRvcnx8dGhpcy5zdGF0ZS52YWxpZGF0ZVN0YXRlLy9oYWNrIHByZXZlbnQgYm9vdHN0cmFwIG1vZGFsIGhpZGUgYnkgcmVSZW5kZXJcbiAgICB9KTtcbiAgICB2YXIgZGlhbG9nQ2xhc3M9Y2xhc3NTZXQoXCJtb2RhbC1kaWFsb2dcIixcIm1vZGFsLXNtXCIse1xuICAgICAgXCJhbmltYXRlZFwiOnRoaXMuc3RhdGUuc2hha2VFZGl0b3IsXG4gICAgICBcInNoYWtlXCI6dGhpcy5zdGF0ZS5zaGFrZUVkaXRvclxuICAgIH0pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj1cIm1vZGFsXCIgIGNsYXNzTmFtZT17bW9kYWxDbGFzc30gdGFiSW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtkaWFsb2dDbGFzc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+TmV3IFJlY29yZDwvaDQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICA8Zm9ybSByZWY9XCJmb3JtXCI+XG4gICAgICAgICAgICAgIHtpbnB1dEZpZWxkfVxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1pbmZvXCIgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlU2F2ZUJ0bkNsaWNrLmJpbmQodGhpcyl9PlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufVxuVG9vbEJhci5wcm9wVHlwZXMgPSB7XG4gIG9uQWRkUm93OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgb25Ecm9wUm93OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgZW5hYmxlSW5zZXJ0OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgZW5hYmxlRGVsZXRlOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgZW5hYmxlU2VhcmNoOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgY29sdW1uczogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICBzZWFyY2hQbGFjZWhvbGRlcjogUmVhY3QuUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuVG9vbEJhci5kZWZhdWx0UHJvcHMgPSB7XG4gIGVuYWJsZUluc2VydDogZmFsc2UsXG4gIGVuYWJsZURlbGV0ZTogZmFsc2UsXG4gIGVuYWJsZVNlYXJjaDogZmFsc2Vcbn1cbmV4cG9ydCBkZWZhdWx0IFRvb2xCYXI7XG4iLCJpbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5leHBvcnQgZGVmYXVsdCB7XG5cbiAgcmVuZGVyU29ydENhcmV0KG9yZGVyKSB7XG4gICAgdmFyIHdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICB3cmFwLmNsYXNzTmFtZSA9IFwib3JkZXJcIjtcbiAgICBpZihvcmRlciA9PSBDb25zdC5TT1JUX0FTQykgd3JhcC5jbGFzc05hbWUgKz0gXCIgZHJvcHVwXCI7XG4gICAgdmFyIGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgaW5uZXIuY2xhc3NOYW1lID0gXCJjYXJldFwiO1xuICAgIGlubmVyLnN0eWxlLm1hcmdpbiA9IFwiMTBweCA1cHhcIjtcbiAgICB3cmFwLmFwcGVuZENoaWxkKGlubmVyKTtcbiAgICByZXR1cm4gd3JhcDtcbiAgfVxuXG59O1xuIiwiaW1wb3J0IEJvb3RzdHJhcFRhYmxlIGZyb20gJy4vQm9vdHN0cmFwVGFibGUnO1xuaW1wb3J0IFRhYmxlSGVhZGVyQ29sdW1uIGZyb20gJy4vVGFibGVIZWFkZXJDb2x1bW4nO1xuaW1wb3J0IHtUYWJsZURhdGFTZXR9IGZyb20gJy4vc3RvcmUvVGFibGVEYXRhU3RvcmUnO1xuXG5pZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XG4gIHdpbmRvdy5Cb290c3RyYXBUYWJsZSA9IEJvb3RzdHJhcFRhYmxlO1xuICB3aW5kb3cuVGFibGVIZWFkZXJDb2x1bW4gPSBUYWJsZUhlYWRlckNvbHVtbjtcbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgQm9vdHN0cmFwVGFibGUsXG4gIFRhYmxlSGVhZGVyQ29sdW1uLFxuICBUYWJsZURhdGFTZXRcbn07XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvZGVtby9qcy9kZW1vLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QtdG9hc3RyL2xpYi9Ub2FzdENvbnRhaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC10b2FzdHIvbGliL1RvYXN0TWVzc2FnZS9hbmltYXRpb25NaXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC10b2FzdHIvbGliL1RvYXN0TWVzc2FnZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC10b2FzdHIvbGliL1RvYXN0TWVzc2FnZS9qUXVlcnlNaXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC10b2FzdHIvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2FkZG9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvQXV0b0ZvY3VzTWl4aW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0JlZm9yZUlucHV0RXZlbnRQbHVnaW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0NTU0NvcmUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0NTU1Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0NhbGxiYWNrUXVldWUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0NoYW5nZUV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9DbGllbnRSZWFjdFJvb3RJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRE9NQ2hpbGRyZW5PcGVyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9ET01Qcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRE9NUHJvcGVydHlPcGVyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9EYW5nZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9FbnRlckxlYXZlRXZlbnRQbHVnaW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0V2ZW50Q29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9FdmVudExpc3RlbmVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRQbHVnaW5SZWdpc3RyeS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRQbHVnaW5VdGlscy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXZlbnRQcm9wYWdhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL0ZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvSFRNTERPTVByb3BlcnR5Q29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9MaW5rZWRTdGF0ZU1peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9MaW5rZWRWYWx1ZVV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9Mb2NhbEV2ZW50VHJhcE1peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9Nb2JpbGVTYWZhcmlDbGlja0V2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9PYmplY3QuYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9Qb29sZWRDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3QuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENoaWxkUmVjb25jaWxlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDaGlsZHJlbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RDb21wb25lbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdENvbnRleHQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01CdXR0b24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NQ29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUZvcm0uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NSURPcGVyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTUlmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01JbWcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NSW5wdXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NT3B0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERPTVNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01TZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RE9NVGV4dENvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RET01UZXh0YXJlYS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3REZWZhdWx0SW5qZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERlZmF1bHRQZXJmLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RFbGVtZW50VmFsaWRhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVtcHR5Q29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEVycm9yVXRpbHMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RXZlbnRFbWl0dGVyTWl4aW4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0RXZlbnRMaXN0ZW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RGcmFnbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RJbmplY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0SW5wdXRTZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0SW5zdGFuY2VIYW5kbGVzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdEluc3RhbmNlTWFwLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdExpZmVDeWNsZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RMaW5rLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE1hcmt1cENoZWNrc3VtLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE1vdW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE11bHRpQ2hpbGQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdE5hdGl2ZUNvbXBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RPd25lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RQZXJmLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUcmFuc2ZlcmVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZXMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0UHV0TGlzdGVuZXJRdWV1ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RSZWNvbmNpbGVyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFJlZi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RSb290SW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0U2VydmVyUmVuZGVyaW5nLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFN0YXRlU2V0dGVycy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RUZXN0VXRpbHMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1JlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RUcmFuc2l0aW9uRXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFRyYW5zaXRpb25Hcm91cC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RVcGRhdGVRdWV1ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvUmVhY3RVcGRhdGVzLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9SZWFjdFdpdGhBZGRvbnMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1NWR0RPTVByb3BlcnR5Q29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TZWxlY3RFdmVudFBsdWdpbi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU2VydmVyUmVhY3RSb290SW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1NpbXBsZUV2ZW50UGx1Z2luLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNDbGlwYm9hcmRFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljRHJhZ0V2ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9TeW50aGV0aWNFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljRm9jdXNFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljSW5wdXRFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljS2V5Ym9hcmRFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljTW91c2VFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljVG91Y2hFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljVUlFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvU3ludGhldGljV2hlZWxFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvVHJhbnNhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL1ZpZXdwb3J0TWV0cmljcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvYWNjdW11bGF0ZUludG8uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2FkbGVyMzIuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NhbWVsaXplLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jYW1lbGl6ZVN0eWxlTmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvY2xvbmVXaXRoUHJvcHMuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NvbnRhaW5zTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvY3JlYXRlQXJyYXlGcm9tTWl4ZWQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2NyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9jcmVhdGVOb2Rlc0Zyb21NYXJrdXAuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2N4LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9kYW5nZXJvdXNTdHlsZVZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9lbXB0eUZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9lbXB0eU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9maW5kRE9NTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZmxhdHRlbkNoaWxkcmVuLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9mb2N1c05vZGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2ZvckVhY2hBY2N1bXVsYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0QWN0aXZlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRDaGFyQ29kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRLZXkuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldEV2ZW50TW9kaWZpZXJTdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0RXZlbnRUYXJnZXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldEl0ZXJhdG9yRm4uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldE1hcmt1cFdyYXAuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2dldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0VGV4dENvbnRlbnRBY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2h5cGhlbmF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvaHlwaGVuYXRlU3R5bGVOYW1lLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pbnZhcmlhbnQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2lzRXZlbnRTdXBwb3J0ZWQuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvaXNUZXh0SW5wdXRFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9pc1RleHROb2RlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9qb2luQ2xhc3Nlcy5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIva2V5TWlycm9yLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9rZXlPZi5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvbWFwT2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9tZW1vaXplU3RyaW5nT25seS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvb25seUNoaWxkLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9wZXJmb3JtYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFjdC9saWIvcGVyZm9ybWFuY2VOb3cuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3F1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9zZXRJbm5lckhUTUwuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3NldFRleHRDb250ZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi9zaGFsbG93RXF1YWwuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi90b0FycmF5LmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi90cmF2ZXJzZUFsbENoaWxkcmVuLmpzIiwibm9kZV9tb2R1bGVzL3JlYWN0L2xpYi91cGRhdGUuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvbGliL3dhcm5pbmcuanMiLCJub2RlX21vZHVsZXMvcmVhY3QvcmVhY3QuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL0Jvb3RzdHJhcFRhYmxlLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9Db25zdC5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvRWRpdG9yLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9Ob3RpZmljYXRpb24uanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1NlbGVjdFJvd0hlYWRlckNvbHVtbi5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvVGFibGVCb2R5LmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUNvbHVtbi5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvVGFibGVFZGl0Q29sdW1uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZUZpbHRlci5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvVGFibGVIZWFkZXIuanMiLCIvVXNlcnMvYWxsZW4vTm9kZS9yZWFjdC1ib290c3RyYXAtdGFibGUvc3JjL1RhYmxlSGVhZGVyQ29sdW1uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9UYWJsZVJvdy5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvcGFnaW5hdGlvbi9QYWdlQnV0dG9uLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9wYWdpbmF0aW9uL1BhZ2luYXRpb25MaXN0LmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9zdG9yZS9UYWJsZURhdGFTdG9yZS5qcyIsIi9Vc2Vycy9hbGxlbi9Ob2RlL3JlYWN0LWJvb3RzdHJhcC10YWJsZS9zcmMvdG9vbGJhci9Ub29sQmFyLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy91dGlsLmpzIiwiL1VzZXJzL2FsbGVuL05vZGUvcmVhY3QtYm9vdHN0cmFwLXRhYmxlL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7SUNBTyxLQUFLLDJCQUFNLE9BQU87O21DQUN1Qix1QkFBdUI7O0lBQS9ELGNBQWMsd0JBQWQsY0FBYztJQUFFLGlCQUFpQix3QkFBakIsaUJBQWlCOztBQUV6QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7O0FBRWxCLFNBQVMsV0FBVyxDQUFDLFFBQVEsRUFBRTtBQUM3QixNQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzlCLE9BQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsUUFBSSxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNyQixZQUFRLENBQUMsSUFBSSxDQUFDO0FBQ1osUUFBRSxFQUFFLEVBQUU7QUFDTixVQUFJLEVBQUUsWUFBWSxHQUFHLEVBQUU7QUFDdkIsV0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDO0tBQ2YsQ0FBQyxDQUFDO0dBQ0o7Q0FDRjs7QUFFRCxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBRWhCLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUM7QUFDbkMsU0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixTQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQTtDQUN2Qzs7QUFFRCxTQUFTLFdBQVcsQ0FBQyxVQUFVLEVBQUM7QUFDOUIsU0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFRCxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQztBQUNoRCxTQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBQyxRQUFRLEdBQUMsZ0JBQWdCLEdBQUMsU0FBUyxHQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLFNBQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMvQixTQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xCOztBQUVELFNBQVMsb0JBQW9CLEdBQUU7QUFDN0IsU0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0NBQ3ZDOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFDO0FBQ2hDLFNBQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNoQyxTQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3RCOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFDO0FBQzVCLFNBQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNoQyxTQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xCOztBQUVELElBQUksYUFBYSxHQUFHO0FBQ2xCLE1BQUksRUFBRSxVQUFVO0FBQ2hCLGVBQWEsRUFBRSxJQUFJOztBQUVuQixVQUFRLEVBQUUsRUFBRTtBQUNaLFNBQU8sRUFBRSxvQkFBb0I7QUFDN0IsVUFBUSxFQUFFLFdBQVc7QUFDckIsYUFBVyxFQUFFLFdBQVc7Q0FDekIsQ0FBQzs7QUFFRixJQUFJLFlBQVksR0FBRztBQUNqQixNQUFJLEVBQUUsT0FBTztBQUNiLFlBQVUsRUFBRSxJQUFJO0FBQ2hCLGVBQWEsRUFBRSxlQUFlO0NBQy9CLENBQUM7O0FBRUYsSUFBSSxPQUFPLEdBQUc7Ozs7O0FBS1osVUFBUSxFQUFFLE1BQU07QUFDaEIsV0FBUyxFQUFFLE1BQU07QUFDakIsb0JBQWtCLEVBQUUsb0JBQW9CO0FBQ3hDLGdCQUFjLEVBQUUsZ0JBQWdCO0FBQ2hDLGdCQUFjLEVBQUUsZ0JBQWdCO0FBQUEsQ0FDakMsQ0FBQzs7QUFHRixTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFDO0FBQ2hDLFNBQU8sNENBQTBDLEdBQUcsSUFBSSxDQUFDO0NBQzFEOztBQUVELEtBQUssQ0FBQyxNQUFNLENBQ1Y7QUFBQyxnQkFBYztJQUFDLElBQUksRUFBRSxRQUFRLEFBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxBQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQUFBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLEFBQUMsRUFBQyxTQUFTLEVBQUUsYUFBYSxBQUFDLEVBQUMsUUFBUSxFQUFFLFlBQVksQUFBQztBQUMvRyxhQUFTLEVBQUUsSUFBSSxBQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksQUFBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLEFBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxBQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sQUFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEFBQUM7RUFDakg7QUFBQyxxQkFBaUI7TUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFFLElBQUksQUFBQyxFQUFDLEtBQUssRUFBRSxJQUFJLEFBQUM7O0dBQStCO0VBQ2hIO0FBQUMscUJBQWlCO01BQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUUsSUFBSSxBQUFDOztHQUFpQztFQUNwRjtBQUFDLHFCQUFpQjtNQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFFLGNBQWMsQUFBQyxFQUFDLFFBQVEsRUFBRSxLQUFLLEFBQUM7O0dBQWtDO0NBQ3RHLEVBQ2xCLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQ2hDLENBQUM7OztBQ3pGRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1WEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDclJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9WQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDajdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2g1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1YUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM2FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0lDQU8sS0FBSywyQkFBTSxPQUFPOztJQUNsQixRQUFRLDJCQUFNLFlBQVk7O0lBQzFCLEtBQUssMkJBQU0sU0FBUzs7SUFDcEIsV0FBVywyQkFBTSxlQUFlOztJQUNoQyxTQUFTLDJCQUFNLGFBQWE7O0lBQzVCLGNBQWMsMkJBQU0sNkJBQTZCOztJQUNqRCxPQUFPLDJCQUFNLG1CQUFtQjs7SUFDaEMsV0FBVywyQkFBTSxlQUFlOztJQUMvQixjQUFjLFdBQU8sd0JBQXdCLEVBQTdDLGNBQWM7O0lBRWhCLGNBQWM7QUFFUCxXQUZQLGNBQWMsQ0FFTixLQUFLLEVBQUU7OzswQkFGZixjQUFjOztBQUdsQiwrQkFISSxjQUFjLDZDQUdaLEtBQUssRUFBRTs7QUFFWCxRQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUMzQixRQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7O0FBRTNCLFNBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVMsTUFBTSxFQUFDO0FBQzFELFVBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUM7QUFDcEIsWUFBRyxRQUFRLElBQUksSUFBSSxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDMUYsZ0JBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztPQUNuQztBQUNELFVBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDdkIseUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztPQUNuRTtLQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQsUUFBRyxRQUFRLElBQUksSUFBSSxFQUNqQixNQUFNLDRIQUE0SCxDQUFDOztBQUVySSxRQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDO0FBQ2pDLFVBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMzRCxVQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4QixVQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUEsVUFBQyxJQUFJLEVBQUs7QUFDckMsY0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLGNBQUssUUFBUSxDQUFDO0FBQ1osY0FBSSxFQUFFLE1BQUssWUFBWSxFQUFFO1NBQzFCLENBQUMsQ0FBQTtPQUNILENBQUEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNmLE1BQUs7QUFDSixVQUFJLENBQUMsS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbEQ7QUFDRCxRQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzs7QUFFeEUsUUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUM7QUFDdkQsVUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM3RDs7QUFFRCxRQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsVUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDekIscUJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO0tBQ2pELENBQUM7R0FDSDs7WUE1Q0csY0FBYzs7ZUFBZCxjQUFjO0FBOENsQixnQkFBWTthQUFBLHdCQUFHO0FBQ2IsWUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7QUFDdkIsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzdELEdBQUcsRUFBRSxDQUFDO1NBQ3BCLE1BQUs7QUFDSixnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDM0I7QUFDRCxlQUFPLE1BQU0sQ0FBQztPQUNmOztBQUVELDZCQUF5QjthQUFBLG1DQUFDLFNBQVMsRUFBQztBQUNsQyxZQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFDO0FBQy9CLGNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxjQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osZ0JBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1dBQzFCLENBQUMsQ0FBQztTQUNKO0FBQ0QsWUFBRyxTQUFTLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFDOztBQUVyRCxjQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0QsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLDJCQUFlLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRO1dBQzlDLENBQUMsQ0FBQztTQUNKO09BQ0Y7O0FBRUQsc0JBQWtCO2FBQUEsOEJBQUU7QUFDbEIsWUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDM0IsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztPQUMzQzs7QUFFRCx1QkFBbUI7YUFBQSwrQkFBRTtBQUNuQixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFDO0FBQ3JCLGNBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFLGNBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxjQUFjLEVBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7U0FDOUM7T0FDRjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM1QyxZQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUNwQyxZQUFJLEtBQUssR0FBRztBQUNWLGdCQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1NBQzFCLENBQUM7QUFDRixZQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDO0FBQ3JDLG1CQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25DO0FBQ0QsWUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDN0MsaUJBQU87QUFDTCxnQkFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUztBQUM1QixpQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUztBQUM3QixnQkFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUMzQixrQkFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVTtBQUMvQixvQkFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUMvQixrQkFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTTtBQUMzQixxQkFBUyxFQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZTtBQUN0QyxpQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSztBQUN6QixpQkFBSyxFQUFFLENBQUM7V0FDVCxDQUFDO1NBQ0gsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCxZQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUN6QyxZQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDbkMsWUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELGVBQ0U7O1lBQUssU0FBUyxFQUFDLG9CQUFvQjtVQUNoQyxPQUFPO1VBQ1I7O2NBQUssR0FBRyxFQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxBQUFDLEVBQUMsU0FBUyxFQUFFLFVBQVUsQUFBQztZQUNuRDtBQUFDLHlCQUFXO2dCQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEFBQUM7QUFDekMsZ0NBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEFBQUM7QUFDeEQsd0JBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEFBQUM7QUFDdEMseUJBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEFBQUM7QUFDeEMsc0JBQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUNuQyw4QkFBYyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7QUFDbkQsd0JBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQUFBQztjQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7YUFDUjtZQUNkLG9CQUFDLFNBQVMsSUFBQyxHQUFHLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQUFBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEFBQUM7QUFDNUQseUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQUFBQztBQUNwQyxxQkFBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxBQUFDO0FBQzVCLHNCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEFBQUM7QUFDOUIsbUJBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQUFBQztBQUN4QixzQkFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEFBQUM7QUFDbkMsdUJBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQUFBQztBQUNoQyx1QkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxBQUFDO0FBQ2hDLHNCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEFBQUM7QUFDOUIsNkJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQUFBQztBQUM1Qyx5QkFBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUU7WUFDaEQsV0FBVztXQUNSO1VBQ0wsVUFBVTtTQUNQLENBQ1A7T0FDRjs7QUFFRCxjQUFVO2FBQUEsb0JBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQztBQUMxQixZQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckQsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGNBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQyxDQUFDO09BQ0o7O0FBRUQsd0JBQW9CO2FBQUEsOEJBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQztBQUNyQyxZQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEQsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGNBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQyxDQUFDO09BQ0o7O0FBRUQsc0JBQWtCO2FBQUEsNEJBQUMsQ0FBQyxFQUFDO0FBQ25CLFlBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO0FBQ3pDLFlBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUN6QixZQUFHLFVBQVUsRUFBQztBQUNaLHlCQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM3Qzs7QUFFRCxZQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzlDLFlBQUksQ0FBQyxRQUFRLENBQUM7QUFDWix5QkFBZSxFQUFFLGVBQWU7U0FDakMsQ0FBQyxDQUFDO0FBQ0gsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUM7QUFDbEMsY0FBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzlDO09BQ0Y7O0FBRUQsbUJBQWU7YUFBQSx5QkFBQyxHQUFHLEVBQUUsVUFBVSxFQUFDO0FBQzlCLFlBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNuRCxZQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsRUFBQztBQUN2RCxzQkFBWSxHQUFHLFVBQVUsR0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFDLEVBQUUsQ0FBQTtTQUN0QyxNQUFNO0FBQ0wsY0FBRyxVQUFVLEVBQUU7QUFDYix3QkFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztXQUMzQixNQUFNO0FBQ0wsd0JBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBRyxFQUFDO0FBQzlDLHFCQUFPLE1BQU0sS0FBSyxHQUFHLENBQUM7YUFDdkIsQ0FBQyxDQUFDO1dBQ0o7U0FDRjs7QUFFRCxZQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzNDLFlBQUksQ0FBQyxRQUFRLENBQUM7QUFDWix5QkFBZSxFQUFFLFlBQVk7U0FDOUIsQ0FBQyxDQUFDOztBQUVILFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFDO0FBQy9CLGNBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDaEQ7T0FDRjs7QUFFRCxrQkFBYzthQUFBLHdCQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDO0FBQ3hDLFlBQUksU0FBUyxZQUFBLENBQUM7QUFDZCxhQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDN0QsY0FBRyxDQUFDLElBQUksUUFBUSxFQUFDO0FBQ2YscUJBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUNuQyxtQkFBTyxLQUFLLENBQUM7V0FDZDtTQUNGLENBQUMsQ0FBQzs7QUFFSCxZQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hFLFlBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixjQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQzs7QUFFSCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBQztBQUNuQyxjQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2pGO09BQ0Y7O0FBRUQscUJBQWlCO2FBQUEsNkJBQUU7QUFDakIsWUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBQyxFQUVqQjtPQUNGOztBQUVELGdCQUFZO2FBQUEsc0JBQUMsTUFBTSxFQUFDO0FBQ2xCLFlBQUksR0FBRyxHQUFHLElBQUk7WUFBRSxNQUFNLFlBQUEsQ0FBQztBQUN2QixZQUFJO0FBQ0YsY0FBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEIsQ0FBQyxPQUFNLENBQUMsRUFBQztBQUNSLGlCQUFPLENBQUMsQ0FBQztTQUNWOztBQUVELFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7O0FBRXZCLGNBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hELGNBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsRSxnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxRCxjQUFJLENBQUMsUUFBUSxDQUFDO0FBQ1osZ0JBQUksRUFBRSxNQUFNO1dBQ2IsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQy9DLE1BQUs7QUFDSixnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGdCQUFJLEVBQUUsTUFBTTtXQUNiLENBQUMsQ0FBQztTQUNKOztBQUVELFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFDO0FBQ25DLGNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzQztPQUNGOztBQUVELGlCQUFhO2FBQUEseUJBQUU7QUFDYixZQUFJLE1BQU0sWUFBQSxDQUFDO0FBQ1gsWUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOztBQUVsRCxZQUFHLFdBQVcsSUFBRSxXQUFXLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBQztBQUNuQyxjQUFHLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLEVBQUM7QUFBQyxtQkFBTTtXQUFDO1NBQ2xEO0FBQ0QsWUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDL0IsWUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7QUFFakMsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixjQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4RCxjQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEUsY0FBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDeEQsY0FBRyxXQUFXLEdBQUcsWUFBWSxFQUMzQixXQUFXLEdBQUcsWUFBWSxDQUFDO0FBQzdCLGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pELGNBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixnQkFBSSxFQUFFLE1BQU07QUFDWiwyQkFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUU7V0FDakQsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlDLE1BQUk7QUFDSCxnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGdCQUFJLEVBQUUsTUFBTTtBQUNaLDJCQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtXQUNqRCxDQUFDLENBQUM7U0FDSjtBQUNELFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFDO0FBQ25DLGNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNoRDtPQUNGOztBQUVELG9CQUFnQjthQUFBLDBCQUFDLFNBQVMsRUFBQztBQUN6QixZQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QixZQUFJLE1BQU0sWUFBQSxDQUFDO0FBQ1gsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixjQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4RCxnQkFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEMsTUFBSTtBQUNILGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMzQjtBQUNELFlBQUksQ0FBQyxRQUFRLENBQUM7QUFDWixjQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztPQUNKOztBQUVELGdCQUFZO2FBQUEsc0JBQUMsVUFBVSxFQUFDO0FBQ3RCLFlBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlCLFlBQUksTUFBTSxZQUFBLENBQUM7QUFDWCxZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFDO0FBQ3ZCLGNBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hELGdCQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQyxNQUFJO0FBQ0gsZ0JBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzNCO0FBQ0QsWUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLGNBQUksRUFBRSxNQUFNO1NBQ2IsQ0FBQyxDQUFDO09BQ0o7O0FBRUQsb0JBQWdCO2FBQUEsNEJBQUU7QUFDaEIsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBQztBQUN2QixpQkFDRTs7O1lBQ0Usb0JBQUMsY0FBYyxJQUFDLEdBQUcsRUFBQyxZQUFZO0FBQ2hCLHNCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsQUFBQztBQUN2Qyx3QkFBVSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7QUFDakQseUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxBQUFDO0FBQzNFLDZCQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQUFBQztBQUNoRiw0QkFBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsZUFBZSxBQUFDO0FBQzNFLHNCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQUFBQyxHQUFHO1dBQ2pELENBQ1A7U0FDRixNQUFLO0FBQ0osaUJBQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjs7QUFFRCxpQkFBYTthQUFBLHlCQUFFO0FBQ2IsWUFBSSxPQUFPLFlBQUEsQ0FBQztBQUNaLFlBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFDO0FBQ3BDLGlCQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFDO0FBQ2hELGdCQUFJLEtBQUssR0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3ZCLG1CQUFPOzs7Ozs7QUFNTCxrQkFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRO0FBQ3BCLG1CQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVM7O0FBRXRCLHVCQUFTLEVBQUMsS0FBSyxDQUFDLFNBQVMsSUFBRSxLQUFLOztBQUVoQyxzQkFBUSxFQUFDLEtBQUssQ0FBQyxRQUFRLElBQUcsT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFHLFVBQVUsQUFBQyxHQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBQyxLQUFLLENBQUMsUUFBUTtBQUM3RixvQkFBTSxFQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUMsTUFBTSxHQUFDLEtBQUs7O0FBQUEsYUFFakMsQ0FBQztXQUNILENBQUMsQ0FBQztTQUNKLE1BQU07QUFDTCxpQkFBTyxHQUFHLENBQUM7QUFDVCxnQkFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQ3hDLGlCQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVM7QUFDMUMsb0JBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUTtXQUM3QyxDQUFDLENBQUM7U0FDSjtBQUNELFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUM7QUFDbkUsaUJBQ0U7O2NBQUssU0FBUyxFQUFDLFVBQVU7WUFDdkIsb0JBQUMsT0FBTyxJQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQUFBQztBQUNuQywwQkFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxBQUFDO0FBQ25DLDBCQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEFBQUM7QUFDaEMscUJBQU8sRUFBRSxPQUFPLEFBQUM7QUFDakIsK0JBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQUFBQztBQUNoRCxzQkFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQ3ZDLDJCQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztBQUNqRCx1QkFBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDO0FBQ3pDLHNCQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUMsR0FBRTtXQUM5QyxDQUNQO1NBQ0YsTUFBSTtBQUNILGlCQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7O0FBRUQscUJBQWlCO2FBQUEsMkJBQUMsT0FBTyxFQUFDO0FBQ3hCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUM7QUFDekIsaUJBQ0Usb0JBQUMsV0FBVyxJQUFDLE9BQU8sRUFBRSxPQUFPLEFBQUM7QUFDakIseUJBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEFBQUM7QUFDekMsb0JBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUUsQ0FDMUQ7U0FDSCxNQUFJO0FBQ0gsaUJBQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjs7OztTQXpZRyxjQUFjO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBMlk1QyxjQUFjLENBQUMsU0FBUyxHQUFHO0FBQ3pCLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDOUIsTUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztBQUMzQixTQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzdCLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDOUIsT0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMzQixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQy9CLFlBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDaEMsbUJBQWlCLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ3pDLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUMvQixRQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQzVCLFdBQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDL0IsWUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztBQUMvQixZQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzlCLGVBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDakMsaUJBQWEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDbkMsb0JBQWdCLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3RDLDRCQUF3QixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtHQUMvQyxDQUFDO0FBQ0YsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQzlCLFFBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDNUIsY0FBVSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNoQyxpQkFBYSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtHQUNwQyxDQUFDO0FBQ0YsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMvQixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQy9CLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDNUIsY0FBWSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNsQyxhQUFXLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ2hDLFNBQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUM3QixZQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLGFBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDakMsc0JBQWtCLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3hDLGtCQUFjLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3BDLGtCQUFjLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3BDLFFBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDNUIsbUJBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDdEMsZUFBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNuQyxrQkFBYyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtHQUN2QyxDQUFDO0NBQ0gsQ0FBQztBQUNGLGNBQWMsQ0FBQyxZQUFZLEdBQUc7QUFDNUIsUUFBTSxFQUFFLE1BQU07QUFDZCxTQUFPLEVBQUUsS0FBSztBQUNkLFVBQVEsRUFBRSxJQUFJO0FBQ2QsT0FBSyxFQUFFLEtBQUs7QUFDWixXQUFTLEVBQUUsS0FBSztBQUNoQixZQUFVLEVBQUUsS0FBSztBQUNqQixtQkFBaUIsRUFBRSxTQUFTO0FBQzVCLFdBQVMsRUFBRTtBQUNULFFBQUksRUFBRSxLQUFLLENBQUMsZUFBZTtBQUMzQixXQUFPLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtBQUNsQyxZQUFRLEVBQUUsRUFBRTtBQUNaLFlBQVEsRUFBRSxTQUFTO0FBQ25CLGVBQVcsRUFBRSxTQUFTO0FBQ3RCLGlCQUFhLEVBQUUsS0FBSztBQUNwQixvQkFBZ0IsRUFBRSxLQUFLO0FBQ3ZCLDRCQUF3QixFQUFFLEtBQUs7R0FDaEM7QUFDRCxVQUFRLEVBQUM7QUFDUCxRQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWM7QUFDMUIsY0FBVSxFQUFFLEtBQUs7QUFDakIsaUJBQWEsRUFBRSxTQUFTO0dBQ3pCO0FBQ0QsV0FBUyxFQUFFLEtBQUs7QUFDaEIsV0FBUyxFQUFFLEtBQUs7QUFDaEIsUUFBTSxFQUFFLEtBQUs7QUFDYixjQUFZLEVBQUUsS0FBSztBQUNuQixhQUFXLEVBQUUsRUFBRTtBQUNmLFNBQU8sRUFBRTtBQUNQLFlBQVEsRUFBRSxTQUFTO0FBQ25CLGFBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztBQUMxQixzQkFBa0IsRUFBRSxTQUFTO0FBQzdCLGtCQUFjLEVBQUUsU0FBUztBQUN6QixrQkFBYyxFQUFFLFNBQVM7QUFDekIsUUFBSSxFQUFFLENBQUM7QUFDUCxtQkFBZSxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7QUFDekMsZUFBVyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFDeEMsa0JBQWMsRUFBRSxLQUFLLENBQUMsZUFBZTtHQUN0QztDQUNGLENBQUM7O2lCQUVhLGNBQWM7Ozs7Ozs7aUJDeGVkO0FBQ2IsV0FBUyxFQUFFLE1BQU07QUFDakIsVUFBUSxFQUFFLEtBQUs7QUFDZixlQUFhLEVBQUUsRUFBRTtBQUNqQixXQUFTLEVBQUUsR0FBRztBQUNkLFdBQVMsRUFBRSxJQUFJO0FBQ2YsVUFBUSxFQUFFLEdBQUc7QUFDYixZQUFVLEVBQUUsSUFBSTtBQUNoQixxQkFBbUIsRUFBRSxFQUFFO0FBQ3ZCLGlCQUFlLEVBQUUsTUFBTTtBQUN2QixtQkFBaUIsRUFBRSxPQUFPO0FBQzFCLGtCQUFnQixFQUFFLFVBQVU7QUFDNUIsZ0JBQWMsRUFBRSxNQUFNO0FBQ3RCLGlCQUFlLEVBQUUsT0FBTztBQUN4QixtQkFBaUIsRUFBRSxTQUFTO0FBQzVCLG9CQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3BDLGlCQUFlLEVBQUUsQ0FBQztDQUNuQjs7Ozs7Ozs7O0lDakJNLEtBQUssMkJBQU0sT0FBTzs7QUFDekIsSUFBSSxNQUFNLEdBQUMsZ0JBQVMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBQzs7QUFHbEUsUUFBRyxRQUFRLEtBQUcsSUFBSSxJQUFFLE9BQU8sUUFBUSxLQUFHLFFBQVEsRUFBQzs7QUFDM0MsWUFBSSxJQUFJLEdBQUMsUUFBUSxLQUFHLElBQUksR0FBQyxNQUFNLEdBQUMsUUFBUSxDQUFDO0FBQ3pDLGVBQ0ksMENBQVcsSUFBSSxJQUFFLElBQUksRUFBRSxJQUFJLEFBQUMsRUFBQyxZQUFZLEVBQUUsWUFBWSxBQUFDO0FBQ2pELHFCQUFTLEVBQUUsQ0FBQyxXQUFXLElBQUUsRUFBRSxDQUFBLEdBQUUsZ0NBQWdDLEFBQUMsSUFBRyxDQUMzRTtLQUNKLE1BQU0sSUFBRyxDQUFDLFFBQVEsRUFBQztBQUNsQixZQUFJLElBQUksR0FBQyxRQUFRLEtBQUcsSUFBSSxHQUFDLE1BQU0sR0FBQyxRQUFRLENBQUM7QUFDekMsZUFDSSwwQ0FBVyxJQUFJLElBQUUsSUFBSSxFQUFFLElBQUksQUFBQyxFQUFDLFlBQVksRUFBRSxZQUFZLEFBQUMsRUFBQyxRQUFRLEVBQUMsVUFBVTtBQUNyRSxxQkFBUyxFQUFFLENBQUMsV0FBVyxJQUFFLEVBQUUsQ0FBQSxHQUFFLGdDQUFnQyxBQUFDLElBQUcsQ0FDM0U7S0FDRixNQUFNLElBQUcsUUFBUSxDQUFDLElBQUksRUFBQzs7O0FBRXBCLGdCQUFRLENBQUMsS0FBSyxLQUFHLElBQUksQ0FBQyxLQUFLLEdBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQSxBQUFDLENBQUM7OztBQUc1QyxZQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsV0FBVyxJQUFFLEVBQUUsQ0FBQSxHQUNoQiw0QkFBNEIsR0FDNUIsUUFBUSxDQUFDLElBQUksSUFDWixRQUFRLENBQUMsU0FBUyxHQUFFLEdBQUcsR0FBQyxRQUFRLENBQUMsU0FBUyxHQUFFLEVBQUUsQ0FBQSxBQUFDLENBQUM7O0FBRWxFLFlBQUcsUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUM7O0FBQzFCLGdCQUFJLE9BQU8sR0FBRyxFQUFFO2dCQUFFLE1BQU0sR0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNqRCxnQkFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFDOztBQUNyQixvQkFBSSxRQUFRLENBQUM7QUFDYix1QkFBTyxHQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQyxFQUFDO0FBQzVCLDRCQUFRLEdBQUMsTUFBTSxHQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUM7QUFDNUIsMkJBQ0k7OzBCQUFRLEdBQUcsRUFBRSxRQUFRLEdBQUMsQ0FBQyxBQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsQUFBQzt3QkFBRSxRQUFRO3FCQUFVLENBQ3pEO2lCQUNKLENBQUMsQ0FBQzthQUNOO0FBQ0QsbUJBQ0k7OzZCQUFZLElBQUksSUFBRSxZQUFZLEVBQUUsWUFBWSxBQUFDO2dCQUFFLE9BQU87YUFBVSxDQUNsRTtTQUNMLE1BQU0sSUFBRyxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBQzs7O0FBRW5DLG9CQUFRLENBQUMsSUFBSSxLQUFHLElBQUksQ0FBQyxJQUFJLEdBQUMsUUFBUSxDQUFDLElBQUksQ0FBQSxBQUFDLENBQUM7QUFDekMsb0JBQVEsQ0FBQyxJQUFJLEtBQUcsSUFBSSxDQUFDLElBQUksR0FBQyxRQUFRLENBQUMsSUFBSSxDQUFBLEFBQUMsQ0FBQztBQUN6QyxnQkFBSSxZQUFZLEdBQUMsSUFBSSxDQUFDLFNBQVM7Z0JBQUMsT0FBTyxHQUFDLElBQUksQ0FBQztBQUM3QyxnQkFBRyxZQUFZLEVBQUM7QUFDWixvQkFBSSxDQUFDLFNBQVMsR0FBQyxVQUFTLENBQUMsRUFBQztBQUN0Qix3QkFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRTs7QUFDakIsb0NBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDbkI7aUJBQ0osQ0FBQztBQUNGLHVCQUFPLEdBQUM7O3NCQUFPLFNBQVMsRUFBQyx1Q0FBdUMsRUFBQyxPQUFPLEVBQUUsWUFBWSxBQUFDOztpQkFBYSxDQUFBO2FBQ3ZHOztBQUVELG1CQUNJOzs7Z0JBQ0ksNkNBQWMsSUFBSSxJQUFFLFlBQVksRUFBRSxZQUFZLEFBQUMsSUFBWTtnQkFDMUQsT0FBTzthQUNOLENBRVI7U0FDTCxNQUFNLElBQUcsUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUM7QUFDckMsZ0JBQUksT0FBTSxHQUFHLFlBQVksQ0FBQztBQUMxQixnQkFBRyxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFDOztBQUU3Qyx1QkFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQ2xDO0FBQ0QsZ0JBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNELGdCQUFJLENBQUMsU0FBUyxJQUFJLHNCQUFzQixDQUFDOztBQUV6QyxnQkFBSSxPQUFPLEdBQUcsWUFBWSxJQUFJLE9BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxHQUFDLEtBQUssQ0FBQzs7QUFFOUQsbUJBQ0UsMENBQVcsSUFBSSxJQUFFLElBQUksRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFFLE9BQU0sQUFBQyxFQUFDLGNBQWMsRUFBRSxPQUFPLEFBQUMsSUFBRSxDQUMxRTtTQUNILE1BQUs7O0FBQ0YsbUJBQ0ksMENBQVcsSUFBSSxJQUFFLElBQUksRUFBRSxJQUFJLEFBQUMsRUFBQyxZQUFZLEVBQUUsWUFBWSxBQUFDLElBQUUsQ0FDN0Q7U0FDSjtLQUNKOztBQUVELFdBQ0ksMENBQVcsSUFBSSxJQUFFLElBQUksRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxJQUFFLEVBQUUsQ0FBQSxHQUFFLGdDQUFnQyxBQUFDLElBQUUsQ0FDaEc7Q0FDSixDQUFDOztpQkFFYSxNQUFNOzs7Ozs7Ozs7Ozs7O0lDdkZkLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsS0FBSywyQkFBTSxTQUFTOztJQUNwQixNQUFNLDJCQUFNLGNBQWM7O0FBRWpDLElBQUksZUFBZSxHQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7QUFDMUMsSUFBSSxvQkFBb0IsR0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7O0lBRXRFLFlBQVk7V0FBWixZQUFZOzBCQUFaLFlBQVk7Ozs7Ozs7WUFBWixZQUFZOztlQUFaLFlBQVk7QUFFaEIsVUFBTTs7O2FBQUEsZ0JBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUM7QUFDcEIsWUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ2xCLEdBQUcsRUFBQyxLQUFLLEVBQUU7QUFDVCxjQUFJLEVBQUMsUUFBUTtBQUNiLGlCQUFPLEVBQUUsSUFBSTtBQUNiLHlCQUFlLEVBQUUsSUFBSTtBQUNyQix1QkFBYSxFQUFFLG9CQUFvQjtBQUNuQyx1QkFBYSxFQUFFLG9CQUFvQjtTQUNwQyxDQUFDLENBQUM7T0FDUjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixlQUNJLG9CQUFDLGVBQWUsSUFBQyxHQUFHLEVBQUMsUUFBUSxFQUFDLG1CQUFtQixFQUFFLG9CQUFvQixBQUFDO0FBQ3ZELFlBQUUsRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUMsaUJBQWlCLEdBQW1CLENBQ3hGO09BQ0Y7Ozs7U0FsQkcsWUFBWTtHQUFTLEtBQUssQ0FBQyxTQUFTOztpQkFxQjNCLFlBQVk7Ozs7Ozs7Ozs7Ozs7SUM1QnBCLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsUUFBUSwyQkFBTSxZQUFZOztJQUMxQixLQUFLLDJCQUFNLFNBQVM7O0lBRXJCLHFCQUFxQjtXQUFyQixxQkFBcUI7MEJBQXJCLHFCQUFxQjs7Ozs7OztZQUFyQixxQkFBcUI7O2VBQXJCLHFCQUFxQjtBQUV6QixVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLE9BQU8sR0FBRztBQUNaLGVBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQzs7QUFFRixlQUNFOztZQUFJLEtBQUssRUFBRSxPQUFPLEFBQUM7VUFDakI7O2NBQUssU0FBUyxFQUFDLDhCQUE4QjtZQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FDaEI7U0FDSCxDQUNOO09BQ0Y7Ozs7U0FkRyxxQkFBcUI7R0FBUyxLQUFLLENBQUMsU0FBUzs7aUJBaUJwQyxxQkFBcUI7Ozs7Ozs7Ozs7Ozs7OztJQ3JCN0IsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsV0FBVywyQkFBTSxlQUFlOztJQUNoQyxlQUFlLDJCQUFNLG1CQUFtQjs7SUFDeEMsUUFBUSwyQkFBTSxZQUFZOztBQUVqQyxJQUFJLEtBQUssR0FBQyxlQUFTLEdBQUcsRUFBQztBQUNyQixTQUFPLEdBQUcsSUFBRyxPQUFPLEdBQUcsS0FBRyxVQUFVLEFBQUMsQ0FBQztDQUV2QyxDQUFDOztJQUNJLFNBQVM7QUFFRixXQUZQLFNBQVMsQ0FFRCxLQUFLLEVBQUU7MEJBRmYsU0FBUzs7QUFHYiwrQkFISSxTQUFTLDZDQUdQLEtBQUssRUFBRTtBQUNYLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxrQkFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQztBQUNGLFFBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0dBQ3RCOztZQVJHLFNBQVM7O2VBQVQsU0FBUztBQVViLFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7O0FBRW5ELFlBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUU7QUFDbkMseUJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87QUFDbkMsMEJBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO0FBQ3JDLHVCQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO0FBQy9CLDJCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztTQUN4QyxDQUFDLENBQUM7O0FBRUgsWUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUNwRCxZQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7QUFFN0QsWUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVMsSUFBSSxFQUFFLENBQUMsRUFBQztBQUNuRCxjQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBUyxNQUFNLEVBQUUsQ0FBQyxFQUFDO0FBQzNELGdCQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLGdCQUFHLElBQUksQ0FBQyxPQUFPLElBQ2IsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7QUFDbkMsa0JBQU0sQ0FBQyxRQUFRO0FBQ2YsZ0JBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksSUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsSUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBQztBQUMvQixrQkFBSSxNQUFNLEdBQUMsTUFBTSxDQUFDLE1BQU0sR0FBQyxVQUFTLEtBQUssRUFBQztBQUN0Qyx1QkFBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFDLEVBQUUsQ0FBQyxDQUFDO2VBQ3ZELEdBQUMsS0FBSyxDQUFDOztBQUVWLHFCQUNJO0FBQUMsK0JBQWU7a0JBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7O0FBRXJELDBCQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxRQUFRLEFBQUM7QUFDdEYsd0JBQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFDLE1BQU0sR0FBQyxLQUFLLEFBQUM7QUFDbkMscUJBQUcsRUFBRSxDQUFDLEFBQUM7QUFDUCw0QkFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQUFBQztBQUMzQywwQkFBUSxFQUFFLENBQUMsQUFBQztBQUNaLDBCQUFRLEVBQUUsQ0FBQyxBQUFDO2dCQUMxQixVQUFVO2VBQ0ssQ0FDbkI7YUFDSixNQUFLOztBQUVKLGtCQUFJLFdBQVcsR0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQzs7QUFFL0Ysa0JBQUcsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBQztBQUN0QyxvQkFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckQsb0JBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3pDLGdDQUFjLEdBQUcsNkJBQUssdUJBQXVCLEVBQUUsRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFDLEFBQUMsR0FBTyxDQUFDO2lCQUNqRjtBQUNELHVCQUNFO0FBQUMsNkJBQVc7b0JBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEFBQUM7QUFDeEIsdUJBQUcsRUFBRSxDQUFDLEFBQUM7QUFDUCw2QkFBUyxFQUFFLFdBQVcsQUFBQztBQUN2Qiw0QkFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxBQUFDO0FBQzlCLDBCQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7QUFDdkMseUJBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxBQUFDO2tCQUM5QixjQUFjO2lCQUNILENBQ2Y7ZUFDRixNQUFLO0FBQ0osdUJBQ0U7QUFBQyw2QkFBVztvQkFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQUFBQztBQUN4Qix1QkFBRyxFQUFFLENBQUMsQUFBQztBQUNQLDZCQUFTLEVBQUUsV0FBVyxBQUFDO0FBQ3ZCLDRCQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEFBQUM7QUFDOUIsMEJBQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxBQUFDO0FBQ3RCLDBCQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7QUFDdkMseUJBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxBQUFDO2tCQUM5QixVQUFVO2lCQUNDLENBQ2Y7ZUFDRjthQUNGO1dBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULGNBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztBQUVuRixjQUFJLGVBQWUsR0FBRyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUMxRCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEdBQUMsSUFBSSxDQUFDOzs7O0FBSWxFLGNBQUksV0FBVyxHQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQzs7QUFFcEcsaUJBQ0U7QUFBQyxvQkFBUTtjQUFDLFVBQVUsRUFBRSxRQUFRLEFBQUMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxBQUFDLEVBQUMsU0FBUyxFQUFFLFdBQVcsQUFBQztBQUM3RCx1QkFBUyxFQUFFLGtCQUFrQixHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFDLFNBQVMsQUFBQztBQUM3RCw0QkFBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsY0FBYyxBQUFDO0FBQ2xFLHlCQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7WUFDNUMsZUFBZTtZQUNmLFlBQVk7V0FDSixDQUNaO1NBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCxZQUFHLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFDO0FBQ3hCLG1CQUFTLENBQUMsSUFBSSxDQUNkO0FBQUMsb0JBQVE7Y0FBQyxHQUFHLEVBQUMsaUJBQWlCO1lBQzdCOztnQkFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFFLGtCQUFrQixHQUFDLENBQUMsR0FBQyxDQUFDLENBQUEsQUFBQyxBQUFDO0FBQzVELHFCQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEFBQUM7O2FBRTlCO1dBQ0ksQ0FBQyxDQUFDO1NBQ2Q7O0FBRUQsWUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDckIsZUFDRTs7WUFBSyxTQUFTLEVBQUUsZ0JBQWdCLEFBQUM7VUFDL0I7O2NBQU8sU0FBUyxFQUFFLFlBQVksQUFBQztZQUM1QixXQUFXO1lBQ1o7OztjQUNHLFNBQVM7YUFDSjtXQUNGO1NBQ0osQ0FDUDtPQUNGOztBQUVELHFCQUFpQjthQUFBLDJCQUFDLGtCQUFrQixFQUFDO0FBQ25DLFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQzs7QUFFM0IsWUFBRyxrQkFBa0IsRUFBQztBQUNwQixjQUFJLEtBQUssR0FBRztBQUNWLGlCQUFLLEVBQUMsRUFBRTtXQUNULENBQUE7QUFDRCx5QkFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFDLElBQUksR0FBRSw0QkFBSSxLQUFLLEVBQUUsS0FBSyxBQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxBQUFDLEdBQU0sQUFBQyxDQUFDO1NBQ2pHO0FBQ0QsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBQztBQUN0RCxjQUFJLEtBQUssR0FBQztBQUNSLG1CQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBQyxNQUFNLEdBQUMsSUFBSTtBQUNsQyxpQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1dBQ3BCLENBQUM7QUFDRixpQkFBUSw0QkFBSSxLQUFLLEVBQUUsS0FBSyxBQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsQUFBQyxFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxBQUFDLEdBQU0sQ0FBRTtTQUN2RSxDQUFDLENBQUM7O0FBRUgsZUFDRTs7O1VBQ0U7OztZQUFLLGVBQWU7WUFBRSxPQUFPO1dBQU07U0FDN0IsQ0FDVDtPQUNGOztBQUVELG1CQUFlO2FBQUEseUJBQUMsUUFBUSxFQUFFLFVBQVUsRUFBQztBQUNuQyxZQUFJLEdBQUcsRUFBRSxXQUFXLENBQUM7QUFDckIsWUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVMsR0FBRyxFQUFFLENBQUMsRUFBQztBQUN0QyxjQUFHLENBQUMsSUFBSSxRQUFRLEdBQUMsQ0FBQyxFQUFDO0FBQ2pCLGVBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQix1QkFBVyxHQUFHLEdBQUcsQ0FBQztXQUNuQjtTQUNGLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDVCxZQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7T0FDakQ7O0FBRUQsOEJBQTBCO2FBQUEsb0NBQUMsQ0FBQyxFQUFDO0FBQzNCLFlBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBQztBQUN2RixjQUFJLENBQUMsZUFBZSxDQUNsQixDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEY7T0FDRjs7QUFFRCxrQkFBYzthQUFBLHdCQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUM7QUFDbkMsWUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsWUFBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBQztBQUM1QixxQkFBVyxFQUFFLENBQUM7QUFDZCxjQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUN0QyxXQUFXLEVBQUUsQ0FBQztTQUNqQjtBQUNELGdCQUFRLEVBQUUsQ0FBQztBQUNYLFlBQUksUUFBUSxHQUFHO0FBQ2Isc0JBQVksRUFBRTtBQUNaLGVBQUcsRUFBRSxRQUFRO0FBQ2IsZUFBRyxFQUFFLFdBQVc7V0FDakI7U0FDRixDQUFDOztBQUVGLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUM7O0FBRS9DLGNBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEcsY0FBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDN0M7QUFDRCxZQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ3pCOztBQUVELGNBQVU7YUFBQSxzQkFBRTtBQUNWLFlBQUksWUFBWSxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0FBQ3pDLFlBQUcsWUFBWSxFQUFDO0FBQ2QsY0FBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBQyxZQUFZLENBQUMsR0FBRyxFQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyRTtPQUNGOztBQUVELDBCQUFzQjthQUFBLGdDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFDO0FBQ25ELFlBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztBQUNwQyxZQUFHLElBQUksSUFBSSxNQUFNLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztPQUN6RTs7QUFFRCx5QkFBcUI7YUFBQSwrQkFBQyxRQUFRLEVBQUM7QUFDN0IsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQ3ZELGlCQUFRO0FBQUMsdUJBQVc7O1lBQUMsK0JBQU8sSUFBSSxFQUFDLE9BQU8sRUFBQyxJQUFJLEVBQUMsV0FBVyxFQUFDLE9BQU8sRUFBRSxRQUFRLEFBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQyxHQUFFO1dBQWMsQ0FBRTtTQUNySixNQUFLO0FBQ0osaUJBQVE7QUFBQyx1QkFBVzs7WUFBRSwrQkFBTyxJQUFJLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBRSxRQUFRLEFBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQyxHQUFFO1dBQWMsQ0FBRTtTQUN4STtPQUNGOztBQUVELHVCQUFtQjthQUFBLCtCQUFFO0FBQ25CLGVBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztPQUMzRDs7OztTQXRORyxTQUFTO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBd052QyxTQUFTLENBQUMsU0FBUyxHQUFHO0FBQ3BCLE1BQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDM0IsU0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztBQUM5QixTQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzdCLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDOUIsT0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUMzQixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQy9CLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsaUJBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDdEMsYUFBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtDQUNsQyxDQUFDO2lCQUNhLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDOU9qQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLEtBQUssMkJBQU0sU0FBUzs7SUFFckIsV0FBVztBQUVKLFdBRlAsV0FBVyxDQUVILEtBQUssRUFBRTswQkFGZixXQUFXOztBQUdmLCtCQUhJLFdBQVcsNkNBR1QsS0FBSyxFQUFFO0dBQ1o7O1lBSkcsV0FBVzs7ZUFBWCxXQUFXO0FBTWYsa0JBQWM7YUFBQSx3QkFBQyxDQUFDLEVBQUM7QUFDZixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUM7QUFDckQsY0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ2pELG9CQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1dBQzVCLE1BQU0sSUFBRyxNQUFNLENBQUMsWUFBWSxFQUFFO0FBQzNCLGdCQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDaEMsZUFBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1dBQ3pCO1NBQ0Y7QUFDRCxZQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDZixDQUFDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQ3RDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7T0FDOUI7O0FBRUQsVUFBTTthQUFBLGtCQUFFO0FBQ04sWUFBSSxPQUFPLEdBQUc7QUFDWixtQkFBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztBQUMvQixpQkFBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLE1BQU0sR0FBQyxJQUFJO1NBQ3ZDLENBQUM7O0FBRUYsWUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2QsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBQztBQUNyQixjQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFDO0FBQ25ELGdCQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQy9DLE1BQUssSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFDO0FBQzNELGdCQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQ3JEO1NBQ0Y7QUFDRCxlQUNFOztxQkFBSSxLQUFLLEVBQUUsT0FBTyxBQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxBQUFDLElBQUssSUFBSTtVQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7U0FDakIsQ0FDTjtPQUNGOzs7O1NBdkNHLFdBQVc7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUF5Q3pDLFdBQVcsQ0FBQyxTQUFTLEdBQUc7QUFDdEIsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNqQyxRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzVCLFdBQVMsRUFBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07Q0FDakMsQ0FBQzs7QUFFRixXQUFXLENBQUMsWUFBWSxHQUFHO0FBQ3pCLFdBQVMsRUFBRSxNQUFNO0FBQ2pCLFFBQU0sRUFBRSxLQUFLO0FBQ2IsV0FBUyxFQUFDLEVBQUU7Q0FDYixDQUFBO2lCQUNjLFdBQVc7Ozs7Ozs7Ozs7Ozs7OztJQ3ZEbkIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLE1BQU0sMkJBQU0sVUFBVTs7SUFDdEIsUUFBUSwyQkFBTSxtQkFBbUI7O0lBQ2pDLFFBQVEsMkJBQU0sWUFBWTs7SUFFM0IsZUFBZTtBQUNOLGFBRFQsZUFBZSxDQUNMLEtBQUssRUFBQzs4QkFEaEIsZUFBZTs7QUFFYixtQ0FGRixlQUFlLDZDQUVQLEtBQUssRUFBRTtBQUNiLFlBQUksQ0FBQyxhQUFhLEdBQUMsQ0FBQyxDQUFDO0FBQ3JCLFlBQUksQ0FBQyxLQUFLLEdBQUM7QUFDUCx1QkFBVyxFQUFDLEtBQUs7U0FDcEIsQ0FBQztLQUNMOztjQVBDLGVBQWU7O2lCQUFmLGVBQWU7QUFTbkIsc0JBQWM7bUJBQUEsd0JBQUMsQ0FBQyxFQUFDO0FBQ2Ysb0JBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUU7O0FBQ25CLHdCQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxVQUFVLEdBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQzs7QUFFOUQsd0JBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFDO0FBQ3RCLCtCQUFPO3FCQUNWO0FBQ0Qsd0JBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDcEQsTUFBSyxJQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFDO0FBQ3ZCLHdCQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25EO2FBQ0Y7O0FBRUQsa0JBQVU7bUJBQUEsb0JBQUMsQ0FBQyxFQUFDO0FBQ1gsb0JBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUM7QUFDdkIsd0JBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLFVBQVUsR0FDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0FBQzlELHdCQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBQztBQUN0QiwrQkFBTztxQkFDVjtBQUNELHdCQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3REO2FBQ0Y7O0FBQ0QsaUJBQVM7bUJBQUEsbUJBQUMsS0FBSyxFQUFDO0FBQ1osb0JBQUksRUFBRSxHQUFDLElBQUksQ0FBQztBQUNaLG9CQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBQztBQUMzQix3QkFBSSxLQUFLLEdBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdDLHdCQUFHLEtBQUssS0FBRyxJQUFJLEVBQUM7QUFDWiwwQkFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQyxLQUFLLEVBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUNoRSw0QkFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7O0FBRTFDLDBCQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEIsMEJBQUUsQ0FBQyxRQUFRLENBQUMsRUFBQyxXQUFXLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztBQUNoQywwQkFBRSxDQUFDLGFBQWEsR0FBQyxVQUFVLENBQUMsWUFBVTtBQUFDLDhCQUFFLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7eUJBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQztBQUMvRSw2QkFBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2QsK0JBQU8sS0FBSyxDQUFDO3FCQUNoQjtpQkFDSjtBQUNELHVCQUFPLElBQUksQ0FBQzthQUVmOztBQUNELG9CQUFZOzs7Ozs7Ozs7OztlQUFBLFlBQUU7QUFDVixvQkFBRyxJQUFJLENBQUMsYUFBYSxJQUFFLENBQUMsRUFBQztBQUNyQixnQ0FBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNqQyx3QkFBSSxDQUFDLGFBQWEsR0FBQyxDQUFDLENBQUM7aUJBQ3hCO2FBQ0o7O0FBQ0QseUJBQWlCO21CQUFBLDZCQUFFO0FBQ2Ysb0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDOztBQUU1QyxxQkFBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2pCOztBQUVELDRCQUFvQjttQkFBQSxnQ0FBRztBQUNyQixvQkFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCOztBQUVELGNBQU07bUJBQUEsa0JBQUU7QUFDTixvQkFBSSxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO29CQUM1QixNQUFNLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO29CQUN4QixJQUFJLEdBQUM7QUFDRCx1QkFBRyxFQUFDLFVBQVU7QUFDZCw2QkFBUyxFQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN4QywwQkFBTSxFQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDcEMsQ0FBQzs7QUFFRix3QkFBUSxDQUFDLFdBQVcsS0FBRyxJQUFJLENBQUMsV0FBVyxHQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUEsQUFBQyxDQUFDOztBQUVsRSxvQkFBSSxXQUFXLEdBQUMsUUFBUSxDQUFDLEVBQUMsVUFBVyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBQyxPQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQztBQUM3Rix1QkFDSTs7c0JBQUksR0FBRyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLEFBQUM7b0JBQ3JDLE1BQU0sQ0FBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxXQUFXLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUUsRUFBRSxDQUFDO29CQUNqRSxvQkFBQyxRQUFRLElBQUMsR0FBRyxFQUFDLFVBQVUsR0FBWTtpQkFDbkMsQ0FDUjthQUNGOztBQUVELHlCQUFpQjttQkFBQSwyQkFBQyxDQUFDLEVBQUM7QUFDbEIsb0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLG9CQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMscUJBQUssR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELHVCQUFPLEtBQUssQ0FBQzthQUNkOzs7O1dBL0ZHLGVBQWU7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUFrRzdDLGVBQWUsQ0FBQyxTQUFTLEdBQUc7QUFDMUIsZ0JBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDbEMsWUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNoQyxZQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLGNBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDakMsQ0FBQzs7aUJBR2EsZUFBZTs7Ozs7Ozs7Ozs7Ozs7O0lDaEh2QixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLEtBQUssMkJBQU0sU0FBUzs7SUFDcEIsUUFBUSwyQkFBTSxZQUFZOztJQUUzQixXQUFXO0FBRUosV0FGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzBCQUZmLFdBQVc7O0FBR2IsK0JBSEUsV0FBVyw2Q0FHUCxLQUFLLEVBQUU7QUFDYixRQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztHQUNyQjs7WUFMRyxXQUFXOztlQUFYLFdBQVc7QUFPZixlQUFXO2FBQUEscUJBQUMsQ0FBQyxFQUFDO0FBQ1osWUFBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBRTVDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQzs7QUFFL0QsWUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ3JDOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUU7QUFDbkMseUJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87QUFDbkMsMkJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO1NBQ3hDLENBQUMsQ0FBQztBQUNILFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQzs7QUFFM0IsWUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsaUJBQWlCLElBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBQztBQUNyRCxjQUFJLEtBQUssR0FBRztBQUNWLGlCQUFLLEVBQUMsRUFBRTtBQUNSLHVCQUFXLEVBQUUsQ0FBQztBQUNkLHdCQUFZLEVBQUUsQ0FBQztXQUNoQixDQUFBO0FBQ0QseUJBQWUsR0FBSTs7Y0FBSSxLQUFLLEVBQUUsS0FBSyxBQUFDLEVBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxBQUFDOztXQUFZLEFBQUMsQ0FBQztTQUM1RDtBQUNELFlBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFTLE1BQU0sRUFBQztBQUN2RCxjQUFJLE9BQU8sR0FBRztBQUNaLG1CQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBQyxNQUFNLEdBQUMsSUFBSTtBQUNsQyxpQkFBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1dBQ3BCLENBQUM7QUFDRixpQkFDRTs7Y0FBSSxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQUFBQyxFQUFDLEtBQUssRUFBRSxPQUFPLEFBQUM7WUFDbkM7O2dCQUFLLFNBQVMsRUFBQyw4QkFBOEI7Y0FDM0MsK0JBQU8sSUFBSSxFQUFDLE1BQU0sRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQUFBQyxFQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxBQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUU7YUFDbkc7V0FDSCxDQUNOO1NBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULGVBQ0U7O1lBQU8sU0FBUyxFQUFFLFlBQVksQUFBQyxFQUFDLEtBQUssRUFBRSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsQUFBQztVQUNuRDs7O1lBQ0U7O2dCQUFJLEtBQUssRUFBRSxFQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBQyxBQUFDO2NBQ3RDLGVBQWU7Y0FBRSxXQUFXO2FBQzFCO1dBQ0M7U0FDRixDQUNUO09BQ0Y7Ozs7U0F0REcsV0FBVztHQUFTLEtBQUssQ0FBQyxTQUFTOztBQXdEekMsV0FBVyxDQUFDLFNBQVMsR0FBRztBQUN0QixTQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO0FBQzlCLGVBQWEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDckMsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtDQUMvQixDQUFDO2lCQUNhLFdBQVc7Ozs7Ozs7Ozs7Ozs7OztJQ2pFbkIsS0FBSywyQkFBTSxPQUFPOztJQUNsQixLQUFLLDJCQUFNLFNBQVM7O0lBQ3BCLElBQUksMkJBQU0sUUFBUTs7SUFDbEIsUUFBUSwyQkFBTSxZQUFZOztJQUMxQixxQkFBcUIsMkJBQU0seUJBQXlCOztJQUVyRCxXQUFXO0FBRUosV0FGUCxXQUFXLENBRUgsS0FBSyxFQUFFOzBCQUZmLFdBQVc7O0FBR2IsK0JBSEUsV0FBVyw2Q0FHUCxLQUFLLEVBQUU7R0FDZDs7WUFKRyxXQUFXOztlQUFYLFdBQVc7QUFNZixrQkFBYzthQUFBLHdCQUFDLEtBQUssRUFBRSxTQUFTLEVBQUM7QUFDOUIsWUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDeEMsYUFBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLEVBQUUsRUFBQztBQUN0QyxjQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxjQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFDO0FBQ25ELGtCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQy9EO1NBQ0Y7QUFDRCxZQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7T0FDckM7O0FBRUQscUJBQWlCO2FBQUEsNkJBQUU7O0FBRWpCLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDckIsY0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELGNBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3hDLGVBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDdEMsZ0JBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUM7QUFDM0Qsb0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDL0Qsb0JBQU07YUFDUDtXQUNGO1NBQ0Y7T0FDRjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNoRCxZQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRTtBQUNoRCwwQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7U0FDeEMsQ0FBQyxDQUFDO0FBQ0gsWUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFDLElBQUksR0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUN2RixZQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQzs7QUFFakMsZUFDRTs7WUFBSyxTQUFTLEVBQUUsZ0JBQWdCLEFBQUM7VUFDL0I7O2NBQU8sU0FBUyxFQUFFLFlBQVksQUFBQztZQUM3Qjs7O2NBQ0U7O2tCQUFJLEdBQUcsRUFBQyxRQUFRO2dCQUNiLGtCQUFrQjtnQkFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO2VBQ2pCO2FBQ0M7V0FDRjtTQUNKLENBQ1A7T0FDRjs7QUFFRCx5QkFBcUI7YUFBQSxpQ0FBRTtBQUNyQixZQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUN0RCxpQkFBUSxvQkFBQyxxQkFBcUIsT0FBeUIsQ0FBRTtTQUMxRCxNQUFLLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFDO0FBQzFELGlCQUFRO0FBQUMsaUNBQXFCOztZQUFDLCtCQUFPLElBQUksRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxBQUFDLEdBQUU7V0FBd0IsQ0FBRTtTQUN2SCxNQUFJO0FBQ0gsaUJBQU8sSUFBSSxDQUFDO1NBQ2I7T0FDRjs7QUFFRCw2QkFBeUI7YUFBQSxxQ0FBRTtBQUN6QixZQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBQztBQUNwQyxlQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFDLENBQUMsRUFBRSxFQUFDO0FBQzNDLGdCQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FDcEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQztXQUN4RztTQUNGLE1BQU07QUFDTCxjQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FDakIsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQztTQUNyRztPQUNGOzs7O1NBMUVHLFdBQVc7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUE0RXpDLFdBQVcsQ0FBQyxTQUFTLEdBQUc7QUFDdEIsZUFBYSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNyQyxRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzVCLGdCQUFjLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3BDLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsV0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNqQyxrQkFBZ0IsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDdEMsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtDQUMvQixDQUFDOztBQUVGLFdBQVcsQ0FBQyxZQUFZLEdBQUcsRUFDMUIsQ0FBQztpQkFDYSxXQUFXOzs7Ozs7Ozs7Ozs7O0lDOUZuQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsS0FBSywyQkFBTSxTQUFTOztJQUNwQixJQUFJLDJCQUFNLFFBQVE7O0lBRW5CLGlCQUFpQjtXQUFqQixpQkFBaUI7MEJBQWpCLGlCQUFpQjs7Ozs7OztZQUFqQixpQkFBaUI7O2VBQWpCLGlCQUFpQjtBQUlyQixxQkFBaUI7YUFBQSwyQkFBQyxDQUFDLEVBQUM7QUFDbEIsWUFBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUFDLGlCQUFPO1NBQUEsQUFDL0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDMUMsWUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQzFFLFlBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RCxXQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7T0FDbkQ7O0FBRUQscUJBQWlCO2FBQUEsNkJBQUU7QUFDakIsWUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQ2xGOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksT0FBTyxHQUFHO0FBQ1osbUJBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7QUFDL0IsaUJBQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxNQUFNLEdBQUMsSUFBSTtBQUN0QyxlQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1NBQ3hCLENBQUM7O0FBRUYsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUMsR0FBRyxJQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFDLGFBQWEsR0FBQyxFQUFFLENBQUEsQUFBQyxDQUFDO0FBQzlFLGVBQ0U7O1lBQUksU0FBUyxFQUFFLE9BQU8sQUFBQyxFQUFDLEtBQUssRUFBRSxPQUFPLEFBQUM7VUFDckM7O2NBQUssR0FBRyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsOEJBQThCO0FBQzFELHFCQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtXQUFPO1NBQ3RFLENBQ047T0FDRjs7OztTQTlCRyxpQkFBaUI7R0FBUyxLQUFLLENBQUMsU0FBUzs7QUFnQy9DLGlCQUFpQixDQUFDLFNBQVMsR0FBRztBQUM1QixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2pDLFdBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDakMsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM5QixnQkFBYyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNwQyxZQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2hDLE9BQUssRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDM0IsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRztBQUM3QixRQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzVCLFdBQVMsRUFBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsT0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUM3QixVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzlCLGlCQUFlLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHO0NBQ3JDLENBQUM7O0FBRUYsaUJBQWlCLENBQUMsWUFBWSxHQUFHO0FBQy9CLFdBQVMsRUFBRSxNQUFNO0FBQ2pCLFVBQVEsRUFBRSxLQUFLO0FBQ2YsWUFBVSxFQUFFLFNBQVM7QUFDckIsT0FBSyxFQUFFLEtBQUs7QUFDWixVQUFRLEVBQUUsSUFBSTtBQUNkLGdCQUFjLEVBQUUsU0FBUztBQUN6QixRQUFNLEVBQUUsS0FBSztBQUNiLFdBQVMsRUFBRSxFQUFFO0FBQ2IsT0FBSyxFQUFFLElBQUk7QUFDWCxVQUFRLEVBQUUsU0FBUztBQUNuQixpQkFBZSxFQUFFLEVBQUU7Q0FDcEIsQ0FBQzs7aUJBRWEsaUJBQWlCOzs7Ozs7Ozs7Ozs7Ozs7SUNsRXpCLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsS0FBSywyQkFBTSxTQUFTOztJQUVyQixRQUFRO1dBQVIsUUFBUTswQkFBUixRQUFROzs7Ozs7O1lBQVIsUUFBUTs7ZUFBUixRQUFRO0FBRVosWUFBUTthQUFBLGtCQUFDLENBQUMsRUFBQztBQUNULFlBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7T0FDNUU7O0FBRUQsVUFBTTthQUFBLGtCQUFFOztBQUVOLFlBQUksS0FBSyxHQUFDO0FBQ1IsZUFBSyxFQUFDO0FBQ0osMkJBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUMsSUFBSTtXQUN6RTtBQUNELG1CQUFTLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUUsRUFBRTtTQUNuQyxDQUFDOztBQUVGLFlBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsS0FDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFBLEFBQUMsRUFBQztBQUN0RixpQkFDRTs7eUJBQVEsS0FBSyxJQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtXQUFNLENBQzdFO1NBQ0YsTUFBSTtBQUNILGlCQUNFOztZQUFRLEtBQUs7WUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FBTSxDQUMxQztTQUNGO09BQ0Y7Ozs7U0ExQkcsUUFBUTtHQUFTLEtBQUssQ0FBQyxTQUFTOztBQTRCdEMsUUFBUSxDQUFDLFNBQVMsR0FBRztBQUNuQixZQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2hDLGdCQUFjLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ3BDLGFBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDbEMsQ0FBQztpQkFDYSxRQUFROzs7Ozs7Ozs7Ozs7Ozs7SUNwQ2hCLEtBQUssMkJBQU0sT0FBTzs7SUFDbEIsUUFBUSwyQkFBTSxZQUFZOztJQUUzQixVQUFVO0FBRUgsV0FGUCxVQUFVLENBRUYsS0FBSyxFQUFFOzBCQUZmLFVBQVU7O0FBR2QsK0JBSEksVUFBVSw2Q0FHUixLQUFLLEVBQUU7R0FDYjs7WUFKSSxVQUFVOztlQUFWLFVBQVU7QUFNZCxnQkFBWTthQUFBLHNCQUFDLENBQUMsRUFBQztBQUNiLFNBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNuQixZQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzdDOztBQUVELFVBQU07YUFBQSxrQkFBRTtBQUNOLFlBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBQyxJQUFJLENBQUM7QUFDeEQsZUFDSTs7WUFBSSxTQUFTLEVBQUUsT0FBTyxBQUFDO1VBQUM7O2NBQUcsSUFBSSxFQUFDLEdBQUcsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEFBQUM7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7V0FBSztTQUFLLENBQzVHO09BQ0Y7Ozs7U0FoQkcsVUFBVTtHQUFTLEtBQUssQ0FBQyxTQUFTOztBQWtCeEMsVUFBVSxDQUFDLFNBQVMsR0FBRztBQUNyQixZQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2hDLFFBQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7Q0FDN0IsQ0FBQzs7aUJBRWEsVUFBVTs7Ozs7Ozs7Ozs7Ozs7O0lDMUJsQixLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFVBQVUsMkJBQU0saUJBQWlCOztJQUNqQyxLQUFLLDJCQUFNLFVBQVU7O0lBRXRCLGNBQWM7QUFFUCxXQUZQLGNBQWMsQ0FFTixLQUFLLEVBQUU7MEJBRmYsY0FBYzs7QUFHbEIsK0JBSEksY0FBYyw2Q0FHWixLQUFLLEVBQUU7QUFDYixRQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1QsaUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7QUFDaEMsaUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7S0FDcEMsQ0FBQztHQUNKOztZQVJJLGNBQWM7O2VBQWQsY0FBYztBQVVsQixjQUFVO2FBQUEsb0JBQUMsSUFBSSxFQUFDO0FBQ2QsWUFBRyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBQztBQUN4QixjQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUMsQ0FBQyxHQUFHLENBQUMsR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDO1NBQ2hFLE1BQUssSUFBRyxJQUFJLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBQztBQUMvQixjQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUM7U0FDNUYsTUFBSyxJQUFHLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFDO0FBQy9CLGNBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hCLE1BQUssSUFBRyxJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBQztBQUNoQyxjQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ1YsTUFBSTtBQUNILGNBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7O0FBRUQsWUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUM7QUFDaEMsY0FBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0FBQ25DLGNBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JEO09BQ0Y7O0FBRUQscUJBQWlCO2FBQUEsMkJBQUMsQ0FBQyxFQUFDO0FBQ2xCLFNBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNuQixZQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxZQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBQztBQUN0QyxjQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUQsY0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzNDLGNBQUksQ0FBQyxRQUFRLENBQUM7QUFDWix1QkFBVyxFQUFFLFVBQVU7QUFDdkIsdUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7V0FDcEMsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDM0Q7T0FDRjs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7OztBQUNOLFlBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hFLFlBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQixZQUFJLGFBQWEsR0FBRztBQUNsQixtQkFBUyxFQUFFLEtBQUs7QUFBQSxTQUNqQixDQUFBOztBQUVELFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFDLFdBQVcsRUFBSztBQUNwRSxpQkFDRTs7Y0FBSSxHQUFHLEVBQUUsV0FBVyxBQUFDLEVBQUMsSUFBSSxFQUFDLGNBQWM7WUFDdkM7O2dCQUFHLElBQUksRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsR0FBRyxFQUFDLE9BQU8sRUFBRSxNQUFLLGlCQUFpQixDQUFDLElBQUksT0FBTSxBQUFDO2NBQUUsV0FBVzthQUFLO1dBQ3BHLENBQ0w7U0FDSCxDQUFDLENBQUM7O0FBRUgsZUFDRTs7WUFBSyxTQUFTLEVBQUMsS0FBSztVQUNsQjs7Y0FBSyxTQUFTLEVBQUMsVUFBVTtZQUN2Qjs7Z0JBQUssU0FBUyxFQUFDLFVBQVU7Y0FDdkI7O2tCQUFRLFNBQVMsRUFBQyxpQ0FBaUMsRUFBQyxJQUFJLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsZUFBWSxVQUFVLEVBQUMsaUJBQWMsTUFBTTtnQkFDNUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO2dCQUN2Qiw4QkFBTSxTQUFTLEVBQUMsT0FBTyxHQUFRO2VBQ3hCO2NBQ1Q7O2tCQUFJLFNBQVMsRUFBQyxlQUFlLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxtQkFBZ0IsY0FBYztnQkFDckUsZUFBZTtlQUNiO2FBQ0Q7V0FDRjtVQUNOOztjQUFLLFNBQVMsRUFBQyxVQUFVO1lBQ3ZCOztnQkFBSSxTQUFTLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBRSxhQUFhLEFBQUM7Y0FDN0MsUUFBUTthQUNOO1dBQ0Q7U0FDRixDQUNQO09BQ0Y7O0FBRUQsWUFBUTthQUFBLG9CQUFFO0FBQ1IsWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVCLGVBQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFTLElBQUksRUFBQztBQUM3QixjQUFJLFFBQVEsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUMsSUFBSSxHQUFDLEtBQUssQ0FBQztBQUN6RCxpQkFDRTtBQUFDLHNCQUFVO2NBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEVBQUMsTUFBTSxFQUFFLFFBQVEsQUFBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLEFBQUM7WUFBRSxJQUFJO1dBQWMsQ0FDckc7U0FDRixFQUFFLElBQUksQ0FBQyxDQUFDO09BQ1Y7O0FBRUQsWUFBUTthQUFBLG9CQUFFO0FBQ1IsWUFBSSxTQUFTLEdBQUcsQ0FBQztZQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDOztBQUU3QyxpQkFBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRixlQUFPLEdBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzs7QUFFdEQsWUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM3QixpQkFBTyxHQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDNUIsbUJBQVMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1NBQ3JEO0FBQ0QsWUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQyxhQUFJLElBQUksQ0FBQyxHQUFDLFNBQVMsRUFBQyxDQUFDLElBQUUsT0FBTyxFQUFDLENBQUMsRUFBRSxFQUFDO0FBQ2pDLGNBQUcsQ0FBQyxHQUFDLENBQUMsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO0FBQ0QsYUFBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUIsYUFBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUIsZUFBTyxLQUFLLENBQUM7T0FDZDs7QUFFRCxrQkFBYzthQUFBLDBCQUFFO0FBQ2QsZUFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztPQUMvQjs7QUFFRCxrQkFBYzthQUFBLDBCQUFFO0FBQ2QsZUFBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztPQUMvQjs7OztTQXBIRyxjQUFjO0dBQVMsS0FBSyxDQUFDLFNBQVM7O0FBc0g1QyxjQUFjLENBQUMsU0FBUyxHQUFHO0FBQ3pCLFVBQVEsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07QUFDaEMsYUFBVyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUNuQyxVQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0FBQ2hDLFlBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDaEMsaUJBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDdEMsZ0JBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07Q0FDdkMsQ0FBQzs7QUFFRixjQUFjLENBQUMsWUFBWSxHQUFHO0FBQzVCLGFBQVcsRUFBRSxLQUFLLENBQUMsYUFBYTtDQUNqQyxDQUFBO2lCQUNjLGNBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUN0SXRCLEtBQUssMkJBQU0sVUFBVTs7QUFDNUIsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQzs7QUFFbEQsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDO0FBQzdDLE9BQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDNUIsS0FBRyxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsRUFBQyxDQUFDLEVBQUs7QUFDaEIsUUFBRyxRQUFRLEVBQUM7QUFDVixhQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxVQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFDO0FBQzFCLGVBQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBQyxDQUFDLENBQUMsR0FBRyxBQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUksQ0FBQyxHQUFHLENBQUMsQUFBQyxDQUFDO09BQ2hGLE1BQUk7QUFDSCxlQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUMsQ0FBQyxDQUFDLEdBQUcsQUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFJLENBQUMsR0FBRyxDQUFDLEFBQUMsQ0FBQztPQUNoRjtLQUNGO0dBQ0YsQ0FBQyxDQUFDOztBQUVILFNBQU8sR0FBRyxDQUFDO0NBQ1o7O0lBRVksWUFBWSxXQUFaLFlBQVk7QUFDWixXQURBLFlBQVksQ0FDWCxJQUFJLEVBQUM7MEJBRE4sWUFBWTs7QUFFckIsK0JBRlMsWUFBWSw2Q0FFZixJQUFJLEVBQUU7QUFDWixRQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztHQUNsQjs7WUFKVSxZQUFZOztlQUFaLFlBQVk7QUFNdkIsV0FBTzthQUFBLGlCQUFDLElBQUksRUFBRTtBQUNaLFlBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzNCOztBQUVELFNBQUs7YUFBQSxpQkFBRTtBQUNMLFlBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO09BQ2xCOztBQUVELFdBQU87YUFBQSxtQkFBRTtBQUNQLGVBQU8sSUFBSSxDQUFDLElBQUksQ0FBQztPQUNsQjs7OztTQWhCVSxZQUFZO0dBQVMsWUFBWTs7SUFtQmpDLGNBQWMsV0FBZCxjQUFjO0FBRWQsV0FGQSxjQUFjLENBRWIsSUFBSSxFQUFDOzBCQUZOLGNBQWM7O0FBR3ZCLFFBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLFFBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDOUIsUUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEIsUUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbEIsUUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7R0FDcEI7O2VBWlUsY0FBYztBQWN6QixZQUFRO2FBQUEsa0JBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBQztBQUNqRCxZQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QixZQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLFlBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztPQUM1Qzs7QUFFRCxXQUFPO2FBQUEsaUJBQUMsSUFBSSxFQUFFO0FBQ1osWUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2xCLGNBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEQsY0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMzRDtBQUNELFlBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUNkLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN2RDtPQUNGOztBQUVELHFCQUFpQjthQUFBLDJCQUFDLGVBQWUsRUFBQztBQUNoQyxZQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztPQUNqQzs7QUFFRCxzQkFBa0I7YUFBQSw4QkFBRTtBQUNsQixlQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7T0FDdEI7O0FBRUQseUJBQXFCO2FBQUEsaUNBQUU7QUFDckIsWUFBRyxJQUFJLENBQUMsVUFBVTtBQUFFLGlCQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7O0FBQ3hDLGlCQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7U0FBQTtPQUN2Qjs7QUFFRCxRQUFJO2FBQUEsY0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFDO0FBQ3BCLFlBQUksQ0FBQyxPQUFPLEdBQUc7QUFDYixlQUFLLEVBQUUsS0FBSztBQUNaLG1CQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDOztBQUVGLFlBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDdEQsWUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELDBCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztBQUUzRSxlQUFPLElBQUksQ0FBQztPQUNiOztBQUVELFFBQUk7Ozs7Ozs7Ozs7O1NBQUEsVUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDO0FBQ3JCLFlBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksR0FBQyxXQUFXLEdBQUMsQ0FBQyxDQUFDO0FBQ3RDLFlBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUEsQUFBQyxDQUFDO0FBQzFELGVBQU8sSUFBSSxDQUFDO09BQ2I7O0FBRUQsUUFBSTthQUFBLGNBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUM7QUFDL0IsWUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztBQUN0RCxZQUFJLFdBQVcsWUFBQSxDQUFDO0FBQ2hCLFlBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUM7QUFDeEIsNEJBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELHFCQUFXLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNELE1BQUk7QUFDSCw0QkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEUscUJBQVcsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUU7QUFDRCxZQUFHLElBQUksQ0FBQyxVQUFVLEVBQUM7QUFDakIsY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBUyxHQUFHLEVBQUM7QUFDN0IsZ0JBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxXQUFXLEVBQUM7QUFDcEMsaUJBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO2FBQ3hDO1dBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNWO0FBQ0QsZUFBTyxJQUFJLENBQUM7T0FDYjs7QUFFRCxPQUFHO2FBQUEsYUFBQyxNQUFNLEVBQUM7QUFDVCxZQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFDO0FBQ3JDLGdCQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsd0JBQXdCLENBQUM7U0FDaEQ7QUFDRCxZQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3RELDBCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUN0QyxjQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQztBQUN6RCxrQkFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1dBQ3ZFO1NBQ0YsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCwwQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3hCO09BQ0Y7O0FBRUQsVUFBTTthQUFBLGdCQUFDLE1BQU0sRUFBQztBQUNaLFlBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDdEQsWUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBRyxFQUFDO0FBQ2xELGlCQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2pELEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRVQsWUFBRyxJQUFJLENBQUMsVUFBVSxFQUFDO0FBQ2pCLGNBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBUyxHQUFHLEVBQUM7QUFDeEMsbUJBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7V0FDakQsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNULGNBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1NBQzVCLE1BQUk7QUFDSCxjQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUNwQjtPQUNGOztBQUVELFVBQU07YUFBQSxnQkFBQyxTQUFTLEVBQUM7QUFDZixZQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBQztBQUNwQyxjQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixjQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN4QixjQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN2QixNQUFLO0FBQ0osY0FBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0IsY0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoRCxnQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLGlCQUFJLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBQztBQUN2QixrQkFBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQy9FLHFCQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2Qsc0JBQU07ZUFDUDthQUNGO0FBQ0QsbUJBQU8sS0FBSyxDQUFDO1dBQ2QsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDeEI7T0FDRjs7QUFFRCxVQUFNO2FBQUEsZ0JBQUMsVUFBVSxFQUFDO0FBQ2hCLFlBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBQztBQUMxQixjQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixjQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN4QixjQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QixNQUFJO0FBQ0gsY0FBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDN0IsY0FBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoRCxnQkFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLGlCQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBQztBQUNqQixrQkFBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQ1IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBQztBQUM1RSxxQkFBSyxHQUFHLElBQUksQ0FBQztBQUNiLHNCQUFNO2VBQ1A7YUFDRjtBQUNELG1CQUFPLEtBQUssQ0FBQztXQUNkLENBQUMsQ0FBQztBQUNILGNBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO09BQ0Y7O0FBRUQsT0FBRzthQUFBLGVBQUU7QUFDSCxZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs7QUFFekMsWUFBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7QUFBRSxpQkFBTyxLQUFLLENBQUM7U0FBQSxBQUVuQyxJQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFDO0FBQ3hCLGlCQUFPLEtBQUssQ0FBQztTQUNkLE1BQUk7QUFDSCxjQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsZUFBSSxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLElBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsQ0FBQyxFQUFFLEVBQUM7QUFDbkQsa0JBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsZ0JBQUcsQ0FBQyxHQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFDLE1BQU07V0FDOUI7QUFDRCxpQkFBTyxNQUFNLENBQUM7U0FDZjtPQUNGOztBQUVELGVBQVc7YUFBQSx1QkFBRTtBQUNYLGVBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztPQUN0Qjs7QUFFRCxjQUFVO2FBQUEsc0JBQUU7QUFDVixlQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztPQUM1Qzs7QUFFRCxnQkFBWTthQUFBLHdCQUFFO0FBQ1osZUFBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEdBQUcsRUFBQztBQUNoQyxpQkFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzNCLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDVjs7OztTQTVMVSxjQUFjOzs7QUE4TDFCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ3JPSyxLQUFLLDJCQUFNLE9BQU87O0lBQ2xCLFFBQVEsMkJBQU0sWUFBWTs7SUFDMUIsS0FBSywyQkFBTSxVQUFVOztJQUNyQixNQUFNLDJCQUFNLFdBQVc7O0lBQ3ZCLFFBQVEsMkJBQU0sb0JBQW9COztJQUVuQyxPQUFPO0FBRUEsV0FGUCxPQUFPLENBRUMsS0FBSyxFQUFFOzBCQUZmLE9BQU87O0FBR1gsK0JBSEksT0FBTyw2Q0FHTCxLQUFLLEVBQUU7QUFDWCxRQUFJLENBQUMsYUFBYSxHQUFDLENBQUMsQ0FBQztBQUNyQixRQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsd0JBQWtCLEVBQUUsSUFBSTtBQUN4QixtQkFBYSxFQUFDLElBQUk7QUFDbEIsaUJBQVcsRUFBQyxLQUFLO0tBQ2xCLENBQUM7R0FDSDs7WUFWRyxPQUFPOztlQUFQLE9BQU87QUFXWCx3QkFBb0I7YUFBQSxnQ0FBRTtBQUNwQixZQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7T0FDckI7O0FBQ0QsZ0JBQVk7Ozs7Ozs7Ozs7O1NBQUEsWUFBRztBQUNiLFlBQUcsSUFBSSxDQUFDLGFBQWEsRUFBQztBQUNwQixzQkFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNqQyxjQUFJLENBQUMsYUFBYSxHQUFDLENBQUMsQ0FBQztTQUN0QjtPQUNGOztBQUVELHFCQUFpQjthQUFBLDZCQUFFO0FBQ2pCLFlBQUksRUFBRSxHQUFDLElBQUk7WUFBQyxNQUFNLEdBQUcsRUFBRTtZQUFDLE9BQU8sR0FBQyxJQUFJO1lBQUMsU0FBUztZQUFDLE9BQU87WUFBQyxhQUFhLEdBQUMsRUFBRSxDQUFDO0FBQ3hFLFlBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFTLE1BQU0sRUFBRSxDQUFDLEVBQUM7QUFDNUMsY0FBRyxNQUFNLENBQUMsU0FBUyxFQUFDOztBQUNsQixxQkFBUyxHQUFDLE9BQU8sTUFBTSxDQUFDLFNBQVMsSUFBRSxVQUFVLEdBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFFLFlBQVksR0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxBQUFDLENBQUM7V0FDdEcsTUFBSTtBQUNILGdCQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDakQscUJBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDOztBQUV0QixnQkFBRyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBQztBQUN2RCxrQkFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsdUJBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUM7O0FBRUQsZ0JBQUcsTUFBTSxDQUFDLFFBQVEsSUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBQzs7QUFDNUMscUJBQU8sR0FBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUM3QyxrQkFBRyxPQUFPLEtBQUcsSUFBSSxFQUFDO0FBQ2hCLHVCQUFPLEdBQUMsS0FBSyxDQUFDO0FBQ2QsNkJBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsT0FBTyxDQUFDO2VBQ3JDO2FBQ0Y7V0FDRjs7QUFFRCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRSxTQUFTLENBQUM7U0FDakMsRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFVCxZQUFHLE9BQU8sRUFBQztBQUNULGlCQUFPLE1BQU0sQ0FBQztTQUNmLE1BQUk7QUFDSCxZQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7O0FBRWxCLGNBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxhQUFhLEVBQUMsYUFBYSxFQUFDLFdBQVcsRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDOztBQUU5RCxZQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFDLHdDQUF3QyxFQUFDLHdCQUF3QixDQUFDLENBQUM7O0FBRW5HLFlBQUUsQ0FBQyxhQUFhLEdBQUMsVUFBVSxDQUFDLFlBQVU7QUFBQyxjQUFFLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7V0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9FLGlCQUFPLElBQUksQ0FBQztTQUNiO09BQ0Y7O0FBRUQsc0JBQWtCO2FBQUEsNEJBQUMsQ0FBQyxFQUFDO0FBQ25CLFlBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3RDLFlBQUcsQ0FBQyxNQUFNLEVBQUM7O0FBQ1QsaUJBQU87U0FDUjtBQUNELFlBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLFlBQUcsR0FBRyxFQUFFO0FBQ04sY0FBSSxFQUFFLEdBQUMsSUFBSSxDQUFDO0FBQ1osWUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBQyxHQUFHLEVBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUM5RCxZQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7O0FBRWxCLFlBQUUsQ0FBQyxRQUFRLENBQUMsRUFBQyxXQUFXLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQywrQ0FBK0MsRUFBQyxDQUFDLENBQUM7O0FBRTlGLFlBQUUsQ0FBQyxhQUFhLEdBQUMsVUFBVSxDQUFDLFlBQVU7QUFBQyxjQUFFLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7V0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hGLE1BQUs7O0FBRUosY0FBSSxDQUFDLFFBQVEsQ0FBQztBQUNaLHlCQUFhLEVBQUMsSUFBSTtBQUNsQix1QkFBVyxFQUFDLEtBQUs7V0FDbEIsQ0FBQyxDQUFDOztBQUVILGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBRXJDO09BQ0Y7O0FBRUQseUJBQXFCO2FBQUEsK0JBQUMsQ0FBQyxFQUFDO0FBQ3RCLFlBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7T0FDeEI7O0FBRUQsa0JBQWM7YUFBQSx3QkFBQyxDQUFDLEVBQUM7QUFDZixZQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztPQUN2RDs7QUFFRCxlQUFXO2FBQUEscUJBQUMsQ0FBQyxFQUFDO0FBQ1osWUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztPQUM1Qzs7QUFFRCxVQUFNO2FBQUEsa0JBQUU7QUFDTixZQUFJLGNBQWMsR0FBRyxtQkFBbUIsR0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlELFlBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUNqQzs7WUFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQUFBQyxFQUFDLFNBQVMsRUFBQyxjQUFjLEVBQUMsZUFBWSxPQUFPLEVBQUMsZUFBYSxHQUFHLEdBQUMsY0FBYyxBQUFDO1VBQ3BJLDJCQUFHLFNBQVMsRUFBQywwQkFBMEIsR0FBSzs7U0FBYSxHQUFDLElBQUksQ0FBQzs7QUFFdkUsWUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQ2pDOztZQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGlCQUFpQixFQUFDLGVBQVksU0FBUyxFQUFDLGtCQUFlLE9BQU8sRUFBQyxLQUFLLEVBQUMsbUJBQW1CO0FBQ3RILG1CQUFPLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQztVQUMvQywyQkFBRyxTQUFTLEVBQUMsMkJBQTJCLEdBQUs7O1NBQ3RDLEdBQUMsSUFBSSxDQUFDO0FBQ3JCLFlBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUMzQywrQkFBTyxJQUFJLEVBQUMsTUFBTSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUMsUUFBUSxBQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxBQUFDLEdBQUUsR0FBQyxJQUFJLENBQUM7QUFDbkosWUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxHQUFDLElBQUksQ0FBQztBQUNuRixZQUFJLFlBQVksR0FBRztBQUNqQixpQkFBTyxFQUFFLE1BQU07QUFDZixzQkFBWSxFQUFFLENBQUM7U0FDaEIsQ0FBQztBQUNGLGVBQ0U7OztVQUNFOztjQUFLLFNBQVMsRUFBQyx3QkFBd0IsRUFBQyxJQUFJLEVBQUMsT0FBTyxFQUFDLGNBQVcsS0FBSztZQUNsRSxTQUFTO1lBQ1QsU0FBUztXQUNOO1VBQ0wsZUFBZTtVQUNoQixvQkFBQyxRQUFRLElBQUMsR0FBRyxFQUFDLFVBQVUsR0FBWTtVQUNuQyxLQUFLO1NBQ0YsQ0FDUDtPQUNGOztBQUVELHdCQUFvQjthQUFBLDhCQUFDLGNBQWMsRUFBQztBQUNsQyxZQUFJLGFBQWEsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBRSxFQUFFLENBQUM7QUFDL0MsWUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVMsTUFBTSxFQUFFLENBQUMsRUFBQzs7OztBQUl6RCxjQUFJLFFBQVEsR0FBQyxNQUFNLENBQUMsUUFBUTtjQUN4QixNQUFNLEdBQUMsTUFBTSxDQUFDLE1BQU07Y0FDcEIsSUFBSSxHQUFDLEVBQUMsR0FBRyxFQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxRQUFRLENBQUMsV0FBVyxHQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUMsTUFBTSxDQUFDLElBQUksRUFBQyxDQUFDOztBQUVoRyxjQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUM7O0FBQ2xCLG1CQUFPLElBQUksQ0FBQztXQUNiO0FBQ0QsY0FBSSxLQUFLLEdBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRTs7Y0FBTSxTQUFTLEVBQUMsc0JBQXNCO1lBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7V0FBUSxHQUFFLElBQUksQ0FBQzs7Ozs7QUFLekgsaUJBQ0U7O2NBQUssU0FBUyxFQUFDLFlBQVksRUFBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQUFBQztZQUM1Qzs7O2NBQVEsTUFBTSxDQUFDLElBQUk7YUFBUztZQUMzQixNQUFNLENBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsRUFBRSxDQUFDO1lBQy9CLEtBQUs7V0FDRixDQUNOO1NBQ0gsQ0FBQyxDQUFDO0FBQ0gsWUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUcsY0FBYyxFQUFDO0FBQ3pELGNBQUksRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7QUFBQSxTQUN0RCxDQUFDLENBQUM7QUFDSCxZQUFJLFdBQVcsR0FBQyxRQUFRLENBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQztBQUNqRCxvQkFBVyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7QUFDakMsaUJBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO1NBQy9CLENBQUMsQ0FBQztBQUNILGVBQ0U7O1lBQUssR0FBRyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxBQUFDLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsUUFBUTtVQUNsRTs7Y0FBSyxTQUFTLEVBQUUsV0FBVyxBQUFDO1lBQzFCOztnQkFBSyxTQUFTLEVBQUMsZUFBZTtjQUM1Qjs7a0JBQUssU0FBUyxFQUFDLGNBQWM7Z0JBQzNCOztvQkFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxPQUFPLEVBQUMsZ0JBQWEsT0FBTyxFQUFDLGNBQVcsT0FBTztrQkFBQzs7c0JBQU0sZUFBWSxNQUFNOzttQkFBZTtpQkFBUztnQkFDaEk7O29CQUFJLFNBQVMsRUFBQyxhQUFhOztpQkFBZ0I7ZUFDdkM7Y0FDTjs7a0JBQUssU0FBUyxFQUFDLFlBQVk7Z0JBQ3pCOztvQkFBTSxHQUFHLEVBQUMsTUFBTTtrQkFDZixVQUFVO2lCQUNKO2VBQ0g7Y0FDTjs7a0JBQUssU0FBUyxFQUFDLGNBQWM7Z0JBQzNCOztvQkFBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLFNBQVMsRUFBQyxpQkFBaUIsRUFBQyxnQkFBYSxPQUFPOztpQkFBZTtnQkFDckY7O29CQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsU0FBUyxFQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQUFBQzs7aUJBQWM7ZUFDdEc7YUFDRjtXQUNGO1NBQ0YsQ0FDUDtPQUNGOzs7O1NBeExHLE9BQU87R0FBUyxLQUFLLENBQUMsU0FBUzs7QUEwTHJDLE9BQU8sQ0FBQyxTQUFTLEdBQUc7QUFDbEIsVUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUM5QixXQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQy9CLGNBQVksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUk7QUFDbEMsY0FBWSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSTtBQUNsQyxjQUFZLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQ2xDLFNBQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7QUFDOUIsbUJBQWlCLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO0NBQzFDLENBQUM7O0FBRUYsT0FBTyxDQUFDLFlBQVksR0FBRztBQUNyQixjQUFZLEVBQUUsS0FBSztBQUNuQixjQUFZLEVBQUUsS0FBSztBQUNuQixjQUFZLEVBQUUsS0FBSztDQUNwQixDQUFBO2lCQUNjLE9BQU87Ozs7Ozs7SUMvTWYsS0FBSywyQkFBTSxTQUFTOztpQkFDWjs7QUFFYixpQkFBZSxFQUFBLHlCQUFDLEtBQUssRUFBRTtBQUNyQixRQUFJLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLFFBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQ3pCLFFBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUM7QUFDeEQsUUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQyxTQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUMxQixTQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDaEMsUUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixXQUFPLElBQUksQ0FBQztHQUNiOztDQUVGOzs7Ozs7O0lDZE0sY0FBYywyQkFBTSxrQkFBa0I7O0lBQ3RDLGlCQUFpQiwyQkFBTSxxQkFBcUI7O0lBQzNDLFlBQVksV0FBTyx3QkFBd0IsRUFBM0MsWUFBWTs7QUFFcEIsSUFBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUM7QUFDL0IsUUFBTSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDdkMsUUFBTSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0NBQzlDO2lCQUNjO0FBQ2IsZ0JBQWMsRUFBZCxjQUFjO0FBQ2QsbUJBQWlCLEVBQWpCLGlCQUFpQjtBQUNqQixjQUFZLEVBQVosWUFBWTtDQUNiIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge0Jvb3RzdHJhcFRhYmxlLCBUYWJsZUhlYWRlckNvbHVtbn0gZnJvbSAncmVhY3QtYm9vdHN0cmFwLXRhYmxlJztcblxudmFyIHByb2R1Y3RzID0gW107XG5cbmZ1bmN0aW9uIGFkZFByb2R1Y3RzKHF1YW50aXR5KSB7XG4gIHZhciBzdGFydElkID0gcHJvZHVjdHMubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHF1YW50aXR5OyBpKyspIHtcbiAgICB2YXIgaWQgPSBzdGFydElkICsgaTtcbiAgICBwcm9kdWN0cy5wdXNoKHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIG5hbWU6IFwiSXRlbSBuYW1lIFwiICsgaWQsXG4gICAgICBwcmljZTogMTAwICsgaVxuICAgIH0pO1xuICB9XG59XG5cbmFkZFByb2R1Y3RzKDcwKTtcblxuZnVuY3Rpb24gb25Sb3dTZWxlY3Qocm93LCBpc1NlbGVjdGVkKXtcbiAgY29uc29sZS5sb2cocm93KTtcbiAgY29uc29sZS5sb2coXCJzZWxlY3RlZDogXCIgKyBpc1NlbGVjdGVkKVxufVxuXG5mdW5jdGlvbiBvblNlbGVjdEFsbChpc1NlbGVjdGVkKXtcbiAgY29uc29sZS5sb2coXCJpcyBzZWxlY3QgYWxsOiBcIiArIGlzU2VsZWN0ZWQpO1xufVxuXG5mdW5jdGlvbiBvbkFmdGVyU2F2ZUNlbGwocm93LCBjZWxsTmFtZSwgY2VsbFZhbHVlKXtcbiAgY29uc29sZS5sb2coXCJTYXZlIGNlbGwgJ1wiK2NlbGxOYW1lK1wiJyB3aXRoIHZhbHVlICdcIitjZWxsVmFsdWUrXCInXCIpO1xuICBjb25zb2xlLmxvZyhcIlRodyB3aG9sZSByb3cgOlwiKTtcbiAgY29uc29sZS5sb2cocm93KTtcbn1cblxuZnVuY3Rpb24gb25BZnRlclRhYmxlQ29tcGxldGUoKXtcbiAgY29uc29sZS5sb2coJ1RhYmxlIHJlbmRlciBjb21wbGV0ZS4nKTtcbn1cblxuZnVuY3Rpb24gb25BZnRlckRlbGV0ZVJvdyhyb3dLZXlzKXtcbiAgY29uc29sZS5sb2coXCJvbkFmdGVyRGVsZXRlUm93XCIpO1xuICBjb25zb2xlLmxvZyhyb3dLZXlzKTtcbn1cblxuZnVuY3Rpb24gb25BZnRlckluc2VydFJvdyhyb3cpe1xuICBjb25zb2xlLmxvZyhcIm9uQWZ0ZXJJbnNlcnRSb3dcIik7XG4gIGNvbnNvbGUubG9nKHJvdyk7XG59XG5cbnZhciBzZWxlY3RSb3dQcm9wID0ge1xuICBtb2RlOiBcImNoZWNrYm94XCIsXG4gIGNsaWNrVG9TZWxlY3Q6IHRydWUsXG4gIC8vIGhpZGVTZWxlY3RDb2x1bW46IHRydWUsIC8veW91IGNhbiBoaWRlIHNlbGVjdCBjb2x1bW4sIGlmIHlvdSBlbmFibGUgY2xpY2tUb1NlbGVjdFxuICBzZWxlY3RlZDogW10sIC8vZGVmYXVsdCBzZWxlY3Rpb24gb24gdGFibGVcbiAgYmdDb2xvcjogXCJyZ2IoMjM4LCAxOTMsIDIxMylcIixcbiAgb25TZWxlY3Q6IG9uUm93U2VsZWN0LFxuICBvblNlbGVjdEFsbDogb25TZWxlY3RBbGxcbn07XG5cbnZhciBjZWxsRWRpdFByb3AgPSB7XG4gIG1vZGU6IFwiY2xpY2tcIixcbiAgYmx1clRvU2F2ZTogdHJ1ZSxcbiAgYWZ0ZXJTYXZlQ2VsbDogb25BZnRlclNhdmVDZWxsXG59O1xuXG52YXIgb3B0aW9ucyA9IHtcbiAgLy8gcGFnZTogMyxcbiAgLy8gc2l6ZVBlclBhZ2U6IDUsXG4gIC8vIHNpemVQZXJQYWdlTGlzdDogWzUsMTAsMTUsMjBdLFxuICAvLyBwYWdpbmF0aW9uU2l6ZTogNixcbiAgc29ydE5hbWU6IFwibmFtZVwiLCAgLy9kZWZhdWx0IHNvcnQgY29sdW1uIG5hbWVcbiAgc29ydE9yZGVyOiBcImRlc2NcIiwgIC8vZGVmYXVsdCBzb3J0IG9yZGVyXG4gIGFmdGVyVGFibGVDb21wbGV0ZTogb25BZnRlclRhYmxlQ29tcGxldGUsIC8vIEEgaG9vayBmb3IgYWZ0ZXIgdGFibGUgcmVuZGVyIGNvbXBsZXRlLlxuICBhZnRlckRlbGV0ZVJvdzogb25BZnRlckRlbGV0ZVJvdywgIC8vIEEgaG9vayBmb3IgYWZ0ZXIgZHJvcGluZyByb3dzLlxuICBhZnRlckluc2VydFJvdzogb25BZnRlckluc2VydFJvdyAgIC8vIEEgaG9vayBmb3IgYWZ0ZXIgaW5zZXJ0IHJvd3Ncbn07XG5cblxuZnVuY3Rpb24gcHJpY2VGb3JtYXR0ZXIoY2VsbCwgcm93KXtcbiAgcmV0dXJuICc8aSBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tdXNkXCI+PC9pPiAnICsgY2VsbDtcbn1cblxuUmVhY3QucmVuZGVyKFxuICA8Qm9vdHN0cmFwVGFibGUgZGF0YT17cHJvZHVjdHN9IHN0cmlwZWQ9e3RydWV9IGhvdmVyPXt0cnVlfSBwYWdpbmF0aW9uPXt0cnVlfSBzZWxlY3RSb3c9e3NlbGVjdFJvd1Byb3B9IGNlbGxFZGl0PXtjZWxsRWRpdFByb3B9XG4gICAgICAgICAgICAgICAgICBpbnNlcnRSb3c9e3RydWV9IGRlbGV0ZVJvdz17dHJ1ZX0gc2VhcmNoPXt0cnVlfSBjb2x1bW5GaWx0ZXI9e3RydWV9IG9wdGlvbnM9e29wdGlvbnN9IGJvcmRlcmVkPXt0cnVlfT5cbiAgICAgIDxUYWJsZUhlYWRlckNvbHVtbiBkYXRhRmllbGQ9XCJpZFwiIGRhdGFBbGlnbj1cImNlbnRlclwiIGRhdGFTb3J0PXt0cnVlfSBpc0tleT17dHJ1ZX0+UHJvZHVjdCBJRDwvVGFibGVIZWFkZXJDb2x1bW4+XG4gICAgICA8VGFibGVIZWFkZXJDb2x1bW4gZGF0YUZpZWxkPVwibmFtZVwiIGRhdGFTb3J0PXt0cnVlfT5Qcm9kdWN0IE5hbWU8L1RhYmxlSGVhZGVyQ29sdW1uPlxuICAgICAgPFRhYmxlSGVhZGVyQ29sdW1uIGRhdGFGaWVsZD1cInByaWNlXCIgZGF0YUZvcm1hdD17cHJpY2VGb3JtYXR0ZXJ9IGVkaXRhYmxlPXtmYWxzZX0+UHJvZHVjdCBQcmljZTwvVGFibGVIZWFkZXJDb2x1bW4+XG4gIDwvQm9vdHN0cmFwVGFibGU+LFxuXHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJhc2ljXCIpXG4pO1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9O1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG5FdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbihuKSB7XG4gIGlmICghaXNOdW1iZXIobikgfHwgbiA8IDAgfHwgaXNOYU4obikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCduIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBlciwgaGFuZGxlciwgbGVuLCBhcmdzLCBpLCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIGlmICghdGhpcy5fZXZlbnRzLmVycm9yIHx8XG4gICAgICAgIChpc09iamVjdCh0aGlzLl9ldmVudHMuZXJyb3IpICYmICF0aGlzLl9ldmVudHMuZXJyb3IubGVuZ3RoKSkge1xuICAgICAgZXIgPSBhcmd1bWVudHNbMV07XG4gICAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICAgIH1cbiAgICAgIHRocm93IFR5cGVFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudC4nKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc1VuZGVmaW5lZChoYW5kbGVyKSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZhc3QgY2FzZXNcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIHNsb3dlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspXG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBtO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpXG4gICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cbiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZVxuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblxuICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuICAgIHZhciBtO1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgIH1cblxuICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTBcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG5cbiAgICBpZiAoIWZpcmVkKSB7XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgdGhpcy5vbih0eXBlLCBnKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHBvc2l0aW9uID0gLTE7XG5cbiAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG4gICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHxcbiAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBrZXksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTElGTyBvcmRlclxuICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgfVxuICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gW107XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcbiAgZWxzZVxuICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuICByZXR1cm4gcmV0O1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gMDtcbiAgZWxzZSBpZiAoaXNGdW5jdGlvbihlbWl0dGVyLl9ldmVudHNbdHlwZV0pKVxuICAgIHJldCA9IDE7XG4gIGVsc2VcbiAgICByZXQgPSBlbWl0dGVyLl9ldmVudHNbdHlwZV0ubGVuZ3RoO1xuICByZXR1cm4gcmV0O1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG5cbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuICAgIHZhciBjdXJyZW50UXVldWU7XG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHZhciBpID0gLTE7XG4gICAgICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtpXSgpO1xuICAgICAgICB9XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbn1cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgcXVldWUucHVzaChmdW4pO1xuICAgIGlmICghZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxuLy8gVE9ETyhzaHR5bG1hbilcbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTUgSmVkIFdhdHNvbi5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmICgnc3RyaW5nJyA9PT0gYXJnVHlwZSB8fCAnbnVtYmVyJyA9PT0gYXJnVHlwZSkge1xuXHRcdFx0XHRjbGFzc2VzICs9ICcgJyArIGFyZztcblxuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdFx0Y2xhc3NlcyArPSAnICcgKyBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cblx0XHRcdH0gZWxzZSBpZiAoJ29iamVjdCcgPT09IGFyZ1R5cGUpIHtcblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChhcmcuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3NlcyArPSAnICcgKyBrZXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuc3Vic3RyKDEpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpe1xuXHRcdC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cblx0XHRkZWZpbmUoZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG5cbn0oKSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0L2FkZG9uc1wiKTtcbnZhciB1cGRhdGUgPSBSZWFjdC5hZGRvbnMudXBkYXRlO1xuXG52YXIgVG9hc3RNZXNzYWdlID0gUmVhY3QuY3JlYXRlRmFjdG9yeShyZXF1aXJlKFwiLi9Ub2FzdE1lc3NhZ2VcIikpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiBcIlRvYXN0Q29udGFpbmVyXCIsXG5cbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpIHtcbiAgICB0aGlzLl9ub3RpZnkodGhpcy5wcm9wcy50b2FzdFR5cGUuZXJyb3IsIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICB9LFxuXG4gIGluZm86IGZ1bmN0aW9uIGluZm8obWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgIHRoaXMuX25vdGlmeSh0aGlzLnByb3BzLnRvYXN0VHlwZS5pbmZvLCBtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKTtcbiAgfSxcblxuICBzdWNjZXNzOiBmdW5jdGlvbiBzdWNjZXNzKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpIHtcbiAgICB0aGlzLl9ub3RpZnkodGhpcy5wcm9wcy50b2FzdFR5cGUuc3VjY2VzcywgbWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSk7XG4gIH0sXG5cbiAgd2FybmluZzogZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgdGhpcy5fbm90aWZ5KHRoaXMucHJvcHMudG9hc3RUeXBlLndhcm5pbmcsIG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpO1xuICB9LFxuXG4gIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgcmVmcyA9IHRoaXMucmVmcztcbiAgICB2YXIga2V5O1xuICAgIGZvciAoa2V5IGluIHJlZnMpIHtcbiAgICAgIHJlZnNba2V5XS5oaWRlVG9hc3QoZmFsc2UpO1xuICAgIH1cbiAgfSxcblxuICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uIGdldERlZmF1bHRQcm9wcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9hc3RUeXBlOiB7XG4gICAgICAgIGVycm9yOiBcImVycm9yXCIsXG4gICAgICAgIGluZm86IFwiaW5mb1wiLFxuICAgICAgICBzdWNjZXNzOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgd2FybmluZzogXCJ3YXJuaW5nXCJcbiAgICAgIH0sXG4gICAgICBpZDogXCJ0b2FzdC1jb250YWluZXJcIixcbiAgICAgIHRvYXN0TWVzc2FnZUZhY3Rvcnk6IFRvYXN0TWVzc2FnZSxcbiAgICAgIHByZXZlbnREdXBsaWNhdGVzOiBmYWxzZSxcbiAgICAgIG5ld2VzdE9uVG9wOiB0cnVlLFxuICAgICAgb25DbGljazogbm9vcFxuICAgIH07XG4gIH0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvYXN0czogW10sXG4gICAgICB0b2FzdElkOiAwLFxuICAgICAgcHJldmlvdXNNZXNzYWdlOiBudWxsXG4gICAgfTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyKHRoaXMucHJvcHMsIHRoaXMuc3RhdGUpO1xuICB9LFxuXG4gIF9ub3RpZnk6IGZ1bmN0aW9uIF9ub3RpZnkodHlwZSwgbWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgIGlmIChwcm9wcy5wcmV2ZW50RHVwbGljYXRlcykge1xuICAgICAgaWYgKHN0YXRlLnByZXZpb3VzTWVzc2FnZSA9PT0gbWVzc2FnZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBrZXkgPSBzdGF0ZS50b2FzdElkKys7XG4gICAgdmFyIHRvYXN0SWQgPSBrZXk7XG4gICAgdmFyIG5ld1RvYXN0ID0gdXBkYXRlKG9wdGlvbnNPdmVycmlkZSB8fCB7fSwge1xuICAgICAgJG1lcmdlOiB7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgdG9hc3RJZDogdG9hc3RJZCxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHJlZjogXCJ0b2FzdHNfX1wiICsga2V5LFxuICAgICAgICBoYW5kbGVPbkNsaWNrOiB0aGlzLl9oYW5kbGVfdG9hc3Rfb25fY2xpY2ssXG4gICAgICAgIGhhbmRsZVJlbW92ZTogdGhpcy5faGFuZGxlX3RvYXN0X3JlbW92ZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciB0b2FzdE9wZXJhdGlvbiA9IHt9O1xuICAgIHRvYXN0T3BlcmF0aW9uW1wiXCIgKyAocHJvcHMubmV3ZXN0T25Ub3AgPyBcIiR1bnNoaWZ0XCIgOiBcIiRwdXNoXCIpXSA9IFtuZXdUb2FzdF07XG5cbiAgICB2YXIgbmV3U3RhdGUgPSB1cGRhdGUoc3RhdGUsIHtcbiAgICAgIHRvYXN0czogdG9hc3RPcGVyYXRpb24sXG4gICAgICBwcmV2aW91c01lc3NhZ2U6IHsgJHNldDogbWVzc2FnZSB9XG4gICAgfSk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gIH0sXG5cbiAgX2hhbmRsZV90b2FzdF9vbl9jbGljazogZnVuY3Rpb24gX2hhbmRsZV90b2FzdF9vbl9jbGljayhldmVudCkge1xuICAgIHRoaXMucHJvcHMub25DbGljayhldmVudCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSxcblxuICBfaGFuZGxlX3RvYXN0X3JlbW92ZTogZnVuY3Rpb24gX2hhbmRsZV90b2FzdF9yZW1vdmUodG9hc3RJZCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgc3RhdGUudG9hc3RzW1wiXCIgKyAodGhpcy5wcm9wcy5uZXdlc3RPblRvcCA/IFwicmVkdWNlUmlnaHRcIiA6IFwicmVkdWNlXCIpXShmdW5jdGlvbiAoZm91bmQsIHRvYXN0LCBpbmRleCkge1xuICAgICAgaWYgKGZvdW5kIHx8IHRvYXN0LnRvYXN0SWQgIT09IHRvYXN0SWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgX3RoaXMuc2V0U3RhdGUodXBkYXRlKHN0YXRlLCB7XG4gICAgICAgIHRvYXN0czogeyAkc3BsaWNlOiBbW2luZGV4LCAxXV0gfVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgZmFsc2UpO1xuICB9LFxuXG4gIF9yZW5kZXI6IGZ1bmN0aW9uIF9yZW5kZXIocHJvcHMsIHN0YXRlKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAgX2V4dGVuZHMoe30sIHByb3BzLCB7IFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsIHJvbGU6IFwiYWxlcnRcIiB9KSxcbiAgICAgIHN0YXRlLnRvYXN0cy5tYXAoZnVuY3Rpb24gKHRvYXN0KSB7XG4gICAgICAgIHJldHVybiBwcm9wcy50b2FzdE1lc3NhZ2VGYWN0b3J5KHRvYXN0KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBDU1NDb3JlID0gcmVxdWlyZShcInJlYWN0L2xpYi9DU1NDb3JlXCIpO1xudmFyIFJlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IHJlcXVpcmUoXCJyZWFjdC9saWIvUmVhY3RUcmFuc2l0aW9uRXZlbnRzXCIpO1xudmFyIFRJQ0sgPSAxNztcbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uIGdldERlZmF1bHRQcm9wcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNpdGlvbjogbnVsbCwgLy9zb21lIGV4YW1wbGVzIGRlZmluZWQgaW4gaW5kZXguc2NzcyAoc2NhbGUsIGZhZGVJbk91dCwgcm90YXRlKVxuICAgICAgc2hvd0FuaW1hdGlvbjogXCJhbmltYXRlZCBib3VuY2VJblwiLCAvL29yIG90aGVyIGFuaW1hdGlvbnMgZnJvbSBhbmltYXRlLmNzc1xuICAgICAgaGlkZUFuaW1hdGlvbjogXCJhbmltYXRlZCBib3VuY2VPdXRcIixcbiAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDBcbiAgICB9O1xuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUgPSBbXTtcbiAgICB0aGlzLmlzSGlkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbDtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICB0aGlzLl9zaG93KHByb3BzKTtcblxuICAgIHZhciBvbkhpZGVDb21wbGV0ZSA9IGZ1bmN0aW9uIG9uSGlkZUNvbXBsZXRlKCkge1xuICAgICAgaWYgKF90aGlzLmlzSGlkaW5nKSB7XG4gICAgICAgIF90aGlzLl9zZXRfaXNfaGlkaW5nKGZhbHNlKTtcbiAgICAgICAgUmVhY3RUcmFuc2l0aW9uRXZlbnRzLnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIobm9kZSwgb25IaWRlQ29tcGxldGUpO1xuICAgICAgICBfdGhpcy5faGFuZGxlX3JlbW92ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIFJlYWN0VHJhbnNpdGlvbkV2ZW50cy5hZGRFbmRFdmVudExpc3RlbmVyKG5vZGUsIG9uSGlkZUNvbXBsZXRlKTtcblxuICAgIGlmICgwIDwgcHJvcHMudGltZU91dCkge1xuICAgICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKHNldFRpbWVvdXQodGhpcy5oaWRlVG9hc3QsIHByb3BzLnRpbWVPdXQpKTtcbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5pbnRlcnZhbElkKTtcbiAgICB9XG4gIH0sXG4gIF9zZXRfdHJhbnNpdGlvbjogZnVuY3Rpb24gX3NldF90cmFuc2l0aW9uKGhpZGUpIHtcbiAgICB2YXIgYW5pbWF0aW9uVHlwZSA9IGhpZGUgPyBcImxlYXZlXCIgOiBcImVudGVyXCI7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy50cmFuc2l0aW9uICsgXCItXCIgKyBhbmltYXRpb25UeXBlO1xuICAgIHZhciBhY3RpdmVDbGFzc05hbWUgPSBjbGFzc05hbWUgKyBcIi1hY3RpdmVcIjtcblxuICAgIHZhciBlbmRMaXN0ZW5lciA9IGZ1bmN0aW9uIGVuZExpc3RlbmVyKGUpIHtcbiAgICAgIGlmIChlICYmIGUudGFyZ2V0ICE9PSBub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgQ1NTQ29yZS5yZW1vdmVDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuICAgICAgQ1NTQ29yZS5yZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05hbWUpO1xuXG4gICAgICBSZWFjdFRyYW5zaXRpb25FdmVudHMucmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG4gICAgfTtcblxuICAgIFJlYWN0VHJhbnNpdGlvbkV2ZW50cy5hZGRFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTtcblxuICAgIENTU0NvcmUuYWRkQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcblxuICAgIC8vIE5lZWQgdG8gZG8gdGhpcyB0byBhY3R1YWxseSB0cmlnZ2VyIGEgdHJhbnNpdGlvbi5cbiAgICB0aGlzLl9xdWV1ZV9jbGFzcyhhY3RpdmVDbGFzc05hbWUpO1xuICB9LFxuXG4gIF9jbGVhcl90cmFuc2l0aW9uOiBmdW5jdGlvbiBfY2xlYXJfdHJhbnNpdGlvbihoaWRlKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICB2YXIgYW5pbWF0aW9uVHlwZSA9IGhpZGUgPyBcImxlYXZlXCIgOiBcImVudGVyXCI7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMucHJvcHMudHJhbnNpdGlvbiArIFwiLVwiICsgYW5pbWF0aW9uVHlwZTtcbiAgICB2YXIgYWN0aXZlQ2xhc3NOYW1lID0gY2xhc3NOYW1lICsgXCItYWN0aXZlXCI7XG5cbiAgICBDU1NDb3JlLnJlbW92ZUNsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgQ1NTQ29yZS5yZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05hbWUpO1xuICB9LFxuXG4gIF9zZXRfYW5pbWF0aW9uOiBmdW5jdGlvbiBfc2V0X2FuaW1hdGlvbihoaWRlKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICB2YXIgYW5pbWF0aW9ucyA9IHRoaXMuX2dldF9hbmltYXRpb25fY2xhc3NlcyhoaWRlKTtcbiAgICB2YXIgZW5kTGlzdGVuZXIgPSBmdW5jdGlvbiBlbmRMaXN0ZW5lcihlKSB7XG4gICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gbm9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoYW5pbSkge1xuICAgICAgICBDU1NDb3JlLnJlbW92ZUNsYXNzKG5vZGUsIGFuaW0pO1xuICAgICAgfSk7XG5cbiAgICAgIFJlYWN0VHJhbnNpdGlvbkV2ZW50cy5yZW1vdmVFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTtcbiAgICB9O1xuXG4gICAgUmVhY3RUcmFuc2l0aW9uRXZlbnRzLmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIpO1xuXG4gICAgYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmltKSB7XG4gICAgICBDU1NDb3JlLmFkZENsYXNzKG5vZGUsIGFuaW0pO1xuICAgIH0pO1xuICB9LFxuXG4gIF9nZXRfYW5pbWF0aW9uX2NsYXNzZXM6IGZ1bmN0aW9uIF9nZXRfYW5pbWF0aW9uX2NsYXNzZXMoaGlkZSkge1xuICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICB2YXIgYW5pbWF0aW9ucyA9IGhpZGUgPyBwcm9wcy5oaWRlQW5pbWF0aW9uIDogcHJvcHMuc2hvd0FuaW1hdGlvbjtcbiAgICBpZiAoXCJbb2JqZWN0IEFycmF5XVwiID09PSB0b1N0cmluZy5jYWxsKGFuaW1hdGlvbnMpKSB7XG4gICAgICByZXR1cm4gYW5pbWF0aW9ucztcbiAgICB9IGVsc2UgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBhbmltYXRpb25zKSB7XG4gICAgICByZXR1cm4gYW5pbWF0aW9ucy5zcGxpdChcIiBcIik7XG4gICAgfVxuICB9LFxuXG4gIF9jbGVhcl9hbmltYXRpb246IGZ1bmN0aW9uIF9jbGVhcl9hbmltYXRpb24oaGlkZSkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGFuaW1hdGlvbnMgPSB0aGlzLl9nZXRfYW5pbWF0aW9uX2NsYXNzZXMoaGlkZSk7XG4gICAgYW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChhbmltYXRpb24pIHtcbiAgICAgIENTU0NvcmUucmVtb3ZlQ2xhc3MoX3RoaXMyLmdldERPTU5vZGUoKSwgYW5pbWF0aW9uKTtcbiAgICB9KTtcbiAgfSxcblxuICBfcXVldWVfY2xhc3M6IGZ1bmN0aW9uIF9xdWV1ZV9jbGFzcyhjbGFzc05hbWUpIHtcbiAgICB0aGlzLmNsYXNzTmFtZVF1ZXVlLnB1c2goY2xhc3NOYW1lKTtcblxuICAgIGlmICghdGhpcy50aW1lb3V0KSB7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuX2ZsdXNoX2NsYXNzX25hbWVfcXVldWUsIFRJQ0spO1xuICAgIH1cbiAgfSxcblxuICBfZmx1c2hfY2xhc3NfbmFtZV9xdWV1ZTogZnVuY3Rpb24gX2ZsdXNoX2NsYXNzX25hbWVfcXVldWUoKSB7XG4gICAgaWYgKHRoaXMuaXNNb3VudGVkKCkpIHtcbiAgICAgIHRoaXMuY2xhc3NOYW1lUXVldWUuZm9yRWFjaChDU1NDb3JlLmFkZENsYXNzLmJpbmQoQ1NTQ29yZSwgdGhpcy5nZXRET01Ob2RlKCkpKTtcbiAgICB9XG4gICAgdGhpcy5jbGFzc05hbWVRdWV1ZS5sZW5ndGggPSAwO1xuICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gIH0sXG5cbiAgX3Nob3c6IGZ1bmN0aW9uIF9zaG93KCkge1xuICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAocHJvcHMudHJhbnNpdGlvbikge1xuICAgICAgdGhpcy5fc2V0X3RyYW5zaXRpb24oKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLnNob3dBbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX3NldF9hbmltYXRpb24oKTtcbiAgICB9XG4gIH0sXG5cbiAgaGFuZGxlTW91c2VFbnRlcjogZnVuY3Rpb24gaGFuZGxlTW91c2VFbnRlcigpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbnRlcnZhbElkKTtcbiAgICB0aGlzLl9zZXRfaW50ZXJ2YWxfaWQobnVsbCk7XG4gICAgaWYgKHRoaXMuaXNIaWRpbmcpIHtcbiAgICAgIHRoaXMuX3NldF9pc19oaWRpbmcoZmFsc2UpO1xuXG4gICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAocHJvcHMuaGlkZUFuaW1hdGlvbikge1xuICAgICAgICB0aGlzLl9jbGVhcl9hbmltYXRpb24odHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BzLnRyYW5zaXRpb24pIHtcbiAgICAgICAgdGhpcy5fY2xlYXJfdHJhbnNpdGlvbih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF0aGlzLmlzSGlkaW5nICYmICgwIDwgcHJvcHMudGltZU91dCB8fCAwIDwgcHJvcHMuZXh0ZW5kZWRUaW1lT3V0KSkge1xuICAgICAgdGhpcy5fc2V0X2ludGVydmFsX2lkKHNldFRpbWVvdXQodGhpcy5oaWRlVG9hc3QsIHByb3BzLmV4dGVuZGVkVGltZU91dCkpO1xuICAgIH1cbiAgfSxcblxuICBoaWRlVG9hc3Q6IGZ1bmN0aW9uIGhpZGVUb2FzdChvdmVycmlkZSkge1xuICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAodGhpcy5pc0hpZGluZyB8fCBudWxsID09IHRoaXMuaW50ZXJ2YWxJZCAmJiAhb3ZlcnJpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRfaXNfaGlkaW5nKHRydWUpO1xuICAgIGlmIChwcm9wcy50cmFuc2l0aW9uKSB7XG4gICAgICB0aGlzLl9zZXRfdHJhbnNpdGlvbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmhpZGVBbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX3NldF9hbmltYXRpb24odHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hhbmRsZV9yZW1vdmUoKTtcbiAgICB9XG4gIH0sXG5cbiAgX3NldF9pbnRlcnZhbF9pZDogZnVuY3Rpb24gX3NldF9pbnRlcnZhbF9pZChpbnRlcnZhbElkKSB7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gaW50ZXJ2YWxJZDtcbiAgfSxcblxuICBfc2V0X2lzX2hpZGluZzogZnVuY3Rpb24gX3NldF9pc19oaWRpbmcoaXNIaWRpbmcpIHtcbiAgICB0aGlzLmlzSGlkaW5nID0gaXNIaWRpbmc7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwicmVhY3QvYWRkb25zXCIpO1xudmFyIHVwZGF0ZSA9IFJlYWN0LmFkZG9ucy51cGRhdGU7XG5cbnZhciBjeCA9IHJlcXVpcmUoXCJjbGFzc25hbWVzXCIpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFRvYXN0TWVzc2FnZVNwZWMgPSB7XG4gIGRpc3BsYXlOYW1lOiBcIlRvYXN0TWVzc2FnZVwiLFxuXG4gIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24gZ2V0RGVmYXVsdFByb3BzKCkge1xuICAgIHZhciBpY29uQ2xhc3NOYW1lcyA9IHtcbiAgICAgIGVycm9yOiBcInRvYXN0LWVycm9yXCIsXG4gICAgICBpbmZvOiBcInRvYXN0LWluZm9cIixcbiAgICAgIHN1Y2Nlc3M6IFwidG9hc3Qtc3VjY2Vzc1wiLFxuICAgICAgd2FybmluZzogXCJ0b2FzdC13YXJuaW5nXCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYXNzTmFtZTogXCJ0b2FzdFwiLFxuICAgICAgaWNvbkNsYXNzTmFtZXM6IGljb25DbGFzc05hbWVzLFxuICAgICAgdGl0bGVDbGFzc05hbWU6IFwidG9hc3QtdGl0bGVcIixcbiAgICAgIG1lc3NhZ2VDbGFzc05hbWU6IFwidG9hc3QtbWVzc2FnZVwiLFxuICAgICAgdGFwVG9EaXNtaXNzOiB0cnVlLFxuICAgICAgY2xvc2VCdXR0b246IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuICBoYW5kbGVPbkNsaWNrOiBmdW5jdGlvbiBoYW5kbGVPbkNsaWNrKGV2ZW50KSB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIHByb3BzLmhhbmRsZU9uQ2xpY2soZXZlbnQpO1xuICAgIGlmIChwcm9wcy50YXBUb0Rpc21pc3MpIHtcbiAgICAgIHRoaXMuaGlkZVRvYXN0KHRydWUpO1xuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlX2Nsb3NlX2J1dHRvbl9jbGljazogZnVuY3Rpb24gX2hhbmRsZV9jbG9zZV9idXR0b25fY2xpY2soZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmhpZGVUb2FzdCh0cnVlKTtcbiAgfSxcblxuICBfaGFuZGxlX3JlbW92ZTogZnVuY3Rpb24gX2hhbmRsZV9yZW1vdmUoKSB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIHByb3BzLmhhbmRsZVJlbW92ZShwcm9wcy50b2FzdElkKTtcbiAgfSxcblxuICBfcmVuZGVyX2Nsb3NlX2J1dHRvbjogZnVuY3Rpb24gX3JlbmRlcl9jbG9zZV9idXR0b24ocHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHMuY2xvc2VCdXR0b24gPyBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcInRvYXN0LWNsb3NlLWJ1dHRvblwiLCByb2xlOiBcImJ1dHRvblwiLFxuICAgICAgb25DbGljazogdGhpcy5faGFuZGxlX2Nsb3NlX2J1dHRvbl9jbGljayxcbiAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogXCImdGltZXM7XCIgfVxuICAgIH0pIDogZmFsc2U7XG4gIH0sXG5cbiAgX3JlbmRlcl90aXRsZV9lbGVtZW50OiBmdW5jdGlvbiBfcmVuZGVyX3RpdGxlX2VsZW1lbnQocHJvcHMpIHtcbiAgICByZXR1cm4gcHJvcHMudGl0bGUgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgY2xhc3NOYW1lOiBwcm9wcy50aXRsZUNsYXNzTmFtZSB9LFxuICAgICAgcHJvcHMudGl0bGVcbiAgICApIDogZmFsc2U7XG4gIH0sXG5cbiAgX3JlbmRlcl9tZXNzYWdlX2VsZW1lbnQ6IGZ1bmN0aW9uIF9yZW5kZXJfbWVzc2FnZV9lbGVtZW50KHByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzLm1lc3NhZ2UgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgY2xhc3NOYW1lOiBwcm9wcy5tZXNzYWdlQ2xhc3NOYW1lIH0sXG4gICAgICBwcm9wcy5tZXNzYWdlXG4gICAgKSA6IGZhbHNlO1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICB2YXIgaWNvbkNsYXNzTmFtZSA9IHByb3BzLmljb25DbGFzc05hbWUgfHwgcHJvcHMuaWNvbkNsYXNzTmFtZXNbcHJvcHMudHlwZV07XG5cbiAgICB2YXIgdG9hc3RDbGFzcyA9IHt9O1xuICAgIHRvYXN0Q2xhc3NbcHJvcHMuY2xhc3NOYW1lXSA9IHRydWU7XG4gICAgdG9hc3RDbGFzc1tpY29uQ2xhc3NOYW1lXSA9IHRydWU7XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IGNsYXNzTmFtZTogY3godG9hc3RDbGFzcyksIHN0eWxlOiBwcm9wcy5zdHlsZSB8fCB7fSxcbiAgICAgICAgb25DbGljazogdGhpcy5oYW5kbGVPbkNsaWNrLFxuICAgICAgICBvbk1vdXNlRW50ZXI6IHRoaXMuaGFuZGxlTW91c2VFbnRlcixcbiAgICAgICAgb25Nb3VzZUxlYXZlOiB0aGlzLmhhbmRsZU1vdXNlTGVhdmUgfSxcbiAgICAgIHRoaXMuX3JlbmRlcl9jbG9zZV9idXR0b24ocHJvcHMpLFxuICAgICAgdGhpcy5fcmVuZGVyX3RpdGxlX2VsZW1lbnQocHJvcHMpLFxuICAgICAgdGhpcy5fcmVuZGVyX21lc3NhZ2VfZWxlbWVudChwcm9wcylcbiAgICApO1xuICB9XG59O1xuXG52YXIgYW5pbWF0aW9uID0gUmVhY3QuY3JlYXRlQ2xhc3ModXBkYXRlKFRvYXN0TWVzc2FnZVNwZWMsIHtcbiAgZGlzcGxheU5hbWU6IHsgJHNldDogXCJUb2FzdE1lc3NhZ2UuYW5pbWF0aW9uXCIgfSxcbiAgbWl4aW5zOiB7ICRzZXQ6IFtyZXF1aXJlKFwiLi9hbmltYXRpb25NaXhpblwiKV0gfVxufSkpO1xuXG52YXIgalF1ZXJ5ID0gUmVhY3QuY3JlYXRlQ2xhc3ModXBkYXRlKFRvYXN0TWVzc2FnZVNwZWMsIHtcbiAgZGlzcGxheU5hbWU6IHsgJHNldDogXCJUb2FzdE1lc3NhZ2UualF1ZXJ5XCIgfSxcbiAgbWl4aW5zOiB7ICRzZXQ6IFtyZXF1aXJlKFwiLi9qUXVlcnlNaXhpblwiKV0gfVxufSkpO1xuXG4vKlxuICogYXNzaWduIGRlZmF1bHQgbm9vcCBmdW5jdGlvbnNcbiAqL1xuVG9hc3RNZXNzYWdlU3BlYy5oYW5kbGVNb3VzZUVudGVyID0gbm9vcDtcblRvYXN0TWVzc2FnZVNwZWMuaGFuZGxlTW91c2VMZWF2ZSA9IG5vb3A7XG5Ub2FzdE1lc3NhZ2VTcGVjLmhpZGVUb2FzdCA9IG5vb3A7XG5cbnZhciBUb2FzdE1lc3NhZ2UgPSBtb2R1bGUuZXhwb3J0cyA9IFJlYWN0LmNyZWF0ZUNsYXNzKFRvYXN0TWVzc2FnZVNwZWMpO1xuVG9hc3RNZXNzYWdlLmFuaW1hdGlvbiA9IGFuaW1hdGlvbjtcblRvYXN0TWVzc2FnZS5qUXVlcnkgPSBqUXVlcnk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5mdW5jdGlvbiBjYWxsX3Nob3dfbWV0aG9kKCRub2RlLCBwcm9wcykge1xuICAkbm9kZVtwcm9wcy5zaG93TWV0aG9kXSh7XG4gICAgZHVyYXRpb246IHByb3BzLnNob3dEdXJhdGlvbixcbiAgICBlYXNpbmc6IHByb3BzLnNob3dFYXNpbmdcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uIGdldERlZmF1bHRQcm9wcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3R5bGU6IHtcbiAgICAgICAgZGlzcGxheTogXCJub25lXCIgfSxcbiAgICAgIC8vIGVmZmVjdGl2ZSAkLmhpZGUoKVxuICAgICAgc2hvd01ldGhvZDogXCJmYWRlSW5cIiwgLy8sIHNsaWRlRG93biwgYW5kIHNob3cgYXJlIGJ1aWx0IGludG8galF1ZXJ5XG4gICAgICBzaG93RHVyYXRpb246IDMwMCxcbiAgICAgIHNob3dFYXNpbmc6IFwic3dpbmdcIiwgLy8gYW5kIGxpbmVhciBhcmUgYnVpbHQgaW50byBqUXVlcnlcbiAgICAgIGhpZGVNZXRob2Q6IFwiZmFkZU91dFwiLFxuICAgICAgaGlkZUR1cmF0aW9uOiAxMDAwLFxuICAgICAgaGlkZUVhc2luZzogXCJzd2luZ1wiLFxuICAgICAgLy9cbiAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDBcbiAgICB9O1xuICB9LFxuXG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbnRlcnZhbElkOiBudWxsLFxuICAgICAgaXNIaWRpbmc6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIGNhbGxfc2hvd19tZXRob2QodGhpcy5fZ2V0XyRfbm9kZSgpLCBwcm9wcyk7XG4gICAgaWYgKDAgPCBwcm9wcy50aW1lT3V0KSB7XG4gICAgICB0aGlzLl9zZXRfaW50ZXJ2YWxfaWQoc2V0VGltZW91dCh0aGlzLmhpZGVUb2FzdCwgcHJvcHMudGltZU91dCkpO1xuICAgIH1cbiAgfSxcblxuICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YXRlLmludGVydmFsSWQpO1xuICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChudWxsKTtcbiAgICB0aGlzLl9zZXRfaXNfaGlkaW5nKGZhbHNlKTtcblxuICAgIGNhbGxfc2hvd19tZXRob2QodGhpcy5fZ2V0XyRfbm9kZSgpLnN0b3AodHJ1ZSwgdHJ1ZSksIHRoaXMucHJvcHMpO1xuICB9LFxuXG4gIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc0hpZGluZyAmJiAoMCA8IHByb3BzLnRpbWVPdXQgfHwgMCA8IHByb3BzLmV4dGVuZGVkVGltZU91dCkpIHtcbiAgICAgIHRoaXMuX3NldF9pbnRlcnZhbF9pZChzZXRUaW1lb3V0KHRoaXMuaGlkZVRvYXN0LCBwcm9wcy5leHRlbmRlZFRpbWVPdXQpKTtcbiAgICB9XG4gIH0sXG5cbiAgaGlkZVRvYXN0OiBmdW5jdGlvbiBoaWRlVG9hc3Qob3ZlcnJpZGUpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoc3RhdGUuaXNIaWRpbmcgfHwgbnVsbCA9PSBzdGF0ZS5pbnRlcnZhbElkICYmICFvdmVycmlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgaXNIaWRpbmc6IHRydWUgfSk7XG5cbiAgICB0aGlzLl9nZXRfJF9ub2RlKClbcHJvcHMuaGlkZU1ldGhvZF0oe1xuICAgICAgZHVyYXRpb246IHByb3BzLmhpZGVEdXJhdGlvbixcbiAgICAgIGVhc2luZzogcHJvcHMuaGlkZUVhc2luZyxcbiAgICAgIGNvbXBsZXRlOiB0aGlzLl9oYW5kbGVfcmVtb3ZlXG4gICAgfSk7XG4gIH0sXG5cbiAgX2dldF8kX25vZGU6IGZ1bmN0aW9uIF9nZXRfJF9ub2RlKCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gICAgcmV0dXJuIGpRdWVyeSh0aGlzLmdldERPTU5vZGUoKSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bmRlZiAqL1xuICB9LFxuXG4gIF9zZXRfaW50ZXJ2YWxfaWQ6IGZ1bmN0aW9uIF9zZXRfaW50ZXJ2YWxfaWQoaW50ZXJ2YWxJZCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaW50ZXJ2YWxJZDogaW50ZXJ2YWxJZFxuICAgIH0pO1xuICB9LFxuXG4gIF9zZXRfaXNfaGlkaW5nOiBmdW5jdGlvbiBfc2V0X2lzX2hpZGluZyhpc0hpZGluZykge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNIaWRpbmc6IGlzSGlkaW5nXG4gICAgfSk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5leHBvcnRzLlRvYXN0Q29udGFpbmVyID0gcmVxdWlyZShcIi4vVG9hc3RDb250YWluZXJcIik7XG5leHBvcnRzLlRvYXN0TWVzc2FnZSA9IHJlcXVpcmUoXCIuL1RvYXN0TWVzc2FnZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL1JlYWN0V2l0aEFkZG9ucycpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEF1dG9Gb2N1c01peGluXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGZvY3VzTm9kZSA9IHJlcXVpcmUoXCIuL2ZvY3VzTm9kZVwiKTtcblxudmFyIEF1dG9Gb2N1c01peGluID0ge1xuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICBmb2N1c05vZGUodGhpcy5nZXRET01Ob2RlKCkpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvRm9jdXNNaXhpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZShcIi4vRXZlbnRQcm9wYWdhdG9yc1wiKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xudmFyIEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZSA9IHJlcXVpcmUoXCIuL0ZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZVwiKTtcbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljQ29tcG9zaXRpb25FdmVudFwiKTtcbnZhciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljSW5wdXRFdmVudFwiKTtcblxudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBFc2MsIFNwYWNlXG52YXIgU1RBUlRfS0VZQ09ERSA9IDIyOTtcblxudmFyIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSAoXG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJlxuICAnQ29tcG9zaXRpb25FdmVudCcgaW4gd2luZG93XG4pO1xuXG52YXIgZG9jdW1lbnRNb2RlID0gbnVsbDtcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHtcbiAgZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufVxuXG4vLyBXZWJraXQgb2ZmZXJzIGEgdmVyeSB1c2VmdWwgYHRleHRJbnB1dGAgZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuLy8gZGlyZWN0bHkgcmVwcmVzZW50IGBiZWZvcmVJbnB1dGAuIFRoZSBJRSBgdGV4dGlucHV0YCBldmVudCBpcyBub3QgYXNcbi8vIHVzZWZ1bCwgc28gd2UgZG9uJ3QgdXNlIGl0LlxudmFyIGNhblVzZVRleHRJbnB1dEV2ZW50ID0gKFxuICBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiZcbiAgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmXG4gICFkb2N1bWVudE1vZGUgJiZcbiAgIWlzUHJlc3RvKClcbik7XG5cbi8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSAoXG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJlxuICAoXG4gICAgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAmJiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSlcbiAgKVxuKTtcblxuLyoqXG4gKiBPcGVyYSA8PSAxMiBpbmNsdWRlcyBUZXh0RXZlbnQgaW4gd2luZG93LCBidXQgZG9lcyBub3QgZmlyZVxuICogdGV4dCBpbnB1dCBldmVudHMuIFJlbHkgb24ga2V5cHJlc3MgaW5zdGVhZC5cbiAqL1xuZnVuY3Rpb24gaXNQcmVzdG8oKSB7XG4gIHZhciBvcGVyYSA9IHdpbmRvdy5vcGVyYTtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygb3BlcmEgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9wZXJhLnZlcnNpb24gPT09ICdmdW5jdGlvbicgJiZcbiAgICBwYXJzZUludChvcGVyYS52ZXJzaW9uKCksIDEwKSA8PSAxMlxuICApO1xufVxuXG52YXIgU1BBQ0VCQVJfQ09ERSA9IDMyO1xudmFyIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbi8vIEV2ZW50cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBuYW1lcy5cbnZhciBldmVudFR5cGVzID0ge1xuICBiZWZvcmVJbnB1dDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25CZWZvcmVJbnB1dDogbnVsbH0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkJlZm9yZUlucHV0Q2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25FbmQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BUZXh0SW5wdXQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcFBhc3RlXG4gICAgXVxuICB9LFxuICBjb21wb3NpdGlvbkVuZDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Db21wb3NpdGlvbkVuZDogbnVsbH0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNvbXBvc2l0aW9uRW5kQ2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25FbmQsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleURvd24sXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duXG4gICAgXVxuICB9LFxuICBjb21wb3NpdGlvblN0YXJ0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNvbXBvc2l0aW9uU3RhcnQ6IG51bGx9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Db21wb3NpdGlvblN0YXJ0Q2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ29tcG9zaXRpb25TdGFydCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5RG93bixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3MsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVVwLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd25cbiAgICBdXG4gIH0sXG4gIGNvbXBvc2l0aW9uVXBkYXRlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNvbXBvc2l0aW9uVXBkYXRlOiBudWxsfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ29tcG9zaXRpb25VcGRhdGVDYXB0dXJlOiBudWxsfSlcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BCbHVyLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvblVwZGF0ZSxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5RG93bixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5UHJlc3MsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEtleVVwLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd25cbiAgICBdXG4gIH1cbn07XG5cbi8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5kbGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYSBuYXRpdmUga2V5cHJlc3MgZXZlbnQgaXMgYXNzdW1lZCB0byBiZSBhIGNvbW1hbmQuXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgRmlyZWZveCBmaXJlcyBga2V5cHJlc3NgIGV2ZW50cyBmb3Iga2V5IGNvbW1hbmRzXG4gKiAoY3V0LCBjb3B5LCBzZWxlY3QtYWxsLCBldGMuKSBldmVuIHRob3VnaCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAoXG4gICAgKG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHwgbmF0aXZlRXZlbnQuYWx0S2V5IHx8IG5hdGl2ZUV2ZW50Lm1ldGFLZXkpICYmXG4gICAgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICAgIShuYXRpdmVFdmVudC5jdHJsS2V5ICYmIG5hdGl2ZUV2ZW50LmFsdEtleSlcbiAgKTtcbn1cblxuXG4vKipcbiAqIFRyYW5zbGF0ZSBuYXRpdmUgdG9wIGxldmVsIGV2ZW50cyBpbnRvIGV2ZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUodG9wTGV2ZWxUeXBlKSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uU3RhcnQ6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcy5jb21wb3NpdGlvblN0YXJ0O1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvbkVuZDpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvblVwZGF0ZTpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uVXBkYXRlO1xuICB9XG59XG5cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAoXG4gICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEtleURvd24gJiZcbiAgICBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFXG4gICk7XG59XG5cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgbW9kZSB0aGluayB0aGF0IHRoaXMgZXZlbnQgaXMgdGhlIGVuZCBvZiBjb21wb3NpdGlvbj9cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVVwOlxuICAgICAgLy8gQ29tbWFuZCBrZXlzIGluc2VydCBvciBjbGVhciBJTUUgaW5wdXQuXG4gICAgICByZXR1cm4gKEVORF9LRVlDT0RFUy5pbmRleE9mKG5hdGl2ZUV2ZW50LmtleUNvZGUpICE9PSAtMSk7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleURvd246XG4gICAgICAvLyBFeHBlY3QgSU1FIGtleUNvZGUgb24gZWFjaCBrZXlkb3duLiBJZiB3ZSBnZXQgYW55IG90aGVyXG4gICAgICAvLyBjb2RlIHdlIG11c3QgaGF2ZSBleGl0ZWQgZWFybGllci5cbiAgICAgIHJldHVybiAobmF0aXZlRXZlbnQua2V5Q29kZSAhPT0gU1RBUlRfS0VZQ09ERSk7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzOlxuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd246XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEJsdXI6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gZmFsbGJhY2sgb2JqZWN0LCBpZiBhbnkuXG52YXIgY3VycmVudENvbXBvc2l0aW9uID0gbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LlxuICovXG5mdW5jdGlvbiBleHRyYWN0Q29tcG9zaXRpb25FdmVudChcbiAgdG9wTGV2ZWxUeXBlLFxuICB0b3BMZXZlbFRhcmdldCxcbiAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgbmF0aXZlRXZlbnRcbikge1xuICB2YXIgZXZlbnRUeXBlO1xuICB2YXIgZmFsbGJhY2tEYXRhO1xuXG4gIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgZXZlbnRUeXBlID0gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUodG9wTGV2ZWxUeXBlKTtcbiAgfSBlbHNlIGlmICghY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICBldmVudFR5cGUgPSBldmVudFR5cGVzLmNvbXBvc2l0aW9uU3RhcnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSkge1xuICAgIGV2ZW50VHlwZSA9IGV2ZW50VHlwZXMuY29tcG9zaXRpb25FbmQ7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgY29tcG9zaXRpb24gaXMgc3RvcmVkIHN0YXRpY2FsbHkgYW5kIG11c3Qgbm90IGJlXG4gICAgLy8gb3ZlcndyaXR0ZW4gd2hpbGUgY29tcG9zaXRpb24gY29udGludWVzLlxuICAgIGlmICghY3VycmVudENvbXBvc2l0aW9uICYmIGV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlcy5jb21wb3NpdGlvblN0YXJ0KSB7XG4gICAgICBjdXJyZW50Q29tcG9zaXRpb24gPSBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUuZ2V0UG9vbGVkKHRvcExldmVsVGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gZXZlbnRUeXBlcy5jb21wb3NpdGlvbkVuZCkge1xuICAgICAgaWYgKGN1cnJlbnRDb21wb3NpdGlvbikge1xuICAgICAgICBmYWxsYmFja0RhdGEgPSBjdXJyZW50Q29tcG9zaXRpb24uZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBldmVudCA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuZ2V0UG9vbGVkKFxuICAgIGV2ZW50VHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldElELFxuICAgIG5hdGl2ZUV2ZW50XG4gICk7XG5cbiAgaWYgKGZhbGxiYWNrRGF0YSkge1xuICAgIC8vIEluamVjdCBkYXRhIGdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrIHBhdGggaW50byB0aGUgc3ludGhldGljIGV2ZW50LlxuICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAgZXZlbnQuZGF0YSA9IGZhbGxiYWNrRGF0YTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VzdG9tRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgIGlmIChjdXN0b21EYXRhICE9PSBudWxsKSB7XG4gICAgICBldmVudC5kYXRhID0gY3VzdG9tRGF0YTtcbiAgICB9XG4gIH1cblxuICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P3N0cmluZ30gVGhlIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYGJlZm9yZUlucHV0YCBldmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uRW5kOlxuICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzczpcbiAgICAgIC8qKlxuICAgICAgICogSWYgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBvdXIgZ29hbCBpcyB0byBtYWtlXG4gICAgICAgKiB1c2Ugb2YgdGhlbS4gSG93ZXZlciwgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2U6IHRoZSBzcGFjZWJhciBrZXkuXG4gICAgICAgKiBJbiBXZWJraXQsIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBhIHNwYWNlYmFyIGB0ZXh0SW5wdXRgIGV2ZW50XG4gICAgICAgKiBjYW5jZWxzIGNoYXJhY3RlciBpbnNlcnRpb24sIGJ1dCBpdCAqYWxzbyogY2F1c2VzIHRoZSBicm93c2VyXG4gICAgICAgKiB0byBmYWxsIGJhY2sgdG8gaXRzIGRlZmF1bHQgc3BhY2ViYXIgYmVoYXZpb3Igb2Ygc2Nyb2xsaW5nIHRoZVxuICAgICAgICogcGFnZS5cbiAgICAgICAqXG4gICAgICAgKiBUcmFja2luZyBhdDpcbiAgICAgICAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNTUxMDNcbiAgICAgICAqXG4gICAgICAgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB1c2UgdGhlIGtleXByZXNzIGV2ZW50IGFzIGlmIG5vIGB0ZXh0SW5wdXRgXG4gICAgICAgKiBldmVudCBpcyBhdmFpbGFibGUuXG4gICAgICAgKi9cbiAgICAgIHZhciB3aGljaCA9IG5hdGl2ZUV2ZW50LndoaWNoO1xuICAgICAgaWYgKHdoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBTUEFDRUJBUl9DSEFSO1xuXG4gICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRleHRJbnB1dDpcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhcmFjdGVycyB0byBiZSBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAgdmFyIGNoYXJzID0gbmF0aXZlRXZlbnQuZGF0YTtcblxuICAgICAgLy8gSWYgaXQncyBhIHNwYWNlYmFyIGNoYXJhY3RlciwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIC8vIGl0IGF0IHRoZSBrZXlwcmVzcyBsZXZlbCBhbmQgYmFpbCBpbW1lZGlhdGVseS4gQW5kcm9pZCBDaHJvbWVcbiAgICAgIC8vIGRvZXNuJ3QgZ2l2ZSB1cyBrZXljb2Rlcywgc28gd2UgbmVlZCB0byBibGFja2xpc3QgaXQuXG4gICAgICBpZiAoY2hhcnMgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzcykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEZvciBvdGhlciBuYXRpdmUgZXZlbnQgdHlwZXMsIGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEZvciBicm93c2VycyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZSBgdGV4dElucHV0YCBldmVudCwgZXh0cmFjdCB0aGVcbiAqIGFwcHJvcHJpYXRlIHN0cmluZyB0byB1c2UgZm9yIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P3N0cmluZ30gVGhlIGZhbGxiYWNrIHN0cmluZyBmb3IgdGhpcyBgYmVmb3JlSW5wdXRgIGV2ZW50LlxuICovXG5mdW5jdGlvbiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGNvbXBvc2luZyAoSU1FKSBhbmQgdXNpbmcgYSBmYWxsYmFjayB0byBkbyBzbyxcbiAgLy8gdHJ5IHRvIGV4dHJhY3QgdGhlIGNvbXBvc2VkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZmFsbGJhY2sgb2JqZWN0LlxuICBpZiAoY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgaWYgKFxuICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcENvbXBvc2l0aW9uRW5kIHx8XG4gICAgICBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudClcbiAgICApIHtcbiAgICAgIHZhciBjaGFycyA9IGN1cnJlbnRDb21wb3NpdGlvbi5nZXREYXRhKCk7XG4gICAgICBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUucmVsZWFzZShjdXJyZW50Q29tcG9zaXRpb24pO1xuICAgICAgY3VycmVudENvbXBvc2l0aW9uID0gbnVsbDtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BQYXN0ZTpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlQcmVzczpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2YgdjI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFjdGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGluIFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFyIGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmIChuYXRpdmVFdmVudC53aGljaCAmJiAhaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb21wb3NpdGlvbkVuZDpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5mdW5jdGlvbiBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChcbiAgdG9wTGV2ZWxUeXBlLFxuICB0b3BMZXZlbFRhcmdldCxcbiAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgbmF0aXZlRXZlbnRcbikge1xuICB2YXIgY2hhcnM7XG5cbiAgaWYgKGNhblVzZVRleHRJbnB1dEV2ZW50KSB7XG4gICAgY2hhcnMgPSBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNoYXJzID0gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICB9XG5cbiAgLy8gSWYgbm8gY2hhcmFjdGVycyBhcmUgYmVpbmcgaW5zZXJ0ZWQsIG5vIEJlZm9yZUlucHV0IGV2ZW50IHNob3VsZFxuICAvLyBiZSBmaXJlZC5cbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGV2ZW50ID0gU3ludGhldGljSW5wdXRFdmVudC5nZXRQb29sZWQoXG4gICAgZXZlbnRUeXBlcy5iZWZvcmVJbnB1dCxcbiAgICB0b3BMZXZlbFRhcmdldElELFxuICAgIG5hdGl2ZUV2ZW50XG4gICk7XG5cbiAgZXZlbnQuZGF0YSA9IGNoYXJzO1xuICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBhbmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29tcG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRgIGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBzcGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRvIGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxsb3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVmb3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xudmFyIEJlZm9yZUlucHV0RXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICBuYXRpdmVFdmVudFxuICApIHtcbiAgICByZXR1cm4gW1xuICAgICAgZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICApLFxuICAgICAgZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoXG4gICAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICApXG4gICAgXTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBDU1NDb3JlXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogVGhlIENTU0NvcmUgbW9kdWxlIHNwZWNpZmllcyB0aGUgQVBJIChhbmQgaW1wbGVtZW50cyBtb3N0IG9mIHRoZSBtZXRob2RzKVxuICogdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIGRlYWxpbmcgd2l0aCB0aGUgZGlzcGxheSBvZiBlbGVtZW50cyAodmlhIHRoZWlyXG4gKiBDU1MgY2xhc3NlcyBhbmQgdmlzaWJpbGl0eSBvbiBzY3JlZW4uIEl0IGlzIGFuIEFQSSBmb2N1c2VkIG9uIG11dGF0aW5nIHRoZVxuICogZGlzcGxheSBhbmQgbm90IHJlYWRpbmcgaXQgYXMgbm8gbG9naWNhbCBzdGF0ZSBzaG91bGQgYmUgZW5jb2RlZCBpbiB0aGVcbiAqIGRpc3BsYXkgb2YgZWxlbWVudHMuXG4gKi9cblxudmFyIENTU0NvcmUgPSB7XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIGNsYXNzIHBhc3NlZCBpbiB0byB0aGUgZWxlbWVudCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgaGF2ZSBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHRoZSBlbGVtZW50IHRvIHNldCB0aGUgY2xhc3Mgb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzTmFtZVxuICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSB0aGUgZWxlbWVudCBwYXNzZWQgaW5cbiAgICovXG4gIGFkZENsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIS9cXHMvLnRlc3QoY2xhc3NOYW1lKSxcbiAgICAgICdDU1NDb3JlLmFkZENsYXNzIHRha2VzIG9ubHkgYSBzaW5nbGUgY2xhc3MgbmFtZS4gXCIlc1wiIGNvbnRhaW5zICcgK1xuICAgICAgJ211bHRpcGxlIGNsYXNzZXMuJywgY2xhc3NOYW1lXG4gICAgKSA6IGludmFyaWFudCghL1xccy8udGVzdChjbGFzc05hbWUpKSk7XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFDU1NDb3JlLmhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZSArICcgJyArIGNsYXNzTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGNsYXNzIHBhc3NlZCBpbiBmcm9tIHRoZSBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB0byBzZXQgdGhlIGNsYXNzIG9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzc05hbWVcbiAgICogQHJldHVybiB7RE9NRWxlbWVudH0gdGhlIGVsZW1lbnQgcGFzc2VkIGluXG4gICAqL1xuICByZW1vdmVDbGFzczogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICEvXFxzLy50ZXN0KGNsYXNzTmFtZSksXG4gICAgICAnQ1NTQ29yZS5yZW1vdmVDbGFzcyB0YWtlcyBvbmx5IGEgc2luZ2xlIGNsYXNzIG5hbWUuIFwiJXNcIiBjb250YWlucyAnICtcbiAgICAgICdtdWx0aXBsZSBjbGFzc2VzLicsIGNsYXNzTmFtZVxuICAgICkgOiBpbnZhcmlhbnQoIS9cXHMvLnRlc3QoY2xhc3NOYW1lKSkpO1xuXG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChDU1NDb3JlLmhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZVxuICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBjbGFzc05hbWUgKyAnKD86XFxcXHN8JCknLCAnZycpLCAnJDEnKVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJykgLy8gbXVsdGlwbGUgc3BhY2VzIHRvIG9uZVxuICAgICAgICAgIC5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7IC8vIHRyaW0gdGhlIGVuZHNcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byBhZGQgb3IgcmVtb3ZlIGEgY2xhc3MgZnJvbSBhbiBlbGVtZW50IGJhc2VkIG9uIGEgY29uZGl0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBjbGFzcyBvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3NOYW1lXG4gICAqIEBwYXJhbSB7Kn0gYm9vbCBjb25kaXRpb24gdG8gd2hldGhlciB0byBhZGQgb3IgcmVtb3ZlIHRoZSBjbGFzc1xuICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSB0aGUgZWxlbWVudCBwYXNzZWQgaW5cbiAgICovXG4gIGNvbmRpdGlvbkNsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUsIGJvb2wpIHtcbiAgICByZXR1cm4gKGJvb2wgPyBDU1NDb3JlLmFkZENsYXNzIDogQ1NTQ29yZS5yZW1vdmVDbGFzcykoZWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgfSxcblxuICAvKipcbiAgICogVGVzdHMgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtET01Ob2RlfERPTVdpbmRvd30gZWxlbWVudCB0aGUgZWxlbWVudCB0byBzZXQgdGhlIGNsYXNzIG9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzc05hbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzLCBmYWxzZSBpZiBub3RcbiAgICovXG4gIGhhc0NsYXNzOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIS9cXHMvLnRlc3QoY2xhc3NOYW1lKSxcbiAgICAgICdDU1MuaGFzQ2xhc3MgdGFrZXMgb25seSBhIHNpbmdsZSBjbGFzcyBuYW1lLidcbiAgICApIDogaW52YXJpYW50KCEvXFxzLy50ZXN0KGNsYXNzTmFtZSkpKTtcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICAgIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gKCcgJyArIGVsZW1lbnQuY2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgJyArIGNsYXNzTmFtZSArICcgJykgPiAtMTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENTU0NvcmU7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZRMU5UUTI5eVpTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRFUxTkRiM0psWEc0Z0tpQkFkSGx3WldOb1pXTnJjMXh1SUNvdlhHNWNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiaThxS2x4dUlDb2dWR2hsSUVOVFUwTnZjbVVnYlc5a2RXeGxJSE53WldOcFptbGxjeUIwYUdVZ1FWQkpJQ2hoYm1RZ2FXMXdiR1Z0Wlc1MGN5QnRiM04wSUc5bUlIUm9aU0J0WlhSb2IyUnpLVnh1SUNvZ2RHaGhkQ0J6YUc5MWJHUWdZbVVnZFhObFpDQjNhR1Z1SUdSbFlXeHBibWNnZDJsMGFDQjBhR1VnWkdsemNHeGhlU0J2WmlCbGJHVnRaVzUwY3lBb2RtbGhJSFJvWldseVhHNGdLaUJEVTFNZ1kyeGhjM05sY3lCaGJtUWdkbWx6YVdKcGJHbDBlU0J2YmlCelkzSmxaVzR1SUVsMElHbHpJR0Z1SUVGUVNTQm1iMk4xYzJWa0lHOXVJRzExZEdGMGFXNW5JSFJvWlZ4dUlDb2daR2x6Y0d4aGVTQmhibVFnYm05MElISmxZV1JwYm1jZ2FYUWdZWE1nYm04Z2JHOW5hV05oYkNCemRHRjBaU0J6YUc5MWJHUWdZbVVnWlc1amIyUmxaQ0JwYmlCMGFHVmNiaUFxSUdScGMzQnNZWGtnYjJZZ1pXeGxiV1Z1ZEhNdVhHNGdLaTljYmx4dWRtRnlJRU5UVTBOdmNtVWdQU0I3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUZrWkhNZ2RHaGxJR05zWVhOeklIQmhjM05sWkNCcGJpQjBieUIwYUdVZ1pXeGxiV1Z1ZENCcFppQnBkQ0JrYjJWemJpZDBJR0ZzY21WaFpIa2dhR0YyWlNCcGRDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCbGJHVnRaVzUwSUhSb1pTQmxiR1Z0Wlc1MElIUnZJSE5sZENCMGFHVWdZMnhoYzNNZ2IyNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdOc1lYTnpUbUZ0WlNCMGFHVWdRMU5USUdOc1lYTnpUbUZ0WlZ4dUlDQWdLaUJBY21WMGRYSnVJSHRFVDAxRmJHVnRaVzUwZlNCMGFHVWdaV3hsYldWdWRDQndZWE56WldRZ2FXNWNiaUFnSUNvdlhHNGdJR0ZrWkVOc1lYTnpPaUJtZFc1amRHbHZiaWhsYkdWdFpXNTBMQ0JqYkdGemMwNWhiV1VwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJUzljWEhNdkxuUmxjM1FvWTJ4aGMzTk9ZVzFsS1N4Y2JpQWdJQ0FnSUNkRFUxTkRiM0psTG1Ga1pFTnNZWE56SUhSaGEyVnpJRzl1YkhrZ1lTQnphVzVuYkdVZ1kyeGhjM01nYm1GdFpTNGdYQ0lsYzF3aUlHTnZiblJoYVc1eklDY2dLMXh1SUNBZ0lDQWdKMjExYkhScGNHeGxJR05zWVhOelpYTXVKeXdnWTJ4aGMzTk9ZVzFsWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENnaEwxeGNjeTh1ZEdWemRDaGpiR0Z6YzA1aGJXVXBLU2s3WEc1Y2JpQWdJQ0JwWmlBb1kyeGhjM05PWVcxbEtTQjdYRzRnSUNBZ0lDQnBaaUFvWld4bGJXVnVkQzVqYkdGemMweHBjM1FwSUh0Y2JpQWdJQ0FnSUNBZ1pXeGxiV1Z1ZEM1amJHRnpjMHhwYzNRdVlXUmtLR05zWVhOelRtRnRaU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0NGRFUxTkRiM0psTG1oaGMwTnNZWE56S0dWc1pXMWxiblFzSUdOc1lYTnpUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdaV3hsYldWdWRDNWpiR0Z6YzA1aGJXVWdQU0JsYkdWdFpXNTBMbU5zWVhOelRtRnRaU0FySUNjZ0p5QXJJR05zWVhOelRtRnRaVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdWc1pXMWxiblE3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxiVzkyWlhNZ2RHaGxJR05zWVhOeklIQmhjM05sWkNCcGJpQm1jbTl0SUhSb1pTQmxiR1Z0Wlc1MFhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWld4bGJXVnVkQ0IwYUdVZ1pXeGxiV1Z1ZENCMGJ5QnpaWFFnZEdobElHTnNZWE56SUc5dVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JqYkdGemMwNWhiV1VnZEdobElFTlRVeUJqYkdGemMwNWhiV1ZjYmlBZ0lDb2dRSEpsZEhWeWJpQjdSRTlOUld4bGJXVnVkSDBnZEdobElHVnNaVzFsYm5RZ2NHRnpjMlZrSUdsdVhHNGdJQ0FxTDF4dUlDQnlaVzF2ZG1WRGJHRnpjem9nWm5WdVkzUnBiMjRvWld4bGJXVnVkQ3dnWTJ4aGMzTk9ZVzFsS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0V2WEZ4ekx5NTBaWE4wS0dOc1lYTnpUbUZ0WlNrc1hHNGdJQ0FnSUNBblExTlRRMjl5WlM1eVpXMXZkbVZEYkdGemN5QjBZV3RsY3lCdmJteDVJR0VnYzJsdVoyeGxJR05zWVhOeklHNWhiV1V1SUZ3aUpYTmNJaUJqYjI1MFlXbHVjeUFuSUN0Y2JpQWdJQ0FnSUNkdGRXeDBhWEJzWlNCamJHRnpjMlZ6TGljc0lHTnNZWE56VG1GdFpWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JUzljWEhNdkxuUmxjM1FvWTJ4aGMzTk9ZVzFsS1NrcE8xeHVYRzRnSUNBZ2FXWWdLR05zWVhOelRtRnRaU2tnZTF4dUlDQWdJQ0FnYVdZZ0tHVnNaVzFsYm5RdVkyeGhjM05NYVhOMEtTQjdYRzRnSUNBZ0lDQWdJR1ZzWlcxbGJuUXVZMnhoYzNOTWFYTjBMbkpsYlc5MlpTaGpiR0Z6YzA1aGJXVXBPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hEVTFORGIzSmxMbWhoYzBOc1lYTnpLR1ZzWlcxbGJuUXNJR05zWVhOelRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ1pXeGxiV1Z1ZEM1amJHRnpjMDVoYldVZ1BTQmxiR1Z0Wlc1MExtTnNZWE56VG1GdFpWeHVJQ0FnSUNBZ0lDQWdJQzV5WlhCc1lXTmxLRzVsZHlCU1pXZEZlSEFvSnloZWZGeGNYRnh6S1NjZ0t5QmpiR0Z6YzA1aGJXVWdLeUFuS0Q4NlhGeGNYSE44SkNrbkxDQW5aeWNwTENBbkpERW5LVnh1SUNBZ0lDQWdJQ0FnSUM1eVpYQnNZV05sS0M5Y1hITXJMMmNzSUNjZ0p5a2dMeThnYlhWc2RHbHdiR1VnYzNCaFkyVnpJSFJ2SUc5dVpWeHVJQ0FnSUNBZ0lDQWdJQzV5WlhCc1lXTmxLQzllWEZ4ektueGNYSE1xSkM5bkxDQW5KeWs3SUM4dklIUnlhVzBnZEdobElHVnVaSE5jYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdWc1pXMWxiblE3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFaGxiSEJsY2lCMGJ5QmhaR1FnYjNJZ2NtVnRiM1psSUdFZ1kyeGhjM01nWm5KdmJTQmhiaUJsYkdWdFpXNTBJR0poYzJWa0lHOXVJR0VnWTI5dVpHbDBhVzl1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJR1ZzWlcxbGJuUWdkR2hsSUdWc1pXMWxiblFnZEc4Z2MyVjBJSFJvWlNCamJHRnpjeUJ2Ymx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdZMnhoYzNOT1lXMWxJSFJvWlNCRFUxTWdZMnhoYzNOT1lXMWxYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdZbTl2YkNCamIyNWthWFJwYjI0Z2RHOGdkMmhsZEdobGNpQjBieUJoWkdRZ2IzSWdjbVZ0YjNabElIUm9aU0JqYkdGemMxeHVJQ0FnS2lCQWNtVjBkWEp1SUh0RVQwMUZiR1Z0Wlc1MGZTQjBhR1VnWld4bGJXVnVkQ0J3WVhOelpXUWdhVzVjYmlBZ0lDb3ZYRzRnSUdOdmJtUnBkR2x2YmtOc1lYTnpPaUJtZFc1amRHbHZiaWhsYkdWdFpXNTBMQ0JqYkdGemMwNWhiV1VzSUdKdmIyd3BJSHRjYmlBZ0lDQnlaWFIxY200Z0tHSnZiMndnUHlCRFUxTkRiM0psTG1Ga1pFTnNZWE56SURvZ1ExTlRRMjl5WlM1eVpXMXZkbVZEYkdGemN5a29aV3hsYldWdWRDd2dZMnhoYzNOT1lXMWxLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZHVnpkSE1nZDJobGRHaGxjaUIwYUdVZ1pXeGxiV1Z1ZENCb1lYTWdkR2hsSUdOc1lYTnpJSE53WldOcFptbGxaQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0RVQwMU9iMlJsZkVSUFRWZHBibVJ2ZDMwZ1pXeGxiV1Z1ZENCMGFHVWdaV3hsYldWdWRDQjBieUJ6WlhRZ2RHaGxJR05zWVhOeklHOXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCamJHRnpjMDVoYldVZ2RHaGxJRU5UVXlCamJHRnpjMDVoYldWY2JpQWdJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnZEhKMVpTQnBaaUIwYUdVZ1pXeGxiV1Z1ZENCb1lYTWdkR2hsSUdOc1lYTnpMQ0JtWVd4elpTQnBaaUJ1YjNSY2JpQWdJQ292WEc0Z0lHaGhjME5zWVhOek9pQm1kVzVqZEdsdmJpaGxiR1Z0Wlc1MExDQmpiR0Z6YzA1aGJXVXBJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lTOWNYSE12TG5SbGMzUW9ZMnhoYzNOT1lXMWxLU3hjYmlBZ0lDQWdJQ2REVTFNdWFHRnpRMnhoYzNNZ2RHRnJaWE1nYjI1c2VTQmhJSE5wYm1kc1pTQmpiR0Z6Y3lCdVlXMWxMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0NFdlhGeHpMeTUwWlhOMEtHTnNZWE56VG1GdFpTa3BLVHRjYmlBZ0lDQnBaaUFvWld4bGJXVnVkQzVqYkdGemMweHBjM1FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUFoSVdOc1lYTnpUbUZ0WlNBbUppQmxiR1Z0Wlc1MExtTnNZWE56VEdsemRDNWpiMjUwWVdsdWN5aGpiR0Z6YzA1aGJXVXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnS0NjZ0p5QXJJR1ZzWlcxbGJuUXVZMnhoYzNOT1lXMWxJQ3NnSnlBbktTNXBibVJsZUU5bUtDY2dKeUFySUdOc1lYTnpUbUZ0WlNBcklDY2dKeWtnUGlBdE1UdGNiaUFnZlZ4dVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUVOVFUwTnZjbVU3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQ1NTUHJvcGVydHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG52YXIgaXNVbml0bGVzc051bWJlciA9IHtcbiAgYm94RmxleDogdHJ1ZSxcbiAgYm94RmxleEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmb250V2VpZ2h0OiB0cnVlLFxuICBsaW5lQ2xhbXA6IHRydWUsXG4gIGxpbmVIZWlnaHQ6IHRydWUsXG4gIG9wYWNpdHk6IHRydWUsXG4gIG9yZGVyOiB0cnVlLFxuICBvcnBoYW5zOiB0cnVlLFxuICB3aWRvd3M6IHRydWUsXG4gIHpJbmRleDogdHJ1ZSxcbiAgem9vbTogdHJ1ZSxcblxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLFxuICBzdHJva2VPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VXaWR0aDogdHJ1ZVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IHZlbmRvci1zcGVjaWZpYyBwcmVmaXgsIGVnOiBXZWJraXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgc3R5bGUgbmFtZSwgZWc6IHRyYW5zaXRpb25EdXJhdGlvblxuICogQHJldHVybiB7c3RyaW5nfSBzdHlsZSBuYW1lIHByZWZpeGVkIHdpdGggYHByZWZpeGAsIHByb3Blcmx5IGNhbWVsQ2FzZWQsIGVnOlxuICogV2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHByZWZpeEtleShwcmVmaXgsIGtleSkge1xuICByZXR1cm4gcHJlZml4ICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cmluZygxKTtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHN0eWxlIG5hbWVzIHRoYXQgbWF5IGNvbWUgcGFzc2VkIGluIHByZWZpeGVkIGJ5IGFkZGluZyBwZXJtdXRhdGlvbnNcbiAqIG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xudmFyIHByZWZpeGVzID0gWydXZWJraXQnLCAnbXMnLCAnTW96JywgJ08nXTtcblxuLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5PYmplY3Qua2V5cyhpc1VuaXRsZXNzTnVtYmVyKS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgcHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbihwcmVmaXgpIHtcbiAgICBpc1VuaXRsZXNzTnVtYmVyW3ByZWZpeEtleShwcmVmaXgsIHByb3ApXSA9IGlzVW5pdGxlc3NOdW1iZXJbcHJvcF07XG4gIH0pO1xufSk7XG5cbi8qKlxuICogTW9zdCBzdHlsZSBwcm9wZXJ0aWVzIGNhbiBiZSB1bnNldCBieSBkb2luZyAuc3R5bGVbcHJvcF0gPSAnJyBidXQgSUU4XG4gKiBkb2Vzbid0IGxpa2UgZG9pbmcgdGhhdCB3aXRoIHNob3J0aGFuZCBwcm9wZXJ0aWVzIHNvIGZvciB0aGUgcHJvcGVydGllcyB0aGF0XG4gKiBJRTggYnJlYWtzIG9uLCB3aGljaCBhcmUgbGlzdGVkIGhlcmUsIHdlIGluc3RlYWQgdW5zZXQgZWFjaCBvZiB0aGVcbiAqIGluZGl2aWR1YWwgcHJvcGVydGllcy4gU2VlIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzg1LlxuICogVGhlIDQtdmFsdWUgJ2Nsb2NrJyBwcm9wZXJ0aWVzIGxpa2UgbWFyZ2luLCBwYWRkaW5nLCBib3JkZXItd2lkdGggc2VlbSB0b1xuICogYmVoYXZlIHdpdGhvdXQgYW55IHByb2JsZW1zLiBDdXJpb3VzbHksIGxpc3Qtc3R5bGUgd29ya3MgdG9vIHdpdGhvdXQgYW55XG4gKiBzcGVjaWFsIHByb2RkaW5nLlxuICovXG52YXIgc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNpb25zID0ge1xuICBiYWNrZ3JvdW5kOiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiB0cnVlLFxuICAgIGJhY2tncm91bmRQb3NpdGlvbjogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kUmVwZWF0OiB0cnVlLFxuICAgIGJhY2tncm91bmRDb2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXI6IHtcbiAgICBib3JkZXJXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJDb2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICBib3JkZXJCb3R0b21XaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJCb3R0b21TdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJCb3R0b21Db2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXJMZWZ0OiB7XG4gICAgYm9yZGVyTGVmdFdpZHRoOiB0cnVlLFxuICAgIGJvcmRlckxlZnRTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyUmlnaHQ6IHtcbiAgICBib3JkZXJSaWdodFdpZHRoOiB0cnVlLFxuICAgIGJvcmRlclJpZ2h0U3R5bGU6IHRydWUsXG4gICAgYm9yZGVyUmlnaHRDb2xvcjogdHJ1ZVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICBib3JkZXJUb3BXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJUb3BTdHlsZTogdHJ1ZSxcbiAgICBib3JkZXJUb3BDb2xvcjogdHJ1ZVxuICB9LFxuICBmb250OiB7XG4gICAgZm9udFN0eWxlOiB0cnVlLFxuICAgIGZvbnRWYXJpYW50OiB0cnVlLFxuICAgIGZvbnRXZWlnaHQ6IHRydWUsXG4gICAgZm9udFNpemU6IHRydWUsXG4gICAgbGluZUhlaWdodDogdHJ1ZSxcbiAgICBmb250RmFtaWx5OiB0cnVlXG4gIH1cbn07XG5cbnZhciBDU1NQcm9wZXJ0eSA9IHtcbiAgaXNVbml0bGVzc051bWJlcjogaXNVbml0bGVzc051bWJlcixcbiAgc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNpb25zOiBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ1NTUHJvcGVydHk7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIENTU1Byb3BlcnR5T3BlcmF0aW9uc1xuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBDU1NQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0NTU1Byb3BlcnR5XCIpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBjYW1lbGl6ZVN0eWxlTmFtZSA9IHJlcXVpcmUoXCIuL2NhbWVsaXplU3R5bGVOYW1lXCIpO1xudmFyIGRhbmdlcm91c1N0eWxlVmFsdWUgPSByZXF1aXJlKFwiLi9kYW5nZXJvdXNTdHlsZVZhbHVlXCIpO1xudmFyIGh5cGhlbmF0ZVN0eWxlTmFtZSA9IHJlcXVpcmUoXCIuL2h5cGhlbmF0ZVN0eWxlTmFtZVwiKTtcbnZhciBtZW1vaXplU3RyaW5nT25seSA9IHJlcXVpcmUoXCIuL21lbW9pemVTdHJpbmdPbmx5XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IG1lbW9pemVTdHJpbmdPbmx5KGZ1bmN0aW9uKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaHlwaGVuYXRlU3R5bGVOYW1lKHN0eWxlTmFtZSk7XG59KTtcblxudmFyIHN0eWxlRmxvYXRBY2Nlc3NvciA9ICdjc3NGbG9hdCc7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIC8vIElFOCBvbmx5IHN1cHBvcnRzIGFjY2Vzc2luZyBjc3NGbG9hdCAoc3RhbmRhcmQpIGFzIHN0eWxlRmxvYXRcbiAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jc3NGbG9hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3R5bGVGbG9hdEFjY2Vzc29yID0gJ3N0eWxlRmxvYXQnO1xuICB9XG59XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuXG4gIC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG5cbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG5cbiAgdmFyIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIGZhbHNlLFxuICAgICAgJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JyxcbiAgICAgIG5hbWUsXG4gICAgICBjYW1lbGl6ZVN0eWxlTmFtZShuYW1lKVxuICAgICkgOiBudWxsKTtcbiAgfTtcblxuICB2YXIgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIGZhbHNlLFxuICAgICAgJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsXG4gICAgICBuYW1lLFxuICAgICAgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSlcbiAgICApIDogbnVsbCk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbiA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgZmFsc2UsXG4gICAgICAnU3R5bGUgcHJvcGVydHkgdmFsdWVzIHNob3VsZG5cXCd0IGNvbnRhaW4gYSBzZW1pY29sb24uICcgK1xuICAgICAgJ1RyeSBcIiVzOiAlc1wiIGluc3RlYWQuJyxcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZS5yZXBsYWNlKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiwgJycpXG4gICAgKSA6IG51bGwpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqL1xuICB2YXIgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChuYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbihuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBDU1MgcHJvcGVydGllcy5cbiAqL1xudmFyIENTU1Byb3BlcnR5T3BlcmF0aW9ucyA9IHtcblxuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1hcHBpbmcgb2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdXNlIGFzIGlubGluZSBzdHlsZXM6XG4gICAqXG4gICAqICAgPiBjcmVhdGVNYXJrdXBGb3JTdHlsZXMoe3dpZHRoOiAnMjAwcHgnLCBoZWlnaHQ6IDB9KVxuICAgKiAgIFwid2lkdGg6MjAwcHg7aGVpZ2h0OjA7XCJcbiAgICpcbiAgICogVW5kZWZpbmVkIHZhbHVlcyBhcmUgaWdub3JlZCBzbyB0aGF0IGRlY2xhcmF0aXZlIHByb2dyYW1taW5nIGlzIGVhc2llci5cbiAgICogVGhlIHJlc3VsdCBzaG91bGQgYmUgSFRNTC1lc2NhcGVkIGJlZm9yZSBpbnNlcnRpb24gaW50byB0aGUgRE9NLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gICAqIEByZXR1cm4gez9zdHJpbmd9XG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcykge1xuICAgIHZhciBzZXJpYWxpemVkID0gJyc7XG4gICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIHdhcm5WYWxpZFN0eWxlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3R5bGVWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gcHJvY2Vzc1N0eWxlTmFtZShzdHlsZU5hbWUpICsgJzonO1xuICAgICAgICBzZXJpYWxpemVkICs9IGRhbmdlcm91c1N0eWxlVmFsdWUoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKSArICc7JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICAgKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAgICovXG4gIHNldFZhbHVlRm9yU3R5bGVzOiBmdW5jdGlvbihub2RlLCBzdHlsZXMpIHtcbiAgICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIHdhcm5WYWxpZFN0eWxlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0pO1xuICAgICAgfVxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0pO1xuICAgICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgICBzdHlsZU5hbWUgPSBzdHlsZUZsb2F0QWNjZXNzb3I7XG4gICAgICB9XG4gICAgICBpZiAoc3R5bGVWYWx1ZSkge1xuICAgICAgICBzdHlsZVtzdHlsZU5hbWVdID0gc3R5bGVWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBleHBhbnNpb24gPSBDU1NQcm9wZXJ0eS5zaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnNbc3R5bGVOYW1lXTtcbiAgICAgICAgaWYgKGV4cGFuc2lvbikge1xuICAgICAgICAgIC8vIFNob3J0aGFuZCBwcm9wZXJ0eSB0aGF0IElFOCB3b24ndCBsaWtlIHVuc2V0dGluZywgc28gdW5zZXQgZWFjaFxuICAgICAgICAgIC8vIGNvbXBvbmVudCB0byBwbGFjYXRlIGl0XG4gICAgICAgICAgZm9yICh2YXIgaW5kaXZpZHVhbFN0eWxlTmFtZSBpbiBleHBhbnNpb24pIHtcbiAgICAgICAgICAgIHN0eWxlW2luZGl2aWR1YWxTdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENTU1Byb3BlcnR5T3BlcmF0aW9ucztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1ExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpYRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUVOVFUxQnliM0JsY25SNUlEMGdjbVZ4ZFdseVpTaGNJaTR2UTFOVFVISnZjR1Z5ZEhsY0lpazdYRzUyWVhJZ1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5RmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRGd2lLVHRjYmx4dWRtRnlJR05oYldWc2FYcGxVM1I1YkdWT1lXMWxJRDBnY21WeGRXbHlaU2hjSWk0dlkyRnRaV3hwZW1WVGRIbHNaVTVoYldWY0lpazdYRzUyWVhJZ1pHRnVaMlZ5YjNWelUzUjViR1ZXWVd4MVpTQTlJSEpsY1hWcGNtVW9YQ0l1TDJSaGJtZGxjbTkxYzFOMGVXeGxWbUZzZFdWY0lpazdYRzUyWVhJZ2FIbHdhR1Z1WVhSbFUzUjViR1ZPWVcxbElEMGdjbVZ4ZFdseVpTaGNJaTR2YUhsd2FHVnVZWFJsVTNSNWJHVk9ZVzFsWENJcE8xeHVkbUZ5SUcxbGJXOXBlbVZUZEhKcGJtZFBibXg1SUQwZ2NtVnhkV2x5WlNoY0lpNHZiV1Z0YjJsNlpWTjBjbWx1WjA5dWJIbGNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiblpoY2lCd2NtOWpaWE56VTNSNWJHVk9ZVzFsSUQwZ2JXVnRiMmw2WlZOMGNtbHVaMDl1Ykhrb1puVnVZM1JwYjI0b2MzUjViR1ZPWVcxbEtTQjdYRzRnSUhKbGRIVnliaUJvZVhCb1pXNWhkR1ZUZEhsc1pVNWhiV1VvYzNSNWJHVk9ZVzFsS1R0Y2JuMHBPMXh1WEc1MllYSWdjM1I1YkdWR2JHOWhkRUZqWTJWemMyOXlJRDBnSjJOemMwWnNiMkYwSnp0Y2JtbG1JQ2hGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEM1allXNVZjMlZFVDAwcElIdGNiaUFnTHk4Z1NVVTRJRzl1YkhrZ2MzVndjRzl5ZEhNZ1lXTmpaWE56YVc1bklHTnpjMFpzYjJGMElDaHpkR0Z1WkdGeVpDa2dZWE1nYzNSNWJHVkdiRzloZEZ4dUlDQnBaaUFvWkc5amRXMWxiblF1Wkc5amRXMWxiblJGYkdWdFpXNTBMbk4wZVd4bExtTnpjMFpzYjJGMElEMDlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0J6ZEhsc1pVWnNiMkYwUVdOalpYTnpiM0lnUFNBbmMzUjViR1ZHYkc5aGRDYzdYRzRnSUgxY2JuMWNibHh1YVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQXZMeUFuYlhOVWNtRnVjMlp2Y20wbklHbHpJR052Y25KbFkzUXNJR0oxZENCMGFHVWdiM1JvWlhJZ2NISmxabWw0WlhNZ2MyaHZkV3hrSUdKbElHTmhjR2wwWVd4cGVtVmtYRzRnSUhaaGNpQmlZV1JXWlc1a2IzSmxaRk4wZVd4bFRtRnRaVkJoZEhSbGNtNGdQU0F2WGlnL09uZGxZbXRwZEh4dGIzcDhieWxiUVMxYVhTODdYRzVjYmlBZ0x5OGdjM1I1YkdVZ2RtRnNkV1Z6SUhOb2IzVnNaRzRuZENCamIyNTBZV2x1SUdFZ2MyVnRhV052Ykc5dVhHNGdJSFpoY2lCaVlXUlRkSGxzWlZaaGJIVmxWMmwwYUZObGJXbGpiMnh2YmxCaGRIUmxjbTRnUFNBdk8xeGNjeW9rTHp0Y2JseHVJQ0IyWVhJZ2QyRnlibVZrVTNSNWJHVk9ZVzFsY3lBOUlIdDlPMXh1SUNCMllYSWdkMkZ5Ym1Wa1UzUjViR1ZXWVd4MVpYTWdQU0I3ZlR0Y2JseHVJQ0IyWVhJZ2QyRnlia2g1Y0dobGJtRjBaV1JUZEhsc1pVNWhiV1VnUFNCbWRXNWpkR2x2YmlodVlXMWxLU0I3WEc0Z0lDQWdhV1lnS0hkaGNtNWxaRk4wZVd4bFRtRnRaWE11YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrZ0ppWWdkMkZ5Ym1Wa1UzUjViR1ZPWVcxbGMxdHVZVzFsWFNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmx4dUlDQWdJSGRoY201bFpGTjBlV3hsVG1GdFpYTmJibUZ0WlYwZ1BTQjBjblZsTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FuVlc1emRYQndiM0owWldRZ2MzUjViR1VnY0hKdmNHVnlkSGtnSlhNdUlFUnBaQ0I1YjNVZ2JXVmhiaUFsY3o4bkxGeHVJQ0FnSUNBZ2JtRnRaU3hjYmlBZ0lDQWdJR05oYldWc2FYcGxVM1I1YkdWT1lXMWxLRzVoYldVcFhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQjlPMXh1WEc0Z0lIWmhjaUIzWVhKdVFtRmtWbVZ1Wkc5eVpXUlRkSGxzWlU1aGJXVWdQU0JtZFc1amRHbHZiaWh1WVcxbEtTQjdYRzRnSUNBZ2FXWWdLSGRoY201bFpGTjBlV3hsVG1GdFpYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2tnSmlZZ2QyRnlibVZrVTNSNWJHVk9ZVzFsYzF0dVlXMWxYU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIZGhjbTVsWkZOMGVXeGxUbUZ0WlhOYmJtRnRaVjBnUFNCMGNuVmxPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQW5WVzV6ZFhCd2IzSjBaV1FnZG1WdVpHOXlMWEJ5WldacGVHVmtJSE4wZVd4bElIQnliM0JsY25SNUlDVnpMaUJFYVdRZ2VXOTFJRzFsWVc0Z0pYTS9KeXhjYmlBZ0lDQWdJRzVoYldVc1hHNGdJQ0FnSUNCdVlXMWxMbU5vWVhKQmRDZ3dLUzUwYjFWd2NHVnlRMkZ6WlNncElDc2dibUZ0WlM1emJHbGpaU2d4S1Z4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ2ZUdGNibHh1SUNCMllYSWdkMkZ5YmxOMGVXeGxWbUZzZFdWWGFYUm9VMlZ0YVdOdmJHOXVJRDBnWm5WdVkzUnBiMjRvYm1GdFpTd2dkbUZzZFdVcElIdGNiaUFnSUNCcFppQW9kMkZ5Ym1Wa1UzUjViR1ZXWVd4MVpYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2RtRnNkV1VwSUNZbUlIZGhjbTVsWkZOMGVXeGxWbUZzZFdWelczWmhiSFZsWFNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmx4dUlDQWdJSGRoY201bFpGTjBlV3hsVm1Gc2RXVnpXM1poYkhWbFhTQTlJSFJ5ZFdVN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNkVGRIbHNaU0J3Y205d1pYSjBlU0IyWVd4MVpYTWdjMmh2ZFd4a2JseGNKM1FnWTI5dWRHRnBiaUJoSUhObGJXbGpiMnh2Ymk0Z0p5QXJYRzRnSUNBZ0lDQW5WSEo1SUZ3aUpYTTZJQ1Z6WENJZ2FXNXpkR1ZoWkM0bkxGeHVJQ0FnSUNBZ2JtRnRaU3hjYmlBZ0lDQWdJSFpoYkhWbExuSmxjR3hoWTJVb1ltRmtVM1I1YkdWV1lXeDFaVmRwZEdoVFpXMXBZMjlzYjI1UVlYUjBaWEp1TENBbkp5bGNiaUFnSUNBcElEb2diblZzYkNrN1hHNGdJSDA3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnVZVzFsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdLbjBnZG1Gc2RXVmNiaUFnSUNvdlhHNGdJSFpoY2lCM1lYSnVWbUZzYVdSVGRIbHNaU0E5SUdaMWJtTjBhVzl1S0c1aGJXVXNJSFpoYkhWbEtTQjdYRzRnSUNBZ2FXWWdLRzVoYldVdWFXNWtaWGhQWmlnbkxTY3BJRDRnTFRFcElIdGNiaUFnSUNBZ0lIZGhjbTVJZVhCb1pXNWhkR1ZrVTNSNWJHVk9ZVzFsS0c1aGJXVXBPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9ZbUZrVm1WdVpHOXlaV1JUZEhsc1pVNWhiV1ZRWVhSMFpYSnVMblJsYzNRb2JtRnRaU2twSUh0Y2JpQWdJQ0FnSUhkaGNtNUNZV1JXWlc1a2IzSmxaRk4wZVd4bFRtRnRaU2h1WVcxbEtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tHSmhaRk4wZVd4bFZtRnNkV1ZYYVhSb1UyVnRhV052Ykc5dVVHRjBkR1Z5Ymk1MFpYTjBLSFpoYkhWbEtTa2dlMXh1SUNBZ0lDQWdkMkZ5YmxOMGVXeGxWbUZzZFdWWGFYUm9VMlZ0YVdOdmJHOXVLRzVoYldVc0lIWmhiSFZsS1R0Y2JpQWdJQ0I5WEc0Z0lIMDdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1QzQmxjbUYwYVc5dWN5Qm1iM0lnWkdWaGJHbHVaeUIzYVhSb0lFTlRVeUJ3Y205d1pYSjBhV1Z6TGx4dUlDb3ZYRzUyWVhJZ1ExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpJRDBnZTF4dVhHNGdJQzhxS2x4dUlDQWdLaUJUWlhKcFlXeHBlbVZ6SUdFZ2JXRndjR2x1WnlCdlppQnpkSGxzWlNCd2NtOXdaWEowYVdWeklHWnZjaUIxYzJVZ1lYTWdhVzVzYVc1bElITjBlV3hsY3pwY2JpQWdJQ3BjYmlBZ0lDb2dJQ0ErSUdOeVpXRjBaVTFoY210MWNFWnZjbE4wZVd4bGN5aDdkMmxrZEdnNklDY3lNREJ3ZUNjc0lHaGxhV2RvZERvZ01IMHBYRzRnSUNBcUlDQWdYQ0ozYVdSMGFEb3lNREJ3ZUR0b1pXbG5hSFE2TUR0Y0lseHVJQ0FnS2x4dUlDQWdLaUJWYm1SbFptbHVaV1FnZG1Gc2RXVnpJR0Z5WlNCcFoyNXZjbVZrSUhOdklIUm9ZWFFnWkdWamJHRnlZWFJwZG1VZ2NISnZaM0poYlcxcGJtY2dhWE1nWldGemFXVnlMbHh1SUNBZ0tpQlVhR1VnY21WemRXeDBJSE5vYjNWc1pDQmlaU0JJVkUxTUxXVnpZMkZ3WldRZ1ltVm1iM0psSUdsdWMyVnlkR2x2YmlCcGJuUnZJSFJvWlNCRVQwMHVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J6ZEhsc1pYTmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1AzTjBjbWx1WjMxY2JpQWdJQ292WEc0Z0lHTnlaV0YwWlUxaGNtdDFjRVp2Y2xOMGVXeGxjem9nWm5WdVkzUnBiMjRvYzNSNWJHVnpLU0I3WEc0Z0lDQWdkbUZ5SUhObGNtbGhiR2w2WldRZ1BTQW5KenRjYmlBZ0lDQm1iM0lnS0haaGNpQnpkSGxzWlU1aGJXVWdhVzRnYzNSNWJHVnpLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lYTjBlV3hsY3k1b1lYTlBkMjVRY205d1pYSjBlU2h6ZEhsc1pVNWhiV1VwS1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RtRnlJSE4wZVd4bFZtRnNkV1VnUFNCemRIbHNaWE5iYzNSNWJHVk9ZVzFsWFR0Y2JpQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ2QyRnlibFpoYkdsa1UzUjViR1VvYzNSNWJHVk9ZVzFsTENCemRIbHNaVlpoYkhWbEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2h6ZEhsc1pWWmhiSFZsSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUNBZ2MyVnlhV0ZzYVhwbFpDQXJQU0J3Y205alpYTnpVM1I1YkdWT1lXMWxLSE4wZVd4bFRtRnRaU2tnS3lBbk9pYzdYRzRnSUNBZ0lDQWdJSE5sY21saGJHbDZaV1FnS3owZ1pHRnVaMlZ5YjNWelUzUjViR1ZXWVd4MVpTaHpkSGxzWlU1aGJXVXNJSE4wZVd4bFZtRnNkV1VwSUNzZ0p6c25PMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYzJWeWFXRnNhWHBsWkNCOGZDQnVkV3hzTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRaWFJ6SUhSb1pTQjJZV3gxWlNCbWIzSWdiWFZzZEdsd2JHVWdjM1I1YkdWeklHOXVJR0VnYm05a1pTNGdJRWxtSUdFZ2RtRnNkV1VnYVhNZ2MzQmxZMmxtYVdWa0lHRnpYRzRnSUNBcUlDY25JQ2hsYlhCMGVTQnpkSEpwYm1jcExDQjBhR1VnWTI5eWNtVnpjRzl1WkdsdVp5QnpkSGxzWlNCd2NtOXdaWEowZVNCM2FXeHNJR0psSUhWdWMyVjBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHNXZaR1ZjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlITjBlV3hsYzF4dUlDQWdLaTljYmlBZ2MyVjBWbUZzZFdWR2IzSlRkSGxzWlhNNklHWjFibU4wYVc5dUtHNXZaR1VzSUhOMGVXeGxjeWtnZTF4dUlDQWdJSFpoY2lCemRIbHNaU0E5SUc1dlpHVXVjM1I1YkdVN1hHNGdJQ0FnWm05eUlDaDJZWElnYzNSNWJHVk9ZVzFsSUdsdUlITjBlV3hsY3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0Z6ZEhsc1pYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2MzUjViR1ZPWVcxbEtTa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnZDJGeWJsWmhiR2xrVTNSNWJHVW9jM1I1YkdWT1lXMWxMQ0J6ZEhsc1pYTmJjM1I1YkdWT1lXMWxYU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0IyWVhJZ2MzUjViR1ZXWVd4MVpTQTlJR1JoYm1kbGNtOTFjMU4wZVd4bFZtRnNkV1VvYzNSNWJHVk9ZVzFsTENCemRIbHNaWE5iYzNSNWJHVk9ZVzFsWFNrN1hHNGdJQ0FnSUNCcFppQW9jM1I1YkdWT1lXMWxJRDA5UFNBblpteHZZWFFuS1NCN1hHNGdJQ0FnSUNBZ0lITjBlV3hsVG1GdFpTQTlJSE4wZVd4bFJteHZZWFJCWTJObGMzTnZjanRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoemRIbHNaVlpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJSE4wZVd4bFczTjBlV3hsVG1GdFpWMGdQU0J6ZEhsc1pWWmhiSFZsTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHVjRjR0Z1YzJsdmJpQTlJRU5UVTFCeWIzQmxjblI1TG5Ob2IzSjBhR0Z1WkZCeWIzQmxjblI1Ulhod1lXNXphVzl1YzF0emRIbHNaVTVoYldWZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvWlhod1lXNXphVzl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVTJodmNuUm9ZVzVrSUhCeWIzQmxjblI1SUhSb1lYUWdTVVU0SUhkdmJpZDBJR3hwYTJVZ2RXNXpaWFIwYVc1bkxDQnpieUIxYm5ObGRDQmxZV05vWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdZMjl0Y0c5dVpXNTBJSFJ2SUhCc1lXTmhkR1VnYVhSY2JpQWdJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnBibVJwZG1sa2RXRnNVM1I1YkdWT1lXMWxJR2x1SUdWNGNHRnVjMmx2YmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSNWJHVmJhVzVrYVhacFpIVmhiRk4wZVd4bFRtRnRaVjBnUFNBbkp6dGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2MzUjViR1ZiYzNSNWJHVk9ZVzFsWFNBOUlDY25PMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1ExTlRVSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgQ2FsbGJhY2tRdWV1ZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHBzZXVkby1ldmVudCBtb2R1bGUgdG8gaGVscCBrZWVwIHRyYWNrIG9mIGNvbXBvbmVudHMgd2FpdGluZyB0b1xuICogYmUgbm90aWZpZWQgd2hlbiB0aGVpciBET00gcmVwcmVzZW50YXRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHVzZS5cbiAqXG4gKiBUaGlzIGltcGxlbWVudHMgYFBvb2xlZENsYXNzYCwgc28geW91IHNob3VsZCBuZXZlciBuZWVkIHRvIGluc3RhbnRpYXRlIHRoaXMuXG4gKiBJbnN0ZWFkLCB1c2UgYENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKClgLlxuICpcbiAqIEBjbGFzcyBSZWFjdE1vdW50UmVhZHlcbiAqIEBpbXBsZW1lbnRzIFBvb2xlZENsYXNzXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gQ2FsbGJhY2tRdWV1ZSgpIHtcbiAgdGhpcy5fY2FsbGJhY2tzID0gbnVsbDtcbiAgdGhpcy5fY29udGV4dHMgPSBudWxsO1xufVxuXG5hc3NpZ24oQ2FsbGJhY2tRdWV1ZS5wcm90b3R5cGUsIHtcblxuICAvKipcbiAgICogRW5xdWV1ZXMgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gYG5vdGlmeUFsbGAgaXMgaW52b2tlZC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgSW52b2tlZCB3aGVuIGBub3RpZnlBbGxgIGlzIGludm9rZWQuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gY29udGV4dCBDb250ZXh0IHRvIGNhbGwgYGNhbGxiYWNrYCB3aXRoLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWU6IGZ1bmN0aW9uKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IFtdO1xuICAgIHRoaXMuX2NvbnRleHRzID0gdGhpcy5fY29udGV4dHMgfHwgW107XG4gICAgdGhpcy5fY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIHRoaXMuX2NvbnRleHRzLnB1c2goY29udGV4dCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEludm9rZXMgYWxsIGVucXVldWVkIGNhbGxiYWNrcyBhbmQgY2xlYXJzIHRoZSBxdWV1ZS4gVGhpcyBpcyBpbnZva2VkIGFmdGVyXG4gICAqIHRoZSBET00gcmVwcmVzZW50YXRpb24gb2YgYSBjb21wb25lbnQgaGFzIGJlZW4gY3JlYXRlZCBvciB1cGRhdGVkLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5vdGlmeUFsbDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcztcbiAgICB2YXIgY29udGV4dHMgPSB0aGlzLl9jb250ZXh0cztcbiAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBjYWxsYmFja3MubGVuZ3RoID09PSBjb250ZXh0cy5sZW5ndGgsXG4gICAgICAgICdNaXNtYXRjaGVkIGxpc3Qgb2YgY29udGV4dHMgaW4gY2FsbGJhY2sgcXVldWUnXG4gICAgICApIDogaW52YXJpYW50KGNhbGxiYWNrcy5sZW5ndGggPT09IGNvbnRleHRzLmxlbmd0aCkpO1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbnRleHRzID0gbnVsbDtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0uY2FsbChjb250ZXh0c1tpXSk7XG4gICAgICB9XG4gICAgICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICAgIGNvbnRleHRzLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGludGVybmFsIHF1ZXVlLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRleHRzID0gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogYFBvb2xlZENsYXNzYCBsb29rcyBmb3IgdGhpcy5cbiAgICovXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG59KTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKENhbGxiYWNrUXVldWUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbGxiYWNrUXVldWU7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZRMkZzYkdKaFkydFJkV1YxWlM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCRFlXeHNZbUZqYTFGMVpYVmxYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnVUc5dmJHVmtRMnhoYzNNZ1BTQnlaWEYxYVhKbEtGd2lMaTlRYjI5c1pXUkRiR0Z6YzF3aUtUdGNibHh1ZG1GeUlHRnpjMmxuYmlBOUlISmxjWFZwY21Vb1hDSXVMMDlpYW1WamRDNWhjM05wWjI1Y0lpazdYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzR2S2lwY2JpQXFJRUVnYzNCbFkybGhiR2w2WldRZ2NITmxkV1J2TFdWMlpXNTBJRzF2WkhWc1pTQjBieUJvWld4d0lHdGxaWEFnZEhKaFkyc2diMllnWTI5dGNHOXVaVzUwY3lCM1lXbDBhVzVuSUhSdlhHNGdLaUJpWlNCdWIzUnBabWxsWkNCM2FHVnVJSFJvWldseUlFUlBUU0J5WlhCeVpYTmxiblJoZEdsdmJuTWdZWEpsSUdGMllXbHNZV0pzWlNCbWIzSWdkWE5sTGx4dUlDcGNiaUFxSUZSb2FYTWdhVzF3YkdWdFpXNTBjeUJnVUc5dmJHVmtRMnhoYzNOZ0xDQnpieUI1YjNVZ2MyaHZkV3hrSUc1bGRtVnlJRzVsWldRZ2RHOGdhVzV6ZEdGdWRHbGhkR1VnZEdocGN5NWNiaUFxSUVsdWMzUmxZV1FzSUhWelpTQmdRMkZzYkdKaFkydFJkV1YxWlM1blpYUlFiMjlzWldRb0tXQXVYRzRnS2x4dUlDb2dRR05zWVhOeklGSmxZV04wVFc5MWJuUlNaV0ZrZVZ4dUlDb2dRR2x0Y0d4bGJXVnVkSE1nVUc5dmJHVmtRMnhoYzNOY2JpQXFJRUJwYm5SbGNtNWhiRnh1SUNvdlhHNW1kVzVqZEdsdmJpQkRZV3hzWW1GamExRjFaWFZsS0NrZ2UxeHVJQ0IwYUdsekxsOWpZV3hzWW1GamEzTWdQU0J1ZFd4c08xeHVJQ0IwYUdsekxsOWpiMjUwWlhoMGN5QTlJRzUxYkd3N1hHNTlYRzVjYm1GemMybG5iaWhEWVd4c1ltRmphMUYxWlhWbExuQnliM1J2ZEhsd1pTd2dlMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkZibkYxWlhWbGN5QmhJR05oYkd4aVlXTnJJSFJ2SUdKbElHbHVkbTlyWldRZ2QyaGxiaUJnYm05MGFXWjVRV3hzWUNCcGN5QnBiblp2YTJWa0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0JqWVd4c1ltRmpheUJKYm5admEyVmtJSGRvWlc0Z1lHNXZkR2xtZVVGc2JHQWdhWE1nYVc1MmIydGxaQzVjYmlBZ0lDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQmpiMjUwWlhoMElFTnZiblJsZUhRZ2RHOGdZMkZzYkNCZ1kyRnNiR0poWTJ0Z0lIZHBkR2d1WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWlc1eGRXVjFaVG9nWm5WdVkzUnBiMjRvWTJGc2JHSmhZMnNzSUdOdmJuUmxlSFFwSUh0Y2JpQWdJQ0IwYUdsekxsOWpZV3hzWW1GamEzTWdQU0IwYUdsekxsOWpZV3hzWW1GamEzTWdmSHdnVzEwN1hHNGdJQ0FnZEdocGN5NWZZMjl1ZEdWNGRITWdQU0IwYUdsekxsOWpiMjUwWlhoMGN5QjhmQ0JiWFR0Y2JpQWdJQ0IwYUdsekxsOWpZV3hzWW1GamEzTXVjSFZ6YUNoallXeHNZbUZqYXlrN1hHNGdJQ0FnZEdocGN5NWZZMjl1ZEdWNGRITXVjSFZ6YUNoamIyNTBaWGgwS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzUyYjJ0bGN5QmhiR3dnWlc1eGRXVjFaV1FnWTJGc2JHSmhZMnR6SUdGdVpDQmpiR1ZoY25NZ2RHaGxJSEYxWlhWbExpQlVhR2x6SUdseklHbHVkbTlyWldRZ1lXWjBaWEpjYmlBZ0lDb2dkR2hsSUVSUFRTQnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQmhJR052YlhCdmJtVnVkQ0JvWVhNZ1ltVmxiaUJqY21WaGRHVmtJRzl5SUhWd1pHRjBaV1F1WEc0Z0lDQXFYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdibTkwYVdaNVFXeHNPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0IyWVhJZ1kyRnNiR0poWTJ0eklEMGdkR2hwY3k1ZlkyRnNiR0poWTJ0ek8xeHVJQ0FnSUhaaGNpQmpiMjUwWlhoMGN5QTlJSFJvYVhNdVgyTnZiblJsZUhSek8xeHVJQ0FnSUdsbUlDaGpZV3hzWW1GamEzTXBJSHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJR05oYkd4aVlXTnJjeTVzWlc1bmRHZ2dQVDA5SUdOdmJuUmxlSFJ6TG14bGJtZDBhQ3hjYmlBZ0lDQWdJQ0FnSjAxcGMyMWhkR05vWldRZ2JHbHpkQ0J2WmlCamIyNTBaWGgwY3lCcGJpQmpZV3hzWW1GamF5QnhkV1YxWlNkY2JpQWdJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9ZMkZzYkdKaFkydHpMbXhsYm1kMGFDQTlQVDBnWTI5dWRHVjRkSE11YkdWdVozUm9LU2s3WEc0Z0lDQWdJQ0IwYUdsekxsOWpZV3hzWW1GamEzTWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ2RHaHBjeTVmWTI5dWRHVjRkSE1nUFNCdWRXeHNPMXh1SUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBc0lHd2dQU0JqWVd4c1ltRmphM011YkdWdVozUm9PeUJwSUR3Z2JEc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lHTmhiR3hpWVdOcmMxdHBYUzVqWVd4c0tHTnZiblJsZUhSelcybGRLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR05oYkd4aVlXTnJjeTVzWlc1bmRHZ2dQU0F3TzF4dUlDQWdJQ0FnWTI5dWRHVjRkSE11YkdWdVozUm9JRDBnTUR0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxjMlYwY3lCMGFHVWdhVzUwWlhKdVlXd2djWFZsZFdVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnY21WelpYUTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSFJvYVhNdVgyTmhiR3hpWVdOcmN5QTlJRzUxYkd3N1hHNGdJQ0FnZEdocGN5NWZZMjl1ZEdWNGRITWdQU0J1ZFd4c08xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJnVUc5dmJHVmtRMnhoYzNOZ0lHeHZiMnR6SUdadmNpQjBhR2x6TGx4dUlDQWdLaTljYmlBZ1pHVnpkSEoxWTNSdmNqb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1eVpYTmxkQ2dwTzF4dUlDQjlYRzVjYm4wcE8xeHVYRzVRYjI5c1pXUkRiR0Z6Y3k1aFpHUlFiMjlzYVc1blZHOG9RMkZzYkdKaFkydFJkV1YxWlNrN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdRMkZzYkdKaFkydFJkV1YxWlR0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIENoYW5nZUV2ZW50UGx1Z2luXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luSHViXCIpO1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKFwiLi9FdmVudFByb3BhZ2F0b3JzXCIpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG5cbnZhciBpc0V2ZW50U3VwcG9ydGVkID0gcmVxdWlyZShcIi4vaXNFdmVudFN1cHBvcnRlZFwiKTtcbnZhciBpc1RleHRJbnB1dEVsZW1lbnQgPSByZXF1aXJlKFwiLi9pc1RleHRJbnB1dEVsZW1lbnRcIik7XG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcblxudmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzO1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgY2hhbmdlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNoYW5nZTogbnVsbH0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNoYW5nZUNhcHR1cmU6IG51bGx9KVxuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEJsdXIsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcENoYW5nZSxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ2xpY2ssXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEZvY3VzLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BJbnB1dCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5RG93bixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wS2V5VXAsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcFNlbGVjdGlvbkNoYW5nZVxuICAgIF1cbiAgfVxufTtcblxuLyoqXG4gKiBGb3IgSUUgc2hpbXNcbiAqL1xudmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJRCA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudFZhbHVlID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50VmFsdWVQcm9wID0gbnVsbDtcblxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNoYW5nZWAgZXZlbnRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkVXNlQ2hhbmdlRXZlbnQoZWxlbSkge1xuICByZXR1cm4gKFxuICAgIGVsZW0ubm9kZU5hbWUgPT09ICdTRUxFQ1QnIHx8XG4gICAgKGVsZW0ubm9kZU5hbWUgPT09ICdJTlBVVCcgJiYgZWxlbS50eXBlID09PSAnZmlsZScpXG4gICk7XG59XG5cbnZhciBkb2VzQ2hhbmdlRXZlbnRCdWJibGUgPSBmYWxzZTtcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gU2VlIGBoYW5kbGVDaGFuZ2VgIGNvbW1lbnQgYmVsb3dcbiAgZG9lc0NoYW5nZUV2ZW50QnViYmxlID0gaXNFdmVudFN1cHBvcnRlZCgnY2hhbmdlJykgJiYgKFxuICAgICghKCdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA4KVxuICApO1xufVxuXG5mdW5jdGlvbiBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBldmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICBldmVudFR5cGVzLmNoYW5nZSxcbiAgICBhY3RpdmVFbGVtZW50SUQsXG4gICAgbmF0aXZlRXZlbnRcbiAgKTtcbiAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcblxuICAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cbiAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKHJ1bkV2ZW50SW5CYXRjaCwgZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBydW5FdmVudEluQmF0Y2goZXZlbnQpIHtcbiAgRXZlbnRQbHVnaW5IdWIuZW5xdWV1ZUV2ZW50cyhldmVudCk7XG4gIEV2ZW50UGx1Z2luSHViLnByb2Nlc3NFdmVudFF1ZXVlKCk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0V2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCh0YXJnZXQsIHRhcmdldElEKSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFjdGl2ZUVsZW1lbnRJRCA9IHRhcmdldElEO1xuICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50KCdvbmNoYW5nZScsIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFjdGl2ZUVsZW1lbnQuZGV0YWNoRXZlbnQoJ29uY2hhbmdlJywgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudCk7XG4gIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50SUQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJREZvckNoYW5nZUV2ZW50KFxuICAgIHRvcExldmVsVHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldCxcbiAgICB0b3BMZXZlbFRhcmdldElEKSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wQ2hhbmdlKSB7XG4gICAgcmV0dXJuIHRvcExldmVsVGFyZ2V0SUQ7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvckNoYW5nZUV2ZW50SUU4KFxuICAgIHRvcExldmVsVHlwZSxcbiAgICB0b3BMZXZlbFRhcmdldCxcbiAgICB0b3BMZXZlbFRhcmdldElEKSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wRm9jdXMpIHtcbiAgICAvLyBzdG9wV2F0Y2hpbmcoKSBzaG91bGQgYmUgYSBub29wIGhlcmUgYnV0IHdlIGNhbGwgaXQganVzdCBpbiBjYXNlIHdlXG4gICAgLy8gbWlzc2VkIGEgYmx1ciBldmVudCBzb21laG93LlxuICAgIHN0b3BXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KCk7XG4gICAgc3RhcnRXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KHRvcExldmVsVGFyZ2V0LCB0b3BMZXZlbFRhcmdldElEKTtcbiAgfSBlbHNlIGlmICh0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wQmx1cikge1xuICAgIHN0b3BXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KCk7XG4gIH1cbn1cblxuXG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgaW5wdXRgIGV2ZW50XG4gKi9cbnZhciBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBmYWxzZTtcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gSUU5IGNsYWltcyB0byBzdXBwb3J0IHRoZSBpbnB1dCBldmVudCBidXQgZmFpbHMgdG8gdHJpZ2dlciBpdCB3aGVuXG4gIC8vIGRlbGV0aW5nIHRleHQsIHNvIHdlIGlnbm9yZSBpdHMgaW5wdXQgZXZlbnRzXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKFxuICAgICghKCdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA5KVxuICApO1xufVxuXG4vKipcbiAqIChGb3Igb2xkIElFLikgUmVwbGFjZW1lbnQgZ2V0dGVyL3NldHRlciBmb3IgdGhlIGB2YWx1ZWAgcHJvcGVydHkgdGhhdCBnZXRzXG4gKiBzZXQgb24gdGhlIGFjdGl2ZSBlbGVtZW50LlxuICovXG52YXIgbmV3VmFsdWVQcm9wID0gIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYWN0aXZlRWxlbWVudFZhbHVlUHJvcC5nZXQuY2FsbCh0aGlzKTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAvLyBDYXN0IHRvIGEgc3RyaW5nIHNvIHdlIGNhbiBkbyBlcXVhbGl0eSBjaGVja3MuXG4gICAgYWN0aXZlRWxlbWVudFZhbHVlID0gJycgKyB2YWw7XG4gICAgYWN0aXZlRWxlbWVudFZhbHVlUHJvcC5zZXQuY2FsbCh0aGlzLCB2YWwpO1xuICB9XG59O1xuXG4vKipcbiAqIChGb3Igb2xkIElFLikgU3RhcnRzIHRyYWNraW5nIHByb3BlcnR5Y2hhbmdlIGV2ZW50cyBvbiB0aGUgcGFzc2VkLWluIGVsZW1lbnRcbiAqIGFuZCBvdmVycmlkZSB0aGUgdmFsdWUgcHJvcGVydHkgc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggdXNlciBldmVudHMgZnJvbVxuICogdmFsdWUgY2hhbmdlcyBpbiBKUy5cbiAqL1xuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SUQpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudElEID0gdGFyZ2V0SUQ7XG4gIGFjdGl2ZUVsZW1lbnRWYWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgYWN0aXZlRWxlbWVudFZhbHVlUHJvcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgdGFyZ2V0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcbiAgICAndmFsdWUnXG4gICk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFjdGl2ZUVsZW1lbnQsICd2YWx1ZScsIG5ld1ZhbHVlUHJvcCk7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG59XG5cbi8qKlxuICogKEZvciBvbGQgSUUuKSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudGx5LXRyYWNrZWQgZWxlbWVudCxcbiAqIGlmIGFueSBleGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBkZWxldGUgcmVzdG9yZXMgdGhlIG9yaWdpbmFsIHByb3BlcnR5IGRlZmluaXRpb25cbiAgZGVsZXRlIGFjdGl2ZUVsZW1lbnQudmFsdWU7XG4gIGFjdGl2ZUVsZW1lbnQuZGV0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG5cbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJRCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRWYWx1ZSA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRWYWx1ZVByb3AgPSBudWxsO1xufVxuXG4vKipcbiAqIChGb3Igb2xkIElFLikgSGFuZGxlcyBhIHByb3BlcnR5Y2hhbmdlIGV2ZW50LCBzZW5kaW5nIGEgYGNoYW5nZWAgZXZlbnQgaWZcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIGVsZW1lbnQgaGFzIGNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHZhbHVlID0gbmF0aXZlRXZlbnQuc3JjRWxlbWVudC52YWx1ZTtcbiAgaWYgKHZhbHVlID09PSBhY3RpdmVFbGVtZW50VmFsdWUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYWN0aXZlRWxlbWVudFZhbHVlID0gdmFsdWU7XG5cbiAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG59XG5cbi8qKlxuICogSWYgYSBgY2hhbmdlYCBldmVudCBzaG91bGQgYmUgZmlyZWQsIHJldHVybnMgdGhlIHRhcmdldCdzIElELlxuICovXG5mdW5jdGlvbiBnZXRUYXJnZXRJREZvcklucHV0RXZlbnQoXG4gICAgdG9wTGV2ZWxUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BJbnB1dCkge1xuICAgIC8vIEluIG1vZGVybiBicm93c2VycyAoaS5lLiwgbm90IElFOCBvciBJRTkpLCB0aGUgaW5wdXQgZXZlbnQgaXMgZXhhY3RseVxuICAgIC8vIHdoYXQgd2Ugd2FudCBzbyBmYWxsIHRocm91Z2ggaGVyZSBhbmQgdHJpZ2dlciBhbiBhYnN0cmFjdCBldmVudFxuICAgIHJldHVybiB0b3BMZXZlbFRhcmdldElEO1xuICB9XG59XG5cbi8vIEZvciBJRTggYW5kIElFOS5cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRJRShcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEZvY3VzKSB7XG4gICAgLy8gSW4gSUU4LCB3ZSBjYW4gY2FwdHVyZSBhbG1vc3QgYWxsIC52YWx1ZSBjaGFuZ2VzIGJ5IGFkZGluZyBhXG4gICAgLy8gcHJvcGVydHljaGFuZ2UgaGFuZGxlciBhbmQgbG9va2luZyBmb3IgZXZlbnRzIHdpdGggcHJvcGVydHlOYW1lXG4gICAgLy8gZXF1YWwgdG8gJ3ZhbHVlJ1xuICAgIC8vIEluIElFOSwgcHJvcGVydHljaGFuZ2UgZmlyZXMgZm9yIG1vc3QgaW5wdXQgZXZlbnRzIGJ1dCBpcyBidWdneSBhbmRcbiAgICAvLyBkb2Vzbid0IGZpcmUgd2hlbiB0ZXh0IGlzIGRlbGV0ZWQsIGJ1dCBjb252ZW5pZW50bHksIHNlbGVjdGlvbmNoYW5nZVxuICAgIC8vIGFwcGVhcnMgdG8gZmlyZSBpbiBhbGwgb2YgdGhlIHJlbWFpbmluZyBjYXNlcyBzbyB3ZSBjYXRjaCB0aG9zZSBhbmRcbiAgICAvLyBmb3J3YXJkIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVyIGlmIHRoZSB2YWx1ZVxuICAgIC8vIGlzIGNoYW5nZWQgZnJvbSBKUyBzbyB3ZSByZWRlZmluZSBhIHNldHRlciBmb3IgYC52YWx1ZWAgdGhhdCB1cGRhdGVzXG4gICAgLy8gb3VyIGFjdGl2ZUVsZW1lbnRWYWx1ZSB2YXJpYWJsZSwgYWxsb3dpbmcgdXMgdG8gaWdub3JlIHRob3NlIGNoYW5nZXNcbiAgICAvL1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodG9wTGV2ZWxUYXJnZXQsIHRvcExldmVsVGFyZ2V0SUQpO1xuICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BCbHVyKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgfVxufVxuXG4vLyBGb3IgSUU4IGFuZCBJRTkuXG5mdW5jdGlvbiBnZXRUYXJnZXRJREZvcklucHV0RXZlbnRJRShcbiAgICB0b3BMZXZlbFR5cGUsXG4gICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgdG9wTGV2ZWxUYXJnZXRJRCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFNlbGVjdGlvbkNoYW5nZSB8fFxuICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcEtleVVwIHx8XG4gICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wS2V5RG93bikge1xuICAgIC8vIE9uIHRoZSBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQsIHRoZSB0YXJnZXQgaXMganVzdCBkb2N1bWVudCB3aGljaCBpc24ndFxuICAgIC8vIGhlbHBmdWwgZm9yIHVzIHNvIGp1c3QgY2hlY2sgYWN0aXZlRWxlbWVudCBpbnN0ZWFkLlxuICAgIC8vXG4gICAgLy8gOTklIG9mIHRoZSB0aW1lLCBrZXlkb3duIGFuZCBrZXl1cCBhcmVuJ3QgbmVjZXNzYXJ5LiBJRTggZmFpbHMgdG8gZmlyZVxuICAgIC8vIHByb3BlcnR5Y2hhbmdlIG9uIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhZnRlciBzZXR0aW5nIGB2YWx1ZWAgZnJvbSBhXG4gICAgLy8gc2NyaXB0IGFuZCBmaXJlcyBvbmx5IGtleWRvd24sIGtleXByZXNzLCBrZXl1cC4gQ2F0Y2hpbmcga2V5dXAgdXN1YWxseVxuICAgIC8vIGdldHMgaXQgYW5kIGNhdGNoaW5nIGtleWRvd24gbGV0cyB1cyBmaXJlIGFuIGV2ZW50IGZvciB0aGUgZmlyc3RcbiAgICAvLyBrZXlzdHJva2UgaWYgdXNlciBkb2VzIGEga2V5IHJlcGVhdCAoaXQnbGwgYmUgYSBsaXR0bGUgZGVsYXllZDogcmlnaHRcbiAgICAvLyBiZWZvcmUgdGhlIHNlY29uZCBrZXlzdHJva2UpLiBPdGhlciBpbnB1dCBtZXRob2RzIChlLmcuLCBwYXN0ZSkgc2VlbSB0b1xuICAgIC8vIGZpcmUgc2VsZWN0aW9uY2hhbmdlIG5vcm1hbGx5LlxuICAgIGlmIChhY3RpdmVFbGVtZW50ICYmIGFjdGl2ZUVsZW1lbnQudmFsdWUgIT09IGFjdGl2ZUVsZW1lbnRWYWx1ZSkge1xuICAgICAgYWN0aXZlRWxlbWVudFZhbHVlID0gYWN0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgIHJldHVybiBhY3RpdmVFbGVtZW50SUQ7XG4gICAgfVxuICB9XG59XG5cblxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNsaWNrYCBldmVudFxuICovXG5mdW5jdGlvbiBzaG91bGRVc2VDbGlja0V2ZW50KGVsZW0pIHtcbiAgLy8gVXNlIHRoZSBgY2xpY2tgIGV2ZW50IHRvIGRldGVjdCBjaGFuZ2VzIHRvIGNoZWNrYm94IGFuZCByYWRpbyBpbnB1dHMuXG4gIC8vIFRoaXMgYXBwcm9hY2ggd29ya3MgYWNyb3NzIGFsbCBicm93c2Vycywgd2hlcmVhcyBgY2hhbmdlYCBkb2VzIG5vdCBmaXJlXG4gIC8vIHVudGlsIGBibHVyYCBpbiBJRTguXG4gIHJldHVybiAoXG4gICAgZWxlbS5ub2RlTmFtZSA9PT0gJ0lOUFVUJyAmJlxuICAgIChlbGVtLnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWxlbS50eXBlID09PSAncmFkaW8nKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJREZvckNsaWNrRXZlbnQoXG4gICAgdG9wTGV2ZWxUeXBlLFxuICAgIHRvcExldmVsVGFyZ2V0LFxuICAgIHRvcExldmVsVGFyZ2V0SUQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BDbGljaykge1xuICAgIHJldHVybiB0b3BMZXZlbFRhcmdldElEO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25DaGFuZ2VgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBjaGFuZ2UgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy4gVGhpcyBldmVudCBmaXJlcyBhdCBhIHRpbWUgd2hlbiBpdCdzIHBvc3NpYmxlIHRvXG4gKiBjaGFuZ2UgdGhlIGVsZW1lbnQncyB2YWx1ZSB3aXRob3V0IHNlZWluZyBhIGZsaWNrZXIuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gc2VsZWN0XG4gKi9cbnZhciBDaGFuZ2VFdmVudFBsdWdpbiA9IHtcblxuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRvcExldmVsVGFyZ2V0IFRoZSBsaXN0ZW5pbmcgY29tcG9uZW50IHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVGFyZ2V0SUQgSUQgb2YgYHRvcExldmVsVGFyZ2V0YC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICAgKiBAcmV0dXJuIHsqfSBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuZXh0cmFjdEV2ZW50c31cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnQpIHtcblxuICAgIHZhciBnZXRUYXJnZXRJREZ1bmMsIGhhbmRsZUV2ZW50RnVuYztcbiAgICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodG9wTGV2ZWxUYXJnZXQpKSB7XG4gICAgICBpZiAoZG9lc0NoYW5nZUV2ZW50QnViYmxlKSB7XG4gICAgICAgIGdldFRhcmdldElERnVuYyA9IGdldFRhcmdldElERm9yQ2hhbmdlRXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JDaGFuZ2VFdmVudElFODtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0b3BMZXZlbFRhcmdldCkpIHtcbiAgICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQpIHtcbiAgICAgICAgZ2V0VGFyZ2V0SURGdW5jID0gZ2V0VGFyZ2V0SURGb3JJbnB1dEV2ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0VGFyZ2V0SURGdW5jID0gZ2V0VGFyZ2V0SURGb3JJbnB1dEV2ZW50SUU7XG4gICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRJRTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodG9wTGV2ZWxUYXJnZXQpKSB7XG4gICAgICBnZXRUYXJnZXRJREZ1bmMgPSBnZXRUYXJnZXRJREZvckNsaWNrRXZlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGdldFRhcmdldElERnVuYykge1xuICAgICAgdmFyIHRhcmdldElEID0gZ2V0VGFyZ2V0SURGdW5jKFxuICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgICB0b3BMZXZlbFRhcmdldElEXG4gICAgICApO1xuICAgICAgaWYgKHRhcmdldElEKSB7XG4gICAgICAgIHZhciBldmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChcbiAgICAgICAgICBldmVudFR5cGVzLmNoYW5nZSxcbiAgICAgICAgICB0YXJnZXRJRCxcbiAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICApO1xuICAgICAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZUV2ZW50RnVuYykge1xuICAgICAgaGFuZGxlRXZlbnRGdW5jKFxuICAgICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgICB0b3BMZXZlbFRhcmdldElEXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENoYW5nZUV2ZW50UGx1Z2luO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIENsaWVudFJlYWN0Um9vdEluZGV4XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIG5leHRSZWFjdFJvb3RJbmRleCA9IDA7XG5cbnZhciBDbGllbnRSZWFjdFJvb3RJbmRleCA9IHtcbiAgY3JlYXRlUmVhY3RSb290SW5kZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXh0UmVhY3RSb290SW5kZXgrKztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRSZWFjdFJvb3RJbmRleDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRE9NQ2hpbGRyZW5PcGVyYXRpb25zXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERhbmdlciA9IHJlcXVpcmUoXCIuL0RhbmdlclwiKTtcbnZhciBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcyA9IHJlcXVpcmUoXCIuL1JlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzXCIpO1xuXG52YXIgc2V0VGV4dENvbnRlbnQgPSByZXF1aXJlKFwiLi9zZXRUZXh0Q29udGVudFwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogSW5zZXJ0cyBgY2hpbGROb2RlYCBhcyBhIGNoaWxkIG9mIGBwYXJlbnROb2RlYCBhdCB0aGUgYGluZGV4YC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHBhcmVudE5vZGUgUGFyZW50IG5vZGUgaW4gd2hpY2ggdG8gaW5zZXJ0LlxuICogQHBhcmFtIHtET01FbGVtZW50fSBjaGlsZE5vZGUgQ2hpbGQgbm9kZSB0byBpbnNlcnQuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBjaGlsZC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpbnNlcnRDaGlsZEF0KHBhcmVudE5vZGUsIGNoaWxkTm9kZSwgaW5kZXgpIHtcbiAgLy8gQnkgZXhwbG9pdGluZyBhcnJheXMgcmV0dXJuaW5nIGB1bmRlZmluZWRgIGZvciBhbiB1bmRlZmluZWQgaW5kZXgsIHdlIGNhblxuICAvLyByZWx5IGV4Y2x1c2l2ZWx5IG9uIGBpbnNlcnRCZWZvcmUobm9kZSwgbnVsbClgIGluc3RlYWQgb2YgYWxzbyB1c2luZ1xuICAvLyBgYXBwZW5kQ2hpbGQobm9kZSlgLiBIb3dldmVyLCB1c2luZyBgdW5kZWZpbmVkYCBpcyBub3QgYWxsb3dlZCBieSBhbGxcbiAgLy8gYnJvd3NlcnMgc28gd2UgbXVzdCByZXBsYWNlIGl0IHdpdGggYG51bGxgLlxuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShcbiAgICBjaGlsZE5vZGUsXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzW2luZGV4XSB8fCBudWxsXG4gICk7XG59XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgdXBkYXRpbmcgd2l0aCBET00gY2hpbGRyZW4uXG4gKi9cbnZhciBET01DaGlsZHJlbk9wZXJhdGlvbnMgPSB7XG5cbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6IERhbmdlci5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCxcblxuICB1cGRhdGVUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBjb21wb25lbnQncyBjaGlsZHJlbiBieSBwcm9jZXNzaW5nIGEgc2VyaWVzIG9mIHVwZGF0ZXMuIFRoZVxuICAgKiB1cGRhdGUgY29uZmlndXJhdGlvbnMgYXJlIGVhY2ggZXhwZWN0ZWQgdG8gaGF2ZSBhIGBwYXJlbnROb2RlYCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheTxvYmplY3Q+fSB1cGRhdGVzIExpc3Qgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAcGFyYW0ge2FycmF5PHN0cmluZz59IG1hcmt1cExpc3QgTGlzdCBvZiBtYXJrdXAgc3RyaW5ncy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm9jZXNzVXBkYXRlczogZnVuY3Rpb24odXBkYXRlcywgbWFya3VwTGlzdCkge1xuICAgIHZhciB1cGRhdGU7XG4gICAgLy8gTWFwcGluZyBmcm9tIHBhcmVudCBJRHMgdG8gaW5pdGlhbCBjaGlsZCBvcmRlcmluZ3MuXG4gICAgdmFyIGluaXRpYWxDaGlsZHJlbiA9IG51bGw7XG4gICAgLy8gTGlzdCBvZiBjaGlsZHJlbiB0aGF0IHdpbGwgYmUgbW92ZWQgb3IgcmVtb3ZlZC5cbiAgICB2YXIgdXBkYXRlZENoaWxkcmVuID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdXBkYXRlID0gdXBkYXRlc1tpXTtcbiAgICAgIGlmICh1cGRhdGUudHlwZSA9PT0gUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuTU9WRV9FWElTVElORyB8fFxuICAgICAgICAgIHVwZGF0ZS50eXBlID09PSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5SRU1PVkVfTk9ERSkge1xuICAgICAgICB2YXIgdXBkYXRlZEluZGV4ID0gdXBkYXRlLmZyb21JbmRleDtcbiAgICAgICAgdmFyIHVwZGF0ZWRDaGlsZCA9IHVwZGF0ZS5wYXJlbnROb2RlLmNoaWxkTm9kZXNbdXBkYXRlZEluZGV4XTtcbiAgICAgICAgdmFyIHBhcmVudElEID0gdXBkYXRlLnBhcmVudElEO1xuXG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgdXBkYXRlZENoaWxkLFxuICAgICAgICAgICdwcm9jZXNzVXBkYXRlcygpOiBVbmFibGUgdG8gZmluZCBjaGlsZCAlcyBvZiBlbGVtZW50LiBUaGlzICcgK1xuICAgICAgICAgICdwcm9iYWJseSBtZWFucyB0aGUgRE9NIHdhcyB1bmV4cGVjdGVkbHkgbXV0YXRlZCAoZS5nLiwgYnkgdGhlICcgK1xuICAgICAgICAgICdicm93c2VyKSwgdXN1YWxseSBkdWUgdG8gZm9yZ2V0dGluZyBhIDx0Ym9keT4gd2hlbiB1c2luZyB0YWJsZXMsICcgK1xuICAgICAgICAgICduZXN0aW5nIHRhZ3MgbGlrZSA8Zm9ybT4sIDxwPiwgb3IgPGE+LCBvciB1c2luZyBub24tU1ZHIGVsZW1lbnRzICcgK1xuICAgICAgICAgICdpbiBhbiA8c3ZnPiBwYXJlbnQuIFRyeSBpbnNwZWN0aW5nIHRoZSBjaGlsZCBub2RlcyBvZiB0aGUgZWxlbWVudCAnICtcbiAgICAgICAgICAnd2l0aCBSZWFjdCBJRCBgJXNgLicsXG4gICAgICAgICAgdXBkYXRlZEluZGV4LFxuICAgICAgICAgIHBhcmVudElEXG4gICAgICAgICkgOiBpbnZhcmlhbnQodXBkYXRlZENoaWxkKSk7XG5cbiAgICAgICAgaW5pdGlhbENoaWxkcmVuID0gaW5pdGlhbENoaWxkcmVuIHx8IHt9O1xuICAgICAgICBpbml0aWFsQ2hpbGRyZW5bcGFyZW50SURdID0gaW5pdGlhbENoaWxkcmVuW3BhcmVudElEXSB8fCBbXTtcbiAgICAgICAgaW5pdGlhbENoaWxkcmVuW3BhcmVudElEXVt1cGRhdGVkSW5kZXhdID0gdXBkYXRlZENoaWxkO1xuXG4gICAgICAgIHVwZGF0ZWRDaGlsZHJlbiA9IHVwZGF0ZWRDaGlsZHJlbiB8fCBbXTtcbiAgICAgICAgdXBkYXRlZENoaWxkcmVuLnB1c2godXBkYXRlZENoaWxkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyZWRNYXJrdXAgPSBEYW5nZXIuZGFuZ2Vyb3VzbHlSZW5kZXJNYXJrdXAobWFya3VwTGlzdCk7XG5cbiAgICAvLyBSZW1vdmUgdXBkYXRlZCBjaGlsZHJlbiBmaXJzdCBzbyB0aGF0IGB0b0luZGV4YCBpcyBjb25zaXN0ZW50LlxuICAgIGlmICh1cGRhdGVkQ2hpbGRyZW4pIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdXBkYXRlZENoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHVwZGF0ZWRDaGlsZHJlbltqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHVwZGF0ZWRDaGlsZHJlbltqXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCB1cGRhdGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICB1cGRhdGUgPSB1cGRhdGVzW2tdO1xuICAgICAgc3dpdGNoICh1cGRhdGUudHlwZSkge1xuICAgICAgICBjYXNlIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLklOU0VSVF9NQVJLVVA6XG4gICAgICAgICAgaW5zZXJ0Q2hpbGRBdChcbiAgICAgICAgICAgIHVwZGF0ZS5wYXJlbnROb2RlLFxuICAgICAgICAgICAgcmVuZGVyZWRNYXJrdXBbdXBkYXRlLm1hcmt1cEluZGV4XSxcbiAgICAgICAgICAgIHVwZGF0ZS50b0luZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5NT1ZFX0VYSVNUSU5HOlxuICAgICAgICAgIGluc2VydENoaWxkQXQoXG4gICAgICAgICAgICB1cGRhdGUucGFyZW50Tm9kZSxcbiAgICAgICAgICAgIGluaXRpYWxDaGlsZHJlblt1cGRhdGUucGFyZW50SURdW3VwZGF0ZS5mcm9tSW5kZXhdLFxuICAgICAgICAgICAgdXBkYXRlLnRvSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzLlRFWFRfQ09OVEVOVDpcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChcbiAgICAgICAgICAgIHVwZGF0ZS5wYXJlbnROb2RlLFxuICAgICAgICAgICAgdXBkYXRlLnRleHRDb250ZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5SRU1PVkVfTk9ERTpcbiAgICAgICAgICAvLyBBbHJlYWR5IHJlbW92ZWQgYnkgdGhlIGZvci1sb29wIGFib3ZlLlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTUNoaWxkcmVuT3BlcmF0aW9ucztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJFOU5RMmhwYkdSeVpXNVBjR1Z5WVhScGIyNXpMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JFVDAxRGFHbHNaSEpsYms5d1pYSmhkR2x2Ym5OY2JpQXFJRUIwZVhCbFkyaGxZMnR6SUhOMFlYUnBZeTF2Ym14NVhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdSR0Z1WjJWeUlEMGdjbVZ4ZFdseVpTaGNJaTR2UkdGdVoyVnlYQ0lwTzF4dWRtRnlJRkpsWVdOMFRYVnNkR2xEYUdsc1pGVndaR0YwWlZSNWNHVnpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JOZFd4MGFVTm9hV3hrVlhCa1lYUmxWSGx3WlhOY0lpazdYRzVjYm5aaGNpQnpaWFJVWlhoMFEyOXVkR1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMM05sZEZSbGVIUkRiMjUwWlc1MFhDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1THlvcVhHNGdLaUJKYm5ObGNuUnpJR0JqYUdsc1pFNXZaR1ZnSUdGeklHRWdZMmhwYkdRZ2IyWWdZSEJoY21WdWRFNXZaR1ZnSUdGMElIUm9aU0JnYVc1a1pYaGdMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnY0dGeVpXNTBUbTlrWlNCUVlYSmxiblFnYm05a1pTQnBiaUIzYUdsamFDQjBieUJwYm5ObGNuUXVYRzRnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHTm9hV3hrVG05a1pTQkRhR2xzWkNCdWIyUmxJSFJ2SUdsdWMyVnlkQzVjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCcGJtUmxlQ0JKYm1SbGVDQmhkQ0IzYUdsamFDQjBieUJwYm5ObGNuUWdkR2hsSUdOb2FXeGtMbHh1SUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdLaTljYm1aMWJtTjBhVzl1SUdsdWMyVnlkRU5vYVd4a1FYUW9jR0Z5Wlc1MFRtOWtaU3dnWTJocGJHUk9iMlJsTENCcGJtUmxlQ2tnZTF4dUlDQXZMeUJDZVNCbGVIQnNiMmwwYVc1bklHRnljbUY1Y3lCeVpYUjFjbTVwYm1jZ1lIVnVaR1ZtYVc1bFpHQWdabTl5SUdGdUlIVnVaR1ZtYVc1bFpDQnBibVJsZUN3Z2QyVWdZMkZ1WEc0Z0lDOHZJSEpsYkhrZ1pYaGpiSFZ6YVhabGJIa2diMjRnWUdsdWMyVnlkRUpsWm05eVpTaHViMlJsTENCdWRXeHNLV0FnYVc1emRHVmhaQ0J2WmlCaGJITnZJSFZ6YVc1blhHNGdJQzh2SUdCaGNIQmxibVJEYUdsc1pDaHViMlJsS1dBdUlFaHZkMlYyWlhJc0lIVnphVzVuSUdCMWJtUmxabWx1WldSZ0lHbHpJRzV2ZENCaGJHeHZkMlZrSUdKNUlHRnNiRnh1SUNBdkx5QmljbTkzYzJWeWN5QnpieUIzWlNCdGRYTjBJSEpsY0d4aFkyVWdhWFFnZDJsMGFDQmdiblZzYkdBdVhHNGdJSEJoY21WdWRFNXZaR1V1YVc1elpYSjBRbVZtYjNKbEtGeHVJQ0FnSUdOb2FXeGtUbTlrWlN4Y2JpQWdJQ0J3WVhKbGJuUk9iMlJsTG1Ob2FXeGtUbTlrWlhOYmFXNWtaWGhkSUh4OElHNTFiR3hjYmlBZ0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCUGNHVnlZWFJwYjI1eklHWnZjaUIxY0dSaGRHbHVaeUIzYVhSb0lFUlBUU0JqYUdsc1pISmxiaTVjYmlBcUwxeHVkbUZ5SUVSUFRVTm9hV3hrY21WdVQzQmxjbUYwYVc5dWN5QTlJSHRjYmx4dUlDQmtZVzVuWlhKdmRYTnNlVkpsY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0RvZ1JHRnVaMlZ5TG1SaGJtZGxjbTkxYzJ4NVVtVndiR0ZqWlU1dlpHVlhhWFJvVFdGeWEzVndMRnh1WEc0Z0lIVndaR0YwWlZSbGVIUkRiMjUwWlc1ME9pQnpaWFJVWlhoMFEyOXVkR1Z1ZEN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVlhCa1lYUmxjeUJoSUdOdmJYQnZibVZ1ZENkeklHTm9hV3hrY21WdUlHSjVJSEJ5YjJObGMzTnBibWNnWVNCelpYSnBaWE1nYjJZZ2RYQmtZWFJsY3k0Z1ZHaGxYRzRnSUNBcUlIVndaR0YwWlNCamIyNW1hV2QxY21GMGFXOXVjeUJoY21VZ1pXRmphQ0JsZUhCbFkzUmxaQ0IwYnlCb1lYWmxJR0VnWUhCaGNtVnVkRTV2WkdWZ0lIQnliM0JsY25SNUxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMkZ5Y21GNVBHOWlhbVZqZEQ1OUlIVndaR0YwWlhNZ1RHbHpkQ0J2WmlCMWNHUmhkR1VnWTI5dVptbG5kWEpoZEdsdmJuTXVYRzRnSUNBcUlFQndZWEpoYlNCN1lYSnlZWGs4YzNSeWFXNW5QbjBnYldGeWEzVndUR2x6ZENCTWFYTjBJRzltSUcxaGNtdDFjQ0J6ZEhKcGJtZHpMbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJSEJ5YjJObGMzTlZjR1JoZEdWek9pQm1kVzVqZEdsdmJpaDFjR1JoZEdWekxDQnRZWEpyZFhCTWFYTjBLU0I3WEc0Z0lDQWdkbUZ5SUhWd1pHRjBaVHRjYmlBZ0lDQXZMeUJOWVhCd2FXNW5JR1p5YjIwZ2NHRnlaVzUwSUVsRWN5QjBieUJwYm1sMGFXRnNJR05vYVd4a0lHOXlaR1Z5YVc1bmN5NWNiaUFnSUNCMllYSWdhVzVwZEdsaGJFTm9hV3hrY21WdUlEMGdiblZzYkR0Y2JpQWdJQ0F2THlCTWFYTjBJRzltSUdOb2FXeGtjbVZ1SUhSb1lYUWdkMmxzYkNCaVpTQnRiM1psWkNCdmNpQnlaVzF2ZG1Wa0xseHVJQ0FnSUhaaGNpQjFjR1JoZEdWa1EyaHBiR1J5Wlc0Z1BTQnVkV3hzTzF4dVhHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCMWNHUmhkR1Z6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQjFjR1JoZEdVZ1BTQjFjR1JoZEdWelcybGRPMXh1SUNBZ0lDQWdhV1lnS0hWd1pHRjBaUzUwZVhCbElEMDlQU0JTWldGamRFMTFiSFJwUTJocGJHUlZjR1JoZEdWVWVYQmxjeTVOVDFaRlgwVllTVk5VU1U1SElIeDhYRzRnSUNBZ0lDQWdJQ0FnZFhCa1lYUmxMblI1Y0dVZ1BUMDlJRkpsWVdOMFRYVnNkR2xEYUdsc1pGVndaR0YwWlZSNWNHVnpMbEpGVFU5V1JWOU9UMFJGS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUIxY0dSaGRHVmtTVzVrWlhnZ1BTQjFjR1JoZEdVdVpuSnZiVWx1WkdWNE8xeHVJQ0FnSUNBZ0lDQjJZWElnZFhCa1lYUmxaRU5vYVd4a0lEMGdkWEJrWVhSbExuQmhjbVZ1ZEU1dlpHVXVZMmhwYkdST2IyUmxjMXQxY0dSaGRHVmtTVzVrWlhoZE8xeHVJQ0FnSUNBZ0lDQjJZWElnY0dGeVpXNTBTVVFnUFNCMWNHUmhkR1V1Y0dGeVpXNTBTVVE3WEc1Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lDQjFjR1JoZEdWa1EyaHBiR1FzWEc0Z0lDQWdJQ0FnSUNBZ0ozQnliMk5sYzNOVmNHUmhkR1Z6S0NrNklGVnVZV0pzWlNCMGJ5Qm1hVzVrSUdOb2FXeGtJQ1Z6SUc5bUlHVnNaVzFsYm5RdUlGUm9hWE1nSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM0J5YjJKaFlteDVJRzFsWVc1eklIUm9aU0JFVDAwZ2QyRnpJSFZ1Wlhod1pXTjBaV1JzZVNCdGRYUmhkR1ZrSUNobExtY3VMQ0JpZVNCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oySnliM2R6WlhJcExDQjFjM1ZoYkd4NUlHUjFaU0IwYnlCbWIzSm5aWFIwYVc1bklHRWdQSFJpYjJSNVBpQjNhR1Z1SUhWemFXNW5JSFJoWW14bGN5d2dKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oyNWxjM1JwYm1jZ2RHRm5jeUJzYVd0bElEeG1iM0p0UGl3Z1BIQStMQ0J2Y2lBOFlUNHNJRzl5SUhWemFXNW5JRzV2YmkxVFZrY2daV3hsYldWdWRITWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oybHVJR0Z1SUR4emRtYytJSEJoY21WdWRDNGdWSEo1SUdsdWMzQmxZM1JwYm1jZ2RHaGxJR05vYVd4a0lHNXZaR1Z6SUc5bUlIUm9aU0JsYkdWdFpXNTBJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZDNhWFJvSUZKbFlXTjBJRWxFSUdBbGMyQXVKeXhjYmlBZ0lDQWdJQ0FnSUNCMWNHUmhkR1ZrU1c1a1pYZ3NYRzRnSUNBZ0lDQWdJQ0FnY0dGeVpXNTBTVVJjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaDFjR1JoZEdWa1EyaHBiR1FwS1R0Y2JseHVJQ0FnSUNBZ0lDQnBibWwwYVdGc1EyaHBiR1J5Wlc0Z1BTQnBibWwwYVdGc1EyaHBiR1J5Wlc0Z2ZId2dlMzA3WEc0Z0lDQWdJQ0FnSUdsdWFYUnBZV3hEYUdsc1pISmxibHR3WVhKbGJuUkpSRjBnUFNCcGJtbDBhV0ZzUTJocGJHUnlaVzViY0dGeVpXNTBTVVJkSUh4OElGdGRPMXh1SUNBZ0lDQWdJQ0JwYm1sMGFXRnNRMmhwYkdSeVpXNWJjR0Z5Wlc1MFNVUmRXM1Z3WkdGMFpXUkpibVJsZUYwZ1BTQjFjR1JoZEdWa1EyaHBiR1E3WEc1Y2JpQWdJQ0FnSUNBZ2RYQmtZWFJsWkVOb2FXeGtjbVZ1SUQwZ2RYQmtZWFJsWkVOb2FXeGtjbVZ1SUh4OElGdGRPMXh1SUNBZ0lDQWdJQ0IxY0dSaGRHVmtRMmhwYkdSeVpXNHVjSFZ6YUNoMWNHUmhkR1ZrUTJocGJHUXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJ5Wlc1a1pYSmxaRTFoY210MWNDQTlJRVJoYm1kbGNpNWtZVzVuWlhKdmRYTnNlVkpsYm1SbGNrMWhjbXQxY0NodFlYSnJkWEJNYVhOMEtUdGNibHh1SUNBZ0lDOHZJRkpsYlc5MlpTQjFjR1JoZEdWa0lHTm9hV3hrY21WdUlHWnBjbk4wSUhOdklIUm9ZWFFnWUhSdlNXNWtaWGhnSUdseklHTnZibk5wYzNSbGJuUXVYRzRnSUNBZ2FXWWdLSFZ3WkdGMFpXUkRhR2xzWkhKbGJpa2dlMXh1SUNBZ0lDQWdabTl5SUNoMllYSWdhaUE5SURBN0lHb2dQQ0IxY0dSaGRHVmtRMmhwYkdSeVpXNHViR1Z1WjNSb095QnFLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2RYQmtZWFJsWkVOb2FXeGtjbVZ1VzJwZExuQmhjbVZ1ZEU1dlpHVXVjbVZ0YjNabFEyaHBiR1FvZFhCa1lYUmxaRU5vYVd4a2NtVnVXMnBkS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJySUQwZ01Ec2dheUE4SUhWd1pHRjBaWE11YkdWdVozUm9PeUJyS3lzcElIdGNiaUFnSUNBZ0lIVndaR0YwWlNBOUlIVndaR0YwWlhOYmExMDdYRzRnSUNBZ0lDQnpkMmwwWTJnZ0tIVndaR0YwWlM1MGVYQmxLU0I3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdVbVZoWTNSTmRXeDBhVU5vYVd4a1ZYQmtZWFJsVkhsd1pYTXVTVTVUUlZKVVgwMUJVa3RWVURwY2JpQWdJQ0FnSUNBZ0lDQnBibk5sY25SRGFHbHNaRUYwS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdkWEJrWVhSbExuQmhjbVZ1ZEU1dlpHVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpXNWtaWEpsWkUxaGNtdDFjRnQxY0dSaGRHVXViV0Z5YTNWd1NXNWtaWGhkTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdkWEJrWVhSbExuUnZTVzVrWlhoY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdJQ0JqWVhObElGSmxZV04wVFhWc2RHbERhR2xzWkZWd1pHRjBaVlI1Y0dWekxrMVBWa1ZmUlZoSlUxUkpUa2M2WEc0Z0lDQWdJQ0FnSUNBZ2FXNXpaWEowUTJocGJHUkJkQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lIVndaR0YwWlM1d1lYSmxiblJPYjJSbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYVc1cGRHbGhiRU5vYVd4a2NtVnVXM1Z3WkdGMFpTNXdZWEpsYm5SSlJGMWJkWEJrWVhSbExtWnliMjFKYm1SbGVGMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCMWNHUmhkR1V1ZEc5SmJtUmxlRnh1SUNBZ0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnVW1WaFkzUk5kV3gwYVVOb2FXeGtWWEJrWVhSbFZIbHdaWE11VkVWWVZGOURUMDVVUlU1VU9seHVJQ0FnSUNBZ0lDQWdJSE5sZEZSbGVIUkRiMjUwWlc1MEtGeHVJQ0FnSUNBZ0lDQWdJQ0FnZFhCa1lYUmxMbkJoY21WdWRFNXZaR1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjFjR1JoZEdVdWRHVjRkRU52Ym5SbGJuUmNiaUFnSUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnSUNCallYTmxJRkpsWVdOMFRYVnNkR2xEYUdsc1pGVndaR0YwWlZSNWNHVnpMbEpGVFU5V1JWOU9UMFJGT2x4dUlDQWdJQ0FnSUNBZ0lDOHZJRUZzY21WaFpIa2djbVZ0YjNabFpDQmllU0IwYUdVZ1ptOXlMV3h2YjNBZ1lXSnZkbVV1WEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1JFOU5RMmhwYkdSeVpXNVBjR1Z5WVhScGIyNXpPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRE9NUHJvcGVydHlcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbmZ1bmN0aW9uIGNoZWNrTWFzayh2YWx1ZSwgYml0bWFzaykge1xuICByZXR1cm4gKHZhbHVlICYgYml0bWFzaykgPT09IGJpdG1hc2s7XG59XG5cbnZhciBET01Qcm9wZXJ0eUluamVjdGlvbiA9IHtcbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBub3JtYWxpemVkLCBjYW1lbGNhc2VkIHByb3BlcnR5IG5hbWVzIHRvIGEgY29uZmlndXJhdGlvbiB0aGF0XG4gICAqIHNwZWNpZmllcyBob3cgdGhlIGFzc29jaWF0ZWQgRE9NIHByb3BlcnR5IHNob3VsZCBiZSBhY2Nlc3NlZCBvciByZW5kZXJlZC5cbiAgICovXG4gIE1VU1RfVVNFX0FUVFJJQlVURTogMHgxLFxuICBNVVNUX1VTRV9QUk9QRVJUWTogMHgyLFxuICBIQVNfU0lERV9FRkZFQ1RTOiAweDQsXG4gIEhBU19CT09MRUFOX1ZBTFVFOiAweDgsXG4gIEhBU19OVU1FUklDX1ZBTFVFOiAweDEwLFxuICBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRTogMHgyMCB8IDB4MTAsXG4gIEhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUU6IDB4NDAsXG5cbiAgLyoqXG4gICAqIEluamVjdCBzb21lIHNwZWNpYWxpemVkIGtub3dsZWRnZSBhYm91dCB0aGUgRE9NLiBUaGlzIHRha2VzIGEgY29uZmlnIG9iamVjdFxuICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogaXNDdXN0b21BdHRyaWJ1dGU6IGZ1bmN0aW9uIHRoYXQgZ2l2ZW4gYW4gYXR0cmlidXRlIG5hbWUgd2lsbCByZXR1cm4gdHJ1ZVxuICAgKiBpZiBpdCBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NIHZlcmJhdGltLiBVc2VmdWwgZm9yIGRhdGEtKiBvciBhcmlhLSpcbiAgICogYXR0cmlidXRlcyB3aGVyZSBpdCdzIGltcG9zc2libGUgdG8gZW51bWVyYXRlIGFsbCBvZiB0aGUgcG9zc2libGVcbiAgICogYXR0cmlidXRlIG5hbWVzLFxuICAgKlxuICAgKiBQcm9wZXJ0aWVzOiBvYmplY3QgbWFwcGluZyBET00gcHJvcGVydHkgbmFtZSB0byBvbmUgb2YgdGhlXG4gICAqIERPTVByb3BlcnR5SW5qZWN0aW9uIGNvbnN0YW50cyBvciBudWxsLiBJZiB5b3VyIGF0dHJpYnV0ZSBpc24ndCBpbiBoZXJlLFxuICAgKiBpdCB3b24ndCBnZXQgd3JpdHRlbiB0byB0aGUgRE9NLlxuICAgKlxuICAgKiBET01BdHRyaWJ1dGVOYW1lczogb2JqZWN0IG1hcHBpbmcgUmVhY3QgYXR0cmlidXRlIG5hbWUgdG8gdGhlIERPTVxuICAgKiBhdHRyaWJ1dGUgbmFtZS4gQXR0cmlidXRlIG5hbWVzIG5vdCBzcGVjaWZpZWQgdXNlIHRoZSAqKmxvd2VyY2FzZSoqXG4gICAqIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICpcbiAgICogRE9NUHJvcGVydHlOYW1lczogc2ltaWxhciB0byBET01BdHRyaWJ1dGVOYW1lcyBidXQgZm9yIERPTSBwcm9wZXJ0aWVzLlxuICAgKiBQcm9wZXJ0eSBuYW1lcyBub3Qgc3BlY2lmaWVkIHVzZSB0aGUgbm9ybWFsaXplZCBuYW1lLlxuICAgKlxuICAgKiBET01NdXRhdGlvbk1ldGhvZHM6IFByb3BlcnRpZXMgdGhhdCByZXF1aXJlIHNwZWNpYWwgbXV0YXRpb24gbWV0aG9kcy4gSWZcbiAgICogYHZhbHVlYCBpcyB1bmRlZmluZWQsIHRoZSBtdXRhdGlvbiBtZXRob2Qgc2hvdWxkIHVuc2V0IHRoZSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGRvbVByb3BlcnR5Q29uZmlnIHRoZSBjb25maWcgYXMgZGVzY3JpYmVkIGFib3ZlLlxuICAgKi9cbiAgaW5qZWN0RE9NUHJvcGVydHlDb25maWc6IGZ1bmN0aW9uKGRvbVByb3BlcnR5Q29uZmlnKSB7XG4gICAgdmFyIFByb3BlcnRpZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5Qcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHZhciBET01BdHRyaWJ1dGVOYW1lcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTUF0dHJpYnV0ZU5hbWVzIHx8IHt9O1xuICAgIHZhciBET01Qcm9wZXJ0eU5hbWVzID0gZG9tUHJvcGVydHlDb25maWcuRE9NUHJvcGVydHlOYW1lcyB8fCB7fTtcbiAgICB2YXIgRE9NTXV0YXRpb25NZXRob2RzID0gZG9tUHJvcGVydHlDb25maWcuRE9NTXV0YXRpb25NZXRob2RzIHx8IHt9O1xuXG4gICAgaWYgKGRvbVByb3BlcnR5Q29uZmlnLmlzQ3VzdG9tQXR0cmlidXRlKSB7XG4gICAgICBET01Qcm9wZXJ0eS5faXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnMucHVzaChcbiAgICAgICAgZG9tUHJvcGVydHlDb25maWcuaXNDdXN0b21BdHRyaWJ1dGVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gUHJvcGVydGllcykge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgIURPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lLmhhc093blByb3BlcnR5KHByb3BOYW1lKSxcbiAgICAgICAgJ2luamVjdERPTVByb3BlcnR5Q29uZmlnKC4uLik6IFlvdVxcJ3JlIHRyeWluZyB0byBpbmplY3QgRE9NIHByb3BlcnR5ICcgK1xuICAgICAgICAnXFwnJXNcXCcgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBpbmplY3RlZC4gWW91IG1heSBiZSBhY2NpZGVudGFsbHkgJyArXG4gICAgICAgICdpbmplY3RpbmcgdGhlIHNhbWUgRE9NIHByb3BlcnR5IGNvbmZpZyB0d2ljZSwgb3IgeW91IG1heSBiZSAnICtcbiAgICAgICAgJ2luamVjdGluZyB0d28gY29uZmlncyB0aGF0IGhhdmUgY29uZmxpY3RpbmcgcHJvcGVydHkgbmFtZXMuJyxcbiAgICAgICAgcHJvcE5hbWVcbiAgICAgICkgOiBpbnZhcmlhbnQoIURPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkpO1xuXG4gICAgICBET01Qcm9wZXJ0eS5pc1N0YW5kYXJkTmFtZVtwcm9wTmFtZV0gPSB0cnVlO1xuXG4gICAgICB2YXIgbG93ZXJDYXNlZCA9IHByb3BOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBET01Qcm9wZXJ0eS5nZXRQb3NzaWJsZVN0YW5kYXJkTmFtZVtsb3dlckNhc2VkXSA9IHByb3BOYW1lO1xuXG4gICAgICBpZiAoRE9NQXR0cmlidXRlTmFtZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gRE9NQXR0cmlidXRlTmFtZXNbcHJvcE5hbWVdO1xuICAgICAgICBET01Qcm9wZXJ0eS5nZXRQb3NzaWJsZVN0YW5kYXJkTmFtZVthdHRyaWJ1dGVOYW1lXSA9IHByb3BOYW1lO1xuICAgICAgICBET01Qcm9wZXJ0eS5nZXRBdHRyaWJ1dGVOYW1lW3Byb3BOYW1lXSA9IGF0dHJpYnV0ZU5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBET01Qcm9wZXJ0eS5nZXRBdHRyaWJ1dGVOYW1lW3Byb3BOYW1lXSA9IGxvd2VyQ2FzZWQ7XG4gICAgICB9XG5cbiAgICAgIERPTVByb3BlcnR5LmdldFByb3BlcnR5TmFtZVtwcm9wTmFtZV0gPVxuICAgICAgICBET01Qcm9wZXJ0eU5hbWVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSA/XG4gICAgICAgICAgRE9NUHJvcGVydHlOYW1lc1twcm9wTmFtZV0gOlxuICAgICAgICAgIHByb3BOYW1lO1xuXG4gICAgICBpZiAoRE9NTXV0YXRpb25NZXRob2RzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBET01Qcm9wZXJ0eS5nZXRNdXRhdGlvbk1ldGhvZFtwcm9wTmFtZV0gPSBET01NdXRhdGlvbk1ldGhvZHNbcHJvcE5hbWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgRE9NUHJvcGVydHkuZ2V0TXV0YXRpb25NZXRob2RbcHJvcE5hbWVdID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BDb25maWcgPSBQcm9wZXJ0aWVzW3Byb3BOYW1lXTtcbiAgICAgIERPTVByb3BlcnR5Lm11c3RVc2VBdHRyaWJ1dGVbcHJvcE5hbWVdID1cbiAgICAgICAgY2hlY2tNYXNrKHByb3BDb25maWcsIERPTVByb3BlcnR5SW5qZWN0aW9uLk1VU1RfVVNFX0FUVFJJQlVURSk7XG4gICAgICBET01Qcm9wZXJ0eS5tdXN0VXNlUHJvcGVydHlbcHJvcE5hbWVdID1cbiAgICAgICAgY2hlY2tNYXNrKHByb3BDb25maWcsIERPTVByb3BlcnR5SW5qZWN0aW9uLk1VU1RfVVNFX1BST1BFUlRZKTtcbiAgICAgIERPTVByb3BlcnR5Lmhhc1NpZGVFZmZlY3RzW3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5IQVNfU0lERV9FRkZFQ1RTKTtcbiAgICAgIERPTVByb3BlcnR5Lmhhc0Jvb2xlYW5WYWx1ZVtwcm9wTmFtZV0gPVxuICAgICAgICBjaGVja01hc2socHJvcENvbmZpZywgRE9NUHJvcGVydHlJbmplY3Rpb24uSEFTX0JPT0xFQU5fVkFMVUUpO1xuICAgICAgRE9NUHJvcGVydHkuaGFzTnVtZXJpY1ZhbHVlW3Byb3BOYW1lXSA9XG4gICAgICAgIGNoZWNrTWFzayhwcm9wQ29uZmlnLCBET01Qcm9wZXJ0eUluamVjdGlvbi5IQVNfTlVNRVJJQ19WQUxVRSk7XG4gICAgICBET01Qcm9wZXJ0eS5oYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZVtwcm9wTmFtZV0gPVxuICAgICAgICBjaGVja01hc2socHJvcENvbmZpZywgRE9NUHJvcGVydHlJbmplY3Rpb24uSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUpO1xuICAgICAgRE9NUHJvcGVydHkuaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZVtwcm9wTmFtZV0gPVxuICAgICAgICBjaGVja01hc2socHJvcENvbmZpZywgRE9NUHJvcGVydHlJbmplY3Rpb24uSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSk7XG5cbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICFET01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW3Byb3BOYW1lXSB8fFxuICAgICAgICAgICFET01Qcm9wZXJ0eS5tdXN0VXNlUHJvcGVydHlbcHJvcE5hbWVdLFxuICAgICAgICAnRE9NUHJvcGVydHk6IENhbm5vdCByZXF1aXJlIHVzaW5nIGJvdGggYXR0cmlidXRlIGFuZCBwcm9wZXJ0eTogJXMnLFxuICAgICAgICBwcm9wTmFtZVxuICAgICAgKSA6IGludmFyaWFudCghRE9NUHJvcGVydHkubXVzdFVzZUF0dHJpYnV0ZVtwcm9wTmFtZV0gfHxcbiAgICAgICAgIURPTVByb3BlcnR5Lm11c3RVc2VQcm9wZXJ0eVtwcm9wTmFtZV0pKTtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIERPTVByb3BlcnR5Lm11c3RVc2VQcm9wZXJ0eVtwcm9wTmFtZV0gfHxcbiAgICAgICAgICAhRE9NUHJvcGVydHkuaGFzU2lkZUVmZmVjdHNbcHJvcE5hbWVdLFxuICAgICAgICAnRE9NUHJvcGVydHk6IFByb3BlcnRpZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cyBtdXN0IHVzZSBwcm9wZXJ0eTogJXMnLFxuICAgICAgICBwcm9wTmFtZVxuICAgICAgKSA6IGludmFyaWFudChET01Qcm9wZXJ0eS5tdXN0VXNlUHJvcGVydHlbcHJvcE5hbWVdIHx8XG4gICAgICAgICFET01Qcm9wZXJ0eS5oYXNTaWRlRWZmZWN0c1twcm9wTmFtZV0pKTtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICEhRE9NUHJvcGVydHkuaGFzQm9vbGVhblZhbHVlW3Byb3BOYW1lXSArXG4gICAgICAgICAgISFET01Qcm9wZXJ0eS5oYXNOdW1lcmljVmFsdWVbcHJvcE5hbWVdICtcbiAgICAgICAgICAhIURPTVByb3BlcnR5Lmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWVbcHJvcE5hbWVdIDw9IDEsXG4gICAgICAgICdET01Qcm9wZXJ0eTogVmFsdWUgY2FuIGJlIG9uZSBvZiBib29sZWFuLCBvdmVybG9hZGVkIGJvb2xlYW4sIG9yICcgK1xuICAgICAgICAnbnVtZXJpYyB2YWx1ZSwgYnV0IG5vdCBhIGNvbWJpbmF0aW9uOiAlcycsXG4gICAgICAgIHByb3BOYW1lXG4gICAgICApIDogaW52YXJpYW50KCEhRE9NUHJvcGVydHkuaGFzQm9vbGVhblZhbHVlW3Byb3BOYW1lXSArXG4gICAgICAgICEhRE9NUHJvcGVydHkuaGFzTnVtZXJpY1ZhbHVlW3Byb3BOYW1lXSArXG4gICAgICAgICEhRE9NUHJvcGVydHkuaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZVtwcm9wTmFtZV0gPD0gMSkpO1xuICAgIH1cbiAgfVxufTtcbnZhciBkZWZhdWx0VmFsdWVDYWNoZSA9IHt9O1xuXG4vKipcbiAqIERPTVByb3BlcnR5IGV4cG9ydHMgbG9va3VwIG9iamVjdHMgdGhhdCBjYW4gYmUgdXNlZCBsaWtlIGZ1bmN0aW9uczpcbiAqXG4gKiAgID4gRE9NUHJvcGVydHkuaXNWYWxpZFsnaWQnXVxuICogICB0cnVlXG4gKiAgID4gRE9NUHJvcGVydHkuaXNWYWxpZFsnZm9vYmFyJ11cbiAqICAgdW5kZWZpbmVkXG4gKlxuICogQWx0aG91Z2ggdGhpcyBtYXkgYmUgY29uZnVzaW5nLCBpdCBwZXJmb3JtcyBiZXR0ZXIgaW4gZ2VuZXJhbC5cbiAqXG4gKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2tleS1leGlzdHNcbiAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20va2V5LW1pc3NpbmdcbiAqL1xudmFyIERPTVByb3BlcnR5ID0ge1xuXG4gIElEX0FUVFJJQlVURV9OQU1FOiAnZGF0YS1yZWFjdGlkJyxcblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBwcm9wZXJ0eSBuYW1lIGlzIGEgc3RhbmRhcmQgcHJvcGVydHkuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBpc1N0YW5kYXJkTmFtZToge30sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgcHJvcGVydHkgbmFtZXMgdG8gdGhlIHByb3Blcmx5IGNhc2VkIHZlcnNpb24sIHVzZWRcbiAgICogdG8gd2FybiBpbiB0aGUgY2FzZSBvZiBtaXNzaW5nIHByb3BlcnRpZXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZToge30sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBub3JtYWxpemVkIG5hbWVzIHRvIGF0dHJpYnV0ZSBuYW1lcyB0aGF0IGRpZmZlci4gQXR0cmlidXRlXG4gICAqIG5hbWVzIGFyZSB1c2VkIHdoZW4gcmVuZGVyaW5nIG1hcmt1cCBvciB3aXRoIGAqQXR0cmlidXRlKClgLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgZ2V0QXR0cmlidXRlTmFtZToge30sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBub3JtYWxpemVkIG5hbWVzIHRvIHByb3BlcnRpZXMgb24gRE9NIG5vZGUgaW5zdGFuY2VzLlxuICAgKiAoVGhpcyBpbmNsdWRlcyBwcm9wZXJ0aWVzIHRoYXQgbXV0YXRlIGR1ZSB0byBleHRlcm5hbCBmYWN0b3JzLilcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGdldFByb3BlcnR5TmFtZToge30sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBub3JtYWxpemVkIG5hbWVzIHRvIG11dGF0aW9uIG1ldGhvZHMuIFRoaXMgd2lsbCBvbmx5IGV4aXN0IGlmXG4gICAqIG11dGF0aW9uIGNhbm5vdCBiZSBzZXQgc2ltcGx5IGJ5IHRoZSBwcm9wZXJ0eSBvciBgc2V0QXR0cmlidXRlKClgLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgZ2V0TXV0YXRpb25NZXRob2Q6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIGFjY2Vzc2VkIGFuZCBtdXRhdGVkIGFzIGFuIG9iamVjdCBwcm9wZXJ0eS5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIG11c3RVc2VBdHRyaWJ1dGU6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIGFjY2Vzc2VkIGFuZCBtdXRhdGVkIHVzaW5nIGAqQXR0cmlidXRlKClgLlxuICAgKiAoVGhpcyBpbmNsdWRlcyBhbnl0aGluZyB0aGF0IGZhaWxzIGA8cHJvcE5hbWU+IGluIDxlbGVtZW50PmAuKVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgbXVzdFVzZVByb3BlcnR5OiB7fSxcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3Qgc2V0dGluZyBhIHZhbHVlIGNhdXNlcyBzaWRlIGVmZmVjdHMgc3VjaCBhcyB0cmlnZ2VyaW5nXG4gICAqIHJlc291cmNlcyB0byBiZSBsb2FkZWQgb3IgdGV4dCBzZWxlY3Rpb24gY2hhbmdlcy4gV2UgbXVzdCBlbnN1cmUgdGhhdFxuICAgKiB0aGUgdmFsdWUgaXMgb25seSBzZXQgaWYgaXQgaGFzIGNoYW5nZWQuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBoYXNTaWRlRWZmZWN0czoge30sXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb3BlcnR5IHNob3VsZCBiZSByZW1vdmVkIHdoZW4gc2V0IHRvIGEgZmFsc2V5IHZhbHVlLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgaGFzQm9vbGVhblZhbHVlOiB7fSxcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJvcGVydHkgbXVzdCBiZSBudW1lcmljIG9yIHBhcnNlIGFzIGFcbiAgICogbnVtZXJpYyBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBoYXNOdW1lcmljVmFsdWU6IHt9LFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIHBvc2l0aXZlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBwb3NpdGl2ZVxuICAgKiBudW1lcmljIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHNldCB0byBhIGZhbHNleSB2YWx1ZS5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIGhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlOiB7fSxcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJvcGVydHkgY2FuIGJlIHVzZWQgYXMgYSBmbGFnIGFzIHdlbGwgYXMgd2l0aCBhIHZhbHVlLiBSZW1vdmVkXG4gICAqIHdoZW4gc3RyaWN0bHkgZXF1YWwgdG8gZmFsc2U7IHByZXNlbnQgd2l0aG91dCBhIHZhbHVlIHdoZW4gc3RyaWN0bHkgZXF1YWxcbiAgICogdG8gdHJ1ZTsgcHJlc2VudCB3aXRoIGEgdmFsdWUgb3RoZXJ3aXNlLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZToge30sXG5cbiAgLyoqXG4gICAqIEFsbCBvZiB0aGUgaXNDdXN0b21BdHRyaWJ1dGUoKSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gaW5qZWN0ZWQuXG4gICAqL1xuICBfaXNDdXN0b21BdHRyaWJ1dGVGdW5jdGlvbnM6IFtdLFxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHByb3BlcnR5IG5hbWUgaXMgYSBjdXN0b20gYXR0cmlidXRlLlxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBpc0N1c3RvbUF0dHJpYnV0ZTogZnVuY3Rpb24oYXR0cmlidXRlTmFtZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRE9NUHJvcGVydHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXNDdXN0b21BdHRyaWJ1dGVGbiA9IERPTVByb3BlcnR5Ll9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uc1tpXTtcbiAgICAgIGlmIChpc0N1c3RvbUF0dHJpYnV0ZUZuKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlZmF1bHQgcHJvcGVydHkgdmFsdWUgZm9yIGEgRE9NIHByb3BlcnR5IChpLmUuLCBub3QgYW5cbiAgICogYXR0cmlidXRlKS4gTW9zdCBkZWZhdWx0IHZhbHVlcyBhcmUgJycgb3IgZmFsc2UsIGJ1dCBub3QgYWxsLiBXb3JzZSB5ZXQsXG4gICAqIHNvbWUgKGluIHBhcnRpY3VsYXIsIGB0eXBlYCkgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgZWxlbWVudC5cbiAgICpcbiAgICogVE9ETzogSXMgaXQgYmV0dGVyIHRvIGdyYWIgYWxsIHRoZSBwb3NzaWJsZSBwcm9wZXJ0aWVzIHdoZW4gY3JlYXRpbmcgYW5cbiAgICogZWxlbWVudCB0byBhdm9pZCBoYXZpbmcgdG8gY3JlYXRlIHRoZSBzYW1lIGVsZW1lbnQgdHdpY2U/XG4gICAqL1xuICBnZXREZWZhdWx0VmFsdWVGb3JQcm9wZXJ0eTogZnVuY3Rpb24obm9kZU5hbWUsIHByb3ApIHtcbiAgICB2YXIgbm9kZURlZmF1bHRzID0gZGVmYXVsdFZhbHVlQ2FjaGVbbm9kZU5hbWVdO1xuICAgIHZhciB0ZXN0RWxlbWVudDtcbiAgICBpZiAoIW5vZGVEZWZhdWx0cykge1xuICAgICAgZGVmYXVsdFZhbHVlQ2FjaGVbbm9kZU5hbWVdID0gbm9kZURlZmF1bHRzID0ge307XG4gICAgfVxuICAgIGlmICghKHByb3AgaW4gbm9kZURlZmF1bHRzKSkge1xuICAgICAgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKTtcbiAgICAgIG5vZGVEZWZhdWx0c1twcm9wXSA9IHRlc3RFbGVtZW50W3Byb3BdO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZURlZmF1bHRzW3Byb3BdO1xuICB9LFxuXG4gIGluamVjdGlvbjogRE9NUHJvcGVydHlJbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRE9NUHJvcGVydHk7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSRTlOVUhKdmNHVnlkSGt1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkVUMDFRY205d1pYSjBlVnh1SUNvZ1FIUjVjR1ZqYUdWamEzTWdjM1JoZEdsakxXOXViSGxjYmlBcUwxeHVYRzR2S21wemJHbHVkQ0JpYVhSM2FYTmxPaUIwY25WbElDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1Wm5WdVkzUnBiMjRnWTJobFkydE5ZWE5yS0haaGJIVmxMQ0JpYVhSdFlYTnJLU0I3WEc0Z0lISmxkSFZ5YmlBb2RtRnNkV1VnSmlCaWFYUnRZWE5yS1NBOVBUMGdZbWwwYldGemF6dGNibjFjYmx4dWRtRnlJRVJQVFZCeWIzQmxjblI1U1c1cVpXTjBhVzl1SUQwZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nVFdGd2NHbHVaeUJtY205dElHNXZjbTFoYkdsNlpXUXNJR05oYldWc1kyRnpaV1FnY0hKdmNHVnlkSGtnYm1GdFpYTWdkRzhnWVNCamIyNW1hV2QxY21GMGFXOXVJSFJvWVhSY2JpQWdJQ29nYzNCbFkybG1hV1Z6SUdodmR5QjBhR1VnWVhOemIyTnBZWFJsWkNCRVQwMGdjSEp2Y0dWeWRIa2djMmh2ZFd4a0lHSmxJR0ZqWTJWemMyVmtJRzl5SUhKbGJtUmxjbVZrTGx4dUlDQWdLaTljYmlBZ1RWVlRWRjlWVTBWZlFWUlVVa2xDVlZSRk9pQXdlREVzWEc0Z0lFMVZVMVJmVlZORlgxQlNUMUJGVWxSWk9pQXdlRElzWEc0Z0lFaEJVMTlUU1VSRlgwVkdSa1ZEVkZNNklEQjROQ3hjYmlBZ1NFRlRYMEpQVDB4RlFVNWZWa0ZNVlVVNklEQjRPQ3hjYmlBZ1NFRlRYMDVWVFVWU1NVTmZWa0ZNVlVVNklEQjRNVEFzWEc0Z0lFaEJVMTlRVDFOSlZFbFdSVjlPVlUxRlVrbERYMVpCVEZWRk9pQXdlREl3SUh3Z01IZ3hNQ3hjYmlBZ1NFRlRYMDlXUlZKTVQwRkVSVVJmUWs5UFRFVkJUbDlXUVV4VlJUb2dNSGcwTUN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nU1c1cVpXTjBJSE52YldVZ2MzQmxZMmxoYkdsNlpXUWdhMjV2ZDJ4bFpHZGxJR0ZpYjNWMElIUm9aU0JFVDAwdUlGUm9hWE1nZEdGclpYTWdZU0JqYjI1bWFXY2diMkpxWldOMFhHNGdJQ0FxSUhkcGRHZ2dkR2hsSUdadmJHeHZkMmx1WnlCd2NtOXdaWEowYVdWek9seHVJQ0FnS2x4dUlDQWdLaUJwYzBOMWMzUnZiVUYwZEhKcFluVjBaVG9nWm5WdVkzUnBiMjRnZEdoaGRDQm5hWFpsYmlCaGJpQmhkSFJ5YVdKMWRHVWdibUZ0WlNCM2FXeHNJSEpsZEhWeWJpQjBjblZsWEc0Z0lDQXFJR2xtSUdsMElHTmhiaUJpWlNCcGJuTmxjblJsWkNCcGJuUnZJSFJvWlNCRVQwMGdkbVZ5WW1GMGFXMHVJRlZ6WldaMWJDQm1iM0lnWkdGMFlTMHFJRzl5SUdGeWFXRXRLbHh1SUNBZ0tpQmhkSFJ5YVdKMWRHVnpJSGRvWlhKbElHbDBKM01nYVcxd2IzTnphV0pzWlNCMGJ5QmxiblZ0WlhKaGRHVWdZV3hzSUc5bUlIUm9aU0J3YjNOemFXSnNaVnh1SUNBZ0tpQmhkSFJ5YVdKMWRHVWdibUZ0WlhNc1hHNGdJQ0FxWEc0Z0lDQXFJRkJ5YjNCbGNuUnBaWE02SUc5aWFtVmpkQ0J0WVhCd2FXNW5JRVJQVFNCd2NtOXdaWEowZVNCdVlXMWxJSFJ2SUc5dVpTQnZaaUIwYUdWY2JpQWdJQ29nUkU5TlVISnZjR1Z5ZEhsSmJtcGxZM1JwYjI0Z1kyOXVjM1JoYm5SeklHOXlJRzUxYkd3dUlFbG1JSGx2ZFhJZ1lYUjBjbWxpZFhSbElHbHpiaWQwSUdsdUlHaGxjbVVzWEc0Z0lDQXFJR2wwSUhkdmJpZDBJR2RsZENCM2NtbDBkR1Z1SUhSdklIUm9aU0JFVDAwdVhHNGdJQ0FxWEc0Z0lDQXFJRVJQVFVGMGRISnBZblYwWlU1aGJXVnpPaUJ2WW1wbFkzUWdiV0Z3Y0dsdVp5QlNaV0ZqZENCaGRIUnlhV0oxZEdVZ2JtRnRaU0IwYnlCMGFHVWdSRTlOWEc0Z0lDQXFJR0YwZEhKcFluVjBaU0J1WVcxbExpQkJkSFJ5YVdKMWRHVWdibUZ0WlhNZ2JtOTBJSE53WldOcFptbGxaQ0IxYzJVZ2RHaGxJQ29xYkc5M1pYSmpZWE5sS2lwY2JpQWdJQ29nYm05eWJXRnNhWHBsWkNCdVlXMWxMbHh1SUNBZ0tseHVJQ0FnS2lCRVQwMVFjbTl3WlhKMGVVNWhiV1Z6T2lCemFXMXBiR0Z5SUhSdklFUlBUVUYwZEhKcFluVjBaVTVoYldWeklHSjFkQ0JtYjNJZ1JFOU5JSEJ5YjNCbGNuUnBaWE11WEc0Z0lDQXFJRkJ5YjNCbGNuUjVJRzVoYldWeklHNXZkQ0J6Y0dWamFXWnBaV1FnZFhObElIUm9aU0J1YjNKdFlXeHBlbVZrSUc1aGJXVXVYRzRnSUNBcVhHNGdJQ0FxSUVSUFRVMTFkR0YwYVc5dVRXVjBhRzlrY3pvZ1VISnZjR1Z5ZEdsbGN5QjBhR0YwSUhKbGNYVnBjbVVnYzNCbFkybGhiQ0J0ZFhSaGRHbHZiaUJ0WlhSb2IyUnpMaUJKWmx4dUlDQWdLaUJnZG1Gc2RXVmdJR2x6SUhWdVpHVm1hVzVsWkN3Z2RHaGxJRzExZEdGMGFXOXVJRzFsZEdodlpDQnphRzkxYkdRZ2RXNXpaWFFnZEdobElIQnliM0JsY25SNUxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdaRzl0VUhKdmNHVnlkSGxEYjI1bWFXY2dkR2hsSUdOdmJtWnBaeUJoY3lCa1pYTmpjbWxpWldRZ1lXSnZkbVV1WEc0Z0lDQXFMMXh1SUNCcGJtcGxZM1JFVDAxUWNtOXdaWEowZVVOdmJtWnBaem9nWm5WdVkzUnBiMjRvWkc5dFVISnZjR1Z5ZEhsRGIyNW1hV2NwSUh0Y2JpQWdJQ0IyWVhJZ1VISnZjR1Z5ZEdsbGN5QTlJR1J2YlZCeWIzQmxjblI1UTI5dVptbG5MbEJ5YjNCbGNuUnBaWE1nZkh3Z2UzMDdYRzRnSUNBZ2RtRnlJRVJQVFVGMGRISnBZblYwWlU1aGJXVnpJRDBnWkc5dFVISnZjR1Z5ZEhsRGIyNW1hV2N1UkU5TlFYUjBjbWxpZFhSbFRtRnRaWE1nZkh3Z2UzMDdYRzRnSUNBZ2RtRnlJRVJQVFZCeWIzQmxjblI1VG1GdFpYTWdQU0JrYjIxUWNtOXdaWEowZVVOdmJtWnBaeTVFVDAxUWNtOXdaWEowZVU1aGJXVnpJSHg4SUh0OU8xeHVJQ0FnSUhaaGNpQkVUMDFOZFhSaGRHbHZiazFsZEdodlpITWdQU0JrYjIxUWNtOXdaWEowZVVOdmJtWnBaeTVFVDAxTmRYUmhkR2x2YmsxbGRHaHZaSE1nZkh3Z2UzMDdYRzVjYmlBZ0lDQnBaaUFvWkc5dFVISnZjR1Z5ZEhsRGIyNW1hV2N1YVhORGRYTjBiMjFCZEhSeWFXSjFkR1VwSUh0Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxsOXBjME4xYzNSdmJVRjBkSEpwWW5WMFpVWjFibU4wYVc5dWN5NXdkWE5vS0Z4dUlDQWdJQ0FnSUNCa2IyMVFjbTl3WlhKMGVVTnZibVpwWnk1cGMwTjFjM1J2YlVGMGRISnBZblYwWlZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3Y205d1RtRnRaU0JwYmlCUWNtOXdaWEowYVdWektTQjdYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQWhSRTlOVUhKdmNHVnlkSGt1YVhOVGRHRnVaR0Z5WkU1aGJXVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRTVoYldVcExGeHVJQ0FnSUNBZ0lDQW5hVzVxWldOMFJFOU5VSEp2Y0dWeWRIbERiMjVtYVdjb0xpNHVLVG9nV1c5MVhGd25jbVVnZEhKNWFXNW5JSFJ2SUdsdWFtVmpkQ0JFVDAwZ2NISnZjR1Z5ZEhrZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RjWENjbGMxeGNKeUIzYUdsamFDQm9ZWE1nWVd4eVpXRmtlU0JpWldWdUlHbHVhbVZqZEdWa0xpQlpiM1VnYldGNUlHSmxJR0ZqWTJsa1pXNTBZV3hzZVNBbklDdGNiaUFnSUNBZ0lDQWdKMmx1YW1WamRHbHVaeUIwYUdVZ2MyRnRaU0JFVDAwZ2NISnZjR1Z5ZEhrZ1kyOXVabWxuSUhSM2FXTmxMQ0J2Y2lCNWIzVWdiV0Y1SUdKbElDY2dLMXh1SUNBZ0lDQWdJQ0FuYVc1cVpXTjBhVzVuSUhSM2J5QmpiMjVtYVdkeklIUm9ZWFFnYUdGMlpTQmpiMjVtYkdsamRHbHVaeUJ3Y205d1pYSjBlU0J1WVcxbGN5NG5MRnh1SUNBZ0lDQWdJQ0J3Y205d1RtRnRaVnh1SUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENnaFJFOU5VSEp2Y0dWeWRIa3VhWE5UZEdGdVpHRnlaRTVoYldVdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwS1NrN1hHNWNiaUFnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWx6VTNSaGJtUmhjbVJPWVcxbFczQnliM0JPWVcxbFhTQTlJSFJ5ZFdVN1hHNWNiaUFnSUNBZ0lIWmhjaUJzYjNkbGNrTmhjMlZrSUQwZ2NISnZjRTVoYldVdWRHOU1iM2RsY2tOaGMyVW9LVHRjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1kbGRGQnZjM05wWW14bFUzUmhibVJoY21ST1lXMWxXMnh2ZDJWeVEyRnpaV1JkSUQwZ2NISnZjRTVoYldVN1hHNWNiaUFnSUNBZ0lHbG1JQ2hFVDAxQmRIUnlhV0oxZEdWT1lXMWxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdjbTl3VG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHRjBkSEpwWW5WMFpVNWhiV1VnUFNCRVQwMUJkSFJ5YVdKMWRHVk9ZVzFsYzF0d2NtOXdUbUZ0WlYwN1hHNGdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWRsZEZCdmMzTnBZbXhsVTNSaGJtUmhjbVJPWVcxbFcyRjBkSEpwWW5WMFpVNWhiV1ZkSUQwZ2NISnZjRTVoYldVN1hHNGdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWRsZEVGMGRISnBZblYwWlU1aGJXVmJjSEp2Y0U1aGJXVmRJRDBnWVhSMGNtbGlkWFJsVG1GdFpUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWRsZEVGMGRISnBZblYwWlU1aGJXVmJjSEp2Y0U1aGJXVmRJRDBnYkc5M1pYSkRZWE5sWkR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VaMlYwVUhKdmNHVnlkSGxPWVcxbFczQnliM0JPWVcxbFhTQTlYRzRnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1VG1GdFpYTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRTVoYldVcElEOWNiaUFnSUNBZ0lDQWdJQ0JFVDAxUWNtOXdaWEowZVU1aGJXVnpXM0J5YjNCT1lXMWxYU0E2WEc0Z0lDQWdJQ0FnSUNBZ2NISnZjRTVoYldVN1hHNWNiaUFnSUNBZ0lHbG1JQ2hFVDAxTmRYUmhkR2x2YmsxbGRHaHZaSE11YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0U1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUVSUFRWQnliM0JsY25SNUxtZGxkRTExZEdGMGFXOXVUV1YwYUc5a1czQnliM0JPWVcxbFhTQTlJRVJQVFUxMWRHRjBhVzl1VFdWMGFHOWtjMXR3Y205d1RtRnRaVjA3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JFVDAxUWNtOXdaWEowZVM1blpYUk5kWFJoZEdsdmJrMWxkR2h2WkZ0d2NtOXdUbUZ0WlYwZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCMllYSWdjSEp2Y0VOdmJtWnBaeUE5SUZCeWIzQmxjblJwWlhOYmNISnZjRTVoYldWZE8xeHVJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3ViWFZ6ZEZWelpVRjBkSEpwWW5WMFpWdHdjbTl3VG1GdFpWMGdQVnh1SUNBZ0lDQWdJQ0JqYUdWamEwMWhjMnNvY0hKdmNFTnZibVpwWnl3Z1JFOU5VSEp2Y0dWeWRIbEpibXBsWTNScGIyNHVUVlZUVkY5VlUwVmZRVlJVVWtsQ1ZWUkZLVHRjYmlBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG0xMWMzUlZjMlZRY205d1pYSjBlVnR3Y205d1RtRnRaVjBnUFZ4dUlDQWdJQ0FnSUNCamFHVmphMDFoYzJzb2NISnZjRU52Ym1acFp5d2dSRTlOVUhKdmNHVnlkSGxKYm1wbFkzUnBiMjR1VFZWVFZGOVZVMFZmVUZKUFVFVlNWRmtwTzF4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdWFHRnpVMmxrWlVWbVptVmpkSE5iY0hKdmNFNWhiV1ZkSUQxY2JpQWdJQ0FnSUNBZ1kyaGxZMnROWVhOcktIQnliM0JEYjI1bWFXY3NJRVJQVFZCeWIzQmxjblI1U1c1cVpXTjBhVzl1TGtoQlUxOVRTVVJGWDBWR1JrVkRWRk1wTzF4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdWFHRnpRbTl2YkdWaGJsWmhiSFZsVzNCeWIzQk9ZVzFsWFNBOVhHNGdJQ0FnSUNBZ0lHTm9aV05yVFdGemF5aHdjbTl3UTI5dVptbG5MQ0JFVDAxUWNtOXdaWEowZVVsdWFtVmpkR2x2Ymk1SVFWTmZRazlQVEVWQlRsOVdRVXhWUlNrN1hHNGdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVTNW9ZWE5PZFcxbGNtbGpWbUZzZFdWYmNISnZjRTVoYldWZElEMWNiaUFnSUNBZ0lDQWdZMmhsWTJ0TllYTnJLSEJ5YjNCRGIyNW1hV2NzSUVSUFRWQnliM0JsY25SNVNXNXFaV04wYVc5dUxraEJVMTlPVlUxRlVrbERYMVpCVEZWRktUdGNiaUFnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWhoYzFCdmMybDBhWFpsVG5WdFpYSnBZMVpoYkhWbFczQnliM0JPWVcxbFhTQTlYRzRnSUNBZ0lDQWdJR05vWldOclRXRnpheWh3Y205d1EyOXVabWxuTENCRVQwMVFjbTl3WlhKMGVVbHVhbVZqZEdsdmJpNUlRVk5mVUU5VFNWUkpWa1ZmVGxWTlJWSkpRMTlXUVV4VlJTazdYRzRnSUNBZ0lDQkVUMDFRY205d1pYSjBlUzVvWVhOUGRtVnliRzloWkdWa1FtOXZiR1ZoYmxaaGJIVmxXM0J5YjNCT1lXMWxYU0E5WEc0Z0lDQWdJQ0FnSUdOb1pXTnJUV0Z6YXlod2NtOXdRMjl1Wm1sbkxDQkVUMDFRY205d1pYSjBlVWx1YW1WamRHbHZiaTVJUVZOZlQxWkZVa3hQUVVSRlJGOUNUMDlNUlVGT1gxWkJURlZGS1R0Y2JseHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lVUlBUVkJ5YjNCbGNuUjVMbTExYzNSVmMyVkJkSFJ5YVdKMWRHVmJjSEp2Y0U1aGJXVmRJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lVUlBUVkJ5YjNCbGNuUjVMbTExYzNSVmMyVlFjbTl3WlhKMGVWdHdjbTl3VG1GdFpWMHNYRzRnSUNBZ0lDQWdJQ2RFVDAxUWNtOXdaWEowZVRvZ1EyRnVibTkwSUhKbGNYVnBjbVVnZFhOcGJtY2dZbTkwYUNCaGRIUnlhV0oxZEdVZ1lXNWtJSEJ5YjNCbGNuUjVPaUFsY3ljc1hHNGdJQ0FnSUNBZ0lIQnliM0JPWVcxbFhHNGdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLQ0ZFVDAxUWNtOXdaWEowZVM1dGRYTjBWWE5sUVhSMGNtbGlkWFJsVzNCeWIzQk9ZVzFsWFNCOGZGeHVJQ0FnSUNBZ0lDQWhSRTlOVUhKdmNHVnlkSGt1YlhWemRGVnpaVkJ5YjNCbGNuUjVXM0J5YjNCT1lXMWxYU2twTzF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdWJYVnpkRlZ6WlZCeWIzQmxjblI1VzNCeWIzQk9ZVzFsWFNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0ZFVDAxUWNtOXdaWEowZVM1b1lYTlRhV1JsUldabVpXTjBjMXR3Y205d1RtRnRaVjBzWEc0Z0lDQWdJQ0FnSUNkRVQwMVFjbTl3WlhKMGVUb2dVSEp2Y0dWeWRHbGxjeUIwYUdGMElHaGhkbVVnYzJsa1pTQmxabVpsWTNSeklHMTFjM1FnZFhObElIQnliM0JsY25SNU9pQWxjeWNzWEc0Z0lDQWdJQ0FnSUhCeWIzQk9ZVzFsWEc0Z0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtFUlBUVkJ5YjNCbGNuUjVMbTExYzNSVmMyVlFjbTl3WlhKMGVWdHdjbTl3VG1GdFpWMGdmSHhjYmlBZ0lDQWdJQ0FnSVVSUFRWQnliM0JsY25SNUxtaGhjMU5wWkdWRlptWmxZM1J6VzNCeWIzQk9ZVzFsWFNrcE8xeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lTRkVUMDFRY205d1pYSjBlUzVvWVhOQ2IyOXNaV0Z1Vm1Gc2RXVmJjSEp2Y0U1aGJXVmRJQ3RjYmlBZ0lDQWdJQ0FnSUNBaElVUlBUVkJ5YjNCbGNuUjVMbWhoYzA1MWJXVnlhV05XWVd4MVpWdHdjbTl3VG1GdFpWMGdLMXh1SUNBZ0lDQWdJQ0FnSUNFaFJFOU5VSEp2Y0dWeWRIa3VhR0Z6VDNabGNteHZZV1JsWkVKdmIyeGxZVzVXWVd4MVpWdHdjbTl3VG1GdFpWMGdQRDBnTVN4Y2JpQWdJQ0FnSUNBZ0owUlBUVkJ5YjNCbGNuUjVPaUJXWVd4MVpTQmpZVzRnWW1VZ2IyNWxJRzltSUdKdmIyeGxZVzRzSUc5MlpYSnNiMkZrWldRZ1ltOXZiR1ZoYml3Z2IzSWdKeUFyWEc0Z0lDQWdJQ0FnSUNkdWRXMWxjbWxqSUhaaGJIVmxMQ0JpZFhRZ2JtOTBJR0VnWTI5dFltbHVZWFJwYjI0NklDVnpKeXhjYmlBZ0lDQWdJQ0FnY0hKdmNFNWhiV1ZjYmlBZ0lDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lTRkVUMDFRY205d1pYSjBlUzVvWVhOQ2IyOXNaV0Z1Vm1Gc2RXVmJjSEp2Y0U1aGJXVmRJQ3RjYmlBZ0lDQWdJQ0FnSVNGRVQwMVFjbTl3WlhKMGVTNW9ZWE5PZFcxbGNtbGpWbUZzZFdWYmNISnZjRTVoYldWZElDdGNiaUFnSUNBZ0lDQWdJU0ZFVDAxUWNtOXdaWEowZVM1b1lYTlBkbVZ5Ykc5aFpHVmtRbTl2YkdWaGJsWmhiSFZsVzNCeWIzQk9ZVzFsWFNBOFBTQXhLU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNTlPMXh1ZG1GeUlHUmxabUYxYkhSV1lXeDFaVU5oWTJobElEMGdlMzA3WEc1Y2JpOHFLbHh1SUNvZ1JFOU5VSEp2Y0dWeWRIa2daWGh3YjNKMGN5QnNiMjlyZFhBZ2IySnFaV04wY3lCMGFHRjBJR05oYmlCaVpTQjFjMlZrSUd4cGEyVWdablZ1WTNScGIyNXpPbHh1SUNwY2JpQXFJQ0FnUGlCRVQwMVFjbTl3WlhKMGVTNXBjMVpoYkdsa1d5ZHBaQ2RkWEc0Z0tpQWdJSFJ5ZFdWY2JpQXFJQ0FnUGlCRVQwMVFjbTl3WlhKMGVTNXBjMVpoYkdsa1d5ZG1iMjlpWVhJblhWeHVJQ29nSUNCMWJtUmxabWx1WldSY2JpQXFYRzRnS2lCQmJIUm9iM1ZuYUNCMGFHbHpJRzFoZVNCaVpTQmpiMjVtZFhOcGJtY3NJR2wwSUhCbGNtWnZjbTF6SUdKbGRIUmxjaUJwYmlCblpXNWxjbUZzTGx4dUlDcGNiaUFxSUVCelpXVWdhSFIwY0RvdkwycHpjR1Z5Wmk1amIyMHZhMlY1TFdWNGFYTjBjMXh1SUNvZ1FITmxaU0JvZEhSd09pOHZhbk53WlhKbUxtTnZiUzlyWlhrdGJXbHpjMmx1WjF4dUlDb3ZYRzUyWVhJZ1JFOU5VSEp2Y0dWeWRIa2dQU0I3WEc1Y2JpQWdTVVJmUVZSVVVrbENWVlJGWDA1QlRVVTZJQ2RrWVhSaExYSmxZV04wYVdRbkxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGFHVmphM01nZDJobGRHaGxjaUJoSUhCeWIzQmxjblI1SUc1aGJXVWdhWE1nWVNCemRHRnVaR0Z5WkNCd2NtOXdaWEowZVM1Y2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJR2x6VTNSaGJtUmhjbVJPWVcxbE9pQjdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUV0Z3Y0dsdVp5Qm1jbTl0SUd4dmQyVnlZMkZ6WlNCd2NtOXdaWEowZVNCdVlXMWxjeUIwYnlCMGFHVWdjSEp2Y0dWeWJIa2dZMkZ6WldRZ2RtVnljMmx2Yml3Z2RYTmxaRnh1SUNBZ0tpQjBieUIzWVhKdUlHbHVJSFJvWlNCallYTmxJRzltSUcxcGMzTnBibWNnY0hKdmNHVnlkR2xsY3k1Y2JpQWdJQ29nUUhSNWNHVWdlMDlpYW1WamRIMWNiaUFnSUNvdlhHNGdJR2RsZEZCdmMzTnBZbXhsVTNSaGJtUmhjbVJPWVcxbE9pQjdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUV0Z3Y0dsdVp5Qm1jbTl0SUc1dmNtMWhiR2w2WldRZ2JtRnRaWE1nZEc4Z1lYUjBjbWxpZFhSbElHNWhiV1Z6SUhSb1lYUWdaR2xtWm1WeUxpQkJkSFJ5YVdKMWRHVmNiaUFnSUNvZ2JtRnRaWE1nWVhKbElIVnpaV1FnZDJobGJpQnlaVzVrWlhKcGJtY2diV0Z5YTNWd0lHOXlJSGRwZEdnZ1lDcEJkSFJ5YVdKMWRHVW9LV0F1WEc0Z0lDQXFJRUIwZVhCbElIdFBZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQm5aWFJCZEhSeWFXSjFkR1ZPWVcxbE9pQjdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUV0Z3Y0dsdVp5Qm1jbTl0SUc1dmNtMWhiR2w2WldRZ2JtRnRaWE1nZEc4Z2NISnZjR1Z5ZEdsbGN5QnZiaUJFVDAwZ2JtOWtaU0JwYm5OMFlXNWpaWE11WEc0Z0lDQXFJQ2hVYUdseklHbHVZMngxWkdWeklIQnliM0JsY25ScFpYTWdkR2hoZENCdGRYUmhkR1VnWkhWbElIUnZJR1Y0ZEdWeWJtRnNJR1poWTNSdmNuTXVLVnh1SUNBZ0tpQkFkSGx3WlNCN1QySnFaV04wZlZ4dUlDQWdLaTljYmlBZ1oyVjBVSEp2Y0dWeWRIbE9ZVzFsT2lCN2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1RXRndjR2x1WnlCbWNtOXRJRzV2Y20xaGJHbDZaV1FnYm1GdFpYTWdkRzhnYlhWMFlYUnBiMjRnYldWMGFHOWtjeTRnVkdocGN5QjNhV3hzSUc5dWJIa2daWGhwYzNRZ2FXWmNiaUFnSUNvZ2JYVjBZWFJwYjI0Z1kyRnVibTkwSUdKbElITmxkQ0J6YVcxd2JIa2dZbmtnZEdobElIQnliM0JsY25SNUlHOXlJR0J6WlhSQmRIUnlhV0oxZEdVb0tXQXVYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCblpYUk5kWFJoZEdsdmJrMWxkR2h2WkRvZ2UzMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGZG9aWFJvWlhJZ2RHaGxJSEJ5YjNCbGNuUjVJRzExYzNRZ1ltVWdZV05qWlhOelpXUWdZVzVrSUcxMWRHRjBaV1FnWVhNZ1lXNGdiMkpxWldOMElIQnliM0JsY25SNUxseHVJQ0FnS2lCQWRIbHdaU0I3VDJKcVpXTjBmVnh1SUNBZ0tpOWNiaUFnYlhWemRGVnpaVUYwZEhKcFluVjBaVG9nZTMwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZkb1pYUm9aWElnZEdobElIQnliM0JsY25SNUlHMTFjM1FnWW1VZ1lXTmpaWE56WldRZ1lXNWtJRzExZEdGMFpXUWdkWE5wYm1jZ1lDcEJkSFJ5YVdKMWRHVW9LV0F1WEc0Z0lDQXFJQ2hVYUdseklHbHVZMngxWkdWeklHRnVlWFJvYVc1bklIUm9ZWFFnWm1GcGJITWdZRHh3Y205d1RtRnRaVDRnYVc0Z1BHVnNaVzFsYm5RK1lDNHBYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCdGRYTjBWWE5sVUhKdmNHVnlkSGs2SUh0OUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCWGFHVjBhR1Z5SUc5eUlHNXZkQ0J6WlhSMGFXNW5JR0VnZG1Gc2RXVWdZMkYxYzJWeklITnBaR1VnWldabVpXTjBjeUJ6ZFdOb0lHRnpJSFJ5YVdkblpYSnBibWRjYmlBZ0lDb2djbVZ6YjNWeVkyVnpJSFJ2SUdKbElHeHZZV1JsWkNCdmNpQjBaWGgwSUhObGJHVmpkR2x2YmlCamFHRnVaMlZ6TGlCWFpTQnRkWE4wSUdWdWMzVnlaU0IwYUdGMFhHNGdJQ0FxSUhSb1pTQjJZV3gxWlNCcGN5QnZibXg1SUhObGRDQnBaaUJwZENCb1lYTWdZMmhoYm1kbFpDNWNiaUFnSUNvZ1FIUjVjR1VnZTA5aWFtVmpkSDFjYmlBZ0lDb3ZYRzRnSUdoaGMxTnBaR1ZGWm1abFkzUnpPaUI3ZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVjJobGRHaGxjaUIwYUdVZ2NISnZjR1Z5ZEhrZ2MyaHZkV3hrSUdKbElISmxiVzkyWldRZ2QyaGxiaUJ6WlhRZ2RHOGdZU0JtWVd4elpYa2dkbUZzZFdVdVhHNGdJQ0FxSUVCMGVYQmxJSHRQWW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0JvWVhOQ2IyOXNaV0Z1Vm1Gc2RXVTZJSHQ5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJYYUdWMGFHVnlJSFJvWlNCd2NtOXdaWEowZVNCdGRYTjBJR0psSUc1MWJXVnlhV01nYjNJZ2NHRnljMlVnWVhNZ1lWeHVJQ0FnS2lCdWRXMWxjbWxqSUdGdVpDQnphRzkxYkdRZ1ltVWdjbVZ0YjNabFpDQjNhR1Z1SUhObGRDQjBieUJoSUdaaGJITmxlU0IyWVd4MVpTNWNiaUFnSUNvZ1FIUjVjR1VnZTA5aWFtVmpkSDFjYmlBZ0lDb3ZYRzRnSUdoaGMwNTFiV1Z5YVdOV1lXeDFaVG9nZTMwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZkb1pYUm9aWElnZEdobElIQnliM0JsY25SNUlHMTFjM1FnWW1VZ2NHOXphWFJwZG1VZ2JuVnRaWEpwWXlCdmNpQndZWEp6WlNCaGN5QmhJSEJ2YzJsMGFYWmxYRzRnSUNBcUlHNTFiV1Z5YVdNZ1lXNWtJSE5vYjNWc1pDQmlaU0J5WlcxdmRtVmtJSGRvWlc0Z2MyVjBJSFJ2SUdFZ1ptRnNjMlY1SUhaaGJIVmxMbHh1SUNBZ0tpQkFkSGx3WlNCN1QySnFaV04wZlZ4dUlDQWdLaTljYmlBZ2FHRnpVRzl6YVhScGRtVk9kVzFsY21salZtRnNkV1U2SUh0OUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCWGFHVjBhR1Z5SUhSb1pTQndjbTl3WlhKMGVTQmpZVzRnWW1VZ2RYTmxaQ0JoY3lCaElHWnNZV2NnWVhNZ2QyVnNiQ0JoY3lCM2FYUm9JR0VnZG1Gc2RXVXVJRkpsYlc5MlpXUmNiaUFnSUNvZ2QyaGxiaUJ6ZEhKcFkzUnNlU0JsY1hWaGJDQjBieUJtWVd4elpUc2djSEpsYzJWdWRDQjNhWFJvYjNWMElHRWdkbUZzZFdVZ2QyaGxiaUJ6ZEhKcFkzUnNlU0JsY1hWaGJGeHVJQ0FnS2lCMGJ5QjBjblZsT3lCd2NtVnpaVzUwSUhkcGRHZ2dZU0IyWVd4MVpTQnZkR2hsY25kcGMyVXVYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCb1lYTlBkbVZ5Ykc5aFpHVmtRbTl2YkdWaGJsWmhiSFZsT2lCN2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FXeHNJRzltSUhSb1pTQnBjME4xYzNSdmJVRjBkSEpwWW5WMFpTZ3BJR1oxYm1OMGFXOXVjeUIwYUdGMElHaGhkbVVnWW1WbGJpQnBibXBsWTNSbFpDNWNiaUFnSUNvdlhHNGdJRjlwYzBOMWMzUnZiVUYwZEhKcFluVjBaVVoxYm1OMGFXOXVjem9nVzEwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOb1pXTnJjeUIzYUdWMGFHVnlJR0VnY0hKdmNHVnlkSGtnYm1GdFpTQnBjeUJoSUdOMWMzUnZiU0JoZEhSeWFXSjFkR1V1WEc0Z0lDQXFJRUJ0WlhSb2IyUmNiaUFnSUNvdlhHNGdJR2x6UTNWemRHOXRRWFIwY21saWRYUmxPaUJtZFc1amRHbHZiaWhoZEhSeWFXSjFkR1ZPWVcxbEtTQjdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQkVUMDFRY205d1pYSjBlUzVmYVhORGRYTjBiMjFCZEhSeWFXSjFkR1ZHZFc1amRHbHZibk11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNBZ0lIWmhjaUJwYzBOMWMzUnZiVUYwZEhKcFluVjBaVVp1SUQwZ1JFOU5VSEp2Y0dWeWRIa3VYMmx6UTNWemRHOXRRWFIwY21saWRYUmxSblZ1WTNScGIyNXpXMmxkTzF4dUlDQWdJQ0FnYVdZZ0tHbHpRM1Z6ZEc5dFFYUjBjbWxpZFhSbFJtNG9ZWFIwY21saWRYUmxUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUnlkV1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVjBkWEp1Y3lCMGFHVWdaR1ZtWVhWc2RDQndjbTl3WlhKMGVTQjJZV3gxWlNCbWIzSWdZU0JFVDAwZ2NISnZjR1Z5ZEhrZ0tHa3VaUzRzSUc1dmRDQmhibHh1SUNBZ0tpQmhkSFJ5YVdKMWRHVXBMaUJOYjNOMElHUmxabUYxYkhRZ2RtRnNkV1Z6SUdGeVpTQW5KeUJ2Y2lCbVlXeHpaU3dnWW5WMElHNXZkQ0JoYkd3dUlGZHZjbk5sSUhsbGRDeGNiaUFnSUNvZ2MyOXRaU0FvYVc0Z2NHRnlkR2xqZFd4aGNpd2dZSFI1Y0dWZ0tTQjJZWEo1SUdSbGNHVnVaR2x1WnlCdmJpQjBhR1VnZEhsd1pTQnZaaUJsYkdWdFpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCVVQwUlBPaUJKY3lCcGRDQmlaWFIwWlhJZ2RHOGdaM0poWWlCaGJHd2dkR2hsSUhCdmMzTnBZbXhsSUhCeWIzQmxjblJwWlhNZ2QyaGxiaUJqY21WaGRHbHVaeUJoYmx4dUlDQWdLaUJsYkdWdFpXNTBJSFJ2SUdGMmIybGtJR2hoZG1sdVp5QjBieUJqY21WaGRHVWdkR2hsSUhOaGJXVWdaV3hsYldWdWRDQjBkMmxqWlQ5Y2JpQWdJQ292WEc0Z0lHZGxkRVJsWm1GMWJIUldZV3gxWlVadmNsQnliM0JsY25SNU9pQm1kVzVqZEdsdmJpaHViMlJsVG1GdFpTd2djSEp2Y0NrZ2UxeHVJQ0FnSUhaaGNpQnViMlJsUkdWbVlYVnNkSE1nUFNCa1pXWmhkV3gwVm1Gc2RXVkRZV05vWlZ0dWIyUmxUbUZ0WlYwN1hHNGdJQ0FnZG1GeUlIUmxjM1JGYkdWdFpXNTBPMXh1SUNBZ0lHbG1JQ2doYm05a1pVUmxabUYxYkhSektTQjdYRzRnSUNBZ0lDQmtaV1poZFd4MFZtRnNkV1ZEWVdOb1pWdHViMlJsVG1GdFpWMGdQU0J1YjJSbFJHVm1ZWFZzZEhNZ1BTQjdmVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLQ0VvY0hKdmNDQnBiaUJ1YjJSbFJHVm1ZWFZzZEhNcEtTQjdYRzRnSUNBZ0lDQjBaWE4wUld4bGJXVnVkQ0E5SUdSdlkzVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9ibTlrWlU1aGJXVXBPMXh1SUNBZ0lDQWdibTlrWlVSbFptRjFiSFJ6VzNCeWIzQmRJRDBnZEdWemRFVnNaVzFsYm5SYmNISnZjRjA3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdWIyUmxSR1ZtWVhWc2RITmJjSEp2Y0YwN1hHNGdJSDBzWEc1Y2JpQWdhVzVxWldOMGFXOXVPaUJFVDAxUWNtOXdaWEowZVVsdWFtVmpkR2x2Ymx4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JFVDAxUWNtOXdaWEowZVR0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBET01Qcm9wZXJ0eU9wZXJhdGlvbnNcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcblxudmFyIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyID0gcmVxdWlyZShcIi4vcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXJcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbmZ1bmN0aW9uIHNob3VsZElnbm9yZVZhbHVlKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8XG4gICAgKERPTVByb3BlcnR5Lmhhc0Jvb2xlYW5WYWx1ZVtuYW1lXSAmJiAhdmFsdWUpIHx8XG4gICAgKERPTVByb3BlcnR5Lmhhc051bWVyaWNWYWx1ZVtuYW1lXSAmJiBpc05hTih2YWx1ZSkpIHx8XG4gICAgKERPTVByb3BlcnR5Lmhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlW25hbWVdICYmICh2YWx1ZSA8IDEpKSB8fFxuICAgIChET01Qcm9wZXJ0eS5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlW25hbWVdICYmIHZhbHVlID09PSBmYWxzZSk7XG59XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgdmFyIHJlYWN0UHJvcHMgPSB7XG4gICAgY2hpbGRyZW46IHRydWUsXG4gICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHRydWUsXG4gICAga2V5OiB0cnVlLFxuICAgIHJlZjogdHJ1ZVxuICB9O1xuICB2YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xuXG4gIHZhciB3YXJuVW5rbm93blByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGlmIChyZWFjdFByb3BzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHJlYWN0UHJvcHNbbmFtZV0gfHxcbiAgICAgICAgd2FybmVkUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gZGF0YS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb25cbiAgICB2YXIgc3RhbmRhcmROYW1lID0gKFxuICAgICAgRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobG93ZXJDYXNlZE5hbWUpID9cbiAgICAgICAgbG93ZXJDYXNlZE5hbWUgOlxuICAgICAgRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID9cbiAgICAgICAgRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWVbbG93ZXJDYXNlZE5hbWVdIDpcbiAgICAgICAgbnVsbFxuICAgICk7XG5cbiAgICAvLyBGb3Igbm93LCBvbmx5IHdhcm4gd2hlbiB3ZSBoYXZlIGEgc3VnZ2VzdGVkIGNvcnJlY3Rpb24uIFRoaXMgcHJldmVudHNcbiAgICAvLyBsb2dnaW5nIHRvbyBtdWNoIHdoZW4gdXNpbmcgdHJhbnNmZXJQcm9wc1RvLlxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgc3RhbmRhcmROYW1lID09IG51bGwsXG4gICAgICAnVW5rbm93biBET00gcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLFxuICAgICAgbmFtZSxcbiAgICAgIHN0YW5kYXJkTmFtZVxuICAgICkgOiBudWxsKTtcblxuICB9O1xufVxuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBET00gcHJvcGVydGllcy5cbiAqL1xudmFyIERPTVByb3BlcnR5T3BlcmF0aW9ucyA9IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIHRoZSBJRCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFVuZXNjYXBlZCBJRC5cbiAgICogQHJldHVybiB7c3RyaW5nfSBNYXJrdXAgc3RyaW5nLlxuICAgKi9cbiAgY3JlYXRlTWFya3VwRm9ySUQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgcmV0dXJuIERPTVByb3BlcnR5LklEX0FUVFJJQlVURV9OQU1FICsgJz0nICtcbiAgICAgIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKGlkKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIGEgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybiB7P3N0cmluZ30gTWFya3VwIHN0cmluZywgb3IgbnVsbCBpZiB0aGUgcHJvcGVydHkgd2FzIGludmFsaWQuXG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbbmFtZV0pIHtcbiAgICAgIGlmIChzaG91bGRJZ25vcmVWYWx1ZShuYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBET01Qcm9wZXJ0eS5nZXRBdHRyaWJ1dGVOYW1lW25hbWVdO1xuICAgICAgaWYgKERPTVByb3BlcnR5Lmhhc0Jvb2xlYW5WYWx1ZVtuYW1lXSB8fFxuICAgICAgICAgIChET01Qcm9wZXJ0eS5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlW25hbWVdICYmIHZhbHVlID09PSB0cnVlKSkge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lICsgJz0nICsgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuYW1lICsgJz0nICsgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB3YXJuVW5rbm93blByb3BlcnR5KG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKi9cbiAgc2V0VmFsdWVGb3JQcm9wZXJ0eTogZnVuY3Rpb24obm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbbmFtZV0pIHtcbiAgICAgIHZhciBtdXRhdGlvbk1ldGhvZCA9IERPTVByb3BlcnR5LmdldE11dGF0aW9uTWV0aG9kW25hbWVdO1xuICAgICAgaWYgKG11dGF0aW9uTWV0aG9kKSB7XG4gICAgICAgIG11dGF0aW9uTWV0aG9kKG5vZGUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkSWdub3JlVmFsdWUobmFtZSwgdmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkubXVzdFVzZUF0dHJpYnV0ZVtuYW1lXSkge1xuICAgICAgICAvLyBgc2V0QXR0cmlidXRlYCB3aXRoIG9iamVjdHMgYmVjb21lcyBvbmx5IGBbb2JqZWN0XWAgaW4gSUU4LzksXG4gICAgICAgIC8vICgnJyArIHZhbHVlKSBtYWtlcyBpdCBvdXRwdXQgdGhlIGNvcnJlY3QgdG9TdHJpbmcoKS12YWx1ZS5cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoRE9NUHJvcGVydHkuZ2V0QXR0cmlidXRlTmFtZVtuYW1lXSwgJycgKyB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBET01Qcm9wZXJ0eS5nZXRQcm9wZXJ0eU5hbWVbbmFtZV07XG4gICAgICAgIC8vIE11c3QgZXhwbGljaXRseSBjYXN0IHZhbHVlcyBmb3IgSEFTX1NJREVfRUZGRUNUUy1wcm9wZXJ0aWVzIHRvIHRoZVxuICAgICAgICAvLyBwcm9wZXJ0eSB0eXBlIGJlZm9yZSBjb21wYXJpbmc7IG9ubHkgYHZhbHVlYCBkb2VzIGFuZCBpcyBzdHJpbmcuXG4gICAgICAgIGlmICghRE9NUHJvcGVydHkuaGFzU2lkZUVmZmVjdHNbbmFtZV0gfHxcbiAgICAgICAgICAgICgnJyArIG5vZGVbcHJvcE5hbWVdKSAhPT0gKCcnICsgdmFsdWUpKSB7XG4gICAgICAgICAgLy8gQ29udHJhcnkgdG8gYHNldEF0dHJpYnV0ZWAsIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseVxuICAgICAgICAgIC8vIGB0b1N0cmluZ2BlZCBieSBJRTgvOS5cbiAgICAgICAgICBub2RlW3Byb3BOYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgd2FyblVua25vd25Qcm9wZXJ0eShuYW1lKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBkZWxldGVWYWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgaWYgKERPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lLmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgIERPTVByb3BlcnR5LmlzU3RhbmRhcmROYW1lW25hbWVdKSB7XG4gICAgICB2YXIgbXV0YXRpb25NZXRob2QgPSBET01Qcm9wZXJ0eS5nZXRNdXRhdGlvbk1ldGhvZFtuYW1lXTtcbiAgICAgIGlmIChtdXRhdGlvbk1ldGhvZCkge1xuICAgICAgICBtdXRhdGlvbk1ldGhvZChub2RlLCB1bmRlZmluZWQpO1xuICAgICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5tdXN0VXNlQXR0cmlidXRlW25hbWVdKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKERPTVByb3BlcnR5LmdldEF0dHJpYnV0ZU5hbWVbbmFtZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gRE9NUHJvcGVydHkuZ2V0UHJvcGVydHlOYW1lW25hbWVdO1xuICAgICAgICB2YXIgZGVmYXVsdFZhbHVlID0gRE9NUHJvcGVydHkuZ2V0RGVmYXVsdFZhbHVlRm9yUHJvcGVydHkoXG4gICAgICAgICAgbm9kZS5ub2RlTmFtZSxcbiAgICAgICAgICBwcm9wTmFtZVxuICAgICAgICApO1xuICAgICAgICBpZiAoIURPTVByb3BlcnR5Lmhhc1NpZGVFZmZlY3RzW25hbWVdIHx8XG4gICAgICAgICAgICAoJycgKyBub2RlW3Byb3BOYW1lXSkgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgIG5vZGVbcHJvcE5hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHdhcm5Vbmtub3duUHJvcGVydHkobmFtZSk7XG4gICAgfVxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRE9NUHJvcGVydHlPcGVyYXRpb25zO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2UkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkVUMDFRY205d1pYSjBlVTl3WlhKaGRHbHZibk5jYmlBcUlFQjBlWEJsWTJobFkydHpJSE4wWVhScFl5MXZibXg1WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1JFOU5VSEp2Y0dWeWRIa2dQU0J5WlhGMWFYSmxLRndpTGk5RVQwMVFjbTl3WlhKMGVWd2lLVHRjYmx4dWRtRnlJSEYxYjNSbFFYUjBjbWxpZFhSbFZtRnNkV1ZHYjNKQ2NtOTNjMlZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZjWFZ2ZEdWQmRIUnlhV0oxZEdWV1lXeDFaVVp2Y2tKeWIzZHpaWEpjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm1aMWJtTjBhVzl1SUhOb2IzVnNaRWxuYm05eVpWWmhiSFZsS0c1aGJXVXNJSFpoYkhWbEtTQjdYRzRnSUhKbGRIVnliaUIyWVd4MVpTQTlQU0J1ZFd4c0lIeDhYRzRnSUNBZ0tFUlBUVkJ5YjNCbGNuUjVMbWhoYzBKdmIyeGxZVzVXWVd4MVpWdHVZVzFsWFNBbUppQWhkbUZzZFdVcElIeDhYRzRnSUNBZ0tFUlBUVkJ5YjNCbGNuUjVMbWhoYzA1MWJXVnlhV05XWVd4MVpWdHVZVzFsWFNBbUppQnBjMDVoVGloMllXeDFaU2twSUh4OFhHNGdJQ0FnS0VSUFRWQnliM0JsY25SNUxtaGhjMUJ2YzJsMGFYWmxUblZ0WlhKcFkxWmhiSFZsVzI1aGJXVmRJQ1ltSUNoMllXeDFaU0E4SURFcEtTQjhmRnh1SUNBZ0lDaEVUMDFRY205d1pYSjBlUzVvWVhOUGRtVnliRzloWkdWa1FtOXZiR1ZoYmxaaGJIVmxXMjVoYldWZElDWW1JSFpoYkhWbElEMDlQU0JtWVd4elpTazdYRzU5WEc1Y2JtbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnZG1GeUlISmxZV04wVUhKdmNITWdQU0I3WEc0Z0lDQWdZMmhwYkdSeVpXNDZJSFJ5ZFdVc1hHNGdJQ0FnWkdGdVoyVnliM1Z6YkhsVFpYUkpibTVsY2toVVRVdzZJSFJ5ZFdVc1hHNGdJQ0FnYTJWNU9pQjBjblZsTEZ4dUlDQWdJSEpsWmpvZ2RISjFaVnh1SUNCOU8xeHVJQ0IyWVhJZ2QyRnlibVZrVUhKdmNHVnlkR2xsY3lBOUlIdDlPMXh1WEc0Z0lIWmhjaUIzWVhKdVZXNXJibTkzYmxCeWIzQmxjblI1SUQwZ1puVnVZM1JwYjI0b2JtRnRaU2tnZTF4dUlDQWdJR2xtSUNoeVpXRmpkRkJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBJQ1ltSUhKbFlXTjBVSEp2Y0hOYmJtRnRaVjBnZkh4Y2JpQWdJQ0FnSUNBZ2QyRnlibVZrVUhKdmNHVnlkR2xsY3k1b1lYTlBkMjVRY205d1pYSjBlU2h1WVcxbEtTQW1KaUIzWVhKdVpXUlFjbTl3WlhKMGFXVnpXMjVoYldWZEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZDJGeWJtVmtVSEp2Y0dWeWRHbGxjMXR1WVcxbFhTQTlJSFJ5ZFdVN1hHNGdJQ0FnZG1GeUlHeHZkMlZ5UTJGelpXUk9ZVzFsSUQwZ2JtRnRaUzUwYjB4dmQyVnlRMkZ6WlNncE8xeHVYRzRnSUNBZ0x5OGdaR0YwWVMwcUlHRjBkSEpwWW5WMFpYTWdjMmh2ZFd4a0lHSmxJR3h2ZDJWeVkyRnpaVHNnYzNWbloyVnpkQ0IwYUdVZ2JHOTNaWEpqWVhObElIWmxjbk5wYjI1Y2JpQWdJQ0IyWVhJZ2MzUmhibVJoY21ST1lXMWxJRDBnS0Z4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdWFYTkRkWE4wYjIxQmRIUnlhV0oxZEdVb2JHOTNaWEpEWVhObFpFNWhiV1VwSUQ5Y2JpQWdJQ0FnSUNBZ2JHOTNaWEpEWVhObFpFNWhiV1VnT2x4dUlDQWdJQ0FnUkU5TlVISnZjR1Z5ZEhrdVoyVjBVRzl6YzJsaWJHVlRkR0Z1WkdGeVpFNWhiV1V1YUdGelQzZHVVSEp2Y0dWeWRIa29iRzkzWlhKRFlYTmxaRTVoYldVcElEOWNiaUFnSUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1WjJWMFVHOXpjMmxpYkdWVGRHRnVaR0Z5WkU1aGJXVmJiRzkzWlhKRFlYTmxaRTVoYldWZElEcGNiaUFnSUNBZ0lDQWdiblZzYkZ4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0F2THlCR2IzSWdibTkzTENCdmJteDVJSGRoY200Z2QyaGxiaUIzWlNCb1lYWmxJR0VnYzNWbloyVnpkR1ZrSUdOdmNuSmxZM1JwYjI0dUlGUm9hWE1nY0hKbGRtVnVkSE5jYmlBZ0lDQXZMeUJzYjJkbmFXNW5JSFJ2YnlCdGRXTm9JSGRvWlc0Z2RYTnBibWNnZEhKaGJuTm1aWEpRY205d2MxUnZMbHh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnYzNSaGJtUmhjbVJPWVcxbElEMDlJRzUxYkd3c1hHNGdJQ0FnSUNBblZXNXJibTkzYmlCRVQwMGdjSEp2Y0dWeWRIa2dKWE11SUVScFpDQjViM1VnYldWaGJpQWxjejhuTEZ4dUlDQWdJQ0FnYm1GdFpTeGNiaUFnSUNBZ0lITjBZVzVrWVhKa1RtRnRaVnh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNibHh1SUNCOU8xeHVmVnh1WEc0dktpcGNiaUFxSUU5d1pYSmhkR2x2Ym5NZ1ptOXlJR1JsWVd4cGJtY2dkMmwwYUNCRVQwMGdjSEp2Y0dWeWRHbGxjeTVjYmlBcUwxeHVkbUZ5SUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5QTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRM0psWVhSbGN5QnRZWEpyZFhBZ1ptOXlJSFJvWlNCSlJDQndjbTl3WlhKMGVTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR2xrSUZWdVpYTmpZWEJsWkNCSlJDNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCTllYSnJkWEFnYzNSeWFXNW5MbHh1SUNBZ0tpOWNiaUFnWTNKbFlYUmxUV0Z5YTNWd1JtOXlTVVE2SUdaMWJtTjBhVzl1S0dsa0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUVSUFRWQnliM0JsY25SNUxrbEVYMEZVVkZKSlFsVlVSVjlPUVUxRklDc2dKejBuSUN0Y2JpQWdJQ0FnSUhGMWIzUmxRWFIwY21saWRYUmxWbUZzZFdWR2IzSkNjbTkzYzJWeUtHbGtLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsY3lCdFlYSnJkWEFnWm05eUlHRWdjSEp2Y0dWeWRIa3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbFhHNGdJQ0FxSUVCd1lYSmhiU0I3S24wZ2RtRnNkV1ZjYmlBZ0lDb2dRSEpsZEhWeWJpQjdQM04wY21sdVozMGdUV0Z5YTNWd0lITjBjbWx1Wnl3Z2IzSWdiblZzYkNCcFppQjBhR1VnY0hKdmNHVnlkSGtnZDJGeklHbHVkbUZzYVdRdVhHNGdJQ0FxTDF4dUlDQmpjbVZoZEdWTllYSnJkWEJHYjNKUWNtOXdaWEowZVRvZ1puVnVZM1JwYjI0b2JtRnRaU3dnZG1Gc2RXVXBJSHRjYmlBZ0lDQnBaaUFvUkU5TlVISnZjR1Z5ZEhrdWFYTlRkR0Z1WkdGeVpFNWhiV1V1YUdGelQzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrZ0ppWmNiaUFnSUNBZ0lDQWdSRTlOVUhKdmNHVnlkSGt1YVhOVGRHRnVaR0Z5WkU1aGJXVmJibUZ0WlYwcElIdGNiaUFnSUNBZ0lHbG1JQ2h6YUc5MWJHUkpaMjV2Y21WV1lXeDFaU2h1WVcxbExDQjJZV3gxWlNrcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlDY25PMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkbUZ5SUdGMGRISnBZblYwWlU1aGJXVWdQU0JFVDAxUWNtOXdaWEowZVM1blpYUkJkSFJ5YVdKMWRHVk9ZVzFsVzI1aGJXVmRPMXh1SUNBZ0lDQWdhV1lnS0VSUFRWQnliM0JsY25SNUxtaGhjMEp2YjJ4bFlXNVdZV3gxWlZ0dVlXMWxYU0I4ZkZ4dUlDQWdJQ0FnSUNBZ0lDaEVUMDFRY205d1pYSjBlUzVvWVhOUGRtVnliRzloWkdWa1FtOXZiR1ZoYmxaaGJIVmxXMjVoYldWZElDWW1JSFpoYkhWbElEMDlQU0IwY25WbEtTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZWFIwY21saWRYUmxUbUZ0WlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJoZEhSeWFXSjFkR1ZPWVcxbElDc2dKejBuSUNzZ2NYVnZkR1ZCZEhSeWFXSjFkR1ZXWVd4MVpVWnZja0p5YjNkelpYSW9kbUZzZFdVcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1JFOU5VSEp2Y0dWeWRIa3VhWE5EZFhOMGIyMUJkSFJ5YVdKMWRHVW9ibUZ0WlNrcElIdGNiaUFnSUNBZ0lHbG1JQ2gyWVd4MVpTQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQW5KenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQnVZVzFsSUNzZ0p6MG5JQ3NnY1hWdmRHVkJkSFJ5YVdKMWRHVldZV3gxWlVadmNrSnliM2R6WlhJb2RtRnNkV1VwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQjNZWEp1Vlc1cmJtOTNibEJ5YjNCbGNuUjVLRzVoYldVcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdiblZzYkR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVMlYwY3lCMGFHVWdkbUZzZFdVZ1ptOXlJR0VnY0hKdmNHVnlkSGtnYjI0Z1lTQnViMlJsTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJRzV2WkdWY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzVoYldWY2JpQWdJQ29nUUhCaGNtRnRJSHNxZlNCMllXeDFaVnh1SUNBZ0tpOWNiaUFnYzJWMFZtRnNkV1ZHYjNKUWNtOXdaWEowZVRvZ1puVnVZM1JwYjI0b2JtOWtaU3dnYm1GdFpTd2dkbUZzZFdVcElIdGNiaUFnSUNCcFppQW9SRTlOVUhKdmNHVnlkSGt1YVhOVGRHRnVaR0Z5WkU1aGJXVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2tnSmlaY2JpQWdJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIa3VhWE5UZEdGdVpHRnlaRTVoYldWYmJtRnRaVjBwSUh0Y2JpQWdJQ0FnSUhaaGNpQnRkWFJoZEdsdmJrMWxkR2h2WkNBOUlFUlBUVkJ5YjNCbGNuUjVMbWRsZEUxMWRHRjBhVzl1VFdWMGFHOWtXMjVoYldWZE8xeHVJQ0FnSUNBZ2FXWWdLRzExZEdGMGFXOXVUV1YwYUc5a0tTQjdYRzRnSUNBZ0lDQWdJRzExZEdGMGFXOXVUV1YwYUc5a0tHNXZaR1VzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvYzJodmRXeGtTV2R1YjNKbFZtRnNkV1VvYm1GdFpTd2dkbUZzZFdVcEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdVpHVnNaWFJsVm1Gc2RXVkdiM0pRY205d1pYSjBlU2h1YjJSbExDQnVZVzFsS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1JFOU5VSEp2Y0dWeWRIa3ViWFZ6ZEZWelpVRjBkSEpwWW5WMFpWdHVZVzFsWFNrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJnYzJWMFFYUjBjbWxpZFhSbFlDQjNhWFJvSUc5aWFtVmpkSE1nWW1WamIyMWxjeUJ2Ym14NUlHQmJiMkpxWldOMFhXQWdhVzRnU1VVNEx6a3NYRzRnSUNBZ0lDQWdJQzh2SUNnbkp5QXJJSFpoYkhWbEtTQnRZV3RsY3lCcGRDQnZkWFJ3ZFhRZ2RHaGxJR052Y25KbFkzUWdkRzlUZEhKcGJtY29LUzEyWVd4MVpTNWNiaUFnSUNBZ0lDQWdibTlrWlM1elpYUkJkSFJ5YVdKMWRHVW9SRTlOVUhKdmNHVnlkSGt1WjJWMFFYUjBjbWxpZFhSbFRtRnRaVnR1WVcxbFhTd2dKeWNnS3lCMllXeDFaU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2NISnZjRTVoYldVZ1BTQkVUMDFRY205d1pYSjBlUzVuWlhSUWNtOXdaWEowZVU1aGJXVmJibUZ0WlYwN1hHNGdJQ0FnSUNBZ0lDOHZJRTExYzNRZ1pYaHdiR2xqYVhSc2VTQmpZWE4wSUhaaGJIVmxjeUJtYjNJZ1NFRlRYMU5KUkVWZlJVWkdSVU5VVXkxd2NtOXdaWEowYVdWeklIUnZJSFJvWlZ4dUlDQWdJQ0FnSUNBdkx5QndjbTl3WlhKMGVTQjBlWEJsSUdKbFptOXlaU0JqYjIxd1lYSnBibWM3SUc5dWJIa2dZSFpoYkhWbFlDQmtiMlZ6SUdGdVpDQnBjeUJ6ZEhKcGJtY3VYRzRnSUNBZ0lDQWdJR2xtSUNnaFJFOU5VSEp2Y0dWeWRIa3VhR0Z6VTJsa1pVVm1abVZqZEhOYmJtRnRaVjBnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2duSnlBcklHNXZaR1ZiY0hKdmNFNWhiV1ZkS1NBaFBUMGdLQ2NuSUNzZ2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnUTI5dWRISmhjbmtnZEc4Z1lITmxkRUYwZEhKcFluVjBaV0FzSUc5aWFtVmpkQ0J3Y205d1pYSjBhV1Z6SUdGeVpTQndjbTl3WlhKc2VWeHVJQ0FnSUNBZ0lDQWdJQzh2SUdCMGIxTjBjbWx1WjJCbFpDQmllU0JKUlRndk9TNWNiaUFnSUNBZ0lDQWdJQ0J1YjJSbFczQnliM0JPWVcxbFhTQTlJSFpoYkhWbE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaEVUMDFRY205d1pYSjBlUzVwYzBOMWMzUnZiVUYwZEhKcFluVjBaU2h1WVcxbEtTa2dlMXh1SUNBZ0lDQWdhV1lnS0haaGJIVmxJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnYm05a1pTNXlaVzF2ZG1WQmRIUnlhV0oxZEdVb2JtRnRaU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0J1YjJSbExuTmxkRUYwZEhKcFluVjBaU2h1WVcxbExDQW5KeUFySUhaaGJIVmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ2QyRnlibFZ1YTI1dmQyNVFjbTl3WlhKMGVTaHVZVzFsS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFUmxiR1YwWlhNZ2RHaGxJSFpoYkhWbElHWnZjaUJoSUhCeWIzQmxjblI1SUc5dUlHRWdibTlrWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdEVUMDFGYkdWdFpXNTBmU0J1YjJSbFhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbFhHNGdJQ0FxTDF4dUlDQmtaV3hsZEdWV1lXeDFaVVp2Y2xCeWIzQmxjblI1T2lCbWRXNWpkR2x2YmlodWIyUmxMQ0J1WVcxbEtTQjdYRzRnSUNBZ2FXWWdLRVJQVFZCeWIzQmxjblI1TG1selUzUmhibVJoY21ST1lXMWxMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwSUNZbVhHNGdJQ0FnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVMbWx6VTNSaGJtUmhjbVJPWVcxbFcyNWhiV1ZkS1NCN1hHNGdJQ0FnSUNCMllYSWdiWFYwWVhScGIyNU5aWFJvYjJRZ1BTQkVUMDFRY205d1pYSjBlUzVuWlhSTmRYUmhkR2x2YmsxbGRHaHZaRnR1WVcxbFhUdGNiaUFnSUNBZ0lHbG1JQ2h0ZFhSaGRHbHZiazFsZEdodlpDa2dlMXh1SUNBZ0lDQWdJQ0J0ZFhSaGRHbHZiazFsZEdodlpDaHViMlJsTENCMWJtUmxabWx1WldRcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaEVUMDFRY205d1pYSjBlUzV0ZFhOMFZYTmxRWFIwY21saWRYUmxXMjVoYldWZEtTQjdYRzRnSUNBZ0lDQWdJRzV2WkdVdWNtVnRiM1psUVhSMGNtbGlkWFJsS0VSUFRWQnliM0JsY25SNUxtZGxkRUYwZEhKcFluVjBaVTVoYldWYmJtRnRaVjBwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlIQnliM0JPWVcxbElEMGdSRTlOVUhKdmNHVnlkSGt1WjJWMFVISnZjR1Z5ZEhsT1lXMWxXMjVoYldWZE8xeHVJQ0FnSUNBZ0lDQjJZWElnWkdWbVlYVnNkRlpoYkhWbElEMGdSRTlOVUhKdmNHVnlkSGt1WjJWMFJHVm1ZWFZzZEZaaGJIVmxSbTl5VUhKdmNHVnlkSGtvWEc0Z0lDQWdJQ0FnSUNBZ2JtOWtaUzV1YjJSbFRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNCd2NtOXdUbUZ0WlZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVVSUFRWQnliM0JsY25SNUxtaGhjMU5wWkdWRlptWmxZM1J6VzI1aGJXVmRJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQW9KeWNnS3lCdWIyUmxXM0J5YjNCT1lXMWxYU2tnSVQwOUlHUmxabUYxYkhSV1lXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHNXZaR1ZiY0hKdmNFNWhiV1ZkSUQwZ1pHVm1ZWFZzZEZaaGJIVmxPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hFVDAxUWNtOXdaWEowZVM1cGMwTjFjM1J2YlVGMGRISnBZblYwWlNodVlXMWxLU2tnZTF4dUlDQWdJQ0FnYm05a1pTNXlaVzF2ZG1WQmRIUnlhV0oxZEdVb2JtRnRaU2s3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIZGhjbTVWYm10dWIzZHVVSEp2Y0dWeWRIa29ibUZ0WlNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdSRTlOVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIERhbmdlclxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4vKmpzbGludCBldmlsOiB0cnVlLCBzdWI6IHRydWUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIGNyZWF0ZU5vZGVzRnJvbU1hcmt1cCA9IHJlcXVpcmUoXCIuL2NyZWF0ZU5vZGVzRnJvbU1hcmt1cFwiKTtcbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZW1wdHlGdW5jdGlvblwiKTtcbnZhciBnZXRNYXJrdXBXcmFwID0gcmVxdWlyZShcIi4vZ2V0TWFya3VwV3JhcFwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBPUEVOX1RBR19OQU1FX0VYUCA9IC9eKDxbXiBcXC8+XSspLztcbnZhciBSRVNVTFRfSU5ERVhfQVRUUiA9ICdkYXRhLWRhbmdlci1pbmRleCc7XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGBub2RlTmFtZWAgZnJvbSBhIHN0cmluZyBvZiBtYXJrdXAuXG4gKlxuICogTk9URTogRXh0cmFjdGluZyB0aGUgYG5vZGVOYW1lYCBkb2VzIG5vdCByZXF1aXJlIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoXG4gKiBiZWNhdXNlIHdlIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQgUmVhY3QtZ2VuZXJhdGVkIG1hcmt1cCAoaS5lLiB0aGVyZSBhcmUgbm9cbiAqIHNwYWNlcyBzdXJyb3VuZGluZyB0aGUgb3BlbmluZyB0YWcgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBhdHRyaWJ1dGUpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgU3RyaW5nIG9mIG1hcmt1cC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9kZSBuYW1lIG9mIHRoZSBzdXBwbGllZCBtYXJrdXAuXG4gKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2V4dHJhY3Qtbm9kZW5hbWVcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZU5hbWUobWFya3VwKSB7XG4gIHJldHVybiBtYXJrdXAuc3Vic3RyaW5nKDEsIG1hcmt1cC5pbmRleE9mKCcgJykpO1xufVxuXG52YXIgRGFuZ2VyID0ge1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIG1hcmt1cCBpbnRvIGFuIGFycmF5IG9mIG5vZGVzLiBUaGUgbWFya3VwIGlzIGV4cGVjdGVkIHRvIHJlbmRlclxuICAgKiBpbnRvIGEgbGlzdCBvZiByb290IG5vZGVzLiBBbHNvLCB0aGUgbGVuZ3RoIG9mIGByZXN1bHRMaXN0YCBhbmRcbiAgICogYG1hcmt1cExpc3RgIHNob3VsZCBiZSB0aGUgc2FtZS5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheTxzdHJpbmc+fSBtYXJrdXBMaXN0IExpc3Qgb2YgbWFya3VwIHN0cmluZ3MgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJuIHthcnJheTxET01FbGVtZW50Pn0gTGlzdCBvZiByZW5kZXJlZCBub2Rlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBkYW5nZXJvdXNseVJlbmRlck1hcmt1cDogZnVuY3Rpb24obWFya3VwTGlzdCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00sXG4gICAgICAnZGFuZ2Vyb3VzbHlSZW5kZXJNYXJrdXAoLi4uKTogQ2Fubm90IHJlbmRlciBtYXJrdXAgaW4gYSB3b3JrZXIgJyArXG4gICAgICAndGhyZWFkLiBNYWtlIHN1cmUgYHdpbmRvd2AgYW5kIGBkb2N1bWVudGAgYXJlIGF2YWlsYWJsZSBnbG9iYWxseSAnICtcbiAgICAgICdiZWZvcmUgcmVxdWlyaW5nIFJlYWN0IHdoZW4gdW5pdCB0ZXN0aW5nIG9yIHVzZSAnICtcbiAgICAgICdSZWFjdC5yZW5kZXJUb1N0cmluZyBmb3Igc2VydmVyIHJlbmRlcmluZy4nXG4gICAgKSA6IGludmFyaWFudChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pKTtcbiAgICB2YXIgbm9kZU5hbWU7XG4gICAgdmFyIG1hcmt1cEJ5Tm9kZU5hbWUgPSB7fTtcbiAgICAvLyBHcm91cCBtYXJrdXAgYnkgYG5vZGVOYW1lYCBpZiBhIHdyYXAgaXMgbmVjZXNzYXJ5LCBlbHNlIGJ5ICcqJy5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmt1cExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIG1hcmt1cExpc3RbaV0sXG4gICAgICAgICdkYW5nZXJvdXNseVJlbmRlck1hcmt1cCguLi4pOiBNaXNzaW5nIG1hcmt1cC4nXG4gICAgICApIDogaW52YXJpYW50KG1hcmt1cExpc3RbaV0pKTtcbiAgICAgIG5vZGVOYW1lID0gZ2V0Tm9kZU5hbWUobWFya3VwTGlzdFtpXSk7XG4gICAgICBub2RlTmFtZSA9IGdldE1hcmt1cFdyYXAobm9kZU5hbWUpID8gbm9kZU5hbWUgOiAnKic7XG4gICAgICBtYXJrdXBCeU5vZGVOYW1lW25vZGVOYW1lXSA9IG1hcmt1cEJ5Tm9kZU5hbWVbbm9kZU5hbWVdIHx8IFtdO1xuICAgICAgbWFya3VwQnlOb2RlTmFtZVtub2RlTmFtZV1baV0gPSBtYXJrdXBMaXN0W2ldO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0TGlzdCA9IFtdO1xuICAgIHZhciByZXN1bHRMaXN0QXNzaWdubWVudENvdW50ID0gMDtcbiAgICBmb3IgKG5vZGVOYW1lIGluIG1hcmt1cEJ5Tm9kZU5hbWUpIHtcbiAgICAgIGlmICghbWFya3VwQnlOb2RlTmFtZS5oYXNPd25Qcm9wZXJ0eShub2RlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgbWFya3VwTGlzdEJ5Tm9kZU5hbWUgPSBtYXJrdXBCeU5vZGVOYW1lW25vZGVOYW1lXTtcblxuICAgICAgLy8gVGhpcyBmb3ItaW4gbG9vcCBza2lwcyB0aGUgaG9sZXMgb2YgdGhlIHNwYXJzZSBhcnJheS4gVGhlIG9yZGVyIG9mXG4gICAgICAvLyBpdGVyYXRpb24gc2hvdWxkIGZvbGxvdyB0aGUgb3JkZXIgb2YgYXNzaWdubWVudCwgd2hpY2ggaGFwcGVucyB0byBtYXRjaFxuICAgICAgLy8gbnVtZXJpY2FsIGluZGV4IG9yZGVyLCBidXQgd2UgZG9uJ3QgcmVseSBvbiB0aGF0LlxuICAgICAgdmFyIHJlc3VsdEluZGV4O1xuICAgICAgZm9yIChyZXN1bHRJbmRleCBpbiBtYXJrdXBMaXN0QnlOb2RlTmFtZSkge1xuICAgICAgICBpZiAobWFya3VwTGlzdEJ5Tm9kZU5hbWUuaGFzT3duUHJvcGVydHkocmVzdWx0SW5kZXgpKSB7XG4gICAgICAgICAgdmFyIG1hcmt1cCA9IG1hcmt1cExpc3RCeU5vZGVOYW1lW3Jlc3VsdEluZGV4XTtcblxuICAgICAgICAgIC8vIFB1c2ggdGhlIHJlcXVlc3RlZCBtYXJrdXAgd2l0aCBhbiBhZGRpdGlvbmFsIFJFU1VMVF9JTkRFWF9BVFRSXG4gICAgICAgICAgLy8gYXR0cmlidXRlLiAgSWYgdGhlIG1hcmt1cCBkb2VzIG5vdCBzdGFydCB3aXRoIGEgPCBjaGFyYWN0ZXIsIGl0XG4gICAgICAgICAgLy8gd2lsbCBiZSBkaXNjYXJkZWQgYmVsb3cgKHdpdGggYW4gYXBwcm9wcmlhdGUgY29uc29sZS5lcnJvcikuXG4gICAgICAgICAgbWFya3VwTGlzdEJ5Tm9kZU5hbWVbcmVzdWx0SW5kZXhdID0gbWFya3VwLnJlcGxhY2UoXG4gICAgICAgICAgICBPUEVOX1RBR19OQU1FX0VYUCxcbiAgICAgICAgICAgIC8vIFRoaXMgaW5kZXggd2lsbCBiZSBwYXJzZWQgYmFjayBvdXQgYmVsb3cuXG4gICAgICAgICAgICAnJDEgJyArIFJFU1VMVF9JTkRFWF9BVFRSICsgJz1cIicgKyByZXN1bHRJbmRleCArICdcIiAnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZW5kZXIgZWFjaCBncm91cCBvZiBtYXJrdXAgd2l0aCBzaW1pbGFyIHdyYXBwaW5nIGBub2RlTmFtZWAuXG4gICAgICB2YXIgcmVuZGVyTm9kZXMgPSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXAoXG4gICAgICAgIG1hcmt1cExpc3RCeU5vZGVOYW1lLmpvaW4oJycpLFxuICAgICAgICBlbXB0eUZ1bmN0aW9uIC8vIERvIG5vdGhpbmcgc3BlY2lhbCB3aXRoIDxzY3JpcHQ+IHRhZ3MuXG4gICAgICApO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlbmRlck5vZGVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIHZhciByZW5kZXJOb2RlID0gcmVuZGVyTm9kZXNbal07XG4gICAgICAgIGlmIChyZW5kZXJOb2RlLmhhc0F0dHJpYnV0ZSAmJlxuICAgICAgICAgICAgcmVuZGVyTm9kZS5oYXNBdHRyaWJ1dGUoUkVTVUxUX0lOREVYX0FUVFIpKSB7XG5cbiAgICAgICAgICByZXN1bHRJbmRleCA9ICtyZW5kZXJOb2RlLmdldEF0dHJpYnV0ZShSRVNVTFRfSU5ERVhfQVRUUik7XG4gICAgICAgICAgcmVuZGVyTm9kZS5yZW1vdmVBdHRyaWJ1dGUoUkVTVUxUX0lOREVYX0FUVFIpO1xuXG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICAgICFyZXN1bHRMaXN0Lmhhc093blByb3BlcnR5KHJlc3VsdEluZGV4KSxcbiAgICAgICAgICAgICdEYW5nZXI6IEFzc2lnbmluZyB0byBhbiBhbHJlYWR5LW9jY3VwaWVkIHJlc3VsdCBpbmRleC4nXG4gICAgICAgICAgKSA6IGludmFyaWFudCghcmVzdWx0TGlzdC5oYXNPd25Qcm9wZXJ0eShyZXN1bHRJbmRleCkpKTtcblxuICAgICAgICAgIHJlc3VsdExpc3RbcmVzdWx0SW5kZXhdID0gcmVuZGVyTm9kZTtcblxuICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIHJlc3VsdExpc3QubGVuZ3RoIGFuZCBtYXJrdXBMaXN0Lmxlbmd0aCB3aGVuXG4gICAgICAgICAgLy8gd2UncmUgZG9uZS5cbiAgICAgICAgICByZXN1bHRMaXN0QXNzaWdubWVudENvdW50ICs9IDE7XG5cbiAgICAgICAgfSBlbHNlIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ0RhbmdlcjogRGlzY2FyZGluZyB1bmV4cGVjdGVkIG5vZGU6JyxcbiAgICAgICAgICAgIHJlbmRlck5vZGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWx0aG91Z2ggcmVzdWx0TGlzdCB3YXMgcG9wdWxhdGVkIG91dCBvZiBvcmRlciwgaXQgc2hvdWxkIG5vdyBiZSBhIGRlbnNlXG4gICAgLy8gYXJyYXkuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHJlc3VsdExpc3RBc3NpZ25tZW50Q291bnQgPT09IHJlc3VsdExpc3QubGVuZ3RoLFxuICAgICAgJ0RhbmdlcjogRGlkIG5vdCBhc3NpZ24gdG8gZXZlcnkgaW5kZXggb2YgcmVzdWx0TGlzdC4nXG4gICAgKSA6IGludmFyaWFudChyZXN1bHRMaXN0QXNzaWdubWVudENvdW50ID09PSByZXN1bHRMaXN0Lmxlbmd0aCkpO1xuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHJlc3VsdExpc3QubGVuZ3RoID09PSBtYXJrdXBMaXN0Lmxlbmd0aCxcbiAgICAgICdEYW5nZXI6IEV4cGVjdGVkIG1hcmt1cCB0byByZW5kZXIgJXMgbm9kZXMsIGJ1dCByZW5kZXJlZCAlcy4nLFxuICAgICAgbWFya3VwTGlzdC5sZW5ndGgsXG4gICAgICByZXN1bHRMaXN0Lmxlbmd0aFxuICAgICkgOiBpbnZhcmlhbnQocmVzdWx0TGlzdC5sZW5ndGggPT09IG1hcmt1cExpc3QubGVuZ3RoKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0TGlzdDtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYSBub2RlIHdpdGggYSBzdHJpbmcgb2YgbWFya3VwIGF0IGl0cyBjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiBpdHNcbiAgICogcGFyZW50LiBUaGUgbWFya3VwIG11c3QgcmVuZGVyIGludG8gYSBzaW5nbGUgcm9vdCBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG9sZENoaWxkIENoaWxkIG5vZGUgdG8gcmVwbGFjZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgdG8gcmVuZGVyIGluIHBsYWNlIG9mIHRoZSBjaGlsZCBub2RlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwOiBmdW5jdGlvbihvbGRDaGlsZCwgbWFya3VwKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSxcbiAgICAgICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCguLi4pOiBDYW5ub3QgcmVuZGVyIG1hcmt1cCBpbiBhICcgK1xuICAgICAgJ3dvcmtlciB0aHJlYWQuIE1ha2Ugc3VyZSBgd2luZG93YCBhbmQgYGRvY3VtZW50YCBhcmUgYXZhaWxhYmxlICcgK1xuICAgICAgJ2dsb2JhbGx5IGJlZm9yZSByZXF1aXJpbmcgUmVhY3Qgd2hlbiB1bml0IHRlc3Rpbmcgb3IgdXNlICcgK1xuICAgICAgJ1JlYWN0LnJlbmRlclRvU3RyaW5nIGZvciBzZXJ2ZXIgcmVuZGVyaW5nLidcbiAgICApIDogaW52YXJpYW50KEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQobWFya3VwLCAnZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAoLi4uKTogTWlzc2luZyBtYXJrdXAuJykgOiBpbnZhcmlhbnQobWFya3VwKSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIG9sZENoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2h0bWwnLFxuICAgICAgJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKC4uLik6IENhbm5vdCByZXBsYWNlIG1hcmt1cCBvZiB0aGUgJyArXG4gICAgICAnPGh0bWw+IG5vZGUuIFRoaXMgaXMgYmVjYXVzZSBicm93c2VyIHF1aXJrcyBtYWtlIHRoaXMgdW5yZWxpYWJsZSAnICtcbiAgICAgICdhbmQvb3Igc2xvdy4gSWYgeW91IHdhbnQgdG8gcmVuZGVyIHRvIHRoZSByb290IHlvdSBtdXN0IHVzZSAnICtcbiAgICAgICdzZXJ2ZXIgcmVuZGVyaW5nLiBTZWUgUmVhY3QucmVuZGVyVG9TdHJpbmcoKS4nXG4gICAgKSA6IGludmFyaWFudChvbGRDaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdodG1sJykpO1xuXG4gICAgdmFyIG5ld0NoaWxkID0gY3JlYXRlTm9kZXNGcm9tTWFya3VwKG1hcmt1cCwgZW1wdHlGdW5jdGlvbilbMF07XG4gICAgb2xkQ2hpbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGQsIG9sZENoaWxkKTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhbmdlcjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJHRnVaMlZ5TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElFUmhibWRsY2x4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0dkttcHpiR2x1ZENCbGRtbHNPaUIwY25WbExDQnpkV0k2SUhSeWRXVWdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdSWGhsWTNWMGFXOXVSVzUyYVhKdmJtMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOUZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkRndpS1R0Y2JseHVkbUZ5SUdOeVpXRjBaVTV2WkdWelJuSnZiVTFoY210MWNDQTlJSEpsY1hWcGNtVW9YQ0l1TDJOeVpXRjBaVTV2WkdWelJuSnZiVTFoY210MWNGd2lLVHRjYm5aaGNpQmxiWEIwZVVaMWJtTjBhVzl1SUQwZ2NtVnhkV2x5WlNoY0lpNHZaVzF3ZEhsR2RXNWpkR2x2Ymx3aUtUdGNiblpoY2lCblpYUk5ZWEpyZFhCWGNtRndJRDBnY21WeGRXbHlaU2hjSWk0dloyVjBUV0Z5YTNWd1YzSmhjRndpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JuWmhjaUJQVUVWT1gxUkJSMTlPUVUxRlgwVllVQ0E5SUM5ZUtEeGJYaUJjWEM4K1hTc3BMenRjYm5aaGNpQlNSVk5WVEZSZlNVNUVSVmhmUVZSVVVpQTlJQ2RrWVhSaExXUmhibWRsY2kxcGJtUmxlQ2M3WEc1Y2JpOHFLbHh1SUNvZ1JYaDBjbUZqZEhNZ2RHaGxJR0J1YjJSbFRtRnRaV0FnWm5KdmJTQmhJSE4wY21sdVp5QnZaaUJ0WVhKcmRYQXVYRzRnS2x4dUlDb2dUazlVUlRvZ1JYaDBjbUZqZEdsdVp5QjBhR1VnWUc1dlpHVk9ZVzFsWUNCa2IyVnpJRzV2ZENCeVpYRjFhWEpsSUdFZ2NtVm5kV3hoY2lCbGVIQnlaWE56YVc5dUlHMWhkR05vWEc0Z0tpQmlaV05oZFhObElIZGxJRzFoYTJVZ1lYTnpkVzF3ZEdsdmJuTWdZV0p2ZFhRZ1VtVmhZM1F0WjJWdVpYSmhkR1ZrSUcxaGNtdDFjQ0FvYVM1bExpQjBhR1Z5WlNCaGNtVWdibTljYmlBcUlITndZV05sY3lCemRYSnliM1Z1WkdsdVp5QjBhR1VnYjNCbGJtbHVaeUIwWVdjZ1lXNWtJSFJvWlhKbElHbHpJR0YwSUd4bFlYTjBJRzl1WlNCaGRIUnlhV0oxZEdVcExseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdFlYSnJkWEFnVTNSeWFXNW5JRzltSUcxaGNtdDFjQzVjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ1RtOWtaU0J1WVcxbElHOW1JSFJvWlNCemRYQndiR2xsWkNCdFlYSnJkWEF1WEc0Z0tpQkFjMlZsSUdoMGRIQTZMeTlxYzNCbGNtWXVZMjl0TDJWNGRISmhZM1F0Ym05a1pXNWhiV1ZjYmlBcUwxeHVablZ1WTNScGIyNGdaMlYwVG05a1pVNWhiV1VvYldGeWEzVndLU0I3WEc0Z0lISmxkSFZ5YmlCdFlYSnJkWEF1YzNWaWMzUnlhVzVuS0RFc0lHMWhjbXQxY0M1cGJtUmxlRTltS0NjZ0p5a3BPMXh1ZlZ4dVhHNTJZWElnUkdGdVoyVnlJRDBnZTF4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlc1a1pYSnpJRzFoY210MWNDQnBiblJ2SUdGdUlHRnljbUY1SUc5bUlHNXZaR1Z6TGlCVWFHVWdiV0Z5YTNWd0lHbHpJR1Y0Y0dWamRHVmtJSFJ2SUhKbGJtUmxjbHh1SUNBZ0tpQnBiblJ2SUdFZ2JHbHpkQ0J2WmlCeWIyOTBJRzV2WkdWekxpQkJiSE52TENCMGFHVWdiR1Z1WjNSb0lHOW1JR0J5WlhOMWJIUk1hWE4wWUNCaGJtUmNiaUFnSUNvZ1lHMWhjbXQxY0V4cGMzUmdJSE5vYjNWc1pDQmlaU0IwYUdVZ2MyRnRaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0aGNuSmhlVHh6ZEhKcGJtYytmU0J0WVhKcmRYQk1hWE4wSUV4cGMzUWdiMllnYldGeWEzVndJSE4wY21sdVozTWdkRzhnY21WdVpHVnlMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdGhjbkpoZVR4RVQwMUZiR1Z0Wlc1MFBuMGdUR2x6ZENCdlppQnlaVzVrWlhKbFpDQnViMlJsY3k1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCa1lXNW5aWEp2ZFhOc2VWSmxibVJsY2sxaGNtdDFjRG9nWm5WdVkzUnBiMjRvYldGeWEzVndUR2x6ZENrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEM1allXNVZjMlZFVDAwc1hHNGdJQ0FnSUNBblpHRnVaMlZ5YjNWemJIbFNaVzVrWlhKTllYSnJkWEFvTGk0dUtUb2dRMkZ1Ym05MElISmxibVJsY2lCdFlYSnJkWEFnYVc0Z1lTQjNiM0pyWlhJZ0p5QXJYRzRnSUNBZ0lDQW5kR2h5WldGa0xpQk5ZV3RsSUhOMWNtVWdZSGRwYm1SdmQyQWdZVzVrSUdCa2IyTjFiV1Z1ZEdBZ1lYSmxJR0YyWVdsc1lXSnNaU0JuYkc5aVlXeHNlU0FuSUN0Y2JpQWdJQ0FnSUNkaVpXWnZjbVVnY21WeGRXbHlhVzVuSUZKbFlXTjBJSGRvWlc0Z2RXNXBkQ0IwWlhOMGFXNW5JRzl5SUhWelpTQW5JQ3RjYmlBZ0lDQWdJQ2RTWldGamRDNXlaVzVrWlhKVWIxTjBjbWx1WnlCbWIzSWdjMlZ5ZG1WeUlISmxibVJsY21sdVp5NG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEM1allXNVZjMlZFVDAwcEtUdGNiaUFnSUNCMllYSWdibTlrWlU1aGJXVTdYRzRnSUNBZ2RtRnlJRzFoY210MWNFSjVUbTlrWlU1aGJXVWdQU0I3ZlR0Y2JpQWdJQ0F2THlCSGNtOTFjQ0J0WVhKcmRYQWdZbmtnWUc1dlpHVk9ZVzFsWUNCcFppQmhJSGR5WVhBZ2FYTWdibVZqWlhOellYSjVMQ0JsYkhObElHSjVJQ2NxSnk1Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUcxaGNtdDFjRXhwYzNRdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWdJRzFoY210MWNFeHBjM1JiYVYwc1hHNGdJQ0FnSUNBZ0lDZGtZVzVuWlhKdmRYTnNlVkpsYm1SbGNrMWhjbXQxY0NndUxpNHBPaUJOYVhOemFXNW5JRzFoY210MWNDNG5YRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0cxaGNtdDFjRXhwYzNSYmFWMHBLVHRjYmlBZ0lDQWdJRzV2WkdWT1lXMWxJRDBnWjJWMFRtOWtaVTVoYldVb2JXRnlhM1Z3VEdsemRGdHBYU2s3WEc0Z0lDQWdJQ0J1YjJSbFRtRnRaU0E5SUdkbGRFMWhjbXQxY0ZkeVlYQW9ibTlrWlU1aGJXVXBJRDhnYm05a1pVNWhiV1VnT2lBbktpYzdYRzRnSUNBZ0lDQnRZWEpyZFhCQ2VVNXZaR1ZPWVcxbFcyNXZaR1ZPWVcxbFhTQTlJRzFoY210MWNFSjVUbTlrWlU1aGJXVmJibTlrWlU1aGJXVmRJSHg4SUZ0ZE8xeHVJQ0FnSUNBZ2JXRnlhM1Z3UW5sT2IyUmxUbUZ0WlZ0dWIyUmxUbUZ0WlYxYmFWMGdQU0J0WVhKcmRYQk1hWE4wVzJsZE8xeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ2NtVnpkV3gwVEdsemRDQTlJRnRkTzF4dUlDQWdJSFpoY2lCeVpYTjFiSFJNYVhOMFFYTnphV2R1YldWdWRFTnZkVzUwSUQwZ01EdGNiaUFnSUNCbWIzSWdLRzV2WkdWT1lXMWxJR2x1SUcxaGNtdDFjRUo1VG05a1pVNWhiV1VwSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hiV0Z5YTNWd1FubE9iMlJsVG1GdFpTNW9ZWE5QZDI1UWNtOXdaWEowZVNodWIyUmxUbUZ0WlNrcElIdGNiaUFnSUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQjJZWElnYldGeWEzVndUR2x6ZEVKNVRtOWtaVTVoYldVZ1BTQnRZWEpyZFhCQ2VVNXZaR1ZPWVcxbFcyNXZaR1ZPWVcxbFhUdGNibHh1SUNBZ0lDQWdMeThnVkdocGN5Qm1iM0l0YVc0Z2JHOXZjQ0J6YTJsd2N5QjBhR1VnYUc5c1pYTWdiMllnZEdobElITndZWEp6WlNCaGNuSmhlUzRnVkdobElHOXlaR1Z5SUc5bVhHNGdJQ0FnSUNBdkx5QnBkR1Z5WVhScGIyNGdjMmh2ZFd4a0lHWnZiR3h2ZHlCMGFHVWdiM0prWlhJZ2IyWWdZWE56YVdkdWJXVnVkQ3dnZDJocFkyZ2dhR0Z3Y0dWdWN5QjBieUJ0WVhSamFGeHVJQ0FnSUNBZ0x5OGdiblZ0WlhKcFkyRnNJR2x1WkdWNElHOXlaR1Z5TENCaWRYUWdkMlVnWkc5dUozUWdjbVZzZVNCdmJpQjBhR0YwTGx4dUlDQWdJQ0FnZG1GeUlISmxjM1ZzZEVsdVpHVjRPMXh1SUNBZ0lDQWdabTl5SUNoeVpYTjFiSFJKYm1SbGVDQnBiaUJ0WVhKcmRYQk1hWE4wUW5sT2IyUmxUbUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYldGeWEzVndUR2x6ZEVKNVRtOWtaVTVoYldVdWFHRnpUM2R1VUhKdmNHVnlkSGtvY21WemRXeDBTVzVrWlhncEtTQjdYRzRnSUNBZ0lDQWdJQ0FnZG1GeUlHMWhjbXQxY0NBOUlHMWhjbXQxY0V4cGMzUkNlVTV2WkdWT1lXMWxXM0psYzNWc2RFbHVaR1Y0WFR0Y2JseHVJQ0FnSUNBZ0lDQWdJQzh2SUZCMWMyZ2dkR2hsSUhKbGNYVmxjM1JsWkNCdFlYSnJkWEFnZDJsMGFDQmhiaUJoWkdScGRHbHZibUZzSUZKRlUxVk1WRjlKVGtSRldGOUJWRlJTWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdZWFIwY21saWRYUmxMaUFnU1dZZ2RHaGxJRzFoY210MWNDQmtiMlZ6SUc1dmRDQnpkR0Z5ZENCM2FYUm9JR0VnUENCamFHRnlZV04wWlhJc0lHbDBYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2QybHNiQ0JpWlNCa2FYTmpZWEprWldRZ1ltVnNiM2NnS0hkcGRHZ2dZVzRnWVhCd2NtOXdjbWxoZEdVZ1kyOXVjMjlzWlM1bGNuSnZjaWt1WEc0Z0lDQWdJQ0FnSUNBZ2JXRnlhM1Z3VEdsemRFSjVUbTlrWlU1aGJXVmJjbVZ6ZFd4MFNXNWtaWGhkSUQwZ2JXRnlhM1Z3TG5KbGNHeGhZMlVvWEc0Z0lDQWdJQ0FnSUNBZ0lDQlBVRVZPWDFSQlIxOU9RVTFGWDBWWVVDeGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklGUm9hWE1nYVc1a1pYZ2dkMmxzYkNCaVpTQndZWEp6WldRZ1ltRmpheUJ2ZFhRZ1ltVnNiM2N1WEc0Z0lDQWdJQ0FnSUNBZ0lDQW5KREVnSnlBcklGSkZVMVZNVkY5SlRrUkZXRjlCVkZSU0lDc2dKejFjSWljZ0t5QnlaWE4xYkhSSmJtUmxlQ0FySUNkY0lpQW5YRzRnSUNBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQXZMeUJTWlc1a1pYSWdaV0ZqYUNCbmNtOTFjQ0J2WmlCdFlYSnJkWEFnZDJsMGFDQnphVzFwYkdGeUlIZHlZWEJ3YVc1bklHQnViMlJsVG1GdFpXQXVYRzRnSUNBZ0lDQjJZWElnY21WdVpHVnlUbTlrWlhNZ1BTQmpjbVZoZEdWT2IyUmxjMFp5YjIxTllYSnJkWEFvWEc0Z0lDQWdJQ0FnSUcxaGNtdDFjRXhwYzNSQ2VVNXZaR1ZPWVcxbExtcHZhVzRvSnljcExGeHVJQ0FnSUNBZ0lDQmxiWEIwZVVaMWJtTjBhVzl1SUM4dklFUnZJRzV2ZEdocGJtY2djM0JsWTJsaGJDQjNhWFJvSUR4elkzSnBjSFErSUhSaFozTXVYRzRnSUNBZ0lDQXBPMXh1WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJxSUQwZ01Ec2dhaUE4SUhKbGJtUmxjazV2WkdWekxteGxibWQwYURzZ0t5dHFLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnlaVzVrWlhKT2IyUmxJRDBnY21WdVpHVnlUbTlrWlhOYmFsMDdYRzRnSUNBZ0lDQWdJR2xtSUNoeVpXNWtaWEpPYjJSbExtaGhjMEYwZEhKcFluVjBaU0FtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZ1WkdWeVRtOWtaUzVvWVhOQmRIUnlhV0oxZEdVb1VrVlRWVXhVWDBsT1JFVllYMEZVVkZJcEtTQjdYRzVjYmlBZ0lDQWdJQ0FnSUNCeVpYTjFiSFJKYm1SbGVDQTlJQ3R5Wlc1a1pYSk9iMlJsTG1kbGRFRjBkSEpwWW5WMFpTaFNSVk5WVEZSZlNVNUVSVmhmUVZSVVVpazdYRzRnSUNBZ0lDQWdJQ0FnY21WdVpHVnlUbTlrWlM1eVpXMXZkbVZCZEhSeWFXSjFkR1VvVWtWVFZVeFVYMGxPUkVWWVgwRlVWRklwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdJQ0FnSUNGeVpYTjFiSFJNYVhOMExtaGhjMDkzYmxCeWIzQmxjblI1S0hKbGMzVnNkRWx1WkdWNEtTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNkRVlXNW5aWEk2SUVGemMybG5ibWx1WnlCMGJ5QmhiaUJoYkhKbFlXUjVMVzlqWTNWd2FXVmtJSEpsYzNWc2RDQnBibVJsZUM0blhHNGdJQ0FnSUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENnaGNtVnpkV3gwVEdsemRDNW9ZWE5QZDI1UWNtOXdaWEowZVNoeVpYTjFiSFJKYm1SbGVDa3BLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lISmxjM1ZzZEV4cGMzUmJjbVZ6ZFd4MFNXNWtaWGhkSUQwZ2NtVnVaR1Z5VG05a1pUdGNibHh1SUNBZ0lDQWdJQ0FnSUM4dklGUm9hWE1nYzJodmRXeGtJRzFoZEdOb0lISmxjM1ZzZEV4cGMzUXViR1Z1WjNSb0lHRnVaQ0J0WVhKcmRYQk1hWE4wTG14bGJtZDBhQ0IzYUdWdVhHNGdJQ0FnSUNBZ0lDQWdMeThnZDJVbmNtVWdaRzl1WlM1Y2JpQWdJQ0FnSUNBZ0lDQnlaWE4xYkhSTWFYTjBRWE56YVdkdWJXVnVkRU52ZFc1MElDczlJREU3WEc1Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdKMFJoYm1kbGNqb2dSR2x6WTJGeVpHbHVaeUIxYm1WNGNHVmpkR1ZrSUc1dlpHVTZKeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxibVJsY2s1dlpHVmNiaUFnSUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1FXeDBhRzkxWjJnZ2NtVnpkV3gwVEdsemRDQjNZWE1nY0c5d2RXeGhkR1ZrSUc5MWRDQnZaaUJ2Y21SbGNpd2dhWFFnYzJodmRXeGtJRzV2ZHlCaVpTQmhJR1JsYm5ObFhHNGdJQ0FnTHk4Z1lYSnlZWGt1WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lISmxjM1ZzZEV4cGMzUkJjM05wWjI1dFpXNTBRMjkxYm5RZ1BUMDlJSEpsYzNWc2RFeHBjM1F1YkdWdVozUm9MRnh1SUNBZ0lDQWdKMFJoYm1kbGNqb2dSR2xrSUc1dmRDQmhjM05wWjI0Z2RHOGdaWFpsY25rZ2FXNWtaWGdnYjJZZ2NtVnpkV3gwVEdsemRDNG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2h5WlhOMWJIUk1hWE4wUVhOemFXZHViV1Z1ZEVOdmRXNTBJRDA5UFNCeVpYTjFiSFJNYVhOMExteGxibWQwYUNrcE8xeHVYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUhKbGMzVnNkRXhwYzNRdWJHVnVaM1JvSUQwOVBTQnRZWEpyZFhCTWFYTjBMbXhsYm1kMGFDeGNiaUFnSUNBZ0lDZEVZVzVuWlhJNklFVjRjR1ZqZEdWa0lHMWhjbXQxY0NCMGJ5QnlaVzVrWlhJZ0pYTWdibTlrWlhNc0lHSjFkQ0J5Wlc1a1pYSmxaQ0FsY3k0bkxGeHVJQ0FnSUNBZ2JXRnlhM1Z3VEdsemRDNXNaVzVuZEdnc1hHNGdJQ0FnSUNCeVpYTjFiSFJNYVhOMExteGxibWQwYUZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2NtVnpkV3gwVEdsemRDNXNaVzVuZEdnZ1BUMDlJRzFoY210MWNFeHBjM1F1YkdWdVozUm9LU2s3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjbVZ6ZFd4MFRHbHpkRHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVndiR0ZqWlhNZ1lTQnViMlJsSUhkcGRHZ2dZU0J6ZEhKcGJtY2diMllnYldGeWEzVndJR0YwSUdsMGN5QmpkWEp5Wlc1MElIQnZjMmwwYVc5dUlIZHBkR2hwYmlCcGRITmNiaUFnSUNvZ2NHRnlaVzUwTGlCVWFHVWdiV0Z5YTNWd0lHMTFjM1FnY21WdVpHVnlJR2x1ZEc4Z1lTQnphVzVuYkdVZ2NtOXZkQ0J1YjJSbExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUc5c1pFTm9hV3hrSUVOb2FXeGtJRzV2WkdVZ2RHOGdjbVZ3YkdGalpTNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUcxaGNtdDFjQ0JOWVhKcmRYQWdkRzhnY21WdVpHVnlJR2x1SUhCc1lXTmxJRzltSUhSb1pTQmphR2xzWkNCdWIyUmxMbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR1JoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd09pQm1kVzVqZEdsdmJpaHZiR1JEYUdsc1pDd2diV0Z5YTNWd0tTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUVWNFpXTjFkR2x2YmtWdWRtbHliMjV0Wlc1MExtTmhibFZ6WlVSUFRTeGNiaUFnSUNBZ0lDZGtZVzVuWlhKdmRYTnNlVkpsY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0NndUxpNHBPaUJEWVc1dWIzUWdjbVZ1WkdWeUlHMWhjbXQxY0NCcGJpQmhJQ2NnSzF4dUlDQWdJQ0FnSjNkdmNtdGxjaUIwYUhKbFlXUXVJRTFoYTJVZ2MzVnlaU0JnZDJsdVpHOTNZQ0JoYm1RZ1lHUnZZM1Z0Wlc1MFlDQmhjbVVnWVhaaGFXeGhZbXhsSUNjZ0sxeHVJQ0FnSUNBZ0oyZHNiMkpoYkd4NUlHSmxabTl5WlNCeVpYRjFhWEpwYm1jZ1VtVmhZM1FnZDJobGJpQjFibWwwSUhSbGMzUnBibWNnYjNJZ2RYTmxJQ2NnSzF4dUlDQWdJQ0FnSjFKbFlXTjBMbkpsYm1SbGNsUnZVM1J5YVc1bklHWnZjaUJ6WlhKMlpYSWdjbVZ1WkdWeWFXNW5MaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0VWNFpXTjFkR2x2YmtWdWRtbHliMjV0Wlc1MExtTmhibFZ6WlVSUFRTa3BPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb2JXRnlhM1Z3TENBblpHRnVaMlZ5YjNWemJIbFNaWEJzWVdObFRtOWtaVmRwZEdoTllYSnJkWEFvTGk0dUtUb2dUV2x6YzJsdVp5QnRZWEpyZFhBdUp5a2dPaUJwYm5aaGNtbGhiblFvYldGeWEzVndLU2s3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lHOXNaRU5vYVd4a0xuUmhaMDVoYldVdWRHOU1iM2RsY2tOaGMyVW9LU0FoUFQwZ0oyaDBiV3duTEZ4dUlDQWdJQ0FnSjJSaGJtZGxjbTkxYzJ4NVVtVndiR0ZqWlU1dlpHVlhhWFJvVFdGeWEzVndLQzR1TGlrNklFTmhibTV2ZENCeVpYQnNZV05sSUcxaGNtdDFjQ0J2WmlCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FuUEdoMGJXdytJRzV2WkdVdUlGUm9hWE1nYVhNZ1ltVmpZWFZ6WlNCaWNtOTNjMlZ5SUhGMWFYSnJjeUJ0WVd0bElIUm9hWE1nZFc1eVpXeHBZV0pzWlNBbklDdGNiaUFnSUNBZ0lDZGhibVF2YjNJZ2MyeHZkeTRnU1dZZ2VXOTFJSGRoYm5RZ2RHOGdjbVZ1WkdWeUlIUnZJSFJvWlNCeWIyOTBJSGx2ZFNCdGRYTjBJSFZ6WlNBbklDdGNiaUFnSUNBZ0lDZHpaWEoyWlhJZ2NtVnVaR1Z5YVc1bkxpQlRaV1VnVW1WaFkzUXVjbVZ1WkdWeVZHOVRkSEpwYm1jb0tTNG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2h2YkdSRGFHbHNaQzUwWVdkT1lXMWxMblJ2VEc5M1pYSkRZWE5sS0NrZ0lUMDlJQ2RvZEcxc0p5a3BPMXh1WEc0Z0lDQWdkbUZ5SUc1bGQwTm9hV3hrSUQwZ1kzSmxZWFJsVG05a1pYTkdjbTl0VFdGeWEzVndLRzFoY210MWNDd2daVzF3ZEhsR2RXNWpkR2x2YmlsYk1GMDdYRzRnSUNBZ2IyeGtRMmhwYkdRdWNHRnlaVzUwVG05a1pTNXlaWEJzWVdObFEyaHBiR1FvYm1WM1EyaHBiR1FzSUc5c1pFTm9hV3hrS1R0Y2JpQWdmVnh1WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRVJoYm1kbGNqdGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBEZWZhdWx0RXZlbnRQbHVnaW5PcmRlclxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG5cbi8qKlxuICogTW9kdWxlIHRoYXQgaXMgaW5qZWN0YWJsZSBpbnRvIGBFdmVudFBsdWdpbkh1YmAsIHRoYXQgc3BlY2lmaWVzIGFcbiAqIGRldGVybWluaXN0aWMgb3JkZXJpbmcgb2YgYEV2ZW50UGx1Z2luYHMuIEEgY29udmVuaWVudCB3YXkgdG8gcmVhc29uIGFib3V0XG4gKiBwbHVnaW5zLCB3aXRob3V0IGhhdmluZyB0byBwYWNrYWdlIGV2ZXJ5IG9uZSBvZiB0aGVtLiBUaGlzIGlzIGJldHRlciB0aGFuXG4gKiBoYXZpbmcgcGx1Z2lucyBiZSBvcmRlcmVkIGluIHRoZSBzYW1lIG9yZGVyIHRoYXQgdGhleSBhcmUgaW5qZWN0ZWQgYmVjYXVzZVxuICogdGhhdCBvcmRlcmluZyB3b3VsZCBiZSBpbmZsdWVuY2VkIGJ5IHRoZSBwYWNrYWdpbmcgb3JkZXIuXG4gKiBgUmVzcG9uZGVyRXZlbnRQbHVnaW5gIG11c3Qgb2NjdXIgYmVmb3JlIGBTaW1wbGVFdmVudFBsdWdpbmAgc28gdGhhdFxuICogcHJldmVudGluZyBkZWZhdWx0IG9uIGV2ZW50cyBpcyBjb252ZW5pZW50IGluIGBTaW1wbGVFdmVudFBsdWdpbmAgaGFuZGxlcnMuXG4gKi9cbnZhciBEZWZhdWx0RXZlbnRQbHVnaW5PcmRlciA9IFtcbiAga2V5T2Yoe1Jlc3BvbmRlckV2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtTaW1wbGVFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7VGFwRXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe0VudGVyTGVhdmVFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7Q2hhbmdlRXZlbnRQbHVnaW46IG51bGx9KSxcbiAga2V5T2Yoe1NlbGVjdEV2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtCZWZvcmVJbnB1dEV2ZW50UGx1Z2luOiBudWxsfSksXG4gIGtleU9mKHtBbmFseXRpY3NFdmVudFBsdWdpbjogbnVsbH0pLFxuICBrZXlPZih7TW9iaWxlU2FmYXJpQ2xpY2tFdmVudFBsdWdpbjogbnVsbH0pXG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlZmF1bHRFdmVudFBsdWdpbk9yZGVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEVudGVyTGVhdmVFdmVudFBsdWdpblxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKFwiLi9FdmVudFByb3BhZ2F0b3JzXCIpO1xudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNNb3VzZUV2ZW50XCIpO1xuXG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcblxudmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzO1xudmFyIGdldEZpcnN0UmVhY3RET00gPSBSZWFjdE1vdW50LmdldEZpcnN0UmVhY3RET007XG5cbnZhciBldmVudFR5cGVzID0ge1xuICBtb3VzZUVudGVyOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZToga2V5T2Yoe29uTW91c2VFbnRlcjogbnVsbH0pLFxuICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU91dCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VPdmVyXG4gICAgXVxuICB9LFxuICBtb3VzZUxlYXZlOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZToga2V5T2Yoe29uTW91c2VMZWF2ZTogbnVsbH0pLFxuICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU91dCxcbiAgICAgIHRvcExldmVsVHlwZXMudG9wTW91c2VPdmVyXG4gICAgXVxuICB9XG59O1xuXG52YXIgZXh0cmFjdGVkRXZlbnRzID0gW251bGwsIG51bGxdO1xuXG52YXIgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luID0ge1xuXG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgLyoqXG4gICAqIEZvciBhbG1vc3QgZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9wLWxldmVsXG4gICAqIGBtb3VzZW92ZXJgIGFuZCBgbW91c2VvdXRgIGV2ZW50IHRoYXQgb2NjdXJzLiBPbmx5IHVzZSBgbW91c2VvdXRgIHNvIHRoYXRcbiAgICogd2UgZG8gbm90IGV4dHJhY3QgZHVwbGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICAgKiBicm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2VcbiAgICogdGhlIGBtb3VzZW92ZXJgIHRvcC1sZXZlbCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU92ZXIgJiZcbiAgICAgICAgKG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQuZnJvbUVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRvcExldmVsVHlwZSAhPT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZU91dCAmJlxuICAgICAgICB0b3BMZXZlbFR5cGUgIT09IHRvcExldmVsVHlwZXMudG9wTW91c2VPdmVyKSB7XG4gICAgICAvLyBNdXN0IG5vdCBiZSBhIG1vdXNlIGluIG9yIG1vdXNlIG91dCAtIGlnbm9yaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHdpbjtcbiAgICBpZiAodG9wTGV2ZWxUYXJnZXQud2luZG93ID09PSB0b3BMZXZlbFRhcmdldCkge1xuICAgICAgLy8gYHRvcExldmVsVGFyZ2V0YCBpcyBwcm9iYWJseSBhIHdpbmRvdyBvYmplY3QuXG4gICAgICB3aW4gPSB0b3BMZXZlbFRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgICAgdmFyIGRvYyA9IHRvcExldmVsVGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG4gICAgICBpZiAoZG9jKSB7XG4gICAgICAgIHdpbiA9IGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luID0gd2luZG93O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tLCB0bztcbiAgICBpZiAodG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0KSB7XG4gICAgICBmcm9tID0gdG9wTGV2ZWxUYXJnZXQ7XG4gICAgICB0byA9XG4gICAgICAgIGdldEZpcnN0UmVhY3RET00obmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC50b0VsZW1lbnQpIHx8XG4gICAgICAgIHdpbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbSA9IHdpbjtcbiAgICAgIHRvID0gdG9wTGV2ZWxUYXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgICAvLyBOb3RoaW5nIHBlcnRhaW5zIHRvIG91ciBtYW5hZ2VkIGNvbXBvbmVudHMuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZnJvbUlEID0gZnJvbSA/IFJlYWN0TW91bnQuZ2V0SUQoZnJvbSkgOiAnJztcbiAgICB2YXIgdG9JRCA9IHRvID8gUmVhY3RNb3VudC5nZXRJRCh0bykgOiAnJztcblxuICAgIHZhciBsZWF2ZSA9IFN5bnRoZXRpY01vdXNlRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgZXZlbnRUeXBlcy5tb3VzZUxlYXZlLFxuICAgICAgZnJvbUlELFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApO1xuICAgIGxlYXZlLnR5cGUgPSAnbW91c2VsZWF2ZSc7XG4gICAgbGVhdmUudGFyZ2V0ID0gZnJvbTtcbiAgICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG87XG5cbiAgICB2YXIgZW50ZXIgPSBTeW50aGV0aWNNb3VzZUV2ZW50LmdldFBvb2xlZChcbiAgICAgIGV2ZW50VHlwZXMubW91c2VFbnRlcixcbiAgICAgIHRvSUQsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG4gICAgZW50ZXIudHlwZSA9ICdtb3VzZWVudGVyJztcbiAgICBlbnRlci50YXJnZXQgPSB0bztcbiAgICBlbnRlci5yZWxhdGVkVGFyZ2V0ID0gZnJvbTtcblxuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzKGxlYXZlLCBlbnRlciwgZnJvbUlELCB0b0lEKTtcblxuICAgIGV4dHJhY3RlZEV2ZW50c1swXSA9IGxlYXZlO1xuICAgIGV4dHJhY3RlZEV2ZW50c1sxXSA9IGVudGVyO1xuXG4gICAgcmV0dXJuIGV4dHJhY3RlZEV2ZW50cztcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVudGVyTGVhdmVFdmVudFBsdWdpbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFdmVudENvbnN0YW50c1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGtleU1pcnJvciA9IHJlcXVpcmUoXCIuL2tleU1pcnJvclwiKTtcblxudmFyIFByb3BhZ2F0aW9uUGhhc2VzID0ga2V5TWlycm9yKHtidWJibGVkOiBudWxsLCBjYXB0dXJlZDogbnVsbH0pO1xuXG4vKipcbiAqIFR5cGVzIG9mIHJhdyBzaWduYWxzIGZyb20gdGhlIGJyb3dzZXIgY2F1Z2h0IGF0IHRoZSB0b3AgbGV2ZWwuXG4gKi9cbnZhciB0b3BMZXZlbFR5cGVzID0ga2V5TWlycm9yKHtcbiAgdG9wQmx1cjogbnVsbCxcbiAgdG9wQ2hhbmdlOiBudWxsLFxuICB0b3BDbGljazogbnVsbCxcbiAgdG9wQ29tcG9zaXRpb25FbmQ6IG51bGwsXG4gIHRvcENvbXBvc2l0aW9uU3RhcnQ6IG51bGwsXG4gIHRvcENvbXBvc2l0aW9uVXBkYXRlOiBudWxsLFxuICB0b3BDb250ZXh0TWVudTogbnVsbCxcbiAgdG9wQ29weTogbnVsbCxcbiAgdG9wQ3V0OiBudWxsLFxuICB0b3BEb3VibGVDbGljazogbnVsbCxcbiAgdG9wRHJhZzogbnVsbCxcbiAgdG9wRHJhZ0VuZDogbnVsbCxcbiAgdG9wRHJhZ0VudGVyOiBudWxsLFxuICB0b3BEcmFnRXhpdDogbnVsbCxcbiAgdG9wRHJhZ0xlYXZlOiBudWxsLFxuICB0b3BEcmFnT3ZlcjogbnVsbCxcbiAgdG9wRHJhZ1N0YXJ0OiBudWxsLFxuICB0b3BEcm9wOiBudWxsLFxuICB0b3BFcnJvcjogbnVsbCxcbiAgdG9wRm9jdXM6IG51bGwsXG4gIHRvcElucHV0OiBudWxsLFxuICB0b3BLZXlEb3duOiBudWxsLFxuICB0b3BLZXlQcmVzczogbnVsbCxcbiAgdG9wS2V5VXA6IG51bGwsXG4gIHRvcExvYWQ6IG51bGwsXG4gIHRvcE1vdXNlRG93bjogbnVsbCxcbiAgdG9wTW91c2VNb3ZlOiBudWxsLFxuICB0b3BNb3VzZU91dDogbnVsbCxcbiAgdG9wTW91c2VPdmVyOiBudWxsLFxuICB0b3BNb3VzZVVwOiBudWxsLFxuICB0b3BQYXN0ZTogbnVsbCxcbiAgdG9wUmVzZXQ6IG51bGwsXG4gIHRvcFNjcm9sbDogbnVsbCxcbiAgdG9wU2VsZWN0aW9uQ2hhbmdlOiBudWxsLFxuICB0b3BTdWJtaXQ6IG51bGwsXG4gIHRvcFRleHRJbnB1dDogbnVsbCxcbiAgdG9wVG91Y2hDYW5jZWw6IG51bGwsXG4gIHRvcFRvdWNoRW5kOiBudWxsLFxuICB0b3BUb3VjaE1vdmU6IG51bGwsXG4gIHRvcFRvdWNoU3RhcnQ6IG51bGwsXG4gIHRvcFdoZWVsOiBudWxsXG59KTtcblxudmFyIEV2ZW50Q29uc3RhbnRzID0ge1xuICB0b3BMZXZlbFR5cGVzOiB0b3BMZXZlbFR5cGVzLFxuICBQcm9wYWdhdGlvblBoYXNlczogUHJvcGFnYXRpb25QaGFzZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRDb25zdGFudHM7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFdmVudExpc3RlbmVyXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZW1wdHlGdW5jdGlvblwiKTtcblxuLyoqXG4gKiBVcHN0cmVhbSB2ZXJzaW9uIG9mIGV2ZW50IGxpc3RlbmVyLiBEb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBzcGVjaWZpY1xuICogbmF0dXJlIG9mIHBsYXRmb3JtLlxuICovXG52YXIgRXZlbnRMaXN0ZW5lciA9IHtcbiAgLyoqXG4gICAqIExpc3RlbiB0byBET00gZXZlbnRzIGR1cmluZyB0aGUgYnViYmxlIHBoYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0YXJnZXQgRE9NIGVsZW1lbnQgdG8gcmVnaXN0ZXIgbGlzdGVuZXIgb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgRXZlbnQgdHlwZSwgZS5nLiAnY2xpY2snIG9yICdtb3VzZW92ZXInLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybiB7b2JqZWN0fSBPYmplY3Qgd2l0aCBhIGByZW1vdmVgIG1ldGhvZC5cbiAgICovXG4gIGxpc3RlbjogZnVuY3Rpb24odGFyZ2V0LCBldmVudFR5cGUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHRhcmdldC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrLCBmYWxzZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldC5hdHRhY2hFdmVudCkge1xuICAgICAgdGFyZ2V0LmF0dGFjaEV2ZW50KCdvbicgKyBldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdGFyZ2V0LmRldGFjaEV2ZW50KCdvbicgKyBldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBET00gZXZlbnRzIGR1cmluZyB0aGUgY2FwdHVyZSBwaGFzZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdGFyZ2V0IERPTSBlbGVtZW50IHRvIHJlZ2lzdGVyIGxpc3RlbmVyIG9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIEV2ZW50IHR5cGUsIGUuZy4gJ2NsaWNrJyBvciAnbW91c2VvdmVyJy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IHdpdGggYSBgcmVtb3ZlYCBtZXRob2QuXG4gICAqL1xuICBjYXB0dXJlOiBmdW5jdGlvbih0YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIXRhcmdldC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0F0dGVtcHRlZCB0byBsaXN0ZW4gdG8gZXZlbnRzIGR1cmluZyB0aGUgY2FwdHVyZSBwaGFzZSBvbiBhICcgK1xuICAgICAgICAgICdicm93c2VyIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY2FwdHVyZSBwaGFzZS4gWW91ciBhcHBsaWNhdGlvbiAnICtcbiAgICAgICAgICAnd2lsbCBub3QgcmVjZWl2ZSBzb21lIGV2ZW50cy4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZW1vdmU6IGVtcHR5RnVuY3Rpb25cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIHRydWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0sXG5cbiAgcmVnaXN0ZXJEZWZhdWx0OiBmdW5jdGlvbigpIHt9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50TGlzdGVuZXI7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSWFpsYm5STWFYTjBaVzVsY2k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tseHVJQ29nVEdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVGd1lXTm9aU0JNYVdObGJuTmxMQ0JXWlhKemFXOXVJREl1TUNBb2RHaGxJRndpVEdsalpXNXpaVndpS1R0Y2JpQXFJSGx2ZFNCdFlYa2dibTkwSUhWelpTQjBhR2x6SUdacGJHVWdaWGhqWlhCMElHbHVJR052YlhCc2FXRnVZMlVnZDJsMGFDQjBhR1VnVEdsalpXNXpaUzVjYmlBcUlGbHZkU0J0WVhrZ2IySjBZV2x1SUdFZ1kyOXdlU0J2WmlCMGFHVWdUR2xqWlc1elpTQmhkRnh1SUNwY2JpQXFJR2gwZEhBNkx5OTNkM2N1WVhCaFkyaGxMbTl5Wnk5c2FXTmxibk5sY3k5TVNVTkZUbE5GTFRJdU1GeHVJQ3BjYmlBcUlGVnViR1Z6Y3lCeVpYRjFhWEpsWkNCaWVTQmhjSEJzYVdOaFlteGxJR3hoZHlCdmNpQmhaM0psWldRZ2RHOGdhVzRnZDNKcGRHbHVaeXdnYzI5bWRIZGhjbVZjYmlBcUlHUnBjM1J5YVdKMWRHVmtJSFZ1WkdWeUlIUm9aU0JNYVdObGJuTmxJR2x6SUdScGMzUnlhV0oxZEdWa0lHOXVJR0Z1SUZ3aVFWTWdTVk5jSWlCQ1FWTkpVeXhjYmlBcUlGZEpWRWhQVlZRZ1YwRlNVa0ZPVkVsRlV5QlBVaUJEVDA1RVNWUkpUMDVUSUU5R0lFRk9XU0JMU1U1RUxDQmxhWFJvWlhJZ1pYaHdjbVZ6Y3lCdmNpQnBiWEJzYVdWa0xseHVJQ29nVTJWbElIUm9aU0JNYVdObGJuTmxJR1p2Y2lCMGFHVWdjM0JsWTJsbWFXTWdiR0Z1WjNWaFoyVWdaMjkyWlhKdWFXNW5JSEJsY20xcGMzTnBiMjV6SUdGdVpGeHVJQ29nYkdsdGFYUmhkR2x2Ym5NZ2RXNWtaWElnZEdobElFeHBZMlZ1YzJVdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUVWMlpXNTBUR2x6ZEdWdVpYSmNiaUFxSUVCMGVYQmxZMmhsWTJ0elhHNGdLaTljYmx4dWRtRnlJR1Z0Y0hSNVJuVnVZM1JwYjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlsYlhCMGVVWjFibU4wYVc5dVhDSXBPMXh1WEc0dktpcGNiaUFxSUZWd2MzUnlaV0Z0SUhabGNuTnBiMjRnYjJZZ1pYWmxiblFnYkdsemRHVnVaWEl1SUVSdlpYTWdibTkwSUhSaGEyVWdhVzUwYnlCaFkyTnZkVzUwSUhOd1pXTnBabWxqWEc0Z0tpQnVZWFIxY21VZ2IyWWdjR3hoZEdadmNtMHVYRzRnS2k5Y2JuWmhjaUJGZG1WdWRFeHBjM1JsYm1WeUlEMGdlMXh1SUNBdktpcGNiaUFnSUNvZ1RHbHpkR1Z1SUhSdklFUlBUU0JsZG1WdWRITWdaSFZ5YVc1bklIUm9aU0JpZFdKaWJHVWdjR2hoYzJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUlhabGJuUlVZWEpuWlhSOUlIUmhjbWRsZENCRVQwMGdaV3hsYldWdWRDQjBieUJ5WldkcGMzUmxjaUJzYVhOMFpXNWxjaUJ2Ymk1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR1YyWlc1MFZIbHdaU0JGZG1WdWRDQjBlWEJsTENCbExtY3VJQ2RqYkdsamF5Y2diM0lnSjIxdmRYTmxiM1psY2ljdVhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjU5SUdOaGJHeGlZV05ySUVOaGJHeGlZV05ySUdaMWJtTjBhVzl1TGx4dUlDQWdLaUJBY21WMGRYSnVJSHR2WW1wbFkzUjlJRTlpYW1WamRDQjNhWFJvSUdFZ1lISmxiVzkyWldBZ2JXVjBhRzlrTGx4dUlDQWdLaTljYmlBZ2JHbHpkR1Z1T2lCbWRXNWpkR2x2YmloMFlYSm5aWFFzSUdWMlpXNTBWSGx3WlN3Z1kyRnNiR0poWTJzcElIdGNiaUFnSUNCcFppQW9kR0Z5WjJWMExtRmtaRVYyWlc1MFRHbHpkR1Z1WlhJcElIdGNiaUFnSUNBZ0lIUmhjbWRsZEM1aFpHUkZkbVZ1ZEV4cGMzUmxibVZ5S0dWMlpXNTBWSGx3WlN3Z1kyRnNiR0poWTJzc0lHWmhiSE5sS1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUhKbGJXOTJaVG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR0Z5WjJWMExuSmxiVzkyWlVWMlpXNTBUR2x6ZEdWdVpYSW9aWFpsYm5SVWVYQmxMQ0JqWVd4c1ltRmpheXdnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDBnWld4elpTQnBaaUFvZEdGeVoyVjBMbUYwZEdGamFFVjJaVzUwS1NCN1hHNGdJQ0FnSUNCMFlYSm5aWFF1WVhSMFlXTm9SWFpsYm5Rb0oyOXVKeUFySUdWMlpXNTBWSGx3WlN3Z1kyRnNiR0poWTJzcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ2NtVnRiM1psT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lDQWdJQ0IwWVhKblpYUXVaR1YwWVdOb1JYWmxiblFvSjI5dUp5QXJJR1YyWlc1MFZIbHdaU3dnWTJGc2JHSmhZMnNwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUR2x6ZEdWdUlIUnZJRVJQVFNCbGRtVnVkSE1nWkhWeWFXNW5JSFJvWlNCallYQjBkWEpsSUhCb1lYTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVjJaVzUwVkdGeVoyVjBmU0IwWVhKblpYUWdSRTlOSUdWc1pXMWxiblFnZEc4Z2NtVm5hWE4wWlhJZ2JHbHpkR1Z1WlhJZ2IyNHVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCbGRtVnVkRlI1Y0dVZ1JYWmxiblFnZEhsd1pTd2daUzVuTGlBblkyeHBZMnNuSUc5eUlDZHRiM1Z6Wlc5MlpYSW5MbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5QkRZV3hzWW1GamF5Qm1kVzVqZEdsdmJpNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN2IySnFaV04wZlNCUFltcGxZM1FnZDJsMGFDQmhJR0J5WlcxdmRtVmdJRzFsZEdodlpDNWNiaUFnSUNvdlhHNGdJR05oY0hSMWNtVTZJR1oxYm1OMGFXOXVLSFJoY21kbGRDd2daWFpsYm5SVWVYQmxMQ0JqWVd4c1ltRmpheWtnZTF4dUlDQWdJR2xtSUNnaGRHRnlaMlYwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElwSUh0Y2JpQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhjYmlBZ0lDQWdJQ0FnSUNBblFYUjBaVzF3ZEdWa0lIUnZJR3hwYzNSbGJpQjBieUJsZG1WdWRITWdaSFZ5YVc1bklIUm9aU0JqWVhCMGRYSmxJSEJvWVhObElHOXVJR0VnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMkp5YjNkelpYSWdkR2hoZENCa2IyVnpJRzV2ZENCemRYQndiM0owSUhSb1pTQmpZWEIwZFhKbElIQm9ZWE5sTGlCWmIzVnlJR0Z3Y0d4cFkyRjBhVzl1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2QzYVd4c0lHNXZkQ0J5WldObGFYWmxJSE52YldVZ1pYWmxiblJ6TGlkY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lISmxiVzkyWlRvZ1pXMXdkSGxHZFc1amRHbHZibHh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHRnlaMlYwTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvWlhabGJuUlVlWEJsTENCallXeHNZbUZqYXl3Z2RISjFaU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0J5WlcxdmRtVTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUmhjbWRsZEM1eVpXMXZkbVZGZG1WdWRFeHBjM1JsYm1WeUtHVjJaVzUwVkhsd1pTd2dZMkZzYkdKaFkyc3NJSFJ5ZFdVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0J5WldkcGMzUmxja1JsWm1GMWJIUTZJR1oxYm1OMGFXOXVLQ2tnZTMxY2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUlhabGJuUk1hWE4wWlc1bGNqdGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQbHVnaW5IdWJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5SZWdpc3RyeVwiKTtcbnZhciBFdmVudFBsdWdpblV0aWxzID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5VdGlsc1wiKTtcblxudmFyIGFjY3VtdWxhdGVJbnRvID0gcmVxdWlyZShcIi4vYWNjdW11bGF0ZUludG9cIik7XG52YXIgZm9yRWFjaEFjY3VtdWxhdGVkID0gcmVxdWlyZShcIi4vZm9yRWFjaEFjY3VtdWxhdGVkXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBJbnRlcm5hbCBzdG9yZSBmb3IgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbnZhciBsaXN0ZW5lckJhbmsgPSB7fTtcblxuLyoqXG4gKiBJbnRlcm5hbCBxdWV1ZSBvZiBldmVudHMgdGhhdCBoYXZlIGFjY3VtdWxhdGVkIHRoZWlyIGRpc3BhdGNoZXMgYW5kIGFyZVxuICogd2FpdGluZyB0byBoYXZlIHRoZWlyIGRpc3BhdGNoZXMgZXhlY3V0ZWQuXG4gKi9cbnZhciBldmVudFF1ZXVlID0gbnVsbDtcblxuLyoqXG4gKiBEaXNwYXRjaGVzIGFuIGV2ZW50IGFuZCByZWxlYXNlcyBpdCBiYWNrIGludG8gdGhlIHBvb2wsIHVubGVzcyBwZXJzaXN0ZW50LlxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gZXZlbnQgU3ludGhldGljIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgaWYgKGV2ZW50KSB7XG4gICAgdmFyIGV4ZWN1dGVEaXNwYXRjaCA9IEV2ZW50UGx1Z2luVXRpbHMuZXhlY3V0ZURpc3BhdGNoO1xuICAgIC8vIFBsdWdpbnMgY2FuIHByb3ZpZGUgY3VzdG9tIGJlaGF2aW9yIHdoZW4gZGlzcGF0Y2hpbmcgZXZlbnRzLlxuICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LmdldFBsdWdpbk1vZHVsZUZvckV2ZW50KGV2ZW50KTtcbiAgICBpZiAoUGx1Z2luTW9kdWxlICYmIFBsdWdpbk1vZHVsZS5leGVjdXRlRGlzcGF0Y2gpIHtcbiAgICAgIGV4ZWN1dGVEaXNwYXRjaCA9IFBsdWdpbk1vZHVsZS5leGVjdXRlRGlzcGF0Y2g7XG4gICAgfVxuICAgIEV2ZW50UGx1Z2luVXRpbHMuZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyKGV2ZW50LCBleGVjdXRlRGlzcGF0Y2gpO1xuXG4gICAgaWYgKCFldmVudC5pc1BlcnNpc3RlbnQoKSkge1xuICAgICAgZXZlbnQuY29uc3RydWN0b3IucmVsZWFzZShldmVudCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIC0gYEluc3RhbmNlSGFuZGxlYDogW3JlcXVpcmVkXSBNb2R1bGUgdGhhdCBwZXJmb3JtcyBsb2dpY2FsIHRyYXZlcnNhbHMgb2YgRE9NXG4gKiAgIGhpZXJhcmNoeSBnaXZlbiBpZHMgb2YgdGhlIGxvZ2ljYWwgRE9NIGVsZW1lbnRzIGludm9sdmVkLlxuICovXG52YXIgSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUluc3RhbmNlSGFuZGxlKCkge1xuICB2YXIgdmFsaWQgPVxuICAgIEluc3RhbmNlSGFuZGxlICYmXG4gICAgSW5zdGFuY2VIYW5kbGUudHJhdmVyc2VUd29QaGFzZSAmJlxuICAgIEluc3RhbmNlSGFuZGxlLnRyYXZlcnNlRW50ZXJMZWF2ZTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICB2YWxpZCxcbiAgICAnSW5zdGFuY2VIYW5kbGUgbm90IGluamVjdGVkIGJlZm9yZSB1c2UhJ1xuICApIDogaW52YXJpYW50KHZhbGlkKSk7XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBldmVudCBwbHVnaW5zIHRvIGJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC5cbiAqXG4gKiBFdmVudCBwbHVnaW5zIGNhbiBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgYGV4dHJhY3RFdmVudHNgIHtmdW5jdGlvbihzdHJpbmcsIERPTUV2ZW50VGFyZ2V0LCBzdHJpbmcsIG9iamVjdCk6ICp9XG4gKiAgICAgUmVxdWlyZWQuIFdoZW4gYSB0b3AtbGV2ZWwgZXZlbnQgaXMgZmlyZWQsIHRoaXMgbWV0aG9kIGlzIGV4cGVjdGVkIHRvXG4gKiAgICAgZXh0cmFjdCBzeW50aGV0aWMgZXZlbnRzIHRoYXQgd2lsbCBpbiB0dXJuIGJlIHF1ZXVlZCBhbmQgZGlzcGF0Y2hlZC5cbiAqXG4gKiAgIGBldmVudFR5cGVzYCB7b2JqZWN0fVxuICogICAgIE9wdGlvbmFsLCBwbHVnaW5zIHRoYXQgZmlyZSBldmVudHMgbXVzdCBwdWJsaXNoIGEgbWFwcGluZyBvZiByZWdpc3RyYXRpb25cbiAqICAgICBuYW1lcyB0aGF0IGFyZSB1c2VkIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy4gVmFsdWVzIG9mIHRoaXMgbWFwcGluZyBtdXN0XG4gKiAgICAgYmUgb2JqZWN0cyB0aGF0IGNvbnRhaW4gYHJlZ2lzdHJhdGlvbk5hbWVgIG9yIGBwaGFzZWRSZWdpc3RyYXRpb25OYW1lc2AuXG4gKlxuICogICBgZXhlY3V0ZURpc3BhdGNoYCB7ZnVuY3Rpb24ob2JqZWN0LCBmdW5jdGlvbiwgc3RyaW5nKX1cbiAqICAgICBPcHRpb25hbCwgYWxsb3dzIHBsdWdpbnMgdG8gb3ZlcnJpZGUgaG93IGFuIGV2ZW50IGdldHMgZGlzcGF0Y2hlZC4gQnlcbiAqICAgICBkZWZhdWx0LCB0aGUgbGlzdGVuZXIgaXMgc2ltcGx5IGludm9rZWQuXG4gKlxuICogRWFjaCBwbHVnaW4gdGhhdCBpcyBpbmplY3RlZCBpbnRvIGBFdmVudHNQbHVnaW5IdWJgIGlzIGltbWVkaWF0ZWx5IG9wZXJhYmxlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIEV2ZW50UGx1Z2luSHViID0ge1xuXG4gIC8qKlxuICAgKiBNZXRob2RzIGZvciBpbmplY3RpbmcgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgaW5qZWN0aW9uOiB7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gSW5qZWN0ZWRNb3VudFxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBpbmplY3RNb3VudDogRXZlbnRQbHVnaW5VdGlscy5pbmplY3Rpb24uaW5qZWN0TW91bnQsXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gSW5qZWN0ZWRJbnN0YW5jZUhhbmRsZVxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBpbmplY3RJbnN0YW5jZUhhbmRsZTogZnVuY3Rpb24oSW5qZWN0ZWRJbnN0YW5jZUhhbmRsZSkge1xuICAgICAgSW5zdGFuY2VIYW5kbGUgPSBJbmplY3RlZEluc3RhbmNlSGFuZGxlO1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICB2YWxpZGF0ZUluc3RhbmNlSGFuZGxlKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEluc3RhbmNlSGFuZGxlOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgdmFsaWRhdGVJbnN0YW5jZUhhbmRsZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEluc3RhbmNlSGFuZGxlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2FycmF5fSBJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXJcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcjogRXZlbnRQbHVnaW5SZWdpc3RyeS5pbmplY3RFdmVudFBsdWdpbk9yZGVyLFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGluamVjdGVkTmFtZXNUb1BsdWdpbnMgTWFwIGZyb20gbmFtZXMgdG8gcGx1Z2luIG1vZHVsZXMuXG4gICAgICovXG4gICAgaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOiBFdmVudFBsdWdpblJlZ2lzdHJ5LmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZVxuXG4gIH0sXG5cbiAgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzOiBFdmVudFBsdWdpblJlZ2lzdHJ5LmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncyxcblxuICByZWdpc3RyYXRpb25OYW1lTW9kdWxlczogRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcyxcblxuICAvKipcbiAgICogU3RvcmVzIGBsaXN0ZW5lcmAgYXQgYGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXVtpZF1gLiBJcyBpZGVtcG90ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIERPTSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgY2FsbGJhY2sgdG8gc3RvcmUuXG4gICAqL1xuICBwdXRMaXN0ZW5lcjogZnVuY3Rpb24oaWQsIHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICFsaXN0ZW5lciB8fCB0eXBlb2YgbGlzdGVuZXIgPT09ICdmdW5jdGlvbicsXG4gICAgICAnRXhwZWN0ZWQgJXMgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgdHlwZSAlcycsXG4gICAgICByZWdpc3RyYXRpb25OYW1lLCB0eXBlb2YgbGlzdGVuZXJcbiAgICApIDogaW52YXJpYW50KCFsaXN0ZW5lciB8fCB0eXBlb2YgbGlzdGVuZXIgPT09ICdmdW5jdGlvbicpKTtcblxuICAgIHZhciBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSA9XG4gICAgICBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV0gfHwgKGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXSA9IHt9KTtcbiAgICBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtpZF0gPSBsaXN0ZW5lcjtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBET00gZWxlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259IFRoZSBzdG9yZWQgY2FsbGJhY2suXG4gICAqL1xuICBnZXRMaXN0ZW5lcjogZnVuY3Rpb24oaWQsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgcmV0dXJuIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lICYmIGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lW2lkXTtcbiAgfSxcblxuICAvKipcbiAgICogRGVsZXRlcyBhIGxpc3RlbmVyIGZyb20gdGhlIHJlZ2lzdHJhdGlvbiBiYW5rLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIERPTSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gICAqL1xuICBkZWxldGVMaXN0ZW5lcjogZnVuY3Rpb24oaWQsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgaWYgKGJhbmtGb3JSZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICBkZWxldGUgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWVbaWRdO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGVsZXRlcyBhbGwgbGlzdGVuZXJzIGZvciB0aGUgRE9NIGVsZW1lbnQgd2l0aCB0aGUgc3VwcGxpZWQgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gICAqL1xuICBkZWxldGVBbGxMaXN0ZW5lcnM6IGZ1bmN0aW9uKGlkKSB7XG4gICAgZm9yICh2YXIgcmVnaXN0cmF0aW9uTmFtZSBpbiBsaXN0ZW5lckJhbmspIHtcbiAgICAgIGRlbGV0ZSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV1baWRdO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQWxsb3dzIHJlZ2lzdGVyZWQgcGx1Z2lucyBhbiBvcHBvcnR1bml0eSB0byBleHRyYWN0IGV2ZW50cyBmcm9tIHRvcC1sZXZlbFxuICAgKiBuYXRpdmUgYnJvd3NlciBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdG9wTGV2ZWxUYXJnZXQgVGhlIGxpc3RlbmluZyBjb21wb25lbnQgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUYXJnZXRJRCBJRCBvZiBgdG9wTGV2ZWxUYXJnZXRgLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnQpIHtcbiAgICB2YXIgZXZlbnRzO1xuICAgIHZhciBwbHVnaW5zID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5wbHVnaW5zO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGx1Z2lucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIC8vIE5vdCBldmVyeSBwbHVnaW4gaW4gdGhlIG9yZGVyaW5nIG1heSBiZSBsb2FkZWQgYXQgcnVudGltZS5cbiAgICAgIHZhciBwb3NzaWJsZVBsdWdpbiA9IHBsdWdpbnNbaV07XG4gICAgICBpZiAocG9zc2libGVQbHVnaW4pIHtcbiAgICAgICAgdmFyIGV4dHJhY3RlZEV2ZW50cyA9IHBvc3NpYmxlUGx1Z2luLmV4dHJhY3RFdmVudHMoXG4gICAgICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZEV2ZW50cykge1xuICAgICAgICAgIGV2ZW50cyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50cywgZXh0cmFjdGVkRXZlbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIHN5bnRoZXRpYyBldmVudCB0aGF0IHNob3VsZCBiZSBkaXNwYXRjaGVkIHdoZW5cbiAgICogYHByb2Nlc3NFdmVudFF1ZXVlYCBpcyBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGV2ZW50cyBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRXZlbnRzOiBmdW5jdGlvbihldmVudHMpIHtcbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBldmVudFF1ZXVlID0gYWNjdW11bGF0ZUludG8oZXZlbnRRdWV1ZSwgZXZlbnRzKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYWxsIHN5bnRoZXRpYyBldmVudHMgb24gdGhlIGV2ZW50IHF1ZXVlLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb2Nlc3NFdmVudFF1ZXVlOiBmdW5jdGlvbigpIHtcbiAgICAvLyBTZXQgYGV2ZW50UXVldWVgIHRvIG51bGwgYmVmb3JlIHByb2Nlc3NpbmcgaXQgc28gdGhhdCB3ZSBjYW4gdGVsbCBpZiBtb3JlXG4gICAgLy8gZXZlbnRzIGdldCBlbnF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nLlxuICAgIHZhciBwcm9jZXNzaW5nRXZlbnRRdWV1ZSA9IGV2ZW50UXVldWU7XG4gICAgZXZlbnRRdWV1ZSA9IG51bGw7XG4gICAgZm9yRWFjaEFjY3VtdWxhdGVkKHByb2Nlc3NpbmdFdmVudFF1ZXVlLCBleGVjdXRlRGlzcGF0Y2hlc0FuZFJlbGVhc2UpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAhZXZlbnRRdWV1ZSxcbiAgICAgICdwcm9jZXNzRXZlbnRRdWV1ZSgpOiBBZGRpdGlvbmFsIGV2ZW50cyB3ZXJlIGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcgJyArXG4gICAgICAnYW4gZXZlbnQgcXVldWUuIFN1cHBvcnQgZm9yIHRoaXMgaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZC4nXG4gICAgKSA6IGludmFyaWFudCghZXZlbnRRdWV1ZSkpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUaGVzZSBhcmUgbmVlZGVkIGZvciB0ZXN0cyBvbmx5LiBEbyBub3QgdXNlIVxuICAgKi9cbiAgX19wdXJnZTogZnVuY3Rpb24oKSB7XG4gICAgbGlzdGVuZXJCYW5rID0ge307XG4gIH0sXG5cbiAgX19nZXRMaXN0ZW5lckJhbms6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBsaXN0ZW5lckJhbms7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFBsdWdpbkh1YjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJYWmxiblJRYkhWbmFXNUlkV0l1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JGZG1WdWRGQnNkV2RwYmtoMVlseHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRVYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbmtnUFNCeVpYRjFhWEpsS0Z3aUxpOUZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVYQ0lwTzF4dWRtRnlJRVYyWlc1MFVHeDFaMmx1VlhScGJITWdQU0J5WlhGMWFYSmxLRndpTGk5RmRtVnVkRkJzZFdkcGJsVjBhV3h6WENJcE8xeHVYRzUyWVhJZ1lXTmpkVzExYkdGMFpVbHVkRzhnUFNCeVpYRjFhWEpsS0Z3aUxpOWhZMk4xYlhWc1lYUmxTVzUwYjF3aUtUdGNiblpoY2lCbWIzSkZZV05vUVdOamRXMTFiR0YwWldRZ1BTQnlaWEYxYVhKbEtGd2lMaTltYjNKRllXTm9RV05qZFcxMWJHRjBaV1JjSWlrN1hHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNHZLaXBjYmlBcUlFbHVkR1Z5Ym1Gc0lITjBiM0psSUdadmNpQmxkbVZ1ZENCc2FYTjBaVzVsY25OY2JpQXFMMXh1ZG1GeUlHeHBjM1JsYm1WeVFtRnVheUE5SUh0OU8xeHVYRzR2S2lwY2JpQXFJRWx1ZEdWeWJtRnNJSEYxWlhWbElHOW1JR1YyWlc1MGN5QjBhR0YwSUdoaGRtVWdZV05qZFcxMWJHRjBaV1FnZEdobGFYSWdaR2x6Y0dGMFkyaGxjeUJoYm1RZ1lYSmxYRzRnS2lCM1lXbDBhVzVuSUhSdklHaGhkbVVnZEdobGFYSWdaR2x6Y0dGMFkyaGxjeUJsZUdWamRYUmxaQzVjYmlBcUwxeHVkbUZ5SUdWMlpXNTBVWFZsZFdVZ1BTQnVkV3hzTzF4dVhHNHZLaXBjYmlBcUlFUnBjM0JoZEdOb1pYTWdZVzRnWlhabGJuUWdZVzVrSUhKbGJHVmhjMlZ6SUdsMElHSmhZMnNnYVc1MGJ5QjBhR1VnY0c5dmJDd2dkVzVzWlhOeklIQmxjbk5wYzNSbGJuUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQmxkbVZ1ZENCVGVXNTBhR1YwYVdNZ1pYWmxiblFnZEc4Z1ltVWdaR2x6Y0dGMFkyaGxaQzVjYmlBcUlFQndjbWwyWVhSbFhHNGdLaTljYm5aaGNpQmxlR1ZqZFhSbFJHbHpjR0YwWTJobGMwRnVaRkpsYkdWaGMyVWdQU0JtZFc1amRHbHZiaWhsZG1WdWRDa2dlMXh1SUNCcFppQW9aWFpsYm5RcElIdGNiaUFnSUNCMllYSWdaWGhsWTNWMFpVUnBjM0JoZEdOb0lEMGdSWFpsYm5SUWJIVm5hVzVWZEdsc2N5NWxlR1ZqZFhSbFJHbHpjR0YwWTJnN1hHNGdJQ0FnTHk4Z1VHeDFaMmx1Y3lCallXNGdjSEp2ZG1sa1pTQmpkWE4wYjIwZ1ltVm9ZWFpwYjNJZ2QyaGxiaUJrYVhOd1lYUmphR2x1WnlCbGRtVnVkSE11WEc0Z0lDQWdkbUZ5SUZCc2RXZHBiazF2WkhWc1pTQTlJRVYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbmt1WjJWMFVHeDFaMmx1VFc5a2RXeGxSbTl5UlhabGJuUW9aWFpsYm5RcE8xeHVJQ0FnSUdsbUlDaFFiSFZuYVc1TmIyUjFiR1VnSmlZZ1VHeDFaMmx1VFc5a2RXeGxMbVY0WldOMWRHVkVhWE53WVhSamFDa2dlMXh1SUNBZ0lDQWdaWGhsWTNWMFpVUnBjM0JoZEdOb0lEMGdVR3gxWjJsdVRXOWtkV3hsTG1WNFpXTjFkR1ZFYVhOd1lYUmphRHRjYmlBZ0lDQjlYRzRnSUNBZ1JYWmxiblJRYkhWbmFXNVZkR2xzY3k1bGVHVmpkWFJsUkdsemNHRjBZMmhsYzBsdVQzSmtaWElvWlhabGJuUXNJR1Y0WldOMWRHVkVhWE53WVhSamFDazdYRzVjYmlBZ0lDQnBaaUFvSVdWMlpXNTBMbWx6VUdWeWMybHpkR1Z1ZENncEtTQjdYRzRnSUNBZ0lDQmxkbVZ1ZEM1amIyNXpkSEoxWTNSdmNpNXlaV3hsWVhObEtHVjJaVzUwS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibjA3WEc1Y2JpOHFLbHh1SUNvZ0xTQmdTVzV6ZEdGdVkyVklZVzVrYkdWZ09pQmJjbVZ4ZFdseVpXUmRJRTF2WkhWc1pTQjBhR0YwSUhCbGNtWnZjbTF6SUd4dloybGpZV3dnZEhKaGRtVnljMkZzY3lCdlppQkVUMDFjYmlBcUlDQWdhR2xsY21GeVkyaDVJR2RwZG1WdUlHbGtjeUJ2WmlCMGFHVWdiRzluYVdOaGJDQkVUMDBnWld4bGJXVnVkSE1nYVc1MmIyeDJaV1F1WEc0Z0tpOWNiblpoY2lCSmJuTjBZVzVqWlVoaGJtUnNaU0E5SUc1MWJHdzdYRzVjYm1aMWJtTjBhVzl1SUhaaGJHbGtZWFJsU1c1emRHRnVZMlZJWVc1a2JHVW9LU0I3WEc0Z0lIWmhjaUIyWVd4cFpDQTlYRzRnSUNBZ1NXNXpkR0Z1WTJWSVlXNWtiR1VnSmlaY2JpQWdJQ0JKYm5OMFlXNWpaVWhoYm1Sc1pTNTBjbUYyWlhKelpWUjNiMUJvWVhObElDWW1YRzRnSUNBZ1NXNXpkR0Z1WTJWSVlXNWtiR1V1ZEhKaGRtVnljMlZGYm5SbGNreGxZWFpsTzF4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUhaaGJHbGtMRnh1SUNBZ0lDZEpibk4wWVc1alpVaGhibVJzWlNCdWIzUWdhVzVxWldOMFpXUWdZbVZtYjNKbElIVnpaU0VuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvZG1Gc2FXUXBLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlVhR2x6SUdseklHRWdkVzVwWm1sbFpDQnBiblJsY21aaFkyVWdabTl5SUdWMlpXNTBJSEJzZFdkcGJuTWdkRzhnWW1VZ2FXNXpkR0ZzYkdWa0lHRnVaQ0JqYjI1bWFXZDFjbVZrTGx4dUlDcGNiaUFxSUVWMlpXNTBJSEJzZFdkcGJuTWdZMkZ1SUdsdGNHeGxiV1Z1ZENCMGFHVWdabTlzYkc5M2FXNW5JSEJ5YjNCbGNuUnBaWE02WEc0Z0tseHVJQ29nSUNCZ1pYaDBjbUZqZEVWMlpXNTBjMkFnZTJaMWJtTjBhVzl1S0hOMGNtbHVaeXdnUkU5TlJYWmxiblJVWVhKblpYUXNJSE4wY21sdVp5d2diMkpxWldOMEtUb2dLbjFjYmlBcUlDQWdJQ0JTWlhGMWFYSmxaQzRnVjJobGJpQmhJSFJ2Y0Mxc1pYWmxiQ0JsZG1WdWRDQnBjeUJtYVhKbFpDd2dkR2hwY3lCdFpYUm9iMlFnYVhNZ1pYaHdaV04wWldRZ2RHOWNiaUFxSUNBZ0lDQmxlSFJ5WVdOMElITjViblJvWlhScFl5QmxkbVZ1ZEhNZ2RHaGhkQ0IzYVd4c0lHbHVJSFIxY200Z1ltVWdjWFZsZFdWa0lHRnVaQ0JrYVhOd1lYUmphR1ZrTGx4dUlDcGNiaUFxSUNBZ1lHVjJaVzUwVkhsd1pYTmdJSHR2WW1wbFkzUjlYRzRnS2lBZ0lDQWdUM0IwYVc5dVlXd3NJSEJzZFdkcGJuTWdkR2hoZENCbWFYSmxJR1YyWlc1MGN5QnRkWE4wSUhCMVlteHBjMmdnWVNCdFlYQndhVzVuSUc5bUlISmxaMmx6ZEhKaGRHbHZibHh1SUNvZ0lDQWdJRzVoYldWeklIUm9ZWFFnWVhKbElIVnpaV1FnZEc4Z2NtVm5hWE4wWlhJZ2JHbHpkR1Z1WlhKekxpQldZV3gxWlhNZ2IyWWdkR2hwY3lCdFlYQndhVzVuSUcxMWMzUmNiaUFxSUNBZ0lDQmlaU0J2WW1wbFkzUnpJSFJvWVhRZ1kyOXVkR0ZwYmlCZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WldBZ2IzSWdZSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWellDNWNiaUFxWEc0Z0tpQWdJR0JsZUdWamRYUmxSR2x6Y0dGMFkyaGdJSHRtZFc1amRHbHZiaWh2WW1wbFkzUXNJR1oxYm1OMGFXOXVMQ0J6ZEhKcGJtY3BmVnh1SUNvZ0lDQWdJRTl3ZEdsdmJtRnNMQ0JoYkd4dmQzTWdjR3gxWjJsdWN5QjBieUJ2ZG1WeWNtbGtaU0JvYjNjZ1lXNGdaWFpsYm5RZ1oyVjBjeUJrYVhOd1lYUmphR1ZrTGlCQ2VWeHVJQ29nSUNBZ0lHUmxabUYxYkhRc0lIUm9aU0JzYVhOMFpXNWxjaUJwY3lCemFXMXdiSGtnYVc1MmIydGxaQzVjYmlBcVhHNGdLaUJGWVdOb0lIQnNkV2RwYmlCMGFHRjBJR2x6SUdsdWFtVmpkR1ZrSUdsdWRHOGdZRVYyWlc1MGMxQnNkV2RwYmtoMVltQWdhWE1nYVcxdFpXUnBZWFJsYkhrZ2IzQmxjbUZpYkdVdVhHNGdLbHh1SUNvZ1FIQjFZbXhwWTF4dUlDb3ZYRzUyWVhJZ1JYWmxiblJRYkhWbmFXNUlkV0lnUFNCN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUUxbGRHaHZaSE1nWm05eUlHbHVhbVZqZEdsdVp5QmtaWEJsYm1SbGJtTnBaWE11WEc0Z0lDQXFMMXh1SUNCcGJtcGxZM1JwYjI0NklIdGNibHh1SUNBZ0lDOHFLbHh1SUNBZ0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQkpibXBsWTNSbFpFMXZkVzUwWEc0Z0lDQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0lDQXFMMXh1SUNBZ0lHbHVhbVZqZEUxdmRXNTBPaUJGZG1WdWRGQnNkV2RwYmxWMGFXeHpMbWx1YW1WamRHbHZiaTVwYm1wbFkzUk5iM1Z1ZEN4Y2JseHVJQ0FnSUM4cUtseHVJQ0FnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCSmJtcGxZM1JsWkVsdWMzUmhibU5sU0dGdVpHeGxYRzRnSUNBZ0lDb2dRSEIxWW14cFkxeHVJQ0FnSUNBcUwxeHVJQ0FnSUdsdWFtVmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bE9pQm1kVzVqZEdsdmJpaEpibXBsWTNSbFpFbHVjM1JoYm1ObFNHRnVaR3hsS1NCN1hHNGdJQ0FnSUNCSmJuTjBZVzVqWlVoaGJtUnNaU0E5SUVsdWFtVmpkR1ZrU1c1emRHRnVZMlZJWVc1a2JHVTdYRzRnSUNBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQWdJSFpoYkdsa1lYUmxTVzV6ZEdGdVkyVklZVzVrYkdVb0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUxGeHVYRzRnSUNBZ1oyVjBTVzV6ZEdGdVkyVklZVzVrYkdVNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdJQ0IyWVd4cFpHRjBaVWx1YzNSaGJtTmxTR0Z1Wkd4bEtDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnlaWFIxY200Z1NXNXpkR0Z1WTJWSVlXNWtiR1U3WEc0Z0lDQWdmU3hjYmx4dUlDQWdJQzhxS2x4dUlDQWdJQ0FxSUVCd1lYSmhiU0I3WVhKeVlYbDlJRWx1YW1WamRHVmtSWFpsYm5SUWJIVm5hVzVQY21SbGNseHVJQ0FnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ0FnS2k5Y2JpQWdJQ0JwYm1wbFkzUkZkbVZ1ZEZCc2RXZHBiazl5WkdWeU9pQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbWx1YW1WamRFVjJaVzUwVUd4MVoybHVUM0prWlhJc1hHNWNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2FXNXFaV04wWldST1lXMWxjMVJ2VUd4MVoybHVjeUJOWVhBZ1puSnZiU0J1WVcxbGN5QjBieUJ3YkhWbmFXNGdiVzlrZFd4bGN5NWNiaUFnSUNBZ0tpOWNiaUFnSUNCcGJtcGxZM1JGZG1WdWRGQnNkV2RwYm5OQ2VVNWhiV1U2SUVWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rdWFXNXFaV04wUlhabGJuUlFiSFZuYVc1elFubE9ZVzFsWEc1Y2JpQWdmU3hjYmx4dUlDQmxkbVZ1ZEU1aGJXVkVhWE53WVhSamFFTnZibVpwWjNNNklFVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNua3VaWFpsYm5ST1lXMWxSR2x6Y0dGMFkyaERiMjVtYVdkekxGeHVYRzRnSUhKbFoybHpkSEpoZEdsdmJrNWhiV1ZOYjJSMWJHVnpPaUJGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TG5KbFoybHpkSEpoZEdsdmJrNWhiV1ZOYjJSMWJHVnpMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRkRzl5WlhNZ1lHeHBjM1JsYm1WeVlDQmhkQ0JnYkdsemRHVnVaWEpDWVc1clczSmxaMmx6ZEhKaGRHbHZiazVoYldWZFcybGtYV0F1SUVseklHbGtaVzF3YjNSbGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCSlJDQnZaaUIwYUdVZ1JFOU5JR1ZzWlcxbGJuUXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCeVpXZHBjM1J5WVhScGIyNU9ZVzFsSUU1aGJXVWdiMllnYkdsemRHVnVaWElnS0dVdVp5NGdZRzl1UTJ4cFkydGdLUzVjYmlBZ0lDb2dRSEJoY21GdElIcy9ablZ1WTNScGIyNTlJR3hwYzNSbGJtVnlJRlJvWlNCallXeHNZbUZqYXlCMGJ5QnpkRzl5WlM1Y2JpQWdJQ292WEc0Z0lIQjFkRXhwYzNSbGJtVnlPaUJtZFc1amRHbHZiaWhwWkN3Z2NtVm5hWE4wY21GMGFXOXVUbUZ0WlN3Z2JHbHpkR1Z1WlhJcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnSVd4cGMzUmxibVZ5SUh4OElIUjVjR1Z2WmlCc2FYTjBaVzVsY2lBOVBUMGdKMloxYm1OMGFXOXVKeXhjYmlBZ0lDQWdJQ2RGZUhCbFkzUmxaQ0FsY3lCc2FYTjBaVzVsY2lCMGJ5QmlaU0JoSUdaMWJtTjBhVzl1TENCcGJuTjBaV0ZrSUdkdmRDQjBlWEJsSUNWekp5eGNiaUFnSUNBZ0lISmxaMmx6ZEhKaGRHbHZiazVoYldVc0lIUjVjR1Z2WmlCc2FYTjBaVzVsY2x4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lXeHBjM1JsYm1WeUlIeDhJSFI1Y0dWdlppQnNhWE4wWlc1bGNpQTlQVDBnSjJaMWJtTjBhVzl1SnlrcE8xeHVYRzRnSUNBZ2RtRnlJR0poYm10R2IzSlNaV2RwYzNSeVlYUnBiMjVPWVcxbElEMWNiaUFnSUNBZ0lHeHBjM1JsYm1WeVFtRnVhMXR5WldkcGMzUnlZWFJwYjI1T1lXMWxYU0I4ZkNBb2JHbHpkR1Z1WlhKQ1lXNXJXM0psWjJsemRISmhkR2x2Yms1aGJXVmRJRDBnZTMwcE8xeHVJQ0FnSUdKaGJtdEdiM0pTWldkcGMzUnlZWFJwYjI1T1lXMWxXMmxrWFNBOUlHeHBjM1JsYm1WeU8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnU1VRZ2IyWWdkR2hsSUVSUFRTQmxiR1Z0Wlc1MExseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnY21WbmFYTjBjbUYwYVc5dVRtRnRaU0JPWVcxbElHOW1JR3hwYzNSbGJtVnlJQ2hsTG1jdUlHQnZia05zYVdOcllDa3VYRzRnSUNBcUlFQnlaWFIxY200Z2V6OW1kVzVqZEdsdmJuMGdWR2hsSUhOMGIzSmxaQ0JqWVd4c1ltRmpheTVjYmlBZ0lDb3ZYRzRnSUdkbGRFeHBjM1JsYm1WeU9pQm1kVzVqZEdsdmJpaHBaQ3dnY21WbmFYTjBjbUYwYVc5dVRtRnRaU2tnZTF4dUlDQWdJSFpoY2lCaVlXNXJSbTl5VW1WbmFYTjBjbUYwYVc5dVRtRnRaU0E5SUd4cGMzUmxibVZ5UW1GdWExdHlaV2RwYzNSeVlYUnBiMjVPWVcxbFhUdGNiaUFnSUNCeVpYUjFjbTRnWW1GdWEwWnZjbEpsWjJsemRISmhkR2x2Yms1aGJXVWdKaVlnWW1GdWEwWnZjbEpsWjJsemRISmhkR2x2Yms1aGJXVmJhV1JkTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkVaV3hsZEdWeklHRWdiR2x6ZEdWdVpYSWdabkp2YlNCMGFHVWdjbVZuYVhOMGNtRjBhVzl1SUdKaGJtc3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCSlJDQnZaaUIwYUdVZ1JFOU5JR1ZzWlcxbGJuUXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCeVpXZHBjM1J5WVhScGIyNU9ZVzFsSUU1aGJXVWdiMllnYkdsemRHVnVaWElnS0dVdVp5NGdZRzl1UTJ4cFkydGdLUzVjYmlBZ0lDb3ZYRzRnSUdSbGJHVjBaVXhwYzNSbGJtVnlPaUJtZFc1amRHbHZiaWhwWkN3Z2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNrZ2UxeHVJQ0FnSUhaaGNpQmlZVzVyUm05eVVtVm5hWE4wY21GMGFXOXVUbUZ0WlNBOUlHeHBjM1JsYm1WeVFtRnVhMXR5WldkcGMzUnlZWFJwYjI1T1lXMWxYVHRjYmlBZ0lDQnBaaUFvWW1GdWEwWnZjbEpsWjJsemRISmhkR2x2Yms1aGJXVXBJSHRjYmlBZ0lDQWdJR1JsYkdWMFpTQmlZVzVyUm05eVVtVm5hWE4wY21GMGFXOXVUbUZ0WlZ0cFpGMDdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJFWld4bGRHVnpJR0ZzYkNCc2FYTjBaVzVsY25NZ1ptOXlJSFJvWlNCRVQwMGdaV3hsYldWdWRDQjNhWFJvSUhSb1pTQnpkWEJ3YkdsbFpDQkpSQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdsa0lFbEVJRzltSUhSb1pTQkVUMDBnWld4bGJXVnVkQzVjYmlBZ0lDb3ZYRzRnSUdSbGJHVjBaVUZzYkV4cGMzUmxibVZ5Y3pvZ1puVnVZM1JwYjI0b2FXUXBJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQnlaV2RwYzNSeVlYUnBiMjVPWVcxbElHbHVJR3hwYzNSbGJtVnlRbUZ1YXlrZ2UxeHVJQ0FnSUNBZ1pHVnNaWFJsSUd4cGMzUmxibVZ5UW1GdWExdHlaV2RwYzNSeVlYUnBiMjVPWVcxbFhWdHBaRjA3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCQmJHeHZkM01nY21WbmFYTjBaWEpsWkNCd2JIVm5hVzV6SUdGdUlHOXdjRzl5ZEhWdWFYUjVJSFJ2SUdWNGRISmhZM1FnWlhabGJuUnpJR1p5YjIwZ2RHOXdMV3hsZG1Wc1hHNGdJQ0FxSUc1aGRHbDJaU0JpY205M2MyVnlJR1YyWlc1MGN5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFJ2Y0V4bGRtVnNWSGx3WlNCU1pXTnZjbVFnWm5KdmJTQmdSWFpsYm5SRGIyNXpkR0Z1ZEhOZ0xseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVjJaVzUwVkdGeVoyVjBmU0IwYjNCTVpYWmxiRlJoY21kbGRDQlVhR1VnYkdsemRHVnVhVzVuSUdOdmJYQnZibVZ1ZENCeWIyOTBJRzV2WkdVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0IwYjNCTVpYWmxiRlJoY21kbGRFbEVJRWxFSUc5bUlHQjBiM0JNWlhabGJGUmhjbWRsZEdBdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J1WVhScGRtVkZkbVZ1ZENCT1lYUnBkbVVnWW5KdmQzTmxjaUJsZG1WdWRDNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN0tuMGdRVzRnWVdOamRXMTFiR0YwYVc5dUlHOW1JSE41Ym5Sb1pYUnBZeUJsZG1WdWRITXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaWGgwY21GamRFVjJaVzUwY3pvZ1puVnVZM1JwYjI0b1hHNGdJQ0FnSUNCMGIzQk1aWFpsYkZSNWNHVXNYRzRnSUNBZ0lDQjBiM0JNWlhabGJGUmhjbWRsZEN4Y2JpQWdJQ0FnSUhSdmNFeGxkbVZzVkdGeVoyVjBTVVFzWEc0Z0lDQWdJQ0J1WVhScGRtVkZkbVZ1ZENrZ2UxeHVJQ0FnSUhaaGNpQmxkbVZ1ZEhNN1hHNGdJQ0FnZG1GeUlIQnNkV2RwYm5NZ1BTQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbkJzZFdkcGJuTTdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREFzSUd3Z1BTQndiSFZuYVc1ekxteGxibWQwYURzZ2FTQThJR3c3SUdrckt5a2dlMXh1SUNBZ0lDQWdMeThnVG05MElHVjJaWEo1SUhCc2RXZHBiaUJwYmlCMGFHVWdiM0prWlhKcGJtY2diV0Y1SUdKbElHeHZZV1JsWkNCaGRDQnlkVzUwYVcxbExseHVJQ0FnSUNBZ2RtRnlJSEJ2YzNOcFlteGxVR3gxWjJsdUlEMGdjR3gxWjJsdWMxdHBYVHRjYmlBZ0lDQWdJR2xtSUNod2IzTnphV0pzWlZCc2RXZHBiaWtnZTF4dUlDQWdJQ0FnSUNCMllYSWdaWGgwY21GamRHVmtSWFpsYm5SeklEMGdjRzl6YzJsaWJHVlFiSFZuYVc0dVpYaDBjbUZqZEVWMlpXNTBjeWhjYmlBZ0lDQWdJQ0FnSUNCMGIzQk1aWFpsYkZSNWNHVXNYRzRnSUNBZ0lDQWdJQ0FnZEc5d1RHVjJaV3hVWVhKblpYUXNYRzRnSUNBZ0lDQWdJQ0FnZEc5d1RHVjJaV3hVWVhKblpYUkpSQ3hjYmlBZ0lDQWdJQ0FnSUNCdVlYUnBkbVZGZG1WdWRGeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0JwWmlBb1pYaDBjbUZqZEdWa1JYWmxiblJ6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdaWFpsYm5SeklEMGdZV05qZFcxMWJHRjBaVWx1ZEc4b1pYWmxiblJ6TENCbGVIUnlZV04wWldSRmRtVnVkSE1wTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmxkbVZ1ZEhNN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVZ1Y1hWbGRXVnpJR0VnYzNsdWRHaGxkR2xqSUdWMlpXNTBJSFJvWVhRZ2MyaHZkV3hrSUdKbElHUnBjM0JoZEdOb1pXUWdkMmhsYmx4dUlDQWdLaUJnY0hKdlkyVnpjMFYyWlc1MFVYVmxkV1ZnSUdseklHbHVkbTlyWldRdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdLbjBnWlhabGJuUnpJRUZ1SUdGalkzVnRkV3hoZEdsdmJpQnZaaUJ6ZVc1MGFHVjBhV01nWlhabGJuUnpMbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR1Z1Y1hWbGRXVkZkbVZ1ZEhNNklHWjFibU4wYVc5dUtHVjJaVzUwY3lrZ2UxeHVJQ0FnSUdsbUlDaGxkbVZ1ZEhNcElIdGNiaUFnSUNBZ0lHVjJaVzUwVVhWbGRXVWdQU0JoWTJOMWJYVnNZWFJsU1c1MGJ5aGxkbVZ1ZEZGMVpYVmxMQ0JsZG1WdWRITXBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUkdsemNHRjBZMmhsY3lCaGJHd2djM2x1ZEdobGRHbGpJR1YyWlc1MGN5QnZiaUIwYUdVZ1pYWmxiblFnY1hWbGRXVXVYRzRnSUNBcVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ2NISnZZMlZ6YzBWMlpXNTBVWFZsZFdVNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDOHZJRk5sZENCZ1pYWmxiblJSZFdWMVpXQWdkRzhnYm5Wc2JDQmlaV1p2Y21VZ2NISnZZMlZ6YzJsdVp5QnBkQ0J6YnlCMGFHRjBJSGRsSUdOaGJpQjBaV3hzSUdsbUlHMXZjbVZjYmlBZ0lDQXZMeUJsZG1WdWRITWdaMlYwSUdWdWNYVmxkV1ZrSUhkb2FXeGxJSEJ5YjJObGMzTnBibWN1WEc0Z0lDQWdkbUZ5SUhCeWIyTmxjM05wYm1kRmRtVnVkRkYxWlhWbElEMGdaWFpsYm5SUmRXVjFaVHRjYmlBZ0lDQmxkbVZ1ZEZGMVpYVmxJRDBnYm5Wc2JEdGNiaUFnSUNCbWIzSkZZV05vUVdOamRXMTFiR0YwWldRb2NISnZZMlZ6YzJsdVowVjJaVzUwVVhWbGRXVXNJR1Y0WldOMWRHVkVhWE53WVhSamFHVnpRVzVrVW1Wc1pXRnpaU2s3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDRmxkbVZ1ZEZGMVpYVmxMRnh1SUNBZ0lDQWdKM0J5YjJObGMzTkZkbVZ1ZEZGMVpYVmxLQ2s2SUVGa1pHbDBhVzl1WVd3Z1pYWmxiblJ6SUhkbGNtVWdaVzV4ZFdWMVpXUWdkMmhwYkdVZ2NISnZZMlZ6YzJsdVp5QW5JQ3RjYmlBZ0lDQWdJQ2RoYmlCbGRtVnVkQ0J4ZFdWMVpTNGdVM1Z3Y0c5eWRDQm1iM0lnZEdocGN5Qm9ZWE1nYm05MElIbGxkQ0JpWldWdUlHbHRjR3hsYldWdWRHVmtMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0NGbGRtVnVkRkYxWlhWbEtTazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZSb1pYTmxJR0Z5WlNCdVpXVmtaV1FnWm05eUlIUmxjM1J6SUc5dWJIa3VJRVJ2SUc1dmRDQjFjMlVoWEc0Z0lDQXFMMXh1SUNCZlgzQjFjbWRsT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCc2FYTjBaVzVsY2tKaGJtc2dQU0I3ZlR0Y2JpQWdmU3hjYmx4dUlDQmZYMmRsZEV4cGMzUmxibVZ5UW1GdWF6b2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHeHBjM1JsYm1WeVFtRnVhenRjYmlBZ2ZWeHVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlFVjJaVzUwVUd4MVoybHVTSFZpTzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV2ZW50UGx1Z2luUmVnaXN0cnlcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIEluamVjdGFibGUgb3JkZXJpbmcgb2YgZXZlbnQgcGx1Z2lucy5cbiAqL1xudmFyIEV2ZW50UGx1Z2luT3JkZXIgPSBudWxsO1xuXG4vKipcbiAqIEluamVjdGFibGUgbWFwcGluZyBmcm9tIG5hbWVzIHRvIGV2ZW50IHBsdWdpbiBtb2R1bGVzLlxuICovXG52YXIgbmFtZXNUb1BsdWdpbnMgPSB7fTtcblxuLyoqXG4gKiBSZWNvbXB1dGVzIHRoZSBwbHVnaW4gbGlzdCB1c2luZyB0aGUgaW5qZWN0ZWQgcGx1Z2lucyBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nKCkge1xuICBpZiAoIUV2ZW50UGx1Z2luT3JkZXIpIHtcbiAgICAvLyBXYWl0IHVudGlsIGFuIGBFdmVudFBsdWdpbk9yZGVyYCBpcyBpbmplY3RlZC5cbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIgcGx1Z2luTmFtZSBpbiBuYW1lc1RvUGx1Z2lucykge1xuICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXTtcbiAgICB2YXIgcGx1Z2luSW5kZXggPSBFdmVudFBsdWdpbk9yZGVyLmluZGV4T2YocGx1Z2luTmFtZSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHBsdWdpbkluZGV4ID4gLTEsXG4gICAgICAnRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCBldmVudCBwbHVnaW5zIHRoYXQgZG8gbm90IGV4aXN0IGluICcgK1xuICAgICAgJ3RoZSBwbHVnaW4gb3JkZXJpbmcsIGAlc2AuJyxcbiAgICAgIHBsdWdpbk5hbWVcbiAgICApIDogaW52YXJpYW50KHBsdWdpbkluZGV4ID4gLTEpKTtcbiAgICBpZiAoRXZlbnRQbHVnaW5SZWdpc3RyeS5wbHVnaW5zW3BsdWdpbkluZGV4XSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBQbHVnaW5Nb2R1bGUuZXh0cmFjdEV2ZW50cyxcbiAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBFdmVudCBwbHVnaW5zIG11c3QgaW1wbGVtZW50IGFuIGBleHRyYWN0RXZlbnRzYCAnICtcbiAgICAgICdtZXRob2QsIGJ1dCBgJXNgIGRvZXMgbm90LicsXG4gICAgICBwbHVnaW5OYW1lXG4gICAgKSA6IGludmFyaWFudChQbHVnaW5Nb2R1bGUuZXh0cmFjdEV2ZW50cykpO1xuICAgIEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2luc1twbHVnaW5JbmRleF0gPSBQbHVnaW5Nb2R1bGU7XG4gICAgdmFyIHB1Ymxpc2hlZEV2ZW50cyA9IFBsdWdpbk1vZHVsZS5ldmVudFR5cGVzO1xuICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBwdWJsaXNoZWRFdmVudHMpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIHB1Ymxpc2hFdmVudEZvclBsdWdpbihcbiAgICAgICAgICBwdWJsaXNoZWRFdmVudHNbZXZlbnROYW1lXSxcbiAgICAgICAgICBQbHVnaW5Nb2R1bGUsXG4gICAgICAgICAgZXZlbnROYW1lXG4gICAgICAgICksXG4gICAgICAgICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBGYWlsZWQgdG8gcHVibGlzaCBldmVudCBgJXNgIGZvciBwbHVnaW4gYCVzYC4nLFxuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIHBsdWdpbk5hbWVcbiAgICAgICkgOiBpbnZhcmlhbnQocHVibGlzaEV2ZW50Rm9yUGx1Z2luKFxuICAgICAgICBwdWJsaXNoZWRFdmVudHNbZXZlbnROYW1lXSxcbiAgICAgICAgUGx1Z2luTW9kdWxlLFxuICAgICAgICBldmVudE5hbWVcbiAgICAgICkpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQdWJsaXNoZXMgYW4gZXZlbnQgc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBieSB0aGUgc3VwcGxpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBEaXNwYXRjaCBjb25maWd1cmF0aW9uIGZvciB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IHdhcyBzdWNjZXNzZnVsbHkgcHVibGlzaGVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcHVibGlzaEV2ZW50Rm9yUGx1Z2luKGRpc3BhdGNoQ29uZmlnLCBQbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICFFdmVudFBsdWdpblJlZ2lzdHJ5LmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncy5oYXNPd25Qcm9wZXJ0eShldmVudE5hbWUpLFxuICAgICdFdmVudFBsdWdpbkh1YjogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgJyArXG4gICAgJ2V2ZW50IG5hbWUsIGAlc2AuJyxcbiAgICBldmVudE5hbWVcbiAgKSA6IGludmFyaWFudCghRXZlbnRQbHVnaW5SZWdpc3RyeS5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkpO1xuICBFdmVudFBsdWdpblJlZ2lzdHJ5LmV2ZW50TmFtZURpc3BhdGNoQ29uZmlnc1tldmVudE5hbWVdID0gZGlzcGF0Y2hDb25maWc7XG5cbiAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzID0gZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM7XG4gIGlmIChwaGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgIGZvciAodmFyIHBoYXNlTmFtZSBpbiBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgICAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlTmFtZSkpIHtcbiAgICAgICAgdmFyIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUgPSBwaGFzZWRSZWdpc3RyYXRpb25OYW1lc1twaGFzZU5hbWVdO1xuICAgICAgICBwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShcbiAgICAgICAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lLFxuICAgICAgICAgIFBsdWdpbk1vZHVsZSxcbiAgICAgICAgICBldmVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKFxuICAgICAgZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSxcbiAgICAgIFBsdWdpbk1vZHVsZSxcbiAgICAgIGV2ZW50TmFtZVxuICAgICk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFB1Ymxpc2hlcyBhIHJlZ2lzdHJhdGlvbiBuYW1lIHRoYXQgaXMgdXNlZCB0byBpZGVudGlmeSBkaXNwYXRjaGVkIGV2ZW50cyBhbmRcbiAqIGNhbiBiZSB1c2VkIHdpdGggYEV2ZW50UGx1Z2luSHViLnB1dExpc3RlbmVyYCB0byByZWdpc3RlciBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgUmVnaXN0cmF0aW9uIG5hbWUgdG8gYWRkLlxuICogQHBhcmFtIHtvYmplY3R9IFBsdWdpbk1vZHVsZSBQbHVnaW4gcHVibGlzaGluZyB0aGUgZXZlbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZShyZWdpc3RyYXRpb25OYW1lLCBQbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICFFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdLFxuICAgICdFdmVudFBsdWdpbkh1YjogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgJyArXG4gICAgJ3JlZ2lzdHJhdGlvbiBuYW1lLCBgJXNgLicsXG4gICAgcmVnaXN0cmF0aW9uTmFtZVxuICApIDogaW52YXJpYW50KCFFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdKSk7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBQbHVnaW5Nb2R1bGU7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9XG4gICAgUGx1Z2luTW9kdWxlLmV2ZW50VHlwZXNbZXZlbnROYW1lXS5kZXBlbmRlbmNpZXM7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHBsdWdpbnMgc28gdGhhdCB0aGV5IGNhbiBleHRyYWN0IGFuZCBkaXNwYXRjaCBldmVudHMuXG4gKlxuICogQHNlZSB7RXZlbnRQbHVnaW5IdWJ9XG4gKi9cbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0ge1xuXG4gIC8qKlxuICAgKiBPcmRlcmVkIGxpc3Qgb2YgaW5qZWN0ZWQgcGx1Z2lucy5cbiAgICovXG4gIHBsdWdpbnM6IFtdLFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gZXZlbnQgbmFtZSB0byBkaXNwYXRjaCBjb25maWdcbiAgICovXG4gIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnczoge30sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSByZWdpc3RyYXRpb24gbmFtZSB0byBwbHVnaW4gbW9kdWxlXG4gICAqL1xuICByZWdpc3RyYXRpb25OYW1lTW9kdWxlczoge30sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSByZWdpc3RyYXRpb24gbmFtZSB0byBldmVudCBuYW1lXG4gICAqL1xuICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiB7fSxcblxuICAvKipcbiAgICogSW5qZWN0cyBhbiBvcmRlcmluZyBvZiBwbHVnaW5zIChieSBwbHVnaW4gbmFtZSkuIFRoaXMgYWxsb3dzIHRoZSBvcmRlcmluZ1xuICAgKiB0byBiZSBkZWNvdXBsZWQgZnJvbSBpbmplY3Rpb24gb2YgdGhlIGFjdHVhbCBwbHVnaW5zIHNvIHRoYXQgb3JkZXJpbmcgaXNcbiAgICogYWx3YXlzIGRldGVybWluaXN0aWMgcmVnYXJkbGVzcyBvZiBwYWNrYWdpbmcsIG9uLXRoZS1mbHkgaW5qZWN0aW9uLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IEluamVjdGVkRXZlbnRQbHVnaW5PcmRlclxuICAgKiBAaW50ZXJuYWxcbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luT3JkZXJ9XG4gICAqL1xuICBpbmplY3RFdmVudFBsdWdpbk9yZGVyOiBmdW5jdGlvbihJbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIUV2ZW50UGx1Z2luT3JkZXIsXG4gICAgICAnRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCBldmVudCBwbHVnaW4gb3JkZXJpbmcgbW9yZSB0aGFuICcgK1xuICAgICAgJ29uY2UuIFlvdSBhcmUgbGlrZWx5IHRyeWluZyB0byBsb2FkIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdC4nXG4gICAgKSA6IGludmFyaWFudCghRXZlbnRQbHVnaW5PcmRlcikpO1xuICAgIC8vIENsb25lIHRoZSBvcmRlcmluZyBzbyBpdCBjYW5ub3QgYmUgZHluYW1pY2FsbHkgbXV0YXRlZC5cbiAgICBFdmVudFBsdWdpbk9yZGVyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoSW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyKTtcbiAgICByZWNvbXB1dGVQbHVnaW5PcmRlcmluZygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJbmplY3RzIHBsdWdpbnMgdG8gYmUgdXNlZCBieSBgRXZlbnRQbHVnaW5IdWJgLiBUaGUgcGx1Z2luIG5hbWVzIG11c3QgYmVcbiAgICogaW4gdGhlIG9yZGVyaW5nIGluamVjdGVkIGJ5IGBpbmplY3RFdmVudFBsdWdpbk9yZGVyYC5cbiAgICpcbiAgICogUGx1Z2lucyBjYW4gYmUgaW5qZWN0ZWQgYXMgcGFydCBvZiBwYWdlIGluaXRpYWxpemF0aW9uIG9yIG9uLXRoZS1mbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbmplY3RlZE5hbWVzVG9QbHVnaW5zIE1hcCBmcm9tIG5hbWVzIHRvIHBsdWdpbiBtb2R1bGVzLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHNlZSB7RXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZX1cbiAgICovXG4gIGluamVjdEV2ZW50UGx1Z2luc0J5TmFtZTogZnVuY3Rpb24oaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgIHZhciBpc09yZGVyaW5nRGlydHkgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIGluamVjdGVkTmFtZXNUb1BsdWdpbnMpIHtcbiAgICAgIGlmICghaW5qZWN0ZWROYW1lc1RvUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShwbHVnaW5OYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBpbmplY3RlZE5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgICAgaWYgKCFuYW1lc1RvUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShwbHVnaW5OYW1lKSB8fFxuICAgICAgICAgIG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdICE9PSBQbHVnaW5Nb2R1bGUpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICAhbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV0sXG4gICAgICAgICAgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgdHdvIGRpZmZlcmVudCBldmVudCBwbHVnaW5zICcgK1xuICAgICAgICAgICd1c2luZyB0aGUgc2FtZSBuYW1lLCBgJXNgLicsXG4gICAgICAgICAgcGx1Z2luTmFtZVxuICAgICAgICApIDogaW52YXJpYW50KCFuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSkpO1xuICAgICAgICBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA9IFBsdWdpbk1vZHVsZTtcbiAgICAgICAgaXNPcmRlcmluZ0RpcnR5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzT3JkZXJpbmdEaXJ0eSkge1xuICAgICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvb2tzIHVwIHRoZSBwbHVnaW4gZm9yIHRoZSBzdXBwbGllZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEEgc3ludGhldGljIGV2ZW50LlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBUaGUgcGx1Z2luIHRoYXQgY3JlYXRlZCB0aGUgc3VwcGxpZWQgZXZlbnQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIGRpc3BhdGNoQ29uZmlnID0gZXZlbnQuZGlzcGF0Y2hDb25maWc7XG4gICAgaWYgKGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW1xuICAgICAgICBkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lXG4gICAgICBdIHx8IG51bGw7XG4gICAgfVxuICAgIGZvciAodmFyIHBoYXNlIGluIGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICBpZiAoIWRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW1xuICAgICAgICBkaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lc1twaGFzZV1cbiAgICAgIF07XG4gICAgICBpZiAoUGx1Z2luTW9kdWxlKSB7XG4gICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFeHBvc2VkIGZvciB1bml0IHRlc3RpbmcuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXRFdmVudFBsdWdpbnM6IGZ1bmN0aW9uKCkge1xuICAgIEV2ZW50UGx1Z2luT3JkZXIgPSBudWxsO1xuICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gbmFtZXNUb1BsdWdpbnMpIHtcbiAgICAgIGlmIChuYW1lc1RvUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShwbHVnaW5OYW1lKSkge1xuICAgICAgICBkZWxldGUgbmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07XG4gICAgICB9XG4gICAgfVxuICAgIEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2lucy5sZW5ndGggPSAwO1xuXG4gICAgdmFyIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlncyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzO1xuICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MpIHtcbiAgICAgIGlmIChldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xuICAgICAgICBkZWxldGUgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2ZW50TmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlcztcbiAgICBmb3IgKHZhciByZWdpc3RyYXRpb25OYW1lIGluIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzKSB7XG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkocmVnaXN0cmF0aW9uTmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luUmVnaXN0cnk7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllUzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1WEc0Z0tpQkFkSGx3WldOb1pXTnJjeUJ6ZEdGMGFXTXRiMjVzZVZ4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1THlvcVhHNGdLaUJKYm1wbFkzUmhZbXhsSUc5eVpHVnlhVzVuSUc5bUlHVjJaVzUwSUhCc2RXZHBibk11WEc0Z0tpOWNiblpoY2lCRmRtVnVkRkJzZFdkcGJrOXlaR1Z5SUQwZ2JuVnNiRHRjYmx4dUx5b3FYRzRnS2lCSmJtcGxZM1JoWW14bElHMWhjSEJwYm1jZ1puSnZiU0J1WVcxbGN5QjBieUJsZG1WdWRDQndiSFZuYVc0Z2JXOWtkV3hsY3k1Y2JpQXFMMXh1ZG1GeUlHNWhiV1Z6Vkc5UWJIVm5hVzV6SUQwZ2UzMDdYRzVjYmk4cUtseHVJQ29nVW1WamIyMXdkWFJsY3lCMGFHVWdjR3gxWjJsdUlHeHBjM1FnZFhOcGJtY2dkR2hsSUdsdWFtVmpkR1ZrSUhCc2RXZHBibk1nWVc1a0lIQnNkV2RwYmlCdmNtUmxjbWx1Wnk1Y2JpQXFYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJ5WldOdmJYQjFkR1ZRYkhWbmFXNVBjbVJsY21sdVp5Z3BJSHRjYmlBZ2FXWWdLQ0ZGZG1WdWRGQnNkV2RwYms5eVpHVnlLU0I3WEc0Z0lDQWdMeThnVjJGcGRDQjFiblJwYkNCaGJpQmdSWFpsYm5SUWJIVm5hVzVQY21SbGNtQWdhWE1nYVc1cVpXTjBaV1F1WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc0Z0lHWnZjaUFvZG1GeUlIQnNkV2RwYms1aGJXVWdhVzRnYm1GdFpYTlViMUJzZFdkcGJuTXBJSHRjYmlBZ0lDQjJZWElnVUd4MVoybHVUVzlrZFd4bElEMGdibUZ0WlhOVWIxQnNkV2RwYm5OYmNHeDFaMmx1VG1GdFpWMDdYRzRnSUNBZ2RtRnlJSEJzZFdkcGJrbHVaR1Y0SUQwZ1JYWmxiblJRYkhWbmFXNVBjbVJsY2k1cGJtUmxlRTltS0hCc2RXZHBiazVoYldVcE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0J3YkhWbmFXNUpibVJsZUNBK0lDMHhMRnh1SUNBZ0lDQWdKMFYyWlc1MFVHeDFaMmx1VW1WbmFYTjBjbms2SUVOaGJtNXZkQ0JwYm1wbFkzUWdaWFpsYm5RZ2NHeDFaMmx1Y3lCMGFHRjBJR1J2SUc1dmRDQmxlR2x6ZENCcGJpQW5JQ3RjYmlBZ0lDQWdJQ2QwYUdVZ2NHeDFaMmx1SUc5eVpHVnlhVzVuTENCZ0pYTmdMaWNzWEc0Z0lDQWdJQ0J3YkhWbmFXNU9ZVzFsWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENod2JIVm5hVzVKYm1SbGVDQStJQzB4S1NrN1hHNGdJQ0FnYVdZZ0tFVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNua3VjR3gxWjJsdWMxdHdiSFZuYVc1SmJtUmxlRjBwSUh0Y2JpQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJSDFjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ1VHeDFaMmx1VFc5a2RXeGxMbVY0ZEhKaFkzUkZkbVZ1ZEhNc1hHNGdJQ0FnSUNBblJYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVUb2dSWFpsYm5RZ2NHeDFaMmx1Y3lCdGRYTjBJR2x0Y0d4bGJXVnVkQ0JoYmlCZ1pYaDBjbUZqZEVWMlpXNTBjMkFnSnlBclhHNGdJQ0FnSUNBbmJXVjBhRzlrTENCaWRYUWdZQ1Z6WUNCa2IyVnpJRzV2ZEM0bkxGeHVJQ0FnSUNBZ2NHeDFaMmx1VG1GdFpWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9VR3gxWjJsdVRXOWtkV3hsTG1WNGRISmhZM1JGZG1WdWRITXBLVHRjYmlBZ0lDQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVMbkJzZFdkcGJuTmJjR3gxWjJsdVNXNWtaWGhkSUQwZ1VHeDFaMmx1VFc5a2RXeGxPMXh1SUNBZ0lIWmhjaUJ3ZFdKc2FYTm9aV1JGZG1WdWRITWdQU0JRYkhWbmFXNU5iMlIxYkdVdVpYWmxiblJVZVhCbGN6dGNiaUFnSUNCbWIzSWdLSFpoY2lCbGRtVnVkRTVoYldVZ2FXNGdjSFZpYkdsemFHVmtSWFpsYm5SektTQjdYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQndkV0pzYVhOb1JYWmxiblJHYjNKUWJIVm5hVzRvWEc0Z0lDQWdJQ0FnSUNBZ2NIVmliR2x6YUdWa1JYWmxiblJ6VzJWMlpXNTBUbUZ0WlYwc1hHNGdJQ0FnSUNBZ0lDQWdVR3gxWjJsdVRXOWtkV3hsTEZ4dUlDQWdJQ0FnSUNBZ0lHVjJaVzUwVG1GdFpWeHVJQ0FnSUNBZ0lDQXBMRnh1SUNBZ0lDQWdJQ0FuUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVRvZ1JtRnBiR1ZrSUhSdklIQjFZbXhwYzJnZ1pYWmxiblFnWUNWellDQm1iM0lnY0d4MVoybHVJR0FsYzJBdUp5eGNiaUFnSUNBZ0lDQWdaWFpsYm5ST1lXMWxMRnh1SUNBZ0lDQWdJQ0J3YkhWbmFXNU9ZVzFsWEc0Z0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIQjFZbXhwYzJoRmRtVnVkRVp2Y2xCc2RXZHBiaWhjYmlBZ0lDQWdJQ0FnY0hWaWJHbHphR1ZrUlhabGJuUnpXMlYyWlc1MFRtRnRaVjBzWEc0Z0lDQWdJQ0FnSUZCc2RXZHBiazF2WkhWc1pTeGNiaUFnSUNBZ0lDQWdaWFpsYm5ST1lXMWxYRzRnSUNBZ0lDQXBLU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nVUhWaWJHbHphR1Z6SUdGdUlHVjJaVzUwSUhOdklIUm9ZWFFnYVhRZ1kyRnVJR0psSUdScGMzQmhkR05vWldRZ1lua2dkR2hsSUhOMWNIQnNhV1ZrSUhCc2RXZHBiaTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdaR2x6Y0dGMFkyaERiMjVtYVdjZ1JHbHpjR0YwWTJnZ1kyOXVabWxuZFhKaGRHbHZiaUJtYjNJZ2RHaGxJR1YyWlc1MExseHVJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJRkJzZFdkcGJrMXZaSFZzWlNCUWJIVm5hVzRnY0hWaWJHbHphR2x1WnlCMGFHVWdaWFpsYm5RdVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmU0JVY25WbElHbG1JSFJvWlNCbGRtVnVkQ0IzWVhNZ2MzVmpZMlZ6YzJaMWJHeDVJSEIxWW14cGMyaGxaQzVjYmlBcUlFQndjbWwyWVhSbFhHNGdLaTljYm1aMWJtTjBhVzl1SUhCMVlteHBjMmhGZG1WdWRFWnZjbEJzZFdkcGJpaGthWE53WVhSamFFTnZibVpwWnl3Z1VHeDFaMmx1VFc5a2RXeGxMQ0JsZG1WdWRFNWhiV1VwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBaFJYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTNWxkbVZ1ZEU1aGJXVkVhWE53WVhSamFFTnZibVpwWjNNdWFHRnpUM2R1VUhKdmNHVnlkSGtvWlhabGJuUk9ZVzFsS1N4Y2JpQWdJQ0FuUlhabGJuUlFiSFZuYVc1SWRXSTZJRTF2Y21VZ2RHaGhiaUJ2Ym1VZ2NHeDFaMmx1SUdGMGRHVnRjSFJsWkNCMGJ5QndkV0pzYVhOb0lIUm9aU0J6WVcxbElDY2dLMXh1SUNBZ0lDZGxkbVZ1ZENCdVlXMWxMQ0JnSlhOZ0xpY3NYRzRnSUNBZ1pYWmxiblJPWVcxbFhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lVVjJaVzUwVUd4MVoybHVVbVZuYVhOMGNua3VaWFpsYm5ST1lXMWxSR2x6Y0dGMFkyaERiMjVtYVdkekxtaGhjMDkzYmxCeWIzQmxjblI1S0dWMlpXNTBUbUZ0WlNrcEtUdGNiaUFnUlhabGJuUlFiSFZuYVc1U1pXZHBjM1J5ZVM1bGRtVnVkRTVoYldWRWFYTndZWFJqYUVOdmJtWnBaM05iWlhabGJuUk9ZVzFsWFNBOUlHUnBjM0JoZEdOb1EyOXVabWxuTzF4dVhHNGdJSFpoY2lCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjeUE5SUdScGMzQmhkR05vUTI5dVptbG5MbkJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek8xeHVJQ0JwWmlBb2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE1wSUh0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3YUdGelpVNWhiV1VnYVc0Z2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE1wSUh0Y2JpQWdJQ0FnSUdsbUlDaHdhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3k1b1lYTlBkMjVRY205d1pYSjBlU2h3YUdGelpVNWhiV1VwS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbElEMGdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhOYmNHaGhjMlZPWVcxbFhUdGNiaUFnSUNBZ0lDQWdjSFZpYkdsemFGSmxaMmx6ZEhKaGRHbHZiazVoYldVb1hHNGdJQ0FnSUNBZ0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlN4Y2JpQWdJQ0FnSUNBZ0lDQlFiSFZuYVc1TmIyUjFiR1VzWEc0Z0lDQWdJQ0FnSUNBZ1pYWmxiblJPWVcxbFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0I5SUdWc2MyVWdhV1lnS0dScGMzQmhkR05vUTI5dVptbG5MbkpsWjJsemRISmhkR2x2Yms1aGJXVXBJSHRjYmlBZ0lDQndkV0pzYVhOb1VtVm5hWE4wY21GMGFXOXVUbUZ0WlNoY2JpQWdJQ0FnSUdScGMzQmhkR05vUTI5dVptbG5MbkpsWjJsemRISmhkR2x2Yms1aGJXVXNYRzRnSUNBZ0lDQlFiSFZuYVc1TmIyUjFiR1VzWEc0Z0lDQWdJQ0JsZG1WdWRFNWhiV1ZjYmlBZ0lDQXBPMXh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JuMWNibHh1THlvcVhHNGdLaUJRZFdKc2FYTm9aWE1nWVNCeVpXZHBjM1J5WVhScGIyNGdibUZ0WlNCMGFHRjBJR2x6SUhWelpXUWdkRzhnYVdSbGJuUnBabmtnWkdsemNHRjBZMmhsWkNCbGRtVnVkSE1nWVc1a1hHNGdLaUJqWVc0Z1ltVWdkWE5sWkNCM2FYUm9JR0JGZG1WdWRGQnNkV2RwYmtoMVlpNXdkWFJNYVhOMFpXNWxjbUFnZEc4Z2NtVm5hWE4wWlhJZ2JHbHpkR1Z1WlhKekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCeVpXZHBjM1J5WVhScGIyNU9ZVzFsSUZKbFoybHpkSEpoZEdsdmJpQnVZVzFsSUhSdklHRmtaQzVjYmlBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCUWJIVm5hVzVOYjJSMWJHVWdVR3gxWjJsdUlIQjFZbXhwYzJocGJtY2dkR2hsSUdWMlpXNTBMbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnY0hWaWJHbHphRkpsWjJsemRISmhkR2x2Yms1aGJXVW9jbVZuYVhOMGNtRjBhVzl1VG1GdFpTd2dVR3gxWjJsdVRXOWtkV3hsTENCbGRtVnVkRTVoYldVcElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWhSWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllUzV5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGMxdHlaV2RwYzNSeVlYUnBiMjVPWVcxbFhTeGNiaUFnSUNBblJYWmxiblJRYkhWbmFXNUlkV0k2SUUxdmNtVWdkR2hoYmlCdmJtVWdjR3gxWjJsdUlHRjBkR1Z0Y0hSbFpDQjBieUJ3ZFdKc2FYTm9JSFJvWlNCellXMWxJQ2NnSzF4dUlDQWdJQ2R5WldkcGMzUnlZWFJwYjI0Z2JtRnRaU3dnWUNWellDNG5MRnh1SUNBZ0lISmxaMmx6ZEhKaGRHbHZiazVoYldWY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENnaFJYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTNXlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsYzF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFNrcE8xeHVJQ0JGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TG5KbFoybHpkSEpoZEdsdmJrNWhiV1ZOYjJSMWJHVnpXM0psWjJsemRISmhkR2x2Yms1aGJXVmRJRDBnVUd4MVoybHVUVzlrZFd4bE8xeHVJQ0JGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TG5KbFoybHpkSEpoZEdsdmJrNWhiV1ZFWlhCbGJtUmxibU5wWlhOYmNtVm5hWE4wY21GMGFXOXVUbUZ0WlYwZ1BWeHVJQ0FnSUZCc2RXZHBiazF2WkhWc1pTNWxkbVZ1ZEZSNWNHVnpXMlYyWlc1MFRtRnRaVjB1WkdWd1pXNWtaVzVqYVdWek8xeHVmVnh1WEc0dktpcGNiaUFxSUZKbFoybHpkR1Z5Y3lCd2JIVm5hVzV6SUhOdklIUm9ZWFFnZEdobGVTQmpZVzRnWlhoMGNtRmpkQ0JoYm1RZ1pHbHpjR0YwWTJnZ1pYWmxiblJ6TGx4dUlDcGNiaUFxSUVCelpXVWdlMFYyWlc1MFVHeDFaMmx1U0hWaWZWeHVJQ292WEc1MllYSWdSWFpsYm5SUWJIVm5hVzVTWldkcGMzUnllU0E5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVDNKa1pYSmxaQ0JzYVhOMElHOW1JR2x1YW1WamRHVmtJSEJzZFdkcGJuTXVYRzRnSUNBcUwxeHVJQ0J3YkhWbmFXNXpPaUJiWFN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVFdGd2NHbHVaeUJtY205dElHVjJaVzUwSUc1aGJXVWdkRzhnWkdsemNHRjBZMmdnWTI5dVptbG5YRzRnSUNBcUwxeHVJQ0JsZG1WdWRFNWhiV1ZFYVhOd1lYUmphRU52Ym1acFozTTZJSHQ5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJOWVhCd2FXNW5JR1p5YjIwZ2NtVm5hWE4wY21GMGFXOXVJRzVoYldVZ2RHOGdjR3gxWjJsdUlHMXZaSFZzWlZ4dUlDQWdLaTljYmlBZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlUxdlpIVnNaWE02SUh0OUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCTllYQndhVzVuSUdaeWIyMGdjbVZuYVhOMGNtRjBhVzl1SUc1aGJXVWdkRzhnWlhabGJuUWdibUZ0WlZ4dUlDQWdLaTljYmlBZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlVSbGNHVnVaR1Z1WTJsbGN6b2dlMzBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1YW1WamRITWdZVzRnYjNKa1pYSnBibWNnYjJZZ2NHeDFaMmx1Y3lBb1lua2djR3gxWjJsdUlHNWhiV1VwTGlCVWFHbHpJR0ZzYkc5M2N5QjBhR1VnYjNKa1pYSnBibWRjYmlBZ0lDb2dkRzhnWW1VZ1pHVmpiM1Z3YkdWa0lHWnliMjBnYVc1cVpXTjBhVzl1SUc5bUlIUm9aU0JoWTNSMVlXd2djR3gxWjJsdWN5QnpieUIwYUdGMElHOXlaR1Z5YVc1bklHbHpYRzRnSUNBcUlHRnNkMkY1Y3lCa1pYUmxjbTFwYm1semRHbGpJSEpsWjJGeVpHeGxjM01nYjJZZ2NHRmphMkZuYVc1bkxDQnZiaTEwYUdVdFpteDVJR2x1YW1WamRHbHZiaXdnWlhSakxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMkZ5Y21GNWZTQkpibXBsWTNSbFpFVjJaVzUwVUd4MVoybHVUM0prWlhKY2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFJRUJ6WldVZ2UwVjJaVzUwVUd4MVoybHVTSFZpTG1sdWFtVmpkR2x2Ymk1cGJtcGxZM1JGZG1WdWRGQnNkV2RwYms5eVpHVnlmVnh1SUNBZ0tpOWNiaUFnYVc1cVpXTjBSWFpsYm5SUWJIVm5hVzVQY21SbGNqb2dablZ1WTNScGIyNG9TVzVxWldOMFpXUkZkbVZ1ZEZCc2RXZHBiazl5WkdWeUtTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNGRmRtVnVkRkJzZFdkcGJrOXlaR1Z5TEZ4dUlDQWdJQ0FnSjBWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rNklFTmhibTV2ZENCcGJtcGxZM1FnWlhabGJuUWdjR3gxWjJsdUlHOXlaR1Z5YVc1bklHMXZjbVVnZEdoaGJpQW5JQ3RjYmlBZ0lDQWdJQ2R2Ym1ObExpQlpiM1VnWVhKbElHeHBhMlZzZVNCMGNubHBibWNnZEc4Z2JHOWhaQ0J0YjNKbElIUm9ZVzRnYjI1bElHTnZjSGtnYjJZZ1VtVmhZM1F1SjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lVVjJaVzUwVUd4MVoybHVUM0prWlhJcEtUdGNiaUFnSUNBdkx5QkRiRzl1WlNCMGFHVWdiM0prWlhKcGJtY2djMjhnYVhRZ1kyRnVibTkwSUdKbElHUjVibUZ0YVdOaGJHeDVJRzExZEdGMFpXUXVYRzRnSUNBZ1JYWmxiblJRYkhWbmFXNVBjbVJsY2lBOUlFRnljbUY1TG5CeWIzUnZkSGx3WlM1emJHbGpaUzVqWVd4c0tFbHVhbVZqZEdWa1JYWmxiblJRYkhWbmFXNVBjbVJsY2lrN1hHNGdJQ0FnY21WamIyMXdkWFJsVUd4MVoybHVUM0prWlhKcGJtY29LVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1NXNXFaV04wY3lCd2JIVm5hVzV6SUhSdklHSmxJSFZ6WldRZ1lua2dZRVYyWlc1MFVHeDFaMmx1U0hWaVlDNGdWR2hsSUhCc2RXZHBiaUJ1WVcxbGN5QnRkWE4wSUdKbFhHNGdJQ0FxSUdsdUlIUm9aU0J2Y21SbGNtbHVaeUJwYm1wbFkzUmxaQ0JpZVNCZ2FXNXFaV04wUlhabGJuUlFiSFZuYVc1UGNtUmxjbUF1WEc0Z0lDQXFYRzRnSUNBcUlGQnNkV2RwYm5NZ1kyRnVJR0psSUdsdWFtVmpkR1ZrSUdGeklIQmhjblFnYjJZZ2NHRm5aU0JwYm1sMGFXRnNhWHBoZEdsdmJpQnZjaUJ2YmkxMGFHVXRabXg1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2FXNXFaV04wWldST1lXMWxjMVJ2VUd4MVoybHVjeUJOWVhBZ1puSnZiU0J1WVcxbGN5QjBieUJ3YkhWbmFXNGdiVzlrZFd4bGN5NWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxSUVCelpXVWdlMFYyWlc1MFVHeDFaMmx1U0hWaUxtbHVhbVZqZEdsdmJpNXBibXBsWTNSRmRtVnVkRkJzZFdkcGJuTkNlVTVoYldWOVhHNGdJQ0FxTDF4dUlDQnBibXBsWTNSRmRtVnVkRkJzZFdkcGJuTkNlVTVoYldVNklHWjFibU4wYVc5dUtHbHVhbVZqZEdWa1RtRnRaWE5VYjFCc2RXZHBibk1wSUh0Y2JpQWdJQ0IyWVhJZ2FYTlBjbVJsY21sdVowUnBjblI1SUQwZ1ptRnNjMlU3WEc0Z0lDQWdabTl5SUNoMllYSWdjR3gxWjJsdVRtRnRaU0JwYmlCcGJtcGxZM1JsWkU1aGJXVnpWRzlRYkhWbmFXNXpLU0I3WEc0Z0lDQWdJQ0JwWmlBb0lXbHVhbVZqZEdWa1RtRnRaWE5VYjFCc2RXZHBibk11YUdGelQzZHVVSEp2Y0dWeWRIa29jR3gxWjJsdVRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCMllYSWdVR3gxWjJsdVRXOWtkV3hsSUQwZ2FXNXFaV04wWldST1lXMWxjMVJ2VUd4MVoybHVjMXR3YkhWbmFXNU9ZVzFsWFR0Y2JpQWdJQ0FnSUdsbUlDZ2hibUZ0WlhOVWIxQnNkV2RwYm5NdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0d4MVoybHVUbUZ0WlNrZ2ZIeGNiaUFnSUNBZ0lDQWdJQ0J1WVcxbGMxUnZVR3gxWjJsdWMxdHdiSFZuYVc1T1lXMWxYU0FoUFQwZ1VHeDFaMmx1VFc5a2RXeGxLU0I3WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUNBZ0lXNWhiV1Z6Vkc5UWJIVm5hVzV6VzNCc2RXZHBiazVoYldWZExGeHVJQ0FnSUNBZ0lDQWdJQ2RGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1T2lCRFlXNXViM1FnYVc1cVpXTjBJSFIzYnlCa2FXWm1aWEpsYm5RZ1pYWmxiblFnY0d4MVoybHVjeUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5kWE5wYm1jZ2RHaGxJSE5oYldVZ2JtRnRaU3dnWUNWellDNG5MRnh1SUNBZ0lDQWdJQ0FnSUhCc2RXZHBiazVoYldWY2JpQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2doYm1GdFpYTlViMUJzZFdkcGJuTmJjR3gxWjJsdVRtRnRaVjBwS1R0Y2JpQWdJQ0FnSUNBZ2JtRnRaWE5VYjFCc2RXZHBibk5iY0d4MVoybHVUbUZ0WlYwZ1BTQlFiSFZuYVc1TmIyUjFiR1U3WEc0Z0lDQWdJQ0FnSUdselQzSmtaWEpwYm1kRWFYSjBlU0E5SUhSeWRXVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaHBjMDl5WkdWeWFXNW5SR2x5ZEhrcElIdGNiaUFnSUNBZ0lISmxZMjl0Y0hWMFpWQnNkV2RwYms5eVpHVnlhVzVuS0NrN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQk1iMjlyY3lCMWNDQjBhR1VnY0d4MVoybHVJR1p2Y2lCMGFHVWdjM1Z3Y0d4cFpXUWdaWFpsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQmxkbVZ1ZENCQklITjViblJvWlhScFl5QmxkbVZ1ZEM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3UDI5aWFtVmpkSDBnVkdobElIQnNkV2RwYmlCMGFHRjBJR055WldGMFpXUWdkR2hsSUhOMWNIQnNhV1ZrSUdWMlpXNTBMbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR2RsZEZCc2RXZHBiazF2WkhWc1pVWnZja1YyWlc1ME9pQm1kVzVqZEdsdmJpaGxkbVZ1ZENrZ2UxeHVJQ0FnSUhaaGNpQmthWE53WVhSamFFTnZibVpwWnlBOUlHVjJaVzUwTG1ScGMzQmhkR05vUTI5dVptbG5PMXh1SUNBZ0lHbG1JQ2hrYVhOd1lYUmphRU52Ym1acFp5NXlaV2RwYzNSeVlYUnBiMjVPWVcxbEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1JYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTNXlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsYzF0Y2JpQWdJQ0FnSUNBZ1pHbHpjR0YwWTJoRGIyNW1hV2N1Y21WbmFYTjBjbUYwYVc5dVRtRnRaVnh1SUNBZ0lDQWdYU0I4ZkNCdWRXeHNPMXh1SUNBZ0lIMWNiaUFnSUNCbWIzSWdLSFpoY2lCd2FHRnpaU0JwYmlCa2FYTndZWFJqYUVOdmJtWnBaeTV3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN5a2dlMXh1SUNBZ0lDQWdhV1lnS0NGa2FYTndZWFJqYUVOdmJtWnBaeTV3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN5NW9ZWE5QZDI1UWNtOXdaWEowZVNod2FHRnpaU2twSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCMllYSWdVR3gxWjJsdVRXOWtkV3hsSUQwZ1JYWmxiblJRYkhWbmFXNVNaV2RwYzNSeWVTNXlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsYzF0Y2JpQWdJQ0FnSUNBZ1pHbHpjR0YwWTJoRGIyNW1hV2N1Y0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTmJjR2hoYzJWZFhHNGdJQ0FnSUNCZE8xeHVJQ0FnSUNBZ2FXWWdLRkJzZFdkcGJrMXZaSFZzWlNrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1VHeDFaMmx1VFc5a2RXeGxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYm5Wc2JEdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUlhod2IzTmxaQ0JtYjNJZ2RXNXBkQ0IwWlhOMGFXNW5MbHh1SUNBZ0tpQkFjSEpwZG1GMFpWeHVJQ0FnS2k5Y2JpQWdYM0psYzJWMFJYWmxiblJRYkhWbmFXNXpPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0JGZG1WdWRGQnNkV2RwYms5eVpHVnlJRDBnYm5Wc2JEdGNiaUFnSUNCbWIzSWdLSFpoY2lCd2JIVm5hVzVPWVcxbElHbHVJRzVoYldWelZHOVFiSFZuYVc1ektTQjdYRzRnSUNBZ0lDQnBaaUFvYm1GdFpYTlViMUJzZFdkcGJuTXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NHeDFaMmx1VG1GdFpTa3BJSHRjYmlBZ0lDQWdJQ0FnWkdWc1pYUmxJRzVoYldWelZHOVFiSFZuYVc1elczQnNkV2RwYms1aGJXVmRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCRmRtVnVkRkJzZFdkcGJsSmxaMmx6ZEhKNUxuQnNkV2RwYm5NdWJHVnVaM1JvSUQwZ01EdGNibHh1SUNBZ0lIWmhjaUJsZG1WdWRFNWhiV1ZFYVhOd1lYUmphRU52Ym1acFozTWdQU0JGZG1WdWRGQnNkV2RwYmxKbFoybHpkSEo1TG1WMlpXNTBUbUZ0WlVScGMzQmhkR05vUTI5dVptbG5jenRjYmlBZ0lDQm1iM0lnS0haaGNpQmxkbVZ1ZEU1aGJXVWdhVzRnWlhabGJuUk9ZVzFsUkdsemNHRjBZMmhEYjI1bWFXZHpLU0I3WEc0Z0lDQWdJQ0JwWmlBb1pYWmxiblJPWVcxbFJHbHpjR0YwWTJoRGIyNW1hV2R6TG1oaGMwOTNibEJ5YjNCbGNuUjVLR1YyWlc1MFRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ1pHVnNaWFJsSUdWMlpXNTBUbUZ0WlVScGMzQmhkR05vUTI5dVptbG5jMXRsZG1WdWRFNWhiV1ZkTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCeVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjeUE5SUVWMlpXNTBVR3gxWjJsdVVtVm5hWE4wY25rdWNtVm5hWE4wY21GMGFXOXVUbUZ0WlUxdlpIVnNaWE03WEc0Z0lDQWdabTl5SUNoMllYSWdjbVZuYVhOMGNtRjBhVzl1VG1GdFpTQnBiaUJ5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGN5a2dlMXh1SUNBZ0lDQWdhV1lnS0hKbFoybHpkSEpoZEdsdmJrNWhiV1ZOYjJSMWJHVnpMbWhoYzA5M2JsQnliM0JsY25SNUtISmxaMmx6ZEhKaGRHbHZiazVoYldVcEtTQjdYRzRnSUNBZ0lDQWdJR1JsYkdWMFpTQnlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsYzF0eVpXZHBjM1J5WVhScGIyNU9ZVzFsWFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQkZkbVZ1ZEZCc2RXZHBibEpsWjJsemRISjVPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgRXZlbnRQbHVnaW5VdGlsc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogSW5qZWN0ZWQgZGVwZW5kZW5jaWVzOlxuICovXG5cbi8qKlxuICogLSBgTW91bnRgOiBbcmVxdWlyZWRdIE1vZHVsZSB0aGF0IGNhbiBjb252ZXJ0IGJldHdlZW4gUmVhY3QgZG9tIElEcyBhbmRcbiAqICAgYWN0dWFsIG5vZGUgcmVmZXJlbmNlcy5cbiAqL1xudmFyIGluamVjdGlvbiA9IHtcbiAgTW91bnQ6IG51bGwsXG4gIGluamVjdE1vdW50OiBmdW5jdGlvbihJbmplY3RlZE1vdW50KSB7XG4gICAgaW5qZWN0aW9uLk1vdW50ID0gSW5qZWN0ZWRNb3VudDtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBJbmplY3RlZE1vdW50ICYmIEluamVjdGVkTW91bnQuZ2V0Tm9kZSxcbiAgICAgICAgJ0V2ZW50UGx1Z2luVXRpbHMuaW5qZWN0aW9uLmluamVjdE1vdW50KC4uLik6IEluamVjdGVkIE1vdW50IG1vZHVsZSAnICtcbiAgICAgICAgJ2lzIG1pc3NpbmcgZ2V0Tm9kZS4nXG4gICAgICApIDogaW52YXJpYW50KEluamVjdGVkTW91bnQgJiYgSW5qZWN0ZWRNb3VudC5nZXROb2RlKSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbmZ1bmN0aW9uIGlzRW5kaXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlVXAgfHxcbiAgICAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BUb3VjaEVuZCB8fFxuICAgICAgICAgdG9wTGV2ZWxUeXBlID09PSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoQ2FuY2VsO1xufVxuXG5mdW5jdGlvbiBpc01vdmVpc2godG9wTGV2ZWxUeXBlKSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wTW91c2VNb3ZlIHx8XG4gICAgICAgICB0b3BMZXZlbFR5cGUgPT09IHRvcExldmVsVHlwZXMudG9wVG91Y2hNb3ZlO1xufVxuZnVuY3Rpb24gaXNTdGFydGlzaCh0b3BMZXZlbFR5cGUpIHtcbiAgcmV0dXJuIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd24gfHxcbiAgICAgICAgIHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BUb3VjaFN0YXJ0O1xufVxuXG5cbnZhciB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcztcbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMgPSBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbiAgICB2YXIgZGlzcGF0Y2hJRHMgPSBldmVudC5fZGlzcGF0Y2hJRHM7XG5cbiAgICB2YXIgbGlzdGVuZXJzSXNBcnIgPSBBcnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXJzKTtcbiAgICB2YXIgaWRzSXNBcnIgPSBBcnJheS5pc0FycmF5KGRpc3BhdGNoSURzKTtcbiAgICB2YXIgSURzTGVuID0gaWRzSXNBcnIgPyBkaXNwYXRjaElEcy5sZW5ndGggOiBkaXNwYXRjaElEcyA/IDEgOiAwO1xuICAgIHZhciBsaXN0ZW5lcnNMZW4gPSBsaXN0ZW5lcnNJc0FyciA/XG4gICAgICBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggOlxuICAgICAgZGlzcGF0Y2hMaXN0ZW5lcnMgPyAxIDogMDtcblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBpZHNJc0FyciA9PT0gbGlzdGVuZXJzSXNBcnIgJiYgSURzTGVuID09PSBsaXN0ZW5lcnNMZW4sXG4gICAgICAnRXZlbnRQbHVnaW5VdGlsczogSW52YWxpZCBgZXZlbnRgLidcbiAgICApIDogaW52YXJpYW50KGlkc0lzQXJyID09PSBsaXN0ZW5lcnNJc0FyciAmJiBJRHNMZW4gPT09IGxpc3RlbmVyc0xlbikpO1xuICB9O1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNiKGV2ZW50LCBsaXN0ZW5lciwgaWQpYC4gQXZvaWRzIHVzaW5nIGNhbGwgaWYgbm8gc2NvcGUgaXNcbiAqIHByb3ZpZGVkLiBUaGUgYChsaXN0ZW5lcixpZClgIHBhaXIgZWZmZWN0aXZlbHkgZm9ybXMgdGhlIFwiZGlzcGF0Y2hcIiBidXQgYXJlXG4gKiBrZXB0IHNlcGFyYXRlIHRvIGNvbnNlcnZlIG1lbW9yeS5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaEV2ZW50RGlzcGF0Y2goZXZlbnQsIGNiKSB7XG4gIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbiAgdmFyIGRpc3BhdGNoSURzID0gZXZlbnQuX2Rpc3BhdGNoSURzO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KGRpc3BhdGNoTGlzdGVuZXJzKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gTGlzdGVuZXJzIGFuZCBJRHMgYXJlIHR3byBwYXJhbGxlbCBhcnJheXMgdGhhdCBhcmUgYWx3YXlzIGluIHN5bmMuXG4gICAgICBjYihldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnNbaV0sIGRpc3BhdGNoSURzW2ldKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMpIHtcbiAgICBjYihldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnMsIGRpc3BhdGNoSURzKTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgUGx1Z2luTW9kdWxlLmV4ZWN1dGVEaXNwYXRjaCgpLlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gU3ludGhldGljRXZlbnQgdG8gaGFuZGxlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBBcHBsaWNhdGlvbi1sZXZlbCBjYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGRvbUlEIERPTSBpZCB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBsaXN0ZW5lciwgZG9tSUQpIHtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IGluamVjdGlvbi5Nb3VudC5nZXROb2RlKGRvbUlEKTtcbiAgdmFyIHJldHVyblZhbHVlID0gbGlzdGVuZXIoZXZlbnQsIGRvbUlEKTtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuLyoqXG4gKiBTdGFuZGFyZC9zaW1wbGUgaXRlcmF0aW9uIHRocm91Z2ggYW4gZXZlbnQncyBjb2xsZWN0ZWQgZGlzcGF0Y2hlcy5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyKGV2ZW50LCBjYikge1xuICBmb3JFYWNoRXZlbnREaXNwYXRjaChldmVudCwgY2IpO1xuICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hJRHMgPSBudWxsO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkL3NpbXBsZSBpdGVyYXRpb24gdGhyb3VnaCBhbiBldmVudCdzIGNvbGxlY3RlZCBkaXNwYXRjaGVzLCBidXQgc3RvcHNcbiAqIGF0IHRoZSBmaXJzdCBkaXNwYXRjaCBleGVjdXRpb24gcmV0dXJuaW5nIHRydWUsIGFuZCByZXR1cm5zIHRoYXQgaWQuXG4gKlxuICogQHJldHVybiBpZCBvZiB0aGUgZmlyc3QgZGlzcGF0Y2ggZXhlY3V0aW9uIHdobydzIGxpc3RlbmVyIHJldHVybnMgdHJ1ZSwgb3JcbiAqIG51bGwgaWYgbm8gbGlzdGVuZXIgcmV0dXJuZWQgdHJ1ZS5cbiAqL1xuZnVuY3Rpb24gZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZUltcGwoZXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXJzID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICB2YXIgZGlzcGF0Y2hJRHMgPSBldmVudC5fZGlzcGF0Y2hJRHM7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBMaXN0ZW5lcnMgYW5kIElEcyBhcmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0aGF0IGFyZSBhbHdheXMgaW4gc3luYy5cbiAgICAgIGlmIChkaXNwYXRjaExpc3RlbmVyc1tpXShldmVudCwgZGlzcGF0Y2hJRHNbaV0pKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaElEc1tpXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMpIHtcbiAgICBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMoZXZlbnQsIGRpc3BhdGNoSURzKSkge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoSURzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAc2VlIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUoZXZlbnQpIHtcbiAgdmFyIHJldCA9IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsKGV2ZW50KTtcbiAgZXZlbnQuX2Rpc3BhdGNoSURzID0gbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBFeGVjdXRpb24gb2YgYSBcImRpcmVjdFwiIGRpc3BhdGNoIC0gdGhlcmUgbXVzdCBiZSBhdCBtb3N0IG9uZSBkaXNwYXRjaFxuICogYWNjdW11bGF0ZWQgb24gdGhlIGV2ZW50IG9yIGl0IGlzIGNvbnNpZGVyZWQgYW4gZXJyb3IuIEl0IGRvZXNuJ3QgcmVhbGx5IG1ha2VcbiAqIHNlbnNlIGZvciBhbiBldmVudCB3aXRoIG11bHRpcGxlIGRpc3BhdGNoZXMgKGJ1YmJsZWQpIHRvIGtlZXAgdHJhY2sgb2YgdGhlXG4gKiByZXR1cm4gdmFsdWVzIGF0IGVhY2ggZGlzcGF0Y2ggZXhlY3V0aW9uLCBidXQgaXQgZG9lcyB0ZW5kIHRvIG1ha2Ugc2Vuc2Ugd2hlblxuICogZGVhbGluZyB3aXRoIFwiZGlyZWN0XCIgZGlzcGF0Y2hlcy5cbiAqXG4gKiBAcmV0dXJuIFRoZSByZXR1cm4gdmFsdWUgb2YgZXhlY3V0aW5nIHRoZSBzaW5nbGUgZGlzcGF0Y2guXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXJlY3REaXNwYXRjaChldmVudCkge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMoZXZlbnQpO1xuICB9XG4gIHZhciBkaXNwYXRjaExpc3RlbmVyID0gZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzO1xuICB2YXIgZGlzcGF0Y2hJRCA9IGV2ZW50Ll9kaXNwYXRjaElEcztcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAhQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVyKSxcbiAgICAnZXhlY3V0ZURpcmVjdERpc3BhdGNoKC4uLik6IEludmFsaWQgYGV2ZW50YC4nXG4gICkgOiBpbnZhcmlhbnQoIUFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcikpKTtcbiAgdmFyIHJlcyA9IGRpc3BhdGNoTGlzdGVuZXIgP1xuICAgIGRpc3BhdGNoTGlzdGVuZXIoZXZlbnQsIGRpc3BhdGNoSUQpIDpcbiAgICBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPSBudWxsO1xuICBldmVudC5fZGlzcGF0Y2hJRHMgPSBudWxsO1xuICByZXR1cm4gcmVzO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gKiBAcmV0dXJuIHtib29sfSBUcnVlIGlmZiBudW1iZXIgb2YgZGlzcGF0Y2hlcyBhY2N1bXVsYXRlZCBpcyBncmVhdGVyIHRoYW4gMC5cbiAqL1xuZnVuY3Rpb24gaGFzRGlzcGF0Y2hlcyhldmVudCkge1xuICByZXR1cm4gISFldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG59XG5cbi8qKlxuICogR2VuZXJhbCB1dGlsaXRpZXMgdGhhdCBhcmUgdXNlZnVsIGluIGNyZWF0aW5nIGN1c3RvbSBFdmVudCBQbHVnaW5zLlxuICovXG52YXIgRXZlbnRQbHVnaW5VdGlscyA9IHtcbiAgaXNFbmRpc2g6IGlzRW5kaXNoLFxuICBpc01vdmVpc2g6IGlzTW92ZWlzaCxcbiAgaXNTdGFydGlzaDogaXNTdGFydGlzaCxcblxuICBleGVjdXRlRGlyZWN0RGlzcGF0Y2g6IGV4ZWN1dGVEaXJlY3REaXNwYXRjaCxcbiAgZXhlY3V0ZURpc3BhdGNoOiBleGVjdXRlRGlzcGF0Y2gsXG4gIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcjogZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyLFxuICBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlOiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlLFxuICBoYXNEaXNwYXRjaGVzOiBoYXNEaXNwYXRjaGVzLFxuICBpbmplY3Rpb246IGluamVjdGlvbixcbiAgdXNlVG91Y2hFdmVudHM6IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luVXRpbHM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZSWFpsYm5SUWJIVm5hVzVWZEdsc2N5NXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRVYyWlc1MFVHeDFaMmx1VlhScGJITmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJGZG1WdWRFTnZibk4wWVc1MGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBWMlpXNTBRMjl1YzNSaGJuUnpYQ0lwTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNHZLaXBjYmlBcUlFbHVhbVZqZEdWa0lHUmxjR1Z1WkdWdVkybGxjenBjYmlBcUwxeHVYRzR2S2lwY2JpQXFJQzBnWUUxdmRXNTBZRG9nVzNKbGNYVnBjbVZrWFNCTmIyUjFiR1VnZEdoaGRDQmpZVzRnWTI5dWRtVnlkQ0JpWlhSM1pXVnVJRkpsWVdOMElHUnZiU0JKUkhNZ1lXNWtYRzRnS2lBZ0lHRmpkSFZoYkNCdWIyUmxJSEpsWm1WeVpXNWpaWE11WEc0Z0tpOWNiblpoY2lCcGJtcGxZM1JwYjI0Z1BTQjdYRzRnSUUxdmRXNTBPaUJ1ZFd4c0xGeHVJQ0JwYm1wbFkzUk5iM1Z1ZERvZ1puVnVZM1JwYjI0b1NXNXFaV04wWldSTmIzVnVkQ2tnZTF4dUlDQWdJR2x1YW1WamRHbHZiaTVOYjNWdWRDQTlJRWx1YW1WamRHVmtUVzkxYm5RN1hHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnU1c1cVpXTjBaV1JOYjNWdWRDQW1KaUJKYm1wbFkzUmxaRTF2ZFc1MExtZGxkRTV2WkdVc1hHNGdJQ0FnSUNBZ0lDZEZkbVZ1ZEZCc2RXZHBibFYwYVd4ekxtbHVhbVZqZEdsdmJpNXBibXBsWTNSTmIzVnVkQ2d1TGk0cE9pQkpibXBsWTNSbFpDQk5iM1Z1ZENCdGIyUjFiR1VnSnlBclhHNGdJQ0FnSUNBZ0lDZHBjeUJ0YVhOemFXNW5JR2RsZEU1dlpHVXVKMXh1SUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoSmJtcGxZM1JsWkUxdmRXNTBJQ1ltSUVsdWFtVmpkR1ZrVFc5MWJuUXVaMlYwVG05a1pTa3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dWZUdGNibHh1ZG1GeUlIUnZjRXhsZG1Wc1ZIbHdaWE1nUFNCRmRtVnVkRU52Ym5OMFlXNTBjeTUwYjNCTVpYWmxiRlI1Y0dWek8xeHVYRzVtZFc1amRHbHZiaUJwYzBWdVpHbHphQ2gwYjNCTVpYWmxiRlI1Y0dVcElIdGNiaUFnY21WMGRYSnVJSFJ2Y0V4bGRtVnNWSGx3WlNBOVBUMGdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQk5iM1Z6WlZWd0lIeDhYRzRnSUNBZ0lDQWdJQ0IwYjNCTVpYWmxiRlI1Y0dVZ1BUMDlJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdWRzkxWTJoRmJtUWdmSHhjYmlBZ0lDQWdJQ0FnSUhSdmNFeGxkbVZzVkhsd1pTQTlQVDBnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JVYjNWamFFTmhibU5sYkR0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnYVhOTmIzWmxhWE5vS0hSdmNFeGxkbVZzVkhsd1pTa2dlMXh1SUNCeVpYUjFjbTRnZEc5d1RHVjJaV3hVZVhCbElEMDlQU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRTF2ZFhObFRXOTJaU0I4ZkZ4dUlDQWdJQ0FnSUNBZ2RHOXdUR1YyWld4VWVYQmxJRDA5UFNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0ZSdmRXTm9UVzkyWlR0Y2JuMWNibVoxYm1OMGFXOXVJR2x6VTNSaGNuUnBjMmdvZEc5d1RHVjJaV3hVZVhCbEtTQjdYRzRnSUhKbGRIVnliaUIwYjNCTVpYWmxiRlI1Y0dVZ1BUMDlJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdUVzkxYzJWRWIzZHVJSHg4WEc0Z0lDQWdJQ0FnSUNCMGIzQk1aWFpsYkZSNWNHVWdQVDA5SUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3Vkc5MVkyaFRkR0Z5ZER0Y2JuMWNibHh1WEc1MllYSWdkbUZzYVdSaGRHVkZkbVZ1ZEVScGMzQmhkR05vWlhNN1hHNXBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUhaaGJHbGtZWFJsUlhabGJuUkVhWE53WVhSamFHVnpJRDBnWm5WdVkzUnBiMjRvWlhabGJuUXBJSHRjYmlBZ0lDQjJZWElnWkdsemNHRjBZMmhNYVhOMFpXNWxjbk1nUFNCbGRtVnVkQzVmWkdsemNHRjBZMmhNYVhOMFpXNWxjbk03WEc0Z0lDQWdkbUZ5SUdScGMzQmhkR05vU1VSeklEMGdaWFpsYm5RdVgyUnBjM0JoZEdOb1NVUnpPMXh1WEc0Z0lDQWdkbUZ5SUd4cGMzUmxibVZ5YzBselFYSnlJRDBnUVhKeVlYa3VhWE5CY25KaGVTaGthWE53WVhSamFFeHBjM1JsYm1WeWN5azdYRzRnSUNBZ2RtRnlJR2xrYzBselFYSnlJRDBnUVhKeVlYa3VhWE5CY25KaGVTaGthWE53WVhSamFFbEVjeWs3WEc0Z0lDQWdkbUZ5SUVsRWMweGxiaUE5SUdsa2MwbHpRWEp5SUQ4Z1pHbHpjR0YwWTJoSlJITXViR1Z1WjNSb0lEb2daR2x6Y0dGMFkyaEpSSE1nUHlBeElEb2dNRHRjYmlBZ0lDQjJZWElnYkdsemRHVnVaWEp6VEdWdUlEMGdiR2x6ZEdWdVpYSnpTWE5CY25JZ1AxeHVJQ0FnSUNBZ1pHbHpjR0YwWTJoTWFYTjBaVzVsY25NdWJHVnVaM1JvSURwY2JpQWdJQ0FnSUdScGMzQmhkR05vVEdsemRHVnVaWEp6SUQ4Z01TQTZJREE3WEc1Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdhV1J6U1hOQmNuSWdQVDA5SUd4cGMzUmxibVZ5YzBselFYSnlJQ1ltSUVsRWMweGxiaUE5UFQwZ2JHbHpkR1Z1WlhKelRHVnVMRnh1SUNBZ0lDQWdKMFYyWlc1MFVHeDFaMmx1VlhScGJITTZJRWx1ZG1Gc2FXUWdZR1YyWlc1MFlDNG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hwWkhOSmMwRnljaUE5UFQwZ2JHbHpkR1Z1WlhKelNYTkJjbklnSmlZZ1NVUnpUR1Z1SUQwOVBTQnNhWE4wWlc1bGNuTk1aVzRwS1R0Y2JpQWdmVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkpiblp2YTJWeklHQmpZaWhsZG1WdWRDd2diR2x6ZEdWdVpYSXNJR2xrS1dBdUlFRjJiMmxrY3lCMWMybHVaeUJqWVd4c0lHbG1JRzV2SUhOamIzQmxJR2x6WEc0Z0tpQndjbTkyYVdSbFpDNGdWR2hsSUdBb2JHbHpkR1Z1WlhJc2FXUXBZQ0J3WVdseUlHVm1abVZqZEdsMlpXeDVJR1p2Y20xeklIUm9aU0JjSW1ScGMzQmhkR05vWENJZ1luVjBJR0Z5WlZ4dUlDb2dhMlZ3ZENCelpYQmhjbUYwWlNCMGJ5QmpiMjV6WlhKMlpTQnRaVzF2Y25rdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdadmNrVmhZMmhGZG1WdWRFUnBjM0JoZEdOb0tHVjJaVzUwTENCallpa2dlMXh1SUNCMllYSWdaR2x6Y0dGMFkyaE1hWE4wWlc1bGNuTWdQU0JsZG1WdWRDNWZaR2x6Y0dGMFkyaE1hWE4wWlc1bGNuTTdYRzRnSUhaaGNpQmthWE53WVhSamFFbEVjeUE5SUdWMlpXNTBMbDlrYVhOd1lYUmphRWxFY3p0Y2JpQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lIWmhiR2xrWVhSbFJYWmxiblJFYVhOd1lYUmphR1Z6S0dWMlpXNTBLVHRjYmlBZ2ZWeHVJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2hrYVhOd1lYUmphRXhwYzNSbGJtVnljeWtwSUh0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUdScGMzQmhkR05vVEdsemRHVnVaWEp6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQnBaaUFvWlhabGJuUXVhWE5RY205d1lXZGhkR2x2YmxOMGIzQndaV1FvS1NrZ2UxeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUM4dklFeHBjM1JsYm1WeWN5QmhibVFnU1VSeklHRnlaU0IwZDI4Z2NHRnlZV3hzWld3Z1lYSnlZWGx6SUhSb1lYUWdZWEpsSUdGc2QyRjVjeUJwYmlCemVXNWpMbHh1SUNBZ0lDQWdZMklvWlhabGJuUXNJR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpXMmxkTENCa2FYTndZWFJqYUVsRWMxdHBYU2s3WEc0Z0lDQWdmVnh1SUNCOUlHVnNjMlVnYVdZZ0tHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKektTQjdYRzRnSUNBZ1kySW9aWFpsYm5Rc0lHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKekxDQmthWE53WVhSamFFbEVjeWs3WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCRVpXWmhkV3gwSUdsdGNHeGxiV1Z1ZEdGMGFXOXVJRzltSUZCc2RXZHBiazF2WkhWc1pTNWxlR1ZqZFhSbFJHbHpjR0YwWTJnb0tTNWNiaUFxSUVCd1lYSmhiU0I3VTNsdWRHaGxkR2xqUlhabGJuUjlJRk41Ym5Sb1pYUnBZMFYyWlc1MElIUnZJR2hoYm1Sc1pWeHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnUVhCd2JHbGpZWFJwYjI0dGJHVjJaV3dnWTJGc2JHSmhZMnRjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCa2IyMUpSQ0JFVDAwZ2FXUWdkRzhnY0dGemN5QjBieUIwYUdVZ1kyRnNiR0poWTJzdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdWNFpXTjFkR1ZFYVhOd1lYUmphQ2hsZG1WdWRDd2diR2x6ZEdWdVpYSXNJR1J2YlVsRUtTQjdYRzRnSUdWMlpXNTBMbU4xY25KbGJuUlVZWEpuWlhRZ1BTQnBibXBsWTNScGIyNHVUVzkxYm5RdVoyVjBUbTlrWlNoa2IyMUpSQ2s3WEc0Z0lIWmhjaUJ5WlhSMWNtNVdZV3gxWlNBOUlHeHBjM1JsYm1WeUtHVjJaVzUwTENCa2IyMUpSQ2s3WEc0Z0lHVjJaVzUwTG1OMWNuSmxiblJVWVhKblpYUWdQU0J1ZFd4c08xeHVJQ0J5WlhSMWNtNGdjbVYwZFhKdVZtRnNkV1U3WEc1OVhHNWNiaThxS2x4dUlDb2dVM1JoYm1SaGNtUXZjMmx0Y0d4bElHbDBaWEpoZEdsdmJpQjBhSEp2ZFdkb0lHRnVJR1YyWlc1MEozTWdZMjlzYkdWamRHVmtJR1JwYzNCaGRHTm9aWE11WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1Y0WldOMWRHVkVhWE53WVhSamFHVnpTVzVQY21SbGNpaGxkbVZ1ZEN3Z1kySXBJSHRjYmlBZ1ptOXlSV0ZqYUVWMlpXNTBSR2x6Y0dGMFkyZ29aWFpsYm5Rc0lHTmlLVHRjYmlBZ1pYWmxiblF1WDJScGMzQmhkR05vVEdsemRHVnVaWEp6SUQwZ2JuVnNiRHRjYmlBZ1pYWmxiblF1WDJScGMzQmhkR05vU1VSeklEMGdiblZzYkR0Y2JuMWNibHh1THlvcVhHNGdLaUJUZEdGdVpHRnlaQzl6YVcxd2JHVWdhWFJsY21GMGFXOXVJSFJvY205MVoyZ2dZVzRnWlhabGJuUW5jeUJqYjJ4c1pXTjBaV1FnWkdsemNHRjBZMmhsY3l3Z1luVjBJSE4wYjNCelhHNGdLaUJoZENCMGFHVWdabWx5YzNRZ1pHbHpjR0YwWTJnZ1pYaGxZM1YwYVc5dUlISmxkSFZ5Ym1sdVp5QjBjblZsTENCaGJtUWdjbVYwZFhKdWN5QjBhR0YwSUdsa0xseHVJQ3BjYmlBcUlFQnlaWFIxY200Z2FXUWdiMllnZEdobElHWnBjbk4wSUdScGMzQmhkR05vSUdWNFpXTjFkR2x2YmlCM2FHOG5jeUJzYVhOMFpXNWxjaUJ5WlhSMWNtNXpJSFJ5ZFdVc0lHOXlYRzRnS2lCdWRXeHNJR2xtSUc1dklHeHBjM1JsYm1WeUlISmxkSFZ5Ym1Wa0lIUnlkV1V1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1Y0WldOMWRHVkVhWE53WVhSamFHVnpTVzVQY21SbGNsTjBiM0JCZEZSeWRXVkpiWEJzS0dWMlpXNTBLU0I3WEc0Z0lIWmhjaUJrYVhOd1lYUmphRXhwYzNSbGJtVnljeUE5SUdWMlpXNTBMbDlrYVhOd1lYUmphRXhwYzNSbGJtVnljenRjYmlBZ2RtRnlJR1JwYzNCaGRHTm9TVVJ6SUQwZ1pYWmxiblF1WDJScGMzQmhkR05vU1VSek8xeHVJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdkbUZzYVdSaGRHVkZkbVZ1ZEVScGMzQmhkR05vWlhNb1pYWmxiblFwTzF4dUlDQjlYRzRnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0dScGMzQmhkR05vVEdsemRHVnVaWEp6S1NrZ2UxeHVJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z1pHbHpjR0YwWTJoTWFYTjBaVzVsY25NdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJR2xtSUNobGRtVnVkQzVwYzFCeWIzQmhaMkYwYVc5dVUzUnZjSEJsWkNncEtTQjdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0x5OGdUR2x6ZEdWdVpYSnpJR0Z1WkNCSlJITWdZWEpsSUhSM2J5QndZWEpoYkd4bGJDQmhjbkpoZVhNZ2RHaGhkQ0JoY21VZ1lXeDNZWGx6SUdsdUlITjVibU11WEc0Z0lDQWdJQ0JwWmlBb1pHbHpjR0YwWTJoTWFYTjBaVzVsY25OYmFWMG9aWFpsYm5Rc0lHUnBjM0JoZEdOb1NVUnpXMmxkS1NrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1pHbHpjR0YwWTJoSlJITmJhVjA3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOUlHVnNjMlVnYVdZZ0tHUnBjM0JoZEdOb1RHbHpkR1Z1WlhKektTQjdYRzRnSUNBZ2FXWWdLR1JwYzNCaGRHTm9UR2x6ZEdWdVpYSnpLR1YyWlc1MExDQmthWE53WVhSamFFbEVjeWtwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJrYVhOd1lYUmphRWxFY3p0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzUxYkd3N1hHNTlYRzVjYmk4cUtseHVJQ29nUUhObFpTQmxlR1ZqZFhSbFJHbHpjR0YwWTJobGMwbHVUM0prWlhKVGRHOXdRWFJVY25WbFNXMXdiRnh1SUNvdlhHNW1kVzVqZEdsdmJpQmxlR1ZqZFhSbFJHbHpjR0YwWTJobGMwbHVUM0prWlhKVGRHOXdRWFJVY25WbEtHVjJaVzUwS1NCN1hHNGdJSFpoY2lCeVpYUWdQU0JsZUdWamRYUmxSR2x6Y0dGMFkyaGxjMGx1VDNKa1pYSlRkRzl3UVhSVWNuVmxTVzF3YkNobGRtVnVkQ2s3WEc0Z0lHVjJaVzUwTGw5a2FYTndZWFJqYUVsRWN5QTlJRzUxYkd3N1hHNGdJR1YyWlc1MExsOWthWE53WVhSamFFeHBjM1JsYm1WeWN5QTlJRzUxYkd3N1hHNGdJSEpsZEhWeWJpQnlaWFE3WEc1OVhHNWNiaThxS2x4dUlDb2dSWGhsWTNWMGFXOXVJRzltSUdFZ1hDSmthWEpsWTNSY0lpQmthWE53WVhSamFDQXRJSFJvWlhKbElHMTFjM1FnWW1VZ1lYUWdiVzl6ZENCdmJtVWdaR2x6Y0dGMFkyaGNiaUFxSUdGalkzVnRkV3hoZEdWa0lHOXVJSFJvWlNCbGRtVnVkQ0J2Y2lCcGRDQnBjeUJqYjI1emFXUmxjbVZrSUdGdUlHVnljbTl5TGlCSmRDQmtiMlZ6YmlkMElISmxZV3hzZVNCdFlXdGxYRzRnS2lCelpXNXpaU0JtYjNJZ1lXNGdaWFpsYm5RZ2QybDBhQ0J0ZFd4MGFYQnNaU0JrYVhOd1lYUmphR1Z6SUNoaWRXSmliR1ZrS1NCMGJ5QnJaV1Z3SUhSeVlXTnJJRzltSUhSb1pWeHVJQ29nY21WMGRYSnVJSFpoYkhWbGN5QmhkQ0JsWVdOb0lHUnBjM0JoZEdOb0lHVjRaV04xZEdsdmJpd2dZblYwSUdsMElHUnZaWE1nZEdWdVpDQjBieUJ0WVd0bElITmxibk5sSUhkb1pXNWNiaUFxSUdSbFlXeHBibWNnZDJsMGFDQmNJbVJwY21WamRGd2lJR1JwYzNCaGRHTm9aWE11WEc0Z0tseHVJQ29nUUhKbGRIVnliaUJVYUdVZ2NtVjBkWEp1SUhaaGJIVmxJRzltSUdWNFpXTjFkR2x1WnlCMGFHVWdjMmx1WjJ4bElHUnBjM0JoZEdOb0xseHVJQ292WEc1bWRXNWpkR2x2YmlCbGVHVmpkWFJsUkdseVpXTjBSR2x6Y0dGMFkyZ29aWFpsYm5RcElIdGNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJSFpoYkdsa1lYUmxSWFpsYm5SRWFYTndZWFJqYUdWektHVjJaVzUwS1R0Y2JpQWdmVnh1SUNCMllYSWdaR2x6Y0dGMFkyaE1hWE4wWlc1bGNpQTlJR1YyWlc1MExsOWthWE53WVhSamFFeHBjM1JsYm1WeWN6dGNiaUFnZG1GeUlHUnBjM0JoZEdOb1NVUWdQU0JsZG1WdWRDNWZaR2x6Y0dGMFkyaEpSSE03WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSVVGeWNtRjVMbWx6UVhKeVlYa29aR2x6Y0dGMFkyaE1hWE4wWlc1bGNpa3NYRzRnSUNBZ0oyVjRaV04xZEdWRWFYSmxZM1JFYVhOd1lYUmphQ2d1TGk0cE9pQkpiblpoYkdsa0lHQmxkbVZ1ZEdBdUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtDRkJjbkpoZVM1cGMwRnljbUY1S0dScGMzQmhkR05vVEdsemRHVnVaWElwS1NrN1hHNGdJSFpoY2lCeVpYTWdQU0JrYVhOd1lYUmphRXhwYzNSbGJtVnlJRDljYmlBZ0lDQmthWE53WVhSamFFeHBjM1JsYm1WeUtHVjJaVzUwTENCa2FYTndZWFJqYUVsRUtTQTZYRzRnSUNBZ2JuVnNiRHRjYmlBZ1pYWmxiblF1WDJScGMzQmhkR05vVEdsemRHVnVaWEp6SUQwZ2JuVnNiRHRjYmlBZ1pYWmxiblF1WDJScGMzQmhkR05vU1VSeklEMGdiblZzYkR0Y2JpQWdjbVYwZFhKdUlISmxjenRjYm4xY2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UxTjViblJvWlhScFkwVjJaVzUwZlNCbGRtVnVkRnh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiSDBnVkhKMVpTQnBabVlnYm5WdFltVnlJRzltSUdScGMzQmhkR05vWlhNZ1lXTmpkVzExYkdGMFpXUWdhWE1nWjNKbFlYUmxjaUIwYUdGdUlEQXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHaGhjMFJwYzNCaGRHTm9aWE1vWlhabGJuUXBJSHRjYmlBZ2NtVjBkWEp1SUNFaFpYWmxiblF1WDJScGMzQmhkR05vVEdsemRHVnVaWEp6TzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRsYm1WeVlXd2dkWFJwYkdsMGFXVnpJSFJvWVhRZ1lYSmxJSFZ6WldaMWJDQnBiaUJqY21WaGRHbHVaeUJqZFhOMGIyMGdSWFpsYm5RZ1VHeDFaMmx1Y3k1Y2JpQXFMMXh1ZG1GeUlFVjJaVzUwVUd4MVoybHVWWFJwYkhNZ1BTQjdYRzRnSUdselJXNWthWE5vT2lCcGMwVnVaR2x6YUN4Y2JpQWdhWE5OYjNabGFYTm9PaUJwYzAxdmRtVnBjMmdzWEc0Z0lHbHpVM1JoY25ScGMyZzZJR2x6VTNSaGNuUnBjMmdzWEc1Y2JpQWdaWGhsWTNWMFpVUnBjbVZqZEVScGMzQmhkR05vT2lCbGVHVmpkWFJsUkdseVpXTjBSR2x6Y0dGMFkyZ3NYRzRnSUdWNFpXTjFkR1ZFYVhOd1lYUmphRG9nWlhobFkzVjBaVVJwYzNCaGRHTm9MRnh1SUNCbGVHVmpkWFJsUkdsemNHRjBZMmhsYzBsdVQzSmtaWEk2SUdWNFpXTjFkR1ZFYVhOd1lYUmphR1Z6U1c1UGNtUmxjaXhjYmlBZ1pYaGxZM1YwWlVScGMzQmhkR05vWlhOSmJrOXlaR1Z5VTNSdmNFRjBWSEoxWlRvZ1pYaGxZM1YwWlVScGMzQmhkR05vWlhOSmJrOXlaR1Z5VTNSdmNFRjBWSEoxWlN4Y2JpQWdhR0Z6UkdsemNHRjBZMmhsY3pvZ2FHRnpSR2x6Y0dGMFkyaGxjeXhjYmlBZ2FXNXFaV04wYVc5dU9pQnBibXBsWTNScGIyNHNYRzRnSUhWelpWUnZkV05vUlhabGJuUnpPaUJtWVd4elpWeHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCRmRtVnVkRkJzZFdkcGJsVjBhV3h6TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEV2ZW50UHJvcGFnYXRvcnNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudENvbnN0YW50cyA9IHJlcXVpcmUoXCIuL0V2ZW50Q29uc3RhbnRzXCIpO1xudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5IdWJcIik7XG5cbnZhciBhY2N1bXVsYXRlSW50byA9IHJlcXVpcmUoXCIuL2FjY3VtdWxhdGVJbnRvXCIpO1xudmFyIGZvckVhY2hBY2N1bXVsYXRlZCA9IHJlcXVpcmUoXCIuL2ZvckVhY2hBY2N1bXVsYXRlZFwiKTtcblxudmFyIFByb3BhZ2F0aW9uUGhhc2VzID0gRXZlbnRDb25zdGFudHMuUHJvcGFnYXRpb25QaGFzZXM7XG52YXIgZ2V0TGlzdGVuZXIgPSBFdmVudFBsdWdpbkh1Yi5nZXRMaXN0ZW5lcjtcblxuLyoqXG4gKiBTb21lIGV2ZW50IHR5cGVzIGhhdmUgYSBub3Rpb24gb2YgZGlmZmVyZW50IHJlZ2lzdHJhdGlvbiBuYW1lcyBmb3IgZGlmZmVyZW50XG4gKiBcInBoYXNlc1wiIG9mIHByb3BhZ2F0aW9uLiBUaGlzIGZpbmRzIGxpc3RlbmVycyBieSBhIGdpdmVuIHBoYXNlLlxuICovXG5mdW5jdGlvbiBsaXN0ZW5lckF0UGhhc2UoaWQsIGV2ZW50LCBwcm9wYWdhdGlvblBoYXNlKSB7XG4gIHZhciByZWdpc3RyYXRpb25OYW1lID1cbiAgICBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lc1twcm9wYWdhdGlvblBoYXNlXTtcbiAgcmV0dXJuIGdldExpc3RlbmVyKGlkLCByZWdpc3RyYXRpb25OYW1lKTtcbn1cblxuLyoqXG4gKiBUYWdzIGEgYFN5bnRoZXRpY0V2ZW50YCB3aXRoIGRpc3BhdGNoZWQgbGlzdGVuZXJzLiBDcmVhdGluZyB0aGlzIGZ1bmN0aW9uXG4gKiBoZXJlLCBhbGxvd3MgdXMgdG8gbm90IGhhdmUgdG8gYmluZCBvciBjcmVhdGUgZnVuY3Rpb25zIGZvciBlYWNoIGV2ZW50LlxuICogTXV0YXRpbmcgdGhlIGV2ZW50J3MgbWVtYmVycyBhbGxvd3MgdXMgdG8gbm90IGhhdmUgdG8gY3JlYXRlIGEgd3JhcHBpbmdcbiAqIFwiZGlzcGF0Y2hcIiBvYmplY3QgdGhhdCBwYWlycyB0aGUgZXZlbnQgd2l0aCB0aGUgbGlzdGVuZXIuXG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMoZG9tSUQsIHVwd2FyZHMsIGV2ZW50KSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICBpZiAoIWRvbUlEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc3BhdGNoaW5nIGlkIG11c3Qgbm90IGJlIG51bGwnKTtcbiAgICB9XG4gIH1cbiAgdmFyIHBoYXNlID0gdXB3YXJkcyA/IFByb3BhZ2F0aW9uUGhhc2VzLmJ1YmJsZWQgOiBQcm9wYWdhdGlvblBoYXNlcy5jYXB0dXJlZDtcbiAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJBdFBoYXNlKGRvbUlELCBldmVudCwgcGhhc2UpO1xuICBpZiAobGlzdGVuZXIpIHtcbiAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPVxuICAgICAgYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gICAgZXZlbnQuX2Rpc3BhdGNoSURzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoSURzLCBkb21JRCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0IGRpc3BhdGNoZXMgKG11c3QgYmUgZW50aXJlbHkgY29sbGVjdGVkIGJlZm9yZSBkaXNwYXRjaGluZyAtIHNlZSB1bml0XG4gKiB0ZXN0cykuIExhemlseSBhbGxvY2F0ZSB0aGUgYXJyYXkgdG8gY29uc2VydmUgbWVtb3J5LiAgV2UgbXVzdCBsb29wIHRocm91Z2hcbiAqIGVhY2ggZXZlbnQgYW5kIHBlcmZvcm0gdGhlIHRyYXZlcnNhbCBmb3IgZWFjaCBvbmUuIFdlIGNhbiBub3QgcGVyZm9ybSBhXG4gKiBzaW5nbGUgdHJhdmVyc2FsIGZvciB0aGUgZW50aXJlIGNvbGxlY3Rpb24gb2YgZXZlbnRzIGJlY2F1c2UgZWFjaCBldmVudCBtYXlcbiAqIGhhdmUgYSBkaWZmZXJlbnQgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgIEV2ZW50UGx1Z2luSHViLmluamVjdGlvbi5nZXRJbnN0YW5jZUhhbmRsZSgpLnRyYXZlcnNlVHdvUGhhc2UoXG4gICAgICBldmVudC5kaXNwYXRjaE1hcmtlcixcbiAgICAgIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMsXG4gICAgICBldmVudFxuICAgICk7XG4gIH1cbn1cblxuXG4vKipcbiAqIEFjY3VtdWxhdGVzIHdpdGhvdXQgcmVnYXJkIHRvIGRpcmVjdGlvbiwgZG9lcyBub3QgbG9vayBmb3IgcGhhc2VkXG4gKiByZWdpc3RyYXRpb24gbmFtZXMuIFNhbWUgYXMgYGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlYCBidXQgd2l0aG91dFxuICogcmVxdWlyaW5nIHRoYXQgdGhlIGBkaXNwYXRjaE1hcmtlcmAgYmUgdGhlIHNhbWUgYXMgdGhlIGRpc3BhdGNoZWQgSUQuXG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXNwYXRjaGVzKGlkLCBpZ25vcmVkRGlyZWN0aW9uLCBldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZTtcbiAgICB2YXIgbGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpZCwgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMgPVxuICAgICAgICBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnMsIGxpc3RlbmVyKTtcbiAgICAgIGV2ZW50Ll9kaXNwYXRjaElEcyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50Ll9kaXNwYXRjaElEcywgaWQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY3VtdWxhdGVzIGRpc3BhdGNoZXMgb24gYW4gYFN5bnRoZXRpY0V2ZW50YCwgYnV0IG9ubHkgZm9yIHRoZVxuICogYGRpc3BhdGNoTWFya2VyYC5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgYWNjdW11bGF0ZURpc3BhdGNoZXMoZXZlbnQuZGlzcGF0Y2hNYXJrZXIsIG51bGwsIGV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50cykge1xuICBmb3JFYWNoQWNjdW11bGF0ZWQoZXZlbnRzLCBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzKGxlYXZlLCBlbnRlciwgZnJvbUlELCB0b0lEKSB7XG4gIEV2ZW50UGx1Z2luSHViLmluamVjdGlvbi5nZXRJbnN0YW5jZUhhbmRsZSgpLnRyYXZlcnNlRW50ZXJMZWF2ZShcbiAgICBmcm9tSUQsXG4gICAgdG9JRCxcbiAgICBhY2N1bXVsYXRlRGlzcGF0Y2hlcyxcbiAgICBsZWF2ZSxcbiAgICBlbnRlclxuICApO1xufVxuXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzKGV2ZW50cykge1xuICBmb3JFYWNoQWNjdW11bGF0ZWQoZXZlbnRzLCBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSk7XG59XG5cblxuXG4vKipcbiAqIEEgc21hbGwgc2V0IG9mIHByb3BhZ2F0aW9uIHBhdHRlcm5zLCBlYWNoIG9mIHdoaWNoIHdpbGwgYWNjZXB0IGEgc21hbGwgYW1vdW50XG4gKiBvZiBpbmZvcm1hdGlvbiwgYW5kIGdlbmVyYXRlIGEgc2V0IG9mIFwiZGlzcGF0Y2ggcmVhZHkgZXZlbnQgb2JqZWN0c1wiIC0gd2hpY2hcbiAqIGFyZSBzZXRzIG9mIGV2ZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFubm90YXRlZCB3aXRoIGEgc2V0IG9mIGRpc3BhdGNoZWRcbiAqIGxpc3RlbmVyIGZ1bmN0aW9ucy9pZHMuIFRoZSBBUEkgaXMgZGVzaWduZWQgdGhpcyB3YXkgdG8gZGlzY291cmFnZSB0aGVzZVxuICogcHJvcGFnYXRpb24gc3RyYXRlZ2llcyBmcm9tIGFjdHVhbGx5IGV4ZWN1dGluZyB0aGUgZGlzcGF0Y2hlcywgc2luY2Ugd2VcbiAqIGFsd2F5cyB3YW50IHRvIGNvbGxlY3QgdGhlIGVudGlyZSBzZXQgb2YgZGlzcGF0Y2hlcyBiZWZvcmUgZXhlY3V0aW5nIGV2ZW50IGFcbiAqIHNpbmdsZSBvbmUuXG4gKlxuICogQGNvbnN0cnVjdG9yIEV2ZW50UHJvcGFnYXRvcnNcbiAqL1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSB7XG4gIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXM6IGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMsXG4gIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzOiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyxcbiAgYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzOiBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRQcm9wYWdhdG9ycztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlJYWmxiblJRY205d1lXZGhkRzl5Y3k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQkZkbVZ1ZEZCeWIzQmhaMkYwYjNKelhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdSWFpsYm5SRGIyNXpkR0Z1ZEhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlGZG1WdWRFTnZibk4wWVc1MGMxd2lLVHRjYm5aaGNpQkZkbVZ1ZEZCc2RXZHBia2gxWWlBOUlISmxjWFZwY21Vb1hDSXVMMFYyWlc1MFVHeDFaMmx1U0hWaVhDSXBPMXh1WEc1MllYSWdZV05qZFcxMWJHRjBaVWx1ZEc4Z1BTQnlaWEYxYVhKbEtGd2lMaTloWTJOMWJYVnNZWFJsU1c1MGIxd2lLVHRjYm5aaGNpQm1iM0pGWVdOb1FXTmpkVzExYkdGMFpXUWdQU0J5WlhGMWFYSmxLRndpTGk5bWIzSkZZV05vUVdOamRXMTFiR0YwWldSY0lpazdYRzVjYm5aaGNpQlFjbTl3WVdkaGRHbHZibEJvWVhObGN5QTlJRVYyWlc1MFEyOXVjM1JoYm5SekxsQnliM0JoWjJGMGFXOXVVR2hoYzJWek8xeHVkbUZ5SUdkbGRFeHBjM1JsYm1WeUlEMGdSWFpsYm5SUWJIVm5hVzVJZFdJdVoyVjBUR2x6ZEdWdVpYSTdYRzVjYmk4cUtseHVJQ29nVTI5dFpTQmxkbVZ1ZENCMGVYQmxjeUJvWVhabElHRWdibTkwYVc5dUlHOW1JR1JwWm1abGNtVnVkQ0J5WldkcGMzUnlZWFJwYjI0Z2JtRnRaWE1nWm05eUlHUnBabVpsY21WdWRGeHVJQ29nWENKd2FHRnpaWE5jSWlCdlppQndjbTl3WVdkaGRHbHZiaTRnVkdocGN5Qm1hVzVrY3lCc2FYTjBaVzVsY25NZ1lua2dZU0JuYVhabGJpQndhR0Z6WlM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYkdsemRHVnVaWEpCZEZCb1lYTmxLR2xrTENCbGRtVnVkQ3dnY0hKdmNHRm5ZWFJwYjI1UWFHRnpaU2tnZTF4dUlDQjJZWElnY21WbmFYTjBjbUYwYVc5dVRtRnRaU0E5WEc0Z0lDQWdaWFpsYm5RdVpHbHpjR0YwWTJoRGIyNW1hV2N1Y0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTmJjSEp2Y0dGbllYUnBiMjVRYUdGelpWMDdYRzRnSUhKbGRIVnliaUJuWlhSTWFYTjBaVzVsY2locFpDd2djbVZuYVhOMGNtRjBhVzl1VG1GdFpTazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1ZHRm5jeUJoSUdCVGVXNTBhR1YwYVdORmRtVnVkR0FnZDJsMGFDQmthWE53WVhSamFHVmtJR3hwYzNSbGJtVnljeTRnUTNKbFlYUnBibWNnZEdocGN5Qm1kVzVqZEdsdmJseHVJQ29nYUdWeVpTd2dZV3hzYjNkeklIVnpJSFJ2SUc1dmRDQm9ZWFpsSUhSdklHSnBibVFnYjNJZ1kzSmxZWFJsSUdaMWJtTjBhVzl1Y3lCbWIzSWdaV0ZqYUNCbGRtVnVkQzVjYmlBcUlFMTFkR0YwYVc1bklIUm9aU0JsZG1WdWRDZHpJRzFsYldKbGNuTWdZV3hzYjNkeklIVnpJSFJ2SUc1dmRDQm9ZWFpsSUhSdklHTnlaV0YwWlNCaElIZHlZWEJ3YVc1blhHNGdLaUJjSW1ScGMzQmhkR05vWENJZ2IySnFaV04wSUhSb1lYUWdjR0ZwY25NZ2RHaGxJR1YyWlc1MElIZHBkR2dnZEdobElHeHBjM1JsYm1WeUxseHVJQ292WEc1bWRXNWpkR2x2YmlCaFkyTjFiWFZzWVhSbFJHbHlaV04wYVc5dVlXeEVhWE53WVhSamFHVnpLR1J2YlVsRUxDQjFjSGRoY21SekxDQmxkbVZ1ZENrZ2UxeHVJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdhV1lnS0NGa2IyMUpSQ2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RFYVhOd1lYUmphR2x1WnlCcFpDQnRkWE4wSUc1dmRDQmlaU0J1ZFd4c0p5azdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lIWmhjaUJ3YUdGelpTQTlJSFZ3ZDJGeVpITWdQeUJRY205d1lXZGhkR2x2YmxCb1lYTmxjeTVpZFdKaWJHVmtJRG9nVUhKdmNHRm5ZWFJwYjI1UWFHRnpaWE11WTJGd2RIVnlaV1E3WEc0Z0lIWmhjaUJzYVhOMFpXNWxjaUE5SUd4cGMzUmxibVZ5UVhSUWFHRnpaU2hrYjIxSlJDd2daWFpsYm5Rc0lIQm9ZWE5sS1R0Y2JpQWdhV1lnS0d4cGMzUmxibVZ5S1NCN1hHNGdJQ0FnWlhabGJuUXVYMlJwYzNCaGRHTm9UR2x6ZEdWdVpYSnpJRDFjYmlBZ0lDQWdJR0ZqWTNWdGRXeGhkR1ZKYm5SdktHVjJaVzUwTGw5a2FYTndZWFJqYUV4cGMzUmxibVZ5Y3l3Z2JHbHpkR1Z1WlhJcE8xeHVJQ0FnSUdWMlpXNTBMbDlrYVhOd1lYUmphRWxFY3lBOUlHRmpZM1Z0ZFd4aGRHVkpiblJ2S0dWMlpXNTBMbDlrYVhOd1lYUmphRWxFY3l3Z1pHOXRTVVFwTzF4dUlDQjlYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyOXNiR1ZqZENCa2FYTndZWFJqYUdWeklDaHRkWE4wSUdKbElHVnVkR2x5Wld4NUlHTnZiR3hsWTNSbFpDQmlaV1p2Y21VZ1pHbHpjR0YwWTJocGJtY2dMU0J6WldVZ2RXNXBkRnh1SUNvZ2RHVnpkSE1wTGlCTVlYcHBiSGtnWVd4c2IyTmhkR1VnZEdobElHRnljbUY1SUhSdklHTnZibk5sY25abElHMWxiVzl5ZVM0Z0lGZGxJRzExYzNRZ2JHOXZjQ0IwYUhKdmRXZG9YRzRnS2lCbFlXTm9JR1YyWlc1MElHRnVaQ0J3WlhKbWIzSnRJSFJvWlNCMGNtRjJaWEp6WVd3Z1ptOXlJR1ZoWTJnZ2IyNWxMaUJYWlNCallXNGdibTkwSUhCbGNtWnZjbTBnWVZ4dUlDb2djMmx1WjJ4bElIUnlZWFpsY25OaGJDQm1iM0lnZEdobElHVnVkR2x5WlNCamIyeHNaV04wYVc5dUlHOW1JR1YyWlc1MGN5QmlaV05oZFhObElHVmhZMmdnWlhabGJuUWdiV0Y1WEc0Z0tpQm9ZWFpsSUdFZ1pHbG1abVZ5Wlc1MElIUmhjbWRsZEM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWVdOamRXMTFiR0YwWlZSM2IxQm9ZWE5sUkdsemNHRjBZMmhsYzFOcGJtZHNaU2hsZG1WdWRDa2dlMXh1SUNCcFppQW9aWFpsYm5RZ0ppWWdaWFpsYm5RdVpHbHpjR0YwWTJoRGIyNW1hV2N1Y0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTXBJSHRjYmlBZ0lDQkZkbVZ1ZEZCc2RXZHBia2gxWWk1cGJtcGxZM1JwYjI0dVoyVjBTVzV6ZEdGdVkyVklZVzVrYkdVb0tTNTBjbUYyWlhKelpWUjNiMUJvWVhObEtGeHVJQ0FnSUNBZ1pYWmxiblF1WkdsemNHRjBZMmhOWVhKclpYSXNYRzRnSUNBZ0lDQmhZMk4xYlhWc1lYUmxSR2x5WldOMGFXOXVZV3hFYVhOd1lYUmphR1Z6TEZ4dUlDQWdJQ0FnWlhabGJuUmNiaUFnSUNBcE8xeHVJQ0I5WEc1OVhHNWNibHh1THlvcVhHNGdLaUJCWTJOMWJYVnNZWFJsY3lCM2FYUm9iM1YwSUhKbFoyRnlaQ0IwYnlCa2FYSmxZM1JwYjI0c0lHUnZaWE1nYm05MElHeHZiMnNnWm05eUlIQm9ZWE5sWkZ4dUlDb2djbVZuYVhOMGNtRjBhVzl1SUc1aGJXVnpMaUJUWVcxbElHRnpJR0JoWTJOMWJYVnNZWFJsUkdseVpXTjBSR2x6Y0dGMFkyaGxjMU5wYm1kc1pXQWdZblYwSUhkcGRHaHZkWFJjYmlBcUlISmxjWFZwY21sdVp5QjBhR0YwSUhSb1pTQmdaR2x6Y0dGMFkyaE5ZWEpyWlhKZ0lHSmxJSFJvWlNCellXMWxJR0Z6SUhSb1pTQmthWE53WVhSamFHVmtJRWxFTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJoWTJOMWJYVnNZWFJsUkdsemNHRjBZMmhsY3locFpDd2dhV2R1YjNKbFpFUnBjbVZqZEdsdmJpd2daWFpsYm5RcElIdGNiaUFnYVdZZ0tHVjJaVzUwSUNZbUlHVjJaVzUwTG1ScGMzQmhkR05vUTI5dVptbG5MbkpsWjJsemRISmhkR2x2Yms1aGJXVXBJSHRjYmlBZ0lDQjJZWElnY21WbmFYTjBjbUYwYVc5dVRtRnRaU0E5SUdWMlpXNTBMbVJwYzNCaGRHTm9RMjl1Wm1sbkxuSmxaMmx6ZEhKaGRHbHZiazVoYldVN1hHNGdJQ0FnZG1GeUlHeHBjM1JsYm1WeUlEMGdaMlYwVEdsemRHVnVaWElvYVdRc0lISmxaMmx6ZEhKaGRHbHZiazVoYldVcE8xeHVJQ0FnSUdsbUlDaHNhWE4wWlc1bGNpa2dlMXh1SUNBZ0lDQWdaWFpsYm5RdVgyUnBjM0JoZEdOb1RHbHpkR1Z1WlhKeklEMWNiaUFnSUNBZ0lDQWdZV05qZFcxMWJHRjBaVWx1ZEc4b1pYWmxiblF1WDJScGMzQmhkR05vVEdsemRHVnVaWEp6TENCc2FYTjBaVzVsY2lrN1hHNGdJQ0FnSUNCbGRtVnVkQzVmWkdsemNHRjBZMmhKUkhNZ1BTQmhZMk4xYlhWc1lYUmxTVzUwYnlobGRtVnVkQzVmWkdsemNHRjBZMmhKUkhNc0lHbGtLVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJCWTJOMWJYVnNZWFJsY3lCa2FYTndZWFJqYUdWeklHOXVJR0Z1SUdCVGVXNTBhR1YwYVdORmRtVnVkR0FzSUdKMWRDQnZibXg1SUdadmNpQjBhR1ZjYmlBcUlHQmthWE53WVhSamFFMWhjbXRsY21BdVhHNGdLaUJBY0dGeVlXMGdlMU41Ym5Sb1pYUnBZMFYyWlc1MGZTQmxkbVZ1ZEZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJoWTJOMWJYVnNZWFJsUkdseVpXTjBSR2x6Y0dGMFkyaGxjMU5wYm1kc1pTaGxkbVZ1ZENrZ2UxeHVJQ0JwWmlBb1pYWmxiblFnSmlZZ1pYWmxiblF1WkdsemNHRjBZMmhEYjI1bWFXY3VjbVZuYVhOMGNtRjBhVzl1VG1GdFpTa2dlMXh1SUNBZ0lHRmpZM1Z0ZFd4aGRHVkVhWE53WVhSamFHVnpLR1YyWlc1MExtUnBjM0JoZEdOb1RXRnlhMlZ5TENCdWRXeHNMQ0JsZG1WdWRDazdYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnWVdOamRXMTFiR0YwWlZSM2IxQm9ZWE5sUkdsemNHRjBZMmhsY3lobGRtVnVkSE1wSUh0Y2JpQWdabTl5UldGamFFRmpZM1Z0ZFd4aGRHVmtLR1YyWlc1MGN5d2dZV05qZFcxMWJHRjBaVlIzYjFCb1lYTmxSR2x6Y0dGMFkyaGxjMU5wYm1kc1pTazdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHRmpZM1Z0ZFd4aGRHVkZiblJsY2t4bFlYWmxSR2x6Y0dGMFkyaGxjeWhzWldGMlpTd2daVzUwWlhJc0lHWnliMjFKUkN3Z2RHOUpSQ2tnZTF4dUlDQkZkbVZ1ZEZCc2RXZHBia2gxWWk1cGJtcGxZM1JwYjI0dVoyVjBTVzV6ZEdGdVkyVklZVzVrYkdVb0tTNTBjbUYyWlhKelpVVnVkR1Z5VEdWaGRtVW9YRzRnSUNBZ1puSnZiVWxFTEZ4dUlDQWdJSFJ2U1VRc1hHNGdJQ0FnWVdOamRXMTFiR0YwWlVScGMzQmhkR05vWlhNc1hHNGdJQ0FnYkdWaGRtVXNYRzRnSUNBZ1pXNTBaWEpjYmlBZ0tUdGNibjFjYmx4dVhHNW1kVzVqZEdsdmJpQmhZMk4xYlhWc1lYUmxSR2x5WldOMFJHbHpjR0YwWTJobGN5aGxkbVZ1ZEhNcElIdGNiaUFnWm05eVJXRmphRUZqWTNWdGRXeGhkR1ZrS0dWMlpXNTBjeXdnWVdOamRXMTFiR0YwWlVScGNtVmpkRVJwYzNCaGRHTm9aWE5UYVc1bmJHVXBPMXh1ZlZ4dVhHNWNibHh1THlvcVhHNGdLaUJCSUhOdFlXeHNJSE5sZENCdlppQndjbTl3WVdkaGRHbHZiaUJ3WVhSMFpYSnVjeXdnWldGamFDQnZaaUIzYUdsamFDQjNhV3hzSUdGalkyVndkQ0JoSUhOdFlXeHNJR0Z0YjNWdWRGeHVJQ29nYjJZZ2FXNW1iM0p0WVhScGIyNHNJR0Z1WkNCblpXNWxjbUYwWlNCaElITmxkQ0J2WmlCY0ltUnBjM0JoZEdOb0lISmxZV1I1SUdWMlpXNTBJRzlpYW1WamRITmNJaUF0SUhkb2FXTm9YRzRnS2lCaGNtVWdjMlYwY3lCdlppQmxkbVZ1ZEhNZ2RHaGhkQ0JvWVhabElHRnNjbVZoWkhrZ1ltVmxiaUJoYm01dmRHRjBaV1FnZDJsMGFDQmhJSE5sZENCdlppQmthWE53WVhSamFHVmtYRzRnS2lCc2FYTjBaVzVsY2lCbWRXNWpkR2x2Ym5NdmFXUnpMaUJVYUdVZ1FWQkpJR2x6SUdSbGMybG5ibVZrSUhSb2FYTWdkMkY1SUhSdklHUnBjMk52ZFhKaFoyVWdkR2hsYzJWY2JpQXFJSEJ5YjNCaFoyRjBhVzl1SUhOMGNtRjBaV2RwWlhNZ1puSnZiU0JoWTNSMVlXeHNlU0JsZUdWamRYUnBibWNnZEdobElHUnBjM0JoZEdOb1pYTXNJSE5wYm1ObElIZGxYRzRnS2lCaGJIZGhlWE1nZDJGdWRDQjBieUJqYjJ4c1pXTjBJSFJvWlNCbGJuUnBjbVVnYzJWMElHOW1JR1JwYzNCaGRHTm9aWE1nWW1WbWIzSmxJR1Y0WldOMWRHbHVaeUJsZG1WdWRDQmhYRzRnS2lCemFXNW5iR1VnYjI1bExseHVJQ3BjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjaUJGZG1WdWRGQnliM0JoWjJGMGIzSnpYRzRnS2k5Y2JuWmhjaUJGZG1WdWRGQnliM0JoWjJGMGIzSnpJRDBnZTF4dUlDQmhZMk4xYlhWc1lYUmxWSGR2VUdoaGMyVkVhWE53WVhSamFHVnpPaUJoWTJOMWJYVnNZWFJsVkhkdlVHaGhjMlZFYVhOd1lYUmphR1Z6TEZ4dUlDQmhZMk4xYlhWc1lYUmxSR2x5WldOMFJHbHpjR0YwWTJobGN6b2dZV05qZFcxMWJHRjBaVVJwY21WamRFUnBjM0JoZEdOb1pYTXNYRzRnSUdGalkzVnRkV3hoZEdWRmJuUmxja3hsWVhabFJHbHpjR0YwWTJobGN6b2dZV05qZFcxMWJHRjBaVVZ1ZEdWeVRHVmhkbVZFYVhOd1lYUmphR1Z6WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRVYyWlc1MFVISnZjR0ZuWVhSdmNuTTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBFeGVjdXRpb25FbnZpcm9ubWVudFxuICovXG5cbi8qanNsaW50IGV2aWw6IHRydWUgKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjYW5Vc2VET00gPSAhIShcbiAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudClcbik7XG5cbi8qKlxuICogU2ltcGxlLCBsaWdodHdlaWdodCBtb2R1bGUgYXNzaXN0aW5nIHdpdGggdGhlIGRldGVjdGlvbiBhbmQgY29udGV4dCBvZlxuICogV29ya2VyLiBIZWxwcyBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGFsbG93cyBjb2RlIHRvIHJlYXNvbiBhYm91dFxuICogd2hldGhlciBvciBub3QgdGhleSBhcmUgaW4gYSBXb3JrZXIsIGV2ZW4gaWYgdGhleSBuZXZlciBpbmNsdWRlIHRoZSBtYWluXG4gKiBgUmVhY3RXb3JrZXJgIGRlcGVuZGVuY3kuXG4gKi9cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHtcblxuICBjYW5Vc2VET006IGNhblVzZURPTSxcblxuICBjYW5Vc2VXb3JrZXJzOiB0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJyxcblxuICBjYW5Vc2VFdmVudExpc3RlbmVyczpcbiAgICBjYW5Vc2VET00gJiYgISEod2luZG93LmFkZEV2ZW50TGlzdGVuZXIgfHwgd2luZG93LmF0dGFjaEV2ZW50KSxcblxuICBjYW5Vc2VWaWV3cG9ydDogY2FuVXNlRE9NICYmICEhd2luZG93LnNjcmVlbixcblxuICBpc0luV29ya2VyOiAhY2FuVXNlRE9NIC8vIEZvciBub3csIHRoaXMgaXMgdHJ1ZSAtIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV4ZWN1dGlvbkVudmlyb25tZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoXCIuL1Bvb2xlZENsYXNzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBnZXRUZXh0Q29udGVudEFjY2Vzc29yID0gcmVxdWlyZShcIi4vZ2V0VGV4dENvbnRlbnRBY2Nlc3NvclwiKTtcblxuLyoqXG4gKiBUaGlzIGhlbHBlciBjbGFzcyBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgdGV4dCBjb250ZW50IG9mIGEgdGFyZ2V0IG5vZGUsXG4gKiBhbGxvd2luZyBjb21wYXJpc29uIG9mIGNvbnRlbnQgYmVmb3JlIGFuZCBhZnRlciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIElkZW50aWZ5IHRoZSBub2RlIHdoZXJlIHNlbGVjdGlvbiBjdXJyZW50bHkgYmVnaW5zLCB0aGVuIG9ic2VydmVcbiAqIGJvdGggaXRzIHRleHQgY29udGVudCBhbmQgaXRzIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIERPTS4gU2luY2UgdGhlXG4gKiBicm93c2VyIG1heSBuYXRpdmVseSByZXBsYWNlIHRoZSB0YXJnZXQgbm9kZSBkdXJpbmcgY29tcG9zaXRpb24sIHdlIGNhblxuICogdXNlIGl0cyBwb3NpdGlvbiB0byBmaW5kIGl0cyByZXBsYWNlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSByb290XG4gKi9cbmZ1bmN0aW9uIEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZShyb290KSB7XG4gIHRoaXMuX3Jvb3QgPSByb290O1xuICB0aGlzLl9zdGFydFRleHQgPSB0aGlzLmdldFRleHQoKTtcbiAgdGhpcy5fZmFsbGJhY2tUZXh0ID0gbnVsbDtcbn1cblxuYXNzaWduKEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5wcm90b3R5cGUsIHtcbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHRleHQgb2YgaW5wdXQuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdldFRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICgndmFsdWUnIGluIHRoaXMuX3Jvb3QpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yb290LnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcm9vdFtnZXRUZXh0Q29udGVudEFjY2Vzc29yKCldO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGRpZmZlcmluZyBzdWJzdHJpbmcgYmV0d2VlbiB0aGUgaW5pdGlhbGx5IHN0b3JlZFxuICAgKiB0ZXh0IGNvbnRlbnQgYW5kIHRoZSBjdXJyZW50IGNvbnRlbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdldERhdGE6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9mYWxsYmFja1RleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1RleHQ7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0O1xuICAgIHZhciBzdGFydFZhbHVlID0gdGhpcy5fc3RhcnRUZXh0O1xuICAgIHZhciBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoO1xuICAgIHZhciBlbmQ7XG4gICAgdmFyIGVuZFZhbHVlID0gdGhpcy5nZXRUZXh0KCk7XG4gICAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICAgIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IHN0YXJ0TGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydF0gIT09IGVuZFZhbHVlW3N0YXJ0XSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcbiAgICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNsaWNlVGFpbCA9IGVuZCA+IDEgPyAxIC0gZW5kIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuX2ZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1RleHQ7XG4gIH1cbn0pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgSFRNTERPTVByb3BlcnR5Q29uZmlnXG4gKi9cblxuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZShcIi4vRE9NUHJvcGVydHlcIik7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIE1VU1RfVVNFX0FUVFJJQlVURSA9IERPTVByb3BlcnR5LmluamVjdGlvbi5NVVNUX1VTRV9BVFRSSUJVVEU7XG52YXIgTVVTVF9VU0VfUFJPUEVSVFkgPSBET01Qcm9wZXJ0eS5pbmplY3Rpb24uTVVTVF9VU0VfUFJPUEVSVFk7XG52YXIgSEFTX0JPT0xFQU5fVkFMVUUgPSBET01Qcm9wZXJ0eS5pbmplY3Rpb24uSEFTX0JPT0xFQU5fVkFMVUU7XG52YXIgSEFTX1NJREVfRUZGRUNUUyA9IERPTVByb3BlcnR5LmluamVjdGlvbi5IQVNfU0lERV9FRkZFQ1RTO1xudmFyIEhBU19OVU1FUklDX1ZBTFVFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19OVU1FUklDX1ZBTFVFO1xudmFyIEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFID1cbiAgRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFO1xudmFyIEhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUgPVxuICBET01Qcm9wZXJ0eS5pbmplY3Rpb24uSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRTtcblxudmFyIGhhc1NWRztcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgdmFyIGltcGxlbWVudGF0aW9uID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb247XG4gIGhhc1NWRyA9IChcbiAgICBpbXBsZW1lbnRhdGlvbiAmJlxuICAgIGltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUgJiZcbiAgICBpbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKFxuICAgICAgJ2h0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjQmFzaWNTdHJ1Y3R1cmUnLFxuICAgICAgJzEuMSdcbiAgICApXG4gICk7XG59XG5cblxudmFyIEhUTUxET01Qcm9wZXJ0eUNvbmZpZyA9IHtcbiAgaXNDdXN0b21BdHRyaWJ1dGU6IFJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKFxuICAgIC9eKGRhdGF8YXJpYSktW2Etel9dW2EtelxcZF8uXFwtXSokL1xuICApLFxuICBQcm9wZXJ0aWVzOiB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgUHJvcGVydGllc1xuICAgICAqL1xuICAgIGFjY2VwdDogbnVsbCxcbiAgICBhY2NlcHRDaGFyc2V0OiBudWxsLFxuICAgIGFjY2Vzc0tleTogbnVsbCxcbiAgICBhY3Rpb246IG51bGwsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBhbGxvd1RyYW5zcGFyZW5jeTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGFsdDogbnVsbCxcbiAgICBhc3luYzogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgYXV0b0NvbXBsZXRlOiBudWxsLFxuICAgIC8vIGF1dG9Gb2N1cyBpcyBwb2x5ZmlsbGVkL25vcm1hbGl6ZWQgYnkgQXV0b0ZvY3VzTWl4aW5cbiAgICAvLyBhdXRvRm9jdXM6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGF1dG9QbGF5OiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBjZWxsUGFkZGluZzogbnVsbCxcbiAgICBjZWxsU3BhY2luZzogbnVsbCxcbiAgICBjaGFyU2V0OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgY2hlY2tlZDogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBjbGFzc0lEOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgLy8gVG8gc2V0IGNsYXNzTmFtZSBvbiBTVkcgZWxlbWVudHMsIGl0J3MgbmVjZXNzYXJ5IHRvIHVzZSAuc2V0QXR0cmlidXRlO1xuICAgIC8vIHRoaXMgd29ya3Mgb24gSFRNTCBlbGVtZW50cyB0b28gaW4gYWxsIGJyb3dzZXJzIGV4Y2VwdCBJRTguIENvbnZlbmllbnRseSxcbiAgICAvLyBJRTggZG9lc24ndCBzdXBwb3J0IFNWRyBhbmQgc28gd2UgY2FuIHNpbXBseSB1c2UgdGhlIGF0dHJpYnV0ZSBpblxuICAgIC8vIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBTVkcgYW5kIHRoZSBwcm9wZXJ0eSBpbiBicm93c2VycyB0aGF0IGRvbid0LFxuICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgZWxlbWVudCBpcyBIVE1MIG9yIFNWRy5cbiAgICBjbGFzc05hbWU6IGhhc1NWRyA/IE1VU1RfVVNFX0FUVFJJQlVURSA6IE1VU1RfVVNFX1BST1BFUlRZLFxuICAgIGNvbHM6IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAgIGNvbFNwYW46IG51bGwsXG4gICAgY29udGVudDogbnVsbCxcbiAgICBjb250ZW50RWRpdGFibGU6IG51bGwsXG4gICAgY29udGV4dE1lbnU6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBjb250cm9sczogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBjb29yZHM6IG51bGwsXG4gICAgY3Jvc3NPcmlnaW46IG51bGwsXG4gICAgZGF0YTogbnVsbCwgLy8gRm9yIGA8b2JqZWN0IC8+YCBhY3RzIGFzIGBzcmNgLlxuICAgIGRhdGVUaW1lOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZGVmZXI6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGRpcjogbnVsbCxcbiAgICBkaXNhYmxlZDogTVVTVF9VU0VfQVRUUklCVVRFIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZG93bmxvYWQ6IEhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUsXG4gICAgZHJhZ2dhYmxlOiBudWxsLFxuICAgIGVuY1R5cGU6IG51bGwsXG4gICAgZm9ybTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZvcm1BY3Rpb246IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmb3JtRW5jVHlwZTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZvcm1NZXRob2Q6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmb3JtTm9WYWxpZGF0ZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZm9ybVRhcmdldDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZyYW1lQm9yZGVyOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgaGVhZGVyczogbnVsbCxcbiAgICBoZWlnaHQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBoaWRkZW46IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGhpZ2g6IG51bGwsXG4gICAgaHJlZjogbnVsbCxcbiAgICBocmVmTGFuZzogbnVsbCxcbiAgICBodG1sRm9yOiBudWxsLFxuICAgIGh0dHBFcXVpdjogbnVsbCxcbiAgICBpY29uOiBudWxsLFxuICAgIGlkOiBNVVNUX1VTRV9QUk9QRVJUWSxcbiAgICBsYWJlbDogbnVsbCxcbiAgICBsYW5nOiBudWxsLFxuICAgIGxpc3Q6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBsb29wOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGxvdzogbnVsbCxcbiAgICBtYW5pZmVzdDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIG1hcmdpbkhlaWdodDogbnVsbCxcbiAgICBtYXJnaW5XaWR0aDogbnVsbCxcbiAgICBtYXg6IG51bGwsXG4gICAgbWF4TGVuZ3RoOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWVkaWE6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBtZWRpYUdyb3VwOiBudWxsLFxuICAgIG1ldGhvZDogbnVsbCxcbiAgICBtaW46IG51bGwsXG4gICAgbXVsdGlwbGU6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgbXV0ZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgbmFtZTogbnVsbCxcbiAgICBub1ZhbGlkYXRlOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBvcGVuOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBvcHRpbXVtOiBudWxsLFxuICAgIHBhdHRlcm46IG51bGwsXG4gICAgcGxhY2Vob2xkZXI6IG51bGwsXG4gICAgcG9zdGVyOiBudWxsLFxuICAgIHByZWxvYWQ6IG51bGwsXG4gICAgcmFkaW9Hcm91cDogbnVsbCxcbiAgICByZWFkT25seTogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICByZWw6IG51bGwsXG4gICAgcmVxdWlyZWQ6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHJvbGU6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICByb3dzOiBNVVNUX1VTRV9BVFRSSUJVVEUgfCBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRSxcbiAgICByb3dTcGFuOiBudWxsLFxuICAgIHNhbmRib3g6IG51bGwsXG4gICAgc2NvcGU6IG51bGwsXG4gICAgc2NvcGVkOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBzY3JvbGxpbmc6IG51bGwsXG4gICAgc2VhbWxlc3M6IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHNlbGVjdGVkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHNoYXBlOiBudWxsLFxuICAgIHNpemU6IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAgIHNpemVzOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3BhbjogSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgc3BlbGxDaGVjazogbnVsbCxcbiAgICBzcmM6IG51bGwsXG4gICAgc3JjRG9jOiBNVVNUX1VTRV9QUk9QRVJUWSxcbiAgICBzcmNTZXQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzdGFydDogSEFTX05VTUVSSUNfVkFMVUUsXG4gICAgc3RlcDogbnVsbCxcbiAgICBzdHlsZTogbnVsbCxcbiAgICB0YWJJbmRleDogbnVsbCxcbiAgICB0YXJnZXQ6IG51bGwsXG4gICAgdGl0bGU6IG51bGwsXG4gICAgdHlwZTogbnVsbCxcbiAgICB1c2VNYXA6IG51bGwsXG4gICAgdmFsdWU6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX1NJREVfRUZGRUNUUyxcbiAgICB3aWR0aDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHdtb2RlOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG5cbiAgICAvKipcbiAgICAgKiBOb24tc3RhbmRhcmQgUHJvcGVydGllc1xuICAgICAqL1xuICAgIC8vIGF1dG9DYXBpdGFsaXplIGFuZCBhdXRvQ29ycmVjdCBhcmUgc3VwcG9ydGVkIGluIE1vYmlsZSBTYWZhcmkgZm9yXG4gICAgLy8ga2V5Ym9hcmQgaGludHMuXG4gICAgYXV0b0NhcGl0YWxpemU6IG51bGwsXG4gICAgYXV0b0NvcnJlY3Q6IG51bGwsXG4gICAgLy8gaXRlbVByb3AsIGl0ZW1TY29wZSwgaXRlbVR5cGUgYXJlIGZvclxuICAgIC8vIE1pY3JvZGF0YSBzdXBwb3J0LiBTZWUgaHR0cDovL3NjaGVtYS5vcmcvZG9jcy9ncy5odG1sXG4gICAgaXRlbVByb3A6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBpdGVtU2NvcGU6IE1VU1RfVVNFX0FUVFJJQlVURSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGl0ZW1UeXBlOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgLy8gaXRlbUlEIGFuZCBpdGVtUmVmIGFyZSBmb3IgTWljcm9kYXRhIHN1cHBvcnQgYXMgd2VsbCBidXRcbiAgICAvLyBvbmx5IHNwZWNpZmllZCBpbiB0aGUgdGhlIFdIQVRXRyBzcGVjIGRvY3VtZW50LiBTZWVcbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9taWNyb2RhdGEuaHRtbCNtaWNyb2RhdGEtZG9tLWFwaVxuICAgIGl0ZW1JRDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGl0ZW1SZWY6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICAvLyBwcm9wZXJ0eSBpcyBzdXBwb3J0ZWQgZm9yIE9wZW5HcmFwaCBpbiBtZXRhIHRhZ3MuXG4gICAgcHJvcGVydHk6IG51bGwsXG4gICAgLy8gSUUtb25seSBhdHRyaWJ1dGUgdGhhdCBjb250cm9scyBmb2N1cyBiZWhhdmlvclxuICAgIHVuc2VsZWN0YWJsZTogTVVTVF9VU0VfQVRUUklCVVRFXG4gIH0sXG4gIERPTUF0dHJpYnV0ZU5hbWVzOiB7XG4gICAgYWNjZXB0Q2hhcnNldDogJ2FjY2VwdC1jaGFyc2V0JyxcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgaHRtbEZvcjogJ2ZvcicsXG4gICAgaHR0cEVxdWl2OiAnaHR0cC1lcXVpdidcbiAgfSxcbiAgRE9NUHJvcGVydHlOYW1lczoge1xuICAgIGF1dG9DYXBpdGFsaXplOiAnYXV0b2NhcGl0YWxpemUnLFxuICAgIGF1dG9Db21wbGV0ZTogJ2F1dG9jb21wbGV0ZScsXG4gICAgYXV0b0NvcnJlY3Q6ICdhdXRvY29ycmVjdCcsXG4gICAgYXV0b0ZvY3VzOiAnYXV0b2ZvY3VzJyxcbiAgICBhdXRvUGxheTogJ2F1dG9wbGF5JyxcbiAgICAvLyBgZW5jb2RpbmdgIGlzIGVxdWl2YWxlbnQgdG8gYGVuY3R5cGVgLCBJRTggbGFja3MgYW4gYGVuY3R5cGVgIHNldHRlci5cbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI2RvbS1mcy1lbmNvZGluZ1xuICAgIGVuY1R5cGU6ICdlbmNvZGluZycsXG4gICAgaHJlZkxhbmc6ICdocmVmbGFuZycsXG4gICAgcmFkaW9Hcm91cDogJ3JhZGlvZ3JvdXAnLFxuICAgIHNwZWxsQ2hlY2s6ICdzcGVsbGNoZWNrJyxcbiAgICBzcmNEb2M6ICdzcmNkb2MnLFxuICAgIHNyY1NldDogJ3NyY3NldCdcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBIVE1MRE9NUHJvcGVydHlDb25maWc7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgTGlua2VkU3RhdGVNaXhpblxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdExpbmsgPSByZXF1aXJlKFwiLi9SZWFjdExpbmtcIik7XG52YXIgUmVhY3RTdGF0ZVNldHRlcnMgPSByZXF1aXJlKFwiLi9SZWFjdFN0YXRlU2V0dGVyc1wiKTtcblxuLyoqXG4gKiBBIHNpbXBsZSBtaXhpbiBhcm91bmQgUmVhY3RMaW5rLmZvclN0YXRlKCkuXG4gKi9cbnZhciBMaW5rZWRTdGF0ZU1peGluID0ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgUmVhY3RMaW5rIHRoYXQncyBsaW5rZWQgdG8gcGFydCBvZiB0aGlzIGNvbXBvbmVudCdzIHN0YXRlLiBUaGVcbiAgICogUmVhY3RMaW5rIHdpbGwgaGF2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGlzLnN0YXRlW2tleV0gYW5kIHdpbGwgY2FsbFxuICAgKiBzZXRTdGF0ZSgpIHdoZW4gYSBjaGFuZ2UgaXMgcmVxdWVzdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0YXRlIGtleSB0byB1cGRhdGUuIE5vdGU6IHlvdSBtYXkgd2FudCB0byB1c2Uga2V5T2YoKVxuICAgKiBpZiB5b3UncmUgdXNpbmcgR29vZ2xlIENsb3N1cmUgQ29tcGlsZXIgYWR2YW5jZWQgbW9kZS5cbiAgICogQHJldHVybiB7UmVhY3RMaW5rfSBSZWFjdExpbmsgaW5zdGFuY2UgbGlua2luZyB0byB0aGUgc3RhdGUuXG4gICAqL1xuICBsaW5rU3RhdGU6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBuZXcgUmVhY3RMaW5rKFxuICAgICAgdGhpcy5zdGF0ZVtrZXldLFxuICAgICAgUmVhY3RTdGF0ZVNldHRlcnMuY3JlYXRlU3RhdGVLZXlTZXR0ZXIodGhpcywga2V5KVxuICAgICk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTGlua2VkU3RhdGVNaXhpbjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgTGlua2VkVmFsdWVVdGlsc1xuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVzXCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG52YXIgaGFzUmVhZE9ubHlWYWx1ZSA9IHtcbiAgJ2J1dHRvbic6IHRydWUsXG4gICdjaGVja2JveCc6IHRydWUsXG4gICdpbWFnZSc6IHRydWUsXG4gICdoaWRkZW4nOiB0cnVlLFxuICAncmFkaW8nOiB0cnVlLFxuICAncmVzZXQnOiB0cnVlLFxuICAnc3VibWl0JzogdHJ1ZVxufTtcblxuZnVuY3Rpb24gX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpbnB1dC5wcm9wcy5jaGVja2VkTGluayA9PSBudWxsIHx8IGlucHV0LnByb3BzLnZhbHVlTGluayA9PSBudWxsLFxuICAgICdDYW5ub3QgcHJvdmlkZSBhIGNoZWNrZWRMaW5rIGFuZCBhIHZhbHVlTGluay4gSWYgeW91IHdhbnQgdG8gdXNlICcgK1xuICAgICdjaGVja2VkTGluaywgeW91IHByb2JhYmx5IGRvblxcJ3Qgd2FudCB0byB1c2UgdmFsdWVMaW5rIGFuZCB2aWNlIHZlcnNhLidcbiAgKSA6IGludmFyaWFudChpbnB1dC5wcm9wcy5jaGVja2VkTGluayA9PSBudWxsIHx8IGlucHV0LnByb3BzLnZhbHVlTGluayA9PSBudWxsKSk7XG59XG5mdW5jdGlvbiBfYXNzZXJ0VmFsdWVMaW5rKGlucHV0KSB7XG4gIF9hc3NlcnRTaW5nbGVMaW5rKGlucHV0KTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpbnB1dC5wcm9wcy52YWx1ZSA9PSBudWxsICYmIGlucHV0LnByb3BzLm9uQ2hhbmdlID09IG51bGwsXG4gICAgJ0Nhbm5vdCBwcm92aWRlIGEgdmFsdWVMaW5rIGFuZCBhIHZhbHVlIG9yIG9uQ2hhbmdlIGV2ZW50LiBJZiB5b3Ugd2FudCAnICtcbiAgICAndG8gdXNlIHZhbHVlIG9yIG9uQ2hhbmdlLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSB2YWx1ZUxpbmsuJ1xuICApIDogaW52YXJpYW50KGlucHV0LnByb3BzLnZhbHVlID09IG51bGwgJiYgaW5wdXQucHJvcHMub25DaGFuZ2UgPT0gbnVsbCkpO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0Q2hlY2tlZExpbmsoaW5wdXQpIHtcbiAgX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXQpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlucHV0LnByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBpbnB1dC5wcm9wcy5vbkNoYW5nZSA9PSBudWxsLFxuICAgICdDYW5ub3QgcHJvdmlkZSBhIGNoZWNrZWRMaW5rIGFuZCBhIGNoZWNrZWQgcHJvcGVydHkgb3Igb25DaGFuZ2UgZXZlbnQuICcgK1xuICAgICdJZiB5b3Ugd2FudCB0byB1c2UgY2hlY2tlZCBvciBvbkNoYW5nZSwgeW91IHByb2JhYmx5IGRvblxcJ3Qgd2FudCB0byAnICtcbiAgICAndXNlIGNoZWNrZWRMaW5rJ1xuICApIDogaW52YXJpYW50KGlucHV0LnByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBpbnB1dC5wcm9wcy5vbkNoYW5nZSA9PSBudWxsKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZSBjaGFuZ2UgZXZlbnQgdG8gaGFuZGxlXG4gKi9cbmZ1bmN0aW9uIF9oYW5kbGVMaW5rZWRWYWx1ZUNoYW5nZShlKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHRoaXMucHJvcHMudmFsdWVMaW5rLnJlcXVlc3RDaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xufVxuXG4vKipcbiAgKiBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBlIGNoYW5nZSBldmVudCB0byBoYW5kbGVcbiAgKi9cbmZ1bmN0aW9uIF9oYW5kbGVMaW5rZWRDaGVja0NoYW5nZShlKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHRoaXMucHJvcHMuY2hlY2tlZExpbmsucmVxdWVzdENoYW5nZShlLnRhcmdldC5jaGVja2VkKTtcbn1cblxuLyoqXG4gKiBQcm92aWRlIGEgbGlua2VkIGB2YWx1ZWAgYXR0cmlidXRlIGZvciBjb250cm9sbGVkIGZvcm1zLiBZb3Ugc2hvdWxkIG5vdCB1c2VcbiAqIHRoaXMgb3V0c2lkZSBvZiB0aGUgUmVhY3RET00gY29udHJvbGxlZCBmb3JtIGNvbXBvbmVudHMuXG4gKi9cbnZhciBMaW5rZWRWYWx1ZVV0aWxzID0ge1xuICBNaXhpbjoge1xuICAgIHByb3BUeXBlczoge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgICAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSB8fFxuICAgICAgICAgICAgaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fFxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgfHxcbiAgICAgICAgICAgIHByb3BzLnJlYWRPbmx5IHx8XG4gICAgICAgICAgICBwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICtcbiAgICAgICAgICAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICtcbiAgICAgICAgICAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCAnICtcbiAgICAgICAgICAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJ1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGNoZWNrZWQ6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgICAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSB8fFxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgfHxcbiAgICAgICAgICAgIHByb3BzLnJlYWRPbmx5IHx8XG4gICAgICAgICAgICBwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1lvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgK1xuICAgICAgICAgICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgK1xuICAgICAgICAgICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgJyArXG4gICAgICAgICAgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLidcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvbkNoYW5nZTogUmVhY3RQcm9wVHlwZXMuZnVuY1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW5wdXQgRm9ybSBjb21wb25lbnRcbiAgICogQHJldHVybiB7Kn0gY3VycmVudCB2YWx1ZSBvZiB0aGUgaW5wdXQgZWl0aGVyIGZyb20gdmFsdWUgcHJvcCBvciBsaW5rLlxuICAgKi9cbiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnByb3BzLnZhbHVlTGluaykge1xuICAgICAgX2Fzc2VydFZhbHVlTGluayhpbnB1dCk7XG4gICAgICByZXR1cm4gaW5wdXQucHJvcHMudmFsdWVMaW5rLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQucHJvcHMudmFsdWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGlucHV0IEZvcm0gY29tcG9uZW50XG4gICAqIEByZXR1cm4geyp9IGN1cnJlbnQgY2hlY2tlZCBzdGF0dXMgb2YgdGhlIGlucHV0IGVpdGhlciBmcm9tIGNoZWNrZWQgcHJvcFxuICAgKiAgICAgICAgICAgICBvciBsaW5rLlxuICAgKi9cbiAgZ2V0Q2hlY2tlZDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQucHJvcHMuY2hlY2tlZExpbmspIHtcbiAgICAgIF9hc3NlcnRDaGVja2VkTGluayhpbnB1dCk7XG4gICAgICByZXR1cm4gaW5wdXQucHJvcHMuY2hlY2tlZExpbmsudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5wcm9wcy5jaGVja2VkO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnB1dCBGb3JtIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gY2hhbmdlIGNhbGxiYWNrIGVpdGhlciBmcm9tIG9uQ2hhbmdlIHByb3Agb3IgbGluay5cbiAgICovXG4gIGdldE9uQ2hhbmdlOiBmdW5jdGlvbihpbnB1dCkge1xuICAgIGlmIChpbnB1dC5wcm9wcy52YWx1ZUxpbmspIHtcbiAgICAgIF9hc3NlcnRWYWx1ZUxpbmsoaW5wdXQpO1xuICAgICAgcmV0dXJuIF9oYW5kbGVMaW5rZWRWYWx1ZUNoYW5nZTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LnByb3BzLmNoZWNrZWRMaW5rKSB7XG4gICAgICBfYXNzZXJ0Q2hlY2tlZExpbmsoaW5wdXQpO1xuICAgICAgcmV0dXJuIF9oYW5kbGVMaW5rZWRDaGVja0NoYW5nZTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0LnByb3BzLm9uQ2hhbmdlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpbmtlZFZhbHVlVXRpbHM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2MxeHVJQ29nUUhSNWNHVmphR1ZqYTNNZ2MzUmhkR2xqTFc5dWJIbGNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRGQnliM0JVZVhCbGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVnpYQ0lwTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNTJZWElnYUdGelVtVmhaRTl1YkhsV1lXeDFaU0E5SUh0Y2JpQWdKMkoxZEhSdmJpYzZJSFJ5ZFdVc1hHNGdJQ2RqYUdWamEySnZlQ2M2SUhSeWRXVXNYRzRnSUNkcGJXRm5aU2M2SUhSeWRXVXNYRzRnSUNkb2FXUmtaVzRuT2lCMGNuVmxMRnh1SUNBbmNtRmthVzhuT2lCMGNuVmxMRnh1SUNBbmNtVnpaWFFuT2lCMGNuVmxMRnh1SUNBbmMzVmliV2wwSnpvZ2RISjFaVnh1ZlR0Y2JseHVablZ1WTNScGIyNGdYMkZ6YzJWeWRGTnBibWRzWlV4cGJtc29hVzV3ZFhRcElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQnBibkIxZEM1d2NtOXdjeTVqYUdWamEyVmtUR2x1YXlBOVBTQnVkV3hzSUh4OElHbHVjSFYwTG5CeWIzQnpMblpoYkhWbFRHbHVheUE5UFNCdWRXeHNMRnh1SUNBZ0lDZERZVzV1YjNRZ2NISnZkbWxrWlNCaElHTm9aV05yWldSTWFXNXJJR0Z1WkNCaElIWmhiSFZsVEdsdWF5NGdTV1lnZVc5MUlIZGhiblFnZEc4Z2RYTmxJQ2NnSzF4dUlDQWdJQ2RqYUdWamEyVmtUR2x1YXl3Z2VXOTFJSEJ5YjJKaFlteDVJR1J2Ymx4Y0ozUWdkMkZ1ZENCMGJ5QjFjMlVnZG1Gc2RXVk1hVzVySUdGdVpDQjJhV05sSUhabGNuTmhMaWRjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hwYm5CMWRDNXdjbTl3Y3k1amFHVmphMlZrVEdsdWF5QTlQU0J1ZFd4c0lIeDhJR2x1Y0hWMExuQnliM0J6TG5aaGJIVmxUR2x1YXlBOVBTQnVkV3hzS1NrN1hHNTlYRzVtZFc1amRHbHZiaUJmWVhOelpYSjBWbUZzZFdWTWFXNXJLR2x1Y0hWMEtTQjdYRzRnSUY5aGMzTmxjblJUYVc1bmJHVk1hVzVyS0dsdWNIVjBLVHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0JwYm5CMWRDNXdjbTl3Y3k1MllXeDFaU0E5UFNCdWRXeHNJQ1ltSUdsdWNIVjBMbkJ5YjNCekxtOXVRMmhoYm1kbElEMDlJRzUxYkd3c1hHNGdJQ0FnSjBOaGJtNXZkQ0J3Y205MmFXUmxJR0VnZG1Gc2RXVk1hVzVySUdGdVpDQmhJSFpoYkhWbElHOXlJRzl1UTJoaGJtZGxJR1YyWlc1MExpQkpaaUI1YjNVZ2QyRnVkQ0FuSUN0Y2JpQWdJQ0FuZEc4Z2RYTmxJSFpoYkhWbElHOXlJRzl1UTJoaGJtZGxMQ0I1YjNVZ2NISnZZbUZpYkhrZ1pHOXVYRnduZENCM1lXNTBJSFJ2SUhWelpTQjJZV3gxWlV4cGJtc3VKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLR2x1Y0hWMExuQnliM0J6TG5aaGJIVmxJRDA5SUc1MWJHd2dKaVlnYVc1d2RYUXVjSEp2Y0hNdWIyNURhR0Z1WjJVZ1BUMGdiblZzYkNrcE8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCZllYTnpaWEowUTJobFkydGxaRXhwYm1zb2FXNXdkWFFwSUh0Y2JpQWdYMkZ6YzJWeWRGTnBibWRzWlV4cGJtc29hVzV3ZFhRcE8xeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lHbHVjSFYwTG5CeWIzQnpMbU5vWldOclpXUWdQVDBnYm5Wc2JDQW1KaUJwYm5CMWRDNXdjbTl3Y3k1dmJrTm9ZVzVuWlNBOVBTQnVkV3hzTEZ4dUlDQWdJQ2REWVc1dWIzUWdjSEp2ZG1sa1pTQmhJR05vWldOclpXUk1hVzVySUdGdVpDQmhJR05vWldOclpXUWdjSEp2Y0dWeWRIa2diM0lnYjI1RGFHRnVaMlVnWlhabGJuUXVJQ2NnSzF4dUlDQWdJQ2RKWmlCNWIzVWdkMkZ1ZENCMGJ5QjFjMlVnWTJobFkydGxaQ0J2Y2lCdmJrTm9ZVzVuWlN3Z2VXOTFJSEJ5YjJKaFlteDVJR1J2Ymx4Y0ozUWdkMkZ1ZENCMGJ5QW5JQ3RjYmlBZ0lDQW5kWE5sSUdOb1pXTnJaV1JNYVc1ckoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHbHVjSFYwTG5CeWIzQnpMbU5vWldOclpXUWdQVDBnYm5Wc2JDQW1KaUJwYm5CMWRDNXdjbTl3Y3k1dmJrTm9ZVzVuWlNBOVBTQnVkV3hzS1NrN1hHNTlYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRUZVc1MGFHVjBhV05GZG1WdWRIMGdaU0JqYUdGdVoyVWdaWFpsYm5RZ2RHOGdhR0Z1Wkd4bFhHNGdLaTljYm1aMWJtTjBhVzl1SUY5b1lXNWtiR1ZNYVc1clpXUldZV3gxWlVOb1lXNW5aU2hsS1NCN1hHNGdJQzhxYW5Ob2FXNTBJSFpoYkdsa2RHaHBjenAwY25WbElDb3ZYRzRnSUhSb2FYTXVjSEp2Y0hNdWRtRnNkV1ZNYVc1ckxuSmxjWFZsYzNSRGFHRnVaMlVvWlM1MFlYSm5aWFF1ZG1Gc2RXVXBPMXh1ZlZ4dVhHNHZLaXBjYmlBZ0tpQkFjR0Z5WVcwZ2UxTjViblJvWlhScFkwVjJaVzUwZlNCbElHTm9ZVzVuWlNCbGRtVnVkQ0IwYnlCb1lXNWtiR1ZjYmlBZ0tpOWNibVoxYm1OMGFXOXVJRjlvWVc1a2JHVk1hVzVyWldSRGFHVmphME5vWVc1blpTaGxLU0I3WEc0Z0lDOHFhbk5vYVc1MElIWmhiR2xrZEdocGN6cDBjblZsSUNvdlhHNGdJSFJvYVhNdWNISnZjSE11WTJobFkydGxaRXhwYm1zdWNtVnhkV1Z6ZEVOb1lXNW5aU2hsTG5SaGNtZGxkQzVqYUdWamEyVmtLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlFjbTkyYVdSbElHRWdiR2x1YTJWa0lHQjJZV3gxWldBZ1lYUjBjbWxpZFhSbElHWnZjaUJqYjI1MGNtOXNiR1ZrSUdadmNtMXpMaUJaYjNVZ2MyaHZkV3hrSUc1dmRDQjFjMlZjYmlBcUlIUm9hWE1nYjNWMGMybGtaU0J2WmlCMGFHVWdVbVZoWTNSRVQwMGdZMjl1ZEhKdmJHeGxaQ0JtYjNKdElHTnZiWEJ2Ym1WdWRITXVYRzRnS2k5Y2JuWmhjaUJNYVc1clpXUldZV3gxWlZWMGFXeHpJRDBnZTF4dUlDQk5hWGhwYmpvZ2UxeHVJQ0FnSUhCeWIzQlVlWEJsY3pvZ2UxeHVJQ0FnSUNBZ2RtRnNkV1U2SUdaMWJtTjBhVzl1S0hCeWIzQnpMQ0J3Y205d1RtRnRaU3dnWTI5dGNHOXVaVzUwVG1GdFpTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lYQnliM0J6VzNCeWIzQk9ZVzFsWFNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnYUdGelVtVmhaRTl1YkhsV1lXeDFaVnR3Y205d2N5NTBlWEJsWFNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnY0hKdmNITXViMjVEYUdGdVoyVWdmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lIQnliM0J6TG5KbFlXUlBibXg1SUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0J3Y205d2N5NWthWE5oWW14bFpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ0FnSjFsdmRTQndjbTkyYVdSbFpDQmhJR0IyWVd4MVpXQWdjSEp2Y0NCMGJ5QmhJR1p2Y20wZ1ptbGxiR1FnZDJsMGFHOTFkQ0JoYmlBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuWUc5dVEyaGhibWRsWUNCb1lXNWtiR1Z5TGlCVWFHbHpJSGRwYkd3Z2NtVnVaR1Z5SUdFZ2NtVmhaQzF2Ym14NUlHWnBaV3hrTGlCSlppQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBbmRHaGxJR1pwWld4a0lITm9iM1ZzWkNCaVpTQnRkWFJoWW14bElIVnpaU0JnWkdWbVlYVnNkRlpoYkhWbFlDNGdUM1JvWlhKM2FYTmxMQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5jMlYwSUdWcGRHaGxjaUJnYjI1RGFHRnVaMlZnSUc5eUlHQnlaV0ZrVDI1c2VXQXVKMXh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUdOb1pXTnJaV1E2SUdaMWJtTjBhVzl1S0hCeWIzQnpMQ0J3Y205d1RtRnRaU3dnWTI5dGNHOXVaVzUwVG1GdFpTa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lYQnliM0J6VzNCeWIzQk9ZVzFsWFNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnY0hKdmNITXViMjVEYUdGdVoyVWdmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lIQnliM0J6TG5KbFlXUlBibXg1SUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0J3Y205d2N5NWthWE5oWW14bFpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnUlhKeWIzSW9YRzRnSUNBZ0lDQWdJQ0FnSjFsdmRTQndjbTkyYVdSbFpDQmhJR0JqYUdWamEyVmtZQ0J3Y205d0lIUnZJR0VnWm05eWJTQm1hV1ZzWkNCM2FYUm9iM1YwSUdGdUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkZ2IyNURhR0Z1WjJWZ0lHaGhibVJzWlhJdUlGUm9hWE1nZDJsc2JDQnlaVzVrWlhJZ1lTQnlaV0ZrTFc5dWJIa2dabWxsYkdRdUlFbG1JQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZDBhR1VnWm1sbGJHUWdjMmh2ZFd4a0lHSmxJRzExZEdGaWJHVWdkWE5sSUdCa1pXWmhkV3gwUTJobFkydGxaR0F1SUU5MGFHVnlkMmx6WlN3Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjNObGRDQmxhWFJvWlhJZ1lHOXVRMmhoYm1kbFlDQnZjaUJnY21WaFpFOXViSGxnTGlkY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQnZia05vWVc1blpUb2dVbVZoWTNSUWNtOXdWSGx3WlhNdVpuVnVZMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdhVzV3ZFhRZ1JtOXliU0JqYjIxd2IyNWxiblJjYmlBZ0lDb2dRSEpsZEhWeWJpQjdLbjBnWTNWeWNtVnVkQ0IyWVd4MVpTQnZaaUIwYUdVZ2FXNXdkWFFnWldsMGFHVnlJR1p5YjIwZ2RtRnNkV1VnY0hKdmNDQnZjaUJzYVc1ckxseHVJQ0FnS2k5Y2JpQWdaMlYwVm1Gc2RXVTZJR1oxYm1OMGFXOXVLR2x1Y0hWMEtTQjdYRzRnSUNBZ2FXWWdLR2x1Y0hWMExuQnliM0J6TG5aaGJIVmxUR2x1YXlrZ2UxeHVJQ0FnSUNBZ1gyRnpjMlZ5ZEZaaGJIVmxUR2x1YXlocGJuQjFkQ2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhVzV3ZFhRdWNISnZjSE11ZG1Gc2RXVk1hVzVyTG5aaGJIVmxPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYVc1d2RYUXVjSEp2Y0hNdWRtRnNkV1U3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JEYjIxd2IyNWxiblI5SUdsdWNIVjBJRVp2Y20wZ1kyOXRjRzl1Wlc1MFhHNGdJQ0FxSUVCeVpYUjFjbTRnZXlwOUlHTjFjbkpsYm5RZ1kyaGxZMnRsWkNCemRHRjBkWE1nYjJZZ2RHaGxJR2x1Y0hWMElHVnBkR2hsY2lCbWNtOXRJR05vWldOclpXUWdjSEp2Y0Z4dUlDQWdLaUFnSUNBZ0lDQWdJQ0FnSUNCdmNpQnNhVzVyTGx4dUlDQWdLaTljYmlBZ1oyVjBRMmhsWTJ0bFpEb2dablZ1WTNScGIyNG9hVzV3ZFhRcElIdGNiaUFnSUNCcFppQW9hVzV3ZFhRdWNISnZjSE11WTJobFkydGxaRXhwYm1zcElIdGNiaUFnSUNBZ0lGOWhjM05sY25SRGFHVmphMlZrVEdsdWF5aHBibkIxZENrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYVc1d2RYUXVjSEp2Y0hNdVkyaGxZMnRsWkV4cGJtc3VkbUZzZFdVN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnBibkIxZEM1d2NtOXdjeTVqYUdWamEyVmtPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JwYm5CMWRDQkdiM0p0SUdOdmJYQnZibVZ1ZEZ4dUlDQWdLaUJBY21WMGRYSnVJSHRtZFc1amRHbHZibjBnWTJoaGJtZGxJR05oYkd4aVlXTnJJR1ZwZEdobGNpQm1jbTl0SUc5dVEyaGhibWRsSUhCeWIzQWdiM0lnYkdsdWF5NWNiaUFnSUNvdlhHNGdJR2RsZEU5dVEyaGhibWRsT2lCbWRXNWpkR2x2YmlocGJuQjFkQ2tnZTF4dUlDQWdJR2xtSUNocGJuQjFkQzV3Y205d2N5NTJZV3gxWlV4cGJtc3BJSHRjYmlBZ0lDQWdJRjloYzNObGNuUldZV3gxWlV4cGJtc29hVzV3ZFhRcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUY5b1lXNWtiR1ZNYVc1clpXUldZV3gxWlVOb1lXNW5aVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR2x1Y0hWMExuQnliM0J6TG1Ob1pXTnJaV1JNYVc1cktTQjdYRzRnSUNBZ0lDQmZZWE56WlhKMFEyaGxZMnRsWkV4cGJtc29hVzV3ZFhRcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUY5b1lXNWtiR1ZNYVc1clpXUkRhR1ZqYTBOb1lXNW5aVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdsdWNIVjBMbkJ5YjNCekxtOXVRMmhoYm1kbE8xeHVJQ0I5WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRXhwYm10bFpGWmhiSFZsVlhScGJITTdYRzRpWFgwPSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgTG9jYWxFdmVudFRyYXBNaXhpblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlclwiKTtcblxudmFyIGFjY3VtdWxhdGVJbnRvID0gcmVxdWlyZShcIi4vYWNjdW11bGF0ZUludG9cIik7XG52YXIgZm9yRWFjaEFjY3VtdWxhdGVkID0gcmVxdWlyZShcIi4vZm9yRWFjaEFjY3VtdWxhdGVkXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuZnVuY3Rpb24gcmVtb3ZlKGV2ZW50KSB7XG4gIGV2ZW50LnJlbW92ZSgpO1xufVxuXG52YXIgTG9jYWxFdmVudFRyYXBNaXhpbiA9IHtcbiAgdHJhcEJ1YmJsZWRFdmVudDpmdW5jdGlvbih0b3BMZXZlbFR5cGUsIGhhbmRsZXJCYXNlTmFtZSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQodGhpcy5pc01vdW50ZWQoKSwgJ011c3QgYmUgbW91bnRlZCB0byB0cmFwIGV2ZW50cycpIDogaW52YXJpYW50KHRoaXMuaXNNb3VudGVkKCkpKTtcbiAgICAvLyBJZiBhIGNvbXBvbmVudCByZW5kZXJzIHRvIG51bGwgb3IgaWYgYW5vdGhlciBjb21wb25lbnQgZmF0YWxzIGFuZCBjYXVzZXNcbiAgICAvLyB0aGUgc3RhdGUgb2YgdGhlIHRyZWUgdG8gYmUgY29ycnVwdGVkLCBgbm9kZWAgaGVyZSBjYW4gYmUgbnVsbC5cbiAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBub2RlLFxuICAgICAgJ0xvY2FsRXZlbnRUcmFwTWl4aW4udHJhcEJ1YmJsZWRFdmVudCguLi4pOiBSZXF1aXJlcyBub2RlIHRvIGJlIHJlbmRlcmVkLidcbiAgICApIDogaW52YXJpYW50KG5vZGUpKTtcbiAgICB2YXIgbGlzdGVuZXIgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIGhhbmRsZXJCYXNlTmFtZSxcbiAgICAgIG5vZGVcbiAgICApO1xuICAgIHRoaXMuX2xvY2FsRXZlbnRMaXN0ZW5lcnMgPVxuICAgICAgYWNjdW11bGF0ZUludG8odGhpcy5fbG9jYWxFdmVudExpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9LFxuXG4gIC8vIHRyYXBDYXB0dXJlZEV2ZW50IHdvdWxkIGxvb2sgbmVhcmx5IGlkZW50aWNhbC4gV2UgZG9uJ3QgaW1wbGVtZW50IHRoYXRcbiAgLy8gbWV0aG9kIGJlY2F1c2UgaXQgaXNuJ3QgY3VycmVudGx5IG5lZWRlZC5cblxuICBjb21wb25lbnRXaWxsVW5tb3VudDpmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbG9jYWxFdmVudExpc3RlbmVycykge1xuICAgICAgZm9yRWFjaEFjY3VtdWxhdGVkKHRoaXMuX2xvY2FsRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvY2FsRXZlbnRUcmFwTWl4aW47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZURzlqWVd4RmRtVnVkRlJ5WVhCTmFYaHBiaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREUwTFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVEc5allXeEZkbVZ1ZEZSeVlYQk5hWGhwYmx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFFuSnZkM05sY2tWMlpXNTBSVzFwZEhSbGNsd2lLVHRjYmx4dWRtRnlJR0ZqWTNWdGRXeGhkR1ZKYm5SdklEMGdjbVZ4ZFdseVpTaGNJaTR2WVdOamRXMTFiR0YwWlVsdWRHOWNJaWs3WEc1MllYSWdabTl5UldGamFFRmpZM1Z0ZFd4aGRHVmtJRDBnY21WeGRXbHlaU2hjSWk0dlptOXlSV0ZqYUVGalkzVnRkV3hoZEdWa1hDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1Wm5WdVkzUnBiMjRnY21WdGIzWmxLR1YyWlc1MEtTQjdYRzRnSUdWMlpXNTBMbkpsYlc5MlpTZ3BPMXh1ZlZ4dVhHNTJZWElnVEc5allXeEZkbVZ1ZEZSeVlYQk5hWGhwYmlBOUlIdGNiaUFnZEhKaGNFSjFZbUpzWldSRmRtVnVkRHBtZFc1amRHbHZiaWgwYjNCTVpYWmxiRlI1Y0dVc0lHaGhibVJzWlhKQ1lYTmxUbUZ0WlNrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvZEdocGN5NXBjMDF2ZFc1MFpXUW9LU3dnSjAxMWMzUWdZbVVnYlc5MWJuUmxaQ0IwYnlCMGNtRndJR1YyWlc1MGN5Y3BJRG9nYVc1MllYSnBZVzUwS0hSb2FYTXVhWE5OYjNWdWRHVmtLQ2twS1R0Y2JpQWdJQ0F2THlCSlppQmhJR052YlhCdmJtVnVkQ0J5Wlc1a1pYSnpJSFJ2SUc1MWJHd2diM0lnYVdZZ1lXNXZkR2hsY2lCamIyMXdiMjVsYm5RZ1ptRjBZV3h6SUdGdVpDQmpZWFZ6WlhOY2JpQWdJQ0F2THlCMGFHVWdjM1JoZEdVZ2IyWWdkR2hsSUhSeVpXVWdkRzhnWW1VZ1kyOXljblZ3ZEdWa0xDQmdibTlrWldBZ2FHVnlaU0JqWVc0Z1ltVWdiblZzYkM1Y2JpQWdJQ0IyWVhJZ2JtOWtaU0E5SUhSb2FYTXVaMlYwUkU5TlRtOWtaU2dwTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQnViMlJsTEZ4dUlDQWdJQ0FnSjB4dlkyRnNSWFpsYm5SVWNtRndUV2w0YVc0dWRISmhjRUoxWW1Kc1pXUkZkbVZ1ZENndUxpNHBPaUJTWlhGMWFYSmxjeUJ1YjJSbElIUnZJR0psSUhKbGJtUmxjbVZrTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHNXZaR1VwS1R0Y2JpQWdJQ0IyWVhJZ2JHbHpkR1Z1WlhJZ1BTQlNaV0ZqZEVKeWIzZHpaWEpGZG1WdWRFVnRhWFIwWlhJdWRISmhjRUoxWW1Kc1pXUkZkbVZ1ZENoY2JpQWdJQ0FnSUhSdmNFeGxkbVZzVkhsd1pTeGNiaUFnSUNBZ0lHaGhibVJzWlhKQ1lYTmxUbUZ0WlN4Y2JpQWdJQ0FnSUc1dlpHVmNiaUFnSUNBcE8xeHVJQ0FnSUhSb2FYTXVYMnh2WTJGc1JYWmxiblJNYVhOMFpXNWxjbk1nUFZ4dUlDQWdJQ0FnWVdOamRXMTFiR0YwWlVsdWRHOG9kR2hwY3k1ZmJHOWpZV3hGZG1WdWRFeHBjM1JsYm1WeWN5d2diR2x6ZEdWdVpYSXBPMXh1SUNCOUxGeHVYRzRnSUM4dklIUnlZWEJEWVhCMGRYSmxaRVYyWlc1MElIZHZkV3hrSUd4dmIyc2dibVZoY214NUlHbGtaVzUwYVdOaGJDNGdWMlVnWkc5dUozUWdhVzF3YkdWdFpXNTBJSFJvWVhSY2JpQWdMeThnYldWMGFHOWtJR0psWTJGMWMyVWdhWFFnYVhOdUozUWdZM1Z5Y21WdWRHeDVJRzVsWldSbFpDNWNibHh1SUNCamIyMXdiMjVsYm5SWGFXeHNWVzV0YjNWdWREcG1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWZiRzlqWVd4RmRtVnVkRXhwYzNSbGJtVnljeWtnZTF4dUlDQWdJQ0FnWm05eVJXRmphRUZqWTNWdGRXeGhkR1ZrS0hSb2FYTXVYMnh2WTJGc1JYWmxiblJNYVhOMFpXNWxjbk1zSUhKbGJXOTJaU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUV4dlkyRnNSWFpsYm5SVWNtRndUV2w0YVc0N1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW5cbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbi8qKlxuICogTW9iaWxlIFNhZmFyaSBkb2VzIG5vdCBmaXJlIHByb3Blcmx5IGJ1YmJsZSBjbGljayBldmVudHMgb24gbm9uLWludGVyYWN0aXZlXG4gKiBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3QgZmlyZS4gVGhlIHdvcmthcm91bmRcbiAqIGZvciB0aGlzIGJ1ZyBpbnZvbHZlcyBhdHRhY2hpbmcgYW4gZW1wdHkgY2xpY2sgbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGFydGljdWxhciBwbHVnaW4gd29ya3MgYXJvdW5kIHRoZSBidWcgYnkgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gKiBsaXN0ZW5lciBvbiBgdG91Y2hzdGFydGAgKHdoaWNoIGRvZXMgZmlyZSBvbiBldmVyeSBlbGVtZW50KS5cbiAqL1xudmFyIE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogbnVsbCxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gdG9wTGV2ZWxUeXBlcy50b3BUb3VjaFN0YXJ0KSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKHRhcmdldCAmJiAhdGFyZ2V0Lm9uY2xpY2spIHtcbiAgICAgICAgdGFyZ2V0Lm9uY2xpY2sgPSBlbXB0eUZ1bmN0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgT2JqZWN0LmFzc2lnblxuICovXG5cbi8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1vYmplY3QuYXNzaWduXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlcykge1xuICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIHRhcmdldCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQnKTtcbiAgfVxuXG4gIHZhciB0byA9IE9iamVjdCh0YXJnZXQpO1xuICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4gIGZvciAodmFyIG5leHRJbmRleCA9IDE7IG5leHRJbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IG5leHRJbmRleCsrKSB7XG4gICAgdmFyIG5leHRTb3VyY2UgPSBhcmd1bWVudHNbbmV4dEluZGV4XTtcbiAgICBpZiAobmV4dFNvdXJjZSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgZnJvbSA9IE9iamVjdChuZXh0U291cmNlKTtcblxuICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGFjY2Vzc29ycyBub3IgcHJveGllcy4gVGhlcmVmb3JlIHRoaXNcbiAgICAvLyBjb3B5IGNhbm5vdCB0aHJvdy4gSWYgd2UgZXZlciBzdXBwb3J0ZWQgdGhpcyB0aGVuIHdlIG11c3QgaGFuZGxlXG4gICAgLy8gZXhjZXB0aW9ucyBhbmQgc2lkZS1lZmZlY3RzLiBXZSBkb24ndCBzdXBwb3J0IHN5bWJvbHMgc28gdGhleSB3b24ndFxuICAgIC8vIGJlIHRyYW5zZmVycmVkLlxuXG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcbiAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBQb29sZWRDbGFzc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBTdGF0aWMgcG9vbGVycy4gU2V2ZXJhbCBjdXN0b20gdmVyc2lvbnMgZm9yIGVhY2ggcG90ZW50aWFsIG51bWJlciBvZlxuICogYXJndW1lbnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJpYyBwb29sZXIgaXMgZWFzeSB0byBpbXBsZW1lbnQsIGJ1dCB3b3VsZFxuICogcmVxdWlyZSBhY2Nlc3NpbmcgdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gSW4gZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJlZmVycyB0b1xuICogdGhlIENsYXNzIGl0c2VsZiwgbm90IGFuIGluc3RhbmNlLiBJZiBhbnkgb3RoZXJzIGFyZSBuZWVkZWQsIHNpbXBseSBhZGQgdGhlbVxuICogaGVyZSwgb3IgaW4gdGhlaXIgb3duIGZpbGVzLlxuICovXG52YXIgb25lQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihjb3B5RmllbGRzRnJvbSkge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBjb3B5RmllbGRzRnJvbSk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgS2xhc3MoY29weUZpZWxkc0Zyb20pO1xuICB9XG59O1xuXG52YXIgdHdvQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihhMSwgYTIpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpO1xuICB9XG59O1xuXG52YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uKGExLCBhMiwgYTMpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMyk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyLCBhMyk7XG4gIH1cbn07XG5cbnZhciBmaXZlQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbihhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMywgYTQsIGE1KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCwgYTUpO1xuICB9XG59O1xuXG52YXIgc3RhbmRhcmRSZWxlYXNlciA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcyxcbiAgICAnVHJ5aW5nIHRvIHJlbGVhc2UgYW4gaW5zdGFuY2UgaW50byBhIHBvb2wgb2YgYSBkaWZmZXJlbnQgdHlwZS4nXG4gICkgOiBpbnZhcmlhbnQoaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcykpO1xuICBpZiAoaW5zdGFuY2UuZGVzdHJ1Y3Rvcikge1xuICAgIGluc3RhbmNlLmRlc3RydWN0b3IoKTtcbiAgfVxuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCA8IEtsYXNzLnBvb2xTaXplKSB7XG4gICAgS2xhc3MuaW5zdGFuY2VQb29sLnB1c2goaW5zdGFuY2UpO1xuICB9XG59O1xuXG52YXIgREVGQVVMVF9QT09MX1NJWkUgPSAxMDtcbnZhciBERUZBVUxUX1BPT0xFUiA9IG9uZUFyZ3VtZW50UG9vbGVyO1xuXG4vKipcbiAqIEF1Z21lbnRzIGBDb3B5Q29uc3RydWN0b3JgIHRvIGJlIGEgcG9vbGFibGUgY2xhc3MsIGF1Z21lbnRpbmcgb25seSB0aGUgY2xhc3NcbiAqIGl0c2VsZiAoc3RhdGljYWxseSkgbm90IGFkZGluZyBhbnkgcHJvdG90eXBpY2FsIGZpZWxkcy4gQW55IENvcHlDb25zdHJ1Y3RvclxuICogeW91IGdpdmUgdGhpcyBtYXkgaGF2ZSBhIGBwb29sU2l6ZWAgcHJvcGVydHksIGFuZCB3aWxsIGxvb2sgZm9yIGFcbiAqIHByb3RvdHlwaWNhbCBgZGVzdHJ1Y3RvcmAgb24gaW5zdGFuY2VzIChvcHRpb25hbCkuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ29weUNvbnN0cnVjdG9yIENvbnN0cnVjdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVzZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb29sZXIgQ3VzdG9taXphYmxlIHBvb2xlci5cbiAqL1xudmFyIGFkZFBvb2xpbmdUbyA9IGZ1bmN0aW9uKENvcHlDb25zdHJ1Y3RvciwgcG9vbGVyKSB7XG4gIHZhciBOZXdLbGFzcyA9IENvcHlDb25zdHJ1Y3RvcjtcbiAgTmV3S2xhc3MuaW5zdGFuY2VQb29sID0gW107XG4gIE5ld0tsYXNzLmdldFBvb2xlZCA9IHBvb2xlciB8fCBERUZBVUxUX1BPT0xFUjtcbiAgaWYgKCFOZXdLbGFzcy5wb29sU2l6ZSkge1xuICAgIE5ld0tsYXNzLnBvb2xTaXplID0gREVGQVVMVF9QT09MX1NJWkU7XG4gIH1cbiAgTmV3S2xhc3MucmVsZWFzZSA9IHN0YW5kYXJkUmVsZWFzZXI7XG4gIHJldHVybiBOZXdLbGFzcztcbn07XG5cbnZhciBQb29sZWRDbGFzcyA9IHtcbiAgYWRkUG9vbGluZ1RvOiBhZGRQb29saW5nVG8sXG4gIG9uZUFyZ3VtZW50UG9vbGVyOiBvbmVBcmd1bWVudFBvb2xlcixcbiAgdHdvQXJndW1lbnRQb29sZXI6IHR3b0FyZ3VtZW50UG9vbGVyLFxuICB0aHJlZUFyZ3VtZW50UG9vbGVyOiB0aHJlZUFyZ3VtZW50UG9vbGVyLFxuICBmaXZlQXJndW1lbnRQb29sZXI6IGZpdmVBcmd1bWVudFBvb2xlclxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb29sZWRDbGFzcztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVHOXZiR1ZrUTJ4aGMzTXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlFiMjlzWldSRGJHRnpjMXh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JseHVMeW9xWEc0Z0tpQlRkR0YwYVdNZ2NHOXZiR1Z5Y3k0Z1UyVjJaWEpoYkNCamRYTjBiMjBnZG1WeWMybHZibk1nWm05eUlHVmhZMmdnY0c5MFpXNTBhV0ZzSUc1MWJXSmxjaUJ2Wmx4dUlDb2dZWEpuZFcxbGJuUnpMaUJCSUdOdmJYQnNaWFJsYkhrZ1oyVnVaWEpwWXlCd2IyOXNaWElnYVhNZ1pXRnplU0IwYnlCcGJYQnNaVzFsYm5Rc0lHSjFkQ0IzYjNWc1pGeHVJQ29nY21WeGRXbHlaU0JoWTJObGMzTnBibWNnZEdobElHQmhjbWQxYldWdWRITmdJRzlpYW1WamRDNGdTVzRnWldGamFDQnZaaUIwYUdWelpTd2dZSFJvYVhOZ0lISmxabVZ5Y3lCMGIxeHVJQ29nZEdobElFTnNZWE56SUdsMGMyVnNaaXdnYm05MElHRnVJR2x1YzNSaGJtTmxMaUJKWmlCaGJua2diM1JvWlhKeklHRnlaU0J1WldWa1pXUXNJSE5wYlhCc2VTQmhaR1FnZEdobGJWeHVJQ29nYUdWeVpTd2diM0lnYVc0Z2RHaGxhWElnYjNkdUlHWnBiR1Z6TGx4dUlDb3ZYRzUyWVhJZ2IyNWxRWEpuZFcxbGJuUlFiMjlzWlhJZ1BTQm1kVzVqZEdsdmJpaGpiM0I1Um1sbGJHUnpSbkp2YlNrZ2UxeHVJQ0IyWVhJZ1MyeGhjM01nUFNCMGFHbHpPMXh1SUNCcFppQW9TMnhoYzNNdWFXNXpkR0Z1WTJWUWIyOXNMbXhsYm1kMGFDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMFlXNWpaU0E5SUV0c1lYTnpMbWx1YzNSaGJtTmxVRzl2YkM1d2IzQW9LVHRjYmlBZ0lDQkxiR0Z6Y3k1allXeHNLR2x1YzNSaGJtTmxMQ0JqYjNCNVJtbGxiR1J6Um5KdmJTazdYRzRnSUNBZ2NtVjBkWEp1SUdsdWMzUmhibU5sTzF4dUlDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1MyeGhjM01vWTI5d2VVWnBaV3hrYzBaeWIyMHBPMXh1SUNCOVhHNTlPMXh1WEc1MllYSWdkSGR2UVhKbmRXMWxiblJRYjI5c1pYSWdQU0JtZFc1amRHbHZiaWhoTVN3Z1lUSXBJSHRjYmlBZ2RtRnlJRXRzWVhOeklEMGdkR2hwY3p0Y2JpQWdhV1lnS0V0c1lYTnpMbWx1YzNSaGJtTmxVRzl2YkM1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IyWVhJZ2FXNXpkR0Z1WTJVZ1BTQkxiR0Z6Y3k1cGJuTjBZVzVqWlZCdmIyd3VjRzl3S0NrN1hHNGdJQ0FnUzJ4aGMzTXVZMkZzYkNocGJuTjBZVzVqWlN3Z1lURXNJR0V5S1R0Y2JpQWdJQ0J5WlhSMWNtNGdhVzV6ZEdGdVkyVTdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJMYkdGemN5aGhNU3dnWVRJcE8xeHVJQ0I5WEc1OU8xeHVYRzUyWVhJZ2RHaHlaV1ZCY21kMWJXVnVkRkJ2YjJ4bGNpQTlJR1oxYm1OMGFXOXVLR0V4TENCaE1pd2dZVE1wSUh0Y2JpQWdkbUZ5SUV0c1lYTnpJRDBnZEdocGN6dGNiaUFnYVdZZ0tFdHNZWE56TG1sdWMzUmhibU5sVUc5dmJDNXNaVzVuZEdncElIdGNiaUFnSUNCMllYSWdhVzV6ZEdGdVkyVWdQU0JMYkdGemN5NXBibk4wWVc1alpWQnZiMnd1Y0c5d0tDazdYRzRnSUNBZ1MyeGhjM011WTJGc2JDaHBibk4wWVc1alpTd2dZVEVzSUdFeUxDQmhNeWs3WEc0Z0lDQWdjbVYwZFhKdUlHbHVjM1JoYm1ObE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dTMnhoYzNNb1lURXNJR0V5TENCaE15azdYRzRnSUgxY2JuMDdYRzVjYm5aaGNpQm1hWFpsUVhKbmRXMWxiblJRYjI5c1pYSWdQU0JtZFc1amRHbHZiaWhoTVN3Z1lUSXNJR0V6TENCaE5Dd2dZVFVwSUh0Y2JpQWdkbUZ5SUV0c1lYTnpJRDBnZEdocGN6dGNiaUFnYVdZZ0tFdHNZWE56TG1sdWMzUmhibU5sVUc5dmJDNXNaVzVuZEdncElIdGNiaUFnSUNCMllYSWdhVzV6ZEdGdVkyVWdQU0JMYkdGemN5NXBibk4wWVc1alpWQnZiMnd1Y0c5d0tDazdYRzRnSUNBZ1MyeGhjM011WTJGc2JDaHBibk4wWVc1alpTd2dZVEVzSUdFeUxDQmhNeXdnWVRRc0lHRTFLVHRjYmlBZ0lDQnlaWFIxY200Z2FXNXpkR0Z1WTJVN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QkxiR0Z6Y3loaE1Td2dZVElzSUdFekxDQmhOQ3dnWVRVcE8xeHVJQ0I5WEc1OU8xeHVYRzUyWVhJZ2MzUmhibVJoY21SU1pXeGxZWE5sY2lBOUlHWjFibU4wYVc5dUtHbHVjM1JoYm1ObEtTQjdYRzRnSUhaaGNpQkxiR0Z6Y3lBOUlIUm9hWE03WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnYVc1emRHRnVZMlVnYVc1emRHRnVZMlZ2WmlCTGJHRnpjeXhjYmlBZ0lDQW5WSEo1YVc1bklIUnZJSEpsYkdWaGMyVWdZVzRnYVc1emRHRnVZMlVnYVc1MGJ5QmhJSEJ2YjJ3Z2IyWWdZU0JrYVdabVpYSmxiblFnZEhsd1pTNG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9hVzV6ZEdGdVkyVWdhVzV6ZEdGdVkyVnZaaUJMYkdGemN5a3BPMXh1SUNCcFppQW9hVzV6ZEdGdVkyVXVaR1Z6ZEhKMVkzUnZjaWtnZTF4dUlDQWdJR2x1YzNSaGJtTmxMbVJsYzNSeWRXTjBiM0lvS1R0Y2JpQWdmVnh1SUNCcFppQW9TMnhoYzNNdWFXNXpkR0Z1WTJWUWIyOXNMbXhsYm1kMGFDQThJRXRzWVhOekxuQnZiMnhUYVhwbEtTQjdYRzRnSUNBZ1MyeGhjM011YVc1emRHRnVZMlZRYjI5c0xuQjFjMmdvYVc1emRHRnVZMlVwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnUkVWR1FWVk1WRjlRVDA5TVgxTkpXa1VnUFNBeE1EdGNiblpoY2lCRVJVWkJWVXhVWDFCUFQweEZVaUE5SUc5dVpVRnlaM1Z0Wlc1MFVHOXZiR1Z5TzF4dVhHNHZLaXBjYmlBcUlFRjFaMjFsYm5SeklHQkRiM0I1UTI5dWMzUnlkV04wYjNKZ0lIUnZJR0psSUdFZ2NHOXZiR0ZpYkdVZ1kyeGhjM01zSUdGMVoyMWxiblJwYm1jZ2IyNXNlU0IwYUdVZ1kyeGhjM05jYmlBcUlHbDBjMlZzWmlBb2MzUmhkR2xqWVd4c2VTa2dibTkwSUdGa1pHbHVaeUJoYm5rZ2NISnZkRzkwZVhCcFkyRnNJR1pwWld4a2N5NGdRVzU1SUVOdmNIbERiMjV6ZEhKMVkzUnZjbHh1SUNvZ2VXOTFJR2RwZG1VZ2RHaHBjeUJ0WVhrZ2FHRjJaU0JoSUdCd2IyOXNVMmw2WldBZ2NISnZjR1Z5ZEhrc0lHRnVaQ0IzYVd4c0lHeHZiMnNnWm05eUlHRmNiaUFxSUhCeWIzUnZkSGx3YVdOaGJDQmdaR1Z6ZEhKMVkzUnZjbUFnYjI0Z2FXNXpkR0Z1WTJWeklDaHZjSFJwYjI1aGJDa3VYRzRnS2x4dUlDb2dRSEJoY21GdElIdEdkVzVqZEdsdmJuMGdRMjl3ZVVOdmJuTjBjblZqZEc5eUlFTnZibk4wY25WamRHOXlJSFJvWVhRZ1kyRnVJR0psSUhWelpXUWdkRzhnY21WelpYUXVYRzRnS2lCQWNHRnlZVzBnZTBaMWJtTjBhVzl1ZlNCd2IyOXNaWElnUTNWemRHOXRhWHBoWW14bElIQnZiMnhsY2k1Y2JpQXFMMXh1ZG1GeUlHRmtaRkJ2YjJ4cGJtZFVieUE5SUdaMWJtTjBhVzl1S0VOdmNIbERiMjV6ZEhKMVkzUnZjaXdnY0c5dmJHVnlLU0I3WEc0Z0lIWmhjaUJPWlhkTGJHRnpjeUE5SUVOdmNIbERiMjV6ZEhKMVkzUnZjanRjYmlBZ1RtVjNTMnhoYzNNdWFXNXpkR0Z1WTJWUWIyOXNJRDBnVzEwN1hHNGdJRTVsZDB0c1lYTnpMbWRsZEZCdmIyeGxaQ0E5SUhCdmIyeGxjaUI4ZkNCRVJVWkJWVXhVWDFCUFQweEZVanRjYmlBZ2FXWWdLQ0ZPWlhkTGJHRnpjeTV3YjI5c1UybDZaU2tnZTF4dUlDQWdJRTVsZDB0c1lYTnpMbkJ2YjJ4VGFYcGxJRDBnUkVWR1FWVk1WRjlRVDA5TVgxTkpXa1U3WEc0Z0lIMWNiaUFnVG1WM1MyeGhjM011Y21Wc1pXRnpaU0E5SUhOMFlXNWtZWEprVW1Wc1pXRnpaWEk3WEc0Z0lISmxkSFZ5YmlCT1pYZExiR0Z6Y3p0Y2JuMDdYRzVjYm5aaGNpQlFiMjlzWldSRGJHRnpjeUE5SUh0Y2JpQWdZV1JrVUc5dmJHbHVaMVJ2T2lCaFpHUlFiMjlzYVc1blZHOHNYRzRnSUc5dVpVRnlaM1Z0Wlc1MFVHOXZiR1Z5T2lCdmJtVkJjbWQxYldWdWRGQnZiMnhsY2l4Y2JpQWdkSGR2UVhKbmRXMWxiblJRYjI5c1pYSTZJSFIzYjBGeVozVnRaVzUwVUc5dmJHVnlMRnh1SUNCMGFISmxaVUZ5WjNWdFpXNTBVRzl2YkdWeU9pQjBhSEpsWlVGeVozVnRaVzUwVUc5dmJHVnlMRnh1SUNCbWFYWmxRWEpuZFcxbGJuUlFiMjlzWlhJNklHWnBkbVZCY21kMWJXVnVkRkJ2YjJ4bGNseHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCUWIyOXNaV1JEYkdGemN6dGNiaUpkZlE9PSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RcbiAqL1xuXG4vKiBnbG9iYWxzIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UGx1Z2luVXRpbHMgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpblV0aWxzXCIpO1xudmFyIFJlYWN0Q2hpbGRyZW4gPSByZXF1aXJlKFwiLi9SZWFjdENoaWxkcmVuXCIpO1xudmFyIFJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RDb21wb25lbnRcIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RDb250ZXh0ID0gcmVxdWlyZShcIi4vUmVhY3RDb250ZXh0XCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcbnZhciBSZWFjdERPTSA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NXCIpO1xudmFyIFJlYWN0RE9NVGV4dENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NVGV4dENvbXBvbmVudFwiKTtcbnZhciBSZWFjdERlZmF1bHRJbmplY3Rpb24gPSByZXF1aXJlKFwiLi9SZWFjdERlZmF1bHRJbmplY3Rpb25cIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdFBlcmZcIik7XG52YXIgUmVhY3RQcm9wVHlwZXMgPSByZXF1aXJlKFwiLi9SZWFjdFByb3BUeXBlc1wiKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdFJlY29uY2lsZXJcIik7XG52YXIgUmVhY3RTZXJ2ZXJSZW5kZXJpbmcgPSByZXF1aXJlKFwiLi9SZWFjdFNlcnZlclJlbmRlcmluZ1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZmluZERPTU5vZGUgPSByZXF1aXJlKFwiLi9maW5kRE9NTm9kZVwiKTtcbnZhciBvbmx5Q2hpbGQgPSByZXF1aXJlKFwiLi9vbmx5Q2hpbGRcIik7XG5cblJlYWN0RGVmYXVsdEluamVjdGlvbi5pbmplY3QoKTtcblxudmFyIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3Rvcnk7XG52YXIgY2xvbmVFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudDtcblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICBjcmVhdGVFbGVtZW50ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUVsZW1lbnQ7XG4gIGNyZWF0ZUZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRmFjdG9yeTtcbiAgY2xvbmVFbGVtZW50ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNsb25lRWxlbWVudDtcbn1cblxudmFyIHJlbmRlciA9IFJlYWN0UGVyZi5tZWFzdXJlKCdSZWFjdCcsICdyZW5kZXInLCBSZWFjdE1vdW50LnJlbmRlcik7XG5cbnZhciBSZWFjdCA9IHtcbiAgQ2hpbGRyZW46IHtcbiAgICBtYXA6IFJlYWN0Q2hpbGRyZW4ubWFwLFxuICAgIGZvckVhY2g6IFJlYWN0Q2hpbGRyZW4uZm9yRWFjaCxcbiAgICBjb3VudDogUmVhY3RDaGlsZHJlbi5jb3VudCxcbiAgICBvbmx5OiBvbmx5Q2hpbGRcbiAgfSxcbiAgQ29tcG9uZW50OiBSZWFjdENvbXBvbmVudCxcbiAgRE9NOiBSZWFjdERPTSxcbiAgUHJvcFR5cGVzOiBSZWFjdFByb3BUeXBlcyxcbiAgaW5pdGlhbGl6ZVRvdWNoRXZlbnRzOiBmdW5jdGlvbihzaG91bGRVc2VUb3VjaCkge1xuICAgIEV2ZW50UGx1Z2luVXRpbHMudXNlVG91Y2hFdmVudHMgPSBzaG91bGRVc2VUb3VjaDtcbiAgfSxcbiAgY3JlYXRlQ2xhc3M6IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3MsXG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsXG4gIGNsb25lRWxlbWVudDogY2xvbmVFbGVtZW50LFxuICBjcmVhdGVGYWN0b3J5OiBjcmVhdGVGYWN0b3J5LFxuICBjcmVhdGVNaXhpbjogZnVuY3Rpb24obWl4aW4pIHtcbiAgICAvLyBDdXJyZW50bHkgYSBub29wLiBXaWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgYW5kIHRyYWNlIG1peGlucy5cbiAgICByZXR1cm4gbWl4aW47XG4gIH0sXG4gIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudDogUmVhY3RNb3VudC5jb25zdHJ1Y3RBbmRSZW5kZXJDb21wb25lbnQsXG4gIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudEJ5SUQ6IFJlYWN0TW91bnQuY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50QnlJRCxcbiAgZmluZERPTU5vZGU6IGZpbmRET01Ob2RlLFxuICByZW5kZXI6IHJlbmRlcixcbiAgcmVuZGVyVG9TdHJpbmc6IFJlYWN0U2VydmVyUmVuZGVyaW5nLnJlbmRlclRvU3RyaW5nLFxuICByZW5kZXJUb1N0YXRpY01hcmt1cDogUmVhY3RTZXJ2ZXJSZW5kZXJpbmcucmVuZGVyVG9TdGF0aWNNYXJrdXAsXG4gIHVubW91bnRDb21wb25lbnRBdE5vZGU6IFJlYWN0TW91bnQudW5tb3VudENvbXBvbmVudEF0Tm9kZSxcbiAgaXNWYWxpZEVsZW1lbnQ6IFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCxcbiAgd2l0aENvbnRleHQ6IFJlYWN0Q29udGV4dC53aXRoQ29udGV4dCxcblxuICAvLyBIb29rIGZvciBKU1ggc3ByZWFkLCBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcgZWxzZS5cbiAgX19zcHJlYWQ6IGFzc2lnblxufTtcblxuLy8gSW5qZWN0IHRoZSBydW50aW1lIGludG8gYSBkZXZ0b29scyBnbG9iYWwgaG9vayByZWdhcmRsZXNzIG9mIGJyb3dzZXIuXG4vLyBBbGxvd3MgZm9yIGRlYnVnZ2luZyB3aGVuIHRoZSBob29rIGlzIGluamVjdGVkIG9uIHRoZSBwYWdlLlxuaWYgKFxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJyAmJlxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmluamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uaW5qZWN0KHtcbiAgICBDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyLFxuICAgIEluc3RhbmNlSGFuZGxlczogUmVhY3RJbnN0YW5jZUhhbmRsZXMsXG4gICAgTW91bnQ6IFJlYWN0TW91bnQsXG4gICAgUmVjb25jaWxlcjogUmVhY3RSZWNvbmNpbGVyLFxuICAgIFRleHRDb21wb25lbnQ6IFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICB9KTtcbn1cblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICB2YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcbiAgaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiB3aW5kb3cudG9wID09PSB3aW5kb3cuc2VsZikge1xuXG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lLCBsb29rIGZvciB0aGUgZGV2dG9vbHMgbWFya2VyIGFuZCBwcm92aWRlIGEgZG93bmxvYWRcbiAgICAvLyBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSkge1xuICAgICAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICAgICAgJ0Rvd25sb2FkIHRoZSBSZWFjdCBEZXZUb29scyBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZmIubWUvcmVhY3QtZGV2dG9vbHMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGV4cGVjdGVkRmVhdHVyZXMgPSBbXG4gICAgICAvLyBzaGltc1xuICAgICAgQXJyYXkuaXNBcnJheSxcbiAgICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeSxcbiAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLFxuICAgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YsXG4gICAgICBBcnJheS5wcm90b3R5cGUubWFwLFxuICAgICAgRGF0ZS5ub3csXG4gICAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCxcbiAgICAgIE9iamVjdC5rZXlzLFxuICAgICAgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCxcbiAgICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSxcblxuICAgICAgLy8gc2hhbXNcbiAgICAgIE9iamVjdC5jcmVhdGUsXG4gICAgICBPYmplY3QuZnJlZXplXG4gICAgXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRGZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFleHBlY3RlZEZlYXR1cmVzW2ldKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ09uZSBvciBtb3JlIEVTNSBzaGltL3NoYW1zIGV4cGVjdGVkIGJ5IFJlYWN0IGFyZSBub3QgYXZhaWxhYmxlOiAnICtcbiAgICAgICAgICAnaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLXBvbHlmaWxscydcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlYWN0LnZlcnNpb24gPSAnMC4xMy4zJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1F1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRGeHVJQ292WEc1Y2JpOHFJR2RzYjJKaGJITWdYMTlTUlVGRFZGOUVSVlpVVDA5TVUxOUhURTlDUVV4ZlNFOVBTMTlmS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnUlhabGJuUlFiSFZuYVc1VmRHbHNjeUE5SUhKbGNYVnBjbVVvWENJdUwwVjJaVzUwVUd4MVoybHVWWFJwYkhOY0lpazdYRzUyWVhJZ1VtVmhZM1JEYUdsc1pISmxiaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUTJocGJHUnlaVzVjSWlrN1hHNTJZWElnVW1WaFkzUkRiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU52YlhCdmJtVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFTnNZWE56SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGJHRnpjMXdpS1R0Y2JuWmhjaUJTWldGamRFTnZiblJsZUhRZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiblJsZUhSY0lpazdYRzUyWVhJZ1VtVmhZM1JEZFhKeVpXNTBUM2R1WlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTjFjbkpsYm5SUGQyNWxjbHdpS1R0Y2JuWmhjaUJTWldGamRFVnNaVzFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnNaVzFsYm5SY0lpazdYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlYQ0lwTzF4dWRtRnlJRkpsWVdOMFJFOU5JRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JFVDAxY0lpazdYRzUyWVhJZ1VtVmhZM1JFVDAxVVpYaDBRMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JFVDAxVVpYaDBRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJHVm1ZWFZzZEVsdWFtVmpkR2x2YmlBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJHVm1ZWFZzZEVsdWFtVmpkR2x2Ymx3aUtUdGNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWelhDSXBPMXh1ZG1GeUlGSmxZV04wVFc5MWJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTF2ZFc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wVUdWeVppQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVR1Z5Wmx3aUtUdGNiblpoY2lCU1pXRmpkRkJ5YjNCVWVYQmxjeUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVUhKdmNGUjVjR1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBVbVZqYjI1amFXeGxjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVW1WamIyNWphV3hsY2x3aUtUdGNiblpoY2lCU1pXRmpkRk5sY25abGNsSmxibVJsY21sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVMlZ5ZG1WeVVtVnVaR1Z5YVc1blhDSXBPMXh1WEc1MllYSWdZWE56YVdkdUlEMGdjbVZ4ZFdseVpTaGNJaTR2VDJKcVpXTjBMbUZ6YzJsbmJsd2lLVHRjYm5aaGNpQm1hVzVrUkU5TlRtOWtaU0E5SUhKbGNYVnBjbVVvWENJdUwyWnBibVJFVDAxT2IyUmxYQ0lwTzF4dWRtRnlJRzl1YkhsRGFHbHNaQ0E5SUhKbGNYVnBjbVVvWENJdUwyOXViSGxEYUdsc1pGd2lLVHRjYmx4dVVtVmhZM1JFWldaaGRXeDBTVzVxWldOMGFXOXVMbWx1YW1WamRDZ3BPMXh1WEc1MllYSWdZM0psWVhSbFJXeGxiV1Z1ZENBOUlGSmxZV04wUld4bGJXVnVkQzVqY21WaGRHVkZiR1Z0Wlc1ME8xeHVkbUZ5SUdOeVpXRjBaVVpoWTNSdmNua2dQU0JTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUm1GamRHOXllVHRjYm5aaGNpQmpiRzl1WlVWc1pXMWxiblFnUFNCU1pXRmpkRVZzWlcxbGJuUXVZMnh2Ym1WRmJHVnRaVzUwTzF4dVhHNXBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUdOeVpXRjBaVVZzWlcxbGJuUWdQU0JTWldGamRFVnNaVzFsYm5SV1lXeHBaR0YwYjNJdVkzSmxZWFJsUld4bGJXVnVkRHRjYmlBZ1kzSmxZWFJsUm1GamRHOXllU0E5SUZKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNpNWpjbVZoZEdWR1lXTjBiM0o1TzF4dUlDQmpiRzl1WlVWc1pXMWxiblFnUFNCU1pXRmpkRVZzWlcxbGJuUldZV3hwWkdGMGIzSXVZMnh2Ym1WRmJHVnRaVzUwTzF4dWZWeHVYRzUyWVhJZ2NtVnVaR1Z5SUQwZ1VtVmhZM1JRWlhKbUxtMWxZWE4xY21Vb0oxSmxZV04wSnl3Z0ozSmxibVJsY2ljc0lGSmxZV04wVFc5MWJuUXVjbVZ1WkdWeUtUdGNibHh1ZG1GeUlGSmxZV04wSUQwZ2UxeHVJQ0JEYUdsc1pISmxiam9nZTF4dUlDQWdJRzFoY0RvZ1VtVmhZM1JEYUdsc1pISmxiaTV0WVhBc1hHNGdJQ0FnWm05eVJXRmphRG9nVW1WaFkzUkRhR2xzWkhKbGJpNW1iM0pGWVdOb0xGeHVJQ0FnSUdOdmRXNTBPaUJTWldGamRFTm9hV3hrY21WdUxtTnZkVzUwTEZ4dUlDQWdJRzl1YkhrNklHOXViSGxEYUdsc1pGeHVJQ0I5TEZ4dUlDQkRiMjF3YjI1bGJuUTZJRkpsWVdOMFEyOXRjRzl1Wlc1MExGeHVJQ0JFVDAwNklGSmxZV04wUkU5TkxGeHVJQ0JRY205d1ZIbHdaWE02SUZKbFlXTjBVSEp2Y0ZSNWNHVnpMRnh1SUNCcGJtbDBhV0ZzYVhwbFZHOTFZMmhGZG1WdWRITTZJR1oxYm1OMGFXOXVLSE5vYjNWc1pGVnpaVlJ2ZFdOb0tTQjdYRzRnSUNBZ1JYWmxiblJRYkhWbmFXNVZkR2xzY3k1MWMyVlViM1ZqYUVWMlpXNTBjeUE5SUhOb2IzVnNaRlZ6WlZSdmRXTm9PMXh1SUNCOUxGeHVJQ0JqY21WaGRHVkRiR0Z6Y3pvZ1VtVmhZM1JEYkdGemN5NWpjbVZoZEdWRGJHRnpjeXhjYmlBZ1kzSmxZWFJsUld4bGJXVnVkRG9nWTNKbFlYUmxSV3hsYldWdWRDeGNiaUFnWTJ4dmJtVkZiR1Z0Wlc1ME9pQmpiRzl1WlVWc1pXMWxiblFzWEc0Z0lHTnlaV0YwWlVaaFkzUnZjbms2SUdOeVpXRjBaVVpoWTNSdmNua3NYRzRnSUdOeVpXRjBaVTFwZUdsdU9pQm1kVzVqZEdsdmJpaHRhWGhwYmlrZ2UxeHVJQ0FnSUM4dklFTjFjbkpsYm5Sc2VTQmhJRzV2YjNBdUlGZHBiR3dnWW1VZ2RYTmxaQ0IwYnlCMllXeHBaR0YwWlNCaGJtUWdkSEpoWTJVZ2JXbDRhVzV6TGx4dUlDQWdJSEpsZEhWeWJpQnRhWGhwYmp0Y2JpQWdmU3hjYmlBZ1kyOXVjM1J5ZFdOMFFXNWtVbVZ1WkdWeVEyOXRjRzl1Wlc1ME9pQlNaV0ZqZEUxdmRXNTBMbU52Ym5OMGNuVmpkRUZ1WkZKbGJtUmxja052YlhCdmJtVnVkQ3hjYmlBZ1kyOXVjM1J5ZFdOMFFXNWtVbVZ1WkdWeVEyOXRjRzl1Wlc1MFFubEpSRG9nVW1WaFkzUk5iM1Z1ZEM1amIyNXpkSEoxWTNSQmJtUlNaVzVrWlhKRGIyMXdiMjVsYm5SQ2VVbEVMRnh1SUNCbWFXNWtSRTlOVG05a1pUb2dabWx1WkVSUFRVNXZaR1VzWEc0Z0lISmxibVJsY2pvZ2NtVnVaR1Z5TEZ4dUlDQnlaVzVrWlhKVWIxTjBjbWx1WnpvZ1VtVmhZM1JUWlhKMlpYSlNaVzVrWlhKcGJtY3VjbVZ1WkdWeVZHOVRkSEpwYm1jc1hHNGdJSEpsYm1SbGNsUnZVM1JoZEdsalRXRnlhM1Z3T2lCU1pXRmpkRk5sY25abGNsSmxibVJsY21sdVp5NXlaVzVrWlhKVWIxTjBZWFJwWTAxaGNtdDFjQ3hjYmlBZ2RXNXRiM1Z1ZEVOdmJYQnZibVZ1ZEVGMFRtOWtaVG9nVW1WaFkzUk5iM1Z1ZEM1MWJtMXZkVzUwUTI5dGNHOXVaVzUwUVhST2IyUmxMRnh1SUNCcGMxWmhiR2xrUld4bGJXVnVkRG9nVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwTEZ4dUlDQjNhWFJvUTI5dWRHVjRkRG9nVW1WaFkzUkRiMjUwWlhoMExuZHBkR2hEYjI1MFpYaDBMRnh1WEc0Z0lDOHZJRWh2YjJzZ1ptOXlJRXBUV0NCemNISmxZV1FzSUdSdmJpZDBJSFZ6WlNCMGFHbHpJR1p2Y2lCaGJubDBhR2x1WnlCbGJITmxMbHh1SUNCZlgzTndjbVZoWkRvZ1lYTnphV2R1WEc1OU8xeHVYRzR2THlCSmJtcGxZM1FnZEdobElISjFiblJwYldVZ2FXNTBieUJoSUdSbGRuUnZiMnh6SUdkc2IySmhiQ0JvYjI5cklISmxaMkZ5Wkd4bGMzTWdiMllnWW5KdmQzTmxjaTVjYmk4dklFRnNiRzkzY3lCbWIzSWdaR1ZpZFdkbmFXNW5JSGRvWlc0Z2RHaGxJR2h2YjJzZ2FYTWdhVzVxWldOMFpXUWdiMjRnZEdobElIQmhaMlV1WEc1cFppQW9YRzRnSUhSNWNHVnZaaUJmWDFKRlFVTlVYMFJGVmxSUFQweFRYMGRNVDBKQlRGOUlUMDlMWDE4Z0lUMDlJQ2QxYm1SbFptbHVaV1FuSUNZbVhHNGdJSFI1Y0dWdlppQmZYMUpGUVVOVVgwUkZWbFJQVDB4VFgwZE1UMEpCVEY5SVQwOUxYMTh1YVc1cVpXTjBJRDA5UFNBblpuVnVZM1JwYjI0bktTQjdYRzRnSUY5ZlVrVkJRMVJmUkVWV1ZFOVBURk5mUjB4UFFrRk1YMGhQVDB0Zlh5NXBibXBsWTNRb2UxeHVJQ0FnSUVOMWNuSmxiblJQZDI1bGNqb2dVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSXNYRzRnSUNBZ1NXNXpkR0Z1WTJWSVlXNWtiR1Z6T2lCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5eGNiaUFnSUNCTmIzVnVkRG9nVW1WaFkzUk5iM1Z1ZEN4Y2JpQWdJQ0JTWldOdmJtTnBiR1Z5T2lCU1pXRmpkRkpsWTI5dVkybHNaWElzWEc0Z0lDQWdWR1Y0ZEVOdmJYQnZibVZ1ZERvZ1VtVmhZM1JFVDAxVVpYaDBRMjl0Y0c5dVpXNTBYRzRnSUgwcE8xeHVmVnh1WEc1cFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJSFpoY2lCRmVHVmpkWFJwYjI1RmJuWnBjbTl1YldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDBWNFpXTjFkR2x2YmtWdWRtbHliMjV0Wlc1MFhDSXBPMXh1SUNCcFppQW9SWGhsWTNWMGFXOXVSVzUyYVhKdmJtMWxiblF1WTJGdVZYTmxSRTlOSUNZbUlIZHBibVJ2ZHk1MGIzQWdQVDA5SUhkcGJtUnZkeTV6Wld4bUtTQjdYRzVjYmlBZ0lDQXZMeUJKWmlCM1pTZHlaU0JwYmlCRGFISnZiV1VzSUd4dmIyc2dabTl5SUhSb1pTQmtaWFowYjI5c2N5QnRZWEpyWlhJZ1lXNWtJSEJ5YjNacFpHVWdZU0JrYjNkdWJHOWhaRnh1SUNBZ0lDOHZJR3hwYm1zZ2FXWWdibTkwSUdsdWMzUmhiR3hsWkM1Y2JpQWdJQ0JwWmlBb2JtRjJhV2RoZEc5eUxuVnpaWEpCWjJWdWRDNXBibVJsZUU5bUtDZERhSEp2YldVbktTQStJQzB4S1NCN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlGOWZVa1ZCUTFSZlJFVldWRTlQVEZOZlIweFBRa0ZNWDBoUFQwdGZYeUE5UFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVrWldKMVp5aGNiaUFnSUNBZ0lDQWdJQ0FuUkc5M2JteHZZV1FnZEdobElGSmxZV04wSUVSbGRsUnZiMnh6SUdadmNpQmhJR0psZEhSbGNpQmtaWFpsYkc5d2JXVnVkQ0JsZUhCbGNtbGxibU5sT2lBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuYUhSMGNITTZMeTltWWk1dFpTOXlaV0ZqZEMxa1pYWjBiMjlzY3lkY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdaWGh3WldOMFpXUkdaV0YwZFhKbGN5QTlJRnRjYmlBZ0lDQWdJQzh2SUhOb2FXMXpYRzRnSUNBZ0lDQkJjbkpoZVM1cGMwRnljbUY1TEZ4dUlDQWdJQ0FnUVhKeVlYa3VjSEp2ZEc5MGVYQmxMbVYyWlhKNUxGeHVJQ0FnSUNBZ1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG1admNrVmhZMmdzWEc0Z0lDQWdJQ0JCY25KaGVTNXdjbTkwYjNSNWNHVXVhVzVrWlhoUFppeGNiaUFnSUNBZ0lFRnljbUY1TG5CeWIzUnZkSGx3WlM1dFlYQXNYRzRnSUNBZ0lDQkVZWFJsTG01dmR5eGNiaUFnSUNBZ0lFWjFibU4wYVc5dUxuQnliM1J2ZEhsd1pTNWlhVzVrTEZ4dUlDQWdJQ0FnVDJKcVpXTjBMbXRsZVhNc1hHNGdJQ0FnSUNCVGRISnBibWN1Y0hKdmRHOTBlWEJsTG5Od2JHbDBMRnh1SUNBZ0lDQWdVM1J5YVc1bkxuQnliM1J2ZEhsd1pTNTBjbWx0TEZ4dVhHNGdJQ0FnSUNBdkx5QnphR0Z0YzF4dUlDQWdJQ0FnVDJKcVpXTjBMbU55WldGMFpTeGNiaUFnSUNBZ0lFOWlhbVZqZEM1bWNtVmxlbVZjYmlBZ0lDQmRPMXh1WEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0JsZUhCbFkzUmxaRVpsWVhSMWNtVnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCcFppQW9JV1Y0Y0dWamRHVmtSbVZoZEhWeVpYTmJhVjBwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhjYmlBZ0lDQWdJQ0FnSUNBblQyNWxJRzl5SUcxdmNtVWdSVk0xSUhOb2FXMHZjMmhoYlhNZ1pYaHdaV04wWldRZ1lua2dVbVZoWTNRZ1lYSmxJRzV2ZENCaGRtRnBiR0ZpYkdVNklDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkb2RIUndjem92TDJaaUxtMWxMM0psWVdOMExYZGhjbTVwYm1jdGNHOXNlV1pwYkd4ekoxeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYm4xY2JseHVVbVZoWTNRdWRtVnljMmx2YmlBOUlDY3dMakV6TGpNbk8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOME8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZmluZERPTU5vZGUgPSByZXF1aXJlKFwiLi9maW5kRE9NTm9kZVwiKTtcblxudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0ge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgRE9NIG5vZGUgcmVuZGVyZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IFRoZSByb290IG5vZGUgb2YgdGhpcyBjb21wb25lbnQuXG4gICAqIEBmaW5hbFxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBnZXRET01Ob2RlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmluZERPTU5vZGUodGhpcyk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5SZWdpc3RyeVwiKTtcbnZhciBSZWFjdEV2ZW50RW1pdHRlck1peGluID0gcmVxdWlyZShcIi4vUmVhY3RFdmVudEVtaXR0ZXJNaXhpblwiKTtcbnZhciBWaWV3cG9ydE1ldHJpY3MgPSByZXF1aXJlKFwiLi9WaWV3cG9ydE1ldHJpY3NcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKFwiLi9pc0V2ZW50U3VwcG9ydGVkXCIpO1xuXG4vKipcbiAqIFN1bW1hcnkgb2YgYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgZXZlbnQgaGFuZGxpbmc6XG4gKlxuICogIC0gVG9wLWxldmVsIGRlbGVnYXRpb24gaXMgdXNlZCB0byB0cmFwIG1vc3QgbmF0aXZlIGJyb3dzZXIgZXZlbnRzLiBUaGlzXG4gKiAgICBtYXkgb25seSBvY2N1ciBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZlxuICogICAgUmVhY3RFdmVudExpc3RlbmVyLCB3aGljaCBpcyBpbmplY3RlZCBhbmQgY2FuIHRoZXJlZm9yZSBzdXBwb3J0IHBsdWdnYWJsZVxuICogICAgZXZlbnQgc291cmNlcy4gVGhpcyBpcyB0aGUgb25seSB3b3JrIHRoYXQgb2NjdXJzIGluIHRoZSBtYWluIHRocmVhZC5cbiAqXG4gKiAgLSBXZSBub3JtYWxpemUgYW5kIGRlLWR1cGxpY2F0ZSBldmVudHMgdG8gYWNjb3VudCBmb3IgYnJvd3NlciBxdWlya3MuIFRoaXNcbiAqICAgIG1heSBiZSBkb25lIGluIHRoZSB3b3JrZXIgdGhyZWFkLlxuICpcbiAqICAtIEZvcndhcmQgdGhlc2UgbmF0aXZlIGV2ZW50cyAod2l0aCB0aGUgYXNzb2NpYXRlZCB0b3AtbGV2ZWwgdHlwZSB1c2VkIHRvXG4gKiAgICB0cmFwIGl0KSB0byBgRXZlbnRQbHVnaW5IdWJgLCB3aGljaCBpbiB0dXJuIHdpbGwgYXNrIHBsdWdpbnMgaWYgdGhleSB3YW50XG4gKiAgICB0byBleHRyYWN0IGFueSBzeW50aGV0aWMgZXZlbnRzLlxuICpcbiAqICAtIFRoZSBgRXZlbnRQbHVnaW5IdWJgIHdpbGwgdGhlbiBwcm9jZXNzIGVhY2ggZXZlbnQgYnkgYW5ub3RhdGluZyB0aGVtIHdpdGhcbiAqICAgIFwiZGlzcGF0Y2hlc1wiLCBhIHNlcXVlbmNlIG9mIGxpc3RlbmVycyBhbmQgSURzIHRoYXQgY2FyZSBhYm91dCB0aGF0IGV2ZW50LlxuICpcbiAqICAtIFRoZSBgRXZlbnRQbHVnaW5IdWJgIHRoZW4gZGlzcGF0Y2hlcyB0aGUgZXZlbnRzLlxuICpcbiAqIE92ZXJ2aWV3IG9mIFJlYWN0IGFuZCB0aGUgZXZlbnQgc3lzdGVtOlxuICpcbiAqICstLS0tLS0tLS0tLS0rICAgIC5cbiAqIHwgICAgRE9NICAgICB8ICAgIC5cbiAqICstLS0tLS0tLS0tLS0rICAgIC5cbiAqICAgICAgIHwgICAgICAgICAgIC5cbiAqICAgICAgIHYgICAgICAgICAgIC5cbiAqICstLS0tLS0tLS0tLS0rICAgIC5cbiAqIHwgUmVhY3RFdmVudCB8ICAgIC5cbiAqIHwgIExpc3RlbmVyICB8ICAgIC5cbiAqICstLS0tLS0tLS0tLS0rICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgICstLS0tLS0tLSt8U2ltcGxlRXZlbnR8XG4gKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgICAgICAgfCAgICAgICAgIHxQbHVnaW4gICAgIHxcbiAqICstLS0tLXwtLS0tLS0rICAgIC4gICAgICAgICAgICAgICB2ICAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogfCAgICAgfCAgICAgIHwgICAgLiAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tK1xuICogfCAgICAgKy0tLS0tLS0tLS0tLi0tLT58RXZlbnRQbHVnaW5IdWJ8ICAgICAgICAgICAgICAgICAgICB8ICAgIEV2ZW50ICAgfFxuICogfCAgICAgICAgICAgIHwgICAgLiAgICB8ICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0rICB8IFByb3BhZ2F0b3JzfFxuICogfCBSZWFjdEV2ZW50IHwgICAgLiAgICB8ICAgICAgICAgICAgICB8ICAgICB8VGFwRXZlbnQgICB8ICB8LS0tLS0tLS0tLS0tfFxuICogfCAgRW1pdHRlciAgIHwgICAgLiAgICB8ICAgICAgICAgICAgICB8PC0tLSt8UGx1Z2luICAgICB8ICB8b3RoZXIgcGx1Z2lufFxuICogfCAgICAgICAgICAgIHwgICAgLiAgICB8ICAgICAgICAgICAgICB8ICAgICArLS0tLS0tLS0tLS0rICB8ICB1dGlsaXRpZXMgfFxuICogfCAgICAgKy0tLS0tLS0tLS0tLi0tLT58ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tK1xuICogfCAgICAgfCAgICAgIHwgICAgLiAgICArLS0tLS0tLS0tLS0tLS0rXG4gKiArLS0tLS18LS0tLS0tKyAgICAuICAgICAgICAgICAgICAgIF4gICAgICAgICstLS0tLS0tLS0tLStcbiAqICAgICAgIHwgICAgICAgICAgIC4gICAgICAgICAgICAgICAgfCAgICAgICAgfEVudGVyL0xlYXZlfFxuICogICAgICAgKyAgICAgICAgICAgLiAgICAgICAgICAgICAgICArLS0tLS0tLSt8UGx1Z2luICAgICB8XG4gKiArLS0tLS0tLS0tLS0tLSsgICAuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbiAqIHwgYXBwbGljYXRpb24gfCAgIC5cbiAqIHwtLS0tLS0tLS0tLS0tfCAgIC5cbiAqIHwgICAgICAgICAgICAgfCAgIC5cbiAqIHwgICAgICAgICAgICAgfCAgIC5cbiAqICstLS0tLS0tLS0tLS0tKyAgIC5cbiAqICAgICAgICAgICAgICAgICAgIC5cbiAqICAgIFJlYWN0IENvcmUgICAgIC4gIEdlbmVyYWwgUHVycG9zZSBFdmVudCBQbHVnaW4gU3lzdGVtXG4gKi9cblxudmFyIGFscmVhZHlMaXN0ZW5pbmdUbyA9IHt9O1xudmFyIGlzTW9uaXRvcmluZ1Njcm9sbFZhbHVlID0gZmFsc2U7XG52YXIgcmVhY3RUb3BMaXN0ZW5lcnNDb3VudGVyID0gMDtcblxuLy8gRm9yIGV2ZW50cyBsaWtlICdzdWJtaXQnIHdoaWNoIGRvbid0IGNvbnNpc3RlbnRseSBidWJibGUgKHdoaWNoIHdlIHRyYXAgYXQgYVxuLy8gbG93ZXIgbm9kZSB0aGFuIGBkb2N1bWVudGApLCBiaW5kaW5nIGF0IGBkb2N1bWVudGAgd291bGQgY2F1c2UgZHVwbGljYXRlXG4vLyBldmVudHMgc28gd2UgZG9uJ3QgaW5jbHVkZSB0aGVtIGhlcmVcbnZhciB0b3BFdmVudE1hcHBpbmcgPSB7XG4gIHRvcEJsdXI6ICdibHVyJyxcbiAgdG9wQ2hhbmdlOiAnY2hhbmdlJyxcbiAgdG9wQ2xpY2s6ICdjbGljaycsXG4gIHRvcENvbXBvc2l0aW9uRW5kOiAnY29tcG9zaXRpb25lbmQnLFxuICB0b3BDb21wb3NpdGlvblN0YXJ0OiAnY29tcG9zaXRpb25zdGFydCcsXG4gIHRvcENvbXBvc2l0aW9uVXBkYXRlOiAnY29tcG9zaXRpb251cGRhdGUnLFxuICB0b3BDb250ZXh0TWVudTogJ2NvbnRleHRtZW51JyxcbiAgdG9wQ29weTogJ2NvcHknLFxuICB0b3BDdXQ6ICdjdXQnLFxuICB0b3BEb3VibGVDbGljazogJ2RibGNsaWNrJyxcbiAgdG9wRHJhZzogJ2RyYWcnLFxuICB0b3BEcmFnRW5kOiAnZHJhZ2VuZCcsXG4gIHRvcERyYWdFbnRlcjogJ2RyYWdlbnRlcicsXG4gIHRvcERyYWdFeGl0OiAnZHJhZ2V4aXQnLFxuICB0b3BEcmFnTGVhdmU6ICdkcmFnbGVhdmUnLFxuICB0b3BEcmFnT3ZlcjogJ2RyYWdvdmVyJyxcbiAgdG9wRHJhZ1N0YXJ0OiAnZHJhZ3N0YXJ0JyxcbiAgdG9wRHJvcDogJ2Ryb3AnLFxuICB0b3BGb2N1czogJ2ZvY3VzJyxcbiAgdG9wSW5wdXQ6ICdpbnB1dCcsXG4gIHRvcEtleURvd246ICdrZXlkb3duJyxcbiAgdG9wS2V5UHJlc3M6ICdrZXlwcmVzcycsXG4gIHRvcEtleVVwOiAna2V5dXAnLFxuICB0b3BNb3VzZURvd246ICdtb3VzZWRvd24nLFxuICB0b3BNb3VzZU1vdmU6ICdtb3VzZW1vdmUnLFxuICB0b3BNb3VzZU91dDogJ21vdXNlb3V0JyxcbiAgdG9wTW91c2VPdmVyOiAnbW91c2VvdmVyJyxcbiAgdG9wTW91c2VVcDogJ21vdXNldXAnLFxuICB0b3BQYXN0ZTogJ3Bhc3RlJyxcbiAgdG9wU2Nyb2xsOiAnc2Nyb2xsJyxcbiAgdG9wU2VsZWN0aW9uQ2hhbmdlOiAnc2VsZWN0aW9uY2hhbmdlJyxcbiAgdG9wVGV4dElucHV0OiAndGV4dElucHV0JyxcbiAgdG9wVG91Y2hDYW5jZWw6ICd0b3VjaGNhbmNlbCcsXG4gIHRvcFRvdWNoRW5kOiAndG91Y2hlbmQnLFxuICB0b3BUb3VjaE1vdmU6ICd0b3VjaG1vdmUnLFxuICB0b3BUb3VjaFN0YXJ0OiAndG91Y2hzdGFydCcsXG4gIHRvcFdoZWVsOiAnd2hlZWwnXG59O1xuXG4vKipcbiAqIFRvIGVuc3VyZSBubyBjb25mbGljdHMgd2l0aCBvdGhlciBwb3RlbnRpYWwgUmVhY3QgaW5zdGFuY2VzIG9uIHRoZSBwYWdlXG4gKi9cbnZhciB0b3BMaXN0ZW5lcnNJREtleSA9ICdfcmVhY3RMaXN0ZW5lcnNJRCcgKyBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMik7XG5cbmZ1bmN0aW9uIGdldExpc3RlbmluZ0ZvckRvY3VtZW50KG1vdW50QXQpIHtcbiAgLy8gSW4gSUU4LCBgbW91bnRBdGAgaXMgYSBob3N0IG9iamVjdCBhbmQgZG9lc24ndCBoYXZlIGBoYXNPd25Qcm9wZXJ0eWBcbiAgLy8gZGlyZWN0bHkuXG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vdW50QXQsIHRvcExpc3RlbmVyc0lES2V5KSkge1xuICAgIG1vdW50QXRbdG9wTGlzdGVuZXJzSURLZXldID0gcmVhY3RUb3BMaXN0ZW5lcnNDb3VudGVyKys7XG4gICAgYWxyZWFkeUxpc3RlbmluZ1RvW21vdW50QXRbdG9wTGlzdGVuZXJzSURLZXldXSA9IHt9O1xuICB9XG4gIHJldHVybiBhbHJlYWR5TGlzdGVuaW5nVG9bbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV1dO1xufVxuXG4vKipcbiAqIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGlzIHVzZWQgdG8gYXR0YWNoIHRvcC1sZXZlbCBldmVudCBsaXN0ZW5lcnMuIEZvclxuICogZXhhbXBsZTpcbiAqXG4gKiAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5wdXRMaXN0ZW5lcignbXlJRCcsICdvbkNsaWNrJywgbXlGdW5jdGlvbik7XG4gKlxuICogVGhpcyB3b3VsZCBhbGxvY2F0ZSBhIFwicmVnaXN0cmF0aW9uXCIgb2YgYCgnb25DbGljaycsIG15RnVuY3Rpb24pYCBvbiAnbXlJRCcuXG4gKlxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSBhc3NpZ24oe30sIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4sIHtcblxuICAvKipcbiAgICogSW5qZWN0YWJsZSBldmVudCBiYWNrZW5kXG4gICAqL1xuICBSZWFjdEV2ZW50TGlzdGVuZXI6IG51bGwsXG5cbiAgaW5qZWN0aW9uOiB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFJlYWN0RXZlbnRMaXN0ZW5lclxuICAgICAqL1xuICAgIGluamVjdFJlYWN0RXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oUmVhY3RFdmVudExpc3RlbmVyKSB7XG4gICAgICBSZWFjdEV2ZW50TGlzdGVuZXIuc2V0SGFuZGxlVG9wTGV2ZWwoXG4gICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5oYW5kbGVUb3BMZXZlbFxuICAgICAgKTtcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIgPSBSZWFjdEV2ZW50TGlzdGVuZXI7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHdoZXRoZXIgb3Igbm90IGFueSBjcmVhdGVkIGNhbGxiYWNrcyBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBlbmFibGVkIFRydWUgaWYgY2FsbGJhY2tzIHNob3VsZCBiZSBlbmFibGVkLlxuICAgKi9cbiAgc2V0RW5hYmxlZDogZnVuY3Rpb24oZW5hYmxlZCkge1xuICAgIGlmIChSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyKSB7XG4gICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGNhbGxiYWNrcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIGlzRW5hYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICEhKFxuICAgICAgKFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIgJiYgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci5pc0VuYWJsZWQoKSlcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBXZSBsaXN0ZW4gZm9yIGJ1YmJsZWQgdG91Y2ggZXZlbnRzIG9uIHRoZSBkb2N1bWVudCBvYmplY3QuXG4gICAqXG4gICAqIEZpcmVmb3ggdjguMDEgKGFuZCBwb3NzaWJseSBvdGhlcnMpIGV4aGliaXRlZCBzdHJhbmdlIGJlaGF2aW9yIHdoZW5cbiAgICogbW91bnRpbmcgYG9ubW91c2Vtb3ZlYCBldmVudHMgYXQgc29tZSBub2RlIHRoYXQgd2FzIG5vdCB0aGUgZG9jdW1lbnRcbiAgICogZWxlbWVudC4gVGhlIHN5bXB0b21zIHdlcmUgdGhhdCBpZiB5b3VyIG1vdXNlIGlzIG5vdCBtb3Zpbmcgb3ZlciBzb21ldGhpbmdcbiAgICogY29udGFpbmVkIHdpdGhpbiB0aGF0IG1vdW50IHBvaW50IChmb3IgZXhhbXBsZSBvbiB0aGUgYmFja2dyb3VuZCkgdGhlXG4gICAqIHRvcC1sZXZlbCBsaXN0ZW5lcnMgZm9yIGBvbm1vdXNlbW92ZWAgd29uJ3QgYmUgY2FsbGVkLiBIb3dldmVyLCBpZiB5b3VcbiAgICogcmVnaXN0ZXIgdGhlIGBtb3VzZW1vdmVgIG9uIHRoZSBkb2N1bWVudCBvYmplY3QsIHRoZW4gaXQgd2lsbCBvZiBjb3Vyc2VcbiAgICogY2F0Y2ggYWxsIGBtb3VzZW1vdmVgcy4gVGhpcyBhbG9uZyB3aXRoIGlPUyBxdWlya3MsIGp1c3RpZmllcyByZXN0cmljdGluZ1xuICAgKiB0b3AtbGV2ZWwgbGlzdGVuZXJzIHRvIHRoZSBkb2N1bWVudCBvYmplY3Qgb25seSwgYXQgbGVhc3QgZm9yIHRoZXNlXG4gICAqIG1vdmVtZW50IHR5cGVzIG9mIGV2ZW50cyBhbmQgcG9zc2libHkgYWxsIGV2ZW50cy5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAgKlxuICAgKiBBbHNvLCBga2V5dXBgL2BrZXlwcmVzc2AvYGtleWRvd25gIGRvIG5vdCBidWJibGUgdG8gdGhlIHdpbmRvdyBvbiBJRSwgYnV0XG4gICAqIHRoZXkgYnViYmxlIHRvIGRvY3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZW50RG9jdW1lbnRIYW5kbGUgRG9jdW1lbnQgd2hpY2ggb3ducyB0aGUgY29udGFpbmVyXG4gICAqL1xuICBsaXN0ZW5UbzogZnVuY3Rpb24ocmVnaXN0cmF0aW9uTmFtZSwgY29udGVudERvY3VtZW50SGFuZGxlKSB7XG4gICAgdmFyIG1vdW50QXQgPSBjb250ZW50RG9jdW1lbnRIYW5kbGU7XG4gICAgdmFyIGlzTGlzdGVuaW5nID0gZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQobW91bnRBdCk7XG4gICAgdmFyIGRlcGVuZGVuY2llcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkuXG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuXG4gICAgdmFyIHRvcExldmVsVHlwZXMgPSBFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbaV07XG4gICAgICBpZiAoIShcbiAgICAgICAgICAgIChpc0xpc3RlbmluZy5oYXNPd25Qcm9wZXJ0eShkZXBlbmRlbmN5KSAmJiBpc0xpc3RlbmluZ1tkZXBlbmRlbmN5XSlcbiAgICAgICAgICApKSB7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5ID09PSB0b3BMZXZlbFR5cGVzLnRvcFdoZWVsKSB7XG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ3doZWVsJykpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BXaGVlbCxcbiAgICAgICAgICAgICAgJ3doZWVsJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ21vdXNld2hlZWwnKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFdoZWVsLFxuICAgICAgICAgICAgICAnbW91c2V3aGVlbCcsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpcmVmb3ggbmVlZHMgdG8gY2FwdHVyZSBhIGRpZmZlcmVudCBtb3VzZSBzY3JvbGwgZXZlbnQuXG4gICAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL2V2ZW50cy90ZXN0cy9zY3JvbGwuaHRtbFxuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFdoZWVsLFxuICAgICAgICAgICAgICAnRE9NTW91c2VTY3JvbGwnLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSB0b3BMZXZlbFR5cGVzLnRvcFNjcm9sbCkge1xuXG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ3Njcm9sbCcsIHRydWUpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcFNjcm9sbCxcbiAgICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BTY3JvbGwsXG4gICAgICAgICAgICAgICdzY3JvbGwnLFxuICAgICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLldJTkRPV19IQU5ETEVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09IHRvcExldmVsVHlwZXMudG9wRm9jdXMgfHxcbiAgICAgICAgICAgIGRlcGVuZGVuY3kgPT09IHRvcExldmVsVHlwZXMudG9wQmx1cikge1xuXG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzJywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wRm9jdXMsXG4gICAgICAgICAgICAgICdmb2N1cycsXG4gICAgICAgICAgICAgIG1vdW50QXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KFxuICAgICAgICAgICAgICB0b3BMZXZlbFR5cGVzLnRvcEJsdXIsXG4gICAgICAgICAgICAgICdibHVyJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzaW4nKSkge1xuICAgICAgICAgICAgLy8gSUUgaGFzIGBmb2N1c2luYCBhbmQgYGZvY3Vzb3V0YCBldmVudHMgd2hpY2ggYnViYmxlLlxuICAgICAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAwOC8wNC9kZWxlZ2F0aW5nX3RoZS5odG1sXG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICAgICAgICAgIHRvcExldmVsVHlwZXMudG9wRm9jdXMsXG4gICAgICAgICAgICAgICdmb2N1c2luJyxcbiAgICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudChcbiAgICAgICAgICAgICAgdG9wTGV2ZWxUeXBlcy50b3BCbHVyLFxuICAgICAgICAgICAgICAnZm9jdXNvdXQnLFxuICAgICAgICAgICAgICBtb3VudEF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBibHVyIGFuZCBmb2N1cyBldmVudCBsaXN0ZW5lcnMgYXJlIG9ubHkgYXR0YWNoZWQgb25jZVxuICAgICAgICAgIGlzTGlzdGVuaW5nW3RvcExldmVsVHlwZXMudG9wQmx1cl0gPSB0cnVlO1xuICAgICAgICAgIGlzTGlzdGVuaW5nW3RvcExldmVsVHlwZXMudG9wRm9jdXNdID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0b3BFdmVudE1hcHBpbmcuaGFzT3duUHJvcGVydHkoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoXG4gICAgICAgICAgICBkZXBlbmRlbmN5LFxuICAgICAgICAgICAgdG9wRXZlbnRNYXBwaW5nW2RlcGVuZGVuY3ldLFxuICAgICAgICAgICAgbW91bnRBdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpc0xpc3RlbmluZ1tkZXBlbmRlbmN5XSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHRyYXBCdWJibGVkRXZlbnQ6IGZ1bmN0aW9uKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpIHtcbiAgICByZXR1cm4gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgaGFuZGxlXG4gICAgKTtcbiAgfSxcblxuICB0cmFwQ2FwdHVyZWRFdmVudDogZnVuY3Rpb24odG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHJldHVybiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgaGFuZGxlXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogTGlzdGVucyB0byB3aW5kb3cgc2Nyb2xsIGFuZCByZXNpemUgZXZlbnRzLiBXZSBjYWNoZSBzY3JvbGwgdmFsdWVzIHNvIHRoYXRcbiAgICogYXBwbGljYXRpb24gY29kZSBjYW4gYWNjZXNzIHRoZW0gd2l0aG91dCB0cmlnZ2VyaW5nIHJlZmxvd3MuXG4gICAqXG4gICAqIE5PVEU6IFNjcm9sbCBldmVudHMgZG8gbm90IGJ1YmJsZS5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS9ldmVudHMvc2Nyb2xsLmh0bWxcbiAgICovXG4gIGVuc3VyZVNjcm9sbFZhbHVlTW9uaXRvcmluZzogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFpc01vbml0b3JpbmdTY3JvbGxWYWx1ZSkge1xuICAgICAgdmFyIHJlZnJlc2ggPSBWaWV3cG9ydE1ldHJpY3MucmVmcmVzaFNjcm9sbFZhbHVlcztcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIubW9uaXRvclNjcm9sbFZhbHVlKHJlZnJlc2gpO1xuICAgICAgaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfSxcblxuICBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M6IEV2ZW50UGx1Z2luSHViLmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncyxcblxuICByZWdpc3RyYXRpb25OYW1lTW9kdWxlczogRXZlbnRQbHVnaW5IdWIucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMsXG5cbiAgcHV0TGlzdGVuZXI6IEV2ZW50UGx1Z2luSHViLnB1dExpc3RlbmVyLFxuXG4gIGdldExpc3RlbmVyOiBFdmVudFBsdWdpbkh1Yi5nZXRMaXN0ZW5lcixcblxuICBkZWxldGVMaXN0ZW5lcjogRXZlbnRQbHVnaW5IdWIuZGVsZXRlTGlzdGVuZXIsXG5cbiAgZGVsZXRlQWxsTGlzdGVuZXJzOiBFdmVudFBsdWdpbkh1Yi5kZWxldGVBbGxMaXN0ZW5lcnNcblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENTU1RyYW5zaXRpb25Hcm91cFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIi4vUmVhY3RcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xuXG52YXIgUmVhY3RUcmFuc2l0aW9uR3JvdXAgPSBSZWFjdC5jcmVhdGVGYWN0b3J5KFxuICByZXF1aXJlKFwiLi9SZWFjdFRyYW5zaXRpb25Hcm91cFwiKVxuKTtcbnZhciBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkID0gUmVhY3QuY3JlYXRlRmFjdG9yeShcbiAgcmVxdWlyZShcIi4vUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZFwiKVxuKTtcblxudmFyIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwJyxcblxuICBwcm9wVHlwZXM6IHtcbiAgICB0cmFuc2l0aW9uTmFtZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHRyYW5zaXRpb25BcHBlYXI6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICAgIHRyYW5zaXRpb25FbnRlcjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gICAgdHJhbnNpdGlvbkxlYXZlOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbFxuICB9LFxuXG4gIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zaXRpb25BcHBlYXI6IGZhbHNlLFxuICAgICAgdHJhbnNpdGlvbkVudGVyOiB0cnVlLFxuICAgICAgdHJhbnNpdGlvbkxlYXZlOiB0cnVlXG4gICAgfTtcbiAgfSxcblxuICBfd3JhcENoaWxkOiBmdW5jdGlvbihjaGlsZCkge1xuICAgIC8vIFdlIG5lZWQgdG8gcHJvdmlkZSB0aGlzIGNoaWxkRmFjdG9yeSBzbyB0aGF0XG4gICAgLy8gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZCBjYW4gcmVjZWl2ZSB1cGRhdGVzIHRvIG5hbWUsIGVudGVyLCBhbmRcbiAgICAvLyBsZWF2ZSB3aGlsZSBpdCBpcyBsZWF2aW5nLlxuICAgIHJldHVybiBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkKFxuICAgICAge1xuICAgICAgICBuYW1lOiB0aGlzLnByb3BzLnRyYW5zaXRpb25OYW1lLFxuICAgICAgICBhcHBlYXI6IHRoaXMucHJvcHMudHJhbnNpdGlvbkFwcGVhcixcbiAgICAgICAgZW50ZXI6IHRoaXMucHJvcHMudHJhbnNpdGlvbkVudGVyLFxuICAgICAgICBsZWF2ZTogdGhpcy5wcm9wcy50cmFuc2l0aW9uTGVhdmVcbiAgICAgIH0sXG4gICAgICBjaGlsZFxuICAgICk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgUmVhY3RUcmFuc2l0aW9uR3JvdXAoXG4gICAgICAgIGFzc2lnbih7fSwgdGhpcy5wcm9wcywge2NoaWxkRmFjdG9yeTogdGhpcy5fd3JhcENoaWxkfSlcbiAgICAgIClcbiAgICApO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENTU1RyYW5zaXRpb25Hcm91cDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoXCIuL1JlYWN0XCIpO1xuXG52YXIgQ1NTQ29yZSA9IHJlcXVpcmUoXCIuL0NTU0NvcmVcIik7XG52YXIgUmVhY3RUcmFuc2l0aW9uRXZlbnRzID0gcmVxdWlyZShcIi4vUmVhY3RUcmFuc2l0aW9uRXZlbnRzXCIpO1xuXG52YXIgb25seUNoaWxkID0gcmVxdWlyZShcIi4vb25seUNoaWxkXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vLyBXZSBkb24ndCByZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSB0aGUgRE9NIHVudGlsIHdlIHJlY2VpdmUgYW4gYW5pbWF0aW9uZW5kIG9yXG4vLyB0cmFuc2l0aW9uZW5kIGV2ZW50LiBJZiB0aGUgdXNlciBzY3Jld3MgdXAgYW5kIGZvcmdldHMgdG8gYWRkIGFuIGFuaW1hdGlvblxuLy8gdGhlaXIgbm9kZSB3aWxsIGJlIHN0dWNrIGluIHRoZSBET00gZm9yZXZlciwgc28gd2UgZGV0ZWN0IGlmIGFuIGFuaW1hdGlvblxuLy8gZG9lcyBub3Qgc3RhcnQgYW5kIGlmIGl0IGRvZXNuJ3QsIHdlIGp1c3QgY2FsbCB0aGUgZW5kIGxpc3RlbmVyIGltbWVkaWF0ZWx5LlxudmFyIFRJQ0sgPSAxNztcbnZhciBOT19FVkVOVF9USU1FT1VUID0gNTAwMDtcblxudmFyIG5vRXZlbnRMaXN0ZW5lciA9IG51bGw7XG5cblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICBub0V2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbigpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIGZhbHNlLFxuICAgICAgJ3RyYW5zaXRpb24oKTogdHJpZWQgdG8gcGVyZm9ybSBhbiBhbmltYXRpb24gd2l0aG91dCAnICtcbiAgICAgICdhbiBhbmltYXRpb25lbmQgb3IgdHJhbnNpdGlvbmVuZCBldmVudCBhZnRlciB0aW1lb3V0ICgnICtcbiAgICAgICclc21zKS4gWW91IHNob3VsZCBlaXRoZXIgZGlzYWJsZSB0aGlzICcgK1xuICAgICAgJ3RyYW5zaXRpb24gaW4gSlMgb3IgYWRkIGEgQ1NTIGFuaW1hdGlvbi90cmFuc2l0aW9uLicsXG4gICAgICBOT19FVkVOVF9USU1FT1VUXG4gICAgKSA6IG51bGwpO1xuICB9O1xufVxuXG52YXIgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkJyxcblxuICB0cmFuc2l0aW9uOiBmdW5jdGlvbihhbmltYXRpb25UeXBlLCBmaW5pc2hDYWxsYmFjaykge1xuICAgIHZhciBub2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMucHJvcHMubmFtZSArICctJyArIGFuaW1hdGlvblR5cGU7XG4gICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGNsYXNzTmFtZSArICctYWN0aXZlJztcbiAgICB2YXIgbm9FdmVudFRpbWVvdXQgPSBudWxsO1xuXG4gICAgdmFyIGVuZExpc3RlbmVyID0gZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IG5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICBjbGVhclRpbWVvdXQobm9FdmVudFRpbWVvdXQpO1xuICAgICAgfVxuXG4gICAgICBDU1NDb3JlLnJlbW92ZUNsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgICBDU1NDb3JlLnJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG5cbiAgICAgIFJlYWN0VHJhbnNpdGlvbkV2ZW50cy5yZW1vdmVFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTtcblxuICAgICAgLy8gVXN1YWxseSB0aGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIHVzZWQgZm9yIGluZm9ybWluZyBhbiBvd25lciBvZlxuICAgICAgLy8gYSBsZWF2ZSBhbmltYXRpb24gYW5kIHRlbGxpbmcgaXQgdG8gcmVtb3ZlIHRoZSBjaGlsZC5cbiAgICAgIGlmIChmaW5pc2hDYWxsYmFjaykge1xuICAgICAgICBmaW5pc2hDYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBSZWFjdFRyYW5zaXRpb25FdmVudHMuYWRkRW5kRXZlbnRMaXN0ZW5lcihub2RlLCBlbmRMaXN0ZW5lcik7XG5cbiAgICBDU1NDb3JlLmFkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG5cbiAgICAvLyBOZWVkIHRvIGRvIHRoaXMgdG8gYWN0dWFsbHkgdHJpZ2dlciBhIHRyYW5zaXRpb24uXG4gICAgdGhpcy5xdWV1ZUNsYXNzKGFjdGl2ZUNsYXNzTmFtZSk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBub0V2ZW50VGltZW91dCA9IHNldFRpbWVvdXQobm9FdmVudExpc3RlbmVyLCBOT19FVkVOVF9USU1FT1VUKTtcbiAgICB9XG4gIH0sXG5cbiAgcXVldWVDbGFzczogZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgdGhpcy5jbGFzc05hbWVRdWV1ZS5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgICBpZiAoIXRoaXMudGltZW91dCkge1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLmZsdXNoQ2xhc3NOYW1lUXVldWUsIFRJQ0spO1xuICAgIH1cbiAgfSxcblxuICBmbHVzaENsYXNzTmFtZVF1ZXVlOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc01vdW50ZWQoKSkge1xuICAgICAgdGhpcy5jbGFzc05hbWVRdWV1ZS5mb3JFYWNoKFxuICAgICAgICBDU1NDb3JlLmFkZENsYXNzLmJpbmQoQ1NTQ29yZSwgdGhpcy5nZXRET01Ob2RlKCkpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNsYXNzTmFtZVF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgfSxcblxuICBjb21wb25lbnRXaWxsTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xhc3NOYW1lUXVldWUgPSBbXTtcbiAgfSxcblxuICBjb21wb25lbnRXaWxsVW5tb3VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxBcHBlYXI6IGZ1bmN0aW9uKGRvbmUpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5hcHBlYXIpIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvbignYXBwZWFyJywgZG9uZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbmUoKTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbEVudGVyOiBmdW5jdGlvbihkb25lKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZW50ZXIpIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvbignZW50ZXInLCBkb25lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZSgpO1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRXaWxsTGVhdmU6IGZ1bmN0aW9uKGRvbmUpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5sZWF2ZSkge1xuICAgICAgdGhpcy50cmFuc2l0aW9uKCdsZWF2ZScsIGRvbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb25lKCk7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9ubHlDaGlsZCh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JEVTFOVWNtRnVjMmwwYVc5dVIzSnZkWEJEYUdsc1pDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQjBlWEJsWTJobFkydHpYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUkRVMU5VY21GdWMybDBhVzl1UjNKdmRYQkRhR2xzWkZ4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGSmxZV04wSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSY0lpazdYRzVjYm5aaGNpQkRVMU5EYjNKbElEMGdjbVZ4ZFdseVpTaGNJaTR2UTFOVFEyOXlaVndpS1R0Y2JuWmhjaUJTWldGamRGUnlZVzV6YVhScGIyNUZkbVZ1ZEhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGUnlZVzV6YVhScGIyNUZkbVZ1ZEhOY0lpazdYRzVjYm5aaGNpQnZibXg1UTJocGJHUWdQU0J5WlhGMWFYSmxLRndpTGk5dmJteDVRMmhwYkdSY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JpOHZJRmRsSUdSdmJpZDBJSEpsYlc5MlpTQjBhR1VnWld4bGJXVnVkQ0JtY205dElIUm9aU0JFVDAwZ2RXNTBhV3dnZDJVZ2NtVmpaV2wyWlNCaGJpQmhibWx0WVhScGIyNWxibVFnYjNKY2JpOHZJSFJ5WVc1emFYUnBiMjVsYm1RZ1pYWmxiblF1SUVsbUlIUm9aU0IxYzJWeUlITmpjbVYzY3lCMWNDQmhibVFnWm05eVoyVjBjeUIwYnlCaFpHUWdZVzRnWVc1cGJXRjBhVzl1WEc0dkx5QjBhR1ZwY2lCdWIyUmxJSGRwYkd3Z1ltVWdjM1IxWTJzZ2FXNGdkR2hsSUVSUFRTQm1iM0psZG1WeUxDQnpieUIzWlNCa1pYUmxZM1FnYVdZZ1lXNGdZVzVwYldGMGFXOXVYRzR2THlCa2IyVnpJRzV2ZENCemRHRnlkQ0JoYm1RZ2FXWWdhWFFnWkc5bGMyNG5kQ3dnZDJVZ2FuVnpkQ0JqWVd4c0lIUm9aU0JsYm1RZ2JHbHpkR1Z1WlhJZ2FXMXRaV1JwWVhSbGJIa3VYRzUyWVhJZ1ZFbERTeUE5SURFM08xeHVkbUZ5SUU1UFgwVldSVTVVWDFSSlRVVlBWVlFnUFNBMU1EQXdPMXh1WEc1MllYSWdibTlGZG1WdWRFeHBjM1JsYm1WeUlEMGdiblZzYkR0Y2JseHVYRzVwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lHNXZSWFpsYm5STWFYTjBaVzVsY2lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQW5kSEpoYm5OcGRHbHZiaWdwT2lCMGNtbGxaQ0IwYnlCd1pYSm1iM0p0SUdGdUlHRnVhVzFoZEdsdmJpQjNhWFJvYjNWMElDY2dLMXh1SUNBZ0lDQWdKMkZ1SUdGdWFXMWhkR2x2Ym1WdVpDQnZjaUIwY21GdWMybDBhVzl1Wlc1a0lHVjJaVzUwSUdGbWRHVnlJSFJwYldWdmRYUWdLQ2NnSzF4dUlDQWdJQ0FnSnlWemJYTXBMaUJaYjNVZ2MyaHZkV3hrSUdWcGRHaGxjaUJrYVhOaFlteGxJSFJvYVhNZ0p5QXJYRzRnSUNBZ0lDQW5kSEpoYm5OcGRHbHZiaUJwYmlCS1V5QnZjaUJoWkdRZ1lTQkRVMU1nWVc1cGJXRjBhVzl1TDNSeVlXNXphWFJwYjI0dUp5eGNiaUFnSUNBZ0lFNVBYMFZXUlU1VVgxUkpUVVZQVlZSY2JpQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lIMDdYRzU5WEc1Y2JuWmhjaUJTWldGamRFTlRVMVJ5WVc1emFYUnBiMjVIY205MWNFTm9hV3hrSUQwZ1VtVmhZM1F1WTNKbFlYUmxRMnhoYzNNb2UxeHVJQ0JrYVhOd2JHRjVUbUZ0WlRvZ0oxSmxZV04wUTFOVFZISmhibk5wZEdsdmJrZHliM1Z3UTJocGJHUW5MRnh1WEc0Z0lIUnlZVzV6YVhScGIyNDZJR1oxYm1OMGFXOXVLR0Z1YVcxaGRHbHZibFI1Y0dVc0lHWnBibWx6YUVOaGJHeGlZV05yS1NCN1hHNGdJQ0FnZG1GeUlHNXZaR1VnUFNCMGFHbHpMbWRsZEVSUFRVNXZaR1VvS1R0Y2JpQWdJQ0IyWVhJZ1kyeGhjM05PWVcxbElEMGdkR2hwY3k1d2NtOXdjeTV1WVcxbElDc2dKeTBuSUNzZ1lXNXBiV0YwYVc5dVZIbHdaVHRjYmlBZ0lDQjJZWElnWVdOMGFYWmxRMnhoYzNOT1lXMWxJRDBnWTJ4aGMzTk9ZVzFsSUNzZ0p5MWhZM1JwZG1Vbk8xeHVJQ0FnSUhaaGNpQnViMFYyWlc1MFZHbHRaVzkxZENBOUlHNTFiR3c3WEc1Y2JpQWdJQ0IyWVhJZ1pXNWtUR2x6ZEdWdVpYSWdQU0JtZFc1amRHbHZiaWhsS1NCN1hHNGdJQ0FnSUNCcFppQW9aU0FtSmlCbExuUmhjbWRsZENBaFBUMGdibTlrWlNrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNBZ0lHTnNaV0Z5VkdsdFpXOTFkQ2h1YjBWMlpXNTBWR2x0Wlc5MWRDazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJRU5UVTBOdmNtVXVjbVZ0YjNabFEyeGhjM01vYm05a1pTd2dZMnhoYzNOT1lXMWxLVHRjYmlBZ0lDQWdJRU5UVTBOdmNtVXVjbVZ0YjNabFEyeGhjM01vYm05a1pTd2dZV04wYVhabFEyeGhjM05PWVcxbEtUdGNibHh1SUNBZ0lDQWdVbVZoWTNSVWNtRnVjMmwwYVc5dVJYWmxiblJ6TG5KbGJXOTJaVVZ1WkVWMlpXNTBUR2x6ZEdWdVpYSW9ibTlrWlN3Z1pXNWtUR2x6ZEdWdVpYSXBPMXh1WEc0Z0lDQWdJQ0F2THlCVmMzVmhiR3g1SUhSb2FYTWdiM0IwYVc5dVlXd2dZMkZzYkdKaFkyc2dhWE1nZFhObFpDQm1iM0lnYVc1bWIzSnRhVzVuSUdGdUlHOTNibVZ5SUc5bVhHNGdJQ0FnSUNBdkx5QmhJR3hsWVhabElHRnVhVzFoZEdsdmJpQmhibVFnZEdWc2JHbHVaeUJwZENCMGJ5QnlaVzF2ZG1VZ2RHaGxJR05vYVd4a0xseHVJQ0FnSUNBZ2FXWWdLR1pwYm1semFFTmhiR3hpWVdOcktTQjdYRzRnSUNBZ0lDQWdJR1pwYm1semFFTmhiR3hpWVdOcktDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lGSmxZV04wVkhKaGJuTnBkR2x2YmtWMlpXNTBjeTVoWkdSRmJtUkZkbVZ1ZEV4cGMzUmxibVZ5S0c1dlpHVXNJR1Z1WkV4cGMzUmxibVZ5S1R0Y2JseHVJQ0FnSUVOVFUwTnZjbVV1WVdSa1EyeGhjM01vYm05a1pTd2dZMnhoYzNOT1lXMWxLVHRjYmx4dUlDQWdJQzh2SUU1bFpXUWdkRzhnWkc4Z2RHaHBjeUIwYnlCaFkzUjFZV3hzZVNCMGNtbG5aMlZ5SUdFZ2RISmhibk5wZEdsdmJpNWNiaUFnSUNCMGFHbHpMbkYxWlhWbFEyeGhjM01vWVdOMGFYWmxRMnhoYzNOT1lXMWxLVHRjYmx4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJRzV2UlhabGJuUlVhVzFsYjNWMElEMGdjMlYwVkdsdFpXOTFkQ2h1YjBWMlpXNTBUR2x6ZEdWdVpYSXNJRTVQWDBWV1JVNVVYMVJKVFVWUFZWUXBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0J4ZFdWMVpVTnNZWE56T2lCbWRXNWpkR2x2YmloamJHRnpjMDVoYldVcElIdGNiaUFnSUNCMGFHbHpMbU5zWVhOelRtRnRaVkYxWlhWbExuQjFjMmdvWTJ4aGMzTk9ZVzFsS1R0Y2JseHVJQ0FnSUdsbUlDZ2hkR2hwY3k1MGFXMWxiM1YwS1NCN1hHNGdJQ0FnSUNCMGFHbHpMblJwYldWdmRYUWdQU0J6WlhSVWFXMWxiM1YwS0hSb2FYTXVabXgxYzJoRGJHRnpjMDVoYldWUmRXVjFaU3dnVkVsRFN5azdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJR1pzZFhOb1EyeGhjM05PWVcxbFVYVmxkV1U2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG1selRXOTFiblJsWkNncEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG1Oc1lYTnpUbUZ0WlZGMVpYVmxMbVp2Y2tWaFkyZ29YRzRnSUNBZ0lDQWdJRU5UVTBOdmNtVXVZV1JrUTJ4aGMzTXVZbWx1WkNoRFUxTkRiM0psTENCMGFHbHpMbWRsZEVSUFRVNXZaR1VvS1NsY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdVkyeGhjM05PWVcxbFVYVmxkV1V1YkdWdVozUm9JRDBnTUR0Y2JpQWdJQ0IwYUdsekxuUnBiV1Z2ZFhRZ1BTQnVkV3hzTzF4dUlDQjlMRnh1WEc0Z0lHTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1amJHRnpjMDVoYldWUmRXVjFaU0E5SUZ0ZE8xeHVJQ0I5TEZ4dVhHNGdJR052YlhCdmJtVnVkRmRwYkd4VmJtMXZkVzUwT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCcFppQW9kR2hwY3k1MGFXMWxiM1YwS1NCN1hHNGdJQ0FnSUNCamJHVmhjbFJwYldWdmRYUW9kR2hwY3k1MGFXMWxiM1YwS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ1kyOXRjRzl1Wlc1MFYybHNiRUZ3Y0dWaGNqb2dablZ1WTNScGIyNG9aRzl1WlNrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG5CeWIzQnpMbUZ3Y0dWaGNpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1MGNtRnVjMmwwYVc5dUtDZGhjSEJsWVhJbkxDQmtiMjVsS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdaRzl1WlNncE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQmpiMjF3YjI1bGJuUlhhV3hzUlc1MFpYSTZJR1oxYm1OMGFXOXVLR1J2Ym1VcElIdGNiaUFnSUNCcFppQW9kR2hwY3k1d2NtOXdjeTVsYm5SbGNpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1MGNtRnVjMmwwYVc5dUtDZGxiblJsY2ljc0lHUnZibVVwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQmtiMjVsS0NrN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lHTnZiWEJ2Ym1WdWRGZHBiR3hNWldGMlpUb2dablZ1WTNScGIyNG9aRzl1WlNrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG5CeWIzQnpMbXhsWVhabEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG5SeVlXNXphWFJwYjI0b0oyeGxZWFpsSnl3Z1pHOXVaU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHUnZibVVvS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ2NtVnVaR1Z5T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCeVpYUjFjbTRnYjI1c2VVTm9hV3hrS0hSb2FYTXVjSEp2Y0hNdVkyaHBiR1J5Wlc0cE8xeHVJQ0I5WEc1OUtUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JTWldGamRFTlRVMVJ5WVc1emFYUnBiMjVIY205MWNFTm9hV3hrTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDaGlsZFJlY29uY2lsZXJcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZShcIi4vUmVhY3RSZWNvbmNpbGVyXCIpO1xuXG52YXIgZmxhdHRlbkNoaWxkcmVuID0gcmVxdWlyZShcIi4vZmxhdHRlbkNoaWxkcmVuXCIpO1xudmFyIGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50XCIpO1xudmFyIHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnRcIik7XG5cbi8qKlxuICogUmVhY3RDaGlsZFJlY29uY2lsZXIgcHJvdmlkZXMgaGVscGVycyBmb3IgaW5pdGlhbGl6aW5nIG9yIHVwZGF0aW5nIGEgc2V0IG9mXG4gKiBjaGlsZHJlbi4gSXRzIG91dHB1dCBpcyBzdWl0YWJsZSBmb3IgcGFzc2luZyBpdCBvbnRvIFJlYWN0TXVsdGlDaGlsZCB3aGljaFxuICogZG9lcyBkaWZmZWQgcmVvcmRlcmluZyBhbmQgaW5zZXJ0aW9uLlxuICovXG52YXIgUmVhY3RDaGlsZFJlY29uY2lsZXIgPSB7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIFwibW91bnQgaW1hZ2VcIiBmb3IgZWFjaCBvZiB0aGUgc3VwcGxpZWQgY2hpbGRyZW4uIEluIHRoZSBjYXNlXG4gICAqIG9mIGBSZWFjdERPTUNvbXBvbmVudGAsIGEgbW91bnQgaW1hZ2UgaXMgYSBzdHJpbmcgb2YgbWFya3VwLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5lc3RlZENoaWxkTm9kZXMgTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAqIEByZXR1cm4gez9vYmplY3R9IEEgc2V0IG9mIGNoaWxkIGluc3RhbmNlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBpbnN0YW50aWF0ZUNoaWxkcmVuOiBmdW5jdGlvbihuZXN0ZWRDaGlsZE5vZGVzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBjaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXN0ZWRDaGlsZE5vZGVzKTtcbiAgICBmb3IgKHZhciBuYW1lIGluIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoY2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bbmFtZV07XG4gICAgICAgIC8vIFRoZSByZW5kZXJlZCBjaGlsZHJlbiBtdXN0IGJlIHR1cm5lZCBpbnRvIGluc3RhbmNlcyBhcyB0aGV5J3JlXG4gICAgICAgIC8vIG1vdW50ZWQuXG4gICAgICAgIHZhciBjaGlsZEluc3RhbmNlID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChjaGlsZCwgbnVsbCk7XG4gICAgICAgIGNoaWxkcmVuW25hbWVdID0gY2hpbGRJbnN0YW5jZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByZW5kZXJlZCBjaGlsZHJlbiBhbmQgcmV0dXJucyBhIG5ldyBzZXQgb2YgY2hpbGRyZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNoaWxkcmVuIFByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgc2V0IG9mIGNoaWxkcmVuLlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHROZXN0ZWRDaGlsZE5vZGVzIE5lc3RlZCBjaGlsZCBtYXBzLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4gez9vYmplY3R9IEEgbmV3IHNldCBvZiBjaGlsZCBpbnN0YW5jZXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKFxuICAgIHByZXZDaGlsZHJlbixcbiAgICBuZXh0TmVzdGVkQ2hpbGROb2RlcyxcbiAgICB0cmFuc2FjdGlvbixcbiAgICBjb250ZXh0KSB7XG4gICAgLy8gV2UgY3VycmVudGx5IGRvbid0IGhhdmUgYSB3YXkgdG8gdHJhY2sgbW92ZXMgaGVyZSBidXQgaWYgd2UgdXNlIGl0ZXJhdG9yc1xuICAgIC8vIGluc3RlYWQgb2YgZm9yLi5pbiB3ZSBjYW4gemlwIHRoZSBpdGVyYXRvcnMgYW5kIGNoZWNrIGlmIGFuIGl0ZW0gaGFzXG4gICAgLy8gbW92ZWQuXG4gICAgLy8gVE9ETzogSWYgbm90aGluZyBoYXMgY2hhbmdlZCwgcmV0dXJuIHRoZSBwcmV2Q2hpbGRyZW4gb2JqZWN0IHNvIHRoYXQgd2VcbiAgICAvLyBjYW4gcXVpY2tseSBiYWlsb3V0IGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQuXG4gICAgdmFyIG5leHRDaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXh0TmVzdGVkQ2hpbGROb2Rlcyk7XG4gICAgaWYgKCFuZXh0Q2hpbGRyZW4gJiYgIXByZXZDaGlsZHJlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBuYW1lO1xuICAgIGZvciAobmFtZSBpbiBuZXh0Q2hpbGRyZW4pIHtcbiAgICAgIGlmICghbmV4dENoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZDaGlsZCA9IHByZXZDaGlsZHJlbiAmJiBwcmV2Q2hpbGRyZW5bbmFtZV07XG4gICAgICB2YXIgcHJldkVsZW1lbnQgPSBwcmV2Q2hpbGQgJiYgcHJldkNoaWxkLl9jdXJyZW50RWxlbWVudDtcbiAgICAgIHZhciBuZXh0RWxlbWVudCA9IG5leHRDaGlsZHJlbltuYW1lXTtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpKSB7XG4gICAgICAgIFJlYWN0UmVjb25jaWxlci5yZWNlaXZlQ29tcG9uZW50KFxuICAgICAgICAgIHByZXZDaGlsZCwgbmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBjb250ZXh0XG4gICAgICAgICk7XG4gICAgICAgIG5leHRDaGlsZHJlbltuYW1lXSA9IHByZXZDaGlsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2Q2hpbGQpIHtcbiAgICAgICAgICBSZWFjdFJlY29uY2lsZXIudW5tb3VudENvbXBvbmVudChwcmV2Q2hpbGQsIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBjaGlsZCBtdXN0IGJlIGluc3RhbnRpYXRlZCBiZWZvcmUgaXQncyBtb3VudGVkLlxuICAgICAgICB2YXIgbmV4dENoaWxkSW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KFxuICAgICAgICAgIG5leHRFbGVtZW50LFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgICAgbmV4dENoaWxkcmVuW25hbWVdID0gbmV4dENoaWxkSW5zdGFuY2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVubW91bnQgY2hpbGRyZW4gdGhhdCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQuXG4gICAgZm9yIChuYW1lIGluIHByZXZDaGlsZHJlbikge1xuICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgICEobmV4dENoaWxkcmVuICYmIG5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpIHtcbiAgICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQocHJldkNoaWxkcmVuW25hbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRDaGlsZHJlbjtcbiAgfSxcblxuICAvKipcbiAgICogVW5tb3VudHMgYWxsIHJlbmRlcmVkIGNoaWxkcmVuLiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuIHVwIGNoaWxkcmVuXG4gICAqIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IHJlbmRlcmVkQ2hpbGRyZW4gUHJldmlvdXNseSBpbml0aWFsaXplZCBzZXQgb2YgY2hpbGRyZW4uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENoaWxkcmVuOiBmdW5jdGlvbihyZW5kZXJlZENoaWxkcmVuKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiByZW5kZXJlZENoaWxkcmVuKSB7XG4gICAgICB2YXIgcmVuZGVyZWRDaGlsZCA9IHJlbmRlcmVkQ2hpbGRyZW5bbmFtZV07XG4gICAgICBSZWFjdFJlY29uY2lsZXIudW5tb3VudENvbXBvbmVudChyZW5kZXJlZENoaWxkKTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENoaWxkUmVjb25jaWxlcjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RDaGlsZHJlblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgUmVhY3RGcmFnbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RnJhZ21lbnRcIik7XG5cbnZhciB0cmF2ZXJzZUFsbENoaWxkcmVuID0gcmVxdWlyZShcIi4vdHJhdmVyc2VBbGxDaGlsZHJlblwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIHR3b0FyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXI7XG52YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IFBvb2xlZENsYXNzLnRocmVlQXJndW1lbnRQb29sZXI7XG5cbi8qKlxuICogUG9vbGVkQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBib29ra2VlcGluZyBhc3NvY2lhdGVkIHdpdGggcGVyZm9ybWluZyBhIGNoaWxkXG4gKiB0cmF2ZXJzYWwuIEFsbG93cyBhdm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy5cbiAqXG4gKiBAY29uc3RydWN0b3IgRm9yRWFjaEJvb2tLZWVwaW5nXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gZm9yRWFjaEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gdHJhdmVyc2FsIHdpdGguXG4gKiBAcGFyYW0gez8qfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0gY29udGV4dCB3aXRoLlxuICovXG5mdW5jdGlvbiBGb3JFYWNoQm9va0tlZXBpbmcoZm9yRWFjaEZ1bmN0aW9uLCBmb3JFYWNoQ29udGV4dCkge1xuICB0aGlzLmZvckVhY2hGdW5jdGlvbiA9IGZvckVhY2hGdW5jdGlvbjtcbiAgdGhpcy5mb3JFYWNoQ29udGV4dCA9IGZvckVhY2hDb250ZXh0O1xufVxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKEZvckVhY2hCb29rS2VlcGluZywgdHdvQXJndW1lbnRQb29sZXIpO1xuXG5mdW5jdGlvbiBmb3JFYWNoU2luZ2xlQ2hpbGQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSwgaSkge1xuICB2YXIgZm9yRWFjaEJvb2tLZWVwaW5nID0gdHJhdmVyc2VDb250ZXh0O1xuICBmb3JFYWNoQm9va0tlZXBpbmcuZm9yRWFjaEZ1bmN0aW9uLmNhbGwoXG4gICAgZm9yRWFjaEJvb2tLZWVwaW5nLmZvckVhY2hDb250ZXh0LCBjaGlsZCwgaSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogVGhlIHByb3ZpZGVkIGZvckVhY2hGdW5jKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZvckVhY2hGdW5jLlxuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgdHJhdmVyc2VDb250ZXh0ID1cbiAgICBGb3JFYWNoQm9va0tlZXBpbmcuZ2V0UG9vbGVkKGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCk7XG4gIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGlsZCwgdHJhdmVyc2VDb250ZXh0KTtcbiAgRm9yRWFjaEJvb2tLZWVwaW5nLnJlbGVhc2UodHJhdmVyc2VDb250ZXh0KTtcbn1cblxuLyoqXG4gKiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5nIGEgY2hpbGRcbiAqIG1hcHBpbmcuIEFsbG93cyBhdm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy5cbiAqXG4gKiBAY29uc3RydWN0b3IgTWFwQm9va0tlZXBpbmdcbiAqIEBwYXJhbSB7ISp9IG1hcFJlc3VsdCBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBtYXBGdW5jdGlvbiBGdW5jdGlvbiB0byBwZXJmb3JtIG1hcHBpbmcgd2l0aC5cbiAqIEBwYXJhbSB7Pyp9IG1hcENvbnRleHQgQ29udGV4dCB0byBwZXJmb3JtIG1hcHBpbmcgd2l0aC5cbiAqL1xuZnVuY3Rpb24gTWFwQm9va0tlZXBpbmcobWFwUmVzdWx0LCBtYXBGdW5jdGlvbiwgbWFwQ29udGV4dCkge1xuICB0aGlzLm1hcFJlc3VsdCA9IG1hcFJlc3VsdDtcbiAgdGhpcy5tYXBGdW5jdGlvbiA9IG1hcEZ1bmN0aW9uO1xuICB0aGlzLm1hcENvbnRleHQgPSBtYXBDb250ZXh0O1xufVxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKE1hcEJvb2tLZWVwaW5nLCB0aHJlZUFyZ3VtZW50UG9vbGVyKTtcblxuZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lLCBpKSB7XG4gIHZhciBtYXBCb29rS2VlcGluZyA9IHRyYXZlcnNlQ29udGV4dDtcbiAgdmFyIG1hcFJlc3VsdCA9IG1hcEJvb2tLZWVwaW5nLm1hcFJlc3VsdDtcblxuICB2YXIga2V5VW5pcXVlID0gIW1hcFJlc3VsdC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAga2V5VW5pcXVlLFxuICAgICAgJ1JlYWN0Q2hpbGRyZW4ubWFwKC4uLik6IEVuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgJyArXG4gICAgICAnYCVzYC4gQ2hpbGQga2V5cyBtdXN0IGJlIHVuaXF1ZTsgd2hlbiB0d28gY2hpbGRyZW4gc2hhcmUgYSBrZXksIG9ubHkgJyArXG4gICAgICAndGhlIGZpcnN0IGNoaWxkIHdpbGwgYmUgdXNlZC4nLFxuICAgICAgbmFtZVxuICAgICkgOiBudWxsKTtcbiAgfVxuXG4gIGlmIChrZXlVbmlxdWUpIHtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPVxuICAgICAgbWFwQm9va0tlZXBpbmcubWFwRnVuY3Rpb24uY2FsbChtYXBCb29rS2VlcGluZy5tYXBDb250ZXh0LCBjaGlsZCwgaSk7XG4gICAgbWFwUmVzdWx0W25hbWVdID0gbWFwcGVkQ2hpbGQ7XG4gIH1cbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGtleSwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIFRPRE86IFRoaXMgbWF5IGxpa2VseSBicmVhayBhbnkgY2FsbHMgdG8gYFJlYWN0Q2hpbGRyZW4ubWFwYCB0aGF0IHdlcmVcbiAqIHByZXZpb3VzbHkgcmVseWluZyBvbiB0aGUgZmFjdCB0aGF0IHdlIGd1YXJkZWQgYWdhaW5zdCBudWxsIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBtYXBGdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gbWFwQ29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIG1hcFJlc3VsdCA9IHt9O1xuICB2YXIgdHJhdmVyc2VDb250ZXh0ID0gTWFwQm9va0tlZXBpbmcuZ2V0UG9vbGVkKG1hcFJlc3VsdCwgZnVuYywgY29udGV4dCk7XG4gIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIG1hcFNpbmdsZUNoaWxkSW50b0NvbnRleHQsIHRyYXZlcnNlQ29udGV4dCk7XG4gIE1hcEJvb2tLZWVwaW5nLnJlbGVhc2UodHJhdmVyc2VDb250ZXh0KTtcbiAgcmV0dXJuIFJlYWN0RnJhZ21lbnQuY3JlYXRlKG1hcFJlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZER1bW15KHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUsIGkpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuLCBjb250ZXh0KSB7XG4gIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGREdW1teSwgbnVsbCk7XG59XG5cbnZhciBSZWFjdENoaWxkcmVuID0ge1xuICBmb3JFYWNoOiBmb3JFYWNoQ2hpbGRyZW4sXG4gIG1hcDogbWFwQ2hpbGRyZW4sXG4gIGNvdW50OiBjb3VudENoaWxkcmVuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q2hpbGRyZW47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRGFHbHNaSEpsYmk1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRGFHbHNaSEpsYmx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGQnZiMnhsWkVOc1lYTnpJRDBnY21WeGRXbHlaU2hjSWk0dlVHOXZiR1ZrUTJ4aGMzTmNJaWs3WEc1MllYSWdVbVZoWTNSR2NtRm5iV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJuSmhaMjFsYm5SY0lpazdYRzVjYm5aaGNpQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVJRDBnY21WeGRXbHlaU2hjSWk0dmRISmhkbVZ5YzJWQmJHeERhR2xzWkhKbGJsd2lLVHRjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVkbUZ5SUhSM2IwRnlaM1Z0Wlc1MFVHOXZiR1Z5SUQwZ1VHOXZiR1ZrUTJ4aGMzTXVkSGR2UVhKbmRXMWxiblJRYjI5c1pYSTdYRzUyWVhJZ2RHaHlaV1ZCY21kMWJXVnVkRkJ2YjJ4bGNpQTlJRkJ2YjJ4bFpFTnNZWE56TG5Sb2NtVmxRWEpuZFcxbGJuUlFiMjlzWlhJN1hHNWNiaThxS2x4dUlDb2dVRzl2YkdWa1EyeGhjM01nY21Wd2NtVnpaVzUwYVc1bklIUm9aU0JpYjI5cmEyVmxjR2x1WnlCaGMzTnZZMmxoZEdWa0lIZHBkR2dnY0dWeVptOXliV2x1WnlCaElHTm9hV3hrWEc0Z0tpQjBjbUYyWlhKellXd3VJRUZzYkc5M2N5QmhkbTlwWkdsdVp5QmlhVzVrYVc1bklHTmhiR3hpWVdOcmN5NWNiaUFxWEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0lnUm05eVJXRmphRUp2YjJ0TFpXVndhVzVuWEc0Z0tpQkFjR0Z5WVcwZ2V5Rm1kVzVqZEdsdmJuMGdabTl5UldGamFFWjFibU4wYVc5dUlFWjFibU4wYVc5dUlIUnZJSEJsY21admNtMGdkSEpoZG1WeWMyRnNJSGRwZEdndVhHNGdLaUJBY0dGeVlXMGdlejhxZlNCbWIzSkZZV05vUTI5dWRHVjRkQ0JEYjI1MFpYaDBJSFJ2SUhCbGNtWnZjbTBnWTI5dWRHVjRkQ0IzYVhSb0xseHVJQ292WEc1bWRXNWpkR2x2YmlCR2IzSkZZV05vUW05dmEwdGxaWEJwYm1jb1ptOXlSV0ZqYUVaMWJtTjBhVzl1TENCbWIzSkZZV05vUTI5dWRHVjRkQ2tnZTF4dUlDQjBhR2x6TG1admNrVmhZMmhHZFc1amRHbHZiaUE5SUdadmNrVmhZMmhHZFc1amRHbHZianRjYmlBZ2RHaHBjeTVtYjNKRllXTm9RMjl1ZEdWNGRDQTlJR1p2Y2tWaFkyaERiMjUwWlhoME8xeHVmVnh1VUc5dmJHVmtRMnhoYzNNdVlXUmtVRzl2YkdsdVoxUnZLRVp2Y2tWaFkyaENiMjlyUzJWbGNHbHVaeXdnZEhkdlFYSm5kVzFsYm5SUWIyOXNaWElwTzF4dVhHNW1kVzVqZEdsdmJpQm1iM0pGWVdOb1UybHVaMnhsUTJocGJHUW9kSEpoZG1WeWMyVkRiMjUwWlhoMExDQmphR2xzWkN3Z2JtRnRaU3dnYVNrZ2UxeHVJQ0IyWVhJZ1ptOXlSV0ZqYUVKdmIydExaV1Z3YVc1bklEMGdkSEpoZG1WeWMyVkRiMjUwWlhoME8xeHVJQ0JtYjNKRllXTm9RbTl2YTB0bFpYQnBibWN1Wm05eVJXRmphRVoxYm1OMGFXOXVMbU5oYkd3b1hHNGdJQ0FnWm05eVJXRmphRUp2YjJ0TFpXVndhVzVuTG1admNrVmhZMmhEYjI1MFpYaDBMQ0JqYUdsc1pDd2dhU2s3WEc1OVhHNWNiaThxS2x4dUlDb2dTWFJsY21GMFpYTWdkR2h5YjNWbmFDQmphR2xzWkhKbGJpQjBhR0YwSUdGeVpTQjBlWEJwWTJGc2JIa2djM0JsWTJsbWFXVmtJR0Z6SUdCd2NtOXdjeTVqYUdsc1pISmxibUF1WEc0Z0tseHVJQ29nVkdobElIQnliM1pwWkdWa0lHWnZja1ZoWTJoR2RXNWpLR05vYVd4a0xDQnBibVJsZUNrZ2QybHNiQ0JpWlNCallXeHNaV1FnWm05eUlHVmhZMmhjYmlBcUlHeGxZV1lnWTJocGJHUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIcy9LbjBnWTJocGJHUnlaVzRnUTJocGJHUnlaVzRnZEhKbFpTQmpiMjUwWVdsdVpYSXVYRzRnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1S0Nvc0lHbHVkQ2w5SUdadmNrVmhZMmhHZFc1akxseHVJQ29nUUhCaGNtRnRJSHNxZlNCbWIzSkZZV05vUTI5dWRHVjRkQ0JEYjI1MFpYaDBJR1p2Y2lCbWIzSkZZV05vUTI5dWRHVjRkQzVjYmlBcUwxeHVablZ1WTNScGIyNGdabTl5UldGamFFTm9hV3hrY21WdUtHTm9hV3hrY21WdUxDQm1iM0pGWVdOb1JuVnVZeXdnWm05eVJXRmphRU52Ym5SbGVIUXBJSHRjYmlBZ2FXWWdLR05vYVd4a2NtVnVJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQnlaWFIxY200Z1kyaHBiR1J5Wlc0N1hHNGdJSDFjYmx4dUlDQjJZWElnZEhKaGRtVnljMlZEYjI1MFpYaDBJRDFjYmlBZ0lDQkdiM0pGWVdOb1FtOXZhMHRsWlhCcGJtY3VaMlYwVUc5dmJHVmtLR1p2Y2tWaFkyaEdkVzVqTENCbWIzSkZZV05vUTI5dWRHVjRkQ2s3WEc0Z0lIUnlZWFpsY25ObFFXeHNRMmhwYkdSeVpXNG9ZMmhwYkdSeVpXNHNJR1p2Y2tWaFkyaFRhVzVuYkdWRGFHbHNaQ3dnZEhKaGRtVnljMlZEYjI1MFpYaDBLVHRjYmlBZ1JtOXlSV0ZqYUVKdmIydExaV1Z3YVc1bkxuSmxiR1ZoYzJVb2RISmhkbVZ5YzJWRGIyNTBaWGgwS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJRYjI5c1pXUkRiR0Z6Y3lCeVpYQnlaWE5sYm5ScGJtY2dkR2hsSUdKdmIydHJaV1Z3YVc1bklHRnpjMjlqYVdGMFpXUWdkMmwwYUNCd1pYSm1iM0p0YVc1bklHRWdZMmhwYkdSY2JpQXFJRzFoY0hCcGJtY3VJRUZzYkc5M2N5QmhkbTlwWkdsdVp5QmlhVzVrYVc1bklHTmhiR3hpWVdOcmN5NWNiaUFxWEc0Z0tpQkFZMjl1YzNSeWRXTjBiM0lnVFdGd1FtOXZhMHRsWlhCcGJtZGNiaUFxSUVCd1lYSmhiU0I3SVNwOUlHMWhjRkpsYzNWc2RDQlBZbXBsWTNRZ1kyOXVkR0ZwYm1sdVp5QjBhR1VnYjNKa1pYSmxaQ0J0WVhBZ2IyWWdjbVZ6ZFd4MGN5NWNiaUFxSUVCd1lYSmhiU0I3SVdaMWJtTjBhVzl1ZlNCdFlYQkdkVzVqZEdsdmJpQkdkVzVqZEdsdmJpQjBieUJ3WlhKbWIzSnRJRzFoY0hCcGJtY2dkMmwwYUM1Y2JpQXFJRUJ3WVhKaGJTQjdQeXA5SUcxaGNFTnZiblJsZUhRZ1EyOXVkR1Y0ZENCMGJ5QndaWEptYjNKdElHMWhjSEJwYm1jZ2QybDBhQzVjYmlBcUwxeHVablZ1WTNScGIyNGdUV0Z3UW05dmEwdGxaWEJwYm1jb2JXRndVbVZ6ZFd4MExDQnRZWEJHZFc1amRHbHZiaXdnYldGd1EyOXVkR1Y0ZENrZ2UxeHVJQ0IwYUdsekxtMWhjRkpsYzNWc2RDQTlJRzFoY0ZKbGMzVnNkRHRjYmlBZ2RHaHBjeTV0WVhCR2RXNWpkR2x2YmlBOUlHMWhjRVoxYm1OMGFXOXVPMXh1SUNCMGFHbHpMbTFoY0VOdmJuUmxlSFFnUFNCdFlYQkRiMjUwWlhoME8xeHVmVnh1VUc5dmJHVmtRMnhoYzNNdVlXUmtVRzl2YkdsdVoxUnZLRTFoY0VKdmIydExaV1Z3YVc1bkxDQjBhSEpsWlVGeVozVnRaVzUwVUc5dmJHVnlLVHRjYmx4dVpuVnVZM1JwYjI0Z2JXRndVMmx1WjJ4bFEyaHBiR1JKYm5SdlEyOXVkR1Y0ZENoMGNtRjJaWEp6WlVOdmJuUmxlSFFzSUdOb2FXeGtMQ0J1WVcxbExDQnBLU0I3WEc0Z0lIWmhjaUJ0WVhCQ2IyOXJTMlZsY0dsdVp5QTlJSFJ5WVhabGNuTmxRMjl1ZEdWNGREdGNiaUFnZG1GeUlHMWhjRkpsYzNWc2RDQTlJRzFoY0VKdmIydExaV1Z3YVc1bkxtMWhjRkpsYzNWc2REdGNibHh1SUNCMllYSWdhMlY1Vlc1cGNYVmxJRDBnSVcxaGNGSmxjM1ZzZEM1b1lYTlBkMjVRY205d1pYSjBlU2h1WVcxbEtUdGNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2EyVjVWVzVwY1hWbExGeHVJQ0FnSUNBZ0oxSmxZV04wUTJocGJHUnlaVzR1YldGd0tDNHVMaWs2SUVWdVkyOTFiblJsY21Wa0lIUjNieUJqYUdsc1pISmxiaUIzYVhSb0lIUm9aU0J6WVcxbElHdGxlU3dnSnlBclhHNGdJQ0FnSUNBbllDVnpZQzRnUTJocGJHUWdhMlY1Y3lCdGRYTjBJR0psSUhWdWFYRjFaVHNnZDJobGJpQjBkMjhnWTJocGJHUnlaVzRnYzJoaGNtVWdZU0JyWlhrc0lHOXViSGtnSnlBclhHNGdJQ0FnSUNBbmRHaGxJR1pwY25OMElHTm9hV3hrSUhkcGJHd2dZbVVnZFhObFpDNG5MRnh1SUNBZ0lDQWdibUZ0WlZ4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHJaWGxWYm1seGRXVXBJSHRjYmlBZ0lDQjJZWElnYldGd2NHVmtRMmhwYkdRZ1BWeHVJQ0FnSUNBZ2JXRndRbTl2YTB0bFpYQnBibWN1YldGd1JuVnVZM1JwYjI0dVkyRnNiQ2h0WVhCQ2IyOXJTMlZsY0dsdVp5NXRZWEJEYjI1MFpYaDBMQ0JqYUdsc1pDd2dhU2s3WEc0Z0lDQWdiV0Z3VW1WemRXeDBXMjVoYldWZElEMGdiV0Z3Y0dWa1EyaHBiR1E3WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCTllYQnpJR05vYVd4a2NtVnVJSFJvWVhRZ1lYSmxJSFI1Y0dsallXeHNlU0J6Y0dWamFXWnBaV1FnWVhNZ1lIQnliM0J6TG1Ob2FXeGtjbVZ1WUM1Y2JpQXFYRzRnS2lCVWFHVWdjSEp2ZG1sa1pXUWdiV0Z3Um5WdVkzUnBiMjRvWTJocGJHUXNJR3RsZVN3Z2FXNWtaWGdwSUhkcGJHd2dZbVVnWTJGc2JHVmtJR1p2Y2lCbFlXTm9YRzRnS2lCc1pXRm1JR05vYVd4a0xseHVJQ3BjYmlBcUlGUlBSRTg2SUZSb2FYTWdiV0Y1SUd4cGEyVnNlU0JpY21WaGF5QmhibmtnWTJGc2JITWdkRzhnWUZKbFlXTjBRMmhwYkdSeVpXNHViV0Z3WUNCMGFHRjBJSGRsY21WY2JpQXFJSEJ5WlhacGIzVnpiSGtnY21Wc2VXbHVaeUJ2YmlCMGFHVWdabUZqZENCMGFHRjBJSGRsSUdkMVlYSmtaV1FnWVdkaGFXNXpkQ0J1ZFd4c0lHTm9hV3hrY21WdUxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1B5cDlJR05vYVd4a2NtVnVJRU5vYVd4a2NtVnVJSFJ5WldVZ1kyOXVkR0ZwYm1WeUxseHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZiaWdxTENCcGJuUXBmU0J0WVhCR2RXNWpkR2x2Ymk1Y2JpQXFJRUJ3WVhKaGJTQjdLbjBnYldGd1EyOXVkR1Y0ZENCRGIyNTBaWGgwSUdadmNpQnRZWEJHZFc1amRHbHZiaTVjYmlBcUlFQnlaWFIxY200Z2UyOWlhbVZqZEgwZ1QySnFaV04wSUdOdmJuUmhhVzVwYm1jZ2RHaGxJRzl5WkdWeVpXUWdiV0Z3SUc5bUlISmxjM1ZzZEhNdVhHNGdLaTljYm1aMWJtTjBhVzl1SUcxaGNFTm9hV3hrY21WdUtHTm9hV3hrY21WdUxDQm1kVzVqTENCamIyNTBaWGgwS1NCN1hHNGdJR2xtSUNoamFHbHNaSEpsYmlBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnY21WMGRYSnVJR05vYVd4a2NtVnVPMXh1SUNCOVhHNWNiaUFnZG1GeUlHMWhjRkpsYzNWc2RDQTlJSHQ5TzF4dUlDQjJZWElnZEhKaGRtVnljMlZEYjI1MFpYaDBJRDBnVFdGd1FtOXZhMHRsWlhCcGJtY3VaMlYwVUc5dmJHVmtLRzFoY0ZKbGMzVnNkQ3dnWm5WdVl5d2dZMjl1ZEdWNGRDazdYRzRnSUhSeVlYWmxjbk5sUVd4c1EyaHBiR1J5Wlc0b1kyaHBiR1J5Wlc0c0lHMWhjRk5wYm1kc1pVTm9hV3hrU1c1MGIwTnZiblJsZUhRc0lIUnlZWFpsY25ObFEyOXVkR1Y0ZENrN1hHNGdJRTFoY0VKdmIydExaV1Z3YVc1bkxuSmxiR1ZoYzJVb2RISmhkbVZ5YzJWRGIyNTBaWGgwS1R0Y2JpQWdjbVYwZFhKdUlGSmxZV04wUm5KaFoyMWxiblF1WTNKbFlYUmxLRzFoY0ZKbGMzVnNkQ2s3WEc1OVhHNWNibVoxYm1OMGFXOXVJR1p2Y2tWaFkyaFRhVzVuYkdWRGFHbHNaRVIxYlcxNUtIUnlZWFpsY25ObFEyOXVkR1Y0ZEN3Z1kyaHBiR1FzSUc1aGJXVXNJR2twSUh0Y2JpQWdjbVYwZFhKdUlHNTFiR3c3WEc1OVhHNWNiaThxS2x4dUlDb2dRMjkxYm5RZ2RHaGxJRzUxYldKbGNpQnZaaUJqYUdsc1pISmxiaUIwYUdGMElHRnlaU0IwZVhCcFkyRnNiSGtnYzNCbFkybG1hV1ZrSUdGelhHNGdLaUJnY0hKdmNITXVZMmhwYkdSeVpXNWdMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdQeXA5SUdOb2FXeGtjbVZ1SUVOb2FXeGtjbVZ1SUhSeVpXVWdZMjl1ZEdGcGJtVnlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCVWFHVWdiblZ0WW1WeUlHOW1JR05vYVd4a2NtVnVMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmpiM1Z1ZEVOb2FXeGtjbVZ1S0dOb2FXeGtjbVZ1TENCamIyNTBaWGgwS1NCN1hHNGdJSEpsZEhWeWJpQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVLR05vYVd4a2NtVnVMQ0JtYjNKRllXTm9VMmx1WjJ4bFEyaHBiR1JFZFcxdGVTd2diblZzYkNrN1hHNTlYRzVjYm5aaGNpQlNaV0ZqZEVOb2FXeGtjbVZ1SUQwZ2UxeHVJQ0JtYjNKRllXTm9PaUJtYjNKRllXTm9RMmhwYkdSeVpXNHNYRzRnSUcxaGNEb2diV0Z3UTJocGJHUnlaVzRzWEc0Z0lHTnZkVzUwT2lCamIzVnVkRU5vYVd4a2NtVnVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wUTJocGJHUnlaVzQ3WEc0aVhYMD0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q2xhc3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29tcG9uZW50XCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RXJyb3JVdGlscyA9IHJlcXVpcmUoXCIuL1JlYWN0RXJyb3JVdGlsc1wiKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZU1hcFwiKTtcbnZhciBSZWFjdExpZmVDeWNsZSA9IHJlcXVpcmUoXCIuL1JlYWN0TGlmZUN5Y2xlXCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMgPSByZXF1aXJlKFwiLi9SZWFjdFByb3BUeXBlTG9jYXRpb25zXCIpO1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNcIik7XG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlUXVldWVcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciBrZXlNaXJyb3IgPSByZXF1aXJlKFwiLi9rZXlNaXJyb3JcIik7XG52YXIga2V5T2YgPSByZXF1aXJlKFwiLi9rZXlPZlwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIE1JWElOU19LRVkgPSBrZXlPZih7bWl4aW5zOiBudWxsfSk7XG5cbi8qKlxuICogUG9saWNpZXMgdGhhdCBkZXNjcmliZSBtZXRob2RzIGluIGBSZWFjdENsYXNzSW50ZXJmYWNlYC5cbiAqL1xudmFyIFNwZWNQb2xpY3kgPSBrZXlNaXJyb3Ioe1xuICAvKipcbiAgICogVGhlc2UgbWV0aG9kcyBtYXkgYmUgZGVmaW5lZCBvbmx5IG9uY2UgYnkgdGhlIGNsYXNzIHNwZWNpZmljYXRpb24gb3IgbWl4aW4uXG4gICAqL1xuICBERUZJTkVfT05DRTogbnVsbCxcbiAgLyoqXG4gICAqIFRoZXNlIG1ldGhvZHMgbWF5IGJlIGRlZmluZWQgYnkgYm90aCB0aGUgY2xhc3Mgc3BlY2lmaWNhdGlvbiBhbmQgbWl4aW5zLlxuICAgKiBTdWJzZXF1ZW50IGRlZmluaXRpb25zIHdpbGwgYmUgY2hhaW5lZC4gVGhlc2UgbWV0aG9kcyBtdXN0IHJldHVybiB2b2lkLlxuICAgKi9cbiAgREVGSU5FX01BTlk6IG51bGwsXG4gIC8qKlxuICAgKiBUaGVzZSBtZXRob2RzIGFyZSBvdmVycmlkaW5nIHRoZSBiYXNlIGNsYXNzLlxuICAgKi9cbiAgT1ZFUlJJREVfQkFTRTogbnVsbCxcbiAgLyoqXG4gICAqIFRoZXNlIG1ldGhvZHMgYXJlIHNpbWlsYXIgdG8gREVGSU5FX01BTlksIGV4Y2VwdCB3ZSBhc3N1bWUgdGhleSByZXR1cm5cbiAgICogb2JqZWN0cy4gV2UgdHJ5IHRvIG1lcmdlIHRoZSBrZXlzIG9mIHRoZSByZXR1cm4gdmFsdWVzIG9mIGFsbCB0aGUgbWl4ZWQgaW5cbiAgICogZnVuY3Rpb25zLiBJZiB0aGVyZSBpcyBhIGtleSBjb25mbGljdCB3ZSB0aHJvdy5cbiAgICovXG4gIERFRklORV9NQU5ZX01FUkdFRDogbnVsbFxufSk7XG5cblxudmFyIGluamVjdGVkTWl4aW5zID0gW107XG5cbi8qKlxuICogQ29tcG9zaXRlIGNvbXBvbmVudHMgYXJlIGhpZ2hlci1sZXZlbCBjb21wb25lbnRzIHRoYXQgY29tcG9zZSBvdGhlciBjb21wb3NpdGVcbiAqIG9yIG5hdGl2ZSBjb21wb25lbnRzLlxuICpcbiAqIFRvIGNyZWF0ZSBhIG5ldyB0eXBlIG9mIGBSZWFjdENsYXNzYCwgcGFzcyBhIHNwZWNpZmljYXRpb24gb2ZcbiAqIHlvdXIgbmV3IGNsYXNzIHRvIGBSZWFjdC5jcmVhdGVDbGFzc2AuIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHlvdXIgY2xhc3NcbiAqIHNwZWNpZmljYXRpb24gaXMgdGhhdCB5b3UgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLlxuICpcbiAqICAgdmFyIE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gKiAgICAgICByZXR1cm4gPGRpdj5IZWxsbyBXb3JsZDwvZGl2PjtcbiAqICAgICB9XG4gKiAgIH0pO1xuICpcbiAqIFRoZSBjbGFzcyBzcGVjaWZpY2F0aW9uIHN1cHBvcnRzIGEgc3BlY2lmaWMgcHJvdG9jb2wgb2YgbWV0aG9kcyB0aGF0IGhhdmVcbiAqIHNwZWNpYWwgbWVhbmluZyAoZS5nLiBgcmVuZGVyYCkuIFNlZSBgUmVhY3RDbGFzc0ludGVyZmFjZWAgZm9yXG4gKiBtb3JlIHRoZSBjb21wcmVoZW5zaXZlIHByb3RvY29sLiBBbnkgb3RoZXIgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBpbiB0aGVcbiAqIGNsYXNzIHNwZWNpZmljYXRpb24gd2lsbCBhdmFpbGFibGUgb24gdGhlIHByb3RvdHlwZS5cbiAqXG4gKiBAaW50ZXJmYWNlIFJlYWN0Q2xhc3NJbnRlcmZhY2VcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RDbGFzc0ludGVyZmFjZSA9IHtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgTWl4aW4gb2JqZWN0cyB0byBpbmNsdWRlIHdoZW4gZGVmaW5pbmcgeW91ciBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHthcnJheX1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBtaXhpbnM6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBvblxuICAgKiB0aGUgY29tcG9uZW50J3MgY29uc3RydWN0b3IgaW5zdGVhZCBvZiBpdHMgcHJvdG90eXBlIChzdGF0aWMgbWV0aG9kcykuXG4gICAqXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgc3RhdGljczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogRGVmaW5pdGlvbiBvZiBwcm9wIHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBwcm9wVHlwZXM6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29udGV4dFR5cGVzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBEZWZpbml0aW9uIG9mIGNvbnRleHQgdHlwZXMgdGhpcyBjb21wb25lbnQgc2V0cyBmb3IgaXRzIGNoaWxkcmVuLlxuICAgKlxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGNoaWxkQ29udGV4dFR5cGVzOiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8vID09PT0gRGVmaW5pdGlvbiBtZXRob2RzID09PT1cblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdpbGwgYmUgc2V0IG9uXG4gICAqIGB0aGlzLnByb3BzYCBpZiB0aGF0IHByb3AgaXMgbm90IHNwZWNpZmllZCAoaS5lLiB1c2luZyBhbiBgaW5gIGNoZWNrKS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYGdldEluaXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgcmVseVxuICAgKiBvbiBgdGhpcy5zdGF0ZWAgb3IgdXNlIGB0aGlzLnNldFN0YXRlYC5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGdldERlZmF1bHRQcm9wczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQsXG5cbiAgLyoqXG4gICAqIEludm9rZWQgb25jZSBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZFxuICAgKiBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgdGhpcy5zdGF0ZWAuXG4gICAqXG4gICAqICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICogICAgIHJldHVybiB7XG4gICAqICAgICAgIGlzT246IGZhbHNlLFxuICAgKiAgICAgICBmb29CYXo6IG5ldyBCYXpGb28oKVxuICAgKiAgICAgfVxuICAgKiAgIH1cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIGdldEluaXRpYWxTdGF0ZTogU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQsXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBnZXRDaGlsZENvbnRleHQ6IFNwZWNQb2xpY3kuREVGSU5FX01BTllfTUVSR0VELFxuXG4gIC8qKlxuICAgKiBVc2VzIHByb3BzIGZyb20gYHRoaXMucHJvcHNgIGFuZCBzdGF0ZSBmcm9tIGB0aGlzLnN0YXRlYCB0byByZW5kZXIgdGhlXG4gICAqIHN0cnVjdHVyZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGFib3V0IHdoZW4gb3IgaG93IG9mdGVuIHRoaXMgbWV0aG9kIGlzIGludm9rZWQsIHNvXG4gICAqIGl0IG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzLlxuICAgKlxuICAgKiAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAqICAgICB2YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTtcbiAgICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+O1xuICAgKiAgIH1cbiAgICpcbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9XG4gICAqIEBub3NpZGVlZmZlY3RzXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgcmVuZGVyOiBTcGVjUG9saWN5LkRFRklORV9PTkNFLFxuXG5cblxuICAvLyA9PT09IERlbGVnYXRlIG1ldGhvZHMgPT09PVxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgY3JlYXRlZCBhbmQgYWJvdXQgdG8gYmUgbW91bnRlZC5cbiAgICogVGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMsIGJ1dCBhbnkgZXh0ZXJuYWwgc3Vic2NyaXB0aW9ucyBvciBkYXRhIGNyZWF0ZWRcbiAgICogYnkgdGhpcyBtZXRob2QgbXVzdCBiZSBjbGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuXG4gICAqXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50V2lsbE1vdW50OiBTcGVjUG9saWN5LkRFRklORV9NQU5ZLFxuXG4gIC8qKlxuICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBtb3VudGVkIGFuZCBoYXMgYSBET00gcmVwcmVzZW50YXRpb24uXG4gICAqIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBET00gbm9kZSBpcyBpbiB0aGUgZG9jdW1lbnQuXG4gICAqXG4gICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzXG4gICAqIGJlZW4gbW91bnRlZCAoaW5pdGlhbGl6ZWQgYW5kIHJlbmRlcmVkKSBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50RGlkTW91bnQ6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIEludm9rZWQgYmVmb3JlIHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgbmV3IHByb3BzLlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byByZWFjdCB0byBhIHByb3AgdHJhbnNpdGlvbiBieSB1cGRhdGluZyB0aGVcbiAgICogc3RhdGUgdXNpbmcgYHRoaXMuc2V0U3RhdGVgLiBDdXJyZW50IHByb3BzIGFyZSBhY2Nlc3NlZCB2aWEgYHRoaXMucHJvcHNgLlxuICAgKlxuICAgKiAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dENvbnRleHQpIHtcbiAgICogICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgKiAgICAgICBsaWtlc0luY3JlYXNpbmc6IG5leHRQcm9wcy5saWtlQ291bnQgPiB0aGlzLnByb3BzLmxpa2VDb3VudFxuICAgKiAgICAgfSk7XG4gICAqICAgfVxuICAgKlxuICAgKiBOT1RFOiBUaGVyZSBpcyBubyBlcXVpdmFsZW50IGBjb21wb25lbnRXaWxsUmVjZWl2ZVN0YXRlYC4gQW4gaW5jb21pbmcgcHJvcFxuICAgKiB0cmFuc2l0aW9uIG1heSBjYXVzZSBhIHN0YXRlIGNoYW5nZSwgYnV0IHRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZS4gSWYgeW91XG4gICAqIG5lZWQgaXQsIHlvdSBhcmUgcHJvYmFibHkgbG9va2luZyBmb3IgYGNvbXBvbmVudFdpbGxVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGlsZSBkZWNpZGluZyBpZiB0aGUgY29tcG9uZW50IHNob3VsZCBiZSB1cGRhdGVkIGFzIGEgcmVzdWx0IG9mXG4gICAqIHJlY2VpdmluZyBuZXcgcHJvcHMsIHN0YXRlIGFuZC9vciBjb250ZXh0LlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBgcmV0dXJuIGZhbHNlYCB3aGVuIHlvdSdyZSBjZXJ0YWluIHRoYXQgdGhlXG4gICAqIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBwcm9wcy9zdGF0ZS9jb250ZXh0IHdpbGwgbm90IHJlcXVpcmUgYSBjb21wb25lbnRcbiAgICogdXBkYXRlLlxuICAgKlxuICAgKiAgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gICAqICAgICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcykgfHxcbiAgICogICAgICAgIWVxdWFsKG5leHRTdGF0ZSwgdGhpcy5zdGF0ZSkgfHxcbiAgICogICAgICAgIWVxdWFsKG5leHRDb250ZXh0LCB0aGlzLmNvbnRleHQpO1xuICAgKiAgIH1cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRDb250ZXh0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlLlxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZTogU3BlY1BvbGljeS5ERUZJTkVfT05DRSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8gdXBkYXRlIGR1ZSB0byBhIHRyYW5zaXRpb24gZnJvbVxuICAgKiBgdGhpcy5wcm9wc2AsIGB0aGlzLnN0YXRlYCBhbmQgYHRoaXMuY29udGV4dGAgdG8gYG5leHRQcm9wc2AsIGBuZXh0U3RhdGVgXG4gICAqIGFuZCBgbmV4dENvbnRleHRgLlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBwZXJmb3JtIHByZXBhcmF0aW9uIGJlZm9yZSBhbiB1cGRhdGUgb2NjdXJzLlxuICAgKlxuICAgKiBOT1RFOiBZb3UgKipjYW5ub3QqKiB1c2UgYHRoaXMuc2V0U3RhdGUoKWAgaW4gdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0U3RhdGVcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dFxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBvcHRpb25hbFxuICAgKi9cbiAgY29tcG9uZW50V2lsbFVwZGF0ZTogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQncyBET00gcmVwcmVzZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZC5cbiAgICpcbiAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXNcbiAgICogYmVlbiB1cGRhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJldlByb3BzXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcHJldlN0YXRlXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNvbnRleHRcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudC5cbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjb21wb25lbnREaWRVcGRhdGU6IFNwZWNQb2xpY3kuREVGSU5FX01BTlksXG5cbiAgLyoqXG4gICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50IGFuZCBoYXZlXG4gICAqIGl0cyBET00gcmVwcmVzZW50YXRpb24gZGVzdHJveWVkLlxuICAgKlxuICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBkZWFsbG9jYXRlIGFueSBleHRlcm5hbCByZXNvdXJjZXMuXG4gICAqXG4gICAqIE5PVEU6IFRoZXJlIGlzIG5vIGBjb21wb25lbnREaWRVbm1vdW50YCBzaW5jZSB5b3VyIGNvbXBvbmVudCB3aWxsIGhhdmUgYmVlblxuICAgKiBkZXN0cm95ZWQgYnkgdGhhdCBwb2ludC5cbiAgICpcbiAgICogQG9wdGlvbmFsXG4gICAqL1xuICBjb21wb25lbnRXaWxsVW5tb3VudDogU3BlY1BvbGljeS5ERUZJTkVfTUFOWSxcblxuXG5cbiAgLy8gPT09PSBBZHZhbmNlZCBtZXRob2RzID09PT1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29tcG9uZW50J3MgY3VycmVudGx5IG1vdW50ZWQgRE9NIHJlcHJlc2VudGF0aW9uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIGltcGxlbWVudHMgUmVhY3QncyByZW5kZXJpbmcgYW5kIHJlY29uY2lsaWF0aW9uIGFsZ29yaXRobS5cbiAgICogU29waGlzdGljYXRlZCBjbGllbnRzIG1heSB3aXNoIHRvIG92ZXJyaWRlIHRoaXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50OiBTcGVjUG9saWN5Lk9WRVJSSURFX0JBU0VcblxufTtcblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gY2xhc3Mgc3BlY2lmaWNhdGlvbiBrZXlzIHRvIHNwZWNpYWwgcHJvY2Vzc2luZyBmdW5jdGlvbnMuXG4gKlxuICogQWx0aG91Z2ggdGhlc2UgYXJlIGRlY2xhcmVkIGxpa2UgaW5zdGFuY2UgcHJvcGVydGllcyBpbiB0aGUgc3BlY2lmaWNhdGlvblxuICogd2hlbiBkZWZpbmluZyBjbGFzc2VzIHVzaW5nIGBSZWFjdC5jcmVhdGVDbGFzc2AsIHRoZXkgYXJlIGFjdHVhbGx5IHN0YXRpY1xuICogYW5kIGFyZSBhY2Nlc3NpYmxlIG9uIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHRoZSBwcm90b3R5cGUuIERlc3BpdGVcbiAqIGJlaW5nIHN0YXRpYywgdGhleSBtdXN0IGJlIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgXCJzdGF0aWNzXCIga2V5IHVuZGVyXG4gKiB3aGljaCBhbGwgb3RoZXIgc3RhdGljIG1ldGhvZHMgYXJlIGRlZmluZWQuXG4gKi9cbnZhciBSRVNFUlZFRF9TUEVDX0tFWVMgPSB7XG4gIGRpc3BsYXlOYW1lOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgZGlzcGxheU5hbWUpIHtcbiAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICB9LFxuICBtaXhpbnM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBtaXhpbnMpIHtcbiAgICBpZiAobWl4aW5zKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1peGlucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3RvciwgbWl4aW5zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGNoaWxkQ29udGV4dFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICB2YWxpZGF0ZVR5cGVEZWYoXG4gICAgICAgIENvbnN0cnVjdG9yLFxuICAgICAgICBjaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5jaGlsZENvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICAgIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID0gYXNzaWduKFxuICAgICAge30sXG4gICAgICBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyxcbiAgICAgIGNoaWxkQ29udGV4dFR5cGVzXG4gICAgKTtcbiAgfSxcbiAgY29udGV4dFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFsaWRhdGVUeXBlRGVmKFxuICAgICAgICBDb25zdHJ1Y3RvcixcbiAgICAgICAgY29udGV4dFR5cGVzLFxuICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLmNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICAgIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcyA9IGFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzLFxuICAgICAgY29udGV4dFR5cGVzXG4gICAgKTtcbiAgfSxcbiAgLyoqXG4gICAqIFNwZWNpYWwgY2FzZSBnZXREZWZhdWx0UHJvcHMgd2hpY2ggc2hvdWxkIG1vdmUgaW50byBzdGF0aWNzIGJ1dCByZXF1aXJlc1xuICAgKiBhdXRvbWF0aWMgbWVyZ2luZy5cbiAgICovXG4gIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGdldERlZmF1bHRQcm9wcykge1xuICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKFxuICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMsXG4gICAgICAgIGdldERlZmF1bHRQcm9wc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gZ2V0RGVmYXVsdFByb3BzO1xuICAgIH1cbiAgfSxcbiAgcHJvcFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgcHJvcFR5cGVzKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFsaWRhdGVUeXBlRGVmKFxuICAgICAgICBDb25zdHJ1Y3RvcixcbiAgICAgICAgcHJvcFR5cGVzLFxuICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLnByb3BcbiAgICAgICk7XG4gICAgfVxuICAgIENvbnN0cnVjdG9yLnByb3BUeXBlcyA9IGFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgQ29uc3RydWN0b3IucHJvcFR5cGVzLFxuICAgICAgcHJvcFR5cGVzXG4gICAgKTtcbiAgfSxcbiAgc3RhdGljczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIHN0YXRpY3MpIHtcbiAgICBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgdHlwZURlZiwgbG9jYXRpb24pIHtcbiAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdHlwZURlZikge1xuICAgIGlmICh0eXBlRGVmLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgLy8gdXNlIGEgd2FybmluZyBpbnN0ZWFkIG9mIGFuIGludmFyaWFudCBzbyBjb21wb25lbnRzXG4gICAgICAvLyBkb24ndCBzaG93IHVwIGluIHByb2QgYnV0IG5vdCBpbiBfX0RFVl9fXG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgdHlwZW9mIHR5cGVEZWZbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nLFxuICAgICAgICAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICtcbiAgICAgICAgJ1JlYWN0LlByb3BUeXBlcy4nLFxuICAgICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDbGFzcycsXG4gICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSxcbiAgICAgICAgcHJvcE5hbWVcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVNZXRob2RPdmVycmlkZShwcm90bywgbmFtZSkge1xuICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSkgP1xuICAgIFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV0gOlxuICAgIG51bGw7XG5cbiAgLy8gRGlzYWxsb3cgb3ZlcnJpZGluZyBvZiBiYXNlIGNsYXNzIG1ldGhvZHMgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC5cbiAgaWYgKFJlYWN0Q2xhc3NNaXhpbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5Lk9WRVJSSURFX0JBU0UsXG4gICAgICAnUmVhY3RDbGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIG92ZXJyaWRlICcgK1xuICAgICAgJ2Alc2AgZnJvbSB5b3VyIGNsYXNzIHNwZWNpZmljYXRpb24uIEVuc3VyZSB0aGF0IHlvdXIgbWV0aG9kIG5hbWVzICcgK1xuICAgICAgJ2RvIG5vdCBvdmVybGFwIHdpdGggUmVhY3QgbWV0aG9kcy4nLFxuICAgICAgbmFtZVxuICAgICkgOiBpbnZhcmlhbnQoc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5PVkVSUklERV9CQVNFKSk7XG4gIH1cblxuICAvLyBEaXNhbGxvdyBkZWZpbmluZyBtZXRob2RzIG1vcmUgdGhhbiBvbmNlIHVubGVzcyBleHBsaWNpdGx5IGFsbG93ZWQuXG4gIGlmIChwcm90by5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZIHx8XG4gICAgICBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCxcbiAgICAgICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lICcgK1xuICAgICAgJ2Alc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSAnICtcbiAgICAgICd0byBhIG1peGluLicsXG4gICAgICBuYW1lXG4gICAgKSA6IGludmFyaWFudChzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZIHx8XG4gICAgc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQpKTtcbiAgfVxufVxuXG4vKipcbiAqIE1peGluIGhlbHBlciB3aGljaCBoYW5kbGVzIHBvbGljeSB2YWxpZGF0aW9uIGFuZCByZXNlcnZlZFxuICogc3BlY2lmaWNhdGlvbiBrZXlzIHdoZW4gYnVpbGRpbmcgUmVhY3QgY2xhc3NzZXMuXG4gKi9cbmZ1bmN0aW9uIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzcGVjKSB7XG4gIGlmICghc3BlYykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgdHlwZW9mIHNwZWMgIT09ICdmdW5jdGlvbicsXG4gICAgJ1JlYWN0Q2xhc3M6IFlvdVxcJ3JlIGF0dGVtcHRpbmcgdG8gJyArXG4gICAgJ3VzZSBhIGNvbXBvbmVudCBjbGFzcyBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LidcbiAgKSA6IGludmFyaWFudCh0eXBlb2Ygc3BlYyAhPT0gJ2Z1bmN0aW9uJykpO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoc3BlYyksXG4gICAgJ1JlYWN0Q2xhc3M6IFlvdVxcJ3JlIGF0dGVtcHRpbmcgdG8gJyArXG4gICAgJ3VzZSBhIGNvbXBvbmVudCBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LidcbiAgKSA6IGludmFyaWFudCghUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHNwZWMpKSk7XG5cbiAgdmFyIHByb3RvID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gIC8vIEJ5IGhhbmRsaW5nIG1peGlucyBiZWZvcmUgYW55IG90aGVyIHByb3BlcnRpZXMsIHdlIGVuc3VyZSB0aGUgc2FtZVxuICAvLyBjaGFpbmluZyBvcmRlciBpcyBhcHBsaWVkIHRvIG1ldGhvZHMgd2l0aCBERUZJTkVfTUFOWSBwb2xpY3ksIHdoZXRoZXJcbiAgLy8gbWl4aW5zIGFyZSBsaXN0ZWQgYmVmb3JlIG9yIGFmdGVyIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHNwZWMuXG4gIGlmIChzcGVjLmhhc093blByb3BlcnR5KE1JWElOU19LRVkpKSB7XG4gICAgUkVTRVJWRURfU1BFQ19LRVlTLm1peGlucyhDb25zdHJ1Y3Rvciwgc3BlYy5taXhpbnMpO1xuICB9XG5cbiAgZm9yICh2YXIgbmFtZSBpbiBzcGVjKSB7XG4gICAgaWYgKCFzcGVjLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobmFtZSA9PT0gTUlYSU5TX0tFWSkge1xuICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgbWl4aW5zIGluIGEgc3BlY2lhbCBjYXNlIGFib3ZlXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcGVydHkgPSBzcGVjW25hbWVdO1xuICAgIHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUocHJvdG8sIG5hbWUpO1xuXG4gICAgaWYgKFJFU0VSVkVEX1NQRUNfS0VZUy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgUkVTRVJWRURfU1BFQ19LRVlTW25hbWVdKENvbnN0cnVjdG9yLCBwcm9wZXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNldHVwIG1ldGhvZHMgb24gcHJvdG90eXBlOlxuICAgICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXIgbWV0aG9kcyBzaG91bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgYm91bmQ6XG4gICAgICAvLyAxLiBFeHBlY3RlZCBSZWFjdENsYXNzIG1ldGhvZHMgKGluIHRoZSBcImludGVyZmFjZVwiKS5cbiAgICAgIC8vIDIuIE92ZXJyaWRkZW4gbWV0aG9kcyAodGhhdCB3ZXJlIG1peGVkIGluKS5cbiAgICAgIHZhciBpc1JlYWN0Q2xhc3NNZXRob2QgPVxuICAgICAgICBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpO1xuICAgICAgdmFyIGlzQWxyZWFkeURlZmluZWQgPSBwcm90by5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgICAgIHZhciBtYXJrZWREb250QmluZCA9IHByb3BlcnR5ICYmIHByb3BlcnR5Ll9fcmVhY3REb250QmluZDtcbiAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nO1xuICAgICAgdmFyIHNob3VsZEF1dG9CaW5kID1cbiAgICAgICAgaXNGdW5jdGlvbiAmJlxuICAgICAgICAhaXNSZWFjdENsYXNzTWV0aG9kICYmXG4gICAgICAgICFpc0FscmVhZHlEZWZpbmVkICYmXG4gICAgICAgICFtYXJrZWREb250QmluZDtcblxuICAgICAgaWYgKHNob3VsZEF1dG9CaW5kKSB7XG4gICAgICAgIGlmICghcHJvdG8uX19yZWFjdEF1dG9CaW5kTWFwKSB7XG4gICAgICAgICAgcHJvdG8uX19yZWFjdEF1dG9CaW5kTWFwID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcHJvdG8uX19yZWFjdEF1dG9CaW5kTWFwW25hbWVdID0gcHJvcGVydHk7XG4gICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkge1xuICAgICAgICAgIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFjZVtuYW1lXTtcblxuICAgICAgICAgIC8vIFRoZXNlIGNhc2VzIHNob3VsZCBhbHJlYWR5IGJlIGNhdWdodCBieSB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlXG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICAgIGlzUmVhY3RDbGFzc01ldGhvZCAmJiAoXG4gICAgICAgICAgICAgIChzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCB8fCBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICdSZWFjdENsYXNzOiBVbmV4cGVjdGVkIHNwZWMgcG9saWN5ICVzIGZvciBrZXkgJXMgJyArXG4gICAgICAgICAgICAnd2hlbiBtaXhpbmcgaW4gY29tcG9uZW50IHNwZWNzLicsXG4gICAgICAgICAgICBzcGVjUG9saWN5LFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICkgOiBpbnZhcmlhbnQoaXNSZWFjdENsYXNzTWV0aG9kICYmIChcbiAgICAgICAgICAgIChzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZX01FUkdFRCB8fCBzcGVjUG9saWN5ID09PSBTcGVjUG9saWN5LkRFRklORV9NQU5ZKVxuICAgICAgICAgICkpKTtcblxuICAgICAgICAgIC8vIEZvciBtZXRob2RzIHdoaWNoIGFyZSBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlLCBjYWxsIHRoZSBleGlzdGluZ1xuICAgICAgICAgIC8vIG1ldGhvZHMgYmVmb3JlIGNhbGxpbmcgdGhlIG5ldyBwcm9wZXJ0eSwgbWVyZ2luZyBpZiBhcHByb3ByaWF0ZS5cbiAgICAgICAgICBpZiAoc3BlY1BvbGljeSA9PT0gU3BlY1BvbGljeS5ERUZJTkVfTUFOWV9NRVJHRUQpIHtcbiAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3BlcnR5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNQb2xpY3kgPT09IFNwZWNQb2xpY3kuREVGSU5FX01BTlkpIHtcbiAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7XG4gICAgICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAgICAgLy8gQWRkIHZlcmJvc2UgZGlzcGxheU5hbWUgdG8gdGhlIGZ1bmN0aW9uLCB3aGljaCBoZWxwcyB3aGVuIGxvb2tpbmdcbiAgICAgICAgICAgIC8vIGF0IHByb2ZpbGluZyB0b29scy5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgc3BlYy5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgICAgICBwcm90b1tuYW1lXS5kaXNwbGF5TmFtZSA9IHNwZWMuZGlzcGxheU5hbWUgKyAnXycgKyBuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcykge1xuICBpZiAoIXN0YXRpY3MpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yICh2YXIgbmFtZSBpbiBzdGF0aWNzKSB7XG4gICAgdmFyIHByb3BlcnR5ID0gc3RhdGljc1tuYW1lXTtcbiAgICBpZiAoIXN0YXRpY3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBpc1Jlc2VydmVkID0gbmFtZSBpbiBSRVNFUlZFRF9TUEVDX0tFWVM7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICFpc1Jlc2VydmVkLFxuICAgICAgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgYSByZXNlcnZlZCAnICtcbiAgICAgICdwcm9wZXJ0eSwgYCVzYCwgdGhhdCBzaG91bGRuXFwndCBiZSBvbiB0aGUgXCJzdGF0aWNzXCIga2V5LiBEZWZpbmUgaXQgJyArXG4gICAgICAnYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgaW5zdGVhZDsgaXQgd2lsbCBzdGlsbCBiZSBhY2Nlc3NpYmxlIG9uIHRoZSAnICtcbiAgICAgICdjb25zdHJ1Y3Rvci4nLFxuICAgICAgbmFtZVxuICAgICkgOiBpbnZhcmlhbnQoIWlzUmVzZXJ2ZWQpKTtcblxuICAgIHZhciBpc0luaGVyaXRlZCA9IG5hbWUgaW4gQ29uc3RydWN0b3I7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICFpc0luaGVyaXRlZCxcbiAgICAgICdSZWFjdENsYXNzOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lICcgK1xuICAgICAgJ2Alc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlICcgK1xuICAgICAgJ2R1ZSB0byBhIG1peGluLicsXG4gICAgICBuYW1lXG4gICAgKSA6IGludmFyaWFudCghaXNJbmhlcml0ZWQpKTtcbiAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IHByb3BlcnR5O1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9iamVjdHMsIGJ1dCB0aHJvdyBpZiBib3RoIGNvbnRhaW4gdGhlIHNhbWUga2V5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvbmUgVGhlIGZpcnN0IG9iamVjdCwgd2hpY2ggaXMgbXV0YXRlZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSB0d28gVGhlIHNlY29uZCBvYmplY3RcbiAqIEByZXR1cm4ge29iamVjdH0gb25lIGFmdGVyIGl0IGhhcyBiZWVuIG11dGF0ZWQgdG8gY29udGFpbiBldmVyeXRoaW5nIGluIHR3by5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhvbmUsIHR3bykge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIG9uZSAmJiB0d28gJiYgdHlwZW9mIG9uZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcsXG4gICAgJ21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogQ2Fubm90IG1lcmdlIG5vbi1vYmplY3RzLidcbiAgKSA6IGludmFyaWFudChvbmUgJiYgdHdvICYmIHR5cGVvZiBvbmUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0d28gPT09ICdvYmplY3QnKSk7XG5cbiAgZm9yICh2YXIga2V5IGluIHR3bykge1xuICAgIGlmICh0d28uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgb25lW2tleV0gPT09IHVuZGVmaW5lZCxcbiAgICAgICAgJ21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogJyArXG4gICAgICAgICdUcmllZCB0byBtZXJnZSB0d28gb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGtleTogYCVzYC4gVGhpcyBjb25mbGljdCAnICtcbiAgICAgICAgJ21heSBiZSBkdWUgdG8gYSBtaXhpbjsgaW4gcGFydGljdWxhciwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHR3byAnICtcbiAgICAgICAgJ2dldEluaXRpYWxTdGF0ZSgpIG9yIGdldERlZmF1bHRQcm9wcygpIG1ldGhvZHMgcmV0dXJuaW5nIG9iamVjdHMgJyArXG4gICAgICAgICd3aXRoIGNsYXNoaW5nIGtleXMuJyxcbiAgICAgICAga2V5XG4gICAgICApIDogaW52YXJpYW50KG9uZVtrZXldID09PSB1bmRlZmluZWQpKTtcbiAgICAgIG9uZVtrZXldID0gdHdvW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvbmU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0d28gZnVuY3Rpb25zIGFuZCBtZXJnZXMgdGhlaXIgcmV0dXJuIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbmUgRnVuY3Rpb24gdG8gaW52b2tlIGZpcnN0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gdHdvIEZ1bmN0aW9uIHRvIGludm9rZSBzZWNvbmQuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ob25lLCB0d28pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZFJlc3VsdCgpIHtcbiAgICB2YXIgYSA9IG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHZhciBiID0gdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGEgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGI7XG4gICAgfSBlbHNlIGlmIChiID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgICB2YXIgYyA9IHt9O1xuICAgIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYSk7XG4gICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBiKTtcbiAgICByZXR1cm4gYztcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIGlnbm9yZXMgdGhlaXIgcmV0dXJuIHZhbGVzLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHR3byBhcmd1bWVudCBmdW5jdGlvbnMuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ob25lLCB0d28pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbigpIHtcbiAgICBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0d28uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBCaW5kcyBhIG1ldGhvZCB0byB0aGUgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb21wb25lbnQgQ29tcG9uZW50IHdob3NlIG1ldGhvZCBpcyBnb2luZyB0byBiZSBib3VuZC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCBNZXRob2QgdG8gYmUgYm91bmQuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGJvdW5kIG1ldGhvZC5cbiAqL1xuZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKSB7XG4gIHZhciBib3VuZE1ldGhvZCA9IG1ldGhvZC5iaW5kKGNvbXBvbmVudCk7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRDb250ZXh0ID0gY29tcG9uZW50O1xuICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDtcbiAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBudWxsO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gY29tcG9uZW50LmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lO1xuICAgIHZhciBfYmluZCA9IGJvdW5kTWV0aG9kLmJpbmQ7XG4gICAgLyogZXNsaW50LWRpc2FibGUgYmxvY2stc2NvcGVkLXZhciwgbm8tdW5kZWYgKi9cbiAgICBib3VuZE1ldGhvZC5iaW5kID0gZnVuY3Rpb24obmV3VGhpcyApIHtmb3IgKHZhciBhcmdzPVtdLCRfXzA9MSwkX18xPWFyZ3VtZW50cy5sZW5ndGg7JF9fMDwkX18xOyRfXzArKykgYXJncy5wdXNoKGFyZ3VtZW50c1skX18wXSk7XG4gICAgICAvLyBVc2VyIGlzIHRyeWluZyB0byBiaW5kKCkgYW4gYXV0b2JvdW5kIG1ldGhvZDsgd2UgZWZmZWN0aXZlbHkgd2lsbFxuICAgICAgLy8gaWdub3JlIHRoZSB2YWx1ZSBvZiBcInRoaXNcIiB0aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byB1c2UsIHNvXG4gICAgICAvLyBsZXQncyB3YXJuLlxuICAgICAgaWYgKG5ld1RoaXMgIT09IGNvbXBvbmVudCAmJiBuZXdUaGlzICE9PSBudWxsKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdiaW5kKCk6IFJlYWN0IGNvbXBvbmVudCBtZXRob2RzIG1heSBvbmx5IGJlIGJvdW5kIHRvIHRoZSAnICtcbiAgICAgICAgICAnY29tcG9uZW50IGluc3RhbmNlLiBTZWUgJXMnLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgfSBlbHNlIGlmICghYXJncy5sZW5ndGgpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ2JpbmQoKTogWW91IGFyZSBiaW5kaW5nIGEgY29tcG9uZW50IG1ldGhvZCB0byB0aGUgY29tcG9uZW50LiAnICtcbiAgICAgICAgICAnUmVhY3QgZG9lcyB0aGlzIGZvciB5b3UgYXV0b21hdGljYWxseSBpbiBhIGhpZ2gtcGVyZm9ybWFuY2UgJyArXG4gICAgICAgICAgJ3dheSwgc28geW91IGNhbiBzYWZlbHkgcmVtb3ZlIHRoaXMgY2FsbC4gU2VlICVzJyxcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgcmV0dXJuIGJvdW5kTWV0aG9kO1xuICAgICAgfVxuICAgICAgdmFyIHJlYm91bmRNZXRob2QgPSBfYmluZC5hcHBseShib3VuZE1ldGhvZCwgYXJndW1lbnRzKTtcbiAgICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDtcbiAgICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kO1xuICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBhcmdzO1xuICAgICAgcmV0dXJuIHJlYm91bmRNZXRob2Q7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfTtcbiAgfVxuICByZXR1cm4gYm91bmRNZXRob2Q7XG59XG5cbi8qKlxuICogQmluZHMgYWxsIGF1dG8tYm91bmQgbWV0aG9kcyBpbiBhIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gKi9cbmZ1bmN0aW9uIGJpbmRBdXRvQmluZE1ldGhvZHMoY29tcG9uZW50KSB7XG4gIGZvciAodmFyIGF1dG9CaW5kS2V5IGluIGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRNYXApIHtcbiAgICBpZiAoY29tcG9uZW50Ll9fcmVhY3RBdXRvQmluZE1hcC5oYXNPd25Qcm9wZXJ0eShhdXRvQmluZEtleSkpIHtcbiAgICAgIHZhciBtZXRob2QgPSBjb21wb25lbnQuX19yZWFjdEF1dG9CaW5kTWFwW2F1dG9CaW5kS2V5XTtcbiAgICAgIGNvbXBvbmVudFthdXRvQmluZEtleV0gPSBiaW5kQXV0b0JpbmRNZXRob2QoXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgUmVhY3RFcnJvclV0aWxzLmd1YXJkKFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBjb21wb25lbnQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgKyAnLicgKyBhdXRvQmluZEtleVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdHlwZURlcHJlY2F0aW9uRGVzY3JpcHRvciA9IHtcbiAgZW51bWVyYWJsZTogZmFsc2UsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gdGhpcy5kaXNwbGF5TmFtZSB8fCB0aGlzLm5hbWUgfHwgJ0NvbXBvbmVudCc7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBmYWxzZSxcbiAgICAgICclcy50eXBlIGlzIGRlcHJlY2F0ZWQuIFVzZSAlcyBkaXJlY3RseSB0byBhY2Nlc3MgdGhlIGNsYXNzLicsXG4gICAgICBkaXNwbGF5TmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lXG4gICAgKSA6IG51bGwpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgIHZhbHVlOiB0aGlzXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbi8qKlxuICogQWRkIG1vcmUgdG8gdGhlIFJlYWN0Q2xhc3MgYmFzZSBjbGFzcy4gVGhlc2UgYXJlIGFsbCBsZWdhY3kgZmVhdHVyZXMgYW5kXG4gKiB0aGVyZWZvcmUgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgbW9kZXJuIFJlYWN0Q29tcG9uZW50LlxuICovXG52YXIgUmVhY3RDbGFzc01peGluID0ge1xuXG4gIC8qKlxuICAgKiBUT0RPOiBUaGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBiZWNhdXNlIHN0YXRlIHNob3VsZCBhbHdheXMga2VlcCBhIGNvbnNpc3RlbnRcbiAgICogdHlwZSBzaWduYXR1cmUgYW5kIHRoZSBvbmx5IHVzZSBjYXNlIGZvciB0aGlzLCBpcyB0byBhdm9pZCB0aGF0LlxuICAgKi9cbiAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbihuZXdTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcywgbmV3U3RhdGUpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2spO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICAgIGlmIChvd25lciAhPT0gbnVsbCkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIsXG4gICAgICAgICAgJyVzIGlzIGFjY2Vzc2luZyBpc01vdW50ZWQgaW5zaWRlIGl0cyByZW5kZXIoKSBmdW5jdGlvbi4gJyArXG4gICAgICAgICAgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArXG4gICAgICAgICAgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgK1xuICAgICAgICAgICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICtcbiAgICAgICAgICAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJyxcbiAgICAgICAgICBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50J1xuICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIG93bmVyLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQodGhpcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIGludGVybmFsSW5zdGFuY2UgJiZcbiAgICAgIGludGVybmFsSW5zdGFuY2UgIT09IFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2VcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBwcm9wcy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxQcm9wcyBTdWJzZXQgb2YgdGhlIG5leHQgcHJvcHMuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgcHJvcHMgYXJlIHVwZGF0ZWQuXG4gICAqIEBmaW5hbFxuICAgKiBAcHVibGljXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRQcm9wczogZnVuY3Rpb24ocGFydGlhbFByb3BzLCBjYWxsYmFjaykge1xuICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZVNldFByb3BzKHRoaXMsIHBhcnRpYWxQcm9wcyk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjayk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGFsbCB0aGUgcHJvcHMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdQcm9wcyBTdWJzZXQgb2YgdGhlIG5leHQgcHJvcHMuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgcHJvcHMgYXJlIHVwZGF0ZWQuXG4gICAqIEBmaW5hbFxuICAgKiBAcHVibGljXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICByZXBsYWNlUHJvcHM6IGZ1bmN0aW9uKG5ld1Byb3BzLCBjYWxsYmFjaykge1xuICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZVJlcGxhY2VQcm9wcyh0aGlzLCBuZXdQcm9wcyk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgUmVhY3RDbGFzc0NvbXBvbmVudCA9IGZ1bmN0aW9uKCkge307XG5hc3NpZ24oXG4gIFJlYWN0Q2xhc3NDb21wb25lbnQucHJvdG90eXBlLFxuICBSZWFjdENvbXBvbmVudC5wcm90b3R5cGUsXG4gIFJlYWN0Q2xhc3NNaXhpblxuKTtcblxuLyoqXG4gKiBNb2R1bGUgZm9yIGNyZWF0aW5nIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICpcbiAqIEBjbGFzcyBSZWFjdENsYXNzXG4gKi9cbnZhciBSZWFjdENsYXNzID0ge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29tcG9zaXRlIGNvbXBvbmVudCBjbGFzcyBnaXZlbiBhIGNsYXNzIHNwZWNpZmljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzcGVjIENsYXNzIHNwZWNpZmljYXRpb24gKHdoaWNoIG11c3QgZGVmaW5lIGByZW5kZXJgKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IENvbXBvbmVudCBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgY3JlYXRlQ2xhc3M6IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSBmdW5jdGlvbihwcm9wcywgY29udGV4dCkge1xuICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvdmVycmlkZGVuIGJ5IG1vY2tzLiBUaGUgYXJndW1lbnQgaXMgdXNlZFxuICAgICAgLy8gYnkgbW9ja3MgdG8gYXNzZXJ0IG9uIHdoYXQgZ2V0cyBtb3VudGVkLlxuXG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIHRoaXMgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcixcbiAgICAgICAgICAnU29tZXRoaW5nIGlzIGNhbGxpbmcgYSBSZWFjdCBjb21wb25lbnQgZGlyZWN0bHkuIFVzZSBhIGZhY3Rvcnkgb3IgJyArXG4gICAgICAgICAgJ0pTWCBpbnN0ZWFkLiBTZWU6IGh0dHBzOi8vZmIubWUvcmVhY3QtbGVnYWN5ZmFjdG9yeSdcbiAgICAgICAgKSA6IG51bGwpO1xuICAgICAgfVxuXG4gICAgICAvLyBXaXJlIHVwIGF1dG8tYmluZGluZ1xuICAgICAgaWYgKHRoaXMuX19yZWFjdEF1dG9CaW5kTWFwKSB7XG4gICAgICAgIGJpbmRBdXRvQmluZE1ldGhvZHModGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgLy8gUmVhY3RDbGFzc2VzIGRvZXNuJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMuIEluc3RlYWQsIHRoZXkgdXNlIHRoZVxuICAgICAgLy8gZ2V0SW5pdGlhbFN0YXRlIGFuZCBjb21wb25lbnRXaWxsTW91bnQgbWV0aG9kcyBmb3IgaW5pdGlhbGl6YXRpb24uXG5cbiAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiBudWxsO1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICB0aGlzLmdldEluaXRpYWxTdGF0ZS5faXNNb2NrRnVuY3Rpb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFuZFxuICAgICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuXG4gICAgICAgICAgaW5pdGlhbFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgdHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSxcbiAgICAgICAgJyVzLmdldEluaXRpYWxTdGF0ZSgpOiBtdXN0IHJldHVybiBhbiBvYmplY3Qgb3IgbnVsbCcsXG4gICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdcbiAgICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkpO1xuXG4gICAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIH07XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IFJlYWN0Q2xhc3NDb21wb25lbnQoKTtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcblxuICAgIGluamVjdGVkTWl4aW5zLmZvckVhY2goXG4gICAgICBtaXhTcGVjSW50b0NvbXBvbmVudC5iaW5kKG51bGwsIENvbnN0cnVjdG9yKVxuICAgICk7XG5cbiAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYyk7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBkZWZhdWx0UHJvcHMgcHJvcGVydHkgYWZ0ZXIgYWxsIG1peGlucyBoYXZlIGJlZW4gbWVyZ2VkXG4gICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcykge1xuICAgICAgQ29uc3RydWN0b3IuZGVmYXVsdFByb3BzID0gQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKCk7XG4gICAgfVxuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgLy8gVGhpcyBpcyBhIHRhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSB1c2Ugb2YgdGhlc2UgbWV0aG9kIG5hbWVzIGlzIG9rLFxuICAgICAgLy8gc2luY2UgaXQncyB1c2VkIHdpdGggY3JlYXRlQ2xhc3MuIElmIGl0J3Mgbm90LCB0aGVuIGl0J3MgbGlrZWx5IGFcbiAgICAgIC8vIG1pc3Rha2Ugc28gd2UnbGwgd2FybiB5b3UgdG8gdXNlIHRoZSBzdGF0aWMgcHJvcGVydHksIHByb3BlcnR5XG4gICAgICAvLyBpbml0aWFsaXplciBvciBjb25zdHJ1Y3RvciByZXNwZWN0aXZlbHkuXG4gICAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yLnByb3RvdHlwZS5nZXRJbml0aWFsU3RhdGUpIHtcbiAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCA9IHt9O1xuICAgICAgfVxuICAgIH1cblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyLFxuICAgICAgJ2NyZWF0ZUNsYXNzKC4uLik6IENsYXNzIHNwZWNpZmljYXRpb24gbXVzdCBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuJ1xuICAgICkgOiBpbnZhcmlhbnQoQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlcikpO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50U2hvdWxkVXBkYXRlLFxuICAgICAgICAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICtcbiAgICAgICAgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgK1xuICAgICAgICAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgK1xuICAgICAgICAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJyxcbiAgICAgICAgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBjb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuXG4gICAgLy8gUmVkdWNlIHRpbWUgc3BlbnQgZG9pbmcgbG9va3VwcyBieSBzZXR0aW5nIHRoZXNlIG9uIHRoZSBwcm90b3R5cGUuXG4gICAgZm9yICh2YXIgbWV0aG9kTmFtZSBpbiBSZWFjdENsYXNzSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSkge1xuICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExlZ2FjeSBob29rXG4gICAgQ29uc3RydWN0b3IudHlwZSA9IENvbnN0cnVjdG9yO1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgJ3R5cGUnLCB0eXBlRGVwcmVjYXRpb25EZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgLy8gSUUgd2lsbCBmYWlsIG9uIGRlZmluZVByb3BlcnR5IChlczUtc2hpbS9zaGFtIHRvbylcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG5cbiAgaW5qZWN0aW9uOiB7XG4gICAgaW5qZWN0TWl4aW46IGZ1bmN0aW9uKG1peGluKSB7XG4gICAgICBpbmplY3RlZE1peGlucy5wdXNoKG1peGluKTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENsYXNzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRiR0Z6Y3k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRU5zWVhOelhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdVbVZoWTNSRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5WENJcE8xeHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVWeWNtOXlWWFJwYkhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnljbTl5VlhScGJITmNJaWs3WEc1MllYSWdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBTVzV6ZEdGdVkyVk5ZWEJjSWlrN1hHNTJZWElnVW1WaFkzUk1hV1psUTNsamJHVWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRXhwWm1WRGVXTnNaVndpS1R0Y2JuWmhjaUJTWldGamRGQnliM0JVZVhCbFRHOWpZWFJwYjI1eklEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWMxd2lLVHRjYm5aaGNpQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJrNWhiV1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBWWEJrWVhSbFVYVmxkV1VnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZWd1pHRjBaVkYxWlhWbFhDSXBPMXh1WEc1MllYSWdZWE56YVdkdUlEMGdjbVZ4ZFdseVpTaGNJaTR2VDJKcVpXTjBMbUZ6YzJsbmJsd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzUyWVhJZ2EyVjVUV2x5Y205eUlEMGdjbVZ4ZFdseVpTaGNJaTR2YTJWNVRXbHljbTl5WENJcE8xeHVkbUZ5SUd0bGVVOW1JRDBnY21WeGRXbHlaU2hjSWk0dmEyVjVUMlpjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQk5TVmhKVGxOZlMwVlpJRDBnYTJWNVQyWW9lMjFwZUdsdWN6b2diblZzYkgwcE8xeHVYRzR2S2lwY2JpQXFJRkJ2YkdsamFXVnpJSFJvWVhRZ1pHVnpZM0pwWW1VZ2JXVjBhRzlrY3lCcGJpQmdVbVZoWTNSRGJHRnpjMGx1ZEdWeVptRmpaV0F1WEc0Z0tpOWNiblpoY2lCVGNHVmpVRzlzYVdONUlEMGdhMlY1VFdseWNtOXlLSHRjYmlBZ0x5b3FYRzRnSUNBcUlGUm9aWE5sSUcxbGRHaHZaSE1nYldGNUlHSmxJR1JsWm1sdVpXUWdiMjVzZVNCdmJtTmxJR0o1SUhSb1pTQmpiR0Z6Y3lCemNHVmphV1pwWTJGMGFXOXVJRzl5SUcxcGVHbHVMbHh1SUNBZ0tpOWNiaUFnUkVWR1NVNUZYMDlPUTBVNklHNTFiR3dzWEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1Z6WlNCdFpYUm9iMlJ6SUcxaGVTQmlaU0JrWldacGJtVmtJR0o1SUdKdmRHZ2dkR2hsSUdOc1lYTnpJSE53WldOcFptbGpZWFJwYjI0Z1lXNWtJRzFwZUdsdWN5NWNiaUFnSUNvZ1UzVmljMlZ4ZFdWdWRDQmtaV1pwYm1sMGFXOXVjeUIzYVd4c0lHSmxJR05vWVdsdVpXUXVJRlJvWlhObElHMWxkR2h2WkhNZ2JYVnpkQ0J5WlhSMWNtNGdkbTlwWkM1Y2JpQWdJQ292WEc0Z0lFUkZSa2xPUlY5TlFVNVpPaUJ1ZFd4c0xGeHVJQ0F2S2lwY2JpQWdJQ29nVkdobGMyVWdiV1YwYUc5a2N5QmhjbVVnYjNabGNuSnBaR2x1WnlCMGFHVWdZbUZ6WlNCamJHRnpjeTVjYmlBZ0lDb3ZYRzRnSUU5V1JWSlNTVVJGWDBKQlUwVTZJRzUxYkd3c1hHNGdJQzhxS2x4dUlDQWdLaUJVYUdWelpTQnRaWFJvYjJSeklHRnlaU0J6YVcxcGJHRnlJSFJ2SUVSRlJrbE9SVjlOUVU1WkxDQmxlR05sY0hRZ2QyVWdZWE56ZFcxbElIUm9aWGtnY21WMGRYSnVYRzRnSUNBcUlHOWlhbVZqZEhNdUlGZGxJSFJ5ZVNCMGJ5QnRaWEpuWlNCMGFHVWdhMlY1Y3lCdlppQjBhR1VnY21WMGRYSnVJSFpoYkhWbGN5QnZaaUJoYkd3Z2RHaGxJRzFwZUdWa0lHbHVYRzRnSUNBcUlHWjFibU4wYVc5dWN5NGdTV1lnZEdobGNtVWdhWE1nWVNCclpYa2dZMjl1Wm14cFkzUWdkMlVnZEdoeWIzY3VYRzRnSUNBcUwxeHVJQ0JFUlVaSlRrVmZUVUZPV1Y5TlJWSkhSVVE2SUc1MWJHeGNibjBwTzF4dVhHNWNiblpoY2lCcGJtcGxZM1JsWkUxcGVHbHVjeUE5SUZ0ZE8xeHVYRzR2S2lwY2JpQXFJRU52YlhCdmMybDBaU0JqYjIxd2IyNWxiblJ6SUdGeVpTQm9hV2RvWlhJdGJHVjJaV3dnWTI5dGNHOXVaVzUwY3lCMGFHRjBJR052YlhCdmMyVWdiM1JvWlhJZ1kyOXRjRzl6YVhSbFhHNGdLaUJ2Y2lCdVlYUnBkbVVnWTI5dGNHOXVaVzUwY3k1Y2JpQXFYRzRnS2lCVWJ5QmpjbVZoZEdVZ1lTQnVaWGNnZEhsd1pTQnZaaUJnVW1WaFkzUkRiR0Z6YzJBc0lIQmhjM01nWVNCemNHVmphV1pwWTJGMGFXOXVJRzltWEc0Z0tpQjViM1Z5SUc1bGR5QmpiR0Z6Y3lCMGJ5QmdVbVZoWTNRdVkzSmxZWFJsUTJ4aGMzTmdMaUJVYUdVZ2IyNXNlU0J5WlhGMWFYSmxiV1Z1ZENCdlppQjViM1Z5SUdOc1lYTnpYRzRnS2lCemNHVmphV1pwWTJGMGFXOXVJR2x6SUhSb1lYUWdlVzkxSUdsdGNHeGxiV1Z1ZENCaElHQnlaVzVrWlhKZ0lHMWxkR2h2WkM1Y2JpQXFYRzRnS2lBZ0lIWmhjaUJOZVVOdmJYQnZibVZ1ZENBOUlGSmxZV04wTG1OeVpXRjBaVU5zWVhOektIdGNiaUFxSUNBZ0lDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNvZ0lDQWdJQ0FnY21WMGRYSnVJRHhrYVhZK1NHVnNiRzhnVjI5eWJHUThMMlJwZGo0N1hHNGdLaUFnSUNBZ2ZWeHVJQ29nSUNCOUtUdGNiaUFxWEc0Z0tpQlVhR1VnWTJ4aGMzTWdjM0JsWTJsbWFXTmhkR2x2YmlCemRYQndiM0owY3lCaElITndaV05wWm1saklIQnliM1J2WTI5c0lHOW1JRzFsZEdodlpITWdkR2hoZENCb1lYWmxYRzRnS2lCemNHVmphV0ZzSUcxbFlXNXBibWNnS0dVdVp5NGdZSEpsYm1SbGNtQXBMaUJUWldVZ1lGSmxZV04wUTJ4aGMzTkpiblJsY21aaFkyVmdJR1p2Y2x4dUlDb2diVzl5WlNCMGFHVWdZMjl0Y0hKbGFHVnVjMmwyWlNCd2NtOTBiMk52YkM0Z1FXNTVJRzkwYUdWeUlIQnliM0JsY25ScFpYTWdZVzVrSUcxbGRHaHZaSE1nYVc0Z2RHaGxYRzRnS2lCamJHRnpjeUJ6Y0dWamFXWnBZMkYwYVc5dUlIZHBiR3dnWVhaaGFXeGhZbXhsSUc5dUlIUm9aU0J3Y205MGIzUjVjR1V1WEc0Z0tseHVJQ29nUUdsdWRHVnlabUZqWlNCU1pXRmpkRU5zWVhOelNXNTBaWEptWVdObFhHNGdLaUJBYVc1MFpYSnVZV3hjYmlBcUwxeHVkbUZ5SUZKbFlXTjBRMnhoYzNOSmJuUmxjbVpoWTJVZ1BTQjdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRnVJR0Z5Y21GNUlHOW1JRTFwZUdsdUlHOWlhbVZqZEhNZ2RHOGdhVzVqYkhWa1pTQjNhR1Z1SUdSbFptbHVhVzVuSUhsdmRYSWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCQWRIbHdaU0I3WVhKeVlYbDlYRzRnSUNBcUlFQnZjSFJwYjI1aGJGeHVJQ0FnS2k5Y2JpQWdiV2w0YVc1ek9pQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJCYmlCdlltcGxZM1FnWTI5dWRHRnBibWx1WnlCd2NtOXdaWEowYVdWeklHRnVaQ0J0WlhSb2IyUnpJSFJvWVhRZ2MyaHZkV3hrSUdKbElHUmxabWx1WldRZ2IyNWNiaUFnSUNvZ2RHaGxJR052YlhCdmJtVnVkQ2R6SUdOdmJuTjBjblZqZEc5eUlHbHVjM1JsWVdRZ2IyWWdhWFJ6SUhCeWIzUnZkSGx3WlNBb2MzUmhkR2xqSUcxbGRHaHZaSE1wTGx4dUlDQWdLbHh1SUNBZ0tpQkFkSGx3WlNCN2IySnFaV04wZlZ4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZM002SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsa3NYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFUmxabWx1YVhScGIyNGdiMllnY0hKdmNDQjBlWEJsY3lCbWIzSWdkR2hwY3lCamIyMXdiMjVsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUIwZVhCbElIdHZZbXBsWTNSOVhHNGdJQ0FxSUVCdmNIUnBiMjVoYkZ4dUlDQWdLaTljYmlBZ2NISnZjRlI1Y0dWek9pQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJFWldacGJtbDBhVzl1SUc5bUlHTnZiblJsZUhRZ2RIbHdaWE1nWm05eUlIUm9hWE1nWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFkSGx3WlNCN2IySnFaV04wZlZ4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUdOdmJuUmxlSFJVZVhCbGN6b2dVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1N4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUkdWbWFXNXBkR2x2YmlCdlppQmpiMjUwWlhoMElIUjVjR1Z6SUhSb2FYTWdZMjl0Y0c5dVpXNTBJSE5sZEhNZ1ptOXlJR2wwY3lCamFHbHNaSEpsYmk1Y2JpQWdJQ3BjYmlBZ0lDb2dRSFI1Y0dVZ2UyOWlhbVZqZEgxY2JpQWdJQ29nUUc5d2RHbHZibUZzWEc0Z0lDQXFMMXh1SUNCamFHbHNaRU52Ym5SbGVIUlVlWEJsY3pvZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU3hjYmx4dUlDQXZMeUE5UFQwOUlFUmxabWx1YVhScGIyNGdiV1YwYUc5a2N5QTlQVDA5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWx1ZG05clpXUWdkMmhsYmlCMGFHVWdZMjl0Y0c5dVpXNTBJR2x6SUcxdmRXNTBaV1F1SUZaaGJIVmxjeUJwYmlCMGFHVWdiV0Z3Y0dsdVp5QjNhV3hzSUdKbElITmxkQ0J2Ymx4dUlDQWdLaUJnZEdocGN5NXdjbTl3YzJBZ2FXWWdkR2hoZENCd2NtOXdJR2x6SUc1dmRDQnpjR1ZqYVdacFpXUWdLR2t1WlM0Z2RYTnBibWNnWVc0Z1lHbHVZQ0JqYUdWamF5a3VYRzRnSUNBcVhHNGdJQ0FxSUZSb2FYTWdiV1YwYUc5a0lHbHpJR2x1ZG05clpXUWdZbVZtYjNKbElHQm5aWFJKYm1sMGFXRnNVM1JoZEdWZ0lHRnVaQ0IwYUdWeVpXWnZjbVVnWTJGdWJtOTBJSEpsYkhsY2JpQWdJQ29nYjI0Z1lIUm9hWE11YzNSaGRHVmdJRzl5SUhWelpTQmdkR2hwY3k1elpYUlRkR0YwWldBdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMjlpYW1WamRIMWNiaUFnSUNvZ1FHOXdkR2x2Ym1Gc1hHNGdJQ0FxTDF4dUlDQm5aWFJFWldaaGRXeDBVSEp2Y0hNNklGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGxmVFVWU1IwVkVMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkpiblp2YTJWa0lHOXVZMlVnWW1WbWIzSmxJSFJvWlNCamIyMXdiMjVsYm5RZ2FYTWdiVzkxYm5SbFpDNGdWR2hsSUhKbGRIVnliaUIyWVd4MVpTQjNhV3hzSUdKbElIVnpaV1JjYmlBZ0lDb2dZWE1nZEdobElHbHVhWFJwWVd3Z2RtRnNkV1VnYjJZZ1lIUm9hWE11YzNSaGRHVmdMbHh1SUNBZ0tseHVJQ0FnS2lBZ0lHZGxkRWx1YVhScFlXeFRkR0YwWlRvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBcUlDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0tpQWdJQ0FnSUNCcGMwOXVPaUJtWVd4elpTeGNiaUFnSUNvZ0lDQWdJQ0FnWm05dlFtRjZPaUJ1WlhjZ1FtRjZSbTl2S0NsY2JpQWdJQ29nSUNBZ0lIMWNiaUFnSUNvZ0lDQjlYRzRnSUNBcVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTI5aWFtVmpkSDFjYmlBZ0lDb2dRRzl3ZEdsdmJtRnNYRzRnSUNBcUwxeHVJQ0JuWlhSSmJtbDBhV0ZzVTNSaGRHVTZJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDFCVGxsZlRVVlNSMFZFTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBY21WMGRYSnVJSHR2WW1wbFkzUjlYRzRnSUNBcUlFQnZjSFJwYjI1aGJGeHVJQ0FnS2k5Y2JpQWdaMlYwUTJocGJHUkRiMjUwWlhoME9pQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaWDAxRlVrZEZSQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWE5sY3lCd2NtOXdjeUJtY205dElHQjBhR2x6TG5CeWIzQnpZQ0JoYm1RZ2MzUmhkR1VnWm5KdmJTQmdkR2hwY3k1emRHRjBaV0FnZEc4Z2NtVnVaR1Z5SUhSb1pWeHVJQ0FnS2lCemRISjFZM1IxY21VZ2IyWWdkR2hsSUdOdmJYQnZibVZ1ZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dUbThnWjNWaGNtRnVkR1ZsY3lCaGNtVWdiV0ZrWlNCaFltOTFkQ0IzYUdWdUlHOXlJR2h2ZHlCdlpuUmxiaUIwYUdseklHMWxkR2h2WkNCcGN5QnBiblp2YTJWa0xDQnpiMXh1SUNBZ0tpQnBkQ0J0ZFhOMElHNXZkQ0JvWVhabElITnBaR1VnWldabVpXTjBjeTVjYmlBZ0lDcGNiaUFnSUNvZ0lDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0tpQWdJQ0FnZG1GeUlHNWhiV1VnUFNCMGFHbHpMbkJ5YjNCekxtNWhiV1U3WEc0Z0lDQXFJQ0FnSUNCeVpYUjFjbTRnUEdScGRqNUlaV3hzYnl3Z2UyNWhiV1Y5SVR3dlpHbDJQanRjYmlBZ0lDb2dJQ0I5WEc0Z0lDQXFYRzRnSUNBcUlFQnlaWFIxY200Z2UxSmxZV04wUTI5dGNHOXVaVzUwZlZ4dUlDQWdLaUJBYm05emFXUmxaV1ptWldOMGMxeHVJQ0FnS2lCQWNtVnhkV2x5WldSY2JpQWdJQ292WEc0Z0lISmxibVJsY2pvZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlQwNURSU3hjYmx4dVhHNWNiaUFnTHk4Z1BUMDlQU0JFWld4bFoyRjBaU0J0WlhSb2IyUnpJRDA5UFQxY2JseHVJQ0F2S2lwY2JpQWdJQ29nU1c1MmIydGxaQ0IzYUdWdUlIUm9aU0JqYjIxd2IyNWxiblFnYVhNZ2FXNXBkR2xoYkd4NUlHTnlaV0YwWldRZ1lXNWtJR0ZpYjNWMElIUnZJR0psSUcxdmRXNTBaV1F1WEc0Z0lDQXFJRlJvYVhNZ2JXRjVJR2hoZG1VZ2MybGtaU0JsWm1abFkzUnpMQ0JpZFhRZ1lXNTVJR1Y0ZEdWeWJtRnNJSE4xWW5OamNtbHdkR2x2Ym5NZ2IzSWdaR0YwWVNCamNtVmhkR1ZrWEc0Z0lDQXFJR0o1SUhSb2FYTWdiV1YwYUc5a0lHMTFjM1FnWW1VZ1kyeGxZVzVsWkNCMWNDQnBiaUJnWTI5dGNHOXVaVzUwVjJsc2JGVnViVzkxYm5SZ0xseHVJQ0FnS2x4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZERvZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzUyYjJ0bFpDQjNhR1Z1SUhSb1pTQmpiMjF3YjI1bGJuUWdhR0Z6SUdKbFpXNGdiVzkxYm5SbFpDQmhibVFnYUdGeklHRWdSRTlOSUhKbGNISmxjMlZ1ZEdGMGFXOXVMbHh1SUNBZ0tpQkliM2RsZG1WeUxDQjBhR1Z5WlNCcGN5QnVieUJuZFdGeVlXNTBaV1VnZEdoaGRDQjBhR1VnUkU5TklHNXZaR1VnYVhNZ2FXNGdkR2hsSUdSdlkzVnRaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQlZjMlVnZEdocGN5QmhjeUJoYmlCdmNIQnZjblIxYm1sMGVTQjBieUJ2Y0dWeVlYUmxJRzl1SUhSb1pTQkVUMDBnZDJobGJpQjBhR1VnWTI5dGNHOXVaVzUwSUdoaGMxeHVJQ0FnS2lCaVpXVnVJRzF2ZFc1MFpXUWdLR2x1YVhScFlXeHBlbVZrSUdGdVpDQnlaVzVrWlhKbFpDa2dabTl5SUhSb1pTQm1hWEp6ZENCMGFXMWxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlISnZiM1JPYjJSbElFUlBUU0JsYkdWdFpXNTBJSEpsY0hKbGMyVnVkR2x1WnlCMGFHVWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tpQkFiM0IwYVc5dVlXeGNiaUFnSUNvdlhHNGdJR052YlhCdmJtVnVkRVJwWkUxdmRXNTBPaUJUY0dWalVHOXNhV041TGtSRlJrbE9SVjlOUVU1WkxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCSmJuWnZhMlZrSUdKbFptOXlaU0IwYUdVZ1kyOXRjRzl1Wlc1MElISmxZMlZwZG1WeklHNWxkeUJ3Y205d2N5NWNiaUFnSUNwY2JpQWdJQ29nVlhObElIUm9hWE1nWVhNZ1lXNGdiM0J3YjNKMGRXNXBkSGtnZEc4Z2NtVmhZM1FnZEc4Z1lTQndjbTl3SUhSeVlXNXphWFJwYjI0Z1lua2dkWEJrWVhScGJtY2dkR2hsWEc0Z0lDQXFJSE4wWVhSbElIVnphVzVuSUdCMGFHbHpMbk5sZEZOMFlYUmxZQzRnUTNWeWNtVnVkQ0J3Y205d2N5QmhjbVVnWVdOalpYTnpaV1FnZG1saElHQjBhR2x6TG5CeWIzQnpZQzVjYmlBZ0lDcGNiaUFnSUNvZ0lDQmpiMjF3YjI1bGJuUlhhV3hzVW1WalpXbDJaVkJ5YjNCek9pQm1kVzVqZEdsdmJpaHVaWGgwVUhKdmNITXNJRzVsZUhSRGIyNTBaWGgwS1NCN1hHNGdJQ0FxSUNBZ0lDQjBhR2x6TG5ObGRGTjBZWFJsS0h0Y2JpQWdJQ29nSUNBZ0lDQWdiR2xyWlhOSmJtTnlaV0Z6YVc1bk9pQnVaWGgwVUhKdmNITXViR2xyWlVOdmRXNTBJRDRnZEdocGN5NXdjbTl3Y3k1c2FXdGxRMjkxYm5SY2JpQWdJQ29nSUNBZ0lIMHBPMXh1SUNBZ0tpQWdJSDFjYmlBZ0lDcGNiaUFnSUNvZ1RrOVVSVG9nVkdobGNtVWdhWE1nYm04Z1pYRjFhWFpoYkdWdWRDQmdZMjl0Y0c5dVpXNTBWMmxzYkZKbFkyVnBkbVZUZEdGMFpXQXVJRUZ1SUdsdVkyOXRhVzVuSUhCeWIzQmNiaUFnSUNvZ2RISmhibk5wZEdsdmJpQnRZWGtnWTJGMWMyVWdZU0J6ZEdGMFpTQmphR0Z1WjJVc0lHSjFkQ0IwYUdVZ2IzQndiM05wZEdVZ2FYTWdibTkwSUhSeWRXVXVJRWxtSUhsdmRWeHVJQ0FnS2lCdVpXVmtJR2wwTENCNWIzVWdZWEpsSUhCeWIySmhZbXg1SUd4dmIydHBibWNnWm05eUlHQmpiMjF3YjI1bGJuUlhhV3hzVlhCa1lYUmxZQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUc1bGVIUlFjbTl3YzF4dUlDQWdLaUJBYjNCMGFXOXVZV3hjYmlBZ0lDb3ZYRzRnSUdOdmJYQnZibVZ1ZEZkcGJHeFNaV05sYVhabFVISnZjSE02SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsa3NYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFbHVkbTlyWldRZ2QyaHBiR1VnWkdWamFXUnBibWNnYVdZZ2RHaGxJR052YlhCdmJtVnVkQ0J6YUc5MWJHUWdZbVVnZFhCa1lYUmxaQ0JoY3lCaElISmxjM1ZzZENCdlpseHVJQ0FnS2lCeVpXTmxhWFpwYm1jZ2JtVjNJSEJ5YjNCekxDQnpkR0YwWlNCaGJtUXZiM0lnWTI5dWRHVjRkQzVjYmlBZ0lDcGNiaUFnSUNvZ1ZYTmxJSFJvYVhNZ1lYTWdZVzRnYjNCd2IzSjBkVzVwZEhrZ2RHOGdZSEpsZEhWeWJpQm1ZV3h6WldBZ2QyaGxiaUI1YjNVbmNtVWdZMlZ5ZEdGcGJpQjBhR0YwSUhSb1pWeHVJQ0FnS2lCMGNtRnVjMmwwYVc5dUlIUnZJSFJvWlNCdVpYY2djSEp2Y0hNdmMzUmhkR1V2WTI5dWRHVjRkQ0IzYVd4c0lHNXZkQ0J5WlhGMWFYSmxJR0VnWTI5dGNHOXVaVzUwWEc0Z0lDQXFJSFZ3WkdGMFpTNWNiaUFnSUNwY2JpQWdJQ29nSUNCemFHOTFiR1JEYjIxd2IyNWxiblJWY0dSaGRHVTZJR1oxYm1OMGFXOXVLRzVsZUhSUWNtOXdjeXdnYm1WNGRGTjBZWFJsTENCdVpYaDBRMjl1ZEdWNGRDa2dlMXh1SUNBZ0tpQWdJQ0FnY21WMGRYSnVJQ0ZsY1hWaGJDaHVaWGgwVUhKdmNITXNJSFJvYVhNdWNISnZjSE1wSUh4OFhHNGdJQ0FxSUNBZ0lDQWdJQ0ZsY1hWaGJDaHVaWGgwVTNSaGRHVXNJSFJvYVhNdWMzUmhkR1VwSUh4OFhHNGdJQ0FxSUNBZ0lDQWdJQ0ZsY1hWaGJDaHVaWGgwUTI5dWRHVjRkQ3dnZEdocGN5NWpiMjUwWlhoMEtUdGNiaUFnSUNvZ0lDQjlYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J1WlhoMFVISnZjSE5jYmlBZ0lDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQnVaWGgwVTNSaGRHVmNiaUFnSUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCdVpYaDBRMjl1ZEdWNGRGeHVJQ0FnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlNCVWNuVmxJR2xtSUhSb1pTQmpiMjF3YjI1bGJuUWdjMmh2ZFd4a0lIVndaR0YwWlM1Y2JpQWdJQ29nUUc5d2RHbHZibUZzWEc0Z0lDQXFMMXh1SUNCemFHOTFiR1JEYjIxd2IyNWxiblJWY0dSaGRHVTZJRk53WldOUWIyeHBZM2t1UkVWR1NVNUZYMDlPUTBVc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsdWRtOXJaV1FnZDJobGJpQjBhR1VnWTI5dGNHOXVaVzUwSUdseklHRmliM1YwSUhSdklIVndaR0YwWlNCa2RXVWdkRzhnWVNCMGNtRnVjMmwwYVc5dUlHWnliMjFjYmlBZ0lDb2dZSFJvYVhNdWNISnZjSE5nTENCZ2RHaHBjeTV6ZEdGMFpXQWdZVzVrSUdCMGFHbHpMbU52Ym5SbGVIUmdJSFJ2SUdCdVpYaDBVSEp2Y0hOZ0xDQmdibVY0ZEZOMFlYUmxZRnh1SUNBZ0tpQmhibVFnWUc1bGVIUkRiMjUwWlhoMFlDNWNiaUFnSUNwY2JpQWdJQ29nVlhObElIUm9hWE1nWVhNZ1lXNGdiM0J3YjNKMGRXNXBkSGtnZEc4Z2NHVnlabTl5YlNCd2NtVndZWEpoZEdsdmJpQmlaV1p2Y21VZ1lXNGdkWEJrWVhSbElHOWpZM1Z5Y3k1Y2JpQWdJQ3BjYmlBZ0lDb2dUazlVUlRvZ1dXOTFJQ29xWTJGdWJtOTBLaW9nZFhObElHQjBhR2x6TG5ObGRGTjBZWFJsS0NsZ0lHbHVJSFJvYVhNZ2JXVjBhRzlrTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2JtVjRkRkJ5YjNCelhHNGdJQ0FxSUVCd1lYSmhiU0I3UDI5aWFtVmpkSDBnYm1WNGRGTjBZWFJsWEc0Z0lDQXFJRUJ3WVhKaGJTQjdQMjlpYW1WamRIMGdibVY0ZEVOdmJuUmxlSFJjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dWZTQjBjbUZ1YzJGamRHbHZibHh1SUNBZ0tpQkFiM0IwYVc5dVlXeGNiaUFnSUNvdlhHNGdJR052YlhCdmJtVnVkRmRwYkd4VmNHUmhkR1U2SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsa3NYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFbHVkbTlyWldRZ2QyaGxiaUIwYUdVZ1kyOXRjRzl1Wlc1MEozTWdSRTlOSUhKbGNISmxjMlZ1ZEdGMGFXOXVJR2hoY3lCaVpXVnVJSFZ3WkdGMFpXUXVYRzRnSUNBcVhHNGdJQ0FxSUZWelpTQjBhR2x6SUdGeklHRnVJRzl3Y0c5eWRIVnVhWFI1SUhSdklHOXdaWEpoZEdVZ2IyNGdkR2hsSUVSUFRTQjNhR1Z1SUhSb1pTQmpiMjF3YjI1bGJuUWdhR0Z6WEc0Z0lDQXFJR0psWlc0Z2RYQmtZWFJsWkM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlIQnlaWFpRY205d2MxeHVJQ0FnS2lCQWNHRnlZVzBnZXo5dlltcGxZM1I5SUhCeVpYWlRkR0YwWlZ4dUlDQWdLaUJBY0dGeVlXMGdlejl2WW1wbFkzUjlJSEJ5WlhaRGIyNTBaWGgwWEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnY205dmRFNXZaR1VnUkU5TklHVnNaVzFsYm5RZ2NtVndjbVZ6Wlc1MGFXNW5JSFJvWlNCamIyMXdiMjVsYm5RdVhHNGdJQ0FxSUVCdmNIUnBiMjVoYkZ4dUlDQWdLaTljYmlBZ1kyOXRjRzl1Wlc1MFJHbGtWWEJrWVhSbE9pQlRjR1ZqVUc5c2FXTjVMa1JGUmtsT1JWOU5RVTVaTEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm5admEyVmtJSGRvWlc0Z2RHaGxJR052YlhCdmJtVnVkQ0JwY3lCaFltOTFkQ0IwYnlCaVpTQnlaVzF2ZG1Wa0lHWnliMjBnYVhSeklIQmhjbVZ1ZENCaGJtUWdhR0YyWlZ4dUlDQWdLaUJwZEhNZ1JFOU5JSEpsY0hKbGMyVnVkR0YwYVc5dUlHUmxjM1J5YjNsbFpDNWNiaUFnSUNwY2JpQWdJQ29nVlhObElIUm9hWE1nWVhNZ1lXNGdiM0J3YjNKMGRXNXBkSGtnZEc4Z1pHVmhiR3h2WTJGMFpTQmhibmtnWlhoMFpYSnVZV3dnY21WemIzVnlZMlZ6TGx4dUlDQWdLbHh1SUNBZ0tpQk9UMVJGT2lCVWFHVnlaU0JwY3lCdWJ5QmdZMjl0Y0c5dVpXNTBSR2xrVlc1dGIzVnVkR0FnYzJsdVkyVWdlVzkxY2lCamIyMXdiMjVsYm5RZ2QybHNiQ0JvWVhabElHSmxaVzVjYmlBZ0lDb2daR1Z6ZEhKdmVXVmtJR0o1SUhSb1lYUWdjRzlwYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ2Y0hScGIyNWhiRnh1SUNBZ0tpOWNiaUFnWTI5dGNHOXVaVzUwVjJsc2JGVnViVzkxYm5RNklGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGtzWEc1Y2JseHVYRzRnSUM4dklEMDlQVDBnUVdSMllXNWpaV1FnYldWMGFHOWtjeUE5UFQwOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWd1pHRjBaWE1nZEdobElHTnZiWEJ2Ym1WdWRDZHpJR04xY25KbGJuUnNlU0J0YjNWdWRHVmtJRVJQVFNCeVpYQnlaWE5sYm5SaGRHbHZiaTVjYmlBZ0lDcGNiaUFnSUNvZ1Fua2daR1ZtWVhWc2RDd2dkR2hwY3lCcGJYQnNaVzFsYm5SeklGSmxZV04wSjNNZ2NtVnVaR1Z5YVc1bklHRnVaQ0J5WldOdmJtTnBiR2xoZEdsdmJpQmhiR2R2Y21sMGFHMHVYRzRnSUNBcUlGTnZjR2hwYzNScFkyRjBaV1FnWTJ4cFpXNTBjeUJ0WVhrZ2QybHphQ0IwYnlCdmRtVnljbWxrWlNCMGFHbHpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU5SUhSeVlXNXpZV04wYVc5dVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaUJBYjNabGNuSnBaR0ZpYkdWY2JpQWdJQ292WEc0Z0lIVndaR0YwWlVOdmJYQnZibVZ1ZERvZ1UzQmxZMUJ2YkdsamVTNVBWa1ZTVWtsRVJWOUNRVk5GWEc1Y2JuMDdYRzVjYmk4cUtseHVJQ29nVFdGd2NHbHVaeUJtY205dElHTnNZWE56SUhOd1pXTnBabWxqWVhScGIyNGdhMlY1Y3lCMGJ5QnpjR1ZqYVdGc0lIQnliMk5sYzNOcGJtY2dablZ1WTNScGIyNXpMbHh1SUNwY2JpQXFJRUZzZEdodmRXZG9JSFJvWlhObElHRnlaU0JrWldOc1lYSmxaQ0JzYVd0bElHbHVjM1JoYm1ObElIQnliM0JsY25ScFpYTWdhVzRnZEdobElITndaV05wWm1sallYUnBiMjVjYmlBcUlIZG9aVzRnWkdWbWFXNXBibWNnWTJ4aGMzTmxjeUIxYzJsdVp5QmdVbVZoWTNRdVkzSmxZWFJsUTJ4aGMzTmdMQ0IwYUdWNUlHRnlaU0JoWTNSMVlXeHNlU0J6ZEdGMGFXTmNiaUFxSUdGdVpDQmhjbVVnWVdOalpYTnphV0pzWlNCdmJpQjBhR1VnWTI5dWMzUnlkV04wYjNJZ2FXNXpkR1ZoWkNCdlppQjBhR1VnY0hKdmRHOTBlWEJsTGlCRVpYTndhWFJsWEc0Z0tpQmlaV2x1WnlCemRHRjBhV01zSUhSb1pYa2diWFZ6ZENCaVpTQmtaV1pwYm1Wa0lHOTFkSE5wWkdVZ2IyWWdkR2hsSUZ3aWMzUmhkR2xqYzF3aUlHdGxlU0IxYm1SbGNseHVJQ29nZDJocFkyZ2dZV3hzSUc5MGFHVnlJSE4wWVhScFl5QnRaWFJvYjJSeklHRnlaU0JrWldacGJtVmtMbHh1SUNvdlhHNTJZWElnVWtWVFJWSldSVVJmVTFCRlExOUxSVmxUSUQwZ2UxeHVJQ0JrYVhOd2JHRjVUbUZ0WlRvZ1puVnVZM1JwYjI0b1EyOXVjM1J5ZFdOMGIzSXNJR1JwYzNCc1lYbE9ZVzFsS1NCN1hHNGdJQ0FnUTI5dWMzUnlkV04wYjNJdVpHbHpjR3hoZVU1aGJXVWdQU0JrYVhOd2JHRjVUbUZ0WlR0Y2JpQWdmU3hjYmlBZ2JXbDRhVzV6T2lCbWRXNWpkR2x2YmloRGIyNXpkSEoxWTNSdmNpd2diV2w0YVc1ektTQjdYRzRnSUNBZ2FXWWdLRzFwZUdsdWN5a2dlMXh1SUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0J0YVhocGJuTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2JXbDRVM0JsWTBsdWRHOURiMjF3YjI1bGJuUW9RMjl1YzNSeWRXTjBiM0lzSUcxcGVHbHVjMXRwWFNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1SUNCamFHbHNaRU52Ym5SbGVIUlVlWEJsY3pvZ1puVnVZM1JwYjI0b1EyOXVjM1J5ZFdOMGIzSXNJR05vYVd4a1EyOXVkR1Y0ZEZSNWNHVnpLU0I3WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdkbUZzYVdSaGRHVlVlWEJsUkdWbUtGeHVJQ0FnSUNBZ0lDQkRiMjV6ZEhKMVkzUnZjaXhjYmlBZ0lDQWdJQ0FnWTJocGJHUkRiMjUwWlhoMFZIbHdaWE1zWEc0Z0lDQWdJQ0FnSUZKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJuTXVZMmhwYkdSRGIyNTBaWGgwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmlBZ0lDQkRiMjV6ZEhKMVkzUnZjaTVqYUdsc1pFTnZiblJsZUhSVWVYQmxjeUE5SUdGemMybG5iaWhjYmlBZ0lDQWdJSHQ5TEZ4dUlDQWdJQ0FnUTI5dWMzUnlkV04wYjNJdVkyaHBiR1JEYjI1MFpYaDBWSGx3WlhNc1hHNGdJQ0FnSUNCamFHbHNaRU52Ym5SbGVIUlVlWEJsYzF4dUlDQWdJQ2s3WEc0Z0lIMHNYRzRnSUdOdmJuUmxlSFJVZVhCbGN6b2dablZ1WTNScGIyNG9RMjl1YzNSeWRXTjBiM0lzSUdOdmJuUmxlSFJVZVhCbGN5a2dlMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIWmhiR2xrWVhSbFZIbHdaVVJsWmloY2JpQWdJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJR052Ym5SbGVIUlVlWEJsY3l4Y2JpQWdJQ0FnSUNBZ1VtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVjeTVqYjI1MFpYaDBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNiaUFnSUNCRGIyNXpkSEoxWTNSdmNpNWpiMjUwWlhoMFZIbHdaWE1nUFNCaGMzTnBaMjRvWEc0Z0lDQWdJQ0I3ZlN4Y2JpQWdJQ0FnSUVOdmJuTjBjblZqZEc5eUxtTnZiblJsZUhSVWVYQmxjeXhjYmlBZ0lDQWdJR052Ym5SbGVIUlVlWEJsYzF4dUlDQWdJQ2s3WEc0Z0lIMHNYRzRnSUM4cUtseHVJQ0FnS2lCVGNHVmphV0ZzSUdOaGMyVWdaMlYwUkdWbVlYVnNkRkJ5YjNCeklIZG9hV05vSUhOb2IzVnNaQ0J0YjNabElHbHVkRzhnYzNSaGRHbGpjeUJpZFhRZ2NtVnhkV2x5WlhOY2JpQWdJQ29nWVhWMGIyMWhkR2xqSUcxbGNtZHBibWN1WEc0Z0lDQXFMMXh1SUNCblpYUkVaV1poZFd4MFVISnZjSE02SUdaMWJtTjBhVzl1S0VOdmJuTjBjblZqZEc5eUxDQm5aWFJFWldaaGRXeDBVSEp2Y0hNcElIdGNiaUFnSUNCcFppQW9RMjl1YzNSeWRXTjBiM0l1WjJWMFJHVm1ZWFZzZEZCeWIzQnpLU0I3WEc0Z0lDQWdJQ0JEYjI1emRISjFZM1J2Y2k1blpYUkVaV1poZFd4MFVISnZjSE1nUFNCamNtVmhkR1ZOWlhKblpXUlNaWE4xYkhSR2RXNWpkR2x2YmloY2JpQWdJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXVaMlYwUkdWbVlYVnNkRkJ5YjNCekxGeHVJQ0FnSUNBZ0lDQm5aWFJFWldaaGRXeDBVSEp2Y0hOY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJRU52Ym5OMGNuVmpkRzl5TG1kbGRFUmxabUYxYkhSUWNtOXdjeUE5SUdkbGRFUmxabUYxYkhSUWNtOXdjenRjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSEJ5YjNCVWVYQmxjem9nWm5WdVkzUnBiMjRvUTI5dWMzUnlkV04wYjNJc0lIQnliM0JVZVhCbGN5a2dlMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIWmhiR2xrWVhSbFZIbHdaVVJsWmloY2JpQWdJQ0FnSUNBZ1EyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJSEJ5YjNCVWVYQmxjeXhjYmlBZ0lDQWdJQ0FnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWN5NXdjbTl3WEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmlBZ0lDQkRiMjV6ZEhKMVkzUnZjaTV3Y205d1ZIbHdaWE1nUFNCaGMzTnBaMjRvWEc0Z0lDQWdJQ0I3ZlN4Y2JpQWdJQ0FnSUVOdmJuTjBjblZqZEc5eUxuQnliM0JVZVhCbGN5eGNiaUFnSUNBZ0lIQnliM0JVZVhCbGMxeHVJQ0FnSUNrN1hHNGdJSDBzWEc0Z0lITjBZWFJwWTNNNklHWjFibU4wYVc5dUtFTnZibk4wY25WamRHOXlMQ0J6ZEdGMGFXTnpLU0I3WEc0Z0lDQWdiV2w0VTNSaGRHbGpVM0JsWTBsdWRHOURiMjF3YjI1bGJuUW9RMjl1YzNSeWRXTjBiM0lzSUhOMFlYUnBZM01wTzF4dUlDQjlYRzU5TzF4dVhHNW1kVzVqZEdsdmJpQjJZV3hwWkdGMFpWUjVjR1ZFWldZb1EyOXVjM1J5ZFdOMGIzSXNJSFI1Y0dWRVpXWXNJR3h2WTJGMGFXOXVLU0I3WEc0Z0lHWnZjaUFvZG1GeUlIQnliM0JPWVcxbElHbHVJSFI1Y0dWRVpXWXBJSHRjYmlBZ0lDQnBaaUFvZEhsd1pVUmxaaTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdjbTl3VG1GdFpTa3BJSHRjYmlBZ0lDQWdJQzh2SUhWelpTQmhJSGRoY201cGJtY2dhVzV6ZEdWaFpDQnZaaUJoYmlCcGJuWmhjbWxoYm5RZ2MyOGdZMjl0Y0c5dVpXNTBjMXh1SUNBZ0lDQWdMeThnWkc5dUozUWdjMmh2ZHlCMWNDQnBiaUJ3Y205a0lHSjFkQ0J1YjNRZ2FXNGdYMTlFUlZaZlgxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUhSNWNHVnZaaUIwZVhCbFJHVm1XM0J5YjNCT1lXMWxYU0E5UFQwZ0oyWjFibU4wYVc5dUp5eGNiaUFnSUNBZ0lDQWdKeVZ6T2lBbGN5QjBlWEJsSUdBbGMyQWdhWE1nYVc1MllXeHBaRHNnYVhRZ2JYVnpkQ0JpWlNCaElHWjFibU4wYVc5dUxDQjFjM1ZoYkd4NUlHWnliMjBnSnlBclhHNGdJQ0FnSUNBZ0lDZFNaV0ZqZEM1UWNtOXdWSGx3WlhNdUp5eGNiaUFnSUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0l1WkdsemNHeGhlVTVoYldVZ2ZId2dKMUpsWVdOMFEyeGhjM01uTEZ4dUlDQWdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF0c2IyTmhkR2x2Ymwwc1hHNGdJQ0FnSUNBZ0lIQnliM0JPWVcxbFhHNGdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFRXVjBhRzlrVDNabGNuSnBaR1VvY0hKdmRHOHNJRzVoYldVcElIdGNiaUFnZG1GeUlITndaV05RYjJ4cFkza2dQU0JTWldGamRFTnNZWE56U1c1MFpYSm1ZV05sTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcElEOWNiaUFnSUNCU1pXRmpkRU5zWVhOelNXNTBaWEptWVdObFcyNWhiV1ZkSURwY2JpQWdJQ0J1ZFd4c08xeHVYRzRnSUM4dklFUnBjMkZzYkc5M0lHOTJaWEp5YVdScGJtY2diMllnWW1GelpTQmpiR0Z6Y3lCdFpYUm9iMlJ6SUhWdWJHVnpjeUJsZUhCc2FXTnBkR3g1SUdGc2JHOTNaV1F1WEc0Z0lHbG1JQ2hTWldGamRFTnNZWE56VFdsNGFXNHVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2twSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdjM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNVBWa1ZTVWtsRVJWOUNRVk5GTEZ4dUlDQWdJQ0FnSjFKbFlXTjBRMnhoYzNOSmJuUmxjbVpoWTJVNklGbHZkU0JoY21VZ1lYUjBaVzF3ZEdsdVp5QjBieUJ2ZG1WeWNtbGtaU0FuSUN0Y2JpQWdJQ0FnSUNkZ0pYTmdJR1p5YjIwZ2VXOTFjaUJqYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1TGlCRmJuTjFjbVVnZEdoaGRDQjViM1Z5SUcxbGRHaHZaQ0J1WVcxbGN5QW5JQ3RjYmlBZ0lDQWdJQ2RrYnlCdWIzUWdiM1psY214aGNDQjNhWFJvSUZKbFlXTjBJRzFsZEdodlpITXVKeXhjYmlBZ0lDQWdJRzVoYldWY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtITndaV05RYjJ4cFkza2dQVDA5SUZOd1pXTlFiMnhwWTNrdVQxWkZVbEpKUkVWZlFrRlRSU2twTzF4dUlDQjlYRzVjYmlBZ0x5OGdSR2x6WVd4c2IzY2daR1ZtYVc1cGJtY2diV1YwYUc5a2N5QnRiM0psSUhSb1lXNGdiMjVqWlNCMWJteGxjM01nWlhod2JHbGphWFJzZVNCaGJHeHZkMlZrTGx4dUlDQnBaaUFvY0hKdmRHOHVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2twSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdjM0JsWTFCdmJHbGplU0E5UFQwZ1UzQmxZMUJ2YkdsamVTNUVSVVpKVGtWZlRVRk9XU0I4ZkZ4dUlDQWdJQ0FnYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1Y5TlJWSkhSVVFzWEc0Z0lDQWdJQ0FuVW1WaFkzUkRiR0Z6YzBsdWRHVnlabUZqWlRvZ1dXOTFJR0Z5WlNCaGRIUmxiWEIwYVc1bklIUnZJR1JsWm1sdVpTQW5JQ3RjYmlBZ0lDQWdJQ2RnSlhOZ0lHOXVJSGx2ZFhJZ1kyOXRjRzl1Wlc1MElHMXZjbVVnZEdoaGJpQnZibU5sTGlCVWFHbHpJR052Ym1ac2FXTjBJRzFoZVNCaVpTQmtkV1VnSnlBclhHNGdJQ0FnSUNBbmRHOGdZU0J0YVhocGJpNG5MRnh1SUNBZ0lDQWdibUZ0WlZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTQjhmRnh1SUNBZ0lITndaV05RYjJ4cFkza2dQVDA5SUZOd1pXTlFiMnhwWTNrdVJFVkdTVTVGWDAxQlRsbGZUVVZTUjBWRUtTazdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJOYVhocGJpQm9aV3h3WlhJZ2QyaHBZMmdnYUdGdVpHeGxjeUJ3YjJ4cFkza2dkbUZzYVdSaGRHbHZiaUJoYm1RZ2NtVnpaWEoyWldSY2JpQXFJSE53WldOcFptbGpZWFJwYjI0Z2EyVjVjeUIzYUdWdUlHSjFhV3hrYVc1bklGSmxZV04wSUdOc1lYTnpjMlZ6TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJ0YVhoVGNHVmpTVzUwYjBOdmJYQnZibVZ1ZENoRGIyNXpkSEoxWTNSdmNpd2djM0JsWXlrZ2UxeHVJQ0JwWmlBb0lYTndaV01wSUh0Y2JpQWdJQ0J5WlhSMWNtNDdYRzRnSUgxY2JseHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lIUjVjR1Z2WmlCemNHVmpJQ0U5UFNBblpuVnVZM1JwYjI0bkxGeHVJQ0FnSUNkU1pXRmpkRU5zWVhOek9pQlpiM1ZjWENkeVpTQmhkSFJsYlhCMGFXNW5JSFJ2SUNjZ0sxeHVJQ0FnSUNkMWMyVWdZU0JqYjIxd2IyNWxiblFnWTJ4aGMzTWdZWE1nWVNCdGFYaHBiaTRnU1c1emRHVmhaQ3dnYW5WemRDQjFjMlVnWVNCeVpXZDFiR0Z5SUc5aWFtVmpkQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvZEhsd1pXOW1JSE53WldNZ0lUMDlJQ2RtZFc1amRHbHZiaWNwS1R0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBaFVtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtITndaV01wTEZ4dUlDQWdJQ2RTWldGamRFTnNZWE56T2lCWmIzVmNYQ2R5WlNCaGRIUmxiWEIwYVc1bklIUnZJQ2NnSzF4dUlDQWdJQ2QxYzJVZ1lTQmpiMjF3YjI1bGJuUWdZWE1nWVNCdGFYaHBiaTRnU1c1emRHVmhaQ3dnYW5WemRDQjFjMlVnWVNCeVpXZDFiR0Z5SUc5aWFtVmpkQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvSVZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENoemNHVmpLU2twTzF4dVhHNGdJSFpoY2lCd2NtOTBieUE5SUVOdmJuTjBjblZqZEc5eUxuQnliM1J2ZEhsd1pUdGNibHh1SUNBdkx5QkNlU0JvWVc1a2JHbHVaeUJ0YVhocGJuTWdZbVZtYjNKbElHRnVlU0J2ZEdobGNpQndjbTl3WlhKMGFXVnpMQ0IzWlNCbGJuTjFjbVVnZEdobElITmhiV1ZjYmlBZ0x5OGdZMmhoYVc1cGJtY2diM0prWlhJZ2FYTWdZWEJ3YkdsbFpDQjBieUJ0WlhSb2IyUnpJSGRwZEdnZ1JFVkdTVTVGWDAxQlRsa2djRzlzYVdONUxDQjNhR1YwYUdWeVhHNGdJQzh2SUcxcGVHbHVjeUJoY21VZ2JHbHpkR1ZrSUdKbFptOXlaU0J2Y2lCaFpuUmxjaUIwYUdWelpTQnRaWFJvYjJSeklHbHVJSFJvWlNCemNHVmpMbHh1SUNCcFppQW9jM0JsWXk1b1lYTlBkMjVRY205d1pYSjBlU2hOU1ZoSlRsTmZTMFZaS1NrZ2UxeHVJQ0FnSUZKRlUwVlNWa1ZFWDFOUVJVTmZTMFZaVXk1dGFYaHBibk1vUTI5dWMzUnlkV04wYjNJc0lITndaV011YldsNGFXNXpLVHRjYmlBZ2ZWeHVYRzRnSUdadmNpQW9kbUZ5SUc1aGJXVWdhVzRnYzNCbFl5a2dlMXh1SUNBZ0lHbG1JQ2doYzNCbFl5NW9ZWE5QZDI1UWNtOXdaWEowZVNodVlXMWxLU2tnZTF4dUlDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c1aGJXVWdQVDA5SUUxSldFbE9VMTlMUlZrcElIdGNiaUFnSUNBZ0lDOHZJRmRsSUdoaGRtVWdZV3h5WldGa2VTQm9ZVzVrYkdWa0lHMXBlR2x1Y3lCcGJpQmhJSE53WldOcFlXd2dZMkZ6WlNCaFltOTJaVnh1SUNBZ0lDQWdZMjl1ZEdsdWRXVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJSEJ5YjNCbGNuUjVJRDBnYzNCbFkxdHVZVzFsWFR0Y2JpQWdJQ0IyWVd4cFpHRjBaVTFsZEdodlpFOTJaWEp5YVdSbEtIQnliM1J2TENCdVlXMWxLVHRjYmx4dUlDQWdJR2xtSUNoU1JWTkZVbFpGUkY5VFVFVkRYMHRGV1ZNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYm1GdFpTa3BJSHRjYmlBZ0lDQWdJRkpGVTBWU1ZrVkVYMU5RUlVOZlMwVlpVMXR1WVcxbFhTaERiMjV6ZEhKMVkzUnZjaXdnY0hKdmNHVnlkSGtwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQXZMeUJUWlhSMWNDQnRaWFJvYjJSeklHOXVJSEJ5YjNSdmRIbHdaVHBjYmlBZ0lDQWdJQzh2SUZSb1pTQm1iMnhzYjNkcGJtY2diV1Z0WW1WeUlHMWxkR2h2WkhNZ2MyaHZkV3hrSUc1dmRDQmlaU0JoZFhSdmJXRjBhV05oYkd4NUlHSnZkVzVrT2x4dUlDQWdJQ0FnTHk4Z01TNGdSWGh3WldOMFpXUWdVbVZoWTNSRGJHRnpjeUJ0WlhSb2IyUnpJQ2hwYmlCMGFHVWdYQ0pwYm5SbGNtWmhZMlZjSWlrdVhHNGdJQ0FnSUNBdkx5QXlMaUJQZG1WeWNtbGtaR1Z1SUcxbGRHaHZaSE1nS0hSb1lYUWdkMlZ5WlNCdGFYaGxaQ0JwYmlrdVhHNGdJQ0FnSUNCMllYSWdhWE5TWldGamRFTnNZWE56VFdWMGFHOWtJRDFjYmlBZ0lDQWdJQ0FnVW1WaFkzUkRiR0Z6YzBsdWRHVnlabUZqWlM1b1lYTlBkMjVRY205d1pYSjBlU2h1WVcxbEtUdGNiaUFnSUNBZ0lIWmhjaUJwYzBGc2NtVmhaSGxFWldacGJtVmtJRDBnY0hKdmRHOHVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtRnRaU2s3WEc0Z0lDQWdJQ0IyWVhJZ2JXRnlhMlZrUkc5dWRFSnBibVFnUFNCd2NtOXdaWEowZVNBbUppQndjbTl3WlhKMGVTNWZYM0psWVdOMFJHOXVkRUpwYm1RN1hHNGdJQ0FnSUNCMllYSWdhWE5HZFc1amRHbHZiaUE5SUhSNWNHVnZaaUJ3Y205d1pYSjBlU0E5UFQwZ0oyWjFibU4wYVc5dUp6dGNiaUFnSUNBZ0lIWmhjaUJ6YUc5MWJHUkJkWFJ2UW1sdVpDQTlYRzRnSUNBZ0lDQWdJR2x6Um5WdVkzUnBiMjRnSmlaY2JpQWdJQ0FnSUNBZ0lXbHpVbVZoWTNSRGJHRnpjMDFsZEdodlpDQW1KbHh1SUNBZ0lDQWdJQ0FoYVhOQmJISmxZV1I1UkdWbWFXNWxaQ0FtSmx4dUlDQWdJQ0FnSUNBaGJXRnlhMlZrUkc5dWRFSnBibVE3WEc1Y2JpQWdJQ0FnSUdsbUlDaHphRzkxYkdSQmRYUnZRbWx1WkNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVhCeWIzUnZMbDlmY21WaFkzUkJkWFJ2UW1sdVpFMWhjQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lIQnliM1J2TGw5ZmNtVmhZM1JCZFhSdlFtbHVaRTFoY0NBOUlIdDlPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhCeWIzUnZMbDlmY21WaFkzUkJkWFJ2UW1sdVpFMWhjRnR1WVcxbFhTQTlJSEJ5YjNCbGNuUjVPMXh1SUNBZ0lDQWdJQ0J3Y205MGIxdHVZVzFsWFNBOUlIQnliM0JsY25SNU8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x6UVd4eVpXRmtlVVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMllYSWdjM0JsWTFCdmJHbGplU0E5SUZKbFlXTjBRMnhoYzNOSmJuUmxjbVpoWTJWYmJtRnRaVjA3WEc1Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJVYUdWelpTQmpZWE5sY3lCemFHOTFiR1FnWVd4eVpXRmtlU0JpWlNCallYVm5hSFFnWW5rZ2RtRnNhV1JoZEdWTlpYUm9iMlJQZG1WeWNtbGtaVnh1SUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBjMUpsWVdOMFEyeGhjM05OWlhSb2IyUWdKaVlnS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FvYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1Y5TlJWSkhSVVFnZkh3Z2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FuVW1WaFkzUkRiR0Z6Y3pvZ1ZXNWxlSEJsWTNSbFpDQnpjR1ZqSUhCdmJHbGplU0FsY3lCbWIzSWdhMlY1SUNWeklDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0ozZG9aVzRnYldsNGFXNW5JR2x1SUdOdmJYQnZibVZ1ZENCemNHVmpjeTRuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM0JsWTFCdmJHbGplU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHNWhiV1ZjYmlBZ0lDQWdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLR2x6VW1WaFkzUkRiR0Z6YzAxbGRHaHZaQ0FtSmlBb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzNCbFkxQnZiR2xqZVNBOVBUMGdVM0JsWTFCdmJHbGplUzVFUlVaSlRrVmZUVUZPV1Y5TlJWSkhSVVFnZkh3Z2MzQmxZMUJ2YkdsamVTQTlQVDBnVTNCbFkxQnZiR2xqZVM1RVJVWkpUa1ZmVFVGT1dTbGNiaUFnSUNBZ0lDQWdJQ0FwS1NrN1hHNWNiaUFnSUNBZ0lDQWdJQ0F2THlCR2IzSWdiV1YwYUc5a2N5QjNhR2xqYUNCaGNtVWdaR1ZtYVc1bFpDQnRiM0psSUhSb1lXNGdiMjVqWlN3Z1kyRnNiQ0IwYUdVZ1pYaHBjM1JwYm1kY2JpQWdJQ0FnSUNBZ0lDQXZMeUJ0WlhSb2IyUnpJR0psWm05eVpTQmpZV3hzYVc1bklIUm9aU0J1WlhjZ2NISnZjR1Z5ZEhrc0lHMWxjbWRwYm1jZ2FXWWdZWEJ3Y205d2NtbGhkR1V1WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSE53WldOUWIyeHBZM2tnUFQwOUlGTndaV05RYjJ4cFkza3VSRVZHU1U1RlgwMUJUbGxmVFVWU1IwVkVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQndjbTkwYjF0dVlXMWxYU0E5SUdOeVpXRjBaVTFsY21kbFpGSmxjM1ZzZEVaMWJtTjBhVzl1S0hCeWIzUnZXMjVoYldWZExDQndjbTl3WlhKMGVTazdYRzRnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtSUNoemNHVmpVRzlzYVdONUlEMDlQU0JUY0dWalVHOXNhV041TGtSRlJrbE9SVjlOUVU1WktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCd2NtOTBiMXR1WVcxbFhTQTlJR055WldGMFpVTm9ZV2x1WldSR2RXNWpkR2x2Ymlod2NtOTBiMXR1WVcxbFhTd2djSEp2Y0dWeWRIa3BPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQndjbTkwYjF0dVlXMWxYU0E5SUhCeWIzQmxjblI1TzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklFRmtaQ0IyWlhKaWIzTmxJR1JwYzNCc1lYbE9ZVzFsSUhSdklIUm9aU0JtZFc1amRHbHZiaXdnZDJocFkyZ2dhR1ZzY0hNZ2QyaGxiaUJzYjI5cmFXNW5YRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QmhkQ0J3Y205bWFXeHBibWNnZEc5dmJITXVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlIQnliM0JsY25SNUlEMDlQU0FuWm5WdVkzUnBiMjRuSUNZbUlITndaV011WkdsemNHeGhlVTVoYldVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NISnZkRzliYm1GdFpWMHVaR2x6Y0d4aGVVNWhiV1VnUFNCemNHVmpMbVJwYzNCc1lYbE9ZVzFsSUNzZ0oxOG5JQ3NnYm1GdFpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JuMWNibHh1Wm5WdVkzUnBiMjRnYldsNFUzUmhkR2xqVTNCbFkwbHVkRzlEYjIxd2IyNWxiblFvUTI5dWMzUnlkV04wYjNJc0lITjBZWFJwWTNNcElIdGNiaUFnYVdZZ0tDRnpkR0YwYVdOektTQjdYRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzRnSUdadmNpQW9kbUZ5SUc1aGJXVWdhVzRnYzNSaGRHbGpjeWtnZTF4dUlDQWdJSFpoY2lCd2NtOXdaWEowZVNBOUlITjBZWFJwWTNOYmJtRnRaVjA3WEc0Z0lDQWdhV1lnS0NGemRHRjBhV056TG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcEtTQjdYRzRnSUNBZ0lDQmpiMjUwYVc1MVpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdhWE5TWlhObGNuWmxaQ0E5SUc1aGJXVWdhVzRnVWtWVFJWSldSVVJmVTFCRlExOUxSVmxUTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQWhhWE5TWlhObGNuWmxaQ3hjYmlBZ0lDQWdJQ2RTWldGamRFTnNZWE56T2lCWmIzVWdZWEpsSUdGMGRHVnRjSFJwYm1jZ2RHOGdaR1ZtYVc1bElHRWdjbVZ6WlhKMlpXUWdKeUFyWEc0Z0lDQWdJQ0FuY0hKdmNHVnlkSGtzSUdBbGMyQXNJSFJvWVhRZ2MyaHZkV3hrYmx4Y0ozUWdZbVVnYjI0Z2RHaGxJRndpYzNSaGRHbGpjMXdpSUd0bGVTNGdSR1ZtYVc1bElHbDBJQ2NnSzF4dUlDQWdJQ0FnSjJGeklHRnVJR2x1YzNSaGJtTmxJSEJ5YjNCbGNuUjVJR2x1YzNSbFlXUTdJR2wwSUhkcGJHd2djM1JwYkd3Z1ltVWdZV05qWlhOemFXSnNaU0J2YmlCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FuWTI5dWMzUnlkV04wYjNJdUp5eGNiaUFnSUNBZ0lHNWhiV1ZjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0NGcGMxSmxjMlZ5ZG1Wa0tTazdYRzVjYmlBZ0lDQjJZWElnYVhOSmJtaGxjbWwwWldRZ1BTQnVZVzFsSUdsdUlFTnZibk4wY25WamRHOXlPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBaGFYTkpibWhsY21sMFpXUXNYRzRnSUNBZ0lDQW5VbVZoWTNSRGJHRnpjem9nV1c5MUlHRnlaU0JoZEhSbGJYQjBhVzVuSUhSdklHUmxabWx1WlNBbklDdGNiaUFnSUNBZ0lDZGdKWE5nSUc5dUlIbHZkWElnWTI5dGNHOXVaVzUwSUcxdmNtVWdkR2hoYmlCdmJtTmxMaUJVYUdseklHTnZibVpzYVdOMElHMWhlU0JpWlNBbklDdGNiaUFnSUNBZ0lDZGtkV1VnZEc4Z1lTQnRhWGhwYmk0bkxGeHVJQ0FnSUNBZ2JtRnRaVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVdselNXNW9aWEpwZEdWa0tTazdYRzRnSUNBZ1EyOXVjM1J5ZFdOMGIzSmJibUZ0WlYwZ1BTQndjbTl3WlhKMGVUdGNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRTFsY21kbElIUjNieUJ2WW1wbFkzUnpMQ0JpZFhRZ2RHaHliM2NnYVdZZ1ltOTBhQ0JqYjI1MFlXbHVJSFJvWlNCellXMWxJR3RsZVM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYjI1bElGUm9aU0JtYVhKemRDQnZZbXBsWTNRc0lIZG9hV05vSUdseklHMTFkR0YwWldRdVhHNGdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdkSGR2SUZSb1pTQnpaV052Ym1RZ2IySnFaV04wWEc0Z0tpQkFjbVYwZFhKdUlIdHZZbXBsWTNSOUlHOXVaU0JoWm5SbGNpQnBkQ0JvWVhNZ1ltVmxiaUJ0ZFhSaGRHVmtJSFJ2SUdOdmJuUmhhVzRnWlhabGNubDBhR2x1WnlCcGJpQjBkMjh1WEc0Z0tpOWNibVoxYm1OMGFXOXVJRzFsY21kbFNXNTBiMWRwZEdoT2IwUjFjR3hwWTJGMFpVdGxlWE1vYjI1bExDQjBkMjhwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNCdmJtVWdKaVlnZEhkdklDWW1JSFI1Y0dWdlppQnZibVVnUFQwOUlDZHZZbXBsWTNRbklDWW1JSFI1Y0dWdlppQjBkMjhnUFQwOUlDZHZZbXBsWTNRbkxGeHVJQ0FnSUNkdFpYSm5aVWx1ZEc5WGFYUm9UbTlFZFhCc2FXTmhkR1ZMWlhsektDazZJRU5oYm01dmRDQnRaWEpuWlNCdWIyNHRiMkpxWldOMGN5NG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9iMjVsSUNZbUlIUjNieUFtSmlCMGVYQmxiMllnYjI1bElEMDlQU0FuYjJKcVpXTjBKeUFtSmlCMGVYQmxiMllnZEhkdklEMDlQU0FuYjJKcVpXTjBKeWtwTzF4dVhHNGdJR1p2Y2lBb2RtRnlJR3RsZVNCcGJpQjBkMjhwSUh0Y2JpQWdJQ0JwWmlBb2RIZHZMbWhoYzA5M2JsQnliM0JsY25SNUtHdGxlU2twSUh0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUc5dVpWdHJaWGxkSUQwOVBTQjFibVJsWm1sdVpXUXNYRzRnSUNBZ0lDQWdJQ2R0WlhKblpVbHVkRzlYYVhSb1RtOUVkWEJzYVdOaGRHVkxaWGx6S0NrNklDY2dLMXh1SUNBZ0lDQWdJQ0FuVkhKcFpXUWdkRzhnYldWeVoyVWdkSGR2SUc5aWFtVmpkSE1nZDJsMGFDQjBhR1VnYzJGdFpTQnJaWGs2SUdBbGMyQXVJRlJvYVhNZ1kyOXVabXhwWTNRZ0p5QXJYRzRnSUNBZ0lDQWdJQ2R0WVhrZ1ltVWdaSFZsSUhSdklHRWdiV2w0YVc0N0lHbHVJSEJoY25ScFkzVnNZWElzSUhSb2FYTWdiV0Y1SUdKbElHTmhkWE5sWkNCaWVTQjBkMjhnSnlBclhHNGdJQ0FnSUNBZ0lDZG5aWFJKYm1sMGFXRnNVM1JoZEdVb0tTQnZjaUJuWlhSRVpXWmhkV3gwVUhKdmNITW9LU0J0WlhSb2IyUnpJSEpsZEhWeWJtbHVaeUJ2WW1wbFkzUnpJQ2NnSzF4dUlDQWdJQ0FnSUNBbmQybDBhQ0JqYkdGemFHbHVaeUJyWlhsekxpY3NYRzRnSUNBZ0lDQWdJR3RsZVZ4dUlDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHZibVZiYTJWNVhTQTlQVDBnZFc1a1pXWnBibVZrS1NrN1hHNGdJQ0FnSUNCdmJtVmJhMlY1WFNBOUlIUjNiMXRyWlhsZE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYjI1bE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCbWRXNWpkR2x2YmlCMGFHRjBJR2x1ZG05clpYTWdkSGR2SUdaMWJtTjBhVzl1Y3lCaGJtUWdiV1Z5WjJWeklIUm9aV2x5SUhKbGRIVnliaUIyWVd4MVpYTXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdiMjVsSUVaMWJtTjBhVzl1SUhSdklHbHVkbTlyWlNCbWFYSnpkQzVjYmlBcUlFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlIUjNieUJHZFc1amRHbHZiaUIwYnlCcGJuWnZhMlVnYzJWamIyNWtMbHh1SUNvZ1FISmxkSFZ5YmlCN1puVnVZM1JwYjI1OUlFWjFibU4wYVc5dUlIUm9ZWFFnYVc1MmIydGxjeUIwYUdVZ2RIZHZJR0Z5WjNWdFpXNTBJR1oxYm1OMGFXOXVjeTVjYmlBcUlFQndjbWwyWVhSbFhHNGdLaTljYm1aMWJtTjBhVzl1SUdOeVpXRjBaVTFsY21kbFpGSmxjM1ZzZEVaMWJtTjBhVzl1S0c5dVpTd2dkSGR2S1NCN1hHNGdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpQnRaWEpuWldSU1pYTjFiSFFvS1NCN1hHNGdJQ0FnZG1GeUlHRWdQU0J2Ym1VdVlYQndiSGtvZEdocGN5d2dZWEpuZFcxbGJuUnpLVHRjYmlBZ0lDQjJZWElnWWlBOUlIUjNieTVoY0hCc2VTaDBhR2x6TENCaGNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUdsbUlDaGhJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmlPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9ZaUE5UFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZVHRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR01nUFNCN2ZUdGNiaUFnSUNCdFpYSm5aVWx1ZEc5WGFYUm9UbTlFZFhCc2FXTmhkR1ZMWlhsektHTXNJR0VwTzF4dUlDQWdJRzFsY21kbFNXNTBiMWRwZEdoT2IwUjFjR3hwWTJGMFpVdGxlWE1vWXl3Z1lpazdYRzRnSUNBZ2NtVjBkWEp1SUdNN1hHNGdJSDA3WEc1OVhHNWNiaThxS2x4dUlDb2dRM0psWVhSbGN5QmhJR1oxYm1OMGFXOXVJSFJvWVhRZ2FXNTJiMnRsY3lCMGQyOGdablZ1WTNScGIyNXpJR0Z1WkNCcFoyNXZjbVZ6SUhSb1pXbHlJSEpsZEhWeWJpQjJZV3hsY3k1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCdmJtVWdSblZ1WTNScGIyNGdkRzhnYVc1MmIydGxJR1pwY25OMExseHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnZEhkdklFWjFibU4wYVc5dUlIUnZJR2x1ZG05clpTQnpaV052Ym1RdVhHNGdLaUJBY21WMGRYSnVJSHRtZFc1amRHbHZibjBnUm5WdVkzUnBiMjRnZEdoaGRDQnBiblp2YTJWeklIUm9aU0IwZDI4Z1lYSm5kVzFsYm5RZ1puVnVZM1JwYjI1ekxseHVJQ29nUUhCeWFYWmhkR1ZjYmlBcUwxeHVablZ1WTNScGIyNGdZM0psWVhSbFEyaGhhVzVsWkVaMWJtTjBhVzl1S0c5dVpTd2dkSGR2S1NCN1hHNGdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpQmphR0ZwYm1Wa1JuVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2IyNWxMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNGdJQ0FnZEhkdkxtRndjR3g1S0hSb2FYTXNJR0Z5WjNWdFpXNTBjeWs3WEc0Z0lIMDdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FtbHVaSE1nWVNCdFpYUm9iMlFnZEc4Z2RHaGxJR052YlhCdmJtVnVkQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdZMjl0Y0c5dVpXNTBJRU52YlhCdmJtVnVkQ0IzYUc5elpTQnRaWFJvYjJRZ2FYTWdaMjlwYm1jZ2RHOGdZbVVnWW05MWJtUXVYRzRnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCdFpYUm9iMlFnVFdWMGFHOWtJSFJ2SUdKbElHSnZkVzVrTGx4dUlDb2dRSEpsZEhWeWJpQjdablZ1WTNScGIyNTlJRlJvWlNCaWIzVnVaQ0J0WlhSb2IyUXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHSnBibVJCZFhSdlFtbHVaRTFsZEdodlpDaGpiMjF3YjI1bGJuUXNJRzFsZEdodlpDa2dlMXh1SUNCMllYSWdZbTkxYm1STlpYUm9iMlFnUFNCdFpYUm9iMlF1WW1sdVpDaGpiMjF3YjI1bGJuUXBPMXh1SUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnWW05MWJtUk5aWFJvYjJRdVgxOXlaV0ZqZEVKdmRXNWtRMjl1ZEdWNGRDQTlJR052YlhCdmJtVnVkRHRjYmlBZ0lDQmliM1Z1WkUxbGRHaHZaQzVmWDNKbFlXTjBRbTkxYm1STlpYUm9iMlFnUFNCdFpYUm9iMlE3WEc0Z0lDQWdZbTkxYm1STlpYUm9iMlF1WDE5eVpXRmpkRUp2ZFc1a1FYSm5kVzFsYm5SeklEMGdiblZzYkR0Y2JpQWdJQ0IyWVhJZ1kyOXRjRzl1Wlc1MFRtRnRaU0E5SUdOdmJYQnZibVZ1ZEM1amIyNXpkSEoxWTNSdmNpNWthWE53YkdGNVRtRnRaVHRjYmlBZ0lDQjJZWElnWDJKcGJtUWdQU0JpYjNWdVpFMWxkR2h2WkM1aWFXNWtPMXh1SUNBZ0lDOHFJR1Z6YkdsdWRDMWthWE5oWW14bElHSnNiMk5yTFhOamIzQmxaQzEyWVhJc0lHNXZMWFZ1WkdWbUlDb3ZYRzRnSUNBZ1ltOTFibVJOWlhSb2IyUXVZbWx1WkNBOUlHWjFibU4wYVc5dUtHNWxkMVJvYVhNZ0tTQjdabTl5SUNoMllYSWdZWEpuY3oxYlhTd2tYMTh3UFRFc0pGOWZNVDFoY21kMWJXVnVkSE11YkdWdVozUm9PeVJmWHpBOEpGOWZNVHNrWDE4d0t5c3BJR0Z5WjNNdWNIVnphQ2hoY21kMWJXVnVkSE5iSkY5Zk1GMHBPMXh1SUNBZ0lDQWdMeThnVlhObGNpQnBjeUIwY25scGJtY2dkRzhnWW1sdVpDZ3BJR0Z1SUdGMWRHOWliM1Z1WkNCdFpYUm9iMlE3SUhkbElHVm1abVZqZEdsMlpXeDVJSGRwYkd4Y2JpQWdJQ0FnSUM4dklHbG5ibTl5WlNCMGFHVWdkbUZzZFdVZ2IyWWdYQ0owYUdselhDSWdkR2hoZENCMGFHVWdkWE5sY2lCcGN5QjBjbmxwYm1jZ2RHOGdkWE5sTENCemIxeHVJQ0FnSUNBZ0x5OGdiR1YwSjNNZ2QyRnliaTVjYmlBZ0lDQWdJR2xtSUNodVpYZFVhR2x6SUNFOVBTQmpiMjF3YjI1bGJuUWdKaVlnYm1WM1ZHaHBjeUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBblltbHVaQ2dwT2lCU1pXRmpkQ0JqYjIxd2IyNWxiblFnYldWMGFHOWtjeUJ0WVhrZ2IyNXNlU0JpWlNCaWIzVnVaQ0IwYnlCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oyTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTNGdVMlZsSUNWekp5eGNiaUFnSUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblJPWVcxbFhHNGdJQ0FnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9JV0Z5WjNNdWJHVnVaM1JvS1NCN1hHNGdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBZ0lDZGlhVzVrS0NrNklGbHZkU0JoY21VZ1ltbHVaR2x1WnlCaElHTnZiWEJ2Ym1WdWRDQnRaWFJvYjJRZ2RHOGdkR2hsSUdOdmJYQnZibVZ1ZEM0Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBJR1J2WlhNZ2RHaHBjeUJtYjNJZ2VXOTFJR0YxZEc5dFlYUnBZMkZzYkhrZ2FXNGdZU0JvYVdkb0xYQmxjbVp2Y20xaGJtTmxJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZDNZWGtzSUhOdklIbHZkU0JqWVc0Z2MyRm1aV3g1SUhKbGJXOTJaU0IwYUdseklHTmhiR3d1SUZObFpTQWxjeWNzWEc0Z0lDQWdJQ0FnSUNBZ1kyOXRjRzl1Wlc1MFRtRnRaVnh1SUNBZ0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJpYjNWdVpFMWxkR2h2WkR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhaaGNpQnlaV0p2ZFc1a1RXVjBhRzlrSUQwZ1gySnBibVF1WVhCd2JIa29ZbTkxYm1STlpYUm9iMlFzSUdGeVozVnRaVzUwY3lrN1hHNGdJQ0FnSUNCeVpXSnZkVzVrVFdWMGFHOWtMbDlmY21WaFkzUkNiM1Z1WkVOdmJuUmxlSFFnUFNCamIyMXdiMjVsYm5RN1hHNGdJQ0FnSUNCeVpXSnZkVzVrVFdWMGFHOWtMbDlmY21WaFkzUkNiM1Z1WkUxbGRHaHZaQ0E5SUcxbGRHaHZaRHRjYmlBZ0lDQWdJSEpsWW05MWJtUk5aWFJvYjJRdVgxOXlaV0ZqZEVKdmRXNWtRWEpuZFcxbGJuUnpJRDBnWVhKbmN6dGNiaUFnSUNBZ0lISmxkSFZ5YmlCeVpXSnZkVzVrVFdWMGFHOWtPMXh1SUNBZ0lDQWdMeW9nWlhOc2FXNTBMV1Z1WVdKc1pTQXFMMXh1SUNBZ0lIMDdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHSnZkVzVrVFdWMGFHOWtPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFSnBibVJ6SUdGc2JDQmhkWFJ2TFdKdmRXNWtJRzFsZEdodlpITWdhVzRnWVNCamIyMXdiMjVsYm5RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUdOdmJYQnZibVZ1ZENCRGIyMXdiMjVsYm5RZ2QyaHZjMlVnYldWMGFHOWtJR2x6SUdkdmFXNW5JSFJ2SUdKbElHSnZkVzVrTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJpYVc1a1FYVjBiMEpwYm1STlpYUm9iMlJ6S0dOdmJYQnZibVZ1ZENrZ2UxeHVJQ0JtYjNJZ0tIWmhjaUJoZFhSdlFtbHVaRXRsZVNCcGJpQmpiMjF3YjI1bGJuUXVYMTl5WldGamRFRjFkRzlDYVc1a1RXRndLU0I3WEc0Z0lDQWdhV1lnS0dOdmJYQnZibVZ1ZEM1ZlgzSmxZV04wUVhWMGIwSnBibVJOWVhBdWFHRnpUM2R1VUhKdmNHVnlkSGtvWVhWMGIwSnBibVJMWlhrcEtTQjdYRzRnSUNBZ0lDQjJZWElnYldWMGFHOWtJRDBnWTI5dGNHOXVaVzUwTGw5ZmNtVmhZM1JCZFhSdlFtbHVaRTFoY0Z0aGRYUnZRbWx1WkV0bGVWMDdYRzRnSUNBZ0lDQmpiMjF3YjI1bGJuUmJZWFYwYjBKcGJtUkxaWGxkSUQwZ1ltbHVaRUYxZEc5Q2FXNWtUV1YwYUc5a0tGeHVJQ0FnSUNBZ0lDQmpiMjF3YjI1bGJuUXNYRzRnSUNBZ0lDQWdJRkpsWVdOMFJYSnliM0pWZEdsc2N5NW5kV0Z5WkNoY2JpQWdJQ0FnSUNBZ0lDQnRaWFJvYjJRc1hHNGdJQ0FnSUNBZ0lDQWdZMjl0Y0c5dVpXNTBMbU52Ym5OMGNuVmpkRzl5TG1ScGMzQnNZWGxPWVcxbElDc2dKeTRuSUNzZ1lYVjBiMEpwYm1STFpYbGNiaUFnSUNBZ0lDQWdLVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMWNibHh1ZG1GeUlIUjVjR1ZFWlhCeVpXTmhkR2x2YmtSbGMyTnlhWEIwYjNJZ1BTQjdYRzRnSUdWdWRXMWxjbUZpYkdVNklHWmhiSE5sTEZ4dUlDQm5aWFE2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhaaGNpQmthWE53YkdGNVRtRnRaU0E5SUhSb2FYTXVaR2x6Y0d4aGVVNWhiV1VnZkh3Z2RHaHBjeTV1WVcxbElIeDhJQ2REYjIxd2IyNWxiblFuTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FuSlhNdWRIbHdaU0JwY3lCa1pYQnlaV05oZEdWa0xpQlZjMlVnSlhNZ1pHbHlaV04wYkhrZ2RHOGdZV05qWlhOeklIUm9aU0JqYkdGemN5NG5MRnh1SUNBZ0lDQWdaR2x6Y0d4aGVVNWhiV1VzWEc0Z0lDQWdJQ0JrYVhOd2JHRjVUbUZ0WlZ4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEdocGN5d2dKM1I1Y0dVbkxDQjdYRzRnSUNBZ0lDQjJZV3gxWlRvZ2RHaHBjMXh1SUNBZ0lIMHBPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOVhHNTlPMXh1WEc0dktpcGNiaUFxSUVGa1pDQnRiM0psSUhSdklIUm9aU0JTWldGamRFTnNZWE56SUdKaGMyVWdZMnhoYzNNdUlGUm9aWE5sSUdGeVpTQmhiR3dnYkdWbllXTjVJR1psWVhSMWNtVnpJR0Z1WkZ4dUlDb2dkR2hsY21WbWIzSmxJRzV2ZENCaGJISmxZV1I1SUhCaGNuUWdiMllnZEdobElHMXZaR1Z5YmlCU1pXRmpkRU52YlhCdmJtVnVkQzVjYmlBcUwxeHVkbUZ5SUZKbFlXTjBRMnhoYzNOTmFYaHBiaUE5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVkU5RVR6b2dWR2hwY3lCM2FXeHNJR0psSUdSbGNISmxZMkYwWldRZ1ltVmpZWFZ6WlNCemRHRjBaU0J6YUc5MWJHUWdZV3gzWVhseklHdGxaWEFnWVNCamIyNXphWE4wWlc1MFhHNGdJQ0FxSUhSNWNHVWdjMmxuYm1GMGRYSmxJR0Z1WkNCMGFHVWdiMjVzZVNCMWMyVWdZMkZ6WlNCbWIzSWdkR2hwY3l3Z2FYTWdkRzhnWVhadmFXUWdkR2hoZEM1Y2JpQWdJQ292WEc0Z0lISmxjR3hoWTJWVGRHRjBaVG9nWm5WdVkzUnBiMjRvYm1WM1UzUmhkR1VzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxVbVZ3YkdGalpWTjBZWFJsS0hSb2FYTXNJRzVsZDFOMFlYUmxLVHRjYmlBZ0lDQnBaaUFvWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0FnSUZKbFlXTjBWWEJrWVhSbFVYVmxkV1V1Wlc1eGRXVjFaVU5oYkd4aVlXTnJLSFJvYVhNc0lHTmhiR3hpWVdOcktUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRU5vWldOcmN5QjNhR1YwYUdWeUlHOXlJRzV2ZENCMGFHbHpJR052YlhCdmMybDBaU0JqYjIxd2IyNWxiblFnYVhNZ2JXOTFiblJsWkM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUJ0YjNWdWRHVmtMQ0JtWVd4elpTQnZkR2hsY25kcGMyVXVYRzRnSUNBcUlFQndjbTkwWldOMFpXUmNiaUFnSUNvZ1FHWnBibUZzWEc0Z0lDQXFMMXh1SUNCcGMwMXZkVzUwWldRNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIWmhjaUJ2ZDI1bGNpQTlJRkpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlMbU4xY25KbGJuUTdYRzRnSUNBZ0lDQnBaaUFvYjNkdVpYSWdJVDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJQ0FnYjNkdVpYSXVYM2RoY201bFpFRmliM1YwVW1WbWMwbHVVbVZ1WkdWeUxGeHVJQ0FnSUNBZ0lDQWdJQ2NsY3lCcGN5QmhZMk5sYzNOcGJtY2dhWE5OYjNWdWRHVmtJR2x1YzJsa1pTQnBkSE1nY21WdVpHVnlLQ2tnWm5WdVkzUnBiMjR1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2R5Wlc1a1pYSW9LU0J6YUc5MWJHUWdZbVVnWVNCd2RYSmxJR1oxYm1OMGFXOXVJRzltSUhCeWIzQnpJR0Z1WkNCemRHRjBaUzRnU1hRZ2MyaHZkV3hrSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2R1WlhabGNpQmhZMk5sYzNNZ2MyOXRaWFJvYVc1bklIUm9ZWFFnY21WeGRXbHlaWE1nYzNSaGJHVWdaR0YwWVNCbWNtOXRJSFJvWlNCd2NtVjJhVzkxY3lBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuY21WdVpHVnlMQ0J6ZFdOb0lHRnpJSEpsWm5NdUlFMXZkbVVnZEdocGN5QnNiMmRwWXlCMGJ5QmpiMjF3YjI1bGJuUkVhV1JOYjNWdWRDQmhibVFnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKMk52YlhCdmJtVnVkRVJwWkZWd1pHRjBaU0JwYm5OMFpXRmtMaWNzWEc0Z0lDQWdJQ0FnSUNBZ2IzZHVaWEl1WjJWMFRtRnRaU2dwSUh4OElDZEJJR052YlhCdmJtVnVkQ2RjYmlBZ0lDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnSUNCdmQyNWxjaTVmZDJGeWJtVmtRV0p2ZFhSU1pXWnpTVzVTWlc1a1pYSWdQU0IwY25WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0IyWVhJZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNBOUlGSmxZV04wU1c1emRHRnVZMlZOWVhBdVoyVjBLSFJvYVhNcE8xeHVJQ0FnSUhKbGRIVnliaUFvWEc0Z0lDQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxJQ1ltWEc0Z0lDQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxJQ0U5UFNCU1pXRmpkRXhwWm1WRGVXTnNaUzVqZFhKeVpXNTBiSGxOYjNWdWRHbHVaMGx1YzNSaGJtTmxYRzRnSUNBZ0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJWMGN5QmhJSE4xWW5ObGRDQnZaaUIwYUdVZ2NISnZjSE11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCd1lYSjBhV0ZzVUhKdmNITWdVM1ZpYzJWMElHOW1JSFJvWlNCdVpYaDBJSEJ5YjNCekxseHVJQ0FnS2lCQWNHRnlZVzBnZXo5bWRXNWpkR2x2Ym4wZ1kyRnNiR0poWTJzZ1EyRnNiR1ZrSUdGbWRHVnlJSEJ5YjNCeklHRnlaU0IxY0dSaGRHVmtMbHh1SUNBZ0tpQkFabWx1WVd4Y2JpQWdJQ29nUUhCMVlteHBZMXh1SUNBZ0tpQkFaR1Z3Y21WallYUmxaRnh1SUNBZ0tpOWNiaUFnYzJWMFVISnZjSE02SUdaMWJtTjBhVzl1S0hCaGNuUnBZV3hRY205d2N5d2dZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQlNaV0ZqZEZWd1pHRjBaVkYxWlhWbExtVnVjWFZsZFdWVFpYUlFjbTl3Y3loMGFHbHpMQ0J3WVhKMGFXRnNVSEp2Y0hNcE8xeHVJQ0FnSUdsbUlDaGpZV3hzWW1GamF5a2dlMXh1SUNBZ0lDQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFEyRnNiR0poWTJzb2RHaHBjeXdnWTJGc2JHSmhZMnNwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVndiR0ZqWlNCaGJHd2dkR2hsSUhCeWIzQnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYm1WM1VISnZjSE1nVTNWaWMyVjBJRzltSUhSb1pTQnVaWGgwSUhCeWIzQnpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2V6OW1kVzVqZEdsdmJuMGdZMkZzYkdKaFkyc2dRMkZzYkdWa0lHRm1kR1Z5SUhCeWIzQnpJR0Z5WlNCMWNHUmhkR1ZrTGx4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvZ1FIQjFZbXhwWTF4dUlDQWdLaUJBWkdWd2NtVmpZWFJsWkZ4dUlDQWdLaTljYmlBZ2NtVndiR0ZqWlZCeWIzQnpPaUJtZFc1amRHbHZiaWh1WlhkUWNtOXdjeXdnWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0JTWldGamRGVndaR0YwWlZGMVpYVmxMbVZ1Y1hWbGRXVlNaWEJzWVdObFVISnZjSE1vZEdocGN5d2dibVYzVUhKdmNITXBPMXh1SUNBZ0lHbG1JQ2hqWVd4c1ltRmpheWtnZTF4dUlDQWdJQ0FnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxRMkZzYkdKaFkyc29kR2hwY3l3Z1kyRnNiR0poWTJzcE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlR0Y2JseHVkbUZ5SUZKbFlXTjBRMnhoYzNORGIyMXdiMjVsYm5RZ1BTQm1kVzVqZEdsdmJpZ3BJSHQ5TzF4dVlYTnphV2R1S0Z4dUlDQlNaV0ZqZEVOc1lYTnpRMjl0Y0c5dVpXNTBMbkJ5YjNSdmRIbHdaU3hjYmlBZ1VtVmhZM1JEYjIxd2IyNWxiblF1Y0hKdmRHOTBlWEJsTEZ4dUlDQlNaV0ZqZEVOc1lYTnpUV2w0YVc1Y2JpazdYRzVjYmk4cUtseHVJQ29nVFc5a2RXeGxJR1p2Y2lCamNtVmhkR2x1WnlCamIyMXdiM05wZEdVZ1kyOXRjRzl1Wlc1MGN5NWNiaUFxWEc0Z0tpQkFZMnhoYzNNZ1VtVmhZM1JEYkdGemMxeHVJQ292WEc1MllYSWdVbVZoWTNSRGJHRnpjeUE5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTNKbFlYUmxjeUJoSUdOdmJYQnZjMmwwWlNCamIyMXdiMjVsYm5RZ1kyeGhjM01nWjJsMlpXNGdZU0JqYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2MzQmxZeUJEYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1SUNoM2FHbGphQ0J0ZFhOMElHUmxabWx1WlNCZ2NtVnVaR1Z5WUNrdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTJaMWJtTjBhVzl1ZlNCRGIyMXdiMjVsYm5RZ1kyOXVjM1J5ZFdOMGIzSWdablZ1WTNScGIyNHVYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ292WEc0Z0lHTnlaV0YwWlVOc1lYTnpPaUJtZFc1amRHbHZiaWh6Y0dWaktTQjdYRzRnSUNBZ2RtRnlJRU52Ym5OMGNuVmpkRzl5SUQwZ1puVnVZM1JwYjI0b2NISnZjSE1zSUdOdmJuUmxlSFFwSUh0Y2JpQWdJQ0FnSUM4dklGUm9hWE1nWTI5dWMzUnlkV04wYjNJZ2FYTWdiM1psY25KcFpHUmxiaUJpZVNCdGIyTnJjeTRnVkdobElHRnlaM1Z0Wlc1MElHbHpJSFZ6WldSY2JpQWdJQ0FnSUM4dklHSjVJRzF2WTJ0eklIUnZJR0Z6YzJWeWRDQnZiaUIzYUdGMElHZGxkSE1nYlc5MWJuUmxaQzVjYmx4dUlDQWdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpJR2x1YzNSaGJtTmxiMllnUTI5dWMzUnlkV04wYjNJc1hHNGdJQ0FnSUNBZ0lDQWdKMU52YldWMGFHbHVaeUJwY3lCallXeHNhVzVuSUdFZ1VtVmhZM1FnWTI5dGNHOXVaVzUwSUdScGNtVmpkR3g1TGlCVmMyVWdZU0JtWVdOMGIzSjVJRzl5SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RLVTFnZ2FXNXpkR1ZoWkM0Z1UyVmxPaUJvZEhSd2N6b3ZMMlppTG0xbEwzSmxZV04wTFd4bFoyRmplV1poWTNSdmNua25YRzRnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnTHk4Z1YybHlaU0IxY0NCaGRYUnZMV0pwYm1ScGJtZGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxsOWZjbVZoWTNSQmRYUnZRbWx1WkUxaGNDa2dlMXh1SUNBZ0lDQWdJQ0JpYVc1a1FYVjBiMEpwYm1STlpYUm9iMlJ6S0hSb2FYTXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IwYUdsekxuQnliM0J6SUQwZ2NISnZjSE03WEc0Z0lDQWdJQ0IwYUdsekxtTnZiblJsZUhRZ1BTQmpiMjUwWlhoME8xeHVJQ0FnSUNBZ2RHaHBjeTV6ZEdGMFpTQTlJRzUxYkd3N1hHNWNiaUFnSUNBZ0lDOHZJRkpsWVdOMFEyeGhjM05sY3lCa2IyVnpiaWQwSUdoaGRtVWdZMjl1YzNSeWRXTjBiM0p6TGlCSmJuTjBaV0ZrTENCMGFHVjVJSFZ6WlNCMGFHVmNiaUFnSUNBZ0lDOHZJR2RsZEVsdWFYUnBZV3hUZEdGMFpTQmhibVFnWTI5dGNHOXVaVzUwVjJsc2JFMXZkVzUwSUcxbGRHaHZaSE1nWm05eUlHbHVhWFJwWVd4cGVtRjBhVzl1TGx4dVhHNGdJQ0FnSUNCMllYSWdhVzVwZEdsaGJGTjBZWFJsSUQwZ2RHaHBjeTVuWlhSSmJtbDBhV0ZzVTNSaGRHVWdQeUIwYUdsekxtZGxkRWx1YVhScFlXeFRkR0YwWlNncElEb2diblZzYkR0Y2JpQWdJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdWMlVnWVd4c2IzY2dZWFYwYnkxdGIyTnJjeUIwYnlCd2NtOWpaV1ZrSUdGeklHbG1JSFJvWlhrbmNtVWdjbVYwZFhKdWFXNW5JRzUxYkd3dVhHNGdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdhVzVwZEdsaGJGTjBZWFJsSUQwOVBTQW5kVzVrWldacGJtVmtKeUFtSmx4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1blpYUkpibWwwYVdGc1UzUmhkR1V1WDJselRXOWphMFoxYm1OMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdWR2hwY3lCcGN5QndjbTlpWVdKc2VTQmlZV1FnY0hKaFkzUnBZMlV1SUVOdmJuTnBaR1Z5SUhkaGNtNXBibWNnYUdWeVpTQmhibVJjYmlBZ0lDQWdJQ0FnSUNBdkx5QmtaWEJ5WldOaGRHbHVaeUIwYUdseklHTnZiblpsYm1sbGJtTmxMbHh1SUNBZ0lDQWdJQ0FnSUdsdWFYUnBZV3hUZEdGMFpTQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lIUjVjR1Z2WmlCcGJtbDBhV0ZzVTNSaGRHVWdQVDA5SUNkdlltcGxZM1FuSUNZbUlDRkJjbkpoZVM1cGMwRnljbUY1S0dsdWFYUnBZV3hUZEdGMFpTa3NYRzRnSUNBZ0lDQWdJQ2NsY3k1blpYUkpibWwwYVdGc1UzUmhkR1VvS1RvZ2JYVnpkQ0J5WlhSMWNtNGdZVzRnYjJKcVpXTjBJRzl5SUc1MWJHd25MRnh1SUNBZ0lDQWdJQ0JEYjI1emRISjFZM1J2Y2k1a2FYTndiR0Y1VG1GdFpTQjhmQ0FuVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUW5YRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hSNWNHVnZaaUJwYm1sMGFXRnNVM1JoZEdVZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUNGQmNuSmhlUzVwYzBGeWNtRjVLR2x1YVhScFlXeFRkR0YwWlNrcEtUdGNibHh1SUNBZ0lDQWdkR2hwY3k1emRHRjBaU0E5SUdsdWFYUnBZV3hUZEdGMFpUdGNiaUFnSUNCOU8xeHVJQ0FnSUVOdmJuTjBjblZqZEc5eUxuQnliM1J2ZEhsd1pTQTlJRzVsZHlCU1pXRmpkRU5zWVhOelEyOXRjRzl1Wlc1MEtDazdYRzRnSUNBZ1EyOXVjM1J5ZFdOMGIzSXVjSEp2ZEc5MGVYQmxMbU52Ym5OMGNuVmpkRzl5SUQwZ1EyOXVjM1J5ZFdOMGIzSTdYRzVjYmlBZ0lDQnBibXBsWTNSbFpFMXBlR2x1Y3k1bWIzSkZZV05vS0Z4dUlDQWdJQ0FnYldsNFUzQmxZMGx1ZEc5RGIyMXdiMjVsYm5RdVltbHVaQ2h1ZFd4c0xDQkRiMjV6ZEhKMVkzUnZjaWxjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdiV2w0VTNCbFkwbHVkRzlEYjIxd2IyNWxiblFvUTI5dWMzUnlkV04wYjNJc0lITndaV01wTzF4dVhHNGdJQ0FnTHk4Z1NXNXBkR2xoYkdsNlpTQjBhR1VnWkdWbVlYVnNkRkJ5YjNCeklIQnliM0JsY25SNUlHRm1kR1Z5SUdGc2JDQnRhWGhwYm5NZ2FHRjJaU0JpWldWdUlHMWxjbWRsWkZ4dUlDQWdJR2xtSUNoRGIyNXpkSEoxWTNSdmNpNW5aWFJFWldaaGRXeDBVSEp2Y0hNcElIdGNiaUFnSUNBZ0lFTnZibk4wY25WamRHOXlMbVJsWm1GMWJIUlFjbTl3Y3lBOUlFTnZibk4wY25WamRHOXlMbWRsZEVSbFptRjFiSFJRY205d2N5Z3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDOHZJRlJvYVhNZ2FYTWdZU0IwWVdjZ2RHOGdhVzVrYVdOaGRHVWdkR2hoZENCMGFHVWdkWE5sSUc5bUlIUm9aWE5sSUcxbGRHaHZaQ0J1WVcxbGN5QnBjeUJ2YXl4Y2JpQWdJQ0FnSUM4dklITnBibU5sSUdsMEozTWdkWE5sWkNCM2FYUm9JR055WldGMFpVTnNZWE56TGlCSlppQnBkQ2R6SUc1dmRDd2dkR2hsYmlCcGRDZHpJR3hwYTJWc2VTQmhYRzRnSUNBZ0lDQXZMeUJ0YVhOMFlXdGxJSE52SUhkbEoyeHNJSGRoY200Z2VXOTFJSFJ2SUhWelpTQjBhR1VnYzNSaGRHbGpJSEJ5YjNCbGNuUjVMQ0J3Y205d1pYSjBlVnh1SUNBZ0lDQWdMeThnYVc1cGRHbGhiR2w2WlhJZ2IzSWdZMjl1YzNSeWRXTjBiM0lnY21WemNHVmpkR2wyWld4NUxseHVJQ0FnSUNBZ2FXWWdLRU52Ym5OMGNuVmpkRzl5TG1kbGRFUmxabUYxYkhSUWNtOXdjeWtnZTF4dUlDQWdJQ0FnSUNCRGIyNXpkSEoxWTNSdmNpNW5aWFJFWldaaGRXeDBVSEp2Y0hNdWFYTlNaV0ZqZEVOc1lYTnpRWEJ3Y205MlpXUWdQU0I3ZlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDaERiMjV6ZEhKMVkzUnZjaTV3Y205MGIzUjVjR1V1WjJWMFNXNXBkR2xoYkZOMFlYUmxLU0I3WEc0Z0lDQWdJQ0FnSUVOdmJuTjBjblZqZEc5eUxuQnliM1J2ZEhsd1pTNW5aWFJKYm1sMGFXRnNVM1JoZEdVdWFYTlNaV0ZqZEVOc1lYTnpRWEJ3Y205MlpXUWdQU0I3ZlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0l1Y0hKdmRHOTBlWEJsTG5KbGJtUmxjaXhjYmlBZ0lDQWdJQ2RqY21WaGRHVkRiR0Z6Y3lndUxpNHBPaUJEYkdGemN5QnpjR1ZqYVdacFkyRjBhVzl1SUcxMWMzUWdhVzF3YkdWdFpXNTBJR0VnWUhKbGJtUmxjbUFnYldWMGFHOWtMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0VOdmJuTjBjblZqZEc5eUxuQnliM1J2ZEhsd1pTNXlaVzVrWlhJcEtUdGNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBaFEyOXVjM1J5ZFdOMGIzSXVjSEp2ZEc5MGVYQmxMbU52YlhCdmJtVnVkRk5vYjNWc1pGVndaR0YwWlN4Y2JpQWdJQ0FnSUNBZ0p5VnpJR2hoY3lCaElHMWxkR2h2WkNCallXeHNaV1FnSnlBclhHNGdJQ0FnSUNBZ0lDZGpiMjF3YjI1bGJuUlRhRzkxYkdSVmNHUmhkR1VvS1M0Z1JHbGtJSGx2ZFNCdFpXRnVJSE5vYjNWc1pFTnZiWEJ2Ym1WdWRGVndaR0YwWlNncFB5QW5JQ3RjYmlBZ0lDQWdJQ0FnSjFSb1pTQnVZVzFsSUdseklIQm9jbUZ6WldRZ1lYTWdZU0J4ZFdWemRHbHZiaUJpWldOaGRYTmxJSFJvWlNCbWRXNWpkR2x2YmlCcGN5QW5JQ3RjYmlBZ0lDQWdJQ0FnSjJWNGNHVmpkR1ZrSUhSdklISmxkSFZ5YmlCaElIWmhiSFZsTGljc1hHNGdJQ0FnSUNBZ0lITndaV011WkdsemNHeGhlVTVoYldVZ2ZId2dKMEVnWTI5dGNHOXVaVzUwSjF4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUZKbFpIVmpaU0IwYVcxbElITndaVzUwSUdSdmFXNW5JR3h2YjJ0MWNITWdZbmtnYzJWMGRHbHVaeUIwYUdWelpTQnZiaUIwYUdVZ2NISnZkRzkwZVhCbExseHVJQ0FnSUdadmNpQW9kbUZ5SUcxbGRHaHZaRTVoYldVZ2FXNGdVbVZoWTNSRGJHRnpjMGx1ZEdWeVptRmpaU2tnZTF4dUlDQWdJQ0FnYVdZZ0tDRkRiMjV6ZEhKMVkzUnZjaTV3Y205MGIzUjVjR1ZiYldWMGFHOWtUbUZ0WlYwcElIdGNiaUFnSUNBZ0lDQWdRMjl1YzNSeWRXTjBiM0l1Y0hKdmRHOTBlWEJsVzIxbGRHaHZaRTVoYldWZElEMGdiblZzYkR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCTVpXZGhZM2tnYUc5dmExeHVJQ0FnSUVOdmJuTjBjblZqZEc5eUxuUjVjR1VnUFNCRGIyNXpkSEoxWTNSdmNqdGNiaUFnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb1EyOXVjM1J5ZFdOMGIzSXNJQ2QwZVhCbEp5d2dkSGx3WlVSbGNISmxZMkYwYVc5dVJHVnpZM0pwY0hSdmNpazdYRzRnSUNBZ0lDQjlJR05oZEdOb0lDaDRLU0I3WEc0Z0lDQWdJQ0FnSUM4dklFbEZJSGRwYkd3Z1ptRnBiQ0J2YmlCa1pXWnBibVZRY205d1pYSjBlU0FvWlhNMUxYTm9hVzB2YzJoaGJTQjBiMjhwWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlFTnZibk4wY25WamRHOXlPMXh1SUNCOUxGeHVYRzRnSUdsdWFtVmpkR2x2YmpvZ2UxeHVJQ0FnSUdsdWFtVmpkRTFwZUdsdU9pQm1kVzVqZEdsdmJpaHRhWGhwYmlrZ2UxeHVJQ0FnSUNBZ2FXNXFaV04wWldSTmFYaHBibk11Y0hWemFDaHRhWGhwYmlrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRGJHRnpjenRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29tcG9uZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlUXVldWVcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQuXG4gKi9cbmZ1bmN0aW9uIFJlYWN0Q29tcG9uZW50KHByb3BzLCBjb250ZXh0KSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbn1cblxuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblJlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uKHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2spIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fFxuICAgIHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHxcbiAgICBwYXJ0aWFsU3RhdGUgPT0gbnVsbCxcbiAgICAnc2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSAnICtcbiAgICAnZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLidcbiAgKSA6IGludmFyaWFudCh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fFxuICB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8XG4gIHBhcnRpYWxTdGF0ZSA9PSBudWxsKSk7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHBhcnRpYWxTdGF0ZSAhPSBudWxsLFxuICAgICAgJ3NldFN0YXRlKC4uLik6IFlvdSBwYXNzZWQgYW4gdW5kZWZpbmVkIG9yIG51bGwgc3RhdGUgb2JqZWN0OyAnICtcbiAgICAgICdpbnN0ZWFkLCB1c2UgZm9yY2VVcGRhdGUoKS4nXG4gICAgKSA6IG51bGwpO1xuICB9XG4gIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSk7XG4gIGlmIChjYWxsYmFjaykge1xuICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrKTtcbiAgfVxufTtcblxuLyoqXG4gKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAqXG4gKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAqXG4gKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICpcbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgdXBkYXRlIGlzIGNvbXBsZXRlLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblJlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMpO1xuICBpZiAoY2FsbGJhY2spIHtcbiAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjayk7XG4gIH1cbn07XG5cbi8qKlxuICogRGVwcmVjYXRlZCBBUElzLiBUaGVzZSBBUElzIHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5jZVxuICogd2Ugd291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRvIG1vdmUgdGhlbSBvdmVyIHRvIHRoaXNcbiAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3ZSBkZWZpbmUgYSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLlxuICovXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICBnZXRET01Ob2RlOiBbXG4gICAgICAnZ2V0RE9NTm9kZScsXG4gICAgICAnVXNlIFJlYWN0LmZpbmRET01Ob2RlKGNvbXBvbmVudCkgaW5zdGVhZC4nXG4gICAgXSxcbiAgICBpc01vdW50ZWQ6IFtcbiAgICAgICdpc01vdW50ZWQnLFxuICAgICAgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgK1xuICAgICAgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLidcbiAgICBdLFxuICAgIHJlcGxhY2VQcm9wczogW1xuICAgICAgJ3JlcGxhY2VQcm9wcycsXG4gICAgICAnSW5zdGVhZCwgY2FsbCBSZWFjdC5yZW5kZXIgYWdhaW4gYXQgdGhlIHRvcCBsZXZlbC4nXG4gICAgXSxcbiAgICByZXBsYWNlU3RhdGU6IFtcbiAgICAgICdyZXBsYWNlU3RhdGUnLFxuICAgICAgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgK1xuICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuJ1xuICAgIF0sXG4gICAgc2V0UHJvcHM6IFtcbiAgICAgICdzZXRQcm9wcycsXG4gICAgICAnSW5zdGVhZCwgY2FsbCBSZWFjdC5yZW5kZXIgYWdhaW4gYXQgdGhlIHRvcCBsZXZlbC4nXG4gICAgXVxuICB9O1xuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5mbykge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICclcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsXG4gICAgICAgICAgICBpbmZvWzBdLFxuICAgICAgICAgICAgaW5mb1sxXVxuICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh4KSB7XG4gICAgICAvLyBJRSB3aWxsIGZhaWwgb24gZGVmaW5lUHJvcGVydHkgKGVzNS1zaGltL3NoYW0gdG9vKVxuICAgIH1cbiAgfTtcbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRiMjF3YjI1bGJuUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRGIyMXdiMjVsYm5SY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEZWd1pHRjBaVkYxWlhWbElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUlZjR1JoZEdWUmRXVjFaVndpS1R0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUIzWVhKdWFXNW5JRDBnY21WeGRXbHlaU2hjSWk0dmQyRnlibWx1WjF3aUtUdGNibHh1THlvcVhHNGdLaUJDWVhObElHTnNZWE56SUdobGJIQmxjbk1nWm05eUlIUm9aU0IxY0dSaGRHbHVaeUJ6ZEdGMFpTQnZaaUJoSUdOdmJYQnZibVZ1ZEM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnVW1WaFkzUkRiMjF3YjI1bGJuUW9jSEp2Y0hNc0lHTnZiblJsZUhRcElIdGNiaUFnZEdocGN5NXdjbTl3Y3lBOUlIQnliM0J6TzF4dUlDQjBhR2x6TG1OdmJuUmxlSFFnUFNCamIyNTBaWGgwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRk5sZEhNZ1lTQnpkV0p6WlhRZ2IyWWdkR2hsSUhOMFlYUmxMaUJCYkhkaGVYTWdkWE5sSUhSb2FYTWdkRzhnYlhWMFlYUmxYRzRnS2lCemRHRjBaUzRnV1c5MUlITm9iM1ZzWkNCMGNtVmhkQ0JnZEdocGN5NXpkR0YwWldBZ1lYTWdhVzF0ZFhSaFlteGxMbHh1SUNwY2JpQXFJRlJvWlhKbElHbHpJRzV2SUdkMVlYSmhiblJsWlNCMGFHRjBJR0IwYUdsekxuTjBZWFJsWUNCM2FXeHNJR0psSUdsdGJXVmthV0YwWld4NUlIVndaR0YwWldRc0lITnZYRzRnS2lCaFkyTmxjM05wYm1jZ1lIUm9hWE11YzNSaGRHVmdJR0ZtZEdWeUlHTmhiR3hwYm1jZ2RHaHBjeUJ0WlhSb2IyUWdiV0Y1SUhKbGRIVnliaUIwYUdVZ2IyeGtJSFpoYkhWbExseHVJQ3BjYmlBcUlGUm9aWEpsSUdseklHNXZJR2QxWVhKaGJuUmxaU0IwYUdGMElHTmhiR3h6SUhSdklHQnpaWFJUZEdGMFpXQWdkMmxzYkNCeWRXNGdjM2x1WTJoeWIyNXZkWE5zZVN4Y2JpQXFJR0Z6SUhSb1pYa2diV0Y1SUdWMlpXNTBkV0ZzYkhrZ1ltVWdZbUYwWTJobFpDQjBiMmRsZEdobGNpNGdJRmx2ZFNCallXNGdjSEp2ZG1sa1pTQmhiaUJ2Y0hScGIyNWhiRnh1SUNvZ1kyRnNiR0poWTJzZ2RHaGhkQ0IzYVd4c0lHSmxJR1Y0WldOMWRHVmtJSGRvWlc0Z2RHaGxJR05oYkd3Z2RHOGdjMlYwVTNSaGRHVWdhWE1nWVdOMGRXRnNiSGxjYmlBcUlHTnZiWEJzWlhSbFpDNWNiaUFxWEc0Z0tpQlhhR1Z1SUdFZ1puVnVZM1JwYjI0Z2FYTWdjSEp2ZG1sa1pXUWdkRzhnYzJWMFUzUmhkR1VzSUdsMElIZHBiR3dnWW1VZ1kyRnNiR1ZrSUdGMElITnZiV1VnY0c5cGJuUWdhVzVjYmlBcUlIUm9aU0JtZFhSMWNtVWdLRzV2ZENCemVXNWphSEp2Ym05MWMyeDVLUzRnU1hRZ2QybHNiQ0JpWlNCallXeHNaV1FnZDJsMGFDQjBhR1VnZFhBZ2RHOGdaR0YwWlZ4dUlDb2dZMjl0Y0c5dVpXNTBJR0Z5WjNWdFpXNTBjeUFvYzNSaGRHVXNJSEJ5YjNCekxDQmpiMjUwWlhoMEtTNGdWR2hsYzJVZ2RtRnNkV1Z6SUdOaGJpQmlaU0JrYVdabVpYSmxiblJjYmlBcUlHWnliMjBnZEdocGN5NHFJR0psWTJGMWMyVWdlVzkxY2lCbWRXNWpkR2x2YmlCdFlYa2dZbVVnWTJGc2JHVmtJR0ZtZEdWeUlISmxZMlZwZG1WUWNtOXdjeUJpZFhRZ1ltVm1iM0psWEc0Z0tpQnphRzkxYkdSRGIyMXdiMjVsYm5SVmNHUmhkR1VzSUdGdVpDQjBhR2x6SUc1bGR5QnpkR0YwWlN3Z2NISnZjSE1zSUdGdVpDQmpiMjUwWlhoMElIZHBiR3dnYm05MElIbGxkQ0JpWlZ4dUlDb2dZWE56YVdkdVpXUWdkRzhnZEdocGN5NWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEh4bWRXNWpkR2x2Ym4wZ2NHRnlkR2xoYkZOMFlYUmxJRTVsZUhRZ2NHRnlkR2xoYkNCemRHRjBaU0J2Y2lCbWRXNWpkR2x2YmlCMGIxeHVJQ29nSUNBZ0lDQWdJSEJ5YjJSMVkyVWdibVY0ZENCd1lYSjBhV0ZzSUhOMFlYUmxJSFJ2SUdKbElHMWxjbWRsWkNCM2FYUm9JR04xY25KbGJuUWdjM1JoZEdVdVhHNGdLaUJBY0dGeVlXMGdlejltZFc1amRHbHZibjBnWTJGc2JHSmhZMnNnUTJGc2JHVmtJR0ZtZEdWeUlITjBZWFJsSUdseklIVndaR0YwWldRdVhHNGdLaUJBWm1sdVlXeGNiaUFxSUVCd2NtOTBaV04wWldSY2JpQXFMMXh1VW1WaFkzUkRiMjF3YjI1bGJuUXVjSEp2ZEc5MGVYQmxMbk5sZEZOMFlYUmxJRDBnWm5WdVkzUnBiMjRvY0dGeWRHbGhiRk4wWVhSbExDQmpZV3hzWW1GamF5a2dlMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJSFI1Y0dWdlppQndZWEowYVdGc1UzUmhkR1VnUFQwOUlDZHZZbXBsWTNRbklIeDhYRzRnSUNBZ2RIbHdaVzltSUhCaGNuUnBZV3hUZEdGMFpTQTlQVDBnSjJaMWJtTjBhVzl1SnlCOGZGeHVJQ0FnSUhCaGNuUnBZV3hUZEdGMFpTQTlQU0J1ZFd4c0xGeHVJQ0FnSUNkelpYUlRkR0YwWlNndUxpNHBPaUIwWVd0bGN5QmhiaUJ2WW1wbFkzUWdiMllnYzNSaGRHVWdkbUZ5YVdGaWJHVnpJSFJ2SUhWd1pHRjBaU0J2Y2lCaElDY2dLMXh1SUNBZ0lDZG1kVzVqZEdsdmJpQjNhR2xqYUNCeVpYUjFjbTV6SUdGdUlHOWlhbVZqZENCdlppQnpkR0YwWlNCMllYSnBZV0pzWlhNdUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUjVjR1Z2WmlCd1lYSjBhV0ZzVTNSaGRHVWdQVDA5SUNkdlltcGxZM1FuSUh4OFhHNGdJSFI1Y0dWdlppQndZWEowYVdGc1UzUmhkR1VnUFQwOUlDZG1kVzVqZEdsdmJpY2dmSHhjYmlBZ2NHRnlkR2xoYkZOMFlYUmxJRDA5SUc1MWJHd3BLVHRjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdjR0Z5ZEdsaGJGTjBZWFJsSUNFOUlHNTFiR3dzWEc0Z0lDQWdJQ0FuYzJWMFUzUmhkR1VvTGk0dUtUb2dXVzkxSUhCaGMzTmxaQ0JoYmlCMWJtUmxabWx1WldRZ2IzSWdiblZzYkNCemRHRjBaU0J2WW1wbFkzUTdJQ2NnSzF4dUlDQWdJQ0FnSjJsdWMzUmxZV1FzSUhWelpTQm1iM0pqWlZWd1pHRjBaU2dwTGlkY2JpQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lIMWNiaUFnVW1WaFkzUlZjR1JoZEdWUmRXVjFaUzVsYm5GMVpYVmxVMlYwVTNSaGRHVW9kR2hwY3l3Z2NHRnlkR2xoYkZOMFlYUmxLVHRjYmlBZ2FXWWdLR05oYkd4aVlXTnJLU0I3WEc0Z0lDQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFEyRnNiR0poWTJzb2RHaHBjeXdnWTJGc2JHSmhZMnNwTzF4dUlDQjlYRzU5TzF4dVhHNHZLaXBjYmlBcUlFWnZjbU5sY3lCaGJpQjFjR1JoZEdVdUlGUm9hWE1nYzJodmRXeGtJRzl1YkhrZ1ltVWdhVzUyYjJ0bFpDQjNhR1Z1SUdsMElHbHpJR3R1YjNkdUlIZHBkR2hjYmlBcUlHTmxjblJoYVc1MGVTQjBhR0YwSUhkbElHRnlaU0FxS201dmRDb3FJR2x1SUdFZ1JFOU5JSFJ5WVc1ellXTjBhVzl1TGx4dUlDcGNiaUFxSUZsdmRTQnRZWGtnZDJGdWRDQjBieUJqWVd4c0lIUm9hWE1nZDJobGJpQjViM1VnYTI1dmR5QjBhR0YwSUhOdmJXVWdaR1ZsY0dWeUlHRnpjR1ZqZENCdlppQjBhR1ZjYmlBcUlHTnZiWEJ2Ym1WdWRDZHpJSE4wWVhSbElHaGhjeUJqYUdGdVoyVmtJR0oxZENCZ2MyVjBVM1JoZEdWZ0lIZGhjeUJ1YjNRZ1kyRnNiR1ZrTGx4dUlDcGNiaUFxSUZSb2FYTWdkMmxzYkNCdWIzUWdhVzUyYjJ0bElHQnphRzkxYkdSRGIyMXdiMjVsYm5SVmNHUmhkR1ZnTENCaWRYUWdhWFFnZDJsc2JDQnBiblp2YTJWY2JpQXFJR0JqYjIxd2IyNWxiblJYYVd4c1ZYQmtZWFJsWUNCaGJtUWdZR052YlhCdmJtVnVkRVJwWkZWd1pHRjBaV0F1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHMvWm5WdVkzUnBiMjU5SUdOaGJHeGlZV05ySUVOaGJHeGxaQ0JoWm5SbGNpQjFjR1JoZEdVZ2FYTWdZMjl0Y0d4bGRHVXVYRzRnS2lCQVptbHVZV3hjYmlBcUlFQndjbTkwWldOMFpXUmNiaUFxTDF4dVVtVmhZM1JEYjIxd2IyNWxiblF1Y0hKdmRHOTBlWEJsTG1admNtTmxWWEJrWVhSbElEMGdablZ1WTNScGIyNG9ZMkZzYkdKaFkyc3BJSHRjYmlBZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1bGJuRjFaWFZsUm05eVkyVlZjR1JoZEdVb2RHaHBjeWs3WEc0Z0lHbG1JQ2hqWVd4c1ltRmpheWtnZTF4dUlDQWdJRkpsWVdOMFZYQmtZWFJsVVhWbGRXVXVaVzV4ZFdWMVpVTmhiR3hpWVdOcktIUm9hWE1zSUdOaGJHeGlZV05yS1R0Y2JpQWdmVnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkVaWEJ5WldOaGRHVmtJRUZRU1hNdUlGUm9aWE5sSUVGUVNYTWdkWE5sWkNCMGJ5QmxlR2x6ZENCdmJpQmpiR0Z6YzJsaklGSmxZV04wSUdOc1lYTnpaWE1nWW5WMElITnBibU5sWEc0Z0tpQjNaU0IzYjNWc1pDQnNhV3RsSUhSdklHUmxjSEpsWTJGMFpTQjBhR1Z0TENCM1pTZHlaU0J1YjNRZ1oyOXBibWNnZEc4Z2JXOTJaU0IwYUdWdElHOTJaWElnZEc4Z2RHaHBjMXh1SUNvZ2JXOWtaWEp1SUdKaGMyVWdZMnhoYzNNdUlFbHVjM1JsWVdRc0lIZGxJR1JsWm1sdVpTQmhJR2RsZEhSbGNpQjBhR0YwSUhkaGNtNXpJR2xtSUdsMEozTWdZV05qWlhOelpXUXVYRzRnS2k5Y2JtbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnZG1GeUlHUmxjSEpsWTJGMFpXUkJVRWx6SUQwZ2UxeHVJQ0FnSUdkbGRFUlBUVTV2WkdVNklGdGNiaUFnSUNBZ0lDZG5aWFJFVDAxT2IyUmxKeXhjYmlBZ0lDQWdJQ2RWYzJVZ1VtVmhZM1F1Wm1sdVpFUlBUVTV2WkdVb1kyOXRjRzl1Wlc1MEtTQnBibk4wWldGa0xpZGNiaUFnSUNCZExGeHVJQ0FnSUdselRXOTFiblJsWkRvZ1cxeHVJQ0FnSUNBZ0oybHpUVzkxYm5SbFpDY3NYRzRnSUNBZ0lDQW5TVzV6ZEdWaFpDd2diV0ZyWlNCemRYSmxJSFJ2SUdOc1pXRnVJSFZ3SUhOMVluTmpjbWx3ZEdsdmJuTWdZVzVrSUhCbGJtUnBibWNnY21WeGRXVnpkSE1nYVc0Z0p5QXJYRzRnSUNBZ0lDQW5ZMjl0Y0c5dVpXNTBWMmxzYkZWdWJXOTFiblFnZEc4Z2NISmxkbVZ1ZENCdFpXMXZjbmtnYkdWaGEzTXVKMXh1SUNBZ0lGMHNYRzRnSUNBZ2NtVndiR0ZqWlZCeWIzQnpPaUJiWEc0Z0lDQWdJQ0FuY21Wd2JHRmpaVkJ5YjNCekp5eGNiaUFnSUNBZ0lDZEpibk4wWldGa0xDQmpZV3hzSUZKbFlXTjBMbkpsYm1SbGNpQmhaMkZwYmlCaGRDQjBhR1VnZEc5d0lHeGxkbVZzTGlkY2JpQWdJQ0JkTEZ4dUlDQWdJSEpsY0d4aFkyVlRkR0YwWlRvZ1cxeHVJQ0FnSUNBZ0ozSmxjR3hoWTJWVGRHRjBaU2NzWEc0Z0lDQWdJQ0FuVW1WbVlXTjBiM0lnZVc5MWNpQmpiMlJsSUhSdklIVnpaU0J6WlhSVGRHRjBaU0JwYm5OMFpXRmtJQ2h6WldVZ0p5QXJYRzRnSUNBZ0lDQW5hSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMlpoWTJWaWIyOXJMM0psWVdOMEwybHpjM1ZsY3k4ek1qTTJLUzRuWEc0Z0lDQWdYU3hjYmlBZ0lDQnpaWFJRY205d2N6b2dXMXh1SUNBZ0lDQWdKM05sZEZCeWIzQnpKeXhjYmlBZ0lDQWdJQ2RKYm5OMFpXRmtMQ0JqWVd4c0lGSmxZV04wTG5KbGJtUmxjaUJoWjJGcGJpQmhkQ0IwYUdVZ2RHOXdJR3hsZG1Wc0xpZGNiaUFnSUNCZFhHNGdJSDA3WEc0Z0lIWmhjaUJrWldacGJtVkVaWEJ5WldOaGRHbHZibGRoY201cGJtY2dQU0JtZFc1amRHbHZiaWh0WlhSb2IyUk9ZVzFsTENCcGJtWnZLU0I3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaFNaV0ZqZEVOdmJYQnZibVZ1ZEM1d2NtOTBiM1I1Y0dVc0lHMWxkR2h2WkU1aGJXVXNJSHRjYmlBZ0lDQWdJQ0FnWjJWME9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNBZ0lHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKeVZ6S0M0dUxpa2dhWE1nWkdWd2NtVmpZWFJsWkNCcGJpQndiR0ZwYmlCS1lYWmhVMk55YVhCMElGSmxZV04wSUdOc1lYTnpaWE11SUNWekp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUdsdVptOWJNRjBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnBibVp2V3pGZFhHNGdJQ0FnSUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUIxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0hncElIdGNiaUFnSUNBZ0lDOHZJRWxGSUhkcGJHd2dabUZwYkNCdmJpQmtaV1pwYm1WUWNtOXdaWEowZVNBb1pYTTFMWE5vYVcwdmMyaGhiU0IwYjI4cFhHNGdJQ0FnZlZ4dUlDQjlPMXh1SUNCbWIzSWdLSFpoY2lCbWJrNWhiV1VnYVc0Z1pHVndjbVZqWVhSbFpFRlFTWE1wSUh0Y2JpQWdJQ0JwWmlBb1pHVndjbVZqWVhSbFpFRlFTWE11YUdGelQzZHVVSEp2Y0dWeWRIa29abTVPWVcxbEtTa2dlMXh1SUNBZ0lDQWdaR1ZtYVc1bFJHVndjbVZqWVhScGIyNVhZWEp1YVc1bktHWnVUbUZ0WlN3Z1pHVndjbVZqWVhSbFpFRlFTWE5iWm01T1lXMWxYU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkRiMjF3YjI1bGJuUTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudFxuICovXG5cbi8qanNsaW50IGV2aWw6IHRydWUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RET01JRE9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9SZWFjdERPTUlET3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcblxuLyoqXG4gKiBBYnN0cmFjdHMgYXdheSBhbGwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcmVjb25jaWxlciB0aGF0IHJlcXVpcmVzIGtub3dsZWRnZSBvZlxuICogdGhlIGJyb3dzZXIgY29udGV4dC4gVE9ETzogVGhlc2UgY2FsbGVycyBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byBhdm9pZCB0aGVcbiAqIG5lZWQgZm9yIHRoaXMgaW5qZWN0aW9uLlxuICovXG52YXIgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPSB7XG5cbiAgcHJvY2Vzc0NoaWxkcmVuVXBkYXRlczpcbiAgICBSZWFjdERPTUlET3BlcmF0aW9ucy5kYW5nZXJvdXNseVByb2Nlc3NDaGlsZHJlblVwZGF0ZXMsXG5cbiAgcmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDpcbiAgICBSZWFjdERPTUlET3BlcmF0aW9ucy5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQsXG5cbiAgLyoqXG4gICAqIElmIGEgcGFydGljdWxhciBlbnZpcm9ubWVudCByZXF1aXJlcyB0aGF0IHNvbWUgcmVzb3VyY2VzIGJlIGNsZWFuZWQgdXAsXG4gICAqIHNwZWNpZnkgdGhpcyBpbiB0aGUgaW5qZWN0ZWQgTWl4aW4uIEluIHRoZSBET00sIHdlIHdvdWxkIGxpa2VseSB3YW50IHRvXG4gICAqIHB1cmdlIGFueSBjYWNoZWQgbm9kZSBJRCBsb29rdXBzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdW5tb3VudElERnJvbUVudmlyb25tZW50OiBmdW5jdGlvbihyb290Tm9kZUlEKSB7XG4gICAgUmVhY3RNb3VudC5wdXJnZUlEKHJvb3ROb2RlSUQpO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQ7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBpbmplY3RlZCA9IGZhbHNlO1xuXG52YXIgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCA9IHtcblxuICAvKipcbiAgICogT3B0aW9uYWxseSBpbmplY3RhYmxlIGVudmlyb25tZW50IGRlcGVuZGVudCBjbGVhbnVwIGhvb2suIChzZXJ2ZXIgdnMuXG4gICAqIGJyb3dzZXIgZXRjKS4gRXhhbXBsZTogQSBicm93c2VyIHN5c3RlbSBjYWNoZXMgRE9NIG5vZGVzIGJhc2VkIG9uIGNvbXBvbmVudFxuICAgKiBJRCBhbmQgbXVzdCByZW1vdmUgdGhhdCBjYWNoZSBlbnRyeSB3aGVuIHRoaXMgaW5zdGFuY2UgaXMgdW5tb3VudGVkLlxuICAgKi9cbiAgdW5tb3VudElERnJvbUVudmlyb25tZW50OiBudWxsLFxuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGluamVjdGFibGUgaG9vayBmb3Igc3dhcHBpbmcgb3V0IG1vdW50IGltYWdlcyBpbiB0aGUgbWlkZGxlIG9mXG4gICAqIHRoZSB0cmVlLlxuICAgKi9cbiAgcmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDogbnVsbCxcblxuICAvKipcbiAgICogT3B0aW9uYWxseSBpbmplY3RhYmxlIGhvb2sgZm9yIHByb2Nlc3NpbmcgYSBxdWV1ZSBvZiBjaGlsZCB1cGRhdGVzLiBXaWxsXG4gICAqIGxhdGVyIG1vdmUgaW50byBNdWx0aUNoaWxkQ29tcG9uZW50cy5cbiAgICovXG4gIHByb2Nlc3NDaGlsZHJlblVwZGF0ZXM6IG51bGwsXG5cbiAgaW5qZWN0aW9uOiB7XG4gICAgaW5qZWN0RW52aXJvbm1lbnQ6IGZ1bmN0aW9uKGVudmlyb25tZW50KSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAhaW5qZWN0ZWQsXG4gICAgICAgICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudDogaW5qZWN0RW52aXJvbm1lbnQoKSBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4nXG4gICAgICApIDogaW52YXJpYW50KCFpbmplY3RlZCkpO1xuICAgICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC51bm1vdW50SURGcm9tRW52aXJvbm1lbnQgPVxuICAgICAgICBlbnZpcm9ubWVudC51bm1vdW50SURGcm9tRW52aXJvbm1lbnQ7XG4gICAgICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQgPVxuICAgICAgICBlbnZpcm9ubWVudC5yZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEO1xuICAgICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5wcm9jZXNzQ2hpbGRyZW5VcGRhdGVzID1cbiAgICAgICAgZW52aXJvbm1lbnQucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcztcbiAgICAgIGluamVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudEVudmlyb25tZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRiMjF3YjI1bGJuUkZiblpwY205dWJXVnVkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRRdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRU52YlhCdmJtVnVkRVZ1ZG1seWIyNXRaVzUwWEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzUyWVhJZ2FXNXFaV04wWldRZ1BTQm1ZV3h6WlR0Y2JseHVkbUZ5SUZKbFlXTjBRMjl0Y0c5dVpXNTBSVzUyYVhKdmJtMWxiblFnUFNCN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUU5d2RHbHZibUZzYkhrZ2FXNXFaV04wWVdKc1pTQmxiblpwY205dWJXVnVkQ0JrWlhCbGJtUmxiblFnWTJ4bFlXNTFjQ0JvYjI5ckxpQW9jMlZ5ZG1WeUlIWnpMbHh1SUNBZ0tpQmljbTkzYzJWeUlHVjBZeWt1SUVWNFlXMXdiR1U2SUVFZ1luSnZkM05sY2lCemVYTjBaVzBnWTJGamFHVnpJRVJQVFNCdWIyUmxjeUJpWVhObFpDQnZiaUJqYjIxd2IyNWxiblJjYmlBZ0lDb2dTVVFnWVc1a0lHMTFjM1FnY21WdGIzWmxJSFJvWVhRZ1kyRmphR1VnWlc1MGNua2dkMmhsYmlCMGFHbHpJR2x1YzNSaGJtTmxJR2x6SUhWdWJXOTFiblJsWkM1Y2JpQWdJQ292WEc0Z0lIVnViVzkxYm5SSlJFWnliMjFGYm5acGNtOXViV1Z1ZERvZ2JuVnNiQ3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUM0IwYVc5dVlXeHNlU0JwYm1wbFkzUmhZbXhsSUdodmIyc2dabTl5SUhOM1lYQndhVzVuSUc5MWRDQnRiM1Z1ZENCcGJXRm5aWE1nYVc0Z2RHaGxJRzFwWkdSc1pTQnZabHh1SUNBZ0tpQjBhR1VnZEhKbFpTNWNiaUFnSUNvdlhHNGdJSEpsY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0VKNVNVUTZJRzUxYkd3c1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUU5d2RHbHZibUZzYkhrZ2FXNXFaV04wWVdKc1pTQm9iMjlySUdadmNpQndjbTlqWlhOemFXNW5JR0VnY1hWbGRXVWdiMllnWTJocGJHUWdkWEJrWVhSbGN5NGdWMmxzYkZ4dUlDQWdLaUJzWVhSbGNpQnRiM1psSUdsdWRHOGdUWFZzZEdsRGFHbHNaRU52YlhCdmJtVnVkSE11WEc0Z0lDQXFMMXh1SUNCd2NtOWpaWE56UTJocGJHUnlaVzVWY0dSaGRHVnpPaUJ1ZFd4c0xGeHVYRzRnSUdsdWFtVmpkR2x2YmpvZ2UxeHVJQ0FnSUdsdWFtVmpkRVZ1ZG1seWIyNXRaVzUwT2lCbWRXNWpkR2x2YmlobGJuWnBjbTl1YldWdWRDa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdJV2x1YW1WamRHVmtMRnh1SUNBZ0lDQWdJQ0FuVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUTZJR2x1YW1WamRFVnVkbWx5YjI1dFpXNTBLQ2tnWTJGdUlHOXViSGtnWW1VZ1kyRnNiR1ZrSUc5dVkyVXVKMXh1SUNBZ0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENnaGFXNXFaV04wWldRcEtUdGNiaUFnSUNBZ0lGSmxZV04wUTI5dGNHOXVaVzUwUlc1MmFYSnZibTFsYm5RdWRXNXRiM1Z1ZEVsRVJuSnZiVVZ1ZG1seWIyNXRaVzUwSUQxY2JpQWdJQ0FnSUNBZ1pXNTJhWEp2Ym0xbGJuUXVkVzV0YjNWdWRFbEVSbkp2YlVWdWRtbHliMjV0Wlc1ME8xeHVJQ0FnSUNBZ1VtVmhZM1JEYjIxd2IyNWxiblJGYm5acGNtOXViV1Z1ZEM1eVpYQnNZV05sVG05a1pWZHBkR2hOWVhKcmRYQkNlVWxFSUQxY2JpQWdJQ0FnSUNBZ1pXNTJhWEp2Ym0xbGJuUXVjbVZ3YkdGalpVNXZaR1ZYYVhSb1RXRnlhM1Z3UW5sSlJEdGNiaUFnSUNBZ0lGSmxZV04wUTI5dGNHOXVaVzUwUlc1MmFYSnZibTFsYm5RdWNISnZZMlZ6YzBOb2FXeGtjbVZ1VlhCa1lYUmxjeUE5WEc0Z0lDQWdJQ0FnSUdWdWRtbHliMjV0Wlc1MExuQnliMk5sYzNORGFHbHNaSEpsYmxWd1pHRjBaWE03WEc0Z0lDQWdJQ0JwYm1wbFkzUmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkRiMjF3YjI1bGJuUkZiblpwY205dWJXVnVkRHRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4qIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHNoYWxsb3dFcXVhbCA9IHJlcXVpcmUoXCIuL3NoYWxsb3dFcXVhbFwiKTtcblxuLyoqXG4gKiBJZiB5b3VyIFJlYWN0IGNvbXBvbmVudCdzIHJlbmRlciBmdW5jdGlvbiBpcyBcInB1cmVcIiwgZS5nLiBpdCB3aWxsIHJlbmRlciB0aGVcbiAqIHNhbWUgcmVzdWx0IGdpdmVuIHRoZSBzYW1lIHByb3BzIGFuZCBzdGF0ZSwgcHJvdmlkZSB0aGlzIE1peGluIGZvciBhXG4gKiBjb25zaWRlcmFibGUgcGVyZm9ybWFuY2UgYm9vc3QuXG4gKlxuICogTW9zdCBSZWFjdCBjb21wb25lbnRzIGhhdmUgcHVyZSByZW5kZXIgZnVuY3Rpb25zLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICB2YXIgUmVhY3RDb21wb25lbnRXaXRoUHVyZVJlbmRlck1peGluID1cbiAqICAgICByZXF1aXJlKCdSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4nKTtcbiAqICAgUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICogICAgIG1peGluczogW1JlYWN0Q29tcG9uZW50V2l0aFB1cmVSZW5kZXJNaXhpbl0sXG4gKlxuICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gKiAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lfT5mb288L2Rpdj47XG4gKiAgICAgfVxuICogICB9KTtcbiAqXG4gKiBOb3RlOiBUaGlzIG9ubHkgY2hlY2tzIHNoYWxsb3cgZXF1YWxpdHkgZm9yIHByb3BzIGFuZCBzdGF0ZS4gSWYgdGhlc2UgY29udGFpblxuICogY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhpcyBtaXhpbiBtYXkgaGF2ZSBmYWxzZS1uZWdhdGl2ZXMgZm9yIGRlZXBlclxuICogZGlmZmVyZW5jZXMuIE9ubHkgbWl4aW4gdG8gY29tcG9uZW50cyB3aGljaCBoYXZlIHNpbXBsZSBwcm9wcyBhbmQgc3RhdGUsIG9yXG4gKiB1c2UgYGZvcmNlVXBkYXRlKClgIHdoZW4geW91IGtub3cgZGVlcCBkYXRhIHN0cnVjdHVyZXMgaGF2ZSBjaGFuZ2VkLlxuICovXG52YXIgUmVhY3RDb21wb25lbnRXaXRoUHVyZVJlbmRlck1peGluID0ge1xuICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgcmV0dXJuICFzaGFsbG93RXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fFxuICAgICAgICAgICAhc2hhbGxvd0VxdWFsKHRoaXMuc3RhdGUsIG5leHRTdGF0ZSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRXaXRoUHVyZVJlbmRlck1peGluO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0Q29udGV4dCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29udGV4dFwiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3JcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG52YXIgUmVhY3RMaWZlQ3ljbGUgPSByZXF1aXJlKFwiLi9SZWFjdExpZmVDeWNsZVwiKTtcbnZhciBSZWFjdE5hdGl2ZUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0TmF0aXZlQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25zID0gcmVxdWlyZShcIi4vUmVhY3RQcm9wVHlwZUxvY2F0aW9uc1wiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzXCIpO1xudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlclwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZShcIi4vZW1wdHlPYmplY3RcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bShjb21wb25lbnQpIHtcbiAgdmFyIG93bmVyID0gY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXIgfHwgbnVsbDtcbiAgaWYgKG93bmVyKSB7XG4gICAgdmFyIG5hbWUgPSBvd25lci5nZXROYW1lKCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0gVGhlIExpZmUtQ3ljbGUgb2YgYSBDb21wb3NpdGUgQ29tcG9uZW50IC0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIC0gY29uc3RydWN0b3I6IEluaXRpYWxpemF0aW9uIG9mIHN0YXRlLiBUaGUgaW5zdGFuY2UgaXMgbm93IHJldGFpbmVkLlxuICogICAtIGNvbXBvbmVudFdpbGxNb3VudFxuICogICAtIHJlbmRlclxuICogICAtIFtjaGlsZHJlbidzIGNvbnN0cnVjdG9yc11cbiAqICAgICAtIFtjaGlsZHJlbidzIGNvbXBvbmVudFdpbGxNb3VudCBhbmQgcmVuZGVyXVxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29tcG9uZW50RGlkTW91bnRdXG4gKiAgICAgLSBjb21wb25lbnREaWRNb3VudFxuICpcbiAqICAgICAgIFVwZGF0ZSBQaGFzZXM6XG4gKiAgICAgICAtIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG9ubHkgY2FsbGVkIGlmIHBhcmVudCB1cGRhdGVkKVxuICogICAgICAgLSBzaG91bGRDb21wb25lbnRVcGRhdGVcbiAqICAgICAgICAgLSBjb21wb25lbnRXaWxsVXBkYXRlXG4gKiAgICAgICAgICAgLSByZW5kZXJcbiAqICAgICAgICAgICAtIFtjaGlsZHJlbidzIGNvbnN0cnVjdG9ycyBvciByZWNlaXZlIHByb3BzIHBoYXNlc11cbiAqICAgICAgICAgLSBjb21wb25lbnREaWRVcGRhdGVcbiAqXG4gKiAgICAgLSBjb21wb25lbnRXaWxsVW5tb3VudFxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29tcG9uZW50V2lsbFVubW91bnRdXG4gKiAgIC0gW2NoaWxkcmVuIGRlc3Ryb3llZF1cbiAqIC0gKGRlc3Ryb3llZCk6IFRoZSBpbnN0YW5jZSBpcyBub3cgYmxhbmssIHJlbGVhc2VkIGJ5IFJlYWN0IGFuZCByZWFkeSBmb3IgR0MuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIEFuIGluY3JlbWVudGluZyBJRCBhc3NpZ25lZCB0byBlYWNoIGNvbXBvbmVudCB3aGVuIGl0IGlzIG1vdW50ZWQuIFRoaXMgaXNcbiAqIHVzZWQgdG8gZW5mb3JjZSB0aGUgb3JkZXIgaW4gd2hpY2ggYFJlYWN0VXBkYXRlc2AgdXBkYXRlcyBkaXJ0eSBjb21wb25lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBuZXh0TW91bnRJRCA9IDE7XG5cbi8qKlxuICogQGxlbmRzIHtSZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5wcm90b3R5cGV9XG4gKi9cbnZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudE1peGluID0ge1xuXG4gIC8qKlxuICAgKiBCYXNlIGNvbnN0cnVjdG9yIGZvciBhbGwgY29tcG9zaXRlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSBudWxsO1xuICAgIHRoaXMuX2luc3RhbmNlID0gbnVsbDtcblxuICAgIC8vIFNlZSBSZWFjdFVwZGF0ZVF1ZXVlXG4gICAgdGhpcy5fcGVuZGluZ0VsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IG51bGw7XG5cbiAgICB0aGlzLl9jb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9tb3VudE9yZGVyID0gMDtcbiAgICB0aGlzLl9pc1RvcExldmVsID0gZmFsc2U7XG5cbiAgICAvLyBTZWUgUmVhY3RVcGRhdGVzIGFuZCBSZWFjdFVwZGF0ZVF1ZXVlLlxuICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LCByZW5kZXJzIG1hcmt1cCwgYW5kIHJlZ2lzdGVycyBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByb290SUQgRE9NIElEIG9mIHRoZSByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBSZW5kZXJlZCBtYXJrdXAgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24ocm9vdElELCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuX21vdW50T3JkZXIgPSBuZXh0TW91bnRJRCsrO1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSByb290SUQ7XG5cbiAgICB2YXIgcHVibGljUHJvcHMgPSB0aGlzLl9wcm9jZXNzUHJvcHModGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMpO1xuICAgIHZhciBwdWJsaWNDb250ZXh0ID0gdGhpcy5fcHJvY2Vzc0NvbnRleHQodGhpcy5fY3VycmVudEVsZW1lbnQuX2NvbnRleHQpO1xuXG4gICAgdmFyIENvbXBvbmVudCA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudChcbiAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50XG4gICAgKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHB1YmxpYyBjbGFzc1xuICAgIHZhciBpbnN0ID0gbmV3IENvbXBvbmVudChwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgbGF0ZXIgaW4gX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCwgYnV0IGFkZCBhbiBlYXJseVxuICAgICAgLy8gd2FybmluZyBub3cgdG8gaGVscCBkZWJ1Z2dpbmdcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICBpbnN0LnJlbmRlciAhPSBudWxsLFxuICAgICAgICAnJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArXG4gICAgICAgICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAgaW4geW91ciAnICtcbiAgICAgICAgJ2NvbXBvbmVudCBvciB5b3UgbWF5IGhhdmUgYWNjaWRlbnRhbGx5IHRyaWVkIHRvIHJlbmRlciBhbiBlbGVtZW50ICcgK1xuICAgICAgICAnd2hvc2UgdHlwZSBpcyBhIGZ1bmN0aW9uIHRoYXQgaXNuXFwndCBhIFJlYWN0IGNvbXBvbmVudC4nLFxuICAgICAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG5cbiAgICAvLyBUaGVzZSBzaG91bGQgYmUgc2V0IHVwIGluIHRoZSBjb25zdHJ1Y3RvciwgYnV0IGFzIGEgY29udmVuaWVuY2UgZm9yXG4gICAgLy8gc2ltcGxlciBjbGFzcyBhYnN0cmFjdGlvbnMsIHdlIHNldCB0aGVtIHVwIGFmdGVyIHRoZSBmYWN0LlxuICAgIGluc3QucHJvcHMgPSBwdWJsaWNQcm9wcztcbiAgICBpbnN0LmNvbnRleHQgPSBwdWJsaWNDb250ZXh0O1xuICAgIGluc3QucmVmcyA9IGVtcHR5T2JqZWN0O1xuXG4gICAgdGhpcy5faW5zdGFuY2UgPSBpbnN0O1xuXG4gICAgLy8gU3RvcmUgYSByZWZlcmVuY2UgZnJvbSB0aGUgaW5zdGFuY2UgYmFjayB0byB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb25cbiAgICBSZWFjdEluc3RhbmNlTWFwLnNldChpbnN0LCB0aGlzKTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHRoaXMuX3dhcm5JZkNvbnRleHRzRGlmZmVyKHRoaXMuX2N1cnJlbnRFbGVtZW50Ll9jb250ZXh0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBTaW5jZSBwbGFpbiBKUyBjbGFzc2VzIGFyZSBkZWZpbmVkIHdpdGhvdXQgYW55IHNwZWNpYWwgaW5pdGlhbGl6YXRpb25cbiAgICAgIC8vIGxvZ2ljLCB3ZSBjYW4gbm90IGNhdGNoIGNvbW1vbiBlcnJvcnMgZWFybHkuIFRoZXJlZm9yZSwgd2UgaGF2ZSB0b1xuICAgICAgLy8gY2F0Y2ggdGhlbSBoZXJlLCBhdCBpbml0aWFsaXphdGlvbiB0aW1lLCBpbnN0ZWFkLlxuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICFpbnN0LmdldEluaXRpYWxTdGF0ZSB8fFxuICAgICAgICBpbnN0LmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCxcbiAgICAgICAgJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICtcbiAgICAgICAgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArXG4gICAgICAgICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgIWluc3QuZ2V0RGVmYXVsdFByb3BzIHx8XG4gICAgICAgIGluc3QuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkLFxuICAgICAgICAnZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgK1xuICAgICAgICAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICtcbiAgICAgICAgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJyxcbiAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ2EgY29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICFpbnN0LnByb3BUeXBlcyxcbiAgICAgICAgJ3Byb3BUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgK1xuICAgICAgICAncHJvcGVydHkgdG8gZGVmaW5lIHByb3BUeXBlcyBpbnN0ZWFkLicsXG4gICAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAhaW5zdC5jb250ZXh0VHlwZXMsXG4gICAgICAgICdjb250ZXh0VHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhICcgK1xuICAgICAgICAnc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZXMgaW5zdGVhZC4nLFxuICAgICAgICB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnXG4gICAgICApIDogbnVsbCk7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgdHlwZW9mIGluc3QuY29tcG9uZW50U2hvdWxkVXBkYXRlICE9PSAnZnVuY3Rpb24nLFxuICAgICAgICAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICtcbiAgICAgICAgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgK1xuICAgICAgICAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgK1xuICAgICAgICAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJyxcbiAgICAgICAgKHRoaXMuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcpXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGluc3Quc3RhdGU7XG4gICAgaWYgKGluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbnN0LnN0YXRlID0gaW5pdGlhbFN0YXRlID0gbnVsbDtcbiAgICB9XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxTdGF0ZSksXG4gICAgICAnJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsJyxcbiAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdcbiAgICApIDogaW52YXJpYW50KHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxTdGF0ZSkpKTtcblxuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0O1xuICAgIHZhciByZW5kZXJlZEVsZW1lbnQ7XG5cbiAgICB2YXIgcHJldmlvdXNseU1vdW50aW5nID0gUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5TW91bnRpbmdJbnN0YW5jZTtcbiAgICBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlNb3VudGluZ0luc3RhbmNlID0gdGhpcztcbiAgICB0cnkge1xuICAgICAgaWYgKGluc3QuY29tcG9uZW50V2lsbE1vdW50KSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICAgIC8vIFdoZW4gbW91bnRpbmcsIGNhbGxzIHRvIGBzZXRTdGF0ZWAgYnkgYGNvbXBvbmVudFdpbGxNb3VudGAgd2lsbCBzZXRcbiAgICAgICAgLy8gYHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlYCB3aXRob3V0IHRyaWdnZXJpbmcgYSByZS1yZW5kZXIuXG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSkge1xuICAgICAgICAgIGluc3Quc3RhdGUgPSB0aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKGluc3QucHJvcHMsIGluc3QuY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2hpbGRDb250ZXh0ID0gdGhpcy5fZ2V0VmFsaWRhdGVkQ2hpbGRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KGNoaWxkQ29udGV4dCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2UgPSBwcmV2aW91c2x5TW91bnRpbmc7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSB0aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KFxuICAgICAgcmVuZGVyZWRFbGVtZW50LFxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSAvLyBUaGUgd3JhcHBpbmcgdHlwZVxuICAgICk7XG5cbiAgICB2YXIgbWFya3VwID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KFxuICAgICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQsXG4gICAgICByb290SUQsXG4gICAgICB0cmFuc2FjdGlvbixcbiAgICAgIHRoaXMuX21lcmdlQ2hpbGRDb250ZXh0KGNvbnRleHQsIGNoaWxkQ29udGV4dClcbiAgICApO1xuICAgIGlmIChpbnN0LmNvbXBvbmVudERpZE1vdW50KSB7XG4gICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGluc3QuY29tcG9uZW50RGlkTW91bnQsIGluc3QpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrdXA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IGBtb3VudENvbXBvbmVudGAuXG4gICAqXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG5cbiAgICBpZiAoaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudCkge1xuICAgICAgdmFyIHByZXZpb3VzbHlVbm1vdW50aW5nID0gUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5VW5tb3VudGluZ0luc3RhbmNlO1xuICAgICAgUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5VW5tb3VudGluZ0luc3RhbmNlID0gdGhpcztcbiAgICAgIHRyeSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseVVubW91bnRpbmdJbnN0YW5jZSA9IHByZXZpb3VzbHlVbm1vdW50aW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50KTtcbiAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IG51bGw7XG5cbiAgICAvLyBSZXNldCBwZW5kaW5nIGZpZWxkc1xuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrcyA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ0VsZW1lbnQgPSBudWxsO1xuXG4gICAgLy8gVGhlc2UgZmllbGRzIGRvIG5vdCByZWFsbHkgbmVlZCB0byBiZSByZXNldCBzaW5jZSB0aGlzIG9iamVjdCBpcyBub1xuICAgIC8vIGxvbmdlciBhY2Nlc3NpYmxlLlxuICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSBudWxsO1xuXG4gICAgLy8gRGVsZXRlIHRoZSByZWZlcmVuY2UgZnJvbSB0aGUgaW5zdGFuY2UgdG8gdGhpcyBpbnRlcm5hbCByZXByZXNlbnRhdGlvblxuICAgIC8vIHdoaWNoIGFsbG93IHRoZSBpbnRlcm5hbHMgdG8gYmUgcHJvcGVybHkgY2xlYW5lZCB1cCBldmVuIGlmIHRoZSB1c2VyXG4gICAgLy8gbGVha3MgYSByZWZlcmVuY2UgdG8gdGhlIHB1YmxpYyBpbnN0YW5jZS5cbiAgICBSZWFjdEluc3RhbmNlTWFwLnJlbW92ZShpbnN0KTtcblxuICAgIC8vIFNvbWUgZXhpc3RpbmcgY29tcG9uZW50cyByZWx5IG9uIGluc3QucHJvcHMgZXZlbiBhZnRlciB0aGV5J3ZlIGJlZW5cbiAgICAvLyBkZXN0cm95ZWQgKGluIGV2ZW50IGhhbmRsZXJzKS5cbiAgICAvLyBUT0RPOiBpbnN0LnByb3BzID0gbnVsbDtcbiAgICAvLyBUT0RPOiBpbnN0LnN0YXRlID0gbnVsbDtcbiAgICAvLyBUT0RPOiBpbnN0LmNvbnRleHQgPSBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTY2hlZHVsZSBhIHBhcnRpYWwgdXBkYXRlIHRvIHRoZSBwcm9wcy4gT25seSB1c2VkIGZvciBpbnRlcm5hbCB0ZXN0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFByb3BzIFN1YnNldCBvZiB0aGUgbmV4dCBwcm9wcy5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBwcm9wcyBhcmUgdXBkYXRlZC5cbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3NldFByb3BzSW50ZXJuYWw6IGZ1bmN0aW9uKHBhcnRpYWxQcm9wcywgY2FsbGJhY2spIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVvcHRpbWl6ZWQgcGF0aC4gV2Ugb3B0aW1pemUgZm9yIGFsd2F5cyBoYXZpbmcgYW4gZWxlbWVudC5cbiAgICAvLyBUaGlzIGNyZWF0ZXMgYW4gZXh0cmEgaW50ZXJuYWwgZWxlbWVudC5cbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuX3BlbmRpbmdFbGVtZW50IHx8IHRoaXMuX2N1cnJlbnRFbGVtZW50O1xuICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZVByb3BzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcywgcGFydGlhbFByb3BzKVxuICAgICk7XG4gICAgUmVhY3RVcGRhdGVzLmVucXVldWVVcGRhdGUodGhpcywgY2FsbGJhY2spO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRoZSBjb250ZXh0IG9iamVjdCB0byBvbmx5IGNvbnRhaW4ga2V5cyBzcGVjaWZpZWQgaW5cbiAgICogYGNvbnRleHRUeXBlc2BcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7P29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYXNrQ29udGV4dDogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBtYXNrZWRDb250ZXh0ID0gbnVsbDtcbiAgICAvLyBUaGlzIHJlYWxseSBzaG91bGQgYmUgZ2V0dGluZyB0aGUgY29tcG9uZW50IGNsYXNzIGZvciB0aGUgZWxlbWVudCxcbiAgICAvLyBidXQgd2Uga25vdyB0aGF0IHdlJ3JlIG5vdCBnb2luZyB0byBuZWVkIGl0IGZvciBidWlsdC1pbnMuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVtcHR5T2JqZWN0O1xuICAgIH1cbiAgICB2YXIgY29udGV4dFR5cGVzID0gdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZS5jb250ZXh0VHlwZXM7XG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eU9iamVjdDtcbiAgICB9XG4gICAgbWFza2VkQ29udGV4dCA9IHt9O1xuICAgIGZvciAodmFyIGNvbnRleHROYW1lIGluIGNvbnRleHRUeXBlcykge1xuICAgICAgbWFza2VkQ29udGV4dFtjb250ZXh0TmFtZV0gPSBjb250ZXh0W2NvbnRleHROYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIG1hc2tlZENvbnRleHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgdGhlIGNvbnRleHQgb2JqZWN0IHRvIG9ubHkgY29udGFpbiBrZXlzIHNwZWNpZmllZCBpblxuICAgKiBgY29udGV4dFR5cGVzYCwgYW5kIGFzc2VydHMgdGhhdCB0aGV5IGFyZSB2YWxpZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7P29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcm9jZXNzQ29udGV4dDogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIHZhciBtYXNrZWRDb250ZXh0ID0gdGhpcy5fbWFza0NvbnRleHQoY29udGV4dCk7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFyIENvbXBvbmVudCA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudChcbiAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnRcbiAgICAgICk7XG4gICAgICBpZiAoQ29tcG9uZW50LmNvbnRleHRUeXBlcykge1xuICAgICAgICB0aGlzLl9jaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICBDb21wb25lbnQuY29udGV4dFR5cGVzLFxuICAgICAgICAgIG1hc2tlZENvbnRleHQsXG4gICAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5jb250ZXh0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXNrZWRDb250ZXh0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY3VycmVudENvbnRleHRcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFZhbGlkYXRlZENoaWxkQ29udGV4dDogZnVuY3Rpb24oY3VycmVudENvbnRleHQpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciBjaGlsZENvbnRleHQgPSBpbnN0LmdldENoaWxkQ29udGV4dCAmJiBpbnN0LmdldENoaWxkQ29udGV4dCgpO1xuICAgIGlmIChjaGlsZENvbnRleHQpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIHR5cGVvZiBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID09PSAnb2JqZWN0JyxcbiAgICAgICAgJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gJyArXG4gICAgICAgICd1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuJyxcbiAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50J1xuICAgICAgKSA6IGludmFyaWFudCh0eXBlb2YgaW5zdC5jb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyA9PT0gJ29iamVjdCcpKTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tQcm9wVHlwZXMoXG4gICAgICAgICAgaW5zdC5jb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgICBjaGlsZENvbnRleHQsXG4gICAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucy5jaGlsZENvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG5hbWUgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgbmFtZSBpbiBpbnN0LmNvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICAgICclcy5nZXRDaGlsZENvbnRleHQoKToga2V5IFwiJXNcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy4nLFxuICAgICAgICAgIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcsXG4gICAgICAgICAgbmFtZVxuICAgICAgICApIDogaW52YXJpYW50KG5hbWUgaW4gaW5zdC5jb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNoaWxkQ29udGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgX21lcmdlQ2hpbGRDb250ZXh0OiBmdW5jdGlvbihjdXJyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KSB7XG4gICAgaWYgKGNoaWxkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGFzc2lnbih7fSwgY3VycmVudENvbnRleHQsIGNoaWxkQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50Q29udGV4dDtcbiAgfSxcblxuICAvKipcbiAgICogUHJvY2Vzc2VzIHByb3BzIGJ5IHNldHRpbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuc3BlY2lmaWVkIHByb3BzIGFuZFxuICAgKiBhc3NlcnRpbmcgdGhhdCB0aGUgcHJvcHMgYXJlIHZhbGlkLiBEb2VzIG5vdCBtdXRhdGUgaXRzIGFyZ3VtZW50OyByZXR1cm5zXG4gICAqIGEgbmV3IHByb3BzIG9iamVjdCB3aXRoIGRlZmF1bHRzIG1lcmdlZCBpbi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1Byb3BzXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcm9jZXNzUHJvcHM6IGZ1bmN0aW9uKG5ld1Byb3BzKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgdmFyIENvbXBvbmVudCA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudChcbiAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnRcbiAgICAgICk7XG4gICAgICBpZiAoQ29tcG9uZW50LnByb3BUeXBlcykge1xuICAgICAgICB0aGlzLl9jaGVja1Byb3BUeXBlcyhcbiAgICAgICAgICBDb21wb25lbnQucHJvcFR5cGVzLFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbnMucHJvcFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3UHJvcHM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0IHRoZSBwcm9wcyBhcmUgdmFsaWRcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHByb3BUeXBlcyBNYXAgb2YgcHJvcCBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrUHJvcFR5cGVzOiBmdW5jdGlvbihwcm9wVHlwZXMsIHByb3BzLCBsb2NhdGlvbikge1xuICAgIC8vIFRPRE86IFN0b3AgdmFsaWRhdGluZyBwcm9wIHR5cGVzIGhlcmUgYW5kIG9ubHkgdXNlIHRoZSBlbGVtZW50XG4gICAgLy8gdmFsaWRhdGlvbi5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IHRoaXMuZ2V0TmFtZSgpO1xuICAgIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BUeXBlcykge1xuICAgICAgaWYgKHByb3BUeXBlcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgICAgdHlwZW9mIHByb3BUeXBlc1twcm9wTmFtZV0gPT09ICdmdW5jdGlvbicsXG4gICAgICAgICAgICAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgJyArXG4gICAgICAgICAgICAnZnJvbSBSZWFjdC5Qcm9wVHlwZXMuJyxcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJyxcbiAgICAgICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSxcbiAgICAgICAgICAgIHByb3BOYW1lXG4gICAgICAgICAgKSA6IGludmFyaWFudCh0eXBlb2YgcHJvcFR5cGVzW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJykpO1xuICAgICAgICAgIGVycm9yID0gcHJvcFR5cGVzW3Byb3BOYW1lXShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8gZXh0ZW5kIHRoaXMgbG9naWMgZm9yIHNpbWlsYXIgZXJyb3JzIGluXG4gICAgICAgICAgLy8gUmVhY3QucmVuZGVyIGNhbGxzLCBzbyBJJ20gYWJzdHJhY3RpbmcgaXQgYXdheSBpbnRvXG4gICAgICAgICAgLy8gYSBmdW5jdGlvbiB0byBtaW5pbWl6ZSByZWZhY3RvcmluZyBpbiB0aGUgZnV0dXJlXG4gICAgICAgICAgdmFyIGFkZGVuZHVtID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKHRoaXMpO1xuXG4gICAgICAgICAgaWYgKGxvY2F0aW9uID09PSBSZWFjdFByb3BUeXBlTG9jYXRpb25zLnByb3ApIHtcbiAgICAgICAgICAgIC8vIFByZWZhY2UgZ2l2ZXMgdXMgc29tZXRoaW5nIHRvIGJsYWNrbGlzdCBpbiB3YXJuaW5nIG1vZHVsZVxuICAgICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnRmFpbGVkIENvbXBvc2l0ZSBwcm9wVHlwZTogJXMlcycsXG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIGFkZGVuZHVtXG4gICAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgJ0ZhaWxlZCBDb250ZXh0IFR5cGVzOiAlcyVzJyxcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgYWRkZW5kdW1cbiAgICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24obmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBuZXh0Q29udGV4dCkge1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50O1xuICAgIHZhciBwcmV2Q29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XG5cbiAgICB0aGlzLl9wZW5kaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudChcbiAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgcHJldkVsZW1lbnQsXG4gICAgICBuZXh0RWxlbWVudCxcbiAgICAgIHByZXZDb250ZXh0LFxuICAgICAgbmV4dENvbnRleHRcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBJZiBhbnkgb2YgYF9wZW5kaW5nRWxlbWVudGAsIGBfcGVuZGluZ1N0YXRlUXVldWVgLCBvciBgX3BlbmRpbmdGb3JjZVVwZGF0ZWBcbiAgICogaXMgc2V0LCB1cGRhdGUgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTogZnVuY3Rpb24odHJhbnNhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ0VsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnJlY2VpdmVDb21wb25lbnQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50IHx8IHRoaXMuX2N1cnJlbnRFbGVtZW50LFxuICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgdGhpcy5fY29udGV4dFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgIT09IG51bGwgfHwgdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgIFJlYWN0RWxlbWVudFZhbGlkYXRvci5jaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHMoXG4gICAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVDb21wb25lbnQoXG4gICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudCxcbiAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQsXG4gICAgICAgIHRoaXMuX2NvbnRleHQsXG4gICAgICAgIHRoaXMuX2NvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBjb250ZXh0cywgd2FybmluZyBpZiB0aGV5IGFyZSBkaWZmZXJlbnRcbiAgICogVE9ETzogUmVtb3ZlIHRoaXMgY2hlY2sgd2hlbiBvd25lci1jb250ZXh0IGlzIHJlbW92ZWRcbiAgICovXG4gICBfd2FybklmQ29udGV4dHNEaWZmZXI6IGZ1bmN0aW9uKG93bmVyQmFzZWRDb250ZXh0LCBwYXJlbnRCYXNlZENvbnRleHQpIHtcbiAgICBvd25lckJhc2VkQ29udGV4dCA9IHRoaXMuX21hc2tDb250ZXh0KG93bmVyQmFzZWRDb250ZXh0KTtcbiAgICBwYXJlbnRCYXNlZENvbnRleHQgPSB0aGlzLl9tYXNrQ29udGV4dChwYXJlbnRCYXNlZENvbnRleHQpO1xuICAgIHZhciBwYXJlbnRLZXlzID0gT2JqZWN0LmtleXMocGFyZW50QmFzZWRDb250ZXh0KS5zb3J0KCk7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBwYXJlbnRLZXlzW2ldO1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIG93bmVyQmFzZWRDb250ZXh0W2tleV0gPT09IHBhcmVudEJhc2VkQ29udGV4dFtrZXldLFxuICAgICAgICAnb3duZXItYmFzZWQgYW5kIHBhcmVudC1iYXNlZCBjb250ZXh0cyBkaWZmZXIgJyAgK1xuICAgICAgICAnKHZhbHVlczogYCVzYCB2cyBgJXNgKSBmb3Iga2V5ICglcykgd2hpbGUgbW91bnRpbmcgJXMgJyArXG4gICAgICAgICcoc2VlOiBodHRwOi8vZmIubWUvcmVhY3QtY29udGV4dC1ieS1wYXJlbnQpJyxcbiAgICAgICAgb3duZXJCYXNlZENvbnRleHRba2V5XSxcbiAgICAgICAgcGFyZW50QmFzZWRDb250ZXh0W2tleV0sXG4gICAgICAgIGtleSxcbiAgICAgICAgZGlzcGxheU5hbWVcbiAgICAgICkgOiBudWxsKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYW4gdXBkYXRlIHRvIGEgbW91bnRlZCBjb21wb25lbnQuIFRoZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGFuZFxuICAgKiBzaG91bGRDb21wb25lbnRVcGRhdGUgbWV0aG9kcyBhcmUgY2FsbGVkLCB0aGVuIChhc3N1bWluZyB0aGUgdXBkYXRlIGlzbid0XG4gICAqIHNraXBwZWQpIHRoZSByZW1haW5pbmcgdXBkYXRlIGxpZmVjeWNsZSBtZXRob2RzIGFyZSBjYWxsZWQgYW5kIHRoZSBET01cbiAgICogcmVwcmVzZW50YXRpb24gaXMgdXBkYXRlZC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0J3MgcmVuZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uXG4gICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBwcmV2UGFyZW50RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dFBhcmVudEVsZW1lbnRcbiAgICogQGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbihcbiAgICB0cmFuc2FjdGlvbixcbiAgICBwcmV2UGFyZW50RWxlbWVudCxcbiAgICBuZXh0UGFyZW50RWxlbWVudCxcbiAgICBwcmV2VW5tYXNrZWRDb250ZXh0LFxuICAgIG5leHRVbm1hc2tlZENvbnRleHRcbiAgKSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIHZhciBuZXh0Q29udGV4dCA9IGluc3QuY29udGV4dDtcbiAgICB2YXIgbmV4dFByb3BzID0gaW5zdC5wcm9wcztcblxuICAgIC8vIERpc3Rpbmd1aXNoIGJldHdlZW4gYSBwcm9wcyB1cGRhdGUgdmVyc3VzIGEgc2ltcGxlIHN0YXRlIHVwZGF0ZVxuICAgIGlmIChwcmV2UGFyZW50RWxlbWVudCAhPT0gbmV4dFBhcmVudEVsZW1lbnQpIHtcbiAgICAgIG5leHRDb250ZXh0ID0gdGhpcy5fcHJvY2Vzc0NvbnRleHQobmV4dFBhcmVudEVsZW1lbnQuX2NvbnRleHQpO1xuICAgICAgbmV4dFByb3BzID0gdGhpcy5fcHJvY2Vzc1Byb3BzKG5leHRQYXJlbnRFbGVtZW50LnByb3BzKTtcblxuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICBpZiAobmV4dFVubWFza2VkQ29udGV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5fd2FybklmQ29udGV4dHNEaWZmZXIoXG4gICAgICAgICAgICBuZXh0UGFyZW50RWxlbWVudC5fY29udGV4dCxcbiAgICAgICAgICAgIG5leHRVbm1hc2tlZENvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFuIHVwZGF0ZSBoZXJlIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIGJ1dCBpbW1lZGlhdGVseSBzZXRcbiAgICAgIC8vIF9wZW5kaW5nU3RhdGVRdWV1ZSB3aGljaCB3aWxsIGVuc3VyZSB0aGF0IGFueSBzdGF0ZSB1cGRhdGVzIGdldHNcbiAgICAgIC8vIGltbWVkaWF0ZWx5IHJlY29uY2lsZWQgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgbmV4dCBiYXRjaC5cblxuICAgICAgaWYgKGluc3QuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykge1xuICAgICAgICBpbnN0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5leHRTdGF0ZSA9IHRoaXMuX3Byb2Nlc3NQZW5kaW5nU3RhdGUobmV4dFByb3BzLCBuZXh0Q29udGV4dCk7XG5cbiAgICB2YXIgc2hvdWxkVXBkYXRlID1cbiAgICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSB8fFxuICAgICAgIWluc3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlIHx8XG4gICAgICBpbnN0LnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIHR5cGVvZiBzaG91bGRVcGRhdGUgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICAnJXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IFJldHVybmVkIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGEgJyArXG4gICAgICAgICdib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuJyxcbiAgICAgICAgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50J1xuICAgICAgKSA6IG51bGwpO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgLy8gV2lsbCBzZXQgYHRoaXMucHJvcHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgLlxuICAgICAgdGhpcy5fcGVyZm9ybUNvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgbmV4dFBhcmVudEVsZW1lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICBuZXh0Q29udGV4dCxcbiAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgIG5leHRVbm1hc2tlZENvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGl0J3MgZGV0ZXJtaW5lZCB0aGF0IGEgY29tcG9uZW50IHNob3VsZCBub3QgdXBkYXRlLCB3ZSBzdGlsbCB3YW50XG4gICAgICAvLyB0byBzZXQgcHJvcHMgYW5kIHN0YXRlIGJ1dCB3ZSBzaG9ydGN1dCB0aGUgcmVzdCBvZiB0aGUgdXBkYXRlLlxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0UGFyZW50RWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbnRleHQgPSBuZXh0VW5tYXNrZWRDb250ZXh0O1xuICAgICAgaW5zdC5wcm9wcyA9IG5leHRQcm9wcztcbiAgICAgIGluc3Quc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBpbnN0LmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgICB9XG4gIH0sXG5cbiAgX3Byb2Nlc3NQZW5kaW5nU3RhdGU6IGZ1bmN0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcbiAgICB2YXIgcXVldWUgPSB0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZTtcbiAgICB2YXIgcmVwbGFjZSA9IHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU7XG4gICAgdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgIGlmICghcXVldWUpIHtcbiAgICAgIHJldHVybiBpbnN0LnN0YXRlO1xuICAgIH1cblxuICAgIGlmIChyZXBsYWNlICYmIHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHF1ZXVlWzBdO1xuICAgIH1cblxuICAgIHZhciBuZXh0U3RhdGUgPSBhc3NpZ24oe30sIHJlcGxhY2UgPyBxdWV1ZVswXSA6IGluc3Quc3RhdGUpO1xuICAgIGZvciAodmFyIGkgPSByZXBsYWNlID8gMSA6IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhcnRpYWwgPSBxdWV1ZVtpXTtcbiAgICAgIGFzc2lnbihcbiAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICB0eXBlb2YgcGFydGlhbCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgcGFydGlhbC5jYWxsKGluc3QsIG5leHRTdGF0ZSwgcHJvcHMsIGNvbnRleHQpIDpcbiAgICAgICAgICBwYXJ0aWFsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIE1lcmdlcyBuZXcgcHJvcHMgYW5kIHN0YXRlLCBub3RpZmllcyBkZWxlZ2F0ZSBtZXRob2RzIG9mIHVwZGF0ZSBhbmRcbiAgICogcGVyZm9ybXMgdXBkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnQgTmV4dCBlbGVtZW50XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMgTmV4dCBwdWJsaWMgb2JqZWN0IHRvIHNldCBhcyBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZSBOZXh0IG9iamVjdCB0byBzZXQgYXMgc3RhdGUuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHQgTmV4dCBwdWJsaWMgb2JqZWN0IHRvIHNldCBhcyBjb250ZXh0LlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7P29iamVjdH0gdW5tYXNrZWRDb250ZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGVyZm9ybUNvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24oXG4gICAgbmV4dEVsZW1lbnQsXG4gICAgbmV4dFByb3BzLFxuICAgIG5leHRTdGF0ZSxcbiAgICBuZXh0Q29udGV4dCxcbiAgICB0cmFuc2FjdGlvbixcbiAgICB1bm1hc2tlZENvbnRleHRcbiAgKSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIHZhciBwcmV2UHJvcHMgPSBpbnN0LnByb3BzO1xuICAgIHZhciBwcmV2U3RhdGUgPSBpbnN0LnN0YXRlO1xuICAgIHZhciBwcmV2Q29udGV4dCA9IGluc3QuY29udGV4dDtcblxuICAgIGlmIChpbnN0LmNvbXBvbmVudFdpbGxVcGRhdGUpIHtcbiAgICAgIGluc3QuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgdGhpcy5fY29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0LnByb3BzID0gbmV4dFByb3BzO1xuICAgIGluc3Quc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgaW5zdC5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG5cbiAgICB0aGlzLl91cGRhdGVSZW5kZXJlZENvbXBvbmVudCh0cmFuc2FjdGlvbiwgdW5tYXNrZWRDb250ZXh0KTtcblxuICAgIGlmIChpbnN0LmNvbXBvbmVudERpZFVwZGF0ZSkge1xuICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShcbiAgICAgICAgaW5zdC5jb21wb25lbnREaWRVcGRhdGUuYmluZChpbnN0LCBwcmV2UHJvcHMsIHByZXZTdGF0ZSwgcHJldkNvbnRleHQpLFxuICAgICAgICBpbnN0XG4gICAgICApO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQ2FsbCB0aGUgY29tcG9uZW50J3MgYHJlbmRlcmAgbWV0aG9kIGFuZCB1cGRhdGUgdGhlIERPTSBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF91cGRhdGVSZW5kZXJlZENvbXBvbmVudDogZnVuY3Rpb24odHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgcHJldkNvbXBvbmVudEluc3RhbmNlID0gdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ7XG4gICAgdmFyIHByZXZSZW5kZXJlZEVsZW1lbnQgPSBwcmV2Q29tcG9uZW50SW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuICAgIHZhciBjaGlsZENvbnRleHQgPSB0aGlzLl9nZXRWYWxpZGF0ZWRDaGlsZENvbnRleHQoKTtcbiAgICB2YXIgbmV4dFJlbmRlcmVkRWxlbWVudCA9IHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudChjaGlsZENvbnRleHQpO1xuICAgIGlmIChzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2UmVuZGVyZWRFbGVtZW50LCBuZXh0UmVuZGVyZWRFbGVtZW50KSkge1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnJlY2VpdmVDb21wb25lbnQoXG4gICAgICAgIHByZXZDb21wb25lbnRJbnN0YW5jZSxcbiAgICAgICAgbmV4dFJlbmRlcmVkRWxlbWVudCxcbiAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgIHRoaXMuX21lcmdlQ2hpbGRDb250ZXh0KGNvbnRleHQsIGNoaWxkQ29udGV4dClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZXNlIHR3byBJRHMgYXJlIGFjdHVhbGx5IHRoZSBzYW1lISBCdXQgbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGF0LlxuICAgICAgdmFyIHRoaXNJRCA9IHRoaXMuX3Jvb3ROb2RlSUQ7XG4gICAgICB2YXIgcHJldkNvbXBvbmVudElEID0gcHJldkNvbXBvbmVudEluc3RhbmNlLl9yb290Tm9kZUlEO1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQocHJldkNvbXBvbmVudEluc3RhbmNlKTtcblxuICAgICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSB0aGlzLl9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KFxuICAgICAgICBuZXh0UmVuZGVyZWRFbGVtZW50LFxuICAgICAgICB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlXG4gICAgICApO1xuICAgICAgdmFyIG5leHRNYXJrdXAgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50LFxuICAgICAgICB0aGlzSUQsXG4gICAgICAgIHRyYW5zYWN0aW9uLFxuICAgICAgICB0aGlzLl9tZXJnZUNoaWxkQ29udGV4dChjb250ZXh0LCBjaGlsZENvbnRleHQpXG4gICAgICApO1xuICAgICAgdGhpcy5fcmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRChwcmV2Q29tcG9uZW50SUQsIG5leHRNYXJrdXApO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgX3JlcGxhY2VOb2RlV2l0aE1hcmt1cEJ5SUQ6IGZ1bmN0aW9uKHByZXZDb21wb25lbnRJRCwgbmV4dE1hcmt1cCkge1xuICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQucmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRChcbiAgICAgIHByZXZDb21wb25lbnRJRCxcbiAgICAgIG5leHRNYXJrdXBcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciByZW5kZXJlZENvbXBvbmVudCA9IGluc3QucmVuZGVyKCk7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICBpZiAodHlwZW9mIHJlbmRlcmVkQ29tcG9uZW50ID09PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIGluc3QucmVuZGVyLl9pc01vY2tGdW5jdGlvbikge1xuICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFuZFxuICAgICAgICAvLyBkZXByZWNhdGluZyB0aGlzIGNvbnZlbmllbmNlLlxuICAgICAgICByZW5kZXJlZENvbXBvbmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlcmVkQ29tcG9uZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudDogZnVuY3Rpb24oY2hpbGRDb250ZXh0KSB7XG4gICAgdmFyIHJlbmRlcmVkQ29tcG9uZW50O1xuICAgIHZhciBwcmV2aW91c0NvbnRleHQgPSBSZWFjdENvbnRleHQuY3VycmVudDtcbiAgICBSZWFjdENvbnRleHQuY3VycmVudCA9IHRoaXMuX21lcmdlQ2hpbGRDb250ZXh0KFxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQuX2NvbnRleHQsXG4gICAgICBjaGlsZENvbnRleHRcbiAgICApO1xuICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlzO1xuICAgIHRyeSB7XG4gICAgICByZW5kZXJlZENvbXBvbmVudCA9XG4gICAgICAgIHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdENvbnRleHQuY3VycmVudCA9IHByZXZpb3VzQ29udGV4dDtcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgLy8gVE9ETzogQW4gYGlzVmFsaWROb2RlYCBmdW5jdGlvbiB3b3VsZCBwcm9iYWJseSBiZSBtb3JlIGFwcHJvcHJpYXRlXG4gICAgICByZW5kZXJlZENvbXBvbmVudCA9PT0gbnVsbCB8fCByZW5kZXJlZENvbXBvbmVudCA9PT0gZmFsc2UgfHxcbiAgICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChyZW5kZXJlZENvbXBvbmVudCksXG4gICAgICAnJXMucmVuZGVyKCk6IEEgdmFsaWQgUmVhY3RDb21wb25lbnQgbXVzdCBiZSByZXR1cm5lZC4gWW91IG1heSBoYXZlICcgK1xuICAgICAgICAncmV0dXJuZWQgdW5kZWZpbmVkLCBhbiBhcnJheSBvciBzb21lIG90aGVyIGludmFsaWQgb2JqZWN0LicsXG4gICAgICB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnXG4gICAgKSA6IGludmFyaWFudCgvLyBUT0RPOiBBbiBgaXNWYWxpZE5vZGVgIGZ1bmN0aW9uIHdvdWxkIHByb2JhYmx5IGJlIG1vcmUgYXBwcm9wcmlhdGVcbiAgICByZW5kZXJlZENvbXBvbmVudCA9PT0gbnVsbCB8fCByZW5kZXJlZENvbXBvbmVudCA9PT0gZmFsc2UgfHxcbiAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQocmVuZGVyZWRDb21wb25lbnQpKSk7XG4gICAgcmV0dXJuIHJlbmRlcmVkQ29tcG9uZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBMYXppbHkgYWxsb2NhdGVzIHRoZSByZWZzIG9iamVjdCBhbmQgc3RvcmVzIGBjb21wb25lbnRgIGFzIGByZWZgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIFJlZmVyZW5jZSBuYW1lLlxuICAgKiBAcGFyYW0ge2NvbXBvbmVudH0gY29tcG9uZW50IENvbXBvbmVudCB0byBzdG9yZSBhcyBgcmVmYC5cbiAgICogQGZpbmFsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhdHRhY2hSZWY6IGZ1bmN0aW9uKHJlZiwgY29tcG9uZW50KSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgdmFyIHJlZnMgPSBpbnN0LnJlZnMgPT09IGVtcHR5T2JqZWN0ID8gKGluc3QucmVmcyA9IHt9KSA6IGluc3QucmVmcztcbiAgICByZWZzW3JlZl0gPSBjb21wb25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgfSxcblxuICAvKipcbiAgICogRGV0YWNoZXMgYSByZWZlcmVuY2UgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZiBOYW1lIHRvIGRlcmVmZXJlbmNlLlxuICAgKiBAZmluYWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRldGFjaFJlZjogZnVuY3Rpb24ocmVmKSB7XG4gICAgdmFyIHJlZnMgPSB0aGlzLmdldFB1YmxpY0luc3RhbmNlKCkucmVmcztcbiAgICBkZWxldGUgcmVmc1tyZWZdO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSBpdFxuICAgKiBpbiBlcnJvciBtZXNzYWdlcy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvciBudWxsLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldE5hbWU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0eXBlID0gdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSB0aGlzLl9pbnN0YW5jZSAmJiB0aGlzLl9pbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fCAoY29uc3RydWN0b3IgJiYgY29uc3RydWN0b3IuZGlzcGxheU5hbWUpIHx8XG4gICAgICB0eXBlLm5hbWUgfHwgKGNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLm5hbWUpIHx8XG4gICAgICBudWxsXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgY29tcG9uZW50IC0gaS5lLiB3aGF0XG4gICAqIGlzIGV4cG9zZWQgYnkgcmVmcyBhbmQgcmV0dXJuZWQgYnkgUmVhY3QucmVuZGVyLiBDYW4gYmUgbnVsbCBmb3Igc3RhdGVsZXNzXG4gICAqIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSB0aGUgcHVibGljIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRQdWJsaWNJbnN0YW5jZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICB9LFxuXG4gIC8vIFN0dWJcbiAgX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6IG51bGxcblxufTtcblxuUmVhY3RQZXJmLm1lYXN1cmVNZXRob2RzKFxuICBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudE1peGluLFxuICAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnLFxuICB7XG4gICAgbW91bnRDb21wb25lbnQ6ICdtb3VudENvbXBvbmVudCcsXG4gICAgdXBkYXRlQ29tcG9uZW50OiAndXBkYXRlQ29tcG9uZW50JyxcbiAgICBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50OiAnX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCdcbiAgfVxuKTtcblxudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50ID0ge1xuXG4gIE1peGluOiBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudE1peGluXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb3NpdGVDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5RdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRFTnZiWEJ2Ym1WdWRFVnVkbWx5YjI1dFpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JEYjIxd2IyNWxiblJGYm5acGNtOXViV1Z1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRU52Ym5SbGVIUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU52Ym5SbGVIUmNJaWs3WEc1MllYSWdVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU4xY25KbGJuUlBkMjVsY2x3aUtUdGNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVZzWlcxbGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5WENJcE8xeHVkbUZ5SUZKbFlXTjBTVzV6ZEdGdVkyVk5ZWEFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVsdWMzUmhibU5sVFdGd1hDSXBPMXh1ZG1GeUlGSmxZV04wVEdsbVpVTjVZMnhsSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSTWFXWmxRM2xqYkdWY0lpazdYRzUyWVhJZ1VtVmhZM1JPWVhScGRtVkRiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEZCbGNtWWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRkJsY21aY0lpazdYRzUyWVhJZ1VtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVjeUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVUhKdmNGUjVjR1ZNYjJOaGRHbHZibk5jSWlrN1hHNTJZWElnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dVRtRnRaWE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGMxd2lLVHRjYm5aaGNpQlNaV0ZqZEZKbFkyOXVZMmxzWlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGSmxZMjl1WTJsc1pYSmNJaWs3WEc1MllYSWdVbVZoWTNSVmNHUmhkR1Z6SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSVmNHUmhkR1Z6WENJcE8xeHVYRzUyWVhJZ1lYTnphV2R1SUQwZ2NtVnhkV2x5WlNoY0lpNHZUMkpxWldOMExtRnpjMmxuYmx3aUtUdGNiblpoY2lCbGJYQjBlVTlpYW1WamRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJWdGNIUjVUMkpxWldOMFhDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNiblpoY2lCemFHOTFiR1JWY0dSaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZENBOUlISmxjWFZwY21Vb1hDSXVMM05vYjNWc1pGVndaR0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzVtZFc1amRHbHZiaUJuWlhSRVpXTnNZWEpoZEdsdmJrVnljbTl5UVdSa1pXNWtkVzBvWTI5dGNHOXVaVzUwS1NCN1hHNGdJSFpoY2lCdmQyNWxjaUE5SUdOdmJYQnZibVZ1ZEM1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1WDI5M2JtVnlJSHg4SUc1MWJHdzdYRzRnSUdsbUlDaHZkMjVsY2lrZ2UxeHVJQ0FnSUhaaGNpQnVZVzFsSUQwZ2IzZHVaWEl1WjJWMFRtRnRaU2dwTzF4dUlDQWdJR2xtSUNodVlXMWxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdKeUJEYUdWamF5QjBhR1VnY21WdVpHVnlJRzFsZEdodlpDQnZaaUJnSnlBcklHNWhiV1VnS3lBbllDNG5PMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z0p5YzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwdElGUm9aU0JNYVdabExVTjVZMnhsSUc5bUlHRWdRMjl0Y0c5emFYUmxJRU52YlhCdmJtVnVkQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjYmlBcVhHNGdLaUF0SUdOdmJuTjBjblZqZEc5eU9pQkpibWwwYVdGc2FYcGhkR2x2YmlCdlppQnpkR0YwWlM0Z1ZHaGxJR2x1YzNSaGJtTmxJR2x6SUc1dmR5QnlaWFJoYVc1bFpDNWNiaUFxSUNBZ0xTQmpiMjF3YjI1bGJuUlhhV3hzVFc5MWJuUmNiaUFxSUNBZ0xTQnlaVzVrWlhKY2JpQXFJQ0FnTFNCYlkyaHBiR1J5Wlc0bmN5QmpiMjV6ZEhKMVkzUnZjbk5kWEc0Z0tpQWdJQ0FnTFNCYlkyaHBiR1J5Wlc0bmN5QmpiMjF3YjI1bGJuUlhhV3hzVFc5MWJuUWdZVzVrSUhKbGJtUmxjbDFjYmlBcUlDQWdJQ0F0SUZ0amFHbHNaSEpsYmlkeklHTnZiWEJ2Ym1WdWRFUnBaRTF2ZFc1MFhWeHVJQ29nSUNBZ0lDMGdZMjl0Y0c5dVpXNTBSR2xrVFc5MWJuUmNiaUFxWEc0Z0tpQWdJQ0FnSUNCVmNHUmhkR1VnVUdoaGMyVnpPbHh1SUNvZ0lDQWdJQ0FnTFNCamIyMXdiMjVsYm5SWGFXeHNVbVZqWldsMlpWQnliM0J6SUNodmJteDVJR05oYkd4bFpDQnBaaUJ3WVhKbGJuUWdkWEJrWVhSbFpDbGNiaUFxSUNBZ0lDQWdJQzBnYzJodmRXeGtRMjl0Y0c5dVpXNTBWWEJrWVhSbFhHNGdLaUFnSUNBZ0lDQWdJQzBnWTI5dGNHOXVaVzUwVjJsc2JGVndaR0YwWlZ4dUlDb2dJQ0FnSUNBZ0lDQWdJQzBnY21WdVpHVnlYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0xTQmJZMmhwYkdSeVpXNG5jeUJqYjI1emRISjFZM1J2Y25NZ2IzSWdjbVZqWldsMlpTQndjbTl3Y3lCd2FHRnpaWE5kWEc0Z0tpQWdJQ0FnSUNBZ0lDMGdZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxYRzRnS2x4dUlDb2dJQ0FnSUMwZ1kyOXRjRzl1Wlc1MFYybHNiRlZ1Ylc5MWJuUmNiaUFxSUNBZ0lDQXRJRnRqYUdsc1pISmxiaWR6SUdOdmJYQnZibVZ1ZEZkcGJHeFZibTF2ZFc1MFhWeHVJQ29nSUNBdElGdGphR2xzWkhKbGJpQmtaWE4wY205NVpXUmRYRzRnS2lBdElDaGtaWE4wY205NVpXUXBPaUJVYUdVZ2FXNXpkR0Z1WTJVZ2FYTWdibTkzSUdKc1lXNXJMQ0J5Wld4bFlYTmxaQ0JpZVNCU1pXRmpkQ0JoYm1RZ2NtVmhaSGtnWm05eUlFZERMbHh1SUNwY2JpQXFJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdFhHNGdLaTljYmx4dUx5b3FYRzRnS2lCQmJpQnBibU55WlcxbGJuUnBibWNnU1VRZ1lYTnphV2R1WldRZ2RHOGdaV0ZqYUNCamIyMXdiMjVsYm5RZ2QyaGxiaUJwZENCcGN5QnRiM1Z1ZEdWa0xpQlVhR2x6SUdselhHNGdLaUIxYzJWa0lIUnZJR1Z1Wm05eVkyVWdkR2hsSUc5eVpHVnlJR2x1SUhkb2FXTm9JR0JTWldGamRGVndaR0YwWlhOZ0lIVndaR0YwWlhNZ1pHbHlkSGtnWTI5dGNHOXVaVzUwY3k1Y2JpQXFYRzRnS2lCQWNISnBkbUYwWlZ4dUlDb3ZYRzUyWVhJZ2JtVjRkRTF2ZFc1MFNVUWdQU0F4TzF4dVhHNHZLaXBjYmlBcUlFQnNaVzVrY3lCN1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblF1Y0hKdmRHOTBlWEJsZlZ4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblJOYVhocGJpQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRbUZ6WlNCamIyNXpkSEoxWTNSdmNpQm1iM0lnWVd4c0lHTnZiWEJ2YzJsMFpTQmpiMjF3YjI1bGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUkZiR1Z0Wlc1MGZTQmxiR1Z0Wlc1MFhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR052Ym5OMGNuVmpkRG9nWm5WdVkzUnBiMjRvWld4bGJXVnVkQ2tnZTF4dUlDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwSUQwZ1pXeGxiV1Z1ZER0Y2JpQWdJQ0IwYUdsekxsOXliMjkwVG05a1pVbEVJRDBnYm5Wc2JEdGNiaUFnSUNCMGFHbHpMbDlwYm5OMFlXNWpaU0E5SUc1MWJHdzdYRzVjYmlBZ0lDQXZMeUJUWldVZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlZ4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kRmJHVnRaVzUwSUQwZ2JuVnNiRHRjYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuVTNSaGRHVlJkV1YxWlNBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZmNHVnVaR2x1WjFKbGNHeGhZMlZUZEdGMFpTQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdkR2hwY3k1ZmNtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnZEdocGN5NWZZMjl1ZEdWNGRDQTlJRzUxYkd3N1hHNGdJQ0FnZEdocGN5NWZiVzkxYm5SUGNtUmxjaUE5SURBN1hHNGdJQ0FnZEdocGN5NWZhWE5VYjNCTVpYWmxiQ0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdMeThnVTJWbElGSmxZV04wVlhCa1lYUmxjeUJoYm1RZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlM1Y2JpQWdJQ0IwYUdsekxsOXdaVzVrYVc1blEyRnNiR0poWTJ0eklEMGdiblZzYkR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dTVzVwZEdsaGJHbDZaWE1nZEdobElHTnZiWEJ2Ym1WdWRDd2djbVZ1WkdWeWN5QnRZWEpyZFhBc0lHRnVaQ0J5WldkcGMzUmxjbk1nWlhabGJuUWdiR2x6ZEdWdVpYSnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnY205dmRFbEVJRVJQVFNCSlJDQnZaaUIwYUdVZ2NtOXZkQ0J1YjJSbExseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU4VW1WaFkzUlRaWEoyWlhKU1pXNWtaWEpwYm1kVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdQM04wY21sdVozMGdVbVZ1WkdWeVpXUWdiV0Z5YTNWd0lIUnZJR0psSUdsdWMyVnlkR1ZrSUdsdWRHOGdkR2hsSUVSUFRTNWNiaUFnSUNvZ1FHWnBibUZzWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnYlc5MWJuUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLSEp2YjNSSlJDd2dkSEpoYm5OaFkzUnBiMjRzSUdOdmJuUmxlSFFwSUh0Y2JpQWdJQ0IwYUdsekxsOWpiMjUwWlhoMElEMGdZMjl1ZEdWNGREdGNiaUFnSUNCMGFHbHpMbDl0YjNWdWRFOXlaR1Z5SUQwZ2JtVjRkRTF2ZFc1MFNVUXJLenRjYmlBZ0lDQjBhR2x6TGw5eWIyOTBUbTlrWlVsRUlEMGdjbTl2ZEVsRU8xeHVYRzRnSUNBZ2RtRnlJSEIxWW14cFkxQnliM0J6SUQwZ2RHaHBjeTVmY0hKdlkyVnpjMUJ5YjNCektIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMbkJ5YjNCektUdGNiaUFnSUNCMllYSWdjSFZpYkdsalEyOXVkR1Y0ZENBOUlIUm9hWE11WDNCeWIyTmxjM05EYjI1MFpYaDBLSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTGw5amIyNTBaWGgwS1R0Y2JseHVJQ0FnSUhaaGNpQkRiMjF3YjI1bGJuUWdQU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEM1blpYUkRiMjF3YjI1bGJuUkRiR0Z6YzBadmNrVnNaVzFsYm5Rb1hHNGdJQ0FnSUNCMGFHbHpMbDlqZFhKeVpXNTBSV3hsYldWdWRGeHVJQ0FnSUNrN1hHNWNiaUFnSUNBdkx5QkpibWwwYVdGc2FYcGxJSFJvWlNCd2RXSnNhV01nWTJ4aGMzTmNiaUFnSUNCMllYSWdhVzV6ZENBOUlHNWxkeUJEYjIxd2IyNWxiblFvY0hWaWJHbGpVSEp2Y0hNc0lIQjFZbXhwWTBOdmJuUmxlSFFwTzF4dVhHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnTHk4Z1ZHaHBjeUIzYVd4c0lIUm9jbTkzSUd4aGRHVnlJR2x1SUY5eVpXNWtaWEpXWVd4cFpHRjBaV1JEYjIxd2IyNWxiblFzSUdKMWRDQmhaR1FnWVc0Z1pXRnliSGxjYmlBZ0lDQWdJQzh2SUhkaGNtNXBibWNnYm05M0lIUnZJR2hsYkhBZ1pHVmlkV2RuYVc1blhHNGdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnYVc1emRDNXlaVzVrWlhJZ0lUMGdiblZzYkN4Y2JpQWdJQ0FnSUNBZ0p5VnpLQzR1TGlrNklFNXZJR0J5Wlc1a1pYSmdJRzFsZEdodlpDQm1iM1Z1WkNCdmJpQjBhR1VnY21WMGRYSnVaV1FnWTI5dGNHOXVaVzUwSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5hVzV6ZEdGdVkyVTZJSGx2ZFNCdFlYa2dhR0YyWlNCbWIzSm5iM1IwWlc0Z2RHOGdaR1ZtYVc1bElHQnlaVzVrWlhKZ0lHbHVJSGx2ZFhJZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RqYjIxd2IyNWxiblFnYjNJZ2VXOTFJRzFoZVNCb1lYWmxJR0ZqWTJsa1pXNTBZV3hzZVNCMGNtbGxaQ0IwYnlCeVpXNWtaWElnWVc0Z1pXeGxiV1Z1ZENBbklDdGNiaUFnSUNBZ0lDQWdKM2RvYjNObElIUjVjR1VnYVhNZ1lTQm1kVzVqZEdsdmJpQjBhR0YwSUdsemJseGNKM1FnWVNCU1pXRmpkQ0JqYjIxd2IyNWxiblF1Snl4Y2JpQWdJQ0FnSUNBZ1EyOXRjRzl1Wlc1MExtUnBjM0JzWVhsT1lXMWxJSHg4SUVOdmJYQnZibVZ1ZEM1dVlXMWxJSHg4SUNkRGIyMXdiMjVsYm5RblhHNGdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1ZHaGxjMlVnYzJodmRXeGtJR0psSUhObGRDQjFjQ0JwYmlCMGFHVWdZMjl1YzNSeWRXTjBiM0lzSUdKMWRDQmhjeUJoSUdOdmJuWmxibWxsYm1ObElHWnZjbHh1SUNBZ0lDOHZJSE5wYlhCc1pYSWdZMnhoYzNNZ1lXSnpkSEpoWTNScGIyNXpMQ0IzWlNCelpYUWdkR2hsYlNCMWNDQmhablJsY2lCMGFHVWdabUZqZEM1Y2JpQWdJQ0JwYm5OMExuQnliM0J6SUQwZ2NIVmliR2xqVUhKdmNITTdYRzRnSUNBZ2FXNXpkQzVqYjI1MFpYaDBJRDBnY0hWaWJHbGpRMjl1ZEdWNGREdGNiaUFnSUNCcGJuTjBMbkpsWm5NZ1BTQmxiWEIwZVU5aWFtVmpkRHRjYmx4dUlDQWdJSFJvYVhNdVgybHVjM1JoYm1ObElEMGdhVzV6ZER0Y2JseHVJQ0FnSUM4dklGTjBiM0psSUdFZ2NtVm1aWEpsYm1ObElHWnliMjBnZEdobElHbHVjM1JoYm1ObElHSmhZMnNnZEc4Z2RHaGxJR2x1ZEdWeWJtRnNJSEpsY0hKbGMyVnVkR0YwYVc5dVhHNGdJQ0FnVW1WaFkzUkpibk4wWVc1alpVMWhjQzV6WlhRb2FXNXpkQ3dnZEdocGN5azdYRzVjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5M1lYSnVTV1pEYjI1MFpYaDBjMFJwWm1abGNpaDBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQzVmWTI5dWRHVjRkQ3dnWTI5dWRHVjRkQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdMeThnVTJsdVkyVWdjR3hoYVc0Z1NsTWdZMnhoYzNObGN5QmhjbVVnWkdWbWFXNWxaQ0IzYVhSb2IzVjBJR0Z1ZVNCemNHVmphV0ZzSUdsdWFYUnBZV3hwZW1GMGFXOXVYRzRnSUNBZ0lDQXZMeUJzYjJkcFl5d2dkMlVnWTJGdUlHNXZkQ0JqWVhSamFDQmpiMjF0YjI0Z1pYSnliM0p6SUdWaGNteDVMaUJVYUdWeVpXWnZjbVVzSUhkbElHaGhkbVVnZEc5Y2JpQWdJQ0FnSUM4dklHTmhkR05vSUhSb1pXMGdhR1Z5WlN3Z1lYUWdhVzVwZEdsaGJHbDZZWFJwYjI0Z2RHbHRaU3dnYVc1emRHVmhaQzVjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWhhVzV6ZEM1blpYUkpibWwwYVdGc1UzUmhkR1VnZkh4Y2JpQWdJQ0FnSUNBZ2FXNXpkQzVuWlhSSmJtbDBhV0ZzVTNSaGRHVXVhWE5TWldGamRFTnNZWE56UVhCd2NtOTJaV1FzWEc0Z0lDQWdJQ0FnSUNkblpYUkpibWwwYVdGc1UzUmhkR1VnZDJGeklHUmxabWx1WldRZ2IyNGdKWE1zSUdFZ2NHeGhhVzRnU21GMllWTmpjbWx3ZENCamJHRnpjeTRnSnlBclhHNGdJQ0FnSUNBZ0lDZFVhR2x6SUdseklHOXViSGtnYzNWd2NHOXlkR1ZrSUdadmNpQmpiR0Z6YzJWeklHTnlaV0YwWldRZ2RYTnBibWNnVW1WaFkzUXVZM0psWVhSbFEyeGhjM011SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5SR2xrSUhsdmRTQnRaV0Z1SUhSdklHUmxabWx1WlNCaElITjBZWFJsSUhCeWIzQmxjblI1SUdsdWMzUmxZV1EvSnl4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVuWlhST1lXMWxLQ2tnZkh3Z0oyRWdZMjl0Y0c5dVpXNTBKMXh1SUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lDRnBibk4wTG1kbGRFUmxabUYxYkhSUWNtOXdjeUI4ZkZ4dUlDQWdJQ0FnSUNCcGJuTjBMbWRsZEVSbFptRjFiSFJRY205d2N5NXBjMUpsWVdOMFEyeGhjM05CY0hCeWIzWmxaQ3hjYmlBZ0lDQWdJQ0FnSjJkbGRFUmxabUYxYkhSUWNtOXdjeUIzWVhNZ1pHVm1hVzVsWkNCdmJpQWxjeXdnWVNCd2JHRnBiaUJLWVhaaFUyTnlhWEIwSUdOc1lYTnpMaUFuSUN0Y2JpQWdJQ0FnSUNBZ0oxUm9hWE1nYVhNZ2IyNXNlU0J6ZFhCd2IzSjBaV1FnWm05eUlHTnNZWE56WlhNZ1kzSmxZWFJsWkNCMWMybHVaeUJTWldGamRDNWpjbVZoZEdWRGJHRnpjeTRnSnlBclhHNGdJQ0FnSUNBZ0lDZFZjMlVnWVNCemRHRjBhV01nY0hKdmNHVnlkSGtnZEc4Z1pHVm1hVzVsSUdSbFptRjFiSFJRY205d2N5QnBibk4wWldGa0xpY3NYRzRnSUNBZ0lDQWdJSFJvYVhNdVoyVjBUbUZ0WlNncElIeDhJQ2RoSUdOdmJYQnZibVZ1ZENkY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FoYVc1emRDNXdjbTl3Vkhsd1pYTXNYRzRnSUNBZ0lDQWdJQ2R3Y205d1ZIbHdaWE1nZDJGeklHUmxabWx1WldRZ1lYTWdZVzRnYVc1emRHRnVZMlVnY0hKdmNHVnlkSGtnYjI0Z0pYTXVJRlZ6WlNCaElITjBZWFJwWXlBbklDdGNiaUFnSUNBZ0lDQWdKM0J5YjNCbGNuUjVJSFJ2SUdSbFptbHVaU0J3Y205d1ZIbHdaWE1nYVc1emRHVmhaQzRuTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbWRsZEU1aGJXVW9LU0I4ZkNBbllTQmpiMjF3YjI1bGJuUW5YRzRnSUNBZ0lDQXBJRG9nYm5Wc2JDazdYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lXbHVjM1F1WTI5dWRHVjRkRlI1Y0dWekxGeHVJQ0FnSUNBZ0lDQW5ZMjl1ZEdWNGRGUjVjR1Z6SUhkaGN5QmtaV1pwYm1Wa0lHRnpJR0Z1SUdsdWMzUmhibU5sSUhCeWIzQmxjblI1SUc5dUlDVnpMaUJWYzJVZ1lTQW5JQ3RjYmlBZ0lDQWdJQ0FnSjNOMFlYUnBZeUJ3Y205d1pYSjBlU0IwYnlCa1pXWnBibVVnWTI5dWRHVjRkRlI1Y0dWeklHbHVjM1JsWVdRdUp5eGNiaUFnSUNBZ0lDQWdkR2hwY3k1blpYUk9ZVzFsS0NrZ2ZId2dKMkVnWTI5dGNHOXVaVzUwSjF4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJSFI1Y0dWdlppQnBibk4wTG1OdmJYQnZibVZ1ZEZOb2IzVnNaRlZ3WkdGMFpTQWhQVDBnSjJaMWJtTjBhVzl1Snl4Y2JpQWdJQ0FnSUNBZ0p5VnpJR2hoY3lCaElHMWxkR2h2WkNCallXeHNaV1FnSnlBclhHNGdJQ0FnSUNBZ0lDZGpiMjF3YjI1bGJuUlRhRzkxYkdSVmNHUmhkR1VvS1M0Z1JHbGtJSGx2ZFNCdFpXRnVJSE5vYjNWc1pFTnZiWEJ2Ym1WdWRGVndaR0YwWlNncFB5QW5JQ3RjYmlBZ0lDQWdJQ0FnSjFSb1pTQnVZVzFsSUdseklIQm9jbUZ6WldRZ1lYTWdZU0J4ZFdWemRHbHZiaUJpWldOaGRYTmxJSFJvWlNCbWRXNWpkR2x2YmlCcGN5QW5JQ3RjYmlBZ0lDQWdJQ0FnSjJWNGNHVmpkR1ZrSUhSdklISmxkSFZ5YmlCaElIWmhiSFZsTGljc1hHNGdJQ0FnSUNBZ0lDaDBhR2x6TG1kbGRFNWhiV1VvS1NCOGZDQW5RU0JqYjIxd2IyNWxiblFuS1Z4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCcGJtbDBhV0ZzVTNSaGRHVWdQU0JwYm5OMExuTjBZWFJsTzF4dUlDQWdJR2xtSUNocGJtbDBhV0ZzVTNSaGRHVWdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2FXNXpkQzV6ZEdGMFpTQTlJR2x1YVhScFlXeFRkR0YwWlNBOUlHNTFiR3c3WEc0Z0lDQWdmVnh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCMGVYQmxiMllnYVc1cGRHbGhiRk4wWVhSbElEMDlQU0FuYjJKcVpXTjBKeUFtSmlBaFFYSnlZWGt1YVhOQmNuSmhlU2hwYm1sMGFXRnNVM1JoZEdVcExGeHVJQ0FnSUNBZ0p5VnpMbk4wWVhSbE9pQnRkWE4wSUdKbElITmxkQ0IwYnlCaGJpQnZZbXBsWTNRZ2IzSWdiblZzYkNjc1hHNGdJQ0FnSUNCMGFHbHpMbWRsZEU1aGJXVW9LU0I4ZkNBblVtVmhZM1JEYjIxd2IzTnBkR1ZEYjIxd2IyNWxiblFuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoMGVYQmxiMllnYVc1cGRHbGhiRk4wWVhSbElEMDlQU0FuYjJKcVpXTjBKeUFtSmlBaFFYSnlZWGt1YVhOQmNuSmhlU2hwYm1sMGFXRnNVM1JoZEdVcEtTazdYRzVjYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuVTNSaGRHVlJkV1YxWlNBOUlHNTFiR3c3WEc0Z0lDQWdkR2hwY3k1ZmNHVnVaR2x1WjFKbGNHeGhZMlZUZEdGMFpTQTlJR1poYkhObE8xeHVJQ0FnSUhSb2FYTXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdkbUZ5SUdOb2FXeGtRMjl1ZEdWNGREdGNiaUFnSUNCMllYSWdjbVZ1WkdWeVpXUkZiR1Z0Wlc1ME8xeHVYRzRnSUNBZ2RtRnlJSEJ5WlhacGIzVnpiSGxOYjNWdWRHbHVaeUE5SUZKbFlXTjBUR2xtWlVONVkyeGxMbU4xY25KbGJuUnNlVTF2ZFc1MGFXNW5TVzV6ZEdGdVkyVTdYRzRnSUNBZ1VtVmhZM1JNYVdabFEzbGpiR1V1WTNWeWNtVnVkR3g1VFc5MWJuUnBibWRKYm5OMFlXNWpaU0E5SUhSb2FYTTdYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJR2xtSUNocGJuTjBMbU52YlhCdmJtVnVkRmRwYkd4TmIzVnVkQ2tnZTF4dUlDQWdJQ0FnSUNCcGJuTjBMbU52YlhCdmJtVnVkRmRwYkd4TmIzVnVkQ2dwTzF4dUlDQWdJQ0FnSUNBdkx5QlhhR1Z1SUcxdmRXNTBhVzVuTENCallXeHNjeUIwYnlCZ2MyVjBVM1JoZEdWZ0lHSjVJR0JqYjIxd2IyNWxiblJYYVd4c1RXOTFiblJnSUhkcGJHd2djMlYwWEc0Z0lDQWdJQ0FnSUM4dklHQjBhR2x6TGw5d1pXNWthVzVuVTNSaGRHVlJkV1YxWldBZ2QybDBhRzkxZENCMGNtbG5aMlZ5YVc1bklHRWdjbVV0Y21WdVpHVnlMbHh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTVmY0dWdVpHbHVaMU4wWVhSbFVYVmxkV1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBibk4wTG5OMFlYUmxJRDBnZEdocGN5NWZjSEp2WTJWemMxQmxibVJwYm1kVGRHRjBaU2hwYm5OMExuQnliM0J6TENCcGJuTjBMbU52Ym5SbGVIUXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdOb2FXeGtRMjl1ZEdWNGRDQTlJSFJvYVhNdVgyZGxkRlpoYkdsa1lYUmxaRU5vYVd4a1EyOXVkR1Y0ZENoamIyNTBaWGgwS1R0Y2JpQWdJQ0FnSUhKbGJtUmxjbVZrUld4bGJXVnVkQ0E5SUhSb2FYTXVYM0psYm1SbGNsWmhiR2xrWVhSbFpFTnZiWEJ2Ym1WdWRDaGphR2xzWkVOdmJuUmxlSFFwTzF4dUlDQWdJSDBnWm1sdVlXeHNlU0I3WEc0Z0lDQWdJQ0JTWldGamRFeHBabVZEZVdOc1pTNWpkWEp5Wlc1MGJIbE5iM1Z1ZEdsdVowbHVjM1JoYm1ObElEMGdjSEpsZG1sdmRYTnNlVTF2ZFc1MGFXNW5PMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11WDNKbGJtUmxjbVZrUTI5dGNHOXVaVzUwSUQwZ2RHaHBjeTVmYVc1emRHRnVkR2xoZEdWU1pXRmpkRU52YlhCdmJtVnVkQ2hjYmlBZ0lDQWdJSEpsYm1SbGNtVmtSV3hsYldWdWRDeGNiaUFnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMblI1Y0dVZ0x5OGdWR2hsSUhkeVlYQndhVzVuSUhSNWNHVmNiaUFnSUNBcE8xeHVYRzRnSUNBZ2RtRnlJRzFoY210MWNDQTlJRkpsWVdOMFVtVmpiMjVqYVd4bGNpNXRiM1Z1ZEVOdmJYQnZibVZ1ZENoY2JpQWdJQ0FnSUhSb2FYTXVYM0psYm1SbGNtVmtRMjl0Y0c5dVpXNTBMRnh1SUNBZ0lDQWdjbTl2ZEVsRUxGeHVJQ0FnSUNBZ2RISmhibk5oWTNScGIyNHNYRzRnSUNBZ0lDQjBhR2x6TGw5dFpYSm5aVU5vYVd4a1EyOXVkR1Y0ZENoamIyNTBaWGgwTENCamFHbHNaRU52Ym5SbGVIUXBYRzRnSUNBZ0tUdGNiaUFnSUNCcFppQW9hVzV6ZEM1amIyMXdiMjVsYm5SRWFXUk5iM1Z1ZENrZ2UxeHVJQ0FnSUNBZ2RISmhibk5oWTNScGIyNHVaMlYwVW1WaFkzUk5iM1Z1ZEZKbFlXUjVLQ2t1Wlc1eGRXVjFaU2hwYm5OMExtTnZiWEJ2Ym1WdWRFUnBaRTF2ZFc1MExDQnBibk4wS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdiV0Z5YTNWd08xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWld4bFlYTmxjeUJoYm5rZ2NtVnpiM1Z5WTJWeklHRnNiRzlqWVhSbFpDQmllU0JnYlc5MWJuUkRiMjF3YjI1bGJuUmdMbHh1SUNBZ0tseHVJQ0FnS2lCQVptbHVZV3hjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0IxYm0xdmRXNTBRMjl0Y0c5dVpXNTBPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0IyWVhJZ2FXNXpkQ0E5SUhSb2FYTXVYMmx1YzNSaGJtTmxPMXh1WEc0Z0lDQWdhV1lnS0dsdWMzUXVZMjl0Y0c5dVpXNTBWMmxzYkZWdWJXOTFiblFwSUh0Y2JpQWdJQ0FnSUhaaGNpQndjbVYyYVc5MWMyeDVWVzV0YjNWdWRHbHVaeUE5SUZKbFlXTjBUR2xtWlVONVkyeGxMbU4xY25KbGJuUnNlVlZ1Ylc5MWJuUnBibWRKYm5OMFlXNWpaVHRjYmlBZ0lDQWdJRkpsWVdOMFRHbG1aVU41WTJ4bExtTjFjbkpsYm5Sc2VWVnViVzkxYm5ScGJtZEpibk4wWVc1alpTQTlJSFJvYVhNN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JwYm5OMExtTnZiWEJ2Ym1WdWRGZHBiR3hWYm0xdmRXNTBLQ2s3WEc0Z0lDQWdJQ0I5SUdacGJtRnNiSGtnZTF4dUlDQWdJQ0FnSUNCU1pXRmpkRXhwWm1WRGVXTnNaUzVqZFhKeVpXNTBiSGxWYm0xdmRXNTBhVzVuU1c1emRHRnVZMlVnUFNCd2NtVjJhVzkxYzJ4NVZXNXRiM1Z1ZEdsdVp6dGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCU1pXRmpkRkpsWTI5dVkybHNaWEl1ZFc1dGIzVnVkRU52YlhCdmJtVnVkQ2gwYUdsekxsOXlaVzVrWlhKbFpFTnZiWEJ2Ym1WdWRDazdYRzRnSUNBZ2RHaHBjeTVmY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFNCdWRXeHNPMXh1WEc0Z0lDQWdMeThnVW1WelpYUWdjR1Z1WkdsdVp5Qm1hV1ZzWkhOY2JpQWdJQ0IwYUdsekxsOXdaVzVrYVc1blUzUmhkR1ZSZFdWMVpTQTlJRzUxYkd3N1hHNGdJQ0FnZEdocGN5NWZjR1Z1WkdsdVoxSmxjR3hoWTJWVGRHRjBaU0E5SUdaaGJITmxPMXh1SUNBZ0lIUm9hWE11WDNCbGJtUnBibWRHYjNKalpWVndaR0YwWlNBOUlHWmhiSE5sTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kRFlXeHNZbUZqYTNNZ1BTQnVkV3hzTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kRmJHVnRaVzUwSUQwZ2JuVnNiRHRjYmx4dUlDQWdJQzh2SUZSb1pYTmxJR1pwWld4a2N5QmtieUJ1YjNRZ2NtVmhiR3g1SUc1bFpXUWdkRzhnWW1VZ2NtVnpaWFFnYzJsdVkyVWdkR2hwY3lCdlltcGxZM1FnYVhNZ2JtOWNiaUFnSUNBdkx5QnNiMjVuWlhJZ1lXTmpaWE56YVdKc1pTNWNiaUFnSUNCMGFHbHpMbDlqYjI1MFpYaDBJRDBnYm5Wc2JEdGNiaUFnSUNCMGFHbHpMbDl5YjI5MFRtOWtaVWxFSUQwZ2JuVnNiRHRjYmx4dUlDQWdJQzh2SUVSbGJHVjBaU0IwYUdVZ2NtVm1aWEpsYm1ObElHWnliMjBnZEdobElHbHVjM1JoYm1ObElIUnZJSFJvYVhNZ2FXNTBaWEp1WVd3Z2NtVndjbVZ6Wlc1MFlYUnBiMjVjYmlBZ0lDQXZMeUIzYUdsamFDQmhiR3h2ZHlCMGFHVWdhVzUwWlhKdVlXeHpJSFJ2SUdKbElIQnliM0JsY214NUlHTnNaV0Z1WldRZ2RYQWdaWFpsYmlCcFppQjBhR1VnZFhObGNseHVJQ0FnSUM4dklHeGxZV3R6SUdFZ2NtVm1aWEpsYm1ObElIUnZJSFJvWlNCd2RXSnNhV01nYVc1emRHRnVZMlV1WEc0Z0lDQWdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNXlaVzF2ZG1Vb2FXNXpkQ2s3WEc1Y2JpQWdJQ0F2THlCVGIyMWxJR1Y0YVhOMGFXNW5JR052YlhCdmJtVnVkSE1nY21Wc2VTQnZiaUJwYm5OMExuQnliM0J6SUdWMlpXNGdZV1owWlhJZ2RHaGxlU2QyWlNCaVpXVnVYRzRnSUNBZ0x5OGdaR1Z6ZEhKdmVXVmtJQ2hwYmlCbGRtVnVkQ0JvWVc1a2JHVnljeWt1WEc0Z0lDQWdMeThnVkU5RVR6b2dhVzV6ZEM1d2NtOXdjeUE5SUc1MWJHdzdYRzRnSUNBZ0x5OGdWRTlFVHpvZ2FXNXpkQzV6ZEdGMFpTQTlJRzUxYkd3N1hHNGdJQ0FnTHk4Z1ZFOUVUem9nYVc1emRDNWpiMjUwWlhoMElEMGdiblZzYkR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVMk5vWldSMWJHVWdZU0J3WVhKMGFXRnNJSFZ3WkdGMFpTQjBieUIwYUdVZ2NISnZjSE11SUU5dWJIa2dkWE5sWkNCbWIzSWdhVzUwWlhKdVlXd2dkR1Z6ZEdsdVp5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJoY25ScFlXeFFjbTl3Y3lCVGRXSnpaWFFnYjJZZ2RHaGxJRzVsZUhRZ2NISnZjSE11WEc0Z0lDQXFJRUJ3WVhKaGJTQjdQMloxYm1OMGFXOXVmU0JqWVd4c1ltRmpheUJEWVd4c1pXUWdZV1owWlhJZ2NISnZjSE1nWVhKbElIVndaR0YwWldRdVhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJRjl6WlhSUWNtOXdjMGx1ZEdWeWJtRnNPaUJtZFc1amRHbHZiaWh3WVhKMGFXRnNVSEp2Y0hNc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ0x5OGdWR2hwY3lCcGN5QmhJR1JsYjNCMGFXMXBlbVZrSUhCaGRHZ3VJRmRsSUc5d2RHbHRhWHBsSUdadmNpQmhiSGRoZVhNZ2FHRjJhVzVuSUdGdUlHVnNaVzFsYm5RdVhHNGdJQ0FnTHk4Z1ZHaHBjeUJqY21WaGRHVnpJR0Z1SUdWNGRISmhJR2x1ZEdWeWJtRnNJR1ZzWlcxbGJuUXVYRzRnSUNBZ2RtRnlJR1ZzWlcxbGJuUWdQU0IwYUdsekxsOXdaVzVrYVc1blJXeGxiV1Z1ZENCOGZDQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQjBhR2x6TGw5d1pXNWthVzVuUld4bGJXVnVkQ0E5SUZKbFlXTjBSV3hsYldWdWRDNWpiRzl1WlVGdVpGSmxjR3hoWTJWUWNtOXdjeWhjYmlBZ0lDQWdJR1ZzWlcxbGJuUXNYRzRnSUNBZ0lDQmhjM05wWjI0b2UzMHNJR1ZzWlcxbGJuUXVjSEp2Y0hNc0lIQmhjblJwWVd4UWNtOXdjeWxjYmlBZ0lDQXBPMXh1SUNBZ0lGSmxZV04wVlhCa1lYUmxjeTVsYm5GMVpYVmxWWEJrWVhSbEtIUm9hWE1zSUdOaGJHeGlZV05yS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSbWxzZEdWeWN5QjBhR1VnWTI5dWRHVjRkQ0J2WW1wbFkzUWdkRzhnYjI1c2VTQmpiMjUwWVdsdUlHdGxlWE1nYzNCbFkybG1hV1ZrSUdsdVhHNGdJQ0FxSUdCamIyNTBaWGgwVkhsd1pYTmdYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0JqYjI1MFpYaDBYRzRnSUNBcUlFQnlaWFIxY200Z2V6OXZZbXBsWTNSOVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFMMXh1SUNCZmJXRnphME52Ym5SbGVIUTZJR1oxYm1OMGFXOXVLR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnYldGemEyVmtRMjl1ZEdWNGRDQTlJRzUxYkd3N1hHNGdJQ0FnTHk4Z1ZHaHBjeUJ5WldGc2JIa2djMmh2ZFd4a0lHSmxJR2RsZEhScGJtY2dkR2hsSUdOdmJYQnZibVZ1ZENCamJHRnpjeUJtYjNJZ2RHaGxJR1ZzWlcxbGJuUXNYRzRnSUNBZ0x5OGdZblYwSUhkbElHdHViM2NnZEdoaGRDQjNaU2R5WlNCdWIzUWdaMjlwYm1jZ2RHOGdibVZsWkNCcGRDQm1iM0lnWW5WcGJIUXRhVzV6TGx4dUlDQWdJR2xtSUNoMGVYQmxiMllnZEdocGN5NWZZM1Z5Y21WdWRFVnNaVzFsYm5RdWRIbHdaU0E5UFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCbGJYQjBlVTlpYW1WamREdGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHTnZiblJsZUhSVWVYQmxjeUE5SUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuUjVjR1V1WTI5dWRHVjRkRlI1Y0dWek8xeHVJQ0FnSUdsbUlDZ2hZMjl1ZEdWNGRGUjVjR1Z6S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWlcxd2RIbFBZbXBsWTNRN1hHNGdJQ0FnZlZ4dUlDQWdJRzFoYzJ0bFpFTnZiblJsZUhRZ1BTQjdmVHRjYmlBZ0lDQm1iM0lnS0haaGNpQmpiMjUwWlhoMFRtRnRaU0JwYmlCamIyNTBaWGgwVkhsd1pYTXBJSHRjYmlBZ0lDQWdJRzFoYzJ0bFpFTnZiblJsZUhSYlkyOXVkR1Y0ZEU1aGJXVmRJRDBnWTI5dWRHVjRkRnRqYjI1MFpYaDBUbUZ0WlYwN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnRZWE5yWldSRGIyNTBaWGgwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkdhV3gwWlhKeklIUm9aU0JqYjI1MFpYaDBJRzlpYW1WamRDQjBieUJ2Ym14NUlHTnZiblJoYVc0Z2EyVjVjeUJ6Y0dWamFXWnBaV1FnYVc1Y2JpQWdJQ29nWUdOdmJuUmxlSFJVZVhCbGMyQXNJR0Z1WkNCaGMzTmxjblJ6SUhSb1lYUWdkR2hsZVNCaGNtVWdkbUZzYVdRdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQmpiMjUwWlhoMFhHNGdJQ0FxSUVCeVpYUjFjbTRnZXo5dlltcGxZM1I5WEc0Z0lDQXFJRUJ3Y21sMllYUmxYRzRnSUNBcUwxeHVJQ0JmY0hKdlkyVnpjME52Ym5SbGVIUTZJR1oxYm1OMGFXOXVLR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnYldGemEyVmtRMjl1ZEdWNGRDQTlJSFJvYVhNdVgyMWhjMnREYjI1MFpYaDBLR052Ym5SbGVIUXBPMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lIWmhjaUJEYjIxd2IyNWxiblFnUFNCU1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWRDNW5aWFJEYjIxd2IyNWxiblJEYkdGemMwWnZja1ZzWlcxbGJuUW9YRzRnSUNBZ0lDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJQ0FnYVdZZ0tFTnZiWEJ2Ym1WdWRDNWpiMjUwWlhoMFZIbHdaWE1wSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVmWTJobFkydFFjbTl3Vkhsd1pYTW9YRzRnSUNBZ0lDQWdJQ0FnUTI5dGNHOXVaVzUwTG1OdmJuUmxlSFJVZVhCbGN5eGNiaUFnSUNBZ0lDQWdJQ0J0WVhOclpXUkRiMjUwWlhoMExGeHVJQ0FnSUNBZ0lDQWdJRkpsWVdOMFVISnZjRlI1Y0dWTWIyTmhkR2x2Ym5NdVkyOXVkR1Y0ZEZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdiV0Z6YTJWa1EyOXVkR1Y0ZER0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHTjFjbkpsYm5SRGIyNTBaWGgwWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMjlpYW1WamRIMWNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ292WEc0Z0lGOW5aWFJXWVd4cFpHRjBaV1JEYUdsc1pFTnZiblJsZUhRNklHWjFibU4wYVc5dUtHTjFjbkpsYm5SRGIyNTBaWGgwS1NCN1hHNGdJQ0FnZG1GeUlHbHVjM1FnUFNCMGFHbHpMbDlwYm5OMFlXNWpaVHRjYmlBZ0lDQjJZWElnWTJocGJHUkRiMjUwWlhoMElEMGdhVzV6ZEM1blpYUkRhR2xzWkVOdmJuUmxlSFFnSmlZZ2FXNXpkQzVuWlhSRGFHbHNaRU52Ym5SbGVIUW9LVHRjYmlBZ0lDQnBaaUFvWTJocGJHUkRiMjUwWlhoMEtTQjdYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQjBlWEJsYjJZZ2FXNXpkQzVqYjI1emRISjFZM1J2Y2k1amFHbHNaRU52Ym5SbGVIUlVlWEJsY3lBOVBUMGdKMjlpYW1WamRDY3NYRzRnSUNBZ0lDQWdJQ2NsY3k1blpYUkRhR2xzWkVOdmJuUmxlSFFvS1RvZ1kyaHBiR1JEYjI1MFpYaDBWSGx3WlhNZ2JYVnpkQ0JpWlNCa1pXWnBibVZrSUdsdUlHOXlaR1Z5SUhSdklDY2dLMXh1SUNBZ0lDQWdJQ0FuZFhObElHZGxkRU5vYVd4a1EyOXVkR1Y0ZENncExpY3NYRzRnSUNBZ0lDQWdJSFJvYVhNdVoyVjBUbUZ0WlNncElIeDhJQ2RTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRDZGNiaUFnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvZEhsd1pXOW1JR2x1YzNRdVkyOXVjM1J5ZFdOMGIzSXVZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTWdQVDA5SUNkdlltcGxZM1FuS1NrN1hHNGdJQ0FnSUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOb1pXTnJVSEp2Y0ZSNWNHVnpLRnh1SUNBZ0lDQWdJQ0FnSUdsdWMzUXVZMjl1YzNSeWRXTjBiM0l1WTJocGJHUkRiMjUwWlhoMFZIbHdaWE1zWEc0Z0lDQWdJQ0FnSUNBZ1kyaHBiR1JEYjI1MFpYaDBMRnh1SUNBZ0lDQWdJQ0FnSUZKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJuTXVZMmhwYkdSRGIyNTBaWGgwWEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCbWIzSWdLSFpoY2lCdVlXMWxJR2x1SUdOb2FXeGtRMjl1ZEdWNGRDa2dlMXh1SUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJQ0FnSUc1aGJXVWdhVzRnYVc1emRDNWpiMjV6ZEhKMVkzUnZjaTVqYUdsc1pFTnZiblJsZUhSVWVYQmxjeXhjYmlBZ0lDQWdJQ0FnSUNBbkpYTXVaMlYwUTJocGJHUkRiMjUwWlhoMEtDazZJR3RsZVNCY0lpVnpYQ0lnYVhNZ2JtOTBJR1JsWm1sdVpXUWdhVzRnWTJocGJHUkRiMjUwWlhoMFZIbHdaWE11Snl4Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG1kbGRFNWhiV1VvS1NCOGZDQW5VbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5RbkxGeHVJQ0FnSUNBZ0lDQWdJRzVoYldWY2JpQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2h1WVcxbElHbHVJR2x1YzNRdVkyOXVjM1J5ZFdOMGIzSXVZMmhwYkdSRGIyNTBaWGgwVkhsd1pYTXBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQmphR2xzWkVOdmJuUmxlSFE3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdWRXeHNPMXh1SUNCOUxGeHVYRzRnSUY5dFpYSm5aVU5vYVd4a1EyOXVkR1Y0ZERvZ1puVnVZM1JwYjI0b1kzVnljbVZ1ZEVOdmJuUmxlSFFzSUdOb2FXeGtRMjl1ZEdWNGRDa2dlMXh1SUNBZ0lHbG1JQ2hqYUdsc1pFTnZiblJsZUhRcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCaGMzTnBaMjRvZTMwc0lHTjFjbkpsYm5SRGIyNTBaWGgwTENCamFHbHNaRU52Ym5SbGVIUXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWTNWeWNtVnVkRU52Ym5SbGVIUTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZCeWIyTmxjM05sY3lCd2NtOXdjeUJpZVNCelpYUjBhVzVuSUdSbFptRjFiSFFnZG1Gc2RXVnpJR1p2Y2lCMWJuTndaV05wWm1sbFpDQndjbTl3Y3lCaGJtUmNiaUFnSUNvZ1lYTnpaWEowYVc1bklIUm9ZWFFnZEdobElIQnliM0J6SUdGeVpTQjJZV3hwWkM0Z1JHOWxjeUJ1YjNRZ2JYVjBZWFJsSUdsMGN5QmhjbWQxYldWdWREc2djbVYwZFhKdWMxeHVJQ0FnS2lCaElHNWxkeUJ3Y205d2N5QnZZbXBsWTNRZ2QybDBhQ0JrWldaaGRXeDBjeUJ0WlhKblpXUWdhVzR1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCdVpYZFFjbTl3YzF4dUlDQWdLaUJBY21WMGRYSnVJSHR2WW1wbFkzUjlYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxTDF4dUlDQmZjSEp2WTJWemMxQnliM0J6T2lCbWRXNWpkR2x2YmlodVpYZFFjbTl3Y3lrZ2UxeHVJQ0FnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0FnSUhaaGNpQkRiMjF3YjI1bGJuUWdQU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEM1blpYUkRiMjF3YjI1bGJuUkRiR0Z6YzBadmNrVnNaVzFsYm5Rb1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdhV1lnS0VOdmJYQnZibVZ1ZEM1d2NtOXdWSGx3WlhNcElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1ZlkyaGxZMnRRY205d1ZIbHdaWE1vWEc0Z0lDQWdJQ0FnSUNBZ1EyOXRjRzl1Wlc1MExuQnliM0JVZVhCbGN5eGNiaUFnSUNBZ0lDQWdJQ0J1WlhkUWNtOXdjeXhjYmlBZ0lDQWdJQ0FnSUNCU1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNXpMbkJ5YjNCY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJRzVsZDFCeWIzQnpPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCQmMzTmxjblFnZEdoaGRDQjBhR1VnY0hKdmNITWdZWEpsSUhaaGJHbGtYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YjJKcVpXTjBmU0J3Y205d1ZIbHdaWE1nVFdGd0lHOW1JSEJ5YjNBZ2JtRnRaU0IwYnlCaElGSmxZV04wVUhKdmNGUjVjR1ZjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlIQnliM0J6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnNiMk5oZEdsdmJpQmxMbWN1SUZ3aWNISnZjRndpTENCY0ltTnZiblJsZUhSY0lpd2dYQ0pqYUdsc1pDQmpiMjUwWlhoMFhDSmNiaUFnSUNvZ1FIQnlhWFpoZEdWY2JpQWdJQ292WEc0Z0lGOWphR1ZqYTFCeWIzQlVlWEJsY3pvZ1puVnVZM1JwYjI0b2NISnZjRlI1Y0dWekxDQndjbTl3Y3l3Z2JHOWpZWFJwYjI0cElIdGNiaUFnSUNBdkx5QlVUMFJQT2lCVGRHOXdJSFpoYkdsa1lYUnBibWNnY0hKdmNDQjBlWEJsY3lCb1pYSmxJR0Z1WkNCdmJteDVJSFZ6WlNCMGFHVWdaV3hsYldWdWRGeHVJQ0FnSUM4dklIWmhiR2xrWVhScGIyNHVYRzRnSUNBZ2RtRnlJR052YlhCdmJtVnVkRTVoYldVZ1BTQjBhR2x6TG1kbGRFNWhiV1VvS1R0Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJ3Y205d1RtRnRaU0JwYmlCd2NtOXdWSGx3WlhNcElIdGNiaUFnSUNBZ0lHbG1JQ2h3Y205d1ZIbHdaWE11YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0U1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQmxjbkp2Y2p0Y2JpQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QlVhR2x6SUdseklHbHVkR1Z1ZEdsdmJtRnNiSGtnWVc0Z2FXNTJZWEpwWVc1MElIUm9ZWFFnWjJWMGN5QmpZWFZuYUhRdUlFbDBKM01nZEdobElITmhiV1ZjYmlBZ0lDQWdJQ0FnSUNBdkx5QmlaV2hoZG1sdmNpQmhjeUIzYVhSb2IzVjBJSFJvYVhNZ2MzUmhkR1Z0Wlc1MElHVjRZMlZ3ZENCM2FYUm9JR0VnWW1WMGRHVnlJRzFsYzNOaFoyVXVYRzRnSUNBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lIUjVjR1Z2WmlCd2NtOXdWSGx3WlhOYmNISnZjRTVoYldWZElEMDlQU0FuWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdKeVZ6T2lBbGN5QjBlWEJsSUdBbGMyQWdhWE1nYVc1MllXeHBaRHNnYVhRZ2JYVnpkQ0JpWlNCaElHWjFibU4wYVc5dUxDQjFjM1ZoYkd4NUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0oyWnliMjBnVW1WaFkzUXVVSEp2Y0ZSNWNHVnpMaWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjF3YjI1bGJuUk9ZVzFsSUh4OElDZFNaV0ZqZENCamJHRnpjeWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGMxdHNiMk5oZEdsdmJsMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCd2NtOXdUbUZ0WlZ4dUlDQWdJQ0FnSUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvZEhsd1pXOW1JSEJ5YjNCVWVYQmxjMXR3Y205d1RtRnRaVjBnUFQwOUlDZG1kVzVqZEdsdmJpY3BLVHRjYmlBZ0lDQWdJQ0FnSUNCbGNuSnZjaUE5SUhCeWIzQlVlWEJsYzF0d2NtOXdUbUZ0WlYwb2NISnZjSE1zSUhCeWIzQk9ZVzFsTENCamIyMXdiMjVsYm5ST1lXMWxMQ0JzYjJOaGRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dWNEtTQjdYRzRnSUNBZ0lDQWdJQ0FnWlhKeWIzSWdQU0JsZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnBaaUFvWlhKeWIzSWdhVzV6ZEdGdVkyVnZaaUJGY25KdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dklGZGxJRzFoZVNCM1lXNTBJSFJ2SUdWNGRHVnVaQ0IwYUdseklHeHZaMmxqSUdadmNpQnphVzFwYkdGeUlHVnljbTl5Y3lCcGJseHVJQ0FnSUNBZ0lDQWdJQzh2SUZKbFlXTjBMbkpsYm1SbGNpQmpZV3hzY3l3Z2MyOGdTU2R0SUdGaWMzUnlZV04wYVc1bklHbDBJR0YzWVhrZ2FXNTBiMXh1SUNBZ0lDQWdJQ0FnSUM4dklHRWdablZ1WTNScGIyNGdkRzhnYldsdWFXMXBlbVVnY21WbVlXTjBiM0pwYm1jZ2FXNGdkR2hsSUdaMWRIVnlaVnh1SUNBZ0lDQWdJQ0FnSUhaaGNpQmhaR1JsYm1SMWJTQTlJR2RsZEVSbFkyeGhjbUYwYVc5dVJYSnliM0pCWkdSbGJtUjFiU2gwYUdsektUdGNibHh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHNiMk5oZEdsdmJpQTlQVDBnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWN5NXdjbTl3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCUWNtVm1ZV05sSUdkcGRtVnpJSFZ6SUhOdmJXVjBhR2x1WnlCMGJ5QmliR0ZqYTJ4cGMzUWdhVzRnZDJGeWJtbHVaeUJ0YjJSMWJHVmNiaUFnSUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSjBaaGFXeGxaQ0JEYjIxd2IzTnBkR1VnY0hKdmNGUjVjR1U2SUNWekpYTW5MRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmxjbkp2Y2k1dFpYTnpZV2RsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JoWkdSbGJtUjFiVnh1SUNBZ0lDQWdJQ0FnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNkR1lXbHNaV1FnUTI5dWRHVjRkQ0JVZVhCbGN6b2dKWE1sY3ljc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdWeWNtOXlMbTFsYzNOaFoyVXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHRmtaR1Z1WkhWdFhHNGdJQ0FnSUNBZ0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJSEpsWTJWcGRtVkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLRzVsZUhSRmJHVnRaVzUwTENCMGNtRnVjMkZqZEdsdmJpd2dibVY0ZEVOdmJuUmxlSFFwSUh0Y2JpQWdJQ0IyWVhJZ2NISmxka1ZzWlcxbGJuUWdQU0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZER0Y2JpQWdJQ0IyWVhJZ2NISmxka052Ym5SbGVIUWdQU0IwYUdsekxsOWpiMjUwWlhoME8xeHVYRzRnSUNBZ2RHaHBjeTVmY0dWdVpHbHVaMFZzWlcxbGJuUWdQU0J1ZFd4c08xeHVYRzRnSUNBZ2RHaHBjeTUxY0dSaGRHVkRiMjF3YjI1bGJuUW9YRzRnSUNBZ0lDQjBjbUZ1YzJGamRHbHZiaXhjYmlBZ0lDQWdJSEJ5WlhaRmJHVnRaVzUwTEZ4dUlDQWdJQ0FnYm1WNGRFVnNaVzFsYm5Rc1hHNGdJQ0FnSUNCd2NtVjJRMjl1ZEdWNGRDeGNiaUFnSUNBZ0lHNWxlSFJEYjI1MFpYaDBYRzRnSUNBZ0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nU1dZZ1lXNTVJRzltSUdCZmNHVnVaR2x1WjBWc1pXMWxiblJnTENCZ1gzQmxibVJwYm1kVGRHRjBaVkYxWlhWbFlDd2diM0lnWUY5d1pXNWthVzVuUm05eVkyVlZjR1JoZEdWZ1hHNGdJQ0FxSUdseklITmxkQ3dnZFhCa1lYUmxJSFJvWlNCamIyMXdiMjVsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJuMGdkSEpoYm5OaFkzUnBiMjVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0J3WlhKbWIzSnRWWEJrWVhSbFNXWk9aV05sYzNOaGNuazZJR1oxYm1OMGFXOXVLSFJ5WVc1ellXTjBhVzl1S1NCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WDNCbGJtUnBibWRGYkdWdFpXNTBJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJRkpsWVdOMFVtVmpiMjVqYVd4bGNpNXlaV05sYVhabFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUNBZ0lDQjBhR2x6TEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbDl3Wlc1a2FXNW5SV3hsYldWdWRDQjhmQ0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZEN4Y2JpQWdJQ0FnSUNBZ2RISmhibk5oWTNScGIyNHNYRzRnSUNBZ0lDQWdJSFJvYVhNdVgyTnZiblJsZUhSY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11WDNCbGJtUnBibWRUZEdGMFpWRjFaWFZsSUNFOVBTQnVkV3hzSUh4OElIUm9hWE11WDNCbGJtUnBibWRHYjNKalpWVndaR0YwWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0lDQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0l1WTJobFkydEJibVJYWVhKdVJtOXlUWFYwWVhSbFpGQnliM0J6S0Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhSb2FYTXVkWEJrWVhSbFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUNBZ0lDQjBjbUZ1YzJGamRHbHZiaXhjYmlBZ0lDQWdJQ0FnZEdocGN5NWZZM1Z5Y21WdWRFVnNaVzFsYm5Rc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxsOWpiMjUwWlhoMExGeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5amIyNTBaWGgwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1EyOXRjR0Z5WlNCMGQyOGdZMjl1ZEdWNGRITXNJSGRoY201cGJtY2dhV1lnZEdobGVTQmhjbVVnWkdsbVptVnlaVzUwWEc0Z0lDQXFJRlJQUkU4NklGSmxiVzkyWlNCMGFHbHpJR05vWldOcklIZG9aVzRnYjNkdVpYSXRZMjl1ZEdWNGRDQnBjeUJ5WlcxdmRtVmtYRzRnSUNBcUwxeHVJQ0FnWDNkaGNtNUpaa052Ym5SbGVIUnpSR2xtWm1WeU9pQm1kVzVqZEdsdmJpaHZkMjVsY2tKaGMyVmtRMjl1ZEdWNGRDd2djR0Z5Wlc1MFFtRnpaV1JEYjI1MFpYaDBLU0I3WEc0Z0lDQWdiM2R1WlhKQ1lYTmxaRU52Ym5SbGVIUWdQU0IwYUdsekxsOXRZWE5yUTI5dWRHVjRkQ2h2ZDI1bGNrSmhjMlZrUTI5dWRHVjRkQ2s3WEc0Z0lDQWdjR0Z5Wlc1MFFtRnpaV1JEYjI1MFpYaDBJRDBnZEdocGN5NWZiV0Z6YTBOdmJuUmxlSFFvY0dGeVpXNTBRbUZ6WldSRGIyNTBaWGgwS1R0Y2JpQWdJQ0IyWVhJZ2NHRnlaVzUwUzJWNWN5QTlJRTlpYW1WamRDNXJaWGx6S0hCaGNtVnVkRUpoYzJWa1EyOXVkR1Y0ZENrdWMyOXlkQ2dwTzF4dUlDQWdJSFpoY2lCa2FYTndiR0Y1VG1GdFpTQTlJSFJvYVhNdVoyVjBUbUZ0WlNncElIeDhJQ2RTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRDYzdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQndZWEpsYm5STFpYbHpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCMllYSWdhMlY1SUQwZ2NHRnlaVzUwUzJWNWMxdHBYVHRjYmlBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQnZkMjVsY2tKaGMyVmtRMjl1ZEdWNGRGdHJaWGxkSUQwOVBTQndZWEpsYm5SQ1lYTmxaRU52Ym5SbGVIUmJhMlY1WFN4Y2JpQWdJQ0FnSUNBZ0oyOTNibVZ5TFdKaGMyVmtJR0Z1WkNCd1lYSmxiblF0WW1GelpXUWdZMjl1ZEdWNGRITWdaR2xtWm1WeUlDY2dJQ3RjYmlBZ0lDQWdJQ0FnSnloMllXeDFaWE02SUdBbGMyQWdkbk1nWUNWellDa2dabTl5SUd0bGVTQW9KWE1wSUhkb2FXeGxJRzF2ZFc1MGFXNW5JQ1Z6SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5LSE5sWlRvZ2FIUjBjRG92TDJaaUxtMWxMM0psWVdOMExXTnZiblJsZUhRdFlua3RjR0Z5Wlc1MEtTY3NYRzRnSUNBZ0lDQWdJRzkzYm1WeVFtRnpaV1JEYjI1MFpYaDBXMnRsZVYwc1hHNGdJQ0FnSUNBZ0lIQmhjbVZ1ZEVKaGMyVmtRMjl1ZEdWNGRGdHJaWGxkTEZ4dUlDQWdJQ0FnSUNCclpYa3NYRzRnSUNBZ0lDQWdJR1JwYzNCc1lYbE9ZVzFsWEc0Z0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCUVpYSm1iM0p0SUdGdUlIVndaR0YwWlNCMGJ5QmhJRzF2ZFc1MFpXUWdZMjl0Y0c5dVpXNTBMaUJVYUdVZ1kyOXRjRzl1Wlc1MFYybHNiRkpsWTJWcGRtVlFjbTl3Y3lCaGJtUmNiaUFnSUNvZ2MyaHZkV3hrUTI5dGNHOXVaVzUwVlhCa1lYUmxJRzFsZEdodlpITWdZWEpsSUdOaGJHeGxaQ3dnZEdobGJpQW9ZWE56ZFcxcGJtY2dkR2hsSUhWd1pHRjBaU0JwYzI0bmRGeHVJQ0FnS2lCemEybHdjR1ZrS1NCMGFHVWdjbVZ0WVdsdWFXNW5JSFZ3WkdGMFpTQnNhV1psWTNsamJHVWdiV1YwYUc5a2N5QmhjbVVnWTJGc2JHVmtJR0Z1WkNCMGFHVWdSRTlOWEc0Z0lDQXFJSEpsY0hKbGMyVnVkR0YwYVc5dUlHbHpJSFZ3WkdGMFpXUXVYRzRnSUNBcVhHNGdJQ0FxSUVKNUlHUmxabUYxYkhRc0lIUm9hWE1nYVcxd2JHVnRaVzUwY3lCU1pXRmpkQ2R6SUhKbGJtUmxjbWx1WnlCaGJtUWdjbVZqYjI1amFXeHBZWFJwYjI0Z1lXeG5iM0pwZEdodExseHVJQ0FnS2lCVGIzQm9hWE4wYVdOaGRHVmtJR05zYVdWdWRITWdiV0Y1SUhkcGMyZ2dkRzhnYjNabGNuSnBaR1VnZEdocGN5NWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVmU0IwY21GdWMyRmpkR2x2Ymx4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ2NISmxkbEJoY21WdWRFVnNaVzFsYm5SY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHNWxlSFJRWVhKbGJuUkZiR1Z0Wlc1MFhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaUJBYjNabGNuSnBaR0ZpYkdWY2JpQWdJQ292WEc0Z0lIVndaR0YwWlVOdmJYQnZibVZ1ZERvZ1puVnVZM1JwYjI0b1hHNGdJQ0FnZEhKaGJuTmhZM1JwYjI0c1hHNGdJQ0FnY0hKbGRsQmhjbVZ1ZEVWc1pXMWxiblFzWEc0Z0lDQWdibVY0ZEZCaGNtVnVkRVZzWlcxbGJuUXNYRzRnSUNBZ2NISmxkbFZ1YldGemEyVmtRMjl1ZEdWNGRDeGNiaUFnSUNCdVpYaDBWVzV0WVhOclpXUkRiMjUwWlhoMFhHNGdJQ2tnZTF4dUlDQWdJSFpoY2lCcGJuTjBJRDBnZEdocGN5NWZhVzV6ZEdGdVkyVTdYRzVjYmlBZ0lDQjJZWElnYm1WNGRFTnZiblJsZUhRZ1BTQnBibk4wTG1OdmJuUmxlSFE3WEc0Z0lDQWdkbUZ5SUc1bGVIUlFjbTl3Y3lBOUlHbHVjM1F1Y0hKdmNITTdYRzVjYmlBZ0lDQXZMeUJFYVhOMGFXNW5kV2x6YUNCaVpYUjNaV1Z1SUdFZ2NISnZjSE1nZFhCa1lYUmxJSFpsY25OMWN5QmhJSE5wYlhCc1pTQnpkR0YwWlNCMWNHUmhkR1ZjYmlBZ0lDQnBaaUFvY0hKbGRsQmhjbVZ1ZEVWc1pXMWxiblFnSVQwOUlHNWxlSFJRWVhKbGJuUkZiR1Z0Wlc1MEtTQjdYRzRnSUNBZ0lDQnVaWGgwUTI5dWRHVjRkQ0E5SUhSb2FYTXVYM0J5YjJObGMzTkRiMjUwWlhoMEtHNWxlSFJRWVhKbGJuUkZiR1Z0Wlc1MExsOWpiMjUwWlhoMEtUdGNiaUFnSUNBZ0lHNWxlSFJRY205d2N5QTlJSFJvYVhNdVgzQnliMk5sYzNOUWNtOXdjeWh1WlhoMFVHRnlaVzUwUld4bGJXVnVkQzV3Y205d2N5azdYRzVjYmlBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHNWxlSFJWYm0xaGMydGxaRU52Ym5SbGVIUWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM2RoY201SlprTnZiblJsZUhSelJHbG1abVZ5S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdibVY0ZEZCaGNtVnVkRVZzWlcxbGJuUXVYMk52Ym5SbGVIUXNYRzRnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBWVzV0WVhOclpXUkRiMjUwWlhoMFhHNGdJQ0FnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QkJiaUIxY0dSaGRHVWdhR1Z5WlNCM2FXeHNJSE5qYUdWa2RXeGxJR0Z1SUhWd1pHRjBaU0JpZFhRZ2FXMXRaV1JwWVhSbGJIa2djMlYwWEc0Z0lDQWdJQ0F2THlCZmNHVnVaR2x1WjFOMFlYUmxVWFZsZFdVZ2QyaHBZMmdnZDJsc2JDQmxibk4xY21VZ2RHaGhkQ0JoYm5rZ2MzUmhkR1VnZFhCa1lYUmxjeUJuWlhSelhHNGdJQ0FnSUNBdkx5QnBiVzFsWkdsaGRHVnNlU0J5WldOdmJtTnBiR1ZrSUdsdWMzUmxZV1FnYjJZZ2QyRnBkR2x1WnlCbWIzSWdkR2hsSUc1bGVIUWdZbUYwWTJndVhHNWNiaUFnSUNBZ0lHbG1JQ2hwYm5OMExtTnZiWEJ2Ym1WdWRGZHBiR3hTWldObGFYWmxVSEp2Y0hNcElIdGNiaUFnSUNBZ0lDQWdhVzV6ZEM1amIyMXdiMjVsYm5SWGFXeHNVbVZqWldsMlpWQnliM0J6S0c1bGVIUlFjbTl3Y3l3Z2JtVjRkRU52Ym5SbGVIUXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJ1WlhoMFUzUmhkR1VnUFNCMGFHbHpMbDl3Y205alpYTnpVR1Z1WkdsdVoxTjBZWFJsS0c1bGVIUlFjbTl3Y3l3Z2JtVjRkRU52Ym5SbGVIUXBPMXh1WEc0Z0lDQWdkbUZ5SUhOb2IzVnNaRlZ3WkdGMFpTQTlYRzRnSUNBZ0lDQjBhR2x6TGw5d1pXNWthVzVuUm05eVkyVlZjR1JoZEdVZ2ZIeGNiaUFnSUNBZ0lDRnBibk4wTG5Ob2IzVnNaRU52YlhCdmJtVnVkRlZ3WkdGMFpTQjhmRnh1SUNBZ0lDQWdhVzV6ZEM1emFHOTFiR1JEYjIxd2IyNWxiblJWY0dSaGRHVW9ibVY0ZEZCeWIzQnpMQ0J1WlhoMFUzUmhkR1VzSUc1bGVIUkRiMjUwWlhoMEtUdGNibHh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNCMGVYQmxiMllnYzJodmRXeGtWWEJrWVhSbElDRTlQU0FuZFc1a1pXWnBibVZrSnl4Y2JpQWdJQ0FnSUNBZ0p5VnpMbk5vYjNWc1pFTnZiWEJ2Ym1WdWRGVndaR0YwWlNncE9pQlNaWFIxY201bFpDQjFibVJsWm1sdVpXUWdhVzV6ZEdWaFpDQnZaaUJoSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5ZbTl2YkdWaGJpQjJZV3gxWlM0Z1RXRnJaU0J6ZFhKbElIUnZJSEpsZEhWeWJpQjBjblZsSUc5eUlHWmhiSE5sTGljc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WjJWMFRtRnRaU2dwSUh4OElDZFNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZENkY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2MyaHZkV3hrVlhCa1lYUmxLU0I3WEc0Z0lDQWdJQ0IwYUdsekxsOXdaVzVrYVc1blJtOXlZMlZWY0dSaGRHVWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDOHZJRmRwYkd3Z2MyVjBJR0IwYUdsekxuQnliM0J6WUN3Z1lIUm9hWE11YzNSaGRHVmdJR0Z1WkNCZ2RHaHBjeTVqYjI1MFpYaDBZQzVjYmlBZ0lDQWdJSFJvYVhNdVgzQmxjbVp2Y20xRGIyMXdiMjVsYm5SVmNHUmhkR1VvWEc0Z0lDQWdJQ0FnSUc1bGVIUlFZWEpsYm5SRmJHVnRaVzUwTEZ4dUlDQWdJQ0FnSUNCdVpYaDBVSEp2Y0hNc1hHNGdJQ0FnSUNBZ0lHNWxlSFJUZEdGMFpTeGNiaUFnSUNBZ0lDQWdibVY0ZEVOdmJuUmxlSFFzWEc0Z0lDQWdJQ0FnSUhSeVlXNXpZV04wYVc5dUxGeHVJQ0FnSUNBZ0lDQnVaWGgwVlc1dFlYTnJaV1JEYjI1MFpYaDBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QkpaaUJwZENkeklHUmxkR1Z5YldsdVpXUWdkR2hoZENCaElHTnZiWEJ2Ym1WdWRDQnphRzkxYkdRZ2JtOTBJSFZ3WkdGMFpTd2dkMlVnYzNScGJHd2dkMkZ1ZEZ4dUlDQWdJQ0FnTHk4Z2RHOGdjMlYwSUhCeWIzQnpJR0Z1WkNCemRHRjBaU0JpZFhRZ2QyVWdjMmh2Y25SamRYUWdkR2hsSUhKbGMzUWdiMllnZEdobElIVndaR0YwWlM1Y2JpQWdJQ0FnSUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MElEMGdibVY0ZEZCaGNtVnVkRVZzWlcxbGJuUTdYRzRnSUNBZ0lDQjBhR2x6TGw5amIyNTBaWGgwSUQwZ2JtVjRkRlZ1YldGemEyVmtRMjl1ZEdWNGREdGNiaUFnSUNBZ0lHbHVjM1F1Y0hKdmNITWdQU0J1WlhoMFVISnZjSE03WEc0Z0lDQWdJQ0JwYm5OMExuTjBZWFJsSUQwZ2JtVjRkRk4wWVhSbE8xeHVJQ0FnSUNBZ2FXNXpkQzVqYjI1MFpYaDBJRDBnYm1WNGRFTnZiblJsZUhRN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lGOXdjbTlqWlhOelVHVnVaR2x1WjFOMFlYUmxPaUJtZFc1amRHbHZiaWh3Y205d2N5d2dZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMElEMGdkR2hwY3k1ZmFXNXpkR0Z1WTJVN1hHNGdJQ0FnZG1GeUlIRjFaWFZsSUQwZ2RHaHBjeTVmY0dWdVpHbHVaMU4wWVhSbFVYVmxkV1U3WEc0Z0lDQWdkbUZ5SUhKbGNHeGhZMlVnUFNCMGFHbHpMbDl3Wlc1a2FXNW5VbVZ3YkdGalpWTjBZWFJsTzF4dUlDQWdJSFJvYVhNdVgzQmxibVJwYm1kU1pYQnNZV05sVTNSaGRHVWdQU0JtWVd4elpUdGNiaUFnSUNCMGFHbHpMbDl3Wlc1a2FXNW5VM1JoZEdWUmRXVjFaU0E5SUc1MWJHdzdYRzVjYmlBZ0lDQnBaaUFvSVhGMVpYVmxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhVzV6ZEM1emRHRjBaVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvY21Wd2JHRmpaU0FtSmlCeGRXVjFaUzVzWlc1bmRHZ2dQVDA5SURFcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCeGRXVjFaVnN3WFR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IyWVhJZ2JtVjRkRk4wWVhSbElEMGdZWE56YVdkdUtIdDlMQ0J5WlhCc1lXTmxJRDhnY1hWbGRXVmJNRjBnT2lCcGJuTjBMbk4wWVhSbEtUdGNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdjbVZ3YkdGalpTQS9JREVnT2lBd095QnBJRHdnY1hWbGRXVXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUhaaGNpQndZWEowYVdGc0lEMGdjWFZsZFdWYmFWMDdYRzRnSUNBZ0lDQmhjM05wWjI0b1hHNGdJQ0FnSUNBZ0lHNWxlSFJUZEdGMFpTeGNiaUFnSUNBZ0lDQWdkSGx3Wlc5bUlIQmhjblJwWVd3Z1BUMDlJQ2RtZFc1amRHbHZiaWNnUDF4dUlDQWdJQ0FnSUNBZ0lIQmhjblJwWVd3dVkyRnNiQ2hwYm5OMExDQnVaWGgwVTNSaGRHVXNJSEJ5YjNCekxDQmpiMjUwWlhoMEtTQTZYRzRnSUNBZ0lDQWdJQ0FnY0dGeWRHbGhiRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2JtVjRkRk4wWVhSbE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJOWlhKblpYTWdibVYzSUhCeWIzQnpJR0Z1WkNCemRHRjBaU3dnYm05MGFXWnBaWE1nWkdWc1pXZGhkR1VnYldWMGFHOWtjeUJ2WmlCMWNHUmhkR1VnWVc1a1hHNGdJQ0FxSUhCbGNtWnZjbTF6SUhWd1pHRjBaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJRzVsZUhSRmJHVnRaVzUwSUU1bGVIUWdaV3hsYldWdWRGeHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnYm1WNGRGQnliM0J6SUU1bGVIUWdjSFZpYkdsaklHOWlhbVZqZENCMGJ5QnpaWFFnWVhNZ2NISnZjR1Z5ZEdsbGN5NWNiaUFnSUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCdVpYaDBVM1JoZEdVZ1RtVjRkQ0J2WW1wbFkzUWdkRzhnYzJWMElHRnpJSE4wWVhSbExseHVJQ0FnS2lCQWNHRnlZVzBnZXo5dlltcGxZM1I5SUc1bGVIUkRiMjUwWlhoMElFNWxlSFFnY0hWaWJHbGpJRzlpYW1WamRDQjBieUJ6WlhRZ1lYTWdZMjl1ZEdWNGRDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1ZlNCMGNtRnVjMkZqZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnZXo5dlltcGxZM1I5SUhWdWJXRnphMlZrUTI5dWRHVjRkRnh1SUNBZ0tpQkFjSEpwZG1GMFpWeHVJQ0FnS2k5Y2JpQWdYM0JsY21admNtMURiMjF3YjI1bGJuUlZjR1JoZEdVNklHWjFibU4wYVc5dUtGeHVJQ0FnSUc1bGVIUkZiR1Z0Wlc1MExGeHVJQ0FnSUc1bGVIUlFjbTl3Y3l4Y2JpQWdJQ0J1WlhoMFUzUmhkR1VzWEc0Z0lDQWdibVY0ZEVOdmJuUmxlSFFzWEc0Z0lDQWdkSEpoYm5OaFkzUnBiMjRzWEc0Z0lDQWdkVzV0WVhOclpXUkRiMjUwWlhoMFhHNGdJQ2tnZTF4dUlDQWdJSFpoY2lCcGJuTjBJRDBnZEdocGN5NWZhVzV6ZEdGdVkyVTdYRzVjYmlBZ0lDQjJZWElnY0hKbGRsQnliM0J6SUQwZ2FXNXpkQzV3Y205d2N6dGNiaUFnSUNCMllYSWdjSEpsZGxOMFlYUmxJRDBnYVc1emRDNXpkR0YwWlR0Y2JpQWdJQ0IyWVhJZ2NISmxka052Ym5SbGVIUWdQU0JwYm5OMExtTnZiblJsZUhRN1hHNWNiaUFnSUNCcFppQW9hVzV6ZEM1amIyMXdiMjVsYm5SWGFXeHNWWEJrWVhSbEtTQjdYRzRnSUNBZ0lDQnBibk4wTG1OdmJYQnZibVZ1ZEZkcGJHeFZjR1JoZEdVb2JtVjRkRkJ5YjNCekxDQnVaWGgwVTNSaGRHVXNJRzVsZUhSRGIyNTBaWGgwS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZENBOUlHNWxlSFJGYkdWdFpXNTBPMXh1SUNBZ0lIUm9hWE11WDJOdmJuUmxlSFFnUFNCMWJtMWhjMnRsWkVOdmJuUmxlSFE3WEc0Z0lDQWdhVzV6ZEM1d2NtOXdjeUE5SUc1bGVIUlFjbTl3Y3p0Y2JpQWdJQ0JwYm5OMExuTjBZWFJsSUQwZ2JtVjRkRk4wWVhSbE8xeHVJQ0FnSUdsdWMzUXVZMjl1ZEdWNGRDQTlJRzVsZUhSRGIyNTBaWGgwTzF4dVhHNGdJQ0FnZEdocGN5NWZkWEJrWVhSbFVtVnVaR1Z5WldSRGIyMXdiMjVsYm5Rb2RISmhibk5oWTNScGIyNHNJSFZ1YldGemEyVmtRMjl1ZEdWNGRDazdYRzVjYmlBZ0lDQnBaaUFvYVc1emRDNWpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVXBJSHRjYmlBZ0lDQWdJSFJ5WVc1ellXTjBhVzl1TG1kbGRGSmxZV04wVFc5MWJuUlNaV0ZrZVNncExtVnVjWFZsZFdVb1hHNGdJQ0FnSUNBZ0lHbHVjM1F1WTI5dGNHOXVaVzUwUkdsa1ZYQmtZWFJsTG1KcGJtUW9hVzV6ZEN3Z2NISmxkbEJ5YjNCekxDQndjbVYyVTNSaGRHVXNJSEJ5WlhaRGIyNTBaWGgwS1N4Y2JpQWdJQ0FnSUNBZ2FXNXpkRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOaGJHd2dkR2hsSUdOdmJYQnZibVZ1ZENkeklHQnlaVzVrWlhKZ0lHMWxkR2h2WkNCaGJtUWdkWEJrWVhSbElIUm9aU0JFVDAwZ1lXTmpiM0prYVc1bmJIa3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCZmRYQmtZWFJsVW1WdVpHVnlaV1JEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0hSeVlXNXpZV04wYVc5dUxDQmpiMjUwWlhoMEtTQjdYRzRnSUNBZ2RtRnlJSEJ5WlhaRGIyMXdiMjVsYm5SSmJuTjBZVzVqWlNBOUlIUm9hWE11WDNKbGJtUmxjbVZrUTI5dGNHOXVaVzUwTzF4dUlDQWdJSFpoY2lCd2NtVjJVbVZ1WkdWeVpXUkZiR1Z0Wlc1MElEMGdjSEpsZGtOdmJYQnZibVZ1ZEVsdWMzUmhibU5sTGw5amRYSnlaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQjJZWElnWTJocGJHUkRiMjUwWlhoMElEMGdkR2hwY3k1ZloyVjBWbUZzYVdSaGRHVmtRMmhwYkdSRGIyNTBaWGgwS0NrN1hHNGdJQ0FnZG1GeUlHNWxlSFJTWlc1a1pYSmxaRVZzWlcxbGJuUWdQU0IwYUdsekxsOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5Rb1kyaHBiR1JEYjI1MFpYaDBLVHRjYmlBZ0lDQnBaaUFvYzJodmRXeGtWWEJrWVhSbFVtVmhZM1JEYjIxd2IyNWxiblFvY0hKbGRsSmxibVJsY21Wa1JXeGxiV1Z1ZEN3Z2JtVjRkRkpsYm1SbGNtVmtSV3hsYldWdWRDa3BJSHRjYmlBZ0lDQWdJRkpsWVdOMFVtVmpiMjVqYVd4bGNpNXlaV05sYVhabFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUNBZ0lDQndjbVYyUTI5dGNHOXVaVzUwU1c1emRHRnVZMlVzWEc0Z0lDQWdJQ0FnSUc1bGVIUlNaVzVrWlhKbFpFVnNaVzFsYm5Rc1hHNGdJQ0FnSUNBZ0lIUnlZVzV6WVdOMGFXOXVMRnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXRaWEpuWlVOb2FXeGtRMjl1ZEdWNGRDaGpiMjUwWlhoMExDQmphR2xzWkVOdmJuUmxlSFFwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQXZMeUJVYUdWelpTQjBkMjhnU1VSeklHRnlaU0JoWTNSMVlXeHNlU0IwYUdVZ2MyRnRaU0VnUW5WMElHNXZkR2hwYm1jZ2MyaHZkV3hrSUhKbGJIa2diMjRnZEdoaGRDNWNiaUFnSUNBZ0lIWmhjaUIwYUdselNVUWdQU0IwYUdsekxsOXliMjkwVG05a1pVbEVPMXh1SUNBZ0lDQWdkbUZ5SUhCeVpYWkRiMjF3YjI1bGJuUkpSQ0E5SUhCeVpYWkRiMjF3YjI1bGJuUkpibk4wWVc1alpTNWZjbTl2ZEU1dlpHVkpSRHRjYmlBZ0lDQWdJRkpsWVdOMFVtVmpiMjVqYVd4bGNpNTFibTF2ZFc1MFEyOXRjRzl1Wlc1MEtIQnlaWFpEYjIxd2IyNWxiblJKYm5OMFlXNWpaU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVYM0psYm1SbGNtVmtRMjl0Y0c5dVpXNTBJRDBnZEdocGN5NWZhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDaGNiaUFnSUNBZ0lDQWdibVY0ZEZKbGJtUmxjbVZrUld4bGJXVnVkQ3hjYmlBZ0lDQWdJQ0FnZEdocGN5NWZZM1Z5Y21WdWRFVnNaVzFsYm5RdWRIbHdaVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSFpoY2lCdVpYaDBUV0Z5YTNWd0lEMGdVbVZoWTNSU1pXTnZibU5wYkdWeUxtMXZkVzUwUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNCMGFHbHpMbDl5Wlc1a1pYSmxaRU52YlhCdmJtVnVkQ3hjYmlBZ0lDQWdJQ0FnZEdocGMwbEVMRnh1SUNBZ0lDQWdJQ0IwY21GdWMyRmpkR2x2Yml4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVmYldWeVoyVkRhR2xzWkVOdmJuUmxlSFFvWTI5dWRHVjRkQ3dnWTJocGJHUkRiMjUwWlhoMEtWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIUm9hWE11WDNKbGNHeGhZMlZPYjJSbFYybDBhRTFoY210MWNFSjVTVVFvY0hKbGRrTnZiWEJ2Ym1WdWRFbEVMQ0J1WlhoMFRXRnlhM1Z3S1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQndjbTkwWldOMFpXUmNiaUFnSUNvdlhHNGdJRjl5WlhCc1lXTmxUbTlrWlZkcGRHaE5ZWEpyZFhCQ2VVbEVPaUJtZFc1amRHbHZiaWh3Y21WMlEyOXRjRzl1Wlc1MFNVUXNJRzVsZUhSTllYSnJkWEFwSUh0Y2JpQWdJQ0JTWldGamRFTnZiWEJ2Ym1WdWRFVnVkbWx5YjI1dFpXNTBMbkpsY0d4aFkyVk9iMlJsVjJsMGFFMWhjbXQxY0VKNVNVUW9YRzRnSUNBZ0lDQndjbVYyUTI5dGNHOXVaVzUwU1VRc1hHNGdJQ0FnSUNCdVpYaDBUV0Z5YTNWd1hHNGdJQ0FnS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJ5YjNSbFkzUmxaRnh1SUNBZ0tpOWNiaUFnWDNKbGJtUmxjbFpoYkdsa1lYUmxaRU52YlhCdmJtVnVkRmRwZEdodmRYUlBkMjVsY2s5eVEyOXVkR1Y0ZERvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2RtRnlJR2x1YzNRZ1BTQjBhR2x6TGw5cGJuTjBZVzVqWlR0Y2JpQWdJQ0IyWVhJZ2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BTQnBibk4wTG5KbGJtUmxjaWdwTzF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQzh2SUZkbElHRnNiRzkzSUdGMWRHOHRiVzlqYTNNZ2RHOGdjSEp2WTJWbFpDQmhjeUJwWmlCMGFHVjVKM0psSUhKbGRIVnlibWx1WnlCdWRXeHNMbHh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ5Wlc1a1pYSmxaRU52YlhCdmJtVnVkQ0E5UFQwZ0ozVnVaR1ZtYVc1bFpDY2dKaVpjYmlBZ0lDQWdJQ0FnSUNCcGJuTjBMbkpsYm1SbGNpNWZhWE5OYjJOclJuVnVZM1JwYjI0cElIdGNiaUFnSUNBZ0lDQWdMeThnVkdocGN5QnBjeUJ3Y205aVlXSnNlU0JpWVdRZ2NISmhZM1JwWTJVdUlFTnZibk5wWkdWeUlIZGhjbTVwYm1jZ2FHVnlaU0JoYm1SY2JpQWdJQ0FnSUNBZ0x5OGdaR1Z3Y21WallYUnBibWNnZEdocGN5QmpiMjUyWlc1cFpXNWpaUzVjYmlBZ0lDQWdJQ0FnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFNCdWRXeHNPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCeVpXNWtaWEpsWkVOdmJYQnZibVZ1ZER0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJ5YVhaaGRHVmNiaUFnSUNvdlhHNGdJRjl5Wlc1a1pYSldZV3hwWkdGMFpXUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLR05vYVd4a1EyOXVkR1Y0ZENrZ2UxeHVJQ0FnSUhaaGNpQnlaVzVrWlhKbFpFTnZiWEJ2Ym1WdWREdGNiaUFnSUNCMllYSWdjSEpsZG1sdmRYTkRiMjUwWlhoMElEMGdVbVZoWTNSRGIyNTBaWGgwTG1OMWNuSmxiblE3WEc0Z0lDQWdVbVZoWTNSRGIyNTBaWGgwTG1OMWNuSmxiblFnUFNCMGFHbHpMbDl0WlhKblpVTm9hV3hrUTI5dWRHVjRkQ2hjYmlBZ0lDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTGw5amIyNTBaWGgwTEZ4dUlDQWdJQ0FnWTJocGJHUkRiMjUwWlhoMFhHNGdJQ0FnS1R0Y2JpQWdJQ0JTWldGamRFTjFjbkpsYm5SUGQyNWxjaTVqZFhKeVpXNTBJRDBnZEdocGN6dGNiaUFnSUNCMGNua2dlMXh1SUNBZ0lDQWdjbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQVnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5SWGFYUm9iM1YwVDNkdVpYSlBja052Ym5SbGVIUW9LVHRjYmlBZ0lDQjlJR1pwYm1Gc2JIa2dlMXh1SUNBZ0lDQWdVbVZoWTNSRGIyNTBaWGgwTG1OMWNuSmxiblFnUFNCd2NtVjJhVzkxYzBOdmJuUmxlSFE3WEc0Z0lDQWdJQ0JTWldGamRFTjFjbkpsYm5SUGQyNWxjaTVqZFhKeVpXNTBJRDBnYm5Wc2JEdGNiaUFnSUNCOVhHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQzh2SUZSUFJFODZJRUZ1SUdCcGMxWmhiR2xrVG05a1pXQWdablZ1WTNScGIyNGdkMjkxYkdRZ2NISnZZbUZpYkhrZ1ltVWdiVzl5WlNCaGNIQnliM0J5YVdGMFpWeHVJQ0FnSUNBZ2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BUMDlJRzUxYkd3Z2ZId2djbVZ1WkdWeVpXUkRiMjF3YjI1bGJuUWdQVDA5SUdaaGJITmxJSHg4WEc0Z0lDQWdJQ0JTWldGamRFVnNaVzFsYm5RdWFYTldZV3hwWkVWc1pXMWxiblFvY21WdVpHVnlaV1JEYjIxd2IyNWxiblFwTEZ4dUlDQWdJQ0FnSnlWekxuSmxibVJsY2lncE9pQkJJSFpoYkdsa0lGSmxZV04wUTI5dGNHOXVaVzUwSUcxMWMzUWdZbVVnY21WMGRYSnVaV1F1SUZsdmRTQnRZWGtnYUdGMlpTQW5JQ3RjYmlBZ0lDQWdJQ0FnSjNKbGRIVnlibVZrSUhWdVpHVm1hVzVsWkN3Z1lXNGdZWEp5WVhrZ2IzSWdjMjl0WlNCdmRHaGxjaUJwYm5aaGJHbGtJRzlpYW1WamRDNG5MRnh1SUNBZ0lDQWdkR2hwY3k1blpYUk9ZVzFsS0NrZ2ZId2dKMUpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MEoxeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9MeThnVkU5RVR6b2dRVzRnWUdselZtRnNhV1JPYjJSbFlDQm1kVzVqZEdsdmJpQjNiM1ZzWkNCd2NtOWlZV0pzZVNCaVpTQnRiM0psSUdGd2NISnZjSEpwWVhSbFhHNGdJQ0FnY21WdVpHVnlaV1JEYjIxd2IyNWxiblFnUFQwOUlHNTFiR3dnZkh3Z2NtVnVaR1Z5WldSRGIyMXdiMjVsYm5RZ1BUMDlJR1poYkhObElIeDhYRzRnSUNBZ1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtISmxibVJsY21Wa1EyOXRjRzl1Wlc1MEtTa3BPMXh1SUNBZ0lISmxkSFZ5YmlCeVpXNWtaWEpsWkVOdmJYQnZibVZ1ZER0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dUR0Y2YVd4NUlHRnNiRzlqWVhSbGN5QjBhR1VnY21WbWN5QnZZbXBsWTNRZ1lXNWtJSE4wYjNKbGN5QmdZMjl0Y0c5dVpXNTBZQ0JoY3lCZ2NtVm1ZQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhKbFppQlNaV1psY21WdVkyVWdibUZ0WlM1Y2JpQWdJQ29nUUhCaGNtRnRJSHRqYjIxd2IyNWxiblI5SUdOdmJYQnZibVZ1ZENCRGIyMXdiMjVsYm5RZ2RHOGdjM1J2Y21VZ1lYTWdZSEpsWm1BdVhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFjSEpwZG1GMFpWeHVJQ0FnS2k5Y2JpQWdZWFIwWVdOb1VtVm1PaUJtZFc1amRHbHZiaWh5WldZc0lHTnZiWEJ2Ym1WdWRDa2dlMXh1SUNBZ0lIWmhjaUJwYm5OMElEMGdkR2hwY3k1blpYUlFkV0pzYVdOSmJuTjBZVzVqWlNncE8xeHVJQ0FnSUhaaGNpQnlaV1p6SUQwZ2FXNXpkQzV5WldaeklEMDlQU0JsYlhCMGVVOWlhbVZqZENBL0lDaHBibk4wTG5KbFpuTWdQU0I3ZlNrZ09pQnBibk4wTG5KbFpuTTdYRzRnSUNBZ2NtVm1jMXR5WldaZElEMGdZMjl0Y0c5dVpXNTBMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFUmxkR0ZqYUdWeklHRWdjbVZtWlhKbGJtTmxJRzVoYldVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnlaV1lnVG1GdFpTQjBieUJrWlhKbFptVnlaVzVqWlM1Y2JpQWdJQ29nUUdacGJtRnNYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxTDF4dUlDQmtaWFJoWTJoU1pXWTZJR1oxYm1OMGFXOXVLSEpsWmlrZ2UxeHVJQ0FnSUhaaGNpQnlaV1p6SUQwZ2RHaHBjeTVuWlhSUWRXSnNhV05KYm5OMFlXNWpaU2dwTG5KbFpuTTdYRzRnSUNBZ1pHVnNaWFJsSUhKbFpuTmJjbVZtWFR0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSMlYwSUdFZ2RHVjRkQ0JrWlhOamNtbHdkR2x2YmlCdlppQjBhR1VnWTI5dGNHOXVaVzUwSUhSb1lYUWdZMkZ1SUdKbElIVnpaV1FnZEc4Z2FXUmxiblJwWm5rZ2FYUmNiaUFnSUNvZ2FXNGdaWEp5YjNJZ2JXVnpjMkZuWlhNdVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnVkdobElHNWhiV1VnYjNJZ2JuVnNiQzVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JuWlhST1lXMWxPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0IyWVhJZ2RIbHdaU0E5SUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuUjVjR1U3WEc0Z0lDQWdkbUZ5SUdOdmJuTjBjblZqZEc5eUlEMGdkR2hwY3k1ZmFXNXpkR0Z1WTJVZ0ppWWdkR2hwY3k1ZmFXNXpkR0Z1WTJVdVkyOXVjM1J5ZFdOMGIzSTdYRzRnSUNBZ2NtVjBkWEp1SUNoY2JpQWdJQ0FnSUhSNWNHVXVaR2x6Y0d4aGVVNWhiV1VnZkh3Z0tHTnZibk4wY25WamRHOXlJQ1ltSUdOdmJuTjBjblZqZEc5eUxtUnBjM0JzWVhsT1lXMWxLU0I4ZkZ4dUlDQWdJQ0FnZEhsd1pTNXVZVzFsSUh4OElDaGpiMjV6ZEhKMVkzUnZjaUFtSmlCamIyNXpkSEoxWTNSdmNpNXVZVzFsS1NCOGZGeHVJQ0FnSUNBZ2JuVnNiRnh1SUNBZ0lDazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVkbGRDQjBhR1VnY0hWaWJHbGpiSGtnWVdOalpYTnphV0pzWlNCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHbHpJR052YlhCdmJtVnVkQ0F0SUdrdVpTNGdkMmhoZEZ4dUlDQWdLaUJwY3lCbGVIQnZjMlZrSUdKNUlISmxabk1nWVc1a0lISmxkSFZ5Ym1Wa0lHSjVJRkpsWVdOMExuSmxibVJsY2k0Z1EyRnVJR0psSUc1MWJHd2dabTl5SUhOMFlYUmxiR1Z6YzF4dUlDQWdLaUJqYjIxd2IyNWxiblJ6TGx4dUlDQWdLbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ2RHaGxJSEIxWW14cFl5QmpiMjF3YjI1bGJuUWdhVzV6ZEdGdVkyVXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaMlYwVUhWaWJHbGpTVzV6ZEdGdVkyVTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TGw5cGJuTjBZVzVqWlR0Y2JpQWdmU3hjYmx4dUlDQXZMeUJUZEhWaVhHNGdJRjlwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBPaUJ1ZFd4c1hHNWNibjA3WEc1Y2JsSmxZV04wVUdWeVppNXRaV0Z6ZFhKbFRXVjBhRzlrY3loY2JpQWdVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5STmFYaHBiaXhjYmlBZ0oxSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSnl4Y2JpQWdlMXh1SUNBZ0lHMXZkVzUwUTI5dGNHOXVaVzUwT2lBbmJXOTFiblJEYjIxd2IyNWxiblFuTEZ4dUlDQWdJSFZ3WkdGMFpVTnZiWEJ2Ym1WdWREb2dKM1Z3WkdGMFpVTnZiWEJ2Ym1WdWRDY3NYRzRnSUNBZ1gzSmxibVJsY2xaaGJHbGtZWFJsWkVOdmJYQnZibVZ1ZERvZ0oxOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5RblhHNGdJSDFjYmlrN1hHNWNiblpoY2lCU1pXRmpkRU52YlhCdmMybDBaVU52YlhCdmJtVnVkQ0E5SUh0Y2JseHVJQ0JOYVhocGJqb2dVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5STmFYaHBibHh1WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1ME8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdENvbnRleHRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZShcIi4vZW1wdHlPYmplY3RcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBkaWRXYXJuID0gZmFsc2U7XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgY29udGV4dC5cbiAqXG4gKiBUaGUgY29udGV4dCBpcyBhdXRvbWF0aWNhbGx5IHBhc3NlZCBkb3duIHRoZSBjb21wb25lbnQgb3duZXJzaGlwIGhpZXJhcmNoeVxuICogYW5kIGlzIGFjY2Vzc2libGUgdmlhIGB0aGlzLmNvbnRleHRgIG9uIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50cy5cbiAqL1xudmFyIFJlYWN0Q29udGV4dCA9IHtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqL1xuICBjdXJyZW50OiBlbXB0eU9iamVjdCxcblxuICAvKipcbiAgICogVGVtcG9yYXJpbHkgZXh0ZW5kcyB0aGUgY3VycmVudCBjb250ZXh0IHdoaWxlIGV4ZWN1dGluZyBzY29wZWRDYWxsYmFjay5cbiAgICpcbiAgICogQSB0eXBpY2FsIHVzZSBjYXNlIG1pZ2h0IGxvb2sgbGlrZVxuICAgKlxuICAgKiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICogICAgdmFyIGNoaWxkcmVuID0gUmVhY3RDb250ZXh0LndpdGhDb250ZXh0KHtmb286ICdmb28nfSwgKCkgPT4gKFxuICAgKlxuICAgKiAgICApKTtcbiAgICogICAgcmV0dXJuIDxkaXY+e2NoaWxkcmVufTwvZGl2PjtcbiAgICogIH1cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0NvbnRleHQgTmV3IGNvbnRleHQgdG8gbWVyZ2UgaW50byB0aGUgZXhpc3RpbmcgY29udGV4dFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBzY29wZWRDYWxsYmFjayBDYWxsYmFjayB0byBydW4gd2l0aCB0aGUgbmV3IGNvbnRleHRcbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR8YXJyYXk8UmVhY3RDb21wb25lbnQ+fVxuICAgKi9cbiAgd2l0aENvbnRleHQ6IGZ1bmN0aW9uKG5ld0NvbnRleHQsIHNjb3BlZENhbGxiYWNrKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgIGRpZFdhcm4sXG4gICAgICAgICd3aXRoQ29udGV4dCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gJyArXG4gICAgICAgICdVc2UgYSB3cmFwcGVyIGNvbXBvbmVudCB3aXRoIGdldENoaWxkQ29udGV4dCBpbnN0ZWFkLidcbiAgICAgICkgOiBudWxsKTtcblxuICAgICAgZGlkV2FybiA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdDtcbiAgICB2YXIgcHJldmlvdXNDb250ZXh0ID0gUmVhY3RDb250ZXh0LmN1cnJlbnQ7XG4gICAgUmVhY3RDb250ZXh0LmN1cnJlbnQgPSBhc3NpZ24oe30sIHByZXZpb3VzQ29udGV4dCwgbmV3Q29udGV4dCk7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IHNjb3BlZENhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q29udGV4dC5jdXJyZW50ID0gcHJldmlvdXNDb250ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb250ZXh0O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkRiMjUwWlhoMExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRU52Ym5SbGVIUmNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJoYzNOcFoyNGdQU0J5WlhGMWFYSmxLRndpTGk5UFltcGxZM1F1WVhOemFXZHVYQ0lwTzF4dWRtRnlJR1Z0Y0hSNVQySnFaV04wSUQwZ2NtVnhkV2x5WlNoY0lpNHZaVzF3ZEhsUFltcGxZM1JjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQmthV1JYWVhKdUlEMGdabUZzYzJVN1hHNWNiaThxS2x4dUlDb2dTMlZsY0hNZ2RISmhZMnNnYjJZZ2RHaGxJR04xY25KbGJuUWdZMjl1ZEdWNGRDNWNiaUFxWEc0Z0tpQlVhR1VnWTI5dWRHVjRkQ0JwY3lCaGRYUnZiV0YwYVdOaGJHeDVJSEJoYzNObFpDQmtiM2R1SUhSb1pTQmpiMjF3YjI1bGJuUWdiM2R1WlhKemFHbHdJR2hwWlhKaGNtTm9lVnh1SUNvZ1lXNWtJR2x6SUdGalkyVnpjMmxpYkdVZ2RtbGhJR0IwYUdsekxtTnZiblJsZUhSZ0lHOXVJRkpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MGN5NWNiaUFxTDF4dWRtRnlJRkpsWVdOMFEyOXVkR1Y0ZENBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxSUVCMGVYQmxJSHR2WW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0JqZFhKeVpXNTBPaUJsYlhCMGVVOWlhbVZqZEN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVkdWdGNHOXlZWEpwYkhrZ1pYaDBaVzVrY3lCMGFHVWdZM1Z5Y21WdWRDQmpiMjUwWlhoMElIZG9hV3hsSUdWNFpXTjFkR2x1WnlCelkyOXdaV1JEWVd4c1ltRmpheTVjYmlBZ0lDcGNiaUFnSUNvZ1FTQjBlWEJwWTJGc0lIVnpaU0JqWVhObElHMXBaMmgwSUd4dmIyc2diR2xyWlZ4dUlDQWdLbHh1SUNBZ0tpQWdjbVZ1WkdWeU9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDb2dJQ0FnZG1GeUlHTm9hV3hrY21WdUlEMGdVbVZoWTNSRGIyNTBaWGgwTG5kcGRHaERiMjUwWlhoMEtIdG1iMjg2SUNkbWIyOG5mU3dnS0NrZ1BUNGdLRnh1SUNBZ0tseHVJQ0FnS2lBZ0lDQXBLVHRjYmlBZ0lDb2dJQ0FnY21WMGRYSnVJRHhrYVhZK2UyTm9hV3hrY21WdWZUd3ZaR2wyUGp0Y2JpQWdJQ29nSUgxY2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHNWxkME52Ym5SbGVIUWdUbVYzSUdOdmJuUmxlSFFnZEc4Z2JXVnlaMlVnYVc1MGJ5QjBhR1VnWlhocGMzUnBibWNnWTI5dWRHVjRkRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQnpZMjl3WldSRFlXeHNZbUZqYXlCRFlXeHNZbUZqYXlCMGJ5QnlkVzRnZDJsMGFDQjBhR1VnYm1WM0lHTnZiblJsZUhSY2JpQWdJQ29nUUhKbGRIVnliaUI3VW1WaFkzUkRiMjF3YjI1bGJuUjhZWEp5WVhrOFVtVmhZM1JEYjIxd2IyNWxiblErZlZ4dUlDQWdLaTljYmlBZ2QybDBhRU52Ym5SbGVIUTZJR1oxYm1OMGFXOXVLRzVsZDBOdmJuUmxlSFFzSUhOamIzQmxaRU5oYkd4aVlXTnJLU0I3WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lHUnBaRmRoY200c1hHNGdJQ0FnSUNBZ0lDZDNhWFJvUTI5dWRHVjRkQ0JwY3lCa1pYQnlaV05oZEdWa0lHRnVaQ0IzYVd4c0lHSmxJSEpsYlc5MlpXUWdhVzRnWVNCbWRYUjFjbVVnZG1WeWMybHZiaTRnSnlBclhHNGdJQ0FnSUNBZ0lDZFZjMlVnWVNCM2NtRndjR1Z5SUdOdmJYQnZibVZ1ZENCM2FYUm9JR2RsZEVOb2FXeGtRMjl1ZEdWNGRDQnBibk4wWldGa0xpZGNiaUFnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNibHh1SUNBZ0lDQWdaR2xrVjJGeWJpQTlJSFJ5ZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZG1GeUlISmxjM1ZzZER0Y2JpQWdJQ0IyWVhJZ2NISmxkbWx2ZFhORGIyNTBaWGgwSUQwZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUTdYRzRnSUNBZ1VtVmhZM1JEYjI1MFpYaDBMbU4xY25KbGJuUWdQU0JoYzNOcFoyNG9lMzBzSUhCeVpYWnBiM1Z6UTI5dWRHVjRkQ3dnYm1WM1EyOXVkR1Y0ZENrN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lISmxjM1ZzZENBOUlITmpiM0JsWkVOaGJHeGlZV05yS0NrN1hHNGdJQ0FnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0FnSUZKbFlXTjBRMjl1ZEdWNGRDNWpkWEp5Wlc1MElEMGdjSEpsZG1sdmRYTkRiMjUwWlhoME8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVJQ0I5WEc1Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkRiMjUwWlhoME8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0Q3VycmVudE93bmVyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqXG4gKiBUaGUgZGVwdGggaW5kaWNhdGUgaG93IG1hbnkgY29tcG9zaXRlIGNvbXBvbmVudHMgYXJlIGFib3ZlIHRoaXMgcmVuZGVyIGxldmVsLlxuICovXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSB7XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDdXJyZW50T3duZXI7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3JcIik7XG5cbnZhciBtYXBPYmplY3QgPSByZXF1aXJlKFwiLi9tYXBPYmplY3RcIik7XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgSFRNTCB0YWcgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUYWcgbmFtZSAoZS5nLiBgZGl2YCkuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVET01GYWN0b3J5KHRhZykge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5KHRhZyk7XG4gIH1cbiAgcmV0dXJuIFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KHRhZyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcHBpbmcgZnJvbSBzdXBwb3J0ZWQgSFRNTCB0YWdzIHRvIGBSZWFjdERPTUNvbXBvbmVudGAgY2xhc3Nlcy5cbiAqIFRoaXMgaXMgYWxzbyBhY2Nlc3NpYmxlIHZpYSBgUmVhY3QuRE9NYC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbnZhciBSZWFjdERPTSA9IG1hcE9iamVjdCh7XG4gIGE6ICdhJyxcbiAgYWJicjogJ2FiYnInLFxuICBhZGRyZXNzOiAnYWRkcmVzcycsXG4gIGFyZWE6ICdhcmVhJyxcbiAgYXJ0aWNsZTogJ2FydGljbGUnLFxuICBhc2lkZTogJ2FzaWRlJyxcbiAgYXVkaW86ICdhdWRpbycsXG4gIGI6ICdiJyxcbiAgYmFzZTogJ2Jhc2UnLFxuICBiZGk6ICdiZGknLFxuICBiZG86ICdiZG8nLFxuICBiaWc6ICdiaWcnLFxuICBibG9ja3F1b3RlOiAnYmxvY2txdW90ZScsXG4gIGJvZHk6ICdib2R5JyxcbiAgYnI6ICdicicsXG4gIGJ1dHRvbjogJ2J1dHRvbicsXG4gIGNhbnZhczogJ2NhbnZhcycsXG4gIGNhcHRpb246ICdjYXB0aW9uJyxcbiAgY2l0ZTogJ2NpdGUnLFxuICBjb2RlOiAnY29kZScsXG4gIGNvbDogJ2NvbCcsXG4gIGNvbGdyb3VwOiAnY29sZ3JvdXAnLFxuICBkYXRhOiAnZGF0YScsXG4gIGRhdGFsaXN0OiAnZGF0YWxpc3QnLFxuICBkZDogJ2RkJyxcbiAgZGVsOiAnZGVsJyxcbiAgZGV0YWlsczogJ2RldGFpbHMnLFxuICBkZm46ICdkZm4nLFxuICBkaWFsb2c6ICdkaWFsb2cnLFxuICBkaXY6ICdkaXYnLFxuICBkbDogJ2RsJyxcbiAgZHQ6ICdkdCcsXG4gIGVtOiAnZW0nLFxuICBlbWJlZDogJ2VtYmVkJyxcbiAgZmllbGRzZXQ6ICdmaWVsZHNldCcsXG4gIGZpZ2NhcHRpb246ICdmaWdjYXB0aW9uJyxcbiAgZmlndXJlOiAnZmlndXJlJyxcbiAgZm9vdGVyOiAnZm9vdGVyJyxcbiAgZm9ybTogJ2Zvcm0nLFxuICBoMTogJ2gxJyxcbiAgaDI6ICdoMicsXG4gIGgzOiAnaDMnLFxuICBoNDogJ2g0JyxcbiAgaDU6ICdoNScsXG4gIGg2OiAnaDYnLFxuICBoZWFkOiAnaGVhZCcsXG4gIGhlYWRlcjogJ2hlYWRlcicsXG4gIGhyOiAnaHInLFxuICBodG1sOiAnaHRtbCcsXG4gIGk6ICdpJyxcbiAgaWZyYW1lOiAnaWZyYW1lJyxcbiAgaW1nOiAnaW1nJyxcbiAgaW5wdXQ6ICdpbnB1dCcsXG4gIGluczogJ2lucycsXG4gIGtiZDogJ2tiZCcsXG4gIGtleWdlbjogJ2tleWdlbicsXG4gIGxhYmVsOiAnbGFiZWwnLFxuICBsZWdlbmQ6ICdsZWdlbmQnLFxuICBsaTogJ2xpJyxcbiAgbGluazogJ2xpbmsnLFxuICBtYWluOiAnbWFpbicsXG4gIG1hcDogJ21hcCcsXG4gIG1hcms6ICdtYXJrJyxcbiAgbWVudTogJ21lbnUnLFxuICBtZW51aXRlbTogJ21lbnVpdGVtJyxcbiAgbWV0YTogJ21ldGEnLFxuICBtZXRlcjogJ21ldGVyJyxcbiAgbmF2OiAnbmF2JyxcbiAgbm9zY3JpcHQ6ICdub3NjcmlwdCcsXG4gIG9iamVjdDogJ29iamVjdCcsXG4gIG9sOiAnb2wnLFxuICBvcHRncm91cDogJ29wdGdyb3VwJyxcbiAgb3B0aW9uOiAnb3B0aW9uJyxcbiAgb3V0cHV0OiAnb3V0cHV0JyxcbiAgcDogJ3AnLFxuICBwYXJhbTogJ3BhcmFtJyxcbiAgcGljdHVyZTogJ3BpY3R1cmUnLFxuICBwcmU6ICdwcmUnLFxuICBwcm9ncmVzczogJ3Byb2dyZXNzJyxcbiAgcTogJ3EnLFxuICBycDogJ3JwJyxcbiAgcnQ6ICdydCcsXG4gIHJ1Ynk6ICdydWJ5JyxcbiAgczogJ3MnLFxuICBzYW1wOiAnc2FtcCcsXG4gIHNjcmlwdDogJ3NjcmlwdCcsXG4gIHNlY3Rpb246ICdzZWN0aW9uJyxcbiAgc2VsZWN0OiAnc2VsZWN0JyxcbiAgc21hbGw6ICdzbWFsbCcsXG4gIHNvdXJjZTogJ3NvdXJjZScsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3Ryb25nOiAnc3Ryb25nJyxcbiAgc3R5bGU6ICdzdHlsZScsXG4gIHN1YjogJ3N1YicsXG4gIHN1bW1hcnk6ICdzdW1tYXJ5JyxcbiAgc3VwOiAnc3VwJyxcbiAgdGFibGU6ICd0YWJsZScsXG4gIHRib2R5OiAndGJvZHknLFxuICB0ZDogJ3RkJyxcbiAgdGV4dGFyZWE6ICd0ZXh0YXJlYScsXG4gIHRmb290OiAndGZvb3QnLFxuICB0aDogJ3RoJyxcbiAgdGhlYWQ6ICd0aGVhZCcsXG4gIHRpbWU6ICd0aW1lJyxcbiAgdGl0bGU6ICd0aXRsZScsXG4gIHRyOiAndHInLFxuICB0cmFjazogJ3RyYWNrJyxcbiAgdTogJ3UnLFxuICB1bDogJ3VsJyxcbiAgJ3Zhcic6ICd2YXInLFxuICB2aWRlbzogJ3ZpZGVvJyxcbiAgd2JyOiAnd2JyJyxcblxuICAvLyBTVkdcbiAgY2lyY2xlOiAnY2lyY2xlJyxcbiAgY2xpcFBhdGg6ICdjbGlwUGF0aCcsXG4gIGRlZnM6ICdkZWZzJyxcbiAgZWxsaXBzZTogJ2VsbGlwc2UnLFxuICBnOiAnZycsXG4gIGxpbmU6ICdsaW5lJyxcbiAgbGluZWFyR3JhZGllbnQ6ICdsaW5lYXJHcmFkaWVudCcsXG4gIG1hc2s6ICdtYXNrJyxcbiAgcGF0aDogJ3BhdGgnLFxuICBwYXR0ZXJuOiAncGF0dGVybicsXG4gIHBvbHlnb246ICdwb2x5Z29uJyxcbiAgcG9seWxpbmU6ICdwb2x5bGluZScsXG4gIHJhZGlhbEdyYWRpZW50OiAncmFkaWFsR3JhZGllbnQnLFxuICByZWN0OiAncmVjdCcsXG4gIHN0b3A6ICdzdG9wJyxcbiAgc3ZnOiAnc3ZnJyxcbiAgdGV4dDogJ3RleHQnLFxuICB0c3BhbjogJ3RzcGFuJ1xuXG59LCBjcmVhdGVET01GYWN0b3J5KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JFVDAwdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRVJQVFZ4dUlDb2dRSFI1Y0dWamFHVmphM01nYzNSaGRHbGpMVzl1YkhsY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eVhDSXBPMXh1WEc1MllYSWdiV0Z3VDJKcVpXTjBJRDBnY21WeGRXbHlaU2hjSWk0dmJXRndUMkpxWldOMFhDSXBPMXh1WEc0dktpcGNiaUFxSUVOeVpXRjBaU0JoSUdaaFkzUnZjbmtnZEdoaGRDQmpjbVZoZEdWeklFaFVUVXdnZEdGbklHVnNaVzFsYm5SekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMFlXY2dWR0ZuSUc1aGJXVWdLR1V1Wnk0Z1lHUnBkbUFwTGx4dUlDb2dRSEJ5YVhaaGRHVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1kzSmxZWFJsUkU5TlJtRmpkRzl5ZVNoMFlXY3BJSHRjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJTWldGamRFVnNaVzFsYm5SV1lXeHBaR0YwYjNJdVkzSmxZWFJsUm1GamRHOXllU2gwWVdjcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCU1pXRmpkRVZzWlcxbGJuUXVZM0psWVhSbFJtRmpkRzl5ZVNoMFlXY3BPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ1lTQnRZWEJ3YVc1bklHWnliMjBnYzNWd2NHOXlkR1ZrSUVoVVRVd2dkR0ZuY3lCMGJ5QmdVbVZoWTNSRVQwMURiMjF3YjI1bGJuUmdJR05zWVhOelpYTXVYRzRnS2lCVWFHbHpJR2x6SUdGc2MyOGdZV05qWlhOemFXSnNaU0IyYVdFZ1lGSmxZV04wTGtSUFRXQXVYRzRnS2x4dUlDb2dRSEIxWW14cFkxeHVJQ292WEc1MllYSWdVbVZoWTNSRVQwMGdQU0J0WVhCUFltcGxZM1FvZTF4dUlDQmhPaUFuWVNjc1hHNGdJR0ZpWW5JNklDZGhZbUp5Snl4Y2JpQWdZV1JrY21WemN6b2dKMkZrWkhKbGMzTW5MRnh1SUNCaGNtVmhPaUFuWVhKbFlTY3NYRzRnSUdGeWRHbGpiR1U2SUNkaGNuUnBZMnhsSnl4Y2JpQWdZWE5wWkdVNklDZGhjMmxrWlNjc1hHNGdJR0YxWkdsdk9pQW5ZWFZrYVc4bkxGeHVJQ0JpT2lBbllpY3NYRzRnSUdKaGMyVTZJQ2RpWVhObEp5eGNiaUFnWW1ScE9pQW5ZbVJwSnl4Y2JpQWdZbVJ2T2lBblltUnZKeXhjYmlBZ1ltbG5PaUFuWW1sbkp5eGNiaUFnWW14dlkydHhkVzkwWlRvZ0oySnNiMk5yY1hWdmRHVW5MRnh1SUNCaWIyUjVPaUFuWW05a2VTY3NYRzRnSUdKeU9pQW5ZbkluTEZ4dUlDQmlkWFIwYjI0NklDZGlkWFIwYjI0bkxGeHVJQ0JqWVc1MllYTTZJQ2RqWVc1MllYTW5MRnh1SUNCallYQjBhVzl1T2lBblkyRndkR2x2Ymljc1hHNGdJR05wZEdVNklDZGphWFJsSnl4Y2JpQWdZMjlrWlRvZ0oyTnZaR1VuTEZ4dUlDQmpiMnc2SUNkamIyd25MRnh1SUNCamIyeG5jbTkxY0RvZ0oyTnZiR2R5YjNWd0p5eGNiaUFnWkdGMFlUb2dKMlJoZEdFbkxGeHVJQ0JrWVhSaGJHbHpkRG9nSjJSaGRHRnNhWE4wSnl4Y2JpQWdaR1E2SUNka1pDY3NYRzRnSUdSbGJEb2dKMlJsYkNjc1hHNGdJR1JsZEdGcGJITTZJQ2RrWlhSaGFXeHpKeXhjYmlBZ1pHWnVPaUFuWkdadUp5eGNiaUFnWkdsaGJHOW5PaUFuWkdsaGJHOW5KeXhjYmlBZ1pHbDJPaUFuWkdsMkp5eGNiaUFnWkd3NklDZGtiQ2NzWEc0Z0lHUjBPaUFuWkhRbkxGeHVJQ0JsYlRvZ0oyVnRKeXhjYmlBZ1pXMWlaV1E2SUNkbGJXSmxaQ2NzWEc0Z0lHWnBaV3hrYzJWME9pQW5abWxsYkdSelpYUW5MRnh1SUNCbWFXZGpZWEIwYVc5dU9pQW5abWxuWTJGd2RHbHZiaWNzWEc0Z0lHWnBaM1Z5WlRvZ0oyWnBaM1Z5WlNjc1hHNGdJR1p2YjNSbGNqb2dKMlp2YjNSbGNpY3NYRzRnSUdadmNtMDZJQ2RtYjNKdEp5eGNiaUFnYURFNklDZG9NU2NzWEc0Z0lHZ3lPaUFuYURJbkxGeHVJQ0JvTXpvZ0oyZ3pKeXhjYmlBZ2FEUTZJQ2RvTkNjc1hHNGdJR2cxT2lBbmFEVW5MRnh1SUNCb05qb2dKMmcySnl4Y2JpQWdhR1ZoWkRvZ0oyaGxZV1FuTEZ4dUlDQm9aV0ZrWlhJNklDZG9aV0ZrWlhJbkxGeHVJQ0JvY2pvZ0oyaHlKeXhjYmlBZ2FIUnRiRG9nSjJoMGJXd25MRnh1SUNCcE9pQW5hU2NzWEc0Z0lHbG1jbUZ0WlRvZ0oybG1jbUZ0WlNjc1hHNGdJR2x0WnpvZ0oybHRaeWNzWEc0Z0lHbHVjSFYwT2lBbmFXNXdkWFFuTEZ4dUlDQnBibk02SUNkcGJuTW5MRnh1SUNCclltUTZJQ2RyWW1RbkxGeHVJQ0JyWlhsblpXNDZJQ2RyWlhsblpXNG5MRnh1SUNCc1lXSmxiRG9nSjJ4aFltVnNKeXhjYmlBZ2JHVm5aVzVrT2lBbmJHVm5aVzVrSnl4Y2JpQWdiR2s2SUNkc2FTY3NYRzRnSUd4cGJtczZJQ2RzYVc1ckp5eGNiaUFnYldGcGJqb2dKMjFoYVc0bkxGeHVJQ0J0WVhBNklDZHRZWEFuTEZ4dUlDQnRZWEpyT2lBbmJXRnlheWNzWEc0Z0lHMWxiblU2SUNkdFpXNTFKeXhjYmlBZ2JXVnVkV2wwWlcwNklDZHRaVzUxYVhSbGJTY3NYRzRnSUcxbGRHRTZJQ2R0WlhSaEp5eGNiaUFnYldWMFpYSTZJQ2R0WlhSbGNpY3NYRzRnSUc1aGRqb2dKMjVoZGljc1hHNGdJRzV2YzJOeWFYQjBPaUFuYm05elkzSnBjSFFuTEZ4dUlDQnZZbXBsWTNRNklDZHZZbXBsWTNRbkxGeHVJQ0J2YkRvZ0oyOXNKeXhjYmlBZ2IzQjBaM0p2ZFhBNklDZHZjSFJuY205MWNDY3NYRzRnSUc5d2RHbHZiam9nSjI5d2RHbHZiaWNzWEc0Z0lHOTFkSEIxZERvZ0oyOTFkSEIxZENjc1hHNGdJSEE2SUNkd0p5eGNiaUFnY0dGeVlXMDZJQ2R3WVhKaGJTY3NYRzRnSUhCcFkzUjFjbVU2SUNkd2FXTjBkWEpsSnl4Y2JpQWdjSEpsT2lBbmNISmxKeXhjYmlBZ2NISnZaM0psYzNNNklDZHdjbTluY21WemN5Y3NYRzRnSUhFNklDZHhKeXhjYmlBZ2NuQTZJQ2R5Y0Njc1hHNGdJSEowT2lBbmNuUW5MRnh1SUNCeWRXSjVPaUFuY25WaWVTY3NYRzRnSUhNNklDZHpKeXhjYmlBZ2MyRnRjRG9nSjNOaGJYQW5MRnh1SUNCelkzSnBjSFE2SUNkelkzSnBjSFFuTEZ4dUlDQnpaV04wYVc5dU9pQW5jMlZqZEdsdmJpY3NYRzRnSUhObGJHVmpkRG9nSjNObGJHVmpkQ2NzWEc0Z0lITnRZV3hzT2lBbmMyMWhiR3duTEZ4dUlDQnpiM1Z5WTJVNklDZHpiM1Z5WTJVbkxGeHVJQ0J6Y0dGdU9pQW5jM0JoYmljc1hHNGdJSE4wY205dVp6b2dKM04wY205dVp5Y3NYRzRnSUhOMGVXeGxPaUFuYzNSNWJHVW5MRnh1SUNCemRXSTZJQ2R6ZFdJbkxGeHVJQ0J6ZFcxdFlYSjVPaUFuYzNWdGJXRnllU2NzWEc0Z0lITjFjRG9nSjNOMWNDY3NYRzRnSUhSaFlteGxPaUFuZEdGaWJHVW5MRnh1SUNCMFltOWtlVG9nSjNSaWIyUjVKeXhjYmlBZ2RHUTZJQ2QwWkNjc1hHNGdJSFJsZUhSaGNtVmhPaUFuZEdWNGRHRnlaV0VuTEZ4dUlDQjBabTl2ZERvZ0ozUm1iMjkwSnl4Y2JpQWdkR2c2SUNkMGFDY3NYRzRnSUhSb1pXRmtPaUFuZEdobFlXUW5MRnh1SUNCMGFXMWxPaUFuZEdsdFpTY3NYRzRnSUhScGRHeGxPaUFuZEdsMGJHVW5MRnh1SUNCMGNqb2dKM1J5Snl4Y2JpQWdkSEpoWTJzNklDZDBjbUZqYXljc1hHNGdJSFU2SUNkMUp5eGNiaUFnZFd3NklDZDFiQ2NzWEc0Z0lDZDJZWEluT2lBbmRtRnlKeXhjYmlBZ2RtbGtaVzg2SUNkMmFXUmxieWNzWEc0Z0lIZGljam9nSjNkaWNpY3NYRzVjYmlBZ0x5OGdVMVpIWEc0Z0lHTnBjbU5zWlRvZ0oyTnBjbU5zWlNjc1hHNGdJR05zYVhCUVlYUm9PaUFuWTJ4cGNGQmhkR2duTEZ4dUlDQmtaV1p6T2lBblpHVm1jeWNzWEc0Z0lHVnNiR2x3YzJVNklDZGxiR3hwY0hObEp5eGNiaUFnWnpvZ0oyY25MRnh1SUNCc2FXNWxPaUFuYkdsdVpTY3NYRzRnSUd4cGJtVmhja2R5WVdScFpXNTBPaUFuYkdsdVpXRnlSM0poWkdsbGJuUW5MRnh1SUNCdFlYTnJPaUFuYldGemF5Y3NYRzRnSUhCaGRHZzZJQ2R3WVhSb0p5eGNiaUFnY0dGMGRHVnliam9nSjNCaGRIUmxjbTRuTEZ4dUlDQndiMng1WjI5dU9pQW5jRzlzZVdkdmJpY3NYRzRnSUhCdmJIbHNhVzVsT2lBbmNHOXNlV3hwYm1VbkxGeHVJQ0J5WVdScFlXeEhjbUZrYVdWdWREb2dKM0poWkdsaGJFZHlZV1JwWlc1MEp5eGNiaUFnY21WamREb2dKM0psWTNRbkxGeHVJQ0J6ZEc5d09pQW5jM1J2Y0Njc1hHNGdJSE4yWnpvZ0ozTjJaeWNzWEc0Z0lIUmxlSFE2SUNkMFpYaDBKeXhjYmlBZ2RITndZVzQ2SUNkMGMzQmhiaWRjYmx4dWZTd2dZM0psWVhSbFJFOU5SbUZqZEc5eWVTazdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkVUMDA3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01CdXR0b25cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBBdXRvRm9jdXNNaXhpbiA9IHJlcXVpcmUoXCIuL0F1dG9Gb2N1c01peGluXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIga2V5TWlycm9yID0gcmVxdWlyZShcIi4va2V5TWlycm9yXCIpO1xuXG52YXIgYnV0dG9uID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoJ2J1dHRvbicpO1xuXG52YXIgbW91c2VMaXN0ZW5lck5hbWVzID0ga2V5TWlycm9yKHtcbiAgb25DbGljazogdHJ1ZSxcbiAgb25Eb3VibGVDbGljazogdHJ1ZSxcbiAgb25Nb3VzZURvd246IHRydWUsXG4gIG9uTW91c2VNb3ZlOiB0cnVlLFxuICBvbk1vdXNlVXA6IHRydWUsXG4gIG9uQ2xpY2tDYXB0dXJlOiB0cnVlLFxuICBvbkRvdWJsZUNsaWNrQ2FwdHVyZTogdHJ1ZSxcbiAgb25Nb3VzZURvd25DYXB0dXJlOiB0cnVlLFxuICBvbk1vdXNlTW92ZUNhcHR1cmU6IHRydWUsXG4gIG9uTW91c2VVcENhcHR1cmU6IHRydWVcbn0pO1xuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8YnV0dG9uPiBuYXRpdmUgY29tcG9uZW50IHRoYXQgZG9lcyBub3QgcmVjZWl2ZSBtb3VzZSBldmVudHNcbiAqIHdoZW4gYGRpc2FibGVkYCBpcyBzZXQuXG4gKi9cbnZhciBSZWFjdERPTUJ1dHRvbiA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NQnV0dG9uJyxcbiAgdGFnTmFtZTogJ0JVVFRPTicsXG5cbiAgbWl4aW5zOiBbQXV0b0ZvY3VzTWl4aW4sIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwcm9wcyA9IHt9O1xuXG4gICAgLy8gQ29weSB0aGUgcHJvcHM7IGV4Y2VwdCB0aGUgbW91c2UgbGlzdGVuZXJzIGlmIHdlJ3JlIGRpc2FibGVkXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KGtleSkgJiZcbiAgICAgICAgICAoIXRoaXMucHJvcHMuZGlzYWJsZWQgfHwgIW1vdXNlTGlzdGVuZXJOYW1lc1trZXldKSkge1xuICAgICAgICBwcm9wc1trZXldID0gdGhpcy5wcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBidXR0b24ocHJvcHMsIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NQnV0dG9uO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUNvbXBvbmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4vKiBnbG9iYWwgaGFzT3duUHJvcGVydHk6dHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xudmFyIFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50ID1cbiAgcmVxdWlyZShcIi4vUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnRcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RNdWx0aUNoaWxkID0gcmVxdWlyZShcIi4vUmVhY3RNdWx0aUNoaWxkXCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZShcIi4vZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciBpc0V2ZW50U3VwcG9ydGVkID0gcmVxdWlyZShcIi4vaXNFdmVudFN1cHBvcnRlZFwiKTtcbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgZGVsZXRlTGlzdGVuZXIgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuZGVsZXRlTGlzdGVuZXI7XG52YXIgbGlzdGVuVG8gPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIubGlzdGVuVG87XG52YXIgcmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7XG5cbi8vIEZvciBxdWlja2x5IG1hdGNoaW5nIGNoaWxkcmVuIHR5cGUsIHRvIHRlc3QgaWYgY2FuIGJlIHRyZWF0ZWQgYXMgY29udGVudC5cbnZhciBDT05URU5UX1RZUEVTID0geydzdHJpbmcnOiB0cnVlLCAnbnVtYmVyJzogdHJ1ZX07XG5cbnZhciBTVFlMRSA9IGtleU9mKHtzdHlsZTogbnVsbH0pO1xuXG52YXIgRUxFTUVOVF9OT0RFX1RZUEUgPSAxO1xuXG4vKipcbiAqIE9wdGlvbmFsbHkgaW5qZWN0YWJsZSBvcGVyYXRpb25zIGZvciBtdXRhdGluZyB0aGUgRE9NXG4gKi9cbnZhciBCYWNrZW5kSURPcGVyYXRpb25zID0gbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0gez9vYmplY3R9IHByb3BzXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUHJvcHMocHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBOb3RlIHRoZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBwcm9wcy5jaGlsZHJlbiA9PSBudWxsLFxuICAgICAgJ0NhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLidcbiAgICApIDogaW52YXJpYW50KHByb3BzLmNoaWxkcmVuID09IG51bGwpKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ19faHRtbCcgaW4gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsXG4gICAgICAnYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gJyArXG4gICAgICAnUGxlYXNlIHZpc2l0IGh0dHBzOi8vZmIubWUvcmVhY3QtaW52YXJpYW50LWRhbmdlcm91c2x5LXNldC1pbm5lci1odG1sICcgK1xuICAgICAgJ2ZvciBtb3JlIGluZm9ybWF0aW9uLidcbiAgICApIDogaW52YXJpYW50KHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiZcbiAgICAnX19odG1sJyBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkpO1xuICB9XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHByb3BzLmlubmVySFRNTCA9PSBudWxsLFxuICAgICAgJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArXG4gICAgICAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIGxvb2t1cCBkb2N1bWVudGF0aW9uIG9uIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuJ1xuICAgICkgOiBudWxsKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICFwcm9wcy5jb250ZW50RWRpdGFibGUgfHwgcHJvcHMuY2hpbGRyZW4gPT0gbnVsbCxcbiAgICAgICdBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBhbmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5ICcgK1xuICAgICAgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgK1xuICAgICAgJ3Rob3NlIG5vZGVzIGFyZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQgb3IgZHVwbGljYXRlZC4gVGhpcyBpcyAnICtcbiAgICAgICdwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuJ1xuICAgICkgOiBudWxsKTtcbiAgfVxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHByb3BzLnN0eWxlID09IG51bGwgfHwgdHlwZW9mIHByb3BzLnN0eWxlID09PSAnb2JqZWN0JyxcbiAgICAnVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCAnICtcbiAgICAnbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArIFxcJ2VtXFwnfX0gd2hlbiAnICtcbiAgICAndXNpbmcgSlNYLidcbiAgKSA6IGludmFyaWFudChwcm9wcy5zdHlsZSA9PSBudWxsIHx8IHR5cGVvZiBwcm9wcy5zdHlsZSA9PT0gJ29iamVjdCcpKTtcbn1cblxuZnVuY3Rpb24gcHV0TGlzdGVuZXIoaWQsIHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyLCB0cmFuc2FjdGlvbikge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgLy8gSUU4IGhhcyBubyBBUEkgZm9yIGV2ZW50IGNhcHR1cmluZyBhbmQgdGhlIGBvblNjcm9sbGAgZXZlbnQgZG9lc24ndFxuICAgIC8vIGJ1YmJsZS5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgIT09ICdvblNjcm9sbCcgfHwgaXNFdmVudFN1cHBvcnRlZCgnc2Nyb2xsJywgdHJ1ZSksXG4gICAgICAnVGhpcyBicm93c2VyIGRvZXNuXFwndCBzdXBwb3J0IHRoZSBgb25TY3JvbGxgIGV2ZW50J1xuICAgICkgOiBudWxsKTtcbiAgfVxuICB2YXIgY29udGFpbmVyID0gUmVhY3RNb3VudC5maW5kUmVhY3RDb250YWluZXJGb3JJRChpZCk7XG4gIGlmIChjb250YWluZXIpIHtcbiAgICB2YXIgZG9jID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSA/XG4gICAgICBjb250YWluZXIub3duZXJEb2N1bWVudCA6XG4gICAgICBjb250YWluZXI7XG4gICAgbGlzdGVuVG8ocmVnaXN0cmF0aW9uTmFtZSwgZG9jKTtcbiAgfVxuICB0cmFuc2FjdGlvbi5nZXRQdXRMaXN0ZW5lclF1ZXVlKCkuZW5xdWV1ZVB1dExpc3RlbmVyKFxuICAgIGlkLFxuICAgIHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgbGlzdGVuZXJcbiAgKTtcbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSB3aGl0ZWxpc3QgZm9yXG4vLyB0aG9zZSBzcGVjaWFsIGNhc2VkIHRhZ3MuXG5cbnZhciBvbWl0dGVkQ2xvc2VUYWdzID0ge1xuICAnYXJlYSc6IHRydWUsXG4gICdiYXNlJzogdHJ1ZSxcbiAgJ2JyJzogdHJ1ZSxcbiAgJ2NvbCc6IHRydWUsXG4gICdlbWJlZCc6IHRydWUsXG4gICdocic6IHRydWUsXG4gICdpbWcnOiB0cnVlLFxuICAnaW5wdXQnOiB0cnVlLFxuICAna2V5Z2VuJzogdHJ1ZSxcbiAgJ2xpbmsnOiB0cnVlLFxuICAnbWV0YSc6IHRydWUsXG4gICdwYXJhbSc6IHRydWUsXG4gICdzb3VyY2UnOiB0cnVlLFxuICAndHJhY2snOiB0cnVlLFxuICAnd2JyJzogdHJ1ZVxuICAvLyBOT1RFOiBtZW51aXRlbSdzIGNsb3NlIHRhZyBzaG91bGQgYmUgb21pdHRlZCwgYnV0IHRoYXQgY2F1c2VzIHByb2JsZW1zLlxufTtcblxuLy8gV2UgYWNjZXB0IGFueSB0YWcgdG8gYmUgcmVuZGVyZWQgYnV0IHNpbmNlIHRoaXMgZ2V0cyBpbmplY3RlZCBpbnRvIGFiaXRyYXJ5XG4vLyBIVE1MLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGl0J3MgYSBzYWZlIHRhZy5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVcblxudmFyIFZBTElEX1RBR19SRUdFWCA9IC9eW2EtekEtWl1bYS16QS1aOl9cXC5cXC1cXGRdKiQvOyAvLyBTaW1wbGlmaWVkIHN1YnNldFxudmFyIHZhbGlkYXRlZFRhZ0NhY2hlID0ge307XG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gdmFsaWRhdGVEYW5nZXJvdXNUYWcodGFnKSB7XG4gIGlmICghaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRUYWdDYWNoZSwgdGFnKSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoVkFMSURfVEFHX1JFR0VYLnRlc3QodGFnKSwgJ0ludmFsaWQgdGFnOiAlcycsIHRhZykgOiBpbnZhcmlhbnQoVkFMSURfVEFHX1JFR0VYLnRlc3QodGFnKSkpO1xuICAgIHZhbGlkYXRlZFRhZ0NhY2hlW3RhZ10gPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBSZWFjdCBjbGFzcyB0aGF0IGlzIGlkZW1wb3RlbnQgYW5kIGNhcGFibGUgb2YgY29udGFpbmluZyBvdGhlclxuICogUmVhY3QgY29tcG9uZW50cy4gSXQgYWNjZXB0cyBldmVudCBsaXN0ZW5lcnMgYW5kIERPTSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiB2YWxpZCBhY2NvcmRpbmcgdG8gYERPTVByb3BlcnR5YC5cbiAqXG4gKiAgLSBFdmVudCBsaXN0ZW5lcnM6IGBvbkNsaWNrYCwgYG9uTW91c2VEb3duYCwgZXRjLlxuICogIC0gRE9NIHByb3BlcnRpZXM6IGBjbGFzc05hbWVgLCBgbmFtZWAsIGB0aXRsZWAsIGV0Yy5cbiAqXG4gKiBUaGUgYHN0eWxlYCBwcm9wZXJ0eSBmdW5jdGlvbnMgZGlmZmVyZW50bHkgZnJvbSB0aGUgRE9NIEFQSS4gSXQgYWNjZXB0cyBhblxuICogb2JqZWN0IG1hcHBpbmcgb2Ygc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yIFJlYWN0RE9NQ29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdE11bHRpQ2hpbGRcbiAqL1xuZnVuY3Rpb24gUmVhY3RET01Db21wb25lbnQodGFnKSB7XG4gIHZhbGlkYXRlRGFuZ2Vyb3VzVGFnKHRhZyk7XG4gIHRoaXMuX3RhZyA9IHRhZztcbiAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG51bGw7XG4gIHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gbnVsbDtcbiAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG59XG5cblJlYWN0RE9NQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gJ1JlYWN0RE9NQ29tcG9uZW50JztcblxuUmVhY3RET01Db21wb25lbnQuTWl4aW4gPSB7XG5cbiAgY29uc3RydWN0OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgcm9vdCB0YWcgbWFya3VwIHRoZW4gcmVjdXJzZXMuIFRoaXMgbWV0aG9kIGhhcyBzaWRlIGVmZmVjdHMgYW5kXG4gICAqIGlzIG5vdCBpZGVtcG90ZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBUaGUgcm9vdCBET00gSUQgZm9yIHRoaXMgbm9kZS5cbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbXB1dGVkIG1hcmt1cC5cbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihyb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IHJvb3RJRDtcbiAgICBhc3NlcnRWYWxpZFByb3BzKHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzKTtcbiAgICB2YXIgY2xvc2VUYWcgPSBvbWl0dGVkQ2xvc2VUYWdzW3RoaXMuX3RhZ10gPyAnJyA6ICc8LycgKyB0aGlzLl90YWcgKyAnPic7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2NyZWF0ZU9wZW5UYWdNYXJrdXBBbmRQdXRMaXN0ZW5lcnModHJhbnNhY3Rpb24pICtcbiAgICAgIHRoaXMuX2NyZWF0ZUNvbnRlbnRNYXJrdXAodHJhbnNhY3Rpb24sIGNvbnRleHQpICtcbiAgICAgIGNsb3NlVGFnXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIHRoZSBvcGVuIHRhZyBhbmQgYWxsIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGhhcyBzaWRlIGVmZmVjdHMgYmVjYXVzZSBldmVudHMgZ2V0IHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEl0ZXJhdGluZyBvdmVyIG9iamVjdCBwcm9wZXJ0aWVzIGlzIGZhc3RlciB0aGFuIGl0ZXJhdGluZyBvdmVyIGFycmF5cy5cbiAgICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9vYmotdnMtYXJyLWl0ZXJhdGlvblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7c3RyaW5nfSBNYXJrdXAgb2Ygb3BlbmluZyB0YWcuXG4gICAqL1xuICBfY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVyczogZnVuY3Rpb24odHJhbnNhY3Rpb24pIHtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcbiAgICB2YXIgcmV0ID0gJzwnICsgdGhpcy5fdGFnO1xuXG4gICAgZm9yICh2YXIgcHJvcEtleSBpbiBwcm9wcykge1xuICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcbiAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBwdXRMaXN0ZW5lcih0aGlzLl9yb290Tm9kZUlELCBwcm9wS2V5LCBwcm9wVmFsdWUsIHRyYW5zYWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICAgIGlmIChwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgIHByb3BWYWx1ZSA9IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gYXNzaWduKHt9LCBwcm9wcy5zdHlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb3BWYWx1ZSA9IENTU1Byb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JTdHlsZXMocHJvcFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWFya3VwID1cbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9yUHJvcGVydHkocHJvcEtleSwgcHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKG1hcmt1cCkge1xuICAgICAgICAgIHJldCArPSAnICcgKyBtYXJrdXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc3RhdGljIHBhZ2VzLCBubyBuZWVkIHRvIHB1dCBSZWFjdCBJRCBhbmQgY2hlY2tzdW0uIFNhdmVzIGxvdHMgb2ZcbiAgICAvLyBieXRlcy5cbiAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgIHJldHVybiByZXQgKyAnPic7XG4gICAgfVxuXG4gICAgdmFyIG1hcmt1cEZvcklEID0gRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvcklEKHRoaXMuX3Jvb3ROb2RlSUQpO1xuICAgIHJldHVybiByZXQgKyAnICcgKyBtYXJrdXBGb3JJRCArICc+JztcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIHRoZSBjb250ZW50IGJldHdlZW4gdGhlIHRhZ3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IENvbnRlbnQgbWFya3VwLlxuICAgKi9cbiAgX2NyZWF0ZUNvbnRlbnRNYXJrdXA6IGZ1bmN0aW9uKHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIHByZWZpeCA9ICcnO1xuICAgIGlmICh0aGlzLl90YWcgPT09ICdsaXN0aW5nJyB8fFxuICAgICAgICB0aGlzLl90YWcgPT09ICdwcmUnIHx8XG4gICAgICAgIHRoaXMuX3RhZyA9PT0gJ3RleHRhcmVhJykge1xuICAgICAgLy8gQWRkIGFuIGluaXRpYWwgbmV3bGluZSBiZWNhdXNlIGJyb3dzZXJzIGlnbm9yZSB0aGUgZmlyc3QgbmV3bGluZSBpblxuICAgICAgLy8gYSA8bGlzdGluZz4sIDxwcmU+LCBvciA8dGV4dGFyZWE+IGFzIGFuIFwiYXV0aG9yaW5nIGNvbnZlbmllbmNlXCIgLS0gc2VlXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5LlxuICAgICAgcHJlZml4ID0gJ1xcbic7XG4gICAgfVxuXG4gICAgdmFyIHByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICAvLyBJbnRlbnRpb25hbCB1c2Ugb2YgIT0gdG8gYXZvaWQgY2F0Y2hpbmcgemVyby9mYWxzZS5cbiAgICB2YXIgaW5uZXJIVE1MID0gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw7XG4gICAgaWYgKGlubmVySFRNTCAhPSBudWxsKSB7XG4gICAgICBpZiAoaW5uZXJIVE1MLl9faHRtbCAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBpbm5lckhUTUwuX19odG1sO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY29udGVudFRvVXNlID1cbiAgICAgICAgQ09OVEVOVF9UWVBFU1t0eXBlb2YgcHJvcHMuY2hpbGRyZW5dID8gcHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgICAgdmFyIGNoaWxkcmVuVG9Vc2UgPSBjb250ZW50VG9Vc2UgIT0gbnVsbCA/IG51bGwgOiBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIGlmIChjb250ZW50VG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKGNvbnRlbnRUb1VzZSk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkcmVuVG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICB2YXIgbW91bnRJbWFnZXMgPSB0aGlzLm1vdW50Q2hpbGRyZW4oXG4gICAgICAgICAgY2hpbGRyZW5Ub1VzZSxcbiAgICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgICBjb250ZXh0XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBtb3VudEltYWdlcy5qb2luKCcnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfSxcblxuICByZWNlaXZlQ29tcG9uZW50OiBmdW5jdGlvbihuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgcHJldkVsZW1lbnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudDtcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IG5leHRFbGVtZW50O1xuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KHRyYW5zYWN0aW9uLCBwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQsIGNvbnRleHQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgbmF0aXZlIERPTSBjb21wb25lbnQgYWZ0ZXIgaXQgaGFzIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQgYW5kXG4gICAqIGF0dGFjaGVkIHRvIHRoZSBET00uIFJlY29uY2lsZXMgdGhlIHJvb3QgRE9NIG5vZGUsIHRoZW4gcmVjdXJzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IHByZXZFbGVtZW50XG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICogQG92ZXJyaWRhYmxlXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uKHRyYW5zYWN0aW9uLCBwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQsIGNvbnRleHQpIHtcbiAgICBhc3NlcnRWYWxpZFByb3BzKHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzKTtcbiAgICB0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKHByZXZFbGVtZW50LnByb3BzLCB0cmFuc2FjdGlvbik7XG4gICAgdGhpcy5fdXBkYXRlRE9NQ2hpbGRyZW4ocHJldkVsZW1lbnQucHJvcHMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjb25jaWxlcyB0aGUgcHJvcGVydGllcyBieSBkZXRlY3RpbmcgZGlmZmVyZW5jZXMgaW4gcHJvcGVydHkgdmFsdWVzIGFuZFxuICAgKiB1cGRhdGluZyB0aGUgRE9NIGFzIG5lY2Vzc2FyeS4gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUgc2luZ2xlIG1vc3RcbiAgICogY3JpdGljYWwgcGF0aCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICAgKlxuICAgKiBUT0RPOiBCZW5jaG1hcmsgd2hldGhlciBjaGVja2luZyBmb3IgY2hhbmdlZCB2YWx1ZXMgaW4gbWVtb3J5IGFjdHVhbGx5XG4gICAqICAgICAgIGltcHJvdmVzIHBlcmZvcm1hbmNlIChlc3BlY2lhbGx5IHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50cykuXG4gICAqIFRPRE86IEJlbmNobWFyayB0aGUgZWZmZWN0cyBvZiBwdXR0aW5nIHRoaXMgYXQgdGhlIHRvcCBzaW5jZSA5OSUgb2YgcHJvcHNcbiAgICogICAgICAgZG8gbm90IGNoYW5nZSBmb3IgYSBnaXZlbiByZWNvbmNpbGlhdGlvbi5cbiAgICogVE9ETzogQmVuY2htYXJrIGFyZWFzIHRoYXQgY2FuIGJlIGltcHJvdmVkIHdpdGggY2FjaGluZy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGxhc3RQcm9wc1xuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqL1xuICBfdXBkYXRlRE9NUHJvcGVydGllczogZnVuY3Rpb24obGFzdFByb3BzLCB0cmFuc2FjdGlvbikge1xuICAgIHZhciBuZXh0UHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcbiAgICB2YXIgcHJvcEtleTtcbiAgICB2YXIgc3R5bGVOYW1lO1xuICAgIHZhciBzdHlsZVVwZGF0ZXM7XG4gICAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fFxuICAgICAgICAgIWxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICB2YXIgbGFzdFN0eWxlID0gdGhpcy5fcHJldmlvdXNTdHlsZUNvcHk7XG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RTdHlsZSkge1xuICAgICAgICAgIGlmIChsYXN0U3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0gc3R5bGVVcGRhdGVzIHx8IHt9O1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBkZWxldGVMaXN0ZW5lcih0aGlzLl9yb290Tm9kZUlELCBwcm9wS2V5KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbcHJvcEtleV0gfHxcbiAgICAgICAgICBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShwcm9wS2V5KSkge1xuICAgICAgICBCYWNrZW5kSURPcGVyYXRpb25zLmRlbGV0ZVByb3BlcnR5QnlJRChcbiAgICAgICAgICB0aGlzLl9yb290Tm9kZUlELFxuICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuICAgICAgdmFyIGxhc3RQcm9wID0gcHJvcEtleSA9PT0gU1RZTEUgP1xuICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA6XG4gICAgICAgIGxhc3RQcm9wc1twcm9wS2V5XTtcbiAgICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICBuZXh0UHJvcCA9IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gYXNzaWduKHt9LCBuZXh0UHJvcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNTdHlsZUNvcHkgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0UHJvcCkge1xuICAgICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0UHJvcCkge1xuICAgICAgICAgICAgaWYgKGxhc3RQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiZcbiAgICAgICAgICAgICAgICAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG4gICAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbmV4dFByb3ApIHtcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmXG4gICAgICAgICAgICAgICAgbGFzdFByb3Bbc3R5bGVOYW1lXSAhPT0gbmV4dFByb3Bbc3R5bGVOYW1lXSkge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gbmV4dFByb3Bbc3R5bGVOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG4gICAgICAgICAgc3R5bGVVcGRhdGVzID0gbmV4dFByb3A7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgcHV0TGlzdGVuZXIodGhpcy5fcm9vdE5vZGVJRCwgcHJvcEtleSwgbmV4dFByb3AsIHRyYW5zYWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgRE9NUHJvcGVydHkuaXNTdGFuZGFyZE5hbWVbcHJvcEtleV0gfHxcbiAgICAgICAgICBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShwcm9wS2V5KSkge1xuICAgICAgICBCYWNrZW5kSURPcGVyYXRpb25zLnVwZGF0ZVByb3BlcnR5QnlJRChcbiAgICAgICAgICB0aGlzLl9yb290Tm9kZUlELFxuICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgbmV4dFByb3BcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0eWxlVXBkYXRlcykge1xuICAgICAgQmFja2VuZElET3BlcmF0aW9ucy51cGRhdGVTdHlsZXNCeUlEKFxuICAgICAgICB0aGlzLl9yb290Tm9kZUlELFxuICAgICAgICBzdHlsZVVwZGF0ZXNcbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGVzIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSB2YXJpb3VzIHByb3BlcnRpZXMgdGhhdCBhZmZlY3QgdGhlXG4gICAqIGNoaWxkcmVuIGNvbnRlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXN0UHJvcHNcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKi9cbiAgX3VwZGF0ZURPTUNoaWxkcmVuOiBmdW5jdGlvbihsYXN0UHJvcHMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIG5leHRQcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuXG4gICAgdmFyIGxhc3RDb250ZW50ID1cbiAgICAgIENPTlRFTlRfVFlQRVNbdHlwZW9mIGxhc3RQcm9wcy5jaGlsZHJlbl0gPyBsYXN0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgIHZhciBuZXh0Q29udGVudCA9XG4gICAgICBDT05URU5UX1RZUEVTW3R5cGVvZiBuZXh0UHJvcHMuY2hpbGRyZW5dID8gbmV4dFByb3BzLmNoaWxkcmVuIDogbnVsbDtcblxuICAgIHZhciBsYXN0SHRtbCA9XG4gICAgICBsYXN0UHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgJiZcbiAgICAgIGxhc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG4gICAgdmFyIG5leHRIdG1sID1cbiAgICAgIG5leHRQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgbmV4dFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbDtcblxuICAgIC8vIE5vdGUgdGhlIHVzZSBvZiBgIT1gIHdoaWNoIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWQuXG4gICAgdmFyIGxhc3RDaGlsZHJlbiA9IGxhc3RDb250ZW50ICE9IG51bGwgPyBudWxsIDogbGFzdFByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0Q29udGVudCAhPSBudWxsID8gbnVsbCA6IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgIC8vIElmIHdlJ3JlIHN3aXRjaGluZyBmcm9tIGNoaWxkcmVuIHRvIGNvbnRlbnQvaHRtbCBvciB2aWNlIHZlcnNhLCByZW1vdmVcbiAgICAvLyB0aGUgb2xkIGNvbnRlbnRcbiAgICB2YXIgbGFzdEhhc0NvbnRlbnRPckh0bWwgPSBsYXN0Q29udGVudCAhPSBudWxsIHx8IGxhc3RIdG1sICE9IG51bGw7XG4gICAgdmFyIG5leHRIYXNDb250ZW50T3JIdG1sID0gbmV4dENvbnRlbnQgIT0gbnVsbCB8fCBuZXh0SHRtbCAhPSBudWxsO1xuICAgIGlmIChsYXN0Q2hpbGRyZW4gIT0gbnVsbCAmJiBuZXh0Q2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbihudWxsLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfSBlbHNlIGlmIChsYXN0SGFzQ29udGVudE9ySHRtbCAmJiAhbmV4dEhhc0NvbnRlbnRPckh0bWwpIHtcbiAgICAgIHRoaXMudXBkYXRlVGV4dENvbnRlbnQoJycpO1xuICAgIH1cblxuICAgIGlmIChuZXh0Q29udGVudCAhPSBudWxsKSB7XG4gICAgICBpZiAobGFzdENvbnRlbnQgIT09IG5leHRDb250ZW50KSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dENvbnRlbnQoJycgKyBuZXh0Q29udGVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7XG4gICAgICAgIEJhY2tlbmRJRE9wZXJhdGlvbnMudXBkYXRlSW5uZXJIVE1MQnlJRChcbiAgICAgICAgICB0aGlzLl9yb290Tm9kZUlELFxuICAgICAgICAgIG5leHRIdG1sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0Q2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgdGhpcy51cGRhdGVDaGlsZHJlbihuZXh0Q2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFsbCBldmVudCByZWdpc3RyYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLiBEb2VzIG5vdCByZW1vdmUgZnJvbVxuICAgKiB0aGUgRE9NLiBUaGF0IG11c3QgYmUgZG9uZSBieSB0aGUgcGFyZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudW5tb3VudENoaWxkcmVuKCk7XG4gICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmRlbGV0ZUFsbExpc3RlbmVycyh0aGlzLl9yb290Tm9kZUlEKTtcbiAgICBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudC51bm1vdW50SURGcm9tRW52aXJvbm1lbnQodGhpcy5fcm9vdE5vZGVJRCk7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG4gIH1cblxufTtcblxuUmVhY3RQZXJmLm1lYXN1cmVNZXRob2RzKFJlYWN0RE9NQ29tcG9uZW50LCAnUmVhY3RET01Db21wb25lbnQnLCB7XG4gIG1vdW50Q29tcG9uZW50OiAnbW91bnRDb21wb25lbnQnLFxuICB1cGRhdGVDb21wb25lbnQ6ICd1cGRhdGVDb21wb25lbnQnXG59KTtcblxuYXNzaWduKFxuICBSZWFjdERPTUNvbXBvbmVudC5wcm90b3R5cGUsXG4gIFJlYWN0RE9NQ29tcG9uZW50Lk1peGluLFxuICBSZWFjdE11bHRpQ2hpbGQuTWl4aW5cbik7XG5cblJlYWN0RE9NQ29tcG9uZW50LmluamVjdGlvbiA9IHtcbiAgaW5qZWN0SURPcGVyYXRpb25zOiBmdW5jdGlvbihJRE9wZXJhdGlvbnMpIHtcbiAgICBSZWFjdERPTUNvbXBvbmVudC5CYWNrZW5kSURPcGVyYXRpb25zID0gQmFja2VuZElET3BlcmF0aW9ucyA9IElET3BlcmF0aW9ucztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUNvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JFVDAxRGIyMXdiMjVsYm5RdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwWEc0Z0tpQkFkSGx3WldOb1pXTnJjeUJ6ZEdGMGFXTXRiMjVzZVZ4dUlDb3ZYRzVjYmk4cUlHZHNiMkpoYkNCb1lYTlBkMjVRY205d1pYSjBlVHAwY25WbElDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlFTlRVMUJ5YjNCbGNuUjVUM0JsY21GMGFXOXVjeUE5SUhKbGNYVnBjbVVvWENJdUwwTlRVMUJ5YjNCbGNuUjVUM0JsY21GMGFXOXVjMXdpS1R0Y2JuWmhjaUJFVDAxUWNtOXdaWEowZVNBOUlISmxjWFZwY21Vb1hDSXVMMFJQVFZCeWIzQmxjblI1WENJcE8xeHVkbUZ5SUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWMxd2lLVHRjYm5aaGNpQlNaV0ZqZEVKeWIzZHpaWEpGZG1WdWRFVnRhWFIwWlhJZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFSnliM2R6WlhKRmRtVnVkRVZ0YVhSMFpYSmNJaWs3WEc1MllYSWdVbVZoWTNSRGIyMXdiMjVsYm5SQ2NtOTNjMlZ5Ulc1MmFYSnZibTFsYm5RZ1BWeHVJQ0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU52YlhCdmJtVnVkRUp5YjNkelpYSkZiblpwY205dWJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFMXZkVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSTmIzVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFMTFiSFJwUTJocGJHUWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTExYkhScFEyaHBiR1JjSWlrN1hHNTJZWElnVW1WaFkzUlFaWEptSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSUVpYSm1YQ0lwTzF4dVhHNTJZWElnWVhOemFXZHVJRDBnY21WeGRXbHlaU2hjSWk0dlQySnFaV04wTG1GemMybG5ibHdpS1R0Y2JuWmhjaUJsYzJOaGNHVlVaWGgwUTI5dWRHVnVkRVp2Y2tKeWIzZHpaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOWxjMk5oY0dWVVpYaDBRMjl1ZEdWdWRFWnZja0p5YjNkelpYSmNJaWs3WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1ZG1GeUlHbHpSWFpsYm5SVGRYQndiM0owWldRZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYzBWMlpXNTBVM1Z3Y0c5eWRHVmtYQ0lwTzF4dWRtRnlJR3RsZVU5bUlEMGdjbVZ4ZFdseVpTaGNJaTR2YTJWNVQyWmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNiblpoY2lCa1pXeGxkR1ZNYVhOMFpXNWxjaUE5SUZKbFlXTjBRbkp2ZDNObGNrVjJaVzUwUlcxcGRIUmxjaTVrWld4bGRHVk1hWE4wWlc1bGNqdGNiblpoY2lCc2FYTjBaVzVVYnlBOUlGSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2k1c2FYTjBaVzVVYnp0Y2JuWmhjaUJ5WldkcGMzUnlZWFJwYjI1T1lXMWxUVzlrZFd4bGN5QTlJRkpsWVdOMFFuSnZkM05sY2tWMlpXNTBSVzFwZEhSbGNpNXlaV2RwYzNSeVlYUnBiMjVPWVcxbFRXOWtkV3hsY3p0Y2JseHVMeThnUm05eUlIRjFhV05yYkhrZ2JXRjBZMmhwYm1jZ1kyaHBiR1J5Wlc0Z2RIbHdaU3dnZEc4Z2RHVnpkQ0JwWmlCallXNGdZbVVnZEhKbFlYUmxaQ0JoY3lCamIyNTBaVzUwTGx4dWRtRnlJRU5QVGxSRlRsUmZWRmxRUlZNZ1BTQjdKM04wY21sdVp5YzZJSFJ5ZFdVc0lDZHVkVzFpWlhJbk9pQjBjblZsZlR0Y2JseHVkbUZ5SUZOVVdVeEZJRDBnYTJWNVQyWW9lM04wZVd4bE9pQnVkV3hzZlNrN1hHNWNiblpoY2lCRlRFVk5SVTVVWDA1UFJFVmZWRmxRUlNBOUlERTdYRzVjYmk4cUtseHVJQ29nVDNCMGFXOXVZV3hzZVNCcGJtcGxZM1JoWW14bElHOXdaWEpoZEdsdmJuTWdabTl5SUcxMWRHRjBhVzVuSUhSb1pTQkVUMDFjYmlBcUwxeHVkbUZ5SUVKaFkydGxibVJKUkU5d1pYSmhkR2x2Ym5NZ1BTQnVkV3hzTzF4dVhHNHZLaXBjYmlBcUlFQndZWEpoYlNCN1AyOWlhbVZqZEgwZ2NISnZjSE5jYmlBcUwxeHVablZ1WTNScGIyNGdZWE56WlhKMFZtRnNhV1JRY205d2N5aHdjbTl3Y3lrZ2UxeHVJQ0JwWmlBb0lYQnliM0J6S1NCN1hHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNGdJQzh2SUU1dmRHVWdkR2hsSUhWelpTQnZaaUJnUFQxZ0lIZG9hV05vSUdOb1pXTnJjeUJtYjNJZ2JuVnNiQ0J2Y2lCMWJtUmxabWx1WldRdVhHNGdJR2xtSUNod2NtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRDQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUhCeWIzQnpMbU5vYVd4a2NtVnVJRDA5SUc1MWJHd3NYRzRnSUNBZ0lDQW5RMkZ1SUc5dWJIa2djMlYwSUc5dVpTQnZaaUJnWTJocGJHUnlaVzVnSUc5eUlHQndjbTl3Y3k1a1lXNW5aWEp2ZFhOc2VWTmxkRWx1Ym1WeVNGUk5UR0F1SjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2NISnZjSE11WTJocGJHUnlaVzRnUFQwZ2JuVnNiQ2twTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQjBlWEJsYjJZZ2NISnZjSE11WkdGdVoyVnliM1Z6YkhsVFpYUkpibTVsY2toVVRVd2dQVDA5SUNkdlltcGxZM1FuSUNZbVhHNGdJQ0FnSUNBblgxOW9kRzFzSnlCcGJpQndjbTl3Y3k1a1lXNW5aWEp2ZFhOc2VWTmxkRWx1Ym1WeVNGUk5UQ3hjYmlBZ0lDQWdJQ2RnY0hKdmNITXVaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV4Z0lHMTFjM1FnWW1VZ2FXNGdkR2hsSUdadmNtMGdZSHRmWDJoMGJXdzZJQzR1TG4xZ0xpQW5JQ3RjYmlBZ0lDQWdJQ2RRYkdWaGMyVWdkbWx6YVhRZ2FIUjBjSE02THk5bVlpNXRaUzl5WldGamRDMXBiblpoY21saGJuUXRaR0Z1WjJWeWIzVnpiSGt0YzJWMExXbHVibVZ5TFdoMGJXd2dKeUFyWEc0Z0lDQWdJQ0FuWm05eUlHMXZjbVVnYVc1bWIzSnRZWFJwYjI0dUoxeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9kSGx3Wlc5bUlIQnliM0J6TG1SaGJtZGxjbTkxYzJ4NVUyVjBTVzV1WlhKSVZFMU1JRDA5UFNBbmIySnFaV04wSnlBbUpseHVJQ0FnSUNkZlgyaDBiV3duSUdsdUlIQnliM0J6TG1SaGJtZGxjbTkxYzJ4NVUyVjBTVzV1WlhKSVZFMU1LU2s3WEc0Z0lIMWNiaUFnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2NISnZjSE11YVc1dVpYSklWRTFNSUQwOUlHNTFiR3dzWEc0Z0lDQWdJQ0FuUkdseVpXTjBiSGtnYzJWMGRHbHVaeUJ3Y205d1pYSjBlU0JnYVc1dVpYSklWRTFNWUNCcGN5QnViM1FnY0dWeWJXbDBkR1ZrTGlBbklDdGNiaUFnSUNBZ0lDZEdiM0lnYlc5eVpTQnBibVp2Y20xaGRHbHZiaXdnYkc5dmEzVndJR1J2WTNWdFpXNTBZWFJwYjI0Z2IyNGdZR1JoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTVlDNG5YRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJWEJ5YjNCekxtTnZiblJsYm5SRlpHbDBZV0pzWlNCOGZDQndjbTl3Y3k1amFHbHNaSEpsYmlBOVBTQnVkV3hzTEZ4dUlDQWdJQ0FnSjBFZ1kyOXRjRzl1Wlc1MElHbHpJR0JqYjI1MFpXNTBSV1JwZEdGaWJHVmdJR0Z1WkNCamIyNTBZV2x1Y3lCZ1kyaHBiR1J5Wlc1Z0lHMWhibUZuWldRZ1lua2dKeUFyWEc0Z0lDQWdJQ0FuVW1WaFkzUXVJRWwwSUdseklHNXZkeUI1YjNWeUlISmxjM0J2Ym5OcFltbHNhWFI1SUhSdklHZDFZWEpoYm5SbFpTQjBhR0YwSUc1dmJtVWdiMllnSnlBclhHNGdJQ0FnSUNBbmRHaHZjMlVnYm05a1pYTWdZWEpsSUhWdVpYaHdaV04wWldSc2VTQnRiMlJwWm1sbFpDQnZjaUJrZFhCc2FXTmhkR1ZrTGlCVWFHbHpJR2x6SUNjZ0sxeHVJQ0FnSUNBZ0ozQnliMkpoWW14NUlHNXZkQ0JwYm5SbGJuUnBiMjVoYkM0blhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQjlYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdjSEp2Y0hNdWMzUjViR1VnUFQwZ2JuVnNiQ0I4ZkNCMGVYQmxiMllnY0hKdmNITXVjM1I1YkdVZ1BUMDlJQ2R2WW1wbFkzUW5MRnh1SUNBZ0lDZFVhR1VnWUhOMGVXeGxZQ0J3Y205d0lHVjRjR1ZqZEhNZ1lTQnRZWEJ3YVc1bklHWnliMjBnYzNSNWJHVWdjSEp2Y0dWeWRHbGxjeUIwYnlCMllXeDFaWE1zSUNjZ0sxeHVJQ0FnSUNkdWIzUWdZU0J6ZEhKcGJtY3VJRVp2Y2lCbGVHRnRjR3hsTENCemRIbHNaVDE3ZTIxaGNtZHBibEpwWjJoME9pQnpjR0ZqYVc1bklDc2dYRnduWlcxY1hDZDlmU0IzYUdWdUlDY2dLMXh1SUNBZ0lDZDFjMmx1WnlCS1UxZ3VKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLSEJ5YjNCekxuTjBlV3hsSUQwOUlHNTFiR3dnZkh3Z2RIbHdaVzltSUhCeWIzQnpMbk4wZVd4bElEMDlQU0FuYjJKcVpXTjBKeWtwTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJ3ZFhSTWFYTjBaVzVsY2locFpDd2djbVZuYVhOMGNtRjBhVzl1VG1GdFpTd2diR2x6ZEdWdVpYSXNJSFJ5WVc1ellXTjBhVzl1S1NCN1hHNGdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQXZMeUJKUlRnZ2FHRnpJRzV2SUVGUVNTQm1iM0lnWlhabGJuUWdZMkZ3ZEhWeWFXNW5JR0Z1WkNCMGFHVWdZRzl1VTJOeWIyeHNZQ0JsZG1WdWRDQmtiMlZ6YmlkMFhHNGdJQ0FnTHk4Z1luVmlZbXhsTGx4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2NtVm5hWE4wY21GMGFXOXVUbUZ0WlNBaFBUMGdKMjl1VTJOeWIyeHNKeUI4ZkNCcGMwVjJaVzUwVTNWd2NHOXlkR1ZrS0NkelkzSnZiR3duTENCMGNuVmxLU3hjYmlBZ0lDQWdJQ2RVYUdseklHSnliM2R6WlhJZ1pHOWxjMjVjWENkMElITjFjSEJ2Y25RZ2RHaGxJR0J2YmxOamNtOXNiR0FnWlhabGJuUW5YRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0I5WEc0Z0lIWmhjaUJqYjI1MFlXbHVaWElnUFNCU1pXRmpkRTF2ZFc1MExtWnBibVJTWldGamRFTnZiblJoYVc1bGNrWnZja2xFS0dsa0tUdGNiaUFnYVdZZ0tHTnZiblJoYVc1bGNpa2dlMXh1SUNBZ0lIWmhjaUJrYjJNZ1BTQmpiMjUwWVdsdVpYSXVibTlrWlZSNWNHVWdQVDA5SUVWTVJVMUZUbFJmVGs5RVJWOVVXVkJGSUQ5Y2JpQWdJQ0FnSUdOdmJuUmhhVzVsY2k1dmQyNWxja1J2WTNWdFpXNTBJRHBjYmlBZ0lDQWdJR052Ym5SaGFXNWxjanRjYmlBZ0lDQnNhWE4wWlc1VWJ5aHlaV2RwYzNSeVlYUnBiMjVPWVcxbExDQmtiMk1wTzF4dUlDQjlYRzRnSUhSeVlXNXpZV04wYVc5dUxtZGxkRkIxZEV4cGMzUmxibVZ5VVhWbGRXVW9LUzVsYm5GMVpYVmxVSFYwVEdsemRHVnVaWElvWEc0Z0lDQWdhV1FzWEc0Z0lDQWdjbVZuYVhOMGNtRjBhVzl1VG1GdFpTeGNiaUFnSUNCc2FYTjBaVzVsY2x4dUlDQXBPMXh1ZlZ4dVhHNHZMeUJHYjNJZ1NGUk5UQ3dnWTJWeWRHRnBiaUIwWVdkeklITm9iM1ZzWkNCdmJXbDBJSFJvWldseUlHTnNiM05sSUhSaFp5NGdWMlVnYTJWbGNDQmhJSGRvYVhSbGJHbHpkQ0JtYjNKY2JpOHZJSFJvYjNObElITndaV05wWVd3Z1kyRnpaV1FnZEdGbmN5NWNibHh1ZG1GeUlHOXRhWFIwWldSRGJHOXpaVlJoWjNNZ1BTQjdYRzRnSUNkaGNtVmhKem9nZEhKMVpTeGNiaUFnSjJKaGMyVW5PaUIwY25WbExGeHVJQ0FuWW5Jbk9pQjBjblZsTEZ4dUlDQW5ZMjlzSnpvZ2RISjFaU3hjYmlBZ0oyVnRZbVZrSnpvZ2RISjFaU3hjYmlBZ0oyaHlKem9nZEhKMVpTeGNiaUFnSjJsdFp5YzZJSFJ5ZFdVc1hHNGdJQ2RwYm5CMWRDYzZJSFJ5ZFdVc1hHNGdJQ2RyWlhsblpXNG5PaUIwY25WbExGeHVJQ0FuYkdsdWF5YzZJSFJ5ZFdVc1hHNGdJQ2R0WlhSaEp6b2dkSEoxWlN4Y2JpQWdKM0JoY21GdEp6b2dkSEoxWlN4Y2JpQWdKM052ZFhKalpTYzZJSFJ5ZFdVc1hHNGdJQ2QwY21GamF5YzZJSFJ5ZFdVc1hHNGdJQ2QzWW5Jbk9pQjBjblZsWEc0Z0lDOHZJRTVQVkVVNklHMWxiblZwZEdWdEozTWdZMnh2YzJVZ2RHRm5JSE5vYjNWc1pDQmlaU0J2YldsMGRHVmtMQ0JpZFhRZ2RHaGhkQ0JqWVhWelpYTWdjSEp2WW14bGJYTXVYRzU5TzF4dVhHNHZMeUJYWlNCaFkyTmxjSFFnWVc1NUlIUmhaeUIwYnlCaVpTQnlaVzVrWlhKbFpDQmlkWFFnYzJsdVkyVWdkR2hwY3lCblpYUnpJR2x1YW1WamRHVmtJR2x1ZEc4Z1lXSnBkSEpoY25sY2JpOHZJRWhVVFV3c0lIZGxJSGRoYm5RZ2RHOGdiV0ZyWlNCemRYSmxJSFJvWVhRZ2FYUW5jeUJoSUhOaFptVWdkR0ZuTGx4dUx5OGdhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZWRkl2VWtWRExYaHRiQzhqVGxRdFRtRnRaVnh1WEc1MllYSWdWa0ZNU1VSZlZFRkhYMUpGUjBWWUlEMGdMMTViWVMxNlFTMWFYVnRoTFhwQkxWbzZYMXhjTGx4Y0xWeGNaRjBxSkM4N0lDOHZJRk5wYlhCc2FXWnBaV1FnYzNWaWMyVjBYRzUyWVhJZ2RtRnNhV1JoZEdWa1ZHRm5RMkZqYUdVZ1BTQjdmVHRjYm5aaGNpQm9ZWE5QZDI1UWNtOXdaWEowZVNBOUlIdDlMbWhoYzA5M2JsQnliM0JsY25SNU8xeHVYRzVtZFc1amRHbHZiaUIyWVd4cFpHRjBaVVJoYm1kbGNtOTFjMVJoWnloMFlXY3BJSHRjYmlBZ2FXWWdLQ0ZvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0haaGJHbGtZWFJsWkZSaFowTmhZMmhsTENCMFlXY3BLU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaFdRVXhKUkY5VVFVZGZVa1ZIUlZndWRHVnpkQ2gwWVdjcExDQW5TVzUyWVd4cFpDQjBZV2M2SUNWekp5d2dkR0ZuS1NBNklHbHVkbUZ5YVdGdWRDaFdRVXhKUkY5VVFVZGZVa1ZIUlZndWRHVnpkQ2gwWVdjcEtTazdYRzRnSUNBZ2RtRnNhV1JoZEdWa1ZHRm5RMkZqYUdWYmRHRm5YU0E5SUhSeWRXVTdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0VnYm1WM0lGSmxZV04wSUdOc1lYTnpJSFJvWVhRZ2FYTWdhV1JsYlhCdmRHVnVkQ0JoYm1RZ1kyRndZV0pzWlNCdlppQmpiMjUwWVdsdWFXNW5JRzkwYUdWeVhHNGdLaUJTWldGamRDQmpiMjF3YjI1bGJuUnpMaUJKZENCaFkyTmxjSFJ6SUdWMlpXNTBJR3hwYzNSbGJtVnljeUJoYm1RZ1JFOU5JSEJ5YjNCbGNuUnBaWE1nZEdoaGRDQmhjbVZjYmlBcUlIWmhiR2xrSUdGalkyOXlaR2x1WnlCMGJ5QmdSRTlOVUhKdmNHVnlkSGxnTGx4dUlDcGNiaUFxSUNBdElFVjJaVzUwSUd4cGMzUmxibVZ5Y3pvZ1lHOXVRMnhwWTJ0Z0xDQmdiMjVOYjNWelpVUnZkMjVnTENCbGRHTXVYRzRnS2lBZ0xTQkVUMDBnY0hKdmNHVnlkR2xsY3pvZ1lHTnNZWE56VG1GdFpXQXNJR0J1WVcxbFlDd2dZSFJwZEd4bFlDd2daWFJqTGx4dUlDcGNiaUFxSUZSb1pTQmdjM1I1YkdWZ0lIQnliM0JsY25SNUlHWjFibU4wYVc5dWN5QmthV1ptWlhKbGJuUnNlU0JtY205dElIUm9aU0JFVDAwZ1FWQkpMaUJKZENCaFkyTmxjSFJ6SUdGdVhHNGdLaUJ2WW1wbFkzUWdiV0Z3Y0dsdVp5QnZaaUJ6ZEhsc1pTQndjbTl3WlhKMGFXVnpJSFJ2SUhaaGJIVmxjeTVjYmlBcVhHNGdLaUJBWTI5dWMzUnlkV04wYjNJZ1VtVmhZM1JFVDAxRGIyMXdiMjVsYm5SY2JpQXFJRUJsZUhSbGJtUnpJRkpsWVdOMFRYVnNkR2xEYUdsc1pGeHVJQ292WEc1bWRXNWpkR2x2YmlCU1pXRmpkRVJQVFVOdmJYQnZibVZ1ZENoMFlXY3BJSHRjYmlBZ2RtRnNhV1JoZEdWRVlXNW5aWEp2ZFhOVVlXY29kR0ZuS1R0Y2JpQWdkR2hwY3k1ZmRHRm5JRDBnZEdGbk8xeHVJQ0IwYUdsekxsOXlaVzVrWlhKbFpFTm9hV3hrY21WdUlEMGdiblZzYkR0Y2JpQWdkR2hwY3k1ZmNISmxkbWx2ZFhOVGRIbHNaVU52Y0hrZ1BTQnVkV3hzTzF4dUlDQjBhR2x6TGw5eWIyOTBUbTlrWlVsRUlEMGdiblZzYkR0Y2JuMWNibHh1VW1WaFkzUkVUMDFEYjIxd2IyNWxiblF1WkdsemNHeGhlVTVoYldVZ1BTQW5VbVZoWTNSRVQwMURiMjF3YjI1bGJuUW5PMXh1WEc1U1pXRmpkRVJQVFVOdmJYQnZibVZ1ZEM1TmFYaHBiaUE5SUh0Y2JseHVJQ0JqYjI1emRISjFZM1E2SUdaMWJtTjBhVzl1S0dWc1pXMWxiblFwSUh0Y2JpQWdJQ0IwYUdsekxsOWpkWEp5Wlc1MFJXeGxiV1Z1ZENBOUlHVnNaVzFsYm5RN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRWRsYm1WeVlYUmxjeUJ5YjI5MElIUmhaeUJ0WVhKcmRYQWdkR2hsYmlCeVpXTjFjbk5sY3k0Z1ZHaHBjeUJ0WlhSb2IyUWdhR0Z6SUhOcFpHVWdaV1ptWldOMGN5QmhibVJjYmlBZ0lDb2dhWE1nYm05MElHbGtaVzF3YjNSbGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjbTl2ZEVsRUlGUm9aU0J5YjI5MElFUlBUU0JKUkNCbWIzSWdkR2hwY3lCdWIyUmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI1OFVtVmhZM1JUWlhKMlpYSlNaVzVrWlhKcGJtZFVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JVYUdVZ1kyOXRjSFYwWldRZ2JXRnlhM1Z3TGx4dUlDQWdLaTljYmlBZ2JXOTFiblJEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0hKdmIzUkpSQ3dnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcElIdGNiaUFnSUNCMGFHbHpMbDl5YjI5MFRtOWtaVWxFSUQwZ2NtOXZkRWxFTzF4dUlDQWdJR0Z6YzJWeWRGWmhiR2xrVUhKdmNITW9kR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1Y0hKdmNITXBPMXh1SUNBZ0lIWmhjaUJqYkc5elpWUmhaeUE5SUc5dGFYUjBaV1JEYkc5elpWUmhaM05iZEdocGN5NWZkR0ZuWFNBL0lDY25JRG9nSnp3dkp5QXJJSFJvYVhNdVgzUmhaeUFySUNjK0p6dGNiaUFnSUNCeVpYUjFjbTRnS0Z4dUlDQWdJQ0FnZEdocGN5NWZZM0psWVhSbFQzQmxibFJoWjAxaGNtdDFjRUZ1WkZCMWRFeHBjM1JsYm1WeWN5aDBjbUZ1YzJGamRHbHZiaWtnSzF4dUlDQWdJQ0FnZEdocGN5NWZZM0psWVhSbFEyOXVkR1Z1ZEUxaGNtdDFjQ2gwY21GdWMyRmpkR2x2Yml3Z1kyOXVkR1Y0ZENrZ0sxeHVJQ0FnSUNBZ1kyeHZjMlZVWVdkY2JpQWdJQ0FwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdWeklHMWhjbXQxY0NCbWIzSWdkR2hsSUc5d1pXNGdkR0ZuSUdGdVpDQmhiR3dnWVhSMGNtbGlkWFJsY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dWR2hwY3lCdFpYUm9iMlFnYUdGeklITnBaR1VnWldabVpXTjBjeUJpWldOaGRYTmxJR1YyWlc1MGN5Qm5aWFFnY21WbmFYTjBaWEpsWkM1Y2JpQWdJQ3BjYmlBZ0lDb2dTWFJsY21GMGFXNW5JRzkyWlhJZ2IySnFaV04wSUhCeWIzQmxjblJwWlhNZ2FYTWdabUZ6ZEdWeUlIUm9ZVzRnYVhSbGNtRjBhVzVuSUc5MlpYSWdZWEp5WVhsekxseHVJQ0FnS2lCQWMyVmxJR2gwZEhBNkx5OXFjM0JsY21ZdVkyOXRMMjlpYWkxMmN5MWhjbkl0YVhSbGNtRjBhVzl1WEc0Z0lDQXFYRzRnSUNBcUlFQndjbWwyWVhSbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibnhTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1WjFSeVlXNXpZV04wYVc5dWZTQjBjbUZ1YzJGamRHbHZibHh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlFMWhjbXQxY0NCdlppQnZjR1Z1YVc1bklIUmhaeTVjYmlBZ0lDb3ZYRzRnSUY5amNtVmhkR1ZQY0dWdVZHRm5UV0Z5YTNWd1FXNWtVSFYwVEdsemRHVnVaWEp6T2lCbWRXNWpkR2x2YmloMGNtRnVjMkZqZEdsdmJpa2dlMXh1SUNBZ0lIWmhjaUJ3Y205d2N5QTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTG5CeWIzQnpPMXh1SUNBZ0lIWmhjaUJ5WlhRZ1BTQW5QQ2NnS3lCMGFHbHpMbDkwWVdjN1hHNWNiaUFnSUNCbWIzSWdLSFpoY2lCd2NtOXdTMlY1SUdsdUlIQnliM0J6S1NCN1hHNGdJQ0FnSUNCcFppQW9JWEJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RtRnlJSEJ5YjNCV1lXeDFaU0E5SUhCeWIzQnpXM0J5YjNCTFpYbGRPMXh1SUNBZ0lDQWdhV1lnS0hCeWIzQldZV3gxWlNBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSEpsWjJsemRISmhkR2x2Yms1aGJXVk5iMlIxYkdWekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lIQjFkRXhwYzNSbGJtVnlLSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNJSEJ5YjNCTFpYa3NJSEJ5YjNCV1lXeDFaU3dnZEhKaGJuTmhZM1JwYjI0cE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEJ5YjNCTFpYa2dQVDA5SUZOVVdVeEZLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSEJ5YjNCV1lXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2Y0ZaaGJIVmxJRDBnZEdocGN5NWZjSEpsZG1sdmRYTlRkSGxzWlVOdmNIa2dQU0JoYzNOcFoyNG9lMzBzSUhCeWIzQnpMbk4wZVd4bEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2NISnZjRlpoYkhWbElEMGdRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6TG1OeVpXRjBaVTFoY210MWNFWnZjbE4wZVd4bGN5aHdjbTl3Vm1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhaaGNpQnRZWEpyZFhBZ1BWeHVJQ0FnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1VDNCbGNtRjBhVzl1Y3k1amNtVmhkR1ZOWVhKcmRYQkdiM0pRY205d1pYSjBlU2h3Y205d1MyVjVMQ0J3Y205d1ZtRnNkV1VwTzF4dUlDQWdJQ0FnSUNCcFppQW9iV0Z5YTNWd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnY21WMElDczlJQ2NnSnlBcklHMWhjbXQxY0R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFWnZjaUJ6ZEdGMGFXTWdjR0ZuWlhNc0lHNXZJRzVsWldRZ2RHOGdjSFYwSUZKbFlXTjBJRWxFSUdGdVpDQmphR1ZqYTNOMWJTNGdVMkYyWlhNZ2JHOTBjeUJ2Wmx4dUlDQWdJQzh2SUdKNWRHVnpMbHh1SUNBZ0lHbG1JQ2gwY21GdWMyRmpkR2x2Ymk1eVpXNWtaWEpVYjFOMFlYUnBZMDFoY210MWNDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlISmxkQ0FySUNjK0p6dGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdiV0Z5YTNWd1JtOXlTVVFnUFNCRVQwMVFjbTl3WlhKMGVVOXdaWEpoZEdsdmJuTXVZM0psWVhSbFRXRnlhM1Z3Um05eVNVUW9kR2hwY3k1ZmNtOXZkRTV2WkdWSlJDazdYRzRnSUNBZ2NtVjBkWEp1SUhKbGRDQXJJQ2NnSnlBcklHMWhjbXQxY0VadmNrbEVJQ3NnSno0bk8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEY21WaGRHVnpJRzFoY210MWNDQm1iM0lnZEdobElHTnZiblJsYm5RZ1ltVjBkMlZsYmlCMGFHVWdkR0ZuY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJ5YVhaaGRHVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1ZkZKbFlXTjBVMlZ5ZG1WeVVtVnVaR1Z5YVc1blZISmhibk5oWTNScGIyNTlJSFJ5WVc1ellXTjBhVzl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQmpiMjUwWlhoMFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMzBnUTI5dWRHVnVkQ0J0WVhKcmRYQXVYRzRnSUNBcUwxeHVJQ0JmWTNKbFlYUmxRMjl1ZEdWdWRFMWhjbXQxY0RvZ1puVnVZM1JwYjI0b2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnY0hKbFptbDRJRDBnSnljN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WDNSaFp5QTlQVDBnSjJ4cGMzUnBibWNuSUh4OFhHNGdJQ0FnSUNBZ0lIUm9hWE11WDNSaFp5QTlQVDBnSjNCeVpTY2dmSHhjYmlBZ0lDQWdJQ0FnZEdocGN5NWZkR0ZuSUQwOVBTQW5kR1Y0ZEdGeVpXRW5LU0I3WEc0Z0lDQWdJQ0F2THlCQlpHUWdZVzRnYVc1cGRHbGhiQ0J1Wlhkc2FXNWxJR0psWTJGMWMyVWdZbkp2ZDNObGNuTWdhV2R1YjNKbElIUm9aU0JtYVhKemRDQnVaWGRzYVc1bElHbHVYRzRnSUNBZ0lDQXZMeUJoSUR4c2FYTjBhVzVuUGl3Z1BIQnlaVDRzSUc5eUlEeDBaWGgwWVhKbFlUNGdZWE1nWVc0Z1hDSmhkWFJvYjNKcGJtY2dZMjl1ZG1WdWFXVnVZMlZjSWlBdExTQnpaV1ZjYmlBZ0lDQWdJQzh2SUdoMGRIQnpPaTh2YUhSdGJDNXpjR1ZqTG5kb1lYUjNaeTV2Y21jdmJYVnNkR2x3WVdkbEwzTjViblJoZUM1b2RHMXNJM0JoY25OcGJtY3RiV0ZwYmkxcGJtSnZaSGt1WEc0Z0lDQWdJQ0J3Y21WbWFYZ2dQU0FuWEZ4dUp6dGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdjSEp2Y0hNZ1BTQjBhR2x6TGw5amRYSnlaVzUwUld4bGJXVnVkQzV3Y205d2N6dGNibHh1SUNBZ0lDOHZJRWx1ZEdWdWRHbHZibUZzSUhWelpTQnZaaUFoUFNCMGJ5QmhkbTlwWkNCallYUmphR2x1WnlCNlpYSnZMMlpoYkhObExseHVJQ0FnSUhaaGNpQnBibTVsY2toVVRVd2dQU0J3Y205d2N5NWtZVzVuWlhKdmRYTnNlVk5sZEVsdWJtVnlTRlJOVER0Y2JpQWdJQ0JwWmlBb2FXNXVaWEpJVkUxTUlDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHbG1JQ2hwYm01bGNraFVUVXd1WDE5b2RHMXNJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSEJ5WldacGVDQXJJR2x1Ym1WeVNGUk5UQzVmWDJoMGJXdzdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhaaGNpQmpiMjUwWlc1MFZHOVZjMlVnUFZ4dUlDQWdJQ0FnSUNCRFQwNVVSVTVVWDFSWlVFVlRXM1I1Y0dWdlppQndjbTl3Y3k1amFHbHNaSEpsYmwwZ1B5QndjbTl3Y3k1amFHbHNaSEpsYmlBNklHNTFiR3c3WEc0Z0lDQWdJQ0IyWVhJZ1kyaHBiR1J5Wlc1VWIxVnpaU0E5SUdOdmJuUmxiblJVYjFWelpTQWhQU0J1ZFd4c0lEOGdiblZzYkNBNklIQnliM0J6TG1Ob2FXeGtjbVZ1TzF4dUlDQWdJQ0FnYVdZZ0tHTnZiblJsYm5SVWIxVnpaU0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y21WbWFYZ2dLeUJsYzJOaGNHVlVaWGgwUTI5dWRHVnVkRVp2Y2tKeWIzZHpaWElvWTI5dWRHVnVkRlJ2VlhObEtUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMmhwYkdSeVpXNVViMVZ6WlNBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ0YjNWdWRFbHRZV2RsY3lBOUlIUm9hWE11Ylc5MWJuUkRhR2xzWkhKbGJpaGNiaUFnSUNBZ0lDQWdJQ0JqYUdsc1pISmxibFJ2VlhObExGeHVJQ0FnSUNBZ0lDQWdJSFJ5WVc1ellXTjBhVzl1TEZ4dUlDQWdJQ0FnSUNBZ0lHTnZiblJsZUhSY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIQnlaV1pwZUNBcklHMXZkVzUwU1cxaFoyVnpMbXB2YVc0b0p5Y3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnY0hKbFptbDRPMXh1SUNCOUxGeHVYRzRnSUhKbFkyVnBkbVZEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0c1bGVIUkZiR1Z0Wlc1MExDQjBjbUZ1YzJGamRHbHZiaXdnWTI5dWRHVjRkQ2tnZTF4dUlDQWdJSFpoY2lCd2NtVjJSV3hsYldWdWRDQTlJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwTzF4dUlDQWdJSFJvYVhNdVgyTjFjbkpsYm5SRmJHVnRaVzUwSUQwZ2JtVjRkRVZzWlcxbGJuUTdYRzRnSUNBZ2RHaHBjeTUxY0dSaGRHVkRiMjF3YjI1bGJuUW9kSEpoYm5OaFkzUnBiMjRzSUhCeVpYWkZiR1Z0Wlc1MExDQnVaWGgwUld4bGJXVnVkQ3dnWTI5dWRHVjRkQ2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGVndaR0YwWlhNZ1lTQnVZWFJwZG1VZ1JFOU5JR052YlhCdmJtVnVkQ0JoWm5SbGNpQnBkQ0JvWVhNZ1lXeHlaV0ZrZVNCaVpXVnVJR0ZzYkc5allYUmxaQ0JoYm1SY2JpQWdJQ29nWVhSMFlXTm9aV1FnZEc4Z2RHaGxJRVJQVFM0Z1VtVmpiMjVqYVd4bGN5QjBhR1VnY205dmRDQkVUMDBnYm05a1pTd2dkR2hsYmlCeVpXTjFjbk5sY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dWZTQjBjbUZ1YzJGamRHbHZibHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUld4bGJXVnVkSDBnY0hKbGRrVnNaVzFsYm5SY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHNWxlSFJGYkdWdFpXNTBYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2lCQWIzWmxjbkpwWkdGaWJHVmNiaUFnSUNvdlhHNGdJSFZ3WkdGMFpVTnZiWEJ2Ym1WdWREb2dablZ1WTNScGIyNG9kSEpoYm5OaFkzUnBiMjRzSUhCeVpYWkZiR1Z0Wlc1MExDQnVaWGgwUld4bGJXVnVkQ3dnWTI5dWRHVjRkQ2tnZTF4dUlDQWdJR0Z6YzJWeWRGWmhiR2xrVUhKdmNITW9kR2hwY3k1ZlkzVnljbVZ1ZEVWc1pXMWxiblF1Y0hKdmNITXBPMXh1SUNBZ0lIUm9hWE11WDNWd1pHRjBaVVJQVFZCeWIzQmxjblJwWlhNb2NISmxka1ZzWlcxbGJuUXVjSEp2Y0hNc0lIUnlZVzV6WVdOMGFXOXVLVHRjYmlBZ0lDQjBhR2x6TGw5MWNHUmhkR1ZFVDAxRGFHbHNaSEpsYmlod2NtVjJSV3hsYldWdWRDNXdjbTl3Y3l3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pXTnZibU5wYkdWeklIUm9aU0J3Y205d1pYSjBhV1Z6SUdKNUlHUmxkR1ZqZEdsdVp5QmthV1ptWlhKbGJtTmxjeUJwYmlCd2NtOXdaWEowZVNCMllXeDFaWE1nWVc1a1hHNGdJQ0FxSUhWd1pHRjBhVzVuSUhSb1pTQkVUMDBnWVhNZ2JtVmpaWE56WVhKNUxpQlVhR2x6SUdaMWJtTjBhVzl1SUdseklIQnliMkpoWW14NUlIUm9aU0J6YVc1bmJHVWdiVzl6ZEZ4dUlDQWdLaUJqY21sMGFXTmhiQ0J3WVhSb0lHWnZjaUJ3WlhKbWIzSnRZVzVqWlNCdmNIUnBiV2w2WVhScGIyNHVYRzRnSUNBcVhHNGdJQ0FxSUZSUFJFODZJRUpsYm1Ob2JXRnlheUIzYUdWMGFHVnlJR05vWldOcmFXNW5JR1p2Y2lCamFHRnVaMlZrSUhaaGJIVmxjeUJwYmlCdFpXMXZjbmtnWVdOMGRXRnNiSGxjYmlBZ0lDb2dJQ0FnSUNBZ2FXMXdjbTkyWlhNZ2NHVnlabTl5YldGdVkyVWdLR1Z6Y0dWamFXRnNiSGtnYzNSaGRHbGpZV3hzZVNCd2IzTnBkR2x2Ym1Wa0lHVnNaVzFsYm5SektTNWNiaUFnSUNvZ1ZFOUVUem9nUW1WdVkyaHRZWEpySUhSb1pTQmxabVpsWTNSeklHOW1JSEIxZEhScGJtY2dkR2hwY3lCaGRDQjBhR1VnZEc5d0lITnBibU5sSURrNUpTQnZaaUJ3Y205d2MxeHVJQ0FnS2lBZ0lDQWdJQ0JrYnlCdWIzUWdZMmhoYm1kbElHWnZjaUJoSUdkcGRtVnVJSEpsWTI5dVkybHNhV0YwYVc5dUxseHVJQ0FnS2lCVVQwUlBPaUJDWlc1amFHMWhjbXNnWVhKbFlYTWdkR2hoZENCallXNGdZbVVnYVcxd2NtOTJaV1FnZDJsMGFDQmpZV05vYVc1bkxseHVJQ0FnS2x4dUlDQWdLaUJBY0hKcGRtRjBaVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ2JHRnpkRkJ5YjNCelhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ292WEc0Z0lGOTFjR1JoZEdWRVQwMVFjbTl3WlhKMGFXVnpPaUJtZFc1amRHbHZiaWhzWVhOMFVISnZjSE1zSUhSeVlXNXpZV04wYVc5dUtTQjdYRzRnSUNBZ2RtRnlJRzVsZUhSUWNtOXdjeUE5SUhSb2FYTXVYMk4xY25KbGJuUkZiR1Z0Wlc1MExuQnliM0J6TzF4dUlDQWdJSFpoY2lCd2NtOXdTMlY1TzF4dUlDQWdJSFpoY2lCemRIbHNaVTVoYldVN1hHNGdJQ0FnZG1GeUlITjBlV3hsVlhCa1lYUmxjenRjYmlBZ0lDQm1iM0lnS0hCeWIzQkxaWGtnYVc0Z2JHRnpkRkJ5YjNCektTQjdYRzRnSUNBZ0lDQnBaaUFvYm1WNGRGQnliM0J6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BJSHg4WEc0Z0lDQWdJQ0FnSUNBaGJHRnpkRkJ5YjNCekxtaGhjMDkzYmxCeWIzQmxjblI1S0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJwYm5WbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSEJ5YjNCTFpYa2dQVDA5SUZOVVdVeEZLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnNZWE4wVTNSNWJHVWdQU0IwYUdsekxsOXdjbVYyYVc5MWMxTjBlV3hsUTI5d2VUdGNiaUFnSUNBZ0lDQWdabTl5SUNoemRIbHNaVTVoYldVZ2FXNGdiR0Z6ZEZOMGVXeGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR3hoYzNSVGRIbHNaUzVvWVhOUGQyNVFjbTl3WlhKMGVTaHpkSGxzWlU1aGJXVXBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkSGxzWlZWd1pHRjBaWE1nUFNCemRIbHNaVlZ3WkdGMFpYTWdmSHdnZTMwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZEhsc1pWVndaR0YwWlhOYmMzUjViR1ZPWVcxbFhTQTlJQ2NuTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0IwYUdsekxsOXdjbVYyYVc5MWMxTjBlV3hsUTI5d2VTQTlJRzUxYkd3N1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tISmxaMmx6ZEhKaGRHbHZiazVoYldWTmIyUjFiR1Z6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCTFpYa3BLU0I3WEc0Z0lDQWdJQ0FnSUdSbGJHVjBaVXhwYzNSbGJtVnlLSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNJSEJ5YjNCTFpYa3BPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hjYmlBZ0lDQWdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVTNXBjMU4wWVc1a1lYSmtUbUZ0WlZ0d2NtOXdTMlY1WFNCOGZGeHVJQ0FnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1selEzVnpkRzl0UVhSMGNtbGlkWFJsS0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lFSmhZMnRsYm1SSlJFOXdaWEpoZEdsdmJuTXVaR1ZzWlhSbFVISnZjR1Z5ZEhsQ2VVbEVLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM0p2YjNST2IyUmxTVVFzWEc0Z0lDQWdJQ0FnSUNBZ2NISnZjRXRsZVZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0JtYjNJZ0tIQnliM0JMWlhrZ2FXNGdibVY0ZEZCeWIzQnpLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2JtVjRkRkJ5YjNBZ1BTQnVaWGgwVUhKdmNITmJjSEp2Y0V0bGVWMDdYRzRnSUNBZ0lDQjJZWElnYkdGemRGQnliM0FnUFNCd2NtOXdTMlY1SUQwOVBTQlRWRmxNUlNBL1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDNCeVpYWnBiM1Z6VTNSNWJHVkRiM0I1SURwY2JpQWdJQ0FnSUNBZ2JHRnpkRkJ5YjNCelczQnliM0JMWlhsZE8xeHVJQ0FnSUNBZ2FXWWdLQ0Z1WlhoMFVISnZjSE11YUdGelQzZHVVSEp2Y0dWeWRIa29jSEp2Y0V0bGVTa2dmSHdnYm1WNGRGQnliM0FnUFQwOUlHeGhjM1JRY205d0tTQjdYRzRnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0hCeWIzQkxaWGtnUFQwOUlGTlVXVXhGS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h1WlhoMFVISnZjQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lHNWxlSFJRY205d0lEMGdkR2hwY3k1ZmNISmxkbWx2ZFhOVGRIbHNaVU52Y0hrZ1BTQmhjM05wWjI0b2UzMHNJRzVsZUhSUWNtOXdLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbDl3Y21WMmFXOTFjMU4wZVd4bFEyOXdlU0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tHeGhjM1JRY205d0tTQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ZXNXpaWFFnYzNSNWJHVnpJRzl1SUdCc1lYTjBVSEp2Y0dBZ1luVjBJRzV2ZENCdmJpQmdibVY0ZEZCeWIzQmdMbHh1SUNBZ0lDQWdJQ0FnSUdadmNpQW9jM1I1YkdWT1lXMWxJR2x1SUd4aGMzUlFjbTl3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JHRnpkRkJ5YjNBdWFHRnpUM2R1VUhKdmNHVnlkSGtvYzNSNWJHVk9ZVzFsS1NBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDZ2hibVY0ZEZCeWIzQWdmSHdnSVc1bGVIUlFjbTl3TG1oaGMwOTNibEJ5YjNCbGNuUjVLSE4wZVd4bFRtRnRaU2twS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMGVXeGxWWEJrWVhSbGN5QTlJSE4wZVd4bFZYQmtZWFJsY3lCOGZDQjdmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1I1YkdWVmNHUmhkR1Z6VzNOMGVXeGxUbUZ0WlYwZ1BTQW5KenRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdWWEJrWVhSbElITjBlV3hsY3lCMGFHRjBJR05vWVc1blpXUWdjMmx1WTJVZ1lHeGhjM1JRY205d1lDNWNiaUFnSUNBZ0lDQWdJQ0JtYjNJZ0tITjBlV3hsVG1GdFpTQnBiaUJ1WlhoMFVISnZjQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0c1bGVIUlFjbTl3TG1oaGMwOTNibEJ5YjNCbGNuUjVLSE4wZVd4bFRtRnRaU2tnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1lYTjBVSEp2Y0Z0emRIbHNaVTVoYldWZElDRTlQU0J1WlhoMFVISnZjRnR6ZEhsc1pVNWhiV1ZkS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMGVXeGxWWEJrWVhSbGN5QTlJSE4wZVd4bFZYQmtZWFJsY3lCOGZDQjdmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1I1YkdWVmNHUmhkR1Z6VzNOMGVXeGxUbUZ0WlYwZ1BTQnVaWGgwVUhKdmNGdHpkSGxzWlU1aGJXVmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QlNaV3hwWlhNZ2IyNGdZSFZ3WkdGMFpWTjBlV3hsYzBKNVNVUmdJRzV2ZENCdGRYUmhkR2x1WnlCZ2MzUjViR1ZWY0dSaGRHVnpZQzVjYmlBZ0lDQWdJQ0FnSUNCemRIbHNaVlZ3WkdGMFpYTWdQU0J1WlhoMFVISnZjRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoeVpXZHBjM1J5WVhScGIyNU9ZVzFsVFc5a2RXeGxjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHdjbTl3UzJWNUtTa2dlMXh1SUNBZ0lDQWdJQ0J3ZFhSTWFYTjBaVzVsY2loMGFHbHpMbDl5YjI5MFRtOWtaVWxFTENCd2NtOXdTMlY1TENCdVpYaDBVSEp2Y0N3Z2RISmhibk5oWTNScGIyNHBPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hjYmlBZ0lDQWdJQ0FnSUNCRVQwMVFjbTl3WlhKMGVTNXBjMU4wWVc1a1lYSmtUbUZ0WlZ0d2NtOXdTMlY1WFNCOGZGeHVJQ0FnSUNBZ0lDQWdJRVJQVFZCeWIzQmxjblI1TG1selEzVnpkRzl0UVhSMGNtbGlkWFJsS0hCeWIzQkxaWGtwS1NCN1hHNGdJQ0FnSUNBZ0lFSmhZMnRsYm1SSlJFOXdaWEpoZEdsdmJuTXVkWEJrWVhSbFVISnZjR1Z5ZEhsQ2VVbEVLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVYM0p2YjNST2IyUmxTVVFzWEc0Z0lDQWdJQ0FnSUNBZ2NISnZjRXRsZVN4Y2JpQWdJQ0FnSUNBZ0lDQnVaWGgwVUhKdmNGeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCcFppQW9jM1I1YkdWVmNHUmhkR1Z6S1NCN1hHNGdJQ0FnSUNCQ1lXTnJaVzVrU1VSUGNHVnlZWFJwYjI1ekxuVndaR0YwWlZOMGVXeGxjMEo1U1VRb1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDNKdmIzUk9iMlJsU1VRc1hHNGdJQ0FnSUNBZ0lITjBlV3hsVlhCa1lYUmxjMXh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbFkyOXVZMmxzWlhNZ2RHaGxJR05vYVd4a2NtVnVJSGRwZEdnZ2RHaGxJSFpoY21sdmRYTWdjSEp2Y0dWeWRHbGxjeUIwYUdGMElHRm1abVZqZENCMGFHVmNiaUFnSUNvZ1kyaHBiR1J5Wlc0Z1kyOXVkR1Z1ZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlHeGhjM1JRY205d2MxeHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU5SUhSeVlXNXpZV04wYVc5dVhHNGdJQ0FxTDF4dUlDQmZkWEJrWVhSbFJFOU5RMmhwYkdSeVpXNDZJR1oxYm1OMGFXOXVLR3hoYzNSUWNtOXdjeXdnZEhKaGJuTmhZM1JwYjI0c0lHTnZiblJsZUhRcElIdGNiaUFnSUNCMllYSWdibVY0ZEZCeWIzQnpJRDBnZEdocGN5NWZZM1Z5Y21WdWRFVnNaVzFsYm5RdWNISnZjSE03WEc1Y2JpQWdJQ0IyWVhJZ2JHRnpkRU52Ym5SbGJuUWdQVnh1SUNBZ0lDQWdRMDlPVkVWT1ZGOVVXVkJGVTF0MGVYQmxiMllnYkdGemRGQnliM0J6TG1Ob2FXeGtjbVZ1WFNBL0lHeGhjM1JRY205d2N5NWphR2xzWkhKbGJpQTZJRzUxYkd3N1hHNGdJQ0FnZG1GeUlHNWxlSFJEYjI1MFpXNTBJRDFjYmlBZ0lDQWdJRU5QVGxSRlRsUmZWRmxRUlZOYmRIbHdaVzltSUc1bGVIUlFjbTl3Y3k1amFHbHNaSEpsYmwwZ1B5QnVaWGgwVUhKdmNITXVZMmhwYkdSeVpXNGdPaUJ1ZFd4c08xeHVYRzRnSUNBZ2RtRnlJR3hoYzNSSWRHMXNJRDFjYmlBZ0lDQWdJR3hoYzNSUWNtOXdjeTVrWVc1blpYSnZkWE5zZVZObGRFbHVibVZ5U0ZSTlRDQW1KbHh1SUNBZ0lDQWdiR0Z6ZEZCeWIzQnpMbVJoYm1kbGNtOTFjMng1VTJWMFNXNXVaWEpJVkUxTUxsOWZhSFJ0YkR0Y2JpQWdJQ0IyWVhJZ2JtVjRkRWgwYld3Z1BWeHVJQ0FnSUNBZ2JtVjRkRkJ5YjNCekxtUmhibWRsY205MWMyeDVVMlYwU1c1dVpYSklWRTFNSUNZbVhHNGdJQ0FnSUNCdVpYaDBVSEp2Y0hNdVpHRnVaMlZ5YjNWemJIbFRaWFJKYm01bGNraFVUVXd1WDE5b2RHMXNPMXh1WEc0Z0lDQWdMeThnVG05MFpTQjBhR1VnZFhObElHOW1JR0FoUFdBZ2QyaHBZMmdnWTJobFkydHpJR1p2Y2lCdWRXeHNJRzl5SUhWdVpHVm1hVzVsWkM1Y2JpQWdJQ0IyWVhJZ2JHRnpkRU5vYVd4a2NtVnVJRDBnYkdGemRFTnZiblJsYm5RZ0lUMGdiblZzYkNBL0lHNTFiR3dnT2lCc1lYTjBVSEp2Y0hNdVkyaHBiR1J5Wlc0N1hHNGdJQ0FnZG1GeUlHNWxlSFJEYUdsc1pISmxiaUE5SUc1bGVIUkRiMjUwWlc1MElDRTlJRzUxYkd3Z1B5QnVkV3hzSURvZ2JtVjRkRkJ5YjNCekxtTm9hV3hrY21WdU8xeHVYRzRnSUNBZ0x5OGdTV1lnZDJVbmNtVWdjM2RwZEdOb2FXNW5JR1p5YjIwZ1kyaHBiR1J5Wlc0Z2RHOGdZMjl1ZEdWdWRDOW9kRzFzSUc5eUlIWnBZMlVnZG1WeWMyRXNJSEpsYlc5MlpWeHVJQ0FnSUM4dklIUm9aU0J2YkdRZ1kyOXVkR1Z1ZEZ4dUlDQWdJSFpoY2lCc1lYTjBTR0Z6UTI5dWRHVnVkRTl5U0hSdGJDQTlJR3hoYzNSRGIyNTBaVzUwSUNFOUlHNTFiR3dnZkh3Z2JHRnpkRWgwYld3Z0lUMGdiblZzYkR0Y2JpQWdJQ0IyWVhJZ2JtVjRkRWhoYzBOdmJuUmxiblJQY2toMGJXd2dQU0J1WlhoMFEyOXVkR1Z1ZENBaFBTQnVkV3hzSUh4OElHNWxlSFJJZEcxc0lDRTlJRzUxYkd3N1hHNGdJQ0FnYVdZZ0tHeGhjM1JEYUdsc1pISmxiaUFoUFNCdWRXeHNJQ1ltSUc1bGVIUkRhR2xzWkhKbGJpQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQjBhR2x6TG5Wd1pHRjBaVU5vYVd4a2NtVnVLRzUxYkd3c0lIUnlZVzV6WVdOMGFXOXVMQ0JqYjI1MFpYaDBLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR3hoYzNSSVlYTkRiMjUwWlc1MFQzSklkRzFzSUNZbUlDRnVaWGgwU0dGelEyOXVkR1Z1ZEU5eVNIUnRiQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NTFjR1JoZEdWVVpYaDBRMjl1ZEdWdWRDZ25KeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c1bGVIUkRiMjUwWlc1MElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHbG1JQ2hzWVhOMFEyOXVkR1Z1ZENBaFBUMGdibVY0ZEVOdmJuUmxiblFwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUxY0dSaGRHVlVaWGgwUTI5dWRHVnVkQ2duSnlBcklHNWxlSFJEYjI1MFpXNTBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzVsZUhSSWRHMXNJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJR2xtSUNoc1lYTjBTSFJ0YkNBaFBUMGdibVY0ZEVoMGJXd3BJSHRjYmlBZ0lDQWdJQ0FnUW1GamEyVnVaRWxFVDNCbGNtRjBhVzl1Y3k1MWNHUmhkR1ZKYm01bGNraFVUVXhDZVVsRUtGeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVgzSnZiM1JPYjJSbFNVUXNYRzRnSUNBZ0lDQWdJQ0FnYm1WNGRFaDBiV3hjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0c1bGVIUkRhR2xzWkhKbGJpQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQjBhR2x6TG5Wd1pHRjBaVU5vYVd4a2NtVnVLRzVsZUhSRGFHbHNaSEpsYml3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUkdWemRISnZlWE1nWVd4c0lHVjJaVzUwSUhKbFoybHpkSEpoZEdsdmJuTWdabTl5SUhSb2FYTWdhVzV6ZEdGdVkyVXVJRVJ2WlhNZ2JtOTBJSEpsYlc5MlpTQm1jbTl0WEc0Z0lDQXFJSFJvWlNCRVQwMHVJRlJvWVhRZ2JYVnpkQ0JpWlNCa2IyNWxJR0o1SUhSb1pTQndZWEpsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnZFc1dGIzVnVkRU52YlhCdmJtVnVkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZEdocGN5NTFibTF2ZFc1MFEyaHBiR1J5Wlc0b0tUdGNiaUFnSUNCU1pXRmpkRUp5YjNkelpYSkZkbVZ1ZEVWdGFYUjBaWEl1WkdWc1pYUmxRV3hzVEdsemRHVnVaWEp6S0hSb2FYTXVYM0p2YjNST2IyUmxTVVFwTzF4dUlDQWdJRkpsWVdOMFEyOXRjRzl1Wlc1MFFuSnZkM05sY2tWdWRtbHliMjV0Wlc1MExuVnViVzkxYm5SSlJFWnliMjFGYm5acGNtOXViV1Z1ZENoMGFHbHpMbDl5YjI5MFRtOWtaVWxFS1R0Y2JpQWdJQ0IwYUdsekxsOXliMjkwVG05a1pVbEVJRDBnYm5Wc2JEdGNiaUFnZlZ4dVhHNTlPMXh1WEc1U1pXRmpkRkJsY21ZdWJXVmhjM1Z5WlUxbGRHaHZaSE1vVW1WaFkzUkVUMDFEYjIxd2IyNWxiblFzSUNkU1pXRmpkRVJQVFVOdmJYQnZibVZ1ZENjc0lIdGNiaUFnYlc5MWJuUkRiMjF3YjI1bGJuUTZJQ2R0YjNWdWRFTnZiWEJ2Ym1WdWRDY3NYRzRnSUhWd1pHRjBaVU52YlhCdmJtVnVkRG9nSjNWd1pHRjBaVU52YlhCdmJtVnVkQ2RjYm4wcE8xeHVYRzVoYzNOcFoyNG9YRzRnSUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwTG5CeWIzUnZkSGx3WlN4Y2JpQWdVbVZoWTNSRVQwMURiMjF3YjI1bGJuUXVUV2w0YVc0c1hHNGdJRkpsWVdOMFRYVnNkR2xEYUdsc1pDNU5hWGhwYmx4dUtUdGNibHh1VW1WaFkzUkVUMDFEYjIxd2IyNWxiblF1YVc1cVpXTjBhVzl1SUQwZ2UxeHVJQ0JwYm1wbFkzUkpSRTl3WlhKaGRHbHZibk02SUdaMWJtTjBhVzl1S0VsRVQzQmxjbUYwYVc5dWN5a2dlMXh1SUNBZ0lGSmxZV04wUkU5TlEyOXRjRzl1Wlc1MExrSmhZMnRsYm1SSlJFOXdaWEpoZEdsdmJuTWdQU0JDWVdOclpXNWtTVVJQY0dWeVlYUnBiMjV6SUQwZ1NVUlBjR1Z5WVhScGIyNXpPMXh1SUNCOVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01Gb3JtXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBMb2NhbEV2ZW50VHJhcE1peGluID0gcmVxdWlyZShcIi4vTG9jYWxFdmVudFRyYXBNaXhpblwiKTtcbnZhciBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIGZvcm0gPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnZm9ybScpO1xuXG4vKipcbiAqIFNpbmNlIG9uU3VibWl0IGRvZXNuJ3QgYnViYmxlIE9SIGNhcHR1cmUgb24gdGhlIHRvcCBsZXZlbCBpbiBJRTgsIHdlIG5lZWRcbiAqIHRvIGNhcHR1cmUgaXQgb24gdGhlIDxmb3JtPiBlbGVtZW50IGl0c2VsZi4gVGhlcmUgYXJlIGxvdHMgb2YgaGFja3Mgd2UgY291bGRcbiAqIGRvIHRvIGFjY29tcGxpc2ggdGhpcywgYnV0IHRoZSBtb3N0IHJlbGlhYmxlIGlzIHRvIG1ha2UgPGZvcm0+IGFcbiAqIGNvbXBvc2l0ZSBjb21wb25lbnQgYW5kIHVzZSBgY29tcG9uZW50RGlkTW91bnRgIHRvIGF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlcnMuXG4gKi9cbnZhciBSZWFjdERPTUZvcm0gPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTUZvcm0nLFxuICB0YWdOYW1lOiAnRk9STScsXG5cbiAgbWl4aW5zOiBbUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4sIExvY2FsRXZlbnRUcmFwTWl4aW5dLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgLy8gVE9ETzogSW5zdGVhZCBvZiB1c2luZyBgUmVhY3RET01gIGRpcmVjdGx5LCB3ZSBzaG91bGQgdXNlIEpTWC4gSG93ZXZlcixcbiAgICAvLyBganNoaW50YCBmYWlscyB0byBwYXJzZSBKU1ggc28gaW4gb3JkZXIgZm9yIGxpbnRpbmcgdG8gd29yayBpbiB0aGUgb3BlblxuICAgIC8vIHNvdXJjZSByZXBvLCB3ZSBuZWVkIHRvIGp1c3QgdXNlIGBSZWFjdERPTS5mb3JtYC5cbiAgICByZXR1cm4gZm9ybSh0aGlzLnByb3BzKTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50cmFwQnViYmxlZEV2ZW50KEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXMudG9wUmVzZXQsICdyZXNldCcpO1xuICAgIHRoaXMudHJhcEJ1YmJsZWRFdmVudChFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzLnRvcFN1Ym1pdCwgJ3N1Ym1pdCcpO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUZvcm07XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NSURPcGVyYXRpb25zXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbi8qanNsaW50IGV2aWw6IHRydWUgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ1NTUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZShcIi4vQ1NTUHJvcGVydHlPcGVyYXRpb25zXCIpO1xudmFyIERPTUNoaWxkcmVuT3BlcmF0aW9ucyA9IHJlcXVpcmUoXCIuL0RPTUNoaWxkcmVuT3BlcmF0aW9uc1wiKTtcbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHNldElubmVySFRNTCA9IHJlcXVpcmUoXCIuL3NldElubmVySFRNTFwiKTtcblxuLyoqXG4gKiBFcnJvcnMgZm9yIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGJlIHVwZGF0ZWQgd2l0aCBgdXBkYXRlUHJvcGVydHlCeUlkKClgLlxuICpcbiAqIEB0eXBlIHtvYmplY3R9XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgSU5WQUxJRF9QUk9QRVJUWV9FUlJPUlMgPSB7XG4gIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOlxuICAgICdgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgc2V0IHVzaW5nIGB1cGRhdGVJbm5lckhUTUxCeUlEKClgLicsXG4gIHN0eWxlOiAnYHN0eWxlYCBtdXN0IGJlIHNldCB1c2luZyBgdXBkYXRlU3R5bGVzQnlJRCgpYC4nXG59O1xuXG4vKipcbiAqIE9wZXJhdGlvbnMgdXNlZCB0byBwcm9jZXNzIHVwZGF0ZXMgdG8gRE9NIG5vZGVzLiBUaGlzIGlzIG1hZGUgaW5qZWN0YWJsZSB2aWFcbiAqIGBSZWFjdERPTUNvbXBvbmVudC5CYWNrZW5kSURPcGVyYXRpb25zYC5cbiAqL1xudmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0ge1xuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUgd2l0aCBuZXcgcHJvcGVydHkgdmFsdWVzLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgdG9cbiAgICogdXBkYXRlIERPTSBwcm9wZXJ0aWVzIGluIGBET01Qcm9wZXJ0eWAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9kZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEEgdmFsaWQgcHJvcGVydHkgbmFtZSwgc2VlIGBET01Qcm9wZXJ0eWAuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgTmV3IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1cGRhdGVQcm9wZXJ0eUJ5SUQ6IGZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBub2RlID0gUmVhY3RNb3VudC5nZXROb2RlKGlkKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIUlOVkFMSURfUFJPUEVSVFlfRVJST1JTLmhhc093blByb3BlcnR5KG5hbWUpLFxuICAgICAgJ3VwZGF0ZVByb3BlcnR5QnlJRCguLi4pOiAlcycsXG4gICAgICBJTlZBTElEX1BST1BFUlRZX0VSUk9SU1tuYW1lXVxuICAgICkgOiBpbnZhcmlhbnQoIUlOVkFMSURfUFJPUEVSVFlfRVJST1JTLmhhc093blByb3BlcnR5KG5hbWUpKSk7XG5cbiAgICAvLyBJZiB3ZSdyZSB1cGRhdGluZyB0byBudWxsIG9yIHVuZGVmaW5lZCwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgcHJvcGVydHlcbiAgICAvLyBmcm9tIHRoZSBET00gbm9kZSBpbnN0ZWFkIG9mIGluYWR2ZXJ0YW50bHkgc2V0dGluZyB0byBhIHN0cmluZy4gVGhpc1xuICAgIC8vIGJyaW5ncyB1cyBpbiBsaW5lIHdpdGggdGhlIHNhbWUgYmVoYXZpb3Igd2UgaGF2ZSBvbiBpbml0aWFsIHJlbmRlci5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gbm9kZSB0byByZW1vdmUgYSBwcm9wZXJ0eS4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIHJlbW92ZVxuICAgKiBET00gcHJvcGVydGllcyBpbiBgRE9NUHJvcGVydHlgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIG5vZGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBIHByb3BlcnR5IG5hbWUgdG8gcmVtb3ZlLCBzZWUgYERPTVByb3BlcnR5YC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBkZWxldGVQcm9wZXJ0eUJ5SUQ6IGZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBub2RlID0gUmVhY3RNb3VudC5nZXROb2RlKGlkKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIUlOVkFMSURfUFJPUEVSVFlfRVJST1JTLmhhc093blByb3BlcnR5KG5hbWUpLFxuICAgICAgJ3VwZGF0ZVByb3BlcnR5QnlJRCguLi4pOiAlcycsXG4gICAgICBJTlZBTElEX1BST1BFUlRZX0VSUk9SU1tuYW1lXVxuICAgICkgOiBpbnZhcmlhbnQoIUlOVkFMSURfUFJPUEVSVFlfRVJST1JTLmhhc093blByb3BlcnR5KG5hbWUpKSk7XG4gICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgdmFsdWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUgd2l0aCBuZXcgc3R5bGUgdmFsdWVzLiBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhcyAnJyxcbiAgICogdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIHRoZSBub2RlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IHN0eWxlcyBNYXBwaW5nIGZyb20gc3R5bGVzIHRvIHZhbHVlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1cGRhdGVTdHlsZXNCeUlEOiBmdW5jdGlvbihpZCwgc3R5bGVzKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIENTU1Byb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvclN0eWxlcyhub2RlLCBzdHlsZXMpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgRE9NIG5vZGUncyBpbm5lckhUTUwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9kZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIEFuIEhUTUwgc3RyaW5nLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVwZGF0ZUlubmVySFRNTEJ5SUQ6IGZ1bmN0aW9uKGlkLCBodG1sKSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIHNldElubmVySFRNTChub2RlLCBodG1sKTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIERPTSBub2RlJ3MgdGV4dCBjb250ZW50IHNldCBieSBgcHJvcHMuY29udGVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiB0aGUgbm9kZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRleHQgY29udGVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1cGRhdGVUZXh0Q29udGVudEJ5SUQ6IGZ1bmN0aW9uKGlkLCBjb250ZW50KSB7XG4gICAgdmFyIG5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUoaWQpO1xuICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy51cGRhdGVUZXh0Q29udGVudChub2RlLCBjb250ZW50KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYSBET00gbm9kZSB0aGF0IGV4aXN0cyBpbiB0aGUgZG9jdW1lbnQgd2l0aCBtYXJrdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBvZiBjaGlsZCB0byBiZSByZXBsYWNlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBEYW5nZXJvdXMgbWFya3VwIHRvIGluamVjdCBpbiBwbGFjZSBvZiBjaGlsZC5cbiAgICogQGludGVybmFsXG4gICAqIEBzZWUge0Rhbmdlci5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cH1cbiAgICovXG4gIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDogZnVuY3Rpb24oaWQsIG1hcmt1cCkge1xuICAgIHZhciBub2RlID0gUmVhY3RNb3VudC5nZXROb2RlKGlkKTtcbiAgICBET01DaGlsZHJlbk9wZXJhdGlvbnMuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAobm9kZSwgbWFya3VwKTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbXBvbmVudCdzIGNoaWxkcmVuIGJ5IHByb2Nlc3NpbmcgYSBzZXJpZXMgb2YgdXBkYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheTxvYmplY3Q+fSB1cGRhdGVzIExpc3Qgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAcGFyYW0ge2FycmF5PHN0cmluZz59IG1hcmt1cCBMaXN0IG9mIG1hcmt1cCBzdHJpbmdzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogZnVuY3Rpb24odXBkYXRlcywgbWFya3VwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB1cGRhdGVzW2ldLnBhcmVudE5vZGUgPSBSZWFjdE1vdW50LmdldE5vZGUodXBkYXRlc1tpXS5wYXJlbnRJRCk7XG4gICAgfVxuICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy5wcm9jZXNzVXBkYXRlcyh1cGRhdGVzLCBtYXJrdXApO1xuICB9XG59O1xuXG5SZWFjdFBlcmYubWVhc3VyZU1ldGhvZHMoUmVhY3RET01JRE9wZXJhdGlvbnMsICdSZWFjdERPTUlET3BlcmF0aW9ucycsIHtcbiAgdXBkYXRlUHJvcGVydHlCeUlEOiAndXBkYXRlUHJvcGVydHlCeUlEJyxcbiAgZGVsZXRlUHJvcGVydHlCeUlEOiAnZGVsZXRlUHJvcGVydHlCeUlEJyxcbiAgdXBkYXRlU3R5bGVzQnlJRDogJ3VwZGF0ZVN0eWxlc0J5SUQnLFxuICB1cGRhdGVJbm5lckhUTUxCeUlEOiAndXBkYXRlSW5uZXJIVE1MQnlJRCcsXG4gIHVwZGF0ZVRleHRDb250ZW50QnlJRDogJ3VwZGF0ZVRleHRDb250ZW50QnlJRCcsXG4gIGRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDogJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRCcsXG4gIGRhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogJ2Rhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlcydcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSURPcGVyYXRpb25zO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDFKUkU5d1pYSmhkR2x2Ym5NdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBSRTlOU1VSUGNHVnlZWFJwYjI1elhHNGdLaUJBZEhsd1pXTm9aV05yY3lCemRHRjBhV010YjI1c2VWeHVJQ292WEc1Y2JpOHFhbk5zYVc1MElHVjJhV3c2SUhSeWRXVWdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6SUQwZ2NtVnhkV2x5WlNoY0lpNHZRMU5UVUhKdmNHVnlkSGxQY0dWeVlYUnBiMjV6WENJcE8xeHVkbUZ5SUVSUFRVTm9hV3hrY21WdVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBSUFRVTm9hV3hrY21WdVQzQmxjbUYwYVc5dWMxd2lLVHRjYm5aaGNpQkVUMDFRY205d1pYSjBlVTl3WlhKaGRHbHZibk1nUFNCeVpYRjFhWEpsS0Z3aUxpOUVUMDFRY205d1pYSjBlVTl3WlhKaGRHbHZibk5jSWlrN1hHNTJZWElnVW1WaFkzUk5iM1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFRXOTFiblJjSWlrN1hHNTJZWElnVW1WaFkzUlFaWEptSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSUVpYSm1YQ0lwTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dWRtRnlJSE5sZEVsdWJtVnlTRlJOVENBOUlISmxjWFZwY21Vb1hDSXVMM05sZEVsdWJtVnlTRlJOVEZ3aUtUdGNibHh1THlvcVhHNGdLaUJGY25KdmNuTWdabTl5SUhCeWIzQmxjblJwWlhNZ2RHaGhkQ0J6YUc5MWJHUWdibTkwSUdKbElIVndaR0YwWldRZ2QybDBhQ0JnZFhCa1lYUmxVSEp2Y0dWeWRIbENlVWxrS0NsZ0xseHVJQ3BjYmlBcUlFQjBlWEJsSUh0dlltcGxZM1I5WEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1MllYSWdTVTVXUVV4SlJGOVFVazlRUlZKVVdWOUZVbEpQVWxNZ1BTQjdYRzRnSUdSaGJtZGxjbTkxYzJ4NVUyVjBTVzV1WlhKSVZFMU1PbHh1SUNBZ0lDZGdaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV4Z0lHMTFjM1FnWW1VZ2MyVjBJSFZ6YVc1bklHQjFjR1JoZEdWSmJtNWxja2hVVFV4Q2VVbEVLQ2xnTGljc1hHNGdJSE4wZVd4bE9pQW5ZSE4wZVd4bFlDQnRkWE4wSUdKbElITmxkQ0IxYzJsdVp5QmdkWEJrWVhSbFUzUjViR1Z6UW5sSlJDZ3BZQzRuWEc1OU8xeHVYRzR2S2lwY2JpQXFJRTl3WlhKaGRHbHZibk1nZFhObFpDQjBieUJ3Y205alpYTnpJSFZ3WkdGMFpYTWdkRzhnUkU5TklHNXZaR1Z6TGlCVWFHbHpJR2x6SUcxaFpHVWdhVzVxWldOMFlXSnNaU0IyYVdGY2JpQXFJR0JTWldGamRFUlBUVU52YlhCdmJtVnVkQzVDWVdOclpXNWtTVVJQY0dWeVlYUnBiMjV6WUM1Y2JpQXFMMXh1ZG1GeUlGSmxZV04wUkU5TlNVUlBjR1Z5WVhScGIyNXpJRDBnZTF4dVhHNGdJQzhxS2x4dUlDQWdLaUJWY0dSaGRHVnpJR0VnUkU5TklHNXZaR1VnZDJsMGFDQnVaWGNnY0hKdmNHVnlkSGtnZG1Gc2RXVnpMaUJVYUdseklITm9iM1ZzWkNCdmJteDVJR0psSUhWelpXUWdkRzljYmlBZ0lDb2dkWEJrWVhSbElFUlBUU0J3Y205d1pYSjBhV1Z6SUdsdUlHQkVUMDFRY205d1pYSjBlV0F1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCMGFHVWdibTlrWlNCMGJ5QjFjR1JoZEdVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbElFRWdkbUZzYVdRZ2NISnZjR1Z5ZEhrZ2JtRnRaU3dnYzJWbElHQkVUMDFRY205d1pYSjBlV0F1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdLbjBnZG1Gc2RXVWdUbVYzSUhaaGJIVmxJRzltSUhSb1pTQndjbTl3WlhKMGVTNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjFjR1JoZEdWUWNtOXdaWEowZVVKNVNVUTZJR1oxYm1OMGFXOXVLR2xrTENCdVlXMWxMQ0IyWVd4MVpTa2dlMXh1SUNBZ0lIWmhjaUJ1YjJSbElEMGdVbVZoWTNSTmIzVnVkQzVuWlhST2IyUmxLR2xrS1R0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJVWxPVmtGTVNVUmZVRkpQVUVWU1ZGbGZSVkpTVDFKVExtaGhjMDkzYmxCeWIzQmxjblI1S0c1aGJXVXBMRnh1SUNBZ0lDQWdKM1Z3WkdGMFpWQnliM0JsY25SNVFubEpSQ2d1TGk0cE9pQWxjeWNzWEc0Z0lDQWdJQ0JKVGxaQlRFbEVYMUJTVDFCRlVsUlpYMFZTVWs5U1UxdHVZVzFsWFZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb0lVbE9Wa0ZNU1VSZlVGSlBVRVZTVkZsZlJWSlNUMUpUTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcEtTazdYRzVjYmlBZ0lDQXZMeUJKWmlCM1pTZHlaU0IxY0dSaGRHbHVaeUIwYnlCdWRXeHNJRzl5SUhWdVpHVm1hVzVsWkN3Z2QyVWdjMmh2ZFd4a0lISmxiVzkyWlNCMGFHVWdjSEp2Y0dWeWRIbGNiaUFnSUNBdkx5Qm1jbTl0SUhSb1pTQkVUMDBnYm05a1pTQnBibk4wWldGa0lHOW1JR2x1WVdSMlpYSjBZVzUwYkhrZ2MyVjBkR2x1WnlCMGJ5QmhJSE4wY21sdVp5NGdWR2hwYzF4dUlDQWdJQzh2SUdKeWFXNW5jeUIxY3lCcGJpQnNhVzVsSUhkcGRHZ2dkR2hsSUhOaGJXVWdZbVZvWVhacGIzSWdkMlVnYUdGMlpTQnZiaUJwYm1sMGFXRnNJSEpsYm1SbGNpNWNiaUFnSUNCcFppQW9kbUZzZFdVZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ1JFOU5VSEp2Y0dWeWRIbFBjR1Z5WVhScGIyNXpMbk5sZEZaaGJIVmxSbTl5VUhKdmNHVnlkSGtvYm05a1pTd2dibUZ0WlN3Z2RtRnNkV1VwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQkVUMDFRY205d1pYSjBlVTl3WlhKaGRHbHZibk11WkdWc1pYUmxWbUZzZFdWR2IzSlFjbTl3WlhKMGVTaHViMlJsTENCdVlXMWxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWd1pHRjBaWE1nWVNCRVQwMGdibTlrWlNCMGJ5QnlaVzF2ZG1VZ1lTQndjbTl3WlhKMGVTNGdWR2hwY3lCemFHOTFiR1FnYjI1c2VTQmlaU0IxYzJWa0lIUnZJSEpsYlc5MlpWeHVJQ0FnS2lCRVQwMGdjSEp2Y0dWeWRHbGxjeUJwYmlCZ1JFOU5VSEp2Y0dWeWRIbGdMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1NVUWdiMllnZEdobElHNXZaR1VnZEc4Z2RYQmtZWFJsTGx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdibUZ0WlNCQklIQnliM0JsY25SNUlHNWhiV1VnZEc4Z2NtVnRiM1psTENCelpXVWdZRVJQVFZCeWIzQmxjblI1WUM1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCa1pXeGxkR1ZRY205d1pYSjBlVUo1U1VRNklHWjFibU4wYVc5dUtHbGtMQ0J1WVcxbExDQjJZV3gxWlNrZ2UxeHVJQ0FnSUhaaGNpQnViMlJsSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJPYjJSbEtHbGtLVHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lVbE9Wa0ZNU1VSZlVGSlBVRVZTVkZsZlJWSlNUMUpUTG1oaGMwOTNibEJ5YjNCbGNuUjVLRzVoYldVcExGeHVJQ0FnSUNBZ0ozVndaR0YwWlZCeWIzQmxjblI1UW5sSlJDZ3VMaTRwT2lBbGN5Y3NYRzRnSUNBZ0lDQkpUbFpCVEVsRVgxQlNUMUJGVWxSWlgwVlNVazlTVTF0dVlXMWxYVnh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVVsT1ZrRk1TVVJmVUZKUFVFVlNWRmxmUlZKU1QxSlRMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwS1NrN1hHNGdJQ0FnUkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1ekxtUmxiR1YwWlZaaGJIVmxSbTl5VUhKdmNHVnlkSGtvYm05a1pTd2dibUZ0WlN3Z2RtRnNkV1VwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlZjR1JoZEdWeklHRWdSRTlOSUc1dlpHVWdkMmwwYUNCdVpYY2djM1I1YkdVZ2RtRnNkV1Z6TGlCSlppQmhJSFpoYkhWbElHbHpJSE53WldOcFptbGxaQ0JoY3lBbkp5eGNiaUFnSUNvZ2RHaGxJR052Y25KbGMzQnZibVJwYm1jZ2MzUjViR1VnY0hKdmNHVnlkSGtnZDJsc2JDQmlaU0IxYm5ObGRDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR2xrSUVsRUlHOW1JSFJvWlNCdWIyUmxJSFJ2SUhWd1pHRjBaUzVjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNSOUlITjBlV3hsY3lCTllYQndhVzVuSUdaeWIyMGdjM1I1YkdWeklIUnZJSFpoYkhWbGN5NWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjFjR1JoZEdWVGRIbHNaWE5DZVVsRU9pQm1kVzVqZEdsdmJpaHBaQ3dnYzNSNWJHVnpLU0I3WEc0Z0lDQWdkbUZ5SUc1dlpHVWdQU0JTWldGamRFMXZkVzUwTG1kbGRFNXZaR1VvYVdRcE8xeHVJQ0FnSUVOVFUxQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5NXpaWFJXWVd4MVpVWnZjbE4wZVd4bGN5aHViMlJsTENCemRIbHNaWE1wTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlZjR1JoZEdWeklHRWdSRTlOSUc1dlpHVW5jeUJwYm01bGNraFVUVXd1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCMGFHVWdibTlrWlNCMGJ5QjFjR1JoZEdVdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JvZEcxc0lFRnVJRWhVVFV3Z2MzUnlhVzVuTGx4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUhWd1pHRjBaVWx1Ym1WeVNGUk5URUo1U1VRNklHWjFibU4wYVc5dUtHbGtMQ0JvZEcxc0tTQjdYRzRnSUNBZ2RtRnlJRzV2WkdVZ1BTQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVW9hV1FwTzF4dUlDQWdJSE5sZEVsdWJtVnlTRlJOVENodWIyUmxMQ0JvZEcxc0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVlhCa1lYUmxjeUJoSUVSUFRTQnViMlJsSjNNZ2RHVjRkQ0JqYjI1MFpXNTBJSE5sZENCaWVTQmdjSEp2Y0hNdVkyOXVkR1Z1ZEdBdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnBaQ0JKUkNCdlppQjBhR1VnYm05a1pTQjBieUIxY0dSaGRHVXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCamIyNTBaVzUwSUZSbGVIUWdZMjl1ZEdWdWRDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjFjR1JoZEdWVVpYaDBRMjl1ZEdWdWRFSjVTVVE2SUdaMWJtTjBhVzl1S0dsa0xDQmpiMjUwWlc1MEtTQjdYRzRnSUNBZ2RtRnlJRzV2WkdVZ1BTQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVW9hV1FwTzF4dUlDQWdJRVJQVFVOb2FXeGtjbVZ1VDNCbGNtRjBhVzl1Y3k1MWNHUmhkR1ZVWlhoMFEyOXVkR1Z1ZENodWIyUmxMQ0JqYjI1MFpXNTBLVHRjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1VtVndiR0ZqWlhNZ1lTQkVUMDBnYm05a1pTQjBhR0YwSUdWNGFYTjBjeUJwYmlCMGFHVWdaRzlqZFcxbGJuUWdkMmwwYUNCdFlYSnJkWEF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkpSQ0J2WmlCamFHbHNaQ0IwYnlCaVpTQnlaWEJzWVdObFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUcxaGNtdDFjQ0JFWVc1blpYSnZkWE1nYldGeWEzVndJSFJ2SUdsdWFtVmpkQ0JwYmlCd2JHRmpaU0J2WmlCamFHbHNaQzVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUlFQnpaV1VnZTBSaGJtZGxjaTVrWVc1blpYSnZkWE5zZVZKbGNHeGhZMlZPYjJSbFYybDBhRTFoY210MWNIMWNiaUFnSUNvdlhHNGdJR1JoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd1FubEpSRG9nWm5WdVkzUnBiMjRvYVdRc0lHMWhjbXQxY0NrZ2UxeHVJQ0FnSUhaaGNpQnViMlJsSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJPYjJSbEtHbGtLVHRjYmlBZ0lDQkVUMDFEYUdsc1pISmxiazl3WlhKaGRHbHZibk11WkdGdVoyVnliM1Z6YkhsU1pYQnNZV05sVG05a1pWZHBkR2hOWVhKcmRYQW9ibTlrWlN3Z2JXRnlhM1Z3S1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWEJrWVhSbGN5QmhJR052YlhCdmJtVnVkQ2R6SUdOb2FXeGtjbVZ1SUdKNUlIQnliMk5sYzNOcGJtY2dZU0J6WlhKcFpYTWdiMllnZFhCa1lYUmxjeTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0aGNuSmhlVHh2WW1wbFkzUStmU0IxY0dSaGRHVnpJRXhwYzNRZ2IyWWdkWEJrWVhSbElHTnZibVpwWjNWeVlYUnBiMjV6TGx4dUlDQWdLaUJBY0dGeVlXMGdlMkZ5Y21GNVBITjBjbWx1Wno1OUlHMWhjbXQxY0NCTWFYTjBJRzltSUcxaGNtdDFjQ0J6ZEhKcGJtZHpMbHh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJR1JoYm1kbGNtOTFjMng1VUhKdlkyVnpjME5vYVd4a2NtVnVWWEJrWVhSbGN6b2dablZ1WTNScGIyNG9kWEJrWVhSbGN5d2diV0Z5YTNWd0tTQjdYRzRnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BDQjFjR1JoZEdWekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0IxY0dSaGRHVnpXMmxkTG5CaGNtVnVkRTV2WkdVZ1BTQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVW9kWEJrWVhSbGMxdHBYUzV3WVhKbGJuUkpSQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lFUlBUVU5vYVd4a2NtVnVUM0JsY21GMGFXOXVjeTV3Y205alpYTnpWWEJrWVhSbGN5aDFjR1JoZEdWekxDQnRZWEpyZFhBcE8xeHVJQ0I5WEc1OU8xeHVYRzVTWldGamRGQmxjbVl1YldWaGMzVnlaVTFsZEdodlpITW9VbVZoWTNSRVQwMUpSRTl3WlhKaGRHbHZibk1zSUNkU1pXRmpkRVJQVFVsRVQzQmxjbUYwYVc5dWN5Y3NJSHRjYmlBZ2RYQmtZWFJsVUhKdmNHVnlkSGxDZVVsRU9pQW5kWEJrWVhSbFVISnZjR1Z5ZEhsQ2VVbEVKeXhjYmlBZ1pHVnNaWFJsVUhKdmNHVnlkSGxDZVVsRU9pQW5aR1ZzWlhSbFVISnZjR1Z5ZEhsQ2VVbEVKeXhjYmlBZ2RYQmtZWFJsVTNSNWJHVnpRbmxKUkRvZ0ozVndaR0YwWlZOMGVXeGxjMEo1U1VRbkxGeHVJQ0IxY0dSaGRHVkpibTVsY2toVVRVeENlVWxFT2lBbmRYQmtZWFJsU1c1dVpYSklWRTFNUW5sSlJDY3NYRzRnSUhWd1pHRjBaVlJsZUhSRGIyNTBaVzUwUW5sSlJEb2dKM1Z3WkdGMFpWUmxlSFJEYjI1MFpXNTBRbmxKUkNjc1hHNGdJR1JoYm1kbGNtOTFjMng1VW1Wd2JHRmpaVTV2WkdWWGFYUm9UV0Z5YTNWd1FubEpSRG9nSjJSaGJtZGxjbTkxYzJ4NVVtVndiR0ZqWlU1dlpHVlhhWFJvVFdGeWEzVndRbmxKUkNjc1hHNGdJR1JoYm1kbGNtOTFjMng1VUhKdlkyVnpjME5vYVd4a2NtVnVWWEJrWVhSbGN6b2dKMlJoYm1kbGNtOTFjMng1VUhKdlkyVnpjME5vYVd4a2NtVnVWWEJrWVhSbGN5ZGNibjBwTzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wUkU5TlNVUlBjR1Z5WVhScGIyNXpPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUlmcmFtZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgTG9jYWxFdmVudFRyYXBNaXhpbiA9IHJlcXVpcmUoXCIuL0xvY2FsRXZlbnRUcmFwTWl4aW5cIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciBpZnJhbWUgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnaWZyYW1lJyk7XG5cbi8qKlxuICogU2luY2Ugb25Mb2FkIGRvZXNuJ3QgYnViYmxlIE9SIGNhcHR1cmUgb24gdGhlIHRvcCBsZXZlbCBpbiBJRTgsIHdlIG5lZWQgdG9cbiAqIGNhcHR1cmUgaXQgb24gdGhlIDxpZnJhbWU+IGVsZW1lbnQgaXRzZWxmLiBUaGVyZSBhcmUgbG90cyBvZiBoYWNrcyB3ZSBjb3VsZFxuICogZG8gdG8gYWNjb21wbGlzaCB0aGlzLCBidXQgdGhlIG1vc3QgcmVsaWFibGUgaXMgdG8gbWFrZSA8aWZyYW1lPiBhIGNvbXBvc2l0ZVxuICogY29tcG9uZW50IGFuZCB1c2UgYGNvbXBvbmVudERpZE1vdW50YCB0byBhdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXJzLlxuICovXG52YXIgUmVhY3RET01JZnJhbWUgPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTUlmcmFtZScsXG4gIHRhZ05hbWU6ICdJRlJBTUUnLFxuXG4gIG1peGluczogW1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluLCBMb2NhbEV2ZW50VHJhcE1peGluXSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBpZnJhbWUodGhpcy5wcm9wcyk7XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudHJhcEJ1YmJsZWRFdmVudChFdmVudENvbnN0YW50cy50b3BMZXZlbFR5cGVzLnRvcExvYWQsICdsb2FkJyk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSWZyYW1lO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NSW1nXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBMb2NhbEV2ZW50VHJhcE1peGluID0gcmVxdWlyZShcIi4vTG9jYWxFdmVudFRyYXBNaXhpblwiKTtcbnZhciBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbiA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXCIpO1xudmFyIFJlYWN0Q2xhc3MgPSByZXF1aXJlKFwiLi9SZWFjdENsYXNzXCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcblxudmFyIGltZyA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdpbWcnKTtcblxuLyoqXG4gKiBTaW5jZSBvbkxvYWQgZG9lc24ndCBidWJibGUgT1IgY2FwdHVyZSBvbiB0aGUgdG9wIGxldmVsIGluIElFOCwgd2UgbmVlZCB0b1xuICogY2FwdHVyZSBpdCBvbiB0aGUgPGltZz4gZWxlbWVudCBpdHNlbGYuIFRoZXJlIGFyZSBsb3RzIG9mIGhhY2tzIHdlIGNvdWxkIGRvXG4gKiB0byBhY2NvbXBsaXNoIHRoaXMsIGJ1dCB0aGUgbW9zdCByZWxpYWJsZSBpcyB0byBtYWtlIDxpbWc+IGEgY29tcG9zaXRlXG4gKiBjb21wb25lbnQgYW5kIHVzZSBgY29tcG9uZW50RGlkTW91bnRgIHRvIGF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlcnMuXG4gKi9cbnZhciBSZWFjdERPTUltZyA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICBkaXNwbGF5TmFtZTogJ1JlYWN0RE9NSW1nJyxcbiAgdGFnTmFtZTogJ0lNRycsXG5cbiAgbWl4aW5zOiBbUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4sIExvY2FsRXZlbnRUcmFwTWl4aW5dLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGltZyh0aGlzLnByb3BzKTtcbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50cmFwQnViYmxlZEV2ZW50KEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXMudG9wTG9hZCwgJ2xvYWQnKTtcbiAgICB0aGlzLnRyYXBCdWJibGVkRXZlbnQoRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcy50b3BFcnJvciwgJ2Vycm9yJyk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSW1nO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTUlucHV0XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXV0b0ZvY3VzTWl4aW4gPSByZXF1aXJlKFwiLi9BdXRvRm9jdXNNaXhpblwiKTtcbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgTGlua2VkVmFsdWVVdGlscyA9IHJlcXVpcmUoXCIuL0xpbmtlZFZhbHVlVXRpbHNcIik7XG52YXIgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW4gPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpblwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBpbnB1dCA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCdpbnB1dCcpO1xuXG52YXIgaW5zdGFuY2VzQnlSZWFjdElEID0ge307XG5cbmZ1bmN0aW9uIGZvcmNlVXBkYXRlSWZNb3VudGVkKCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICBpZiAodGhpcy5pc01vdW50ZWQoKSkge1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBuYXRpdmUgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhlc2Ugb3B0aW9uYWxcbiAqIHByb3BzOiBgY2hlY2tlZGAsIGB2YWx1ZWAsIGBkZWZhdWx0Q2hlY2tlZGAsIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBJZiBgY2hlY2tlZGAgb3IgYHZhbHVlYCBhcmUgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9uc1xuICogdGhhdCBhZmZlY3QgdGhlIGNoZWNrZWQgc3RhdGUgb3IgdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgdGhleSBhcmUgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIG5vdFxuICogdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgcHJvcHMgbXVzdCBjaGFuZ2UgaW4gb3JkZXIgZm9yXG4gKiB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgdW5jaGVja2VkIChvciBgZGVmYXVsdENoZWNrZWRgKVxuICogd2l0aCBhbiBlbXB0eSB2YWx1ZSAob3IgYGRlZmF1bHRWYWx1ZWApLlxuICpcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMTAyNS90aGUtaW5wdXQtZWxlbWVudC5odG1sXG4gKi9cbnZhciBSZWFjdERPTUlucHV0ID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RET01JbnB1dCcsXG4gIHRhZ05hbWU6ICdJTlBVVCcsXG5cbiAgbWl4aW5zOiBbQXV0b0ZvY3VzTWl4aW4sIExpbmtlZFZhbHVlVXRpbHMuTWl4aW4sIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluXSxcblxuICBnZXRJbml0aWFsU3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5pdGlhbENoZWNrZWQ6IHRoaXMucHJvcHMuZGVmYXVsdENoZWNrZWQgfHwgZmFsc2UsXG4gICAgICBpbml0aWFsVmFsdWU6IGRlZmF1bHRWYWx1ZSAhPSBudWxsID8gZGVmYXVsdFZhbHVlIDogbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAvLyBDbG9uZSBgdGhpcy5wcm9wc2Agc28gd2UgZG9uJ3QgbXV0YXRlIHRoZSBpbnB1dC5cbiAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIHRoaXMucHJvcHMpO1xuXG4gICAgcHJvcHMuZGVmYXVsdENoZWNrZWQgPSBudWxsO1xuICAgIHByb3BzLmRlZmF1bHRWYWx1ZSA9IG51bGw7XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIHByb3BzLnZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogdGhpcy5zdGF0ZS5pbml0aWFsVmFsdWU7XG5cbiAgICB2YXIgY2hlY2tlZCA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0Q2hlY2tlZCh0aGlzKTtcbiAgICBwcm9wcy5jaGVja2VkID0gY2hlY2tlZCAhPSBudWxsID8gY2hlY2tlZCA6IHRoaXMuc3RhdGUuaW5pdGlhbENoZWNrZWQ7XG5cbiAgICBwcm9wcy5vbkNoYW5nZSA9IHRoaXMuX2hhbmRsZUNoYW5nZTtcblxuICAgIHJldHVybiBpbnB1dChwcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpZCA9IFJlYWN0TW91bnQuZ2V0SUQodGhpcy5nZXRET01Ob2RlKCkpO1xuICAgIGluc3RhbmNlc0J5UmVhY3RJRFtpZF0gPSB0aGlzO1xuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLmdldERPTU5vZGUoKTtcbiAgICB2YXIgaWQgPSBSZWFjdE1vdW50LmdldElEKHJvb3ROb2RlKTtcbiAgICBkZWxldGUgaW5zdGFuY2VzQnlSZWFjdElEW2lkXTtcbiAgfSxcblxuICBjb21wb25lbnREaWRVcGRhdGU6IGZ1bmN0aW9uKHByZXZQcm9wcywgcHJldlN0YXRlLCBwcmV2Q29udGV4dCkge1xuICAgIHZhciByb290Tm9kZSA9IHRoaXMuZ2V0RE9NTm9kZSgpO1xuICAgIGlmICh0aGlzLnByb3BzLmNoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkoXG4gICAgICAgIHJvb3ROb2RlLFxuICAgICAgICAnY2hlY2tlZCcsXG4gICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCB8fCBmYWxzZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkocm9vdE5vZGUsICd2YWx1ZScsICcnICsgdmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciByZXR1cm5WYWx1ZTtcbiAgICB2YXIgb25DaGFuZ2UgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldE9uQ2hhbmdlKHRoaXMpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBvbkNoYW5nZS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSB1c2UgYXNhcCB0byB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2hcbiAgICAvLyBpcyBpbXBvcnRhbnQgd2hlbiB1c2luZyBjb250cm9sbGVkIGNvbXBvbmVudHMgd2l0aGluIGxheWVyczpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2OThcbiAgICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgdGhpcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTtcbiAgICBpZiAodGhpcy5wcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgICBxdWVyeVJvb3QgPSBxdWVyeVJvb3QucGFyZW50Tm9kZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYHJvb3ROb2RlLmZvcm1gIHdhcyBub24tbnVsbCwgdGhlbiB3ZSBjb3VsZCB0cnkgYGZvcm0uZWxlbWVudHNgLFxuICAgICAgLy8gYnV0IHRoYXQgc29tZXRpbWVzIGJlaGF2ZXMgc3RyYW5nZWx5IGluIElFOC4gV2UgY291bGQgYWxzbyB0cnkgdXNpbmdcbiAgICAgIC8vIGBmb3JtLmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hpbGRyZW5cbiAgICAgIC8vIGFuZCB3b24ndCBpbmNsdWRlIGlucHV0cyB0aGF0IHVzZSB0aGUgSFRNTDUgYGZvcm09YCBhdHRyaWJ1dGUuIFNpbmNlXG4gICAgICAvLyB0aGUgaW5wdXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gYSBmb3JtLCBsZXQncyBqdXN0IHVzZSB0aGUgZ2xvYmFsXG4gICAgICAvLyBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0IG1pc3MgYW55dGhpbmcuXG4gICAgICB2YXIgZ3JvdXAgPSBxdWVyeVJvb3QucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgJ2lucHV0W25hbWU9JyArIEpTT04uc3RyaW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGdyb3VwTGVuID0gZ3JvdXAubGVuZ3RoOyBpIDwgZ3JvdXBMZW47IGkrKykge1xuICAgICAgICB2YXIgb3RoZXJOb2RlID0gZ3JvdXBbaV07XG4gICAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8XG4gICAgICAgICAgICBvdGhlck5vZGUuZm9ybSAhPT0gcm9vdE5vZGUuZm9ybSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdGhlcklEID0gUmVhY3RNb3VudC5nZXRJRChvdGhlck5vZGUpO1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIG90aGVySUQsXG4gICAgICAgICAgJ1JlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSAnICtcbiAgICAgICAgICAnc2FtZSBgbmFtZWAgaXMgbm90IHN1cHBvcnRlZC4nXG4gICAgICAgICkgOiBpbnZhcmlhbnQob3RoZXJJRCkpO1xuICAgICAgICB2YXIgb3RoZXJJbnN0YW5jZSA9IGluc3RhbmNlc0J5UmVhY3RJRFtvdGhlcklEXTtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgICBvdGhlckluc3RhbmNlLFxuICAgICAgICAgICdSZWFjdERPTUlucHV0OiBVbmtub3duIHJhZGlvIGJ1dHRvbiBJRCAlcy4nLFxuICAgICAgICAgIG90aGVySURcbiAgICAgICAgKSA6IGludmFyaWFudChvdGhlckluc3RhbmNlKSk7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb250cm9sbGVkIHJhZGlvIGJ1dHRvbiBncm91cCwgZm9yY2luZyB0aGUgaW5wdXQgdGhhdFxuICAgICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cbiAgICAgICAgUmVhY3RVcGRhdGVzLmFzYXAoZm9yY2VVcGRhdGVJZk1vdW50ZWQsIG90aGVySW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUlucHV0O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDFKYm5CMWRDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JFVDAxSmJuQjFkRnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUVGMWRHOUdiMk4xYzAxcGVHbHVJRDBnY21WeGRXbHlaU2hjSWk0dlFYVjBiMFp2WTNWelRXbDRhVzVjSWlrN1hHNTJZWElnUkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1eklEMGdjbVZ4ZFdseVpTaGNJaTR2UkU5TlVISnZjR1Z5ZEhsUGNHVnlZWFJwYjI1elhDSXBPMXh1ZG1GeUlFeHBibXRsWkZaaGJIVmxWWFJwYkhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlNYVc1clpXUldZV3gxWlZWMGFXeHpYQ0lwTzF4dWRtRnlJRkpsWVdOMFFuSnZkM05sY2tOdmJYQnZibVZ1ZEUxcGVHbHVJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JDY205M2MyVnlRMjl0Y0c5dVpXNTBUV2w0YVc1Y0lpazdYRzUyWVhJZ1VtVmhZM1JEYkdGemN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRMnhoYzNOY0lpazdYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFRXOTFiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEUxdmRXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFZYQmtZWFJsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFZYQmtZWFJsYzF3aUtUdGNibHh1ZG1GeUlHRnpjMmxuYmlBOUlISmxjWFZwY21Vb1hDSXVMMDlpYW1WamRDNWhjM05wWjI1Y0lpazdYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzUyWVhJZ2FXNXdkWFFnUFNCU1pXRmpkRVZzWlcxbGJuUXVZM0psWVhSbFJtRmpkRzl5ZVNnbmFXNXdkWFFuS1R0Y2JseHVkbUZ5SUdsdWMzUmhibU5sYzBKNVVtVmhZM1JKUkNBOUlIdDlPMXh1WEc1bWRXNWpkR2x2YmlCbWIzSmpaVlZ3WkdGMFpVbG1UVzkxYm5SbFpDZ3BJSHRjYmlBZ0x5cHFjMmhwYm5RZ2RtRnNhV1IwYUdsek9uUnlkV1VnS2k5Y2JpQWdhV1lnS0hSb2FYTXVhWE5OYjNWdWRHVmtLQ2twSUh0Y2JpQWdJQ0IwYUdsekxtWnZjbU5sVlhCa1lYUmxLQ2s3WEc0Z0lIMWNibjFjYmx4dUx5b3FYRzRnS2lCSmJYQnNaVzFsYm5SeklHRnVJRHhwYm5CMWRENGdibUYwYVhabElHTnZiWEJ2Ym1WdWRDQjBhR0YwSUdGc2JHOTNjeUJ6WlhSMGFXNW5JSFJvWlhObElHOXdkR2x2Ym1Gc1hHNGdLaUJ3Y205d2N6b2dZR05vWldOclpXUmdMQ0JnZG1Gc2RXVmdMQ0JnWkdWbVlYVnNkRU5vWldOclpXUmdMQ0JoYm1RZ1lHUmxabUYxYkhSV1lXeDFaV0F1WEc0Z0tseHVJQ29nU1dZZ1lHTm9aV05yWldSZ0lHOXlJR0IyWVd4MVpXQWdZWEpsSUc1dmRDQnpkWEJ3YkdsbFpDQW9iM0lnYm5Wc2JDOTFibVJsWm1sdVpXUXBMQ0IxYzJWeUlHRmpkR2x2Ym5OY2JpQXFJSFJvWVhRZ1lXWm1aV04wSUhSb1pTQmphR1ZqYTJWa0lITjBZWFJsSUc5eUlIWmhiSFZsSUhkcGJHd2dkSEpwWjJkbGNpQjFjR1JoZEdWeklIUnZJSFJvWlNCbGJHVnRaVzUwTGx4dUlDcGNiaUFxSUVsbUlIUm9aWGtnWVhKbElITjFjSEJzYVdWa0lDaGhibVFnYm05MElHNTFiR3d2ZFc1a1pXWnBibVZrS1N3Z2RHaGxJSEpsYm1SbGNtVmtJR1ZzWlcxbGJuUWdkMmxzYkNCdWIzUmNiaUFxSUhSeWFXZG5aWElnZFhCa1lYUmxjeUIwYnlCMGFHVWdaV3hsYldWdWRDNGdTVzV6ZEdWaFpDd2dkR2hsSUhCeWIzQnpJRzExYzNRZ1kyaGhibWRsSUdsdUlHOXlaR1Z5SUdadmNseHVJQ29nZEdobElISmxibVJsY21Wa0lHVnNaVzFsYm5RZ2RHOGdZbVVnZFhCa1lYUmxaQzVjYmlBcVhHNGdLaUJVYUdVZ2NtVnVaR1Z5WldRZ1pXeGxiV1Z1ZENCM2FXeHNJR0psSUdsdWFYUnBZV3hwZW1Wa0lHRnpJSFZ1WTJobFkydGxaQ0FvYjNJZ1lHUmxabUYxYkhSRGFHVmphMlZrWUNsY2JpQXFJSGRwZEdnZ1lXNGdaVzF3ZEhrZ2RtRnNkV1VnS0c5eUlHQmtaV1poZFd4MFZtRnNkV1ZnS1M1Y2JpQXFYRzRnS2lCQWMyVmxJR2gwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MMVJTTHpJd01USXZWMFF0YUhSdGJEVXRNakF4TWpFd01qVXZkR2hsTFdsdWNIVjBMV1ZzWlcxbGJuUXVhSFJ0YkZ4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JFVDAxSmJuQjFkQ0E5SUZKbFlXTjBRMnhoYzNNdVkzSmxZWFJsUTJ4aGMzTW9lMXh1SUNCa2FYTndiR0Y1VG1GdFpUb2dKMUpsWVdOMFJFOU5TVzV3ZFhRbkxGeHVJQ0IwWVdkT1lXMWxPaUFuU1U1UVZWUW5MRnh1WEc0Z0lHMXBlR2x1Y3pvZ1cwRjFkRzlHYjJOMWMwMXBlR2x1TENCTWFXNXJaV1JXWVd4MVpWVjBhV3h6TGsxcGVHbHVMQ0JTWldGamRFSnliM2R6WlhKRGIyMXdiMjVsYm5STmFYaHBibDBzWEc1Y2JpQWdaMlYwU1c1cGRHbGhiRk4wWVhSbE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjJZWElnWkdWbVlYVnNkRlpoYkhWbElEMGdkR2hwY3k1d2NtOXdjeTVrWldaaGRXeDBWbUZzZFdVN1hHNGdJQ0FnY21WMGRYSnVJSHRjYmlBZ0lDQWdJR2x1YVhScFlXeERhR1ZqYTJWa09pQjBhR2x6TG5CeWIzQnpMbVJsWm1GMWJIUkRhR1ZqYTJWa0lIeDhJR1poYkhObExGeHVJQ0FnSUNBZ2FXNXBkR2xoYkZaaGJIVmxPaUJrWldaaGRXeDBWbUZzZFdVZ0lUMGdiblZzYkNBL0lHUmxabUYxYkhSV1lXeDFaU0E2SUc1MWJHeGNiaUFnSUNCOU8xeHVJQ0I5TEZ4dVhHNGdJSEpsYm1SbGNqb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdMeThnUTJ4dmJtVWdZSFJvYVhNdWNISnZjSE5nSUhOdklIZGxJR1J2YmlkMElHMTFkR0YwWlNCMGFHVWdhVzV3ZFhRdVhHNGdJQ0FnZG1GeUlIQnliM0J6SUQwZ1lYTnphV2R1S0h0OUxDQjBhR2x6TG5CeWIzQnpLVHRjYmx4dUlDQWdJSEJ5YjNCekxtUmxabUYxYkhSRGFHVmphMlZrSUQwZ2JuVnNiRHRjYmlBZ0lDQndjbTl3Y3k1a1pXWmhkV3gwVm1Gc2RXVWdQU0J1ZFd4c08xeHVYRzRnSUNBZ2RtRnlJSFpoYkhWbElEMGdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NW5aWFJXWVd4MVpTaDBhR2x6S1R0Y2JpQWdJQ0J3Y205d2N5NTJZV3gxWlNBOUlIWmhiSFZsSUNFOUlHNTFiR3dnUHlCMllXeDFaU0E2SUhSb2FYTXVjM1JoZEdVdWFXNXBkR2xoYkZaaGJIVmxPMXh1WEc0Z0lDQWdkbUZ5SUdOb1pXTnJaV1FnUFNCTWFXNXJaV1JXWVd4MVpWVjBhV3h6TG1kbGRFTm9aV05yWldRb2RHaHBjeWs3WEc0Z0lDQWdjSEp2Y0hNdVkyaGxZMnRsWkNBOUlHTm9aV05yWldRZ0lUMGdiblZzYkNBL0lHTm9aV05yWldRZ09pQjBhR2x6TG5OMFlYUmxMbWx1YVhScFlXeERhR1ZqYTJWa08xeHVYRzRnSUNBZ2NISnZjSE11YjI1RGFHRnVaMlVnUFNCMGFHbHpMbDlvWVc1a2JHVkRhR0Z1WjJVN1hHNWNiaUFnSUNCeVpYUjFjbTRnYVc1d2RYUW9jSEp2Y0hNc0lIUm9hWE11Y0hKdmNITXVZMmhwYkdSeVpXNHBPMXh1SUNCOUxGeHVYRzRnSUdOdmJYQnZibVZ1ZEVScFpFMXZkVzUwT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCMllYSWdhV1FnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRWxFS0hSb2FYTXVaMlYwUkU5TlRtOWtaU2dwS1R0Y2JpQWdJQ0JwYm5OMFlXNWpaWE5DZVZKbFlXTjBTVVJiYVdSZElEMGdkR2hwY3p0Y2JpQWdmU3hjYmx4dUlDQmpiMjF3YjI1bGJuUlhhV3hzVlc1dGIzVnVkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZG1GeUlISnZiM1JPYjJSbElEMGdkR2hwY3k1blpYUkVUMDFPYjJSbEtDazdYRzRnSUNBZ2RtRnlJR2xrSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJKUkNoeWIyOTBUbTlrWlNrN1hHNGdJQ0FnWkdWc1pYUmxJR2x1YzNSaGJtTmxjMEo1VW1WaFkzUkpSRnRwWkYwN1hHNGdJSDBzWEc1Y2JpQWdZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxPaUJtZFc1amRHbHZiaWh3Y21WMlVISnZjSE1zSUhCeVpYWlRkR0YwWlN3Z2NISmxka052Ym5SbGVIUXBJSHRjYmlBZ0lDQjJZWElnY205dmRFNXZaR1VnUFNCMGFHbHpMbWRsZEVSUFRVNXZaR1VvS1R0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV3Y205d2N5NWphR1ZqYTJWa0lDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lFUlBUVkJ5YjNCbGNuUjVUM0JsY21GMGFXOXVjeTV6WlhSV1lXeDFaVVp2Y2xCeWIzQmxjblI1S0Z4dUlDQWdJQ0FnSUNCeWIyOTBUbTlrWlN4Y2JpQWdJQ0FnSUNBZ0oyTm9aV05yWldRbkxGeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CeWIzQnpMbU5vWldOclpXUWdmSHdnWm1Gc2MyVmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJSFpoYkhWbElEMGdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NW5aWFJXWVd4MVpTaDBhR2x6S1R0Y2JpQWdJQ0JwWmlBb2RtRnNkV1VnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnTHk4Z1EyRnpkQ0JnZG1Gc2RXVmdJSFJ2SUdFZ2MzUnlhVzVuSUhSdklHVnVjM1Z5WlNCMGFHVWdkbUZzZFdVZ2FYTWdjMlYwSUdOdmNuSmxZM1JzZVM0Z1YyaHBiR1ZjYmlBZ0lDQWdJQzh2SUdKeWIzZHpaWEp6SUhSNWNHbGpZV3hzZVNCa2J5QjBhR2x6SUdGeklHNWxZMlZ6YzJGeWVTd2dhbk5rYjIwZ1pHOWxjMjRuZEM1Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5NXpaWFJXWVd4MVpVWnZjbEJ5YjNCbGNuUjVLSEp2YjNST2IyUmxMQ0FuZG1Gc2RXVW5MQ0FuSnlBcklIWmhiSFZsS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ1gyaGhibVJzWlVOb1lXNW5aVG9nWm5WdVkzUnBiMjRvWlhabGJuUXBJSHRjYmlBZ0lDQjJZWElnY21WMGRYSnVWbUZzZFdVN1hHNGdJQ0FnZG1GeUlHOXVRMmhoYm1kbElEMGdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NW5aWFJQYmtOb1lXNW5aU2gwYUdsektUdGNiaUFnSUNCcFppQW9iMjVEYUdGdVoyVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJsWmhiSFZsSUQwZ2IyNURhR0Z1WjJVdVkyRnNiQ2gwYUdsekxDQmxkbVZ1ZENrN1hHNGdJQ0FnZlZ4dUlDQWdJQzh2SUVobGNtVWdkMlVnZFhObElHRnpZWEFnZEc4Z2QyRnBkQ0IxYm5ScGJDQmhiR3dnZFhCa1lYUmxjeUJvWVhabElIQnliM0JoWjJGMFpXUXNJSGRvYVdOb1hHNGdJQ0FnTHk4Z2FYTWdhVzF3YjNKMFlXNTBJSGRvWlc0Z2RYTnBibWNnWTI5dWRISnZiR3hsWkNCamIyMXdiMjVsYm5SeklIZHBkR2hwYmlCc1lYbGxjbk02WEc0Z0lDQWdMeThnYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJaaFkyVmliMjlyTDNKbFlXTjBMMmx6YzNWbGN5OHhOams0WEc0Z0lDQWdVbVZoWTNSVmNHUmhkR1Z6TG1GellYQW9abTl5WTJWVmNHUmhkR1ZKWmsxdmRXNTBaV1FzSUhSb2FYTXBPMXh1WEc0Z0lDQWdkbUZ5SUc1aGJXVWdQU0IwYUdsekxuQnliM0J6TG01aGJXVTdYRzRnSUNBZ2FXWWdLSFJvYVhNdWNISnZjSE11ZEhsd1pTQTlQVDBnSjNKaFpHbHZKeUFtSmlCdVlXMWxJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJSFpoY2lCeWIyOTBUbTlrWlNBOUlIUm9hWE11WjJWMFJFOU5UbTlrWlNncE8xeHVJQ0FnSUNBZ2RtRnlJSEYxWlhKNVVtOXZkQ0E5SUhKdmIzUk9iMlJsTzF4dVhHNGdJQ0FnSUNCM2FHbHNaU0FvY1hWbGNubFNiMjkwTG5CaGNtVnVkRTV2WkdVcElIdGNiaUFnSUNBZ0lDQWdjWFZsY25sU2IyOTBJRDBnY1hWbGNubFNiMjkwTG5CaGNtVnVkRTV2WkdVN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJRWxtSUdCeWIyOTBUbTlrWlM1bWIzSnRZQ0IzWVhNZ2JtOXVMVzUxYkd3c0lIUm9aVzRnZDJVZ1kyOTFiR1FnZEhKNUlHQm1iM0p0TG1Wc1pXMWxiblJ6WUN4Y2JpQWdJQ0FnSUM4dklHSjFkQ0IwYUdGMElITnZiV1YwYVcxbGN5QmlaV2hoZG1WeklITjBjbUZ1WjJWc2VTQnBiaUJKUlRndUlGZGxJR052ZFd4a0lHRnNjMjhnZEhKNUlIVnphVzVuWEc0Z0lDQWdJQ0F2THlCZ1ptOXliUzVuWlhSRmJHVnRaVzUwYzBKNVRtRnRaV0FzSUdKMWRDQjBhR0YwSUhkcGJHd2diMjVzZVNCeVpYUjFjbTRnWkdseVpXTjBJR05vYVd4a2NtVnVYRzRnSUNBZ0lDQXZMeUJoYm1RZ2QyOXVKM1FnYVc1amJIVmtaU0JwYm5CMWRITWdkR2hoZENCMWMyVWdkR2hsSUVoVVRVdzFJR0JtYjNKdFBXQWdZWFIwY21saWRYUmxMaUJUYVc1alpWeHVJQ0FnSUNBZ0x5OGdkR2hsSUdsdWNIVjBJRzFwWjJoMElHNXZkQ0JsZG1WdUlHSmxJR2x1SUdFZ1ptOXliU3dnYkdWMEozTWdhblZ6ZENCMWMyVWdkR2hsSUdkc2IySmhiRnh1SUNBZ0lDQWdMeThnWUhGMVpYSjVVMlZzWldOMGIzSkJiR3hnSUhSdklHVnVjM1Z5WlNCM1pTQmtiMjRuZENCdGFYTnpJR0Z1ZVhSb2FXNW5MbHh1SUNBZ0lDQWdkbUZ5SUdkeWIzVndJRDBnY1hWbGNubFNiMjkwTG5GMVpYSjVVMlZzWldOMGIzSkJiR3dvWEc0Z0lDQWdJQ0FnSUNkcGJuQjFkRnR1WVcxbFBTY2dLeUJLVTA5T0xuTjBjbWx1WjJsbWVTZ25KeUFySUc1aGJXVXBJQ3NnSjExYmRIbHdaVDFjSW5KaFpHbHZYQ0pkSnlrN1hHNWNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0F3TENCbmNtOTFjRXhsYmlBOUlHZHliM1Z3TG14bGJtZDBhRHNnYVNBOElHZHliM1Z3VEdWdU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJRzkwYUdWeVRtOWtaU0E5SUdkeWIzVndXMmxkTzF4dUlDQWdJQ0FnSUNCcFppQW9iM1JvWlhKT2IyUmxJRDA5UFNCeWIyOTBUbTlrWlNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnYjNSb1pYSk9iMlJsTG1admNtMGdJVDA5SUhKdmIzUk9iMlJsTG1admNtMHBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjJZWElnYjNSb1pYSkpSQ0E5SUZKbFlXTjBUVzkxYm5RdVoyVjBTVVFvYjNSb1pYSk9iMlJsS1R0Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lDQnZkR2hsY2tsRUxGeHVJQ0FnSUNBZ0lDQWdJQ2RTWldGamRFUlBUVWx1Y0hWME9pQk5hWGhwYm1jZ1VtVmhZM1FnWVc1a0lHNXZiaTFTWldGamRDQnlZV1JwYnlCcGJuQjFkSE1nZDJsMGFDQjBhR1VnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM05oYldVZ1lHNWhiV1ZnSUdseklHNXZkQ0J6ZFhCd2IzSjBaV1F1SjF4dUlDQWdJQ0FnSUNBcElEb2dhVzUyWVhKcFlXNTBLRzkwYUdWeVNVUXBLVHRjYmlBZ0lDQWdJQ0FnZG1GeUlHOTBhR1Z5U1c1emRHRnVZMlVnUFNCcGJuTjBZVzVqWlhOQ2VWSmxZV04wU1VSYmIzUm9aWEpKUkYwN1hHNGdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNBZ0lDQWdiM1JvWlhKSmJuTjBZVzVqWlN4Y2JpQWdJQ0FnSUNBZ0lDQW5VbVZoWTNSRVQwMUpibkIxZERvZ1ZXNXJibTkzYmlCeVlXUnBieUJpZFhSMGIyNGdTVVFnSlhNdUp5eGNiaUFnSUNBZ0lDQWdJQ0J2ZEdobGNrbEVYRzRnSUNBZ0lDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2IzUm9aWEpKYm5OMFlXNWpaU2twTzF4dUlDQWdJQ0FnSUNBdkx5QkpaaUIwYUdseklHbHpJR0VnWTI5dWRISnZiR3hsWkNCeVlXUnBieUJpZFhSMGIyNGdaM0p2ZFhBc0lHWnZjbU5wYm1jZ2RHaGxJR2x1Y0hWMElIUm9ZWFJjYmlBZ0lDQWdJQ0FnTHk4Z2QyRnpJSEJ5WlhacGIzVnpiSGtnWTJobFkydGxaQ0IwYnlCMWNHUmhkR1VnZDJsc2JDQmpZWFZ6WlNCcGRDQjBieUJpWlNCamIyMWxJSEpsTFdOb1pXTnJaV1JjYmlBZ0lDQWdJQ0FnTHk4Z1lYTWdZWEJ3Y205d2NtbGhkR1V1WEc0Z0lDQWdJQ0FnSUZKbFlXTjBWWEJrWVhSbGN5NWhjMkZ3S0dadmNtTmxWWEJrWVhSbFNXWk5iM1Z1ZEdWa0xDQnZkR2hsY2tsdWMzUmhibU5sS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjbVYwZFhKdVZtRnNkV1U3WEc0Z0lIMWNibHh1ZlNrN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRVQwMUpibkIxZER0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTU9wdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciBvcHRpb24gPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnb3B0aW9uJyk7XG5cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8b3B0aW9uPiBuYXRpdmUgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xudmFyIFJlYWN0RE9NT3B0aW9uID0gUmVhY3RDbGFzcy5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RET01PcHRpb24nLFxuICB0YWdOYW1lOiAnT1BUSU9OJyxcblxuICBtaXhpbnM6IFtSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbl0sXG5cbiAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICAvLyBUT0RPICh5dW5nc3RlcnMpOiBSZW1vdmUgc3VwcG9ydCBmb3IgYHNlbGVjdGVkYCBpbiA8b3B0aW9uPi5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RlZCA9PSBudWxsLFxuICAgICAgICAnVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArXG4gICAgICAgICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJ1xuICAgICAgKSA6IG51bGwpO1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcHRpb24odGhpcy5wcm9wcywgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH1cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01PcHRpb247XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRVQwMVBjSFJwYjI0dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSRVQwMVBjSFJwYjI1Y2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVKeWIzZHpaWEpEYjIxd2IyNWxiblJOYVhocGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRbkp2ZDNObGNrTnZiWEJ2Ym1WdWRFMXBlR2x1WENJcE8xeHVkbUZ5SUZKbFlXTjBRMnhoYzNNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFTnNZWE56WENJcE8xeHVkbUZ5SUZKbFlXTjBSV3hsYldWdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSV3hsYldWdWRGd2lLVHRjYmx4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzUyWVhJZ2IzQjBhVzl1SUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVWmhZM1J2Y25rb0oyOXdkR2x2YmljcE8xeHVYRzR2S2lwY2JpQXFJRWx0Y0d4bGJXVnVkSE1nWVc0Z1BHOXdkR2x2Ymo0Z2JtRjBhWFpsSUdOdmJYQnZibVZ1ZENCMGFHRjBJSGRoY201eklIZG9aVzRnWUhObGJHVmpkR1ZrWUNCcGN5QnpaWFF1WEc0Z0tpOWNiblpoY2lCU1pXRmpkRVJQVFU5d2RHbHZiaUE5SUZKbFlXTjBRMnhoYzNNdVkzSmxZWFJsUTJ4aGMzTW9lMXh1SUNCa2FYTndiR0Y1VG1GdFpUb2dKMUpsWVdOMFJFOU5UM0IwYVc5dUp5eGNiaUFnZEdGblRtRnRaVG9nSjA5UVZFbFBUaWNzWEc1Y2JpQWdiV2w0YVc1ek9pQmJVbVZoWTNSQ2NtOTNjMlZ5UTI5dGNHOXVaVzUwVFdsNGFXNWRMRnh1WEc0Z0lHTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdMeThnVkU5RVR5QW9lWFZ1WjNOMFpYSnpLVG9nVW1WdGIzWmxJSE4xY0hCdmNuUWdabTl5SUdCelpXeGxZM1JsWkdBZ2FXNGdQRzl3ZEdsdmJqNHVYRzRnSUNBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjSEp2Y0hNdWMyVnNaV04wWldRZ1BUMGdiblZzYkN4Y2JpQWdJQ0FnSUNBZ0oxVnpaU0IwYUdVZ1lHUmxabUYxYkhSV1lXeDFaV0FnYjNJZ1lIWmhiSFZsWUNCd2NtOXdjeUJ2YmlBOGMyVnNaV04wUGlCcGJuTjBaV0ZrSUc5bUlDY2dLMXh1SUNBZ0lDQWdJQ0FuYzJWMGRHbHVaeUJnYzJWc1pXTjBaV1JnSUc5dUlEeHZjSFJwYjI0K0xpZGNiaUFnSUNBZ0lDa2dPaUJ1ZFd4c0tUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdjbVZ1WkdWeU9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2IzQjBhVzl1S0hSb2FYTXVjSEp2Y0hNc0lIUm9hWE11Y0hKdmNITXVZMmhwYkdSeVpXNHBPMXh1SUNCOVhHNWNibjBwTzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGSmxZV04wUkU5TlQzQjBhVzl1TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01TZWxlY3RcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBBdXRvRm9jdXNNaXhpbiA9IHJlcXVpcmUoXCIuL0F1dG9Gb2N1c01peGluXCIpO1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSByZXF1aXJlKFwiLi9MaW5rZWRWYWx1ZVV0aWxzXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG5cbnZhciBzZWxlY3QgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSgnc2VsZWN0Jyk7XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnNJZlBlbmRpbmdVcGRhdGVBbmRNb3VudGVkKCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICBpZiAodGhpcy5fcGVuZGluZ1VwZGF0ZSkge1xuICAgIHRoaXMuX3BlbmRpbmdVcGRhdGUgPSBmYWxzZTtcbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHRoaXMuaXNNb3VudGVkKCkpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2VsZWN0VmFsdWVUeXBlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocHJvcHMubXVsdGlwbGUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiVGhlIGBcIiArIHByb3BOYW1lICsgXCJgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiBcIikgK1xuICAgICAgICAoXCJgbXVsdGlwbGVgIGlzIHRydWUuXCIpXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJUaGUgYFwiICsgcHJvcE5hbWUgKyBcImAgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyIFwiKSArXG4gICAgICAgIChcInZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuXCIpXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBJbnN0YW5jZSBvZiBSZWFjdERPTVNlbGVjdFxuICogQHBhcmFtIHsqfSBwcm9wVmFsdWUgQSBzdHJpbmdhYmxlICh3aXRoIGBtdWx0aXBsZWAsIGEgbGlzdCBvZiBzdHJpbmdhYmxlcykuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKGNvbXBvbmVudCwgcHJvcFZhbHVlKSB7XG4gIHZhciBzZWxlY3RlZFZhbHVlLCBpLCBsO1xuICB2YXIgb3B0aW9ucyA9IGNvbXBvbmVudC5nZXRET01Ob2RlKCkub3B0aW9ucztcblxuICBpZiAoY29tcG9uZW50LnByb3BzLm11bHRpcGxlKSB7XG4gICAgc2VsZWN0ZWRWYWx1ZSA9IHt9O1xuICAgIGZvciAoaSA9IDAsIGwgPSBwcm9wVmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBzZWxlY3RlZFZhbHVlWycnICsgcHJvcFZhbHVlW2ldXSA9IHRydWU7XG4gICAgfVxuICAgIGZvciAoaSA9IDAsIGwgPSBvcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eShvcHRpb25zW2ldLnZhbHVlKTtcbiAgICAgIGlmIChvcHRpb25zW2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICBzZWxlY3RlZFZhbHVlID0gJycgKyBwcm9wVmFsdWU7XG4gICAgZm9yIChpID0gMCwgbCA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAob3B0aW9uc1tpXS52YWx1ZSA9PT0gc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBvcHRpb25zW2ldLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIG9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8c2VsZWN0PiBuYXRpdmUgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG52YXIgUmVhY3RET01TZWxlY3QgPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTVNlbGVjdCcsXG4gIHRhZ05hbWU6ICdTRUxFQ1QnLFxuXG4gIG1peGluczogW0F1dG9Gb2N1c01peGluLCBMaW5rZWRWYWx1ZVV0aWxzLk1peGluLCBSZWFjdEJyb3dzZXJDb21wb25lbnRNaXhpbl0sXG5cbiAgcHJvcFR5cGVzOiB7XG4gICAgZGVmYXVsdFZhbHVlOiBzZWxlY3RWYWx1ZVR5cGUsXG4gICAgdmFsdWU6IHNlbGVjdFZhbHVlVHlwZVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgLy8gQ2xvbmUgYHRoaXMucHJvcHNgIHNvIHdlIGRvbid0IG11dGF0ZSB0aGUgaW5wdXQuXG4gICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCB0aGlzLnByb3BzKTtcblxuICAgIHByb3BzLm9uQ2hhbmdlID0gdGhpcy5faGFuZGxlQ2hhbmdlO1xuICAgIHByb3BzLnZhbHVlID0gbnVsbDtcblxuICAgIHJldHVybiBzZWxlY3QocHJvcHMsIHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcGVuZGluZ1VwZGF0ZSA9IGZhbHNlO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICB1cGRhdGVPcHRpb25zKHRoaXMsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnREaWRVcGRhdGU6IGZ1bmN0aW9uKHByZXZQcm9wcykge1xuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoIXByZXZQcm9wcy5tdWx0aXBsZSAhPT0gIXRoaXMucHJvcHMubXVsdGlwbGUpIHtcbiAgICAgIC8vIEZvciBzaW1wbGljaXR5LCByZWFwcGx5IGBkZWZhdWx0VmFsdWVgIGlmIGBtdWx0aXBsZWAgaXMgdG9nZ2xlZC5cbiAgICAgIGlmICh0aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV2ZXJ0IHRoZSBzZWxlY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bnNlbGVjdGVkIHN0YXRlLlxuICAgICAgICB1cGRhdGVPcHRpb25zKHRoaXMsIHRoaXMucHJvcHMubXVsdGlwbGUgPyBbXSA6ICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgX2hhbmRsZUNoYW5nZTogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgcmV0dXJuVmFsdWU7XG4gICAgdmFyIG9uQ2hhbmdlID0gTGlua2VkVmFsdWVVdGlscy5nZXRPbkNoYW5nZSh0aGlzKTtcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIHJldHVyblZhbHVlID0gb25DaGFuZ2UuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVuZGluZ1VwZGF0ZSA9IHRydWU7XG4gICAgUmVhY3RVcGRhdGVzLmFzYXAodXBkYXRlT3B0aW9uc0lmUGVuZGluZ1VwZGF0ZUFuZE1vdW50ZWQsIHRoaXMpO1xuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTVNlbGVjdDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERPTVNlbGVjdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0ID0gcmVxdWlyZShcIi4vZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldFwiKTtcbnZhciBnZXRUZXh0Q29udGVudEFjY2Vzc29yID0gcmVxdWlyZShcIi4vZ2V0VGV4dENvbnRlbnRBY2Nlc3NvclwiKTtcblxuLyoqXG4gKiBXaGlsZSBgaXNDb2xsYXBzZWRgIGlzIGF2YWlsYWJsZSBvbiB0aGUgU2VsZWN0aW9uIG9iamVjdCBhbmQgYGNvbGxhcHNlZGBcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgUmFuZ2Ugb2JqZWN0LCBJRTExIHNvbWV0aW1lcyBnZXRzIHRoZW0gd3JvbmcuXG4gKiBJZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFuZCBvZmZzZXRzIGFyZSB0aGUgc2FtZSwgdGhlIHJhbmdlIGlzIGNvbGxhcHNlZC5cbiAqL1xuZnVuY3Rpb24gaXNDb2xsYXBzZWQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KSB7XG4gIHJldHVybiBhbmNob3JOb2RlID09PSBmb2N1c05vZGUgJiYgYW5jaG9yT2Zmc2V0ID09PSBmb2N1c09mZnNldDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGFuY2hvciBhbmQgZm9jdXMgbm9kZS9vZmZzZXQgcGFpcnMgZm9yIElFLlxuICpcbiAqIFRoZSBjYXRjaCBoZXJlIGlzIHRoYXQgSUUncyBzZWxlY3Rpb24gQVBJIGRvZXNuJ3QgcHJvdmlkZSBpbmZvcm1hdGlvblxuICogYWJvdXQgd2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGZvcndhcmQgb3IgYmFja3dhcmQsIHNvIHdlIGhhdmUgdG9cbiAqIGJlaGF2ZSBhcyB0aG91Z2ggaXQncyBhbHdheXMgZm9yd2FyZC5cbiAqXG4gKiBJRSB0ZXh0IGRpZmZlcnMgZnJvbSBtb2Rlcm4gc2VsZWN0aW9uIGluIHRoYXQgaXQgYmVoYXZlcyBhcyB0aG91Z2hcbiAqIGJsb2NrIGVsZW1lbnRzIGVuZCB3aXRoIGEgbmV3IGxpbmUuIFRoaXMgbWVhbnMgY2hhcmFjdGVyIG9mZnNldHMgd2lsbFxuICogZGlmZmVyIGJldHdlZW4gdGhlIHR3byBBUElzLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRJRU9mZnNldHMobm9kZSkge1xuICB2YXIgc2VsZWN0aW9uID0gZG9jdW1lbnQuc2VsZWN0aW9uO1xuICB2YXIgc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuICB2YXIgc2VsZWN0ZWRMZW5ndGggPSBzZWxlY3RlZFJhbmdlLnRleHQubGVuZ3RoO1xuXG4gIC8vIER1cGxpY2F0ZSBzZWxlY3Rpb24gc28gd2UgY2FuIG1vdmUgcmFuZ2Ugd2l0aG91dCBicmVha2luZyB1c2VyIHNlbGVjdGlvbi5cbiAgdmFyIGZyb21TdGFydCA9IHNlbGVjdGVkUmFuZ2UuZHVwbGljYXRlKCk7XG4gIGZyb21TdGFydC5tb3ZlVG9FbGVtZW50VGV4dChub2RlKTtcbiAgZnJvbVN0YXJ0LnNldEVuZFBvaW50KCdFbmRUb1N0YXJ0Jywgc2VsZWN0ZWRSYW5nZSk7XG5cbiAgdmFyIHN0YXJ0T2Zmc2V0ID0gZnJvbVN0YXJ0LnRleHQubGVuZ3RoO1xuICB2YXIgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBzZWxlY3RlZExlbmd0aDtcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydE9mZnNldCxcbiAgICBlbmQ6IGVuZE9mZnNldFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zmc2V0cyhub2RlKSB7XG4gIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgdmFyIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQ7XG4gIHZhciBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlO1xuICB2YXIgZm9jdXNPZmZzZXQgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XG5cbiAgdmFyIGN1cnJlbnRSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuXG4gIC8vIElmIHRoZSBub2RlIGFuZCBvZmZzZXQgdmFsdWVzIGFyZSB0aGUgc2FtZSwgdGhlIHNlbGVjdGlvbiBpcyBjb2xsYXBzZWQuXG4gIC8vIGBTZWxlY3Rpb24uaXNDb2xsYXBzZWRgIGlzIGF2YWlsYWJsZSBuYXRpdmVseSwgYnV0IElFIHNvbWV0aW1lcyBnZXRzXG4gIC8vIHRoaXMgdmFsdWUgd3JvbmcuXG4gIHZhciBpc1NlbGVjdGlvbkNvbGxhcHNlZCA9IGlzQ29sbGFwc2VkKFxuICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgKTtcblxuICB2YXIgcmFuZ2VMZW5ndGggPSBpc1NlbGVjdGlvbkNvbGxhcHNlZCA/IDAgOiBjdXJyZW50UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7XG5cbiAgdmFyIHRlbXBSYW5nZSA9IGN1cnJlbnRSYW5nZS5jbG9uZVJhbmdlKCk7XG4gIHRlbXBSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gIHRlbXBSYW5nZS5zZXRFbmQoY3VycmVudFJhbmdlLnN0YXJ0Q29udGFpbmVyLCBjdXJyZW50UmFuZ2Uuc3RhcnRPZmZzZXQpO1xuXG4gIHZhciBpc1RlbXBSYW5nZUNvbGxhcHNlZCA9IGlzQ29sbGFwc2VkKFxuICAgIHRlbXBSYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICB0ZW1wUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgdGVtcFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICB0ZW1wUmFuZ2UuZW5kT2Zmc2V0XG4gICk7XG5cbiAgdmFyIHN0YXJ0ID0gaXNUZW1wUmFuZ2VDb2xsYXBzZWQgPyAwIDogdGVtcFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoO1xuICB2YXIgZW5kID0gc3RhcnQgKyByYW5nZUxlbmd0aDtcblxuICAvLyBEZXRlY3Qgd2hldGhlciB0aGUgc2VsZWN0aW9uIGlzIGJhY2t3YXJkLlxuICB2YXIgZGV0ZWN0aW9uUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICBkZXRlY3Rpb25SYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpO1xuICBkZXRlY3Rpb25SYW5nZS5zZXRFbmQoZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG4gIHZhciBpc0JhY2t3YXJkID0gZGV0ZWN0aW9uUmFuZ2UuY29sbGFwc2VkO1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGlzQmFja3dhcmQgPyBlbmQgOiBzdGFydCxcbiAgICBlbmQ6IGlzQmFja3dhcmQgPyBzdGFydCA6IGVuZFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAqL1xuZnVuY3Rpb24gc2V0SUVPZmZzZXRzKG5vZGUsIG9mZnNldHMpIHtcbiAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkuZHVwbGljYXRlKCk7XG4gIHZhciBzdGFydCwgZW5kO1xuXG4gIGlmICh0eXBlb2Ygb2Zmc2V0cy5lbmQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICAgIGVuZCA9IHN0YXJ0O1xuICB9IGVsc2UgaWYgKG9mZnNldHMuc3RhcnQgPiBvZmZzZXRzLmVuZCkge1xuICAgIHN0YXJ0ID0gb2Zmc2V0cy5lbmQ7XG4gICAgZW5kID0gb2Zmc2V0cy5zdGFydDtcbiAgfSBlbHNlIHtcbiAgICBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gICAgZW5kID0gb2Zmc2V0cy5lbmQ7XG4gIH1cblxuICByYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChub2RlKTtcbiAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7XG4gIHJhbmdlLnNldEVuZFBvaW50KCdFbmRUb1N0YXJ0JywgcmFuZ2UpO1xuICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQgLSBzdGFydCk7XG4gIHJhbmdlLnNlbGVjdCgpO1xufVxuXG4vKipcbiAqIEluIG1vZGVybiBub24tSUUgYnJvd3NlcnMsIHdlIGNhbiBzdXBwb3J0IGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmRcbiAqIHNlbGVjdGlvbnMuXG4gKlxuICogTm90ZTogSUUxMCsgc3VwcG9ydHMgdGhlIFNlbGVjdGlvbiBvYmplY3QsIGJ1dCBpdCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGUgYGV4dGVuZGAgbWV0aG9kLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gaW4gbW9kZXJuIElFLCBpdCdzIG5vdCBwb3NzaWJsZVxuICogdG8gcHJvZ3JhbWF0aWNhbGx5IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lvbnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5mdW5jdGlvbiBzZXRNb2Rlcm5PZmZzZXRzKG5vZGUsIG9mZnNldHMpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgdmFyIGxlbmd0aCA9IG5vZGVbZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcigpXS5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSB0eXBlb2Ygb2Zmc2V0cy5lbmQgPT09ICd1bmRlZmluZWQnID9cbiAgICAgICAgICAgIHN0YXJ0IDogTWF0aC5taW4ob2Zmc2V0cy5lbmQsIGxlbmd0aCk7XG5cbiAgLy8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBleHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBzZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cbiAgaWYgKCFzZWxlY3Rpb24uZXh0ZW5kICYmIHN0YXJ0ID4gZW5kKSB7XG4gICAgdmFyIHRlbXAgPSBlbmQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSB0ZW1wO1xuICB9XG5cbiAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBzdGFydCk7XG4gIHZhciBlbmRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIGVuZCk7XG5cbiAgaWYgKHN0YXJ0TWFya2VyICYmIGVuZE1hcmtlcikge1xuICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRNYXJrZXIubm9kZSwgc3RhcnRNYXJrZXIub2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2Uuc2V0RW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciB1c2VJRU9mZnNldHMgPSAoXG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJlxuICAnc2VsZWN0aW9uJyBpbiBkb2N1bWVudCAmJlxuICAhKCdnZXRTZWxlY3Rpb24nIGluIHdpbmRvdylcbik7XG5cbnZhciBSZWFjdERPTVNlbGVjdGlvbiA9IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAgKi9cbiAgZ2V0T2Zmc2V0czogdXNlSUVPZmZzZXRzID8gZ2V0SUVPZmZzZXRzIDogZ2V0TW9kZXJuT2Zmc2V0cyxcblxuICAvKipcbiAgICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gICAqL1xuICBzZXRPZmZzZXRzOiB1c2VJRU9mZnNldHMgPyBzZXRJRU9mZnNldHMgOiBzZXRNb2Rlcm5PZmZzZXRzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NU2VsZWN0aW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnNcIik7XG52YXIgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPVxuICByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NQ29tcG9uZW50XCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJlKFwiLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXJcIik7XG5cbi8qKlxuICogVGV4dCBub2RlcyB2aW9sYXRlIGEgY291cGxlIGFzc3VtcHRpb25zIHRoYXQgUmVhY3QgbWFrZXMgYWJvdXQgY29tcG9uZW50czpcbiAqXG4gKiAgLSBXaGVuIG1vdW50aW5nIHRleHQgaW50byB0aGUgRE9NLCBhZGphY2VudCB0ZXh0IG5vZGVzIGFyZSBtZXJnZWQuXG4gKiAgLSBUZXh0IG5vZGVzIGNhbm5vdCBiZSBhc3NpZ25lZCBhIFJlYWN0IHJvb3QgSUQuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgdXNlZCB0byB3cmFwIHN0cmluZ3MgaW4gZWxlbWVudHMgc28gdGhhdCB0aGV5IGNhbiB1bmRlcmdvXG4gKiB0aGUgc2FtZSByZWNvbmNpbGlhdGlvbiB0aGF0IGlzIGFwcGxpZWQgdG8gZWxlbWVudHMuXG4gKlxuICogVE9ETzogSW52ZXN0aWdhdGUgcmVwcmVzZW50aW5nIFJlYWN0IGNvbXBvbmVudHMgaW4gdGhlIERPTSB3aXRoIHRleHQgbm9kZXMuXG4gKlxuICogQGNsYXNzIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogQGV4dGVuZHMgUmVhY3RDb21wb25lbnRcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RET01UZXh0Q29tcG9uZW50ID0gZnVuY3Rpb24ocHJvcHMpIHtcbiAgLy8gVGhpcyBjb25zdHJ1Y3RvciBhbmQgaXRzIGFyZ3VtZW50IGlzIGN1cnJlbnRseSB1c2VkIGJ5IG1vY2tzLlxufTtcblxuYXNzaWduKFJlYWN0RE9NVGV4dENvbXBvbmVudC5wcm90b3R5cGUsIHtcblxuICAvKipcbiAgICogQHBhcmFtIHtSZWFjdFRleHR9IHRleHRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGlzIHJlYWxseSBhIFJlYWN0VGV4dCAoUmVhY3ROb2RlKSwgbm90IGEgUmVhY3RFbGVtZW50XG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSB0ZXh0O1xuICAgIHRoaXMuX3N0cmluZ1RleHQgPSAnJyArIHRleHQ7XG5cbiAgICAvLyBQcm9wZXJ0aWVzXG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IG51bGw7XG4gICAgdGhpcy5fbW91bnRJbmRleCA9IDA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1hcmt1cCBmb3IgdGhpcyB0ZXh0IG5vZGUuIFRoaXMgbm9kZSBpcyBub3QgaW50ZW5kZWQgdG8gaGF2ZVxuICAgKiBhbnkgZmVhdHVyZXMgYmVzaWRlcyBjb250YWluaW5nIHRleHQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTWFya3VwIGZvciB0aGlzIHRleHQgbm9kZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24ocm9vdElELCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHRoaXMuX3Jvb3ROb2RlSUQgPSByb290SUQ7XG4gICAgdmFyIGVzY2FwZWRUZXh0ID0gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHRoaXMuX3N0cmluZ1RleHQpO1xuXG4gICAgaWYgKHRyYW5zYWN0aW9uLnJlbmRlclRvU3RhdGljTWFya3VwKSB7XG4gICAgICAvLyBOb3JtYWxseSB3ZSdkIHdyYXAgdGhpcyBpbiBhIGBzcGFuYCBmb3IgdGhlIHJlYXNvbnMgc3RhdGVkIGFib3ZlLCBidXRcbiAgICAgIC8vIHNpbmNlIHRoaXMgaXMgYSBzaXR1YXRpb24gd2hlcmUgUmVhY3Qgd29uJ3QgdGFrZSBvdmVyIChzdGF0aWMgcGFnZXMpLFxuICAgICAgLy8gd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHRleHQgYXMgaXQgaXMuXG4gICAgICByZXR1cm4gZXNjYXBlZFRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICc8c3BhbiAnICsgRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvcklEKHJvb3RJRCkgKyAnPicgK1xuICAgICAgICBlc2NhcGVkVGV4dCArXG4gICAgICAnPC9zcGFuPidcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoaXMgY29tcG9uZW50IGJ5IHVwZGF0aW5nIHRoZSB0ZXh0IGNvbnRlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RUZXh0fSBuZXh0VGV4dCBUaGUgbmV4dCB0ZXh0IGNvbnRlbnRcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uKG5leHRUZXh0LCB0cmFuc2FjdGlvbikge1xuICAgIGlmIChuZXh0VGV4dCAhPT0gdGhpcy5fY3VycmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dFRleHQ7XG4gICAgICB2YXIgbmV4dFN0cmluZ1RleHQgPSAnJyArIG5leHRUZXh0O1xuICAgICAgaWYgKG5leHRTdHJpbmdUZXh0ICE9PSB0aGlzLl9zdHJpbmdUZXh0KSB7XG4gICAgICAgIC8vIFRPRE86IFNhdmUgdGhpcyBhcyBwZW5kaW5nIHByb3BzIGFuZCB1c2UgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5XG4gICAgICAgIC8vIGFuZC9vciB1cGRhdGVDb21wb25lbnQgdG8gZG8gdGhlIGFjdHVhbCB1cGRhdGUgZm9yIGNvbnNpc3RlbmN5IHdpdGhcbiAgICAgICAgLy8gb3RoZXIgY29tcG9uZW50IHR5cGVzP1xuICAgICAgICB0aGlzLl9zdHJpbmdUZXh0ID0gbmV4dFN0cmluZ1RleHQ7XG4gICAgICAgIFJlYWN0RE9NQ29tcG9uZW50LkJhY2tlbmRJRE9wZXJhdGlvbnMudXBkYXRlVGV4dENvbnRlbnRCeUlEKFxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQsXG4gICAgICAgICAgbmV4dFN0cmluZ1RleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24oKSB7XG4gICAgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQudW5tb3VudElERnJvbUVudmlyb25tZW50KHRoaXMuX3Jvb3ROb2RlSUQpO1xuICB9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NVGV4dENvbXBvbmVudDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RET01UZXh0YXJlYVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEF1dG9Gb2N1c01peGluID0gcmVxdWlyZShcIi4vQXV0b0ZvY3VzTWl4aW5cIik7XG52YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZShcIi4vRE9NUHJvcGVydHlPcGVyYXRpb25zXCIpO1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSByZXF1aXJlKFwiLi9MaW5rZWRWYWx1ZVV0aWxzXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciB0ZXh0YXJlYSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5KCd0ZXh0YXJlYScpO1xuXG5mdW5jdGlvbiBmb3JjZVVwZGF0ZUlmTW91bnRlZCgpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgaWYgKHRoaXMuaXNNb3VudGVkKCkpIHtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHRleHRhcmVhPiBuYXRpdmUgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kXG4gKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpc1xuICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAqIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsXG4gKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wXG4gKiBgZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS5cbiAqL1xudmFyIFJlYWN0RE9NVGV4dGFyZWEgPSBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgZGlzcGxheU5hbWU6ICdSZWFjdERPTVRleHRhcmVhJyxcbiAgdGFnTmFtZTogJ1RFWFRBUkVBJyxcblxuICBtaXhpbnM6IFtBdXRvRm9jdXNNaXhpbiwgTGlua2VkVmFsdWVVdGlscy5NaXhpbiwgUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5dLFxuXG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMucHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIC8vIFRPRE8gKHl1bmdzdGVycyk6IFJlbW92ZSBzdXBwb3J0IGZvciBjaGlsZHJlbiBjb250ZW50IGluIDx0ZXh0YXJlYT4uXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIGluc3RlYWQgb2Ygc2V0dGluZyAnICtcbiAgICAgICAgICAnY2hpbGRyZW4gb24gPHRleHRhcmVhPi4nXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgIH1cbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9PSBudWxsLFxuICAgICAgICAnSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLidcbiAgICAgICkgOiBpbnZhcmlhbnQoZGVmYXVsdFZhbHVlID09IG51bGwpKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIGNoaWxkcmVuLmxlbmd0aCA8PSAxLFxuICAgICAgICAgICc8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuJ1xuICAgICAgICApIDogaW52YXJpYW50KGNoaWxkcmVuLmxlbmd0aCA8PSAxKSk7XG4gICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICcnICsgY2hpbGRyZW47XG4gICAgfVxuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gJyc7XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUodGhpcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFdlIHNhdmUgdGhlIGluaXRpYWwgdmFsdWUgc28gdGhhdCBgUmVhY3RET01Db21wb25lbnRgIGRvZXNuJ3QgdXBkYXRlXG4gICAgICAvLyBgdGV4dENvbnRlbnRgICh1bm5lY2Vzc2FyeSBzaW5jZSB3ZSB1cGRhdGUgdmFsdWUpLlxuICAgICAgLy8gVGhlIGluaXRpYWwgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzXG4gICAgICAvLyBmb3JjZWQgdG8gYmUgYSBzdHJpbmcuXG4gICAgICBpbml0aWFsVmFsdWU6ICcnICsgKHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZSlcbiAgICB9O1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgLy8gQ2xvbmUgYHRoaXMucHJvcHNgIHNvIHdlIGRvbid0IG11dGF0ZSB0aGUgaW5wdXQuXG4gICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCB0aGlzLnByb3BzKTtcblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsLFxuICAgICAgJ2BkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LidcbiAgICApIDogaW52YXJpYW50KHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKTtcblxuICAgIHByb3BzLmRlZmF1bHRWYWx1ZSA9IG51bGw7XG4gICAgcHJvcHMudmFsdWUgPSBudWxsO1xuICAgIHByb3BzLm9uQ2hhbmdlID0gdGhpcy5faGFuZGxlQ2hhbmdlO1xuXG4gICAgLy8gQWx3YXlzIHNldCBjaGlsZHJlbiB0byB0aGUgc2FtZSB0aGluZy4gSW4gSUU5LCB0aGUgc2VsZWN0aW9uIHJhbmdlIHdpbGxcbiAgICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLlxuICAgIHJldHVybiB0ZXh0YXJlYShwcm9wcywgdGhpcy5zdGF0ZS5pbml0aWFsVmFsdWUpO1xuICB9LFxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZTogZnVuY3Rpb24ocHJldlByb3BzLCBwcmV2U3RhdGUsIHByZXZDb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5nZXRET01Ob2RlKCk7XG4gICAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgICAgRE9NUHJvcGVydHlPcGVyYXRpb25zLnNldFZhbHVlRm9yUHJvcGVydHkocm9vdE5vZGUsICd2YWx1ZScsICcnICsgdmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbihldmVudCkge1xuICAgIHZhciByZXR1cm5WYWx1ZTtcbiAgICB2YXIgb25DaGFuZ2UgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldE9uQ2hhbmdlKHRoaXMpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBvbkNoYW5nZS5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9XG4gICAgUmVhY3RVcGRhdGVzLmFzYXAoZm9yY2VVcGRhdGVJZk1vdW50ZWQsIHRoaXMpO1xuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTVRleHRhcmVhO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVUMDFVWlhoMFlYSmxZUzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBSRTlOVkdWNGRHRnlaV0ZjYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiblpoY2lCQmRYUnZSbTlqZFhOTmFYaHBiaUE5SUhKbGNYVnBjbVVvWENJdUwwRjFkRzlHYjJOMWMwMXBlR2x1WENJcE8xeHVkbUZ5SUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWMxd2lLVHRjYm5aaGNpQk1hVzVyWldSV1lXeDFaVlYwYVd4eklEMGdjbVZ4ZFdseVpTaGNJaTR2VEdsdWEyVmtWbUZzZFdWVmRHbHNjMXdpS1R0Y2JuWmhjaUJTWldGamRFSnliM2R6WlhKRGIyMXdiMjVsYm5STmFYaHBiaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUW5KdmQzTmxja052YlhCdmJtVnVkRTFwZUdsdVhDSXBPMXh1ZG1GeUlGSmxZV04wUTJ4aGMzTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU5zWVhOelhDSXBPMXh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JuWmhjaUJTWldGamRGVndaR0YwWlhNZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGVndaR0YwWlhOY0lpazdYRzVjYm5aaGNpQmhjM05wWjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlQWW1wbFkzUXVZWE56YVdkdVhDSXBPMXh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1ZG1GeUlIZGhjbTVwYm1jZ1BTQnlaWEYxYVhKbEtGd2lMaTkzWVhKdWFXNW5YQ0lwTzF4dVhHNTJZWElnZEdWNGRHRnlaV0VnUFNCU1pXRmpkRVZzWlcxbGJuUXVZM0psWVhSbFJtRmpkRzl5ZVNnbmRHVjRkR0Z5WldFbktUdGNibHh1Wm5WdVkzUnBiMjRnWm05eVkyVlZjR1JoZEdWSlprMXZkVzUwWldRb0tTQjdYRzRnSUM4cWFuTm9hVzUwSUhaaGJHbGtkR2hwY3pwMGNuVmxJQ292WEc0Z0lHbG1JQ2gwYUdsekxtbHpUVzkxYm5SbFpDZ3BLU0I3WEc0Z0lDQWdkR2hwY3k1bWIzSmpaVlZ3WkdGMFpTZ3BPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nU1cxd2JHVnRaVzUwY3lCaElEeDBaWGgwWVhKbFlUNGdibUYwYVhabElHTnZiWEJ2Ym1WdWRDQjBhR0YwSUdGc2JHOTNjeUJ6WlhSMGFXNW5JR0IyWVd4MVpXQXNJR0Z1WkZ4dUlDb2dZR1JsWm1GMWJIUldZV3gxWldBdUlGUm9hWE1nWkdsbVptVnljeUJtY205dElIUm9aU0IwY21Ga2FYUnBiMjVoYkNCRVQwMGdRVkJKSUdKbFkyRjFjMlVnZG1Gc2RXVWdhWE5jYmlBcUlIVnpkV0ZzYkhrZ2MyVjBJR0Z6SUZCRFJFRlVRU0JqYUdsc1pISmxiaTVjYmlBcVhHNGdLaUJKWmlCZ2RtRnNkV1ZnSUdseklHNXZkQ0J6ZFhCd2JHbGxaQ0FvYjNJZ2JuVnNiQzkxYm1SbFptbHVaV1FwTENCMWMyVnlJR0ZqZEdsdmJuTWdkR2hoZENCaFptWmxZM1FnZEdobFhHNGdLaUIyWVd4MVpTQjNhV3hzSUhSeWFXZG5aWElnZFhCa1lYUmxjeUIwYnlCMGFHVWdaV3hsYldWdWRDNWNiaUFxWEc0Z0tpQkpaaUJnZG1Gc2RXVmdJR2x6SUhOMWNIQnNhV1ZrSUNoaGJtUWdibTkwSUc1MWJHd3ZkVzVrWldacGJtVmtLU3dnZEdobElISmxibVJsY21Wa0lHVnNaVzFsYm5RZ2QybHNiRnh1SUNvZ2JtOTBJSFJ5YVdkblpYSWdkWEJrWVhSbGN5QjBieUIwYUdVZ1pXeGxiV1Z1ZEM0Z1NXNXpkR1ZoWkN3Z2RHaGxJR0IyWVd4MVpXQWdjSEp2Y0NCdGRYTjBJR05vWVc1blpTQnBibHh1SUNvZ2IzSmtaWElnWm05eUlIUm9aU0J5Wlc1a1pYSmxaQ0JsYkdWdFpXNTBJSFJ2SUdKbElIVndaR0YwWldRdVhHNGdLbHh1SUNvZ1ZHaGxJSEpsYm1SbGNtVmtJR1ZzWlcxbGJuUWdkMmxzYkNCaVpTQnBibWwwYVdGc2FYcGxaQ0IzYVhSb0lHRnVJR1Z0Y0hSNUlIWmhiSFZsTENCMGFHVWdjSEp2Y0Z4dUlDb2dZR1JsWm1GMWJIUldZV3gxWldBZ2FXWWdjM0JsWTJsbWFXVmtMQ0J2Y2lCMGFHVWdZMmhwYkdSeVpXNGdZMjl1ZEdWdWRDQW9aR1Z3Y21WallYUmxaQ2t1WEc0Z0tpOWNiblpoY2lCU1pXRmpkRVJQVFZSbGVIUmhjbVZoSUQwZ1VtVmhZM1JEYkdGemN5NWpjbVZoZEdWRGJHRnpjeWg3WEc0Z0lHUnBjM0JzWVhsT1lXMWxPaUFuVW1WaFkzUkVUMDFVWlhoMFlYSmxZU2NzWEc0Z0lIUmhaMDVoYldVNklDZFVSVmhVUVZKRlFTY3NYRzVjYmlBZ2JXbDRhVzV6T2lCYlFYVjBiMFp2WTNWelRXbDRhVzRzSUV4cGJtdGxaRlpoYkhWbFZYUnBiSE11VFdsNGFXNHNJRkpsWVdOMFFuSnZkM05sY2tOdmJYQnZibVZ1ZEUxcGVHbHVYU3hjYmx4dUlDQm5aWFJKYm1sMGFXRnNVM1JoZEdVNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lIWmhjaUJrWldaaGRXeDBWbUZzZFdVZ1BTQjBhR2x6TG5CeWIzQnpMbVJsWm1GMWJIUldZV3gxWlR0Y2JpQWdJQ0F2THlCVVQwUlBJQ2g1ZFc1bmMzUmxjbk1wT2lCU1pXMXZkbVVnYzNWd2NHOXlkQ0JtYjNJZ1kyaHBiR1J5Wlc0Z1kyOXVkR1Z1ZENCcGJpQThkR1Y0ZEdGeVpXRStMbHh1SUNBZ0lIWmhjaUJqYUdsc1pISmxiaUE5SUhSb2FYTXVjSEp2Y0hNdVkyaHBiR1J5Wlc0N1hHNGdJQ0FnYVdZZ0tHTm9hV3hrY21WdUlDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdKMVZ6WlNCMGFHVWdZR1JsWm1GMWJIUldZV3gxWldBZ2IzSWdZSFpoYkhWbFlDQndjbTl3Y3lCcGJuTjBaV0ZrSUc5bUlITmxkSFJwYm1jZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjJOb2FXeGtjbVZ1SUc5dUlEeDBaWGgwWVhKbFlUNHVKMXh1SUNBZ0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBWbUZzZFdVZ1BUMGdiblZzYkN4Y2JpQWdJQ0FnSUNBZ0owbG1JSGx2ZFNCemRYQndiSGtnWUdSbFptRjFiSFJXWVd4MVpXQWdiMjRnWVNBOGRHVjRkR0Z5WldFK0xDQmtieUJ1YjNRZ2NHRnpjeUJqYUdsc1pISmxiaTRuWEc0Z0lDQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHUmxabUYxYkhSV1lXeDFaU0E5UFNCdWRXeHNLU2s3WEc0Z0lDQWdJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2hqYUdsc1pISmxiaWtwSUh0Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUNBZ0lDQmphR2xzWkhKbGJpNXNaVzVuZEdnZ1BEMGdNU3hjYmlBZ0lDQWdJQ0FnSUNBblBIUmxlSFJoY21WaFBpQmpZVzRnYjI1c2VTQm9ZWFpsSUdGMElHMXZjM1FnYjI1bElHTm9hV3hrTGlkY2JpQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hqYUdsc1pISmxiaTVzWlc1bmRHZ2dQRDBnTVNrcE8xeHVJQ0FnSUNBZ0lDQmphR2xzWkhKbGJpQTlJR05vYVd4a2NtVnVXekJkTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCa1pXWmhkV3gwVm1Gc2RXVWdQU0FuSnlBcklHTm9hV3hrY21WdU8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb1pHVm1ZWFZzZEZaaGJIVmxJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJR1JsWm1GMWJIUldZV3gxWlNBOUlDY25PMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdkbUZzZFdVZ1BTQk1hVzVyWldSV1lXeDFaVlYwYVd4ekxtZGxkRlpoYkhWbEtIUm9hWE1wTzF4dUlDQWdJSEpsZEhWeWJpQjdYRzRnSUNBZ0lDQXZMeUJYWlNCellYWmxJSFJvWlNCcGJtbDBhV0ZzSUhaaGJIVmxJSE52SUhSb1lYUWdZRkpsWVdOMFJFOU5RMjl0Y0c5dVpXNTBZQ0JrYjJWemJpZDBJSFZ3WkdGMFpWeHVJQ0FnSUNBZ0x5OGdZSFJsZUhSRGIyNTBaVzUwWUNBb2RXNXVaV05sYzNOaGNua2djMmx1WTJVZ2QyVWdkWEJrWVhSbElIWmhiSFZsS1M1Y2JpQWdJQ0FnSUM4dklGUm9aU0JwYm1sMGFXRnNJSFpoYkhWbElHTmhiaUJpWlNCaElHSnZiMnhsWVc0Z2IzSWdiMkpxWldOMElITnZJSFJvWVhRbmN5QjNhSGtnYVhRbmMxeHVJQ0FnSUNBZ0x5OGdabTl5WTJWa0lIUnZJR0psSUdFZ2MzUnlhVzVuTGx4dUlDQWdJQ0FnYVc1cGRHbGhiRlpoYkhWbE9pQW5KeUFySUNoMllXeDFaU0FoUFNCdWRXeHNJRDhnZG1Gc2RXVWdPaUJrWldaaGRXeDBWbUZzZFdVcFhHNGdJQ0FnZlR0Y2JpQWdmU3hjYmx4dUlDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDOHZJRU5zYjI1bElHQjBhR2x6TG5CeWIzQnpZQ0J6YnlCM1pTQmtiMjRuZENCdGRYUmhkR1VnZEdobElHbHVjSFYwTGx4dUlDQWdJSFpoY2lCd2NtOXdjeUE5SUdGemMybG5iaWg3ZlN3Z2RHaHBjeTV3Y205d2N5azdYRzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2NISnZjSE11WkdGdVoyVnliM1Z6YkhsVFpYUkpibTVsY2toVVRVd2dQVDBnYm5Wc2JDeGNiaUFnSUNBZ0lDZGdaR0Z1WjJWeWIzVnpiSGxUWlhSSmJtNWxja2hVVFV4Z0lHUnZaWE1nYm05MElHMWhhMlVnYzJWdWMyVWdiMjRnUEhSbGVIUmhjbVZoUGk0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHdjbTl3Y3k1a1lXNW5aWEp2ZFhOc2VWTmxkRWx1Ym1WeVNGUk5UQ0E5UFNCdWRXeHNLU2s3WEc1Y2JpQWdJQ0J3Y205d2N5NWtaV1poZFd4MFZtRnNkV1VnUFNCdWRXeHNPMXh1SUNBZ0lIQnliM0J6TG5aaGJIVmxJRDBnYm5Wc2JEdGNiaUFnSUNCd2NtOXdjeTV2YmtOb1lXNW5aU0E5SUhSb2FYTXVYMmhoYm1Sc1pVTm9ZVzVuWlR0Y2JseHVJQ0FnSUM4dklFRnNkMkY1Y3lCelpYUWdZMmhwYkdSeVpXNGdkRzhnZEdobElITmhiV1VnZEdocGJtY3VJRWx1SUVsRk9Td2dkR2hsSUhObGJHVmpkR2x2YmlCeVlXNW5aU0IzYVd4c1hHNGdJQ0FnTHk4Z1oyVjBJSEpsYzJWMElHbG1JR0IwWlhoMFEyOXVkR1Z1ZEdBZ2FYTWdiWFYwWVhSbFpDNWNiaUFnSUNCeVpYUjFjbTRnZEdWNGRHRnlaV0VvY0hKdmNITXNJSFJvYVhNdWMzUmhkR1V1YVc1cGRHbGhiRlpoYkhWbEtUdGNiaUFnZlN4Y2JseHVJQ0JqYjIxd2IyNWxiblJFYVdSVmNHUmhkR1U2SUdaMWJtTjBhVzl1S0hCeVpYWlFjbTl3Y3l3Z2NISmxkbE4wWVhSbExDQndjbVYyUTI5dWRHVjRkQ2tnZTF4dUlDQWdJSFpoY2lCMllXeDFaU0E5SUV4cGJtdGxaRlpoYkhWbFZYUnBiSE11WjJWMFZtRnNkV1VvZEdocGN5azdYRzRnSUNBZ2FXWWdLSFpoYkhWbElDRTlJRzUxYkd3cElIdGNiaUFnSUNBZ0lIWmhjaUJ5YjI5MFRtOWtaU0E5SUhSb2FYTXVaMlYwUkU5TlRtOWtaU2dwTzF4dUlDQWdJQ0FnTHk4Z1EyRnpkQ0JnZG1Gc2RXVmdJSFJ2SUdFZ2MzUnlhVzVuSUhSdklHVnVjM1Z5WlNCMGFHVWdkbUZzZFdVZ2FYTWdjMlYwSUdOdmNuSmxZM1JzZVM0Z1YyaHBiR1ZjYmlBZ0lDQWdJQzh2SUdKeWIzZHpaWEp6SUhSNWNHbGpZV3hzZVNCa2J5QjBhR2x6SUdGeklHNWxZMlZ6YzJGeWVTd2dhbk5rYjIwZ1pHOWxjMjRuZEM1Y2JpQWdJQ0FnSUVSUFRWQnliM0JsY25SNVQzQmxjbUYwYVc5dWN5NXpaWFJXWVd4MVpVWnZjbEJ5YjNCbGNuUjVLSEp2YjNST2IyUmxMQ0FuZG1Gc2RXVW5MQ0FuSnlBcklIWmhiSFZsS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ1gyaGhibVJzWlVOb1lXNW5aVG9nWm5WdVkzUnBiMjRvWlhabGJuUXBJSHRjYmlBZ0lDQjJZWElnY21WMGRYSnVWbUZzZFdVN1hHNGdJQ0FnZG1GeUlHOXVRMmhoYm1kbElEMGdUR2x1YTJWa1ZtRnNkV1ZWZEdsc2N5NW5aWFJQYmtOb1lXNW5aU2gwYUdsektUdGNiaUFnSUNCcFppQW9iMjVEYUdGdVoyVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJsWmhiSFZsSUQwZ2IyNURhR0Z1WjJVdVkyRnNiQ2gwYUdsekxDQmxkbVZ1ZENrN1hHNGdJQ0FnZlZ4dUlDQWdJRkpsWVdOMFZYQmtZWFJsY3k1aGMyRndLR1p2Y21ObFZYQmtZWFJsU1daTmIzVnVkR1ZrTENCMGFHbHpLVHRjYmlBZ0lDQnlaWFIxY200Z2NtVjBkWEp1Vm1Gc2RXVTdYRzRnSUgxY2JseHVmU2s3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JFVDAxVVpYaDBZWEpsWVR0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG52YXIgVHJhbnNhY3Rpb24gPSByZXF1aXJlKFwiLi9UcmFuc2FjdGlvblwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbnZhciBSRVNFVF9CQVRDSEVEX1VQREFURVMgPSB7XG4gIGluaXRpYWxpemU6IGVtcHR5RnVuY3Rpb24sXG4gIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID0gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBGTFVTSF9CQVRDSEVEX1VQREFURVMgPSB7XG4gIGluaXRpYWxpemU6IGVtcHR5RnVuY3Rpb24sXG4gIGNsb3NlOiBSZWFjdFVwZGF0ZXMuZmx1c2hCYXRjaGVkVXBkYXRlcy5iaW5kKFJlYWN0VXBkYXRlcylcbn07XG5cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtGTFVTSF9CQVRDSEVEX1VQREFURVMsIFJFU0VUX0JBVENIRURfVVBEQVRFU107XG5cbmZ1bmN0aW9uIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lUcmFuc2FjdGlvbigpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xufVxuXG5hc3NpZ24oXG4gIFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lUcmFuc2FjdGlvbi5wcm90b3R5cGUsXG4gIFRyYW5zYWN0aW9uLk1peGluLFxuICB7XG4gICAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gVFJBTlNBQ1RJT05fV1JBUFBFUlM7XG4gICAgfVxuICB9XG4pO1xuXG52YXIgdHJhbnNhY3Rpb24gPSBuZXcgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5zYWN0aW9uKCk7XG5cbnZhciBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5ID0ge1xuICBpc0JhdGNoaW5nVXBkYXRlczogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENhbGwgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGluIGEgY29udGV4dCB3aXRoaW4gd2hpY2ggY2FsbHMgdG8gYHNldFN0YXRlYFxuICAgKiBhbmQgZnJpZW5kcyBhcmUgYmF0Y2hlZCBzdWNoIHRoYXQgY29tcG9uZW50cyBhcmVuJ3QgdXBkYXRlZCB1bm5lY2Vzc2FyaWx5LlxuICAgKi9cbiAgYmF0Y2hlZFVwZGF0ZXM6IGZ1bmN0aW9uKGNhbGxiYWNrLCBhLCBiLCBjLCBkKSB7XG4gICAgdmFyIGFscmVhZHlCYXRjaGluZ1VwZGF0ZXMgPSBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzO1xuXG4gICAgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcyA9IHRydWU7XG5cbiAgICAvLyBUaGUgY29kZSBpcyB3cml0dGVuIHRoaXMgd2F5IHRvIGF2b2lkIGV4dHJhIGFsbG9jYXRpb25zXG4gICAgaWYgKGFscmVhZHlCYXRjaGluZ1VwZGF0ZXMpIHtcbiAgICAgIGNhbGxiYWNrKGEsIGIsIGMsIGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuc2FjdGlvbi5wZXJmb3JtKGNhbGxiYWNrLCBudWxsLCBhLCBiLCBjLCBkKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3REZWZhdWx0SW5qZWN0aW9uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQmVmb3JlSW5wdXRFdmVudFBsdWdpbiA9IHJlcXVpcmUoXCIuL0JlZm9yZUlucHV0RXZlbnRQbHVnaW5cIik7XG52YXIgQ2hhbmdlRXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9DaGFuZ2VFdmVudFBsdWdpblwiKTtcbnZhciBDbGllbnRSZWFjdFJvb3RJbmRleCA9IHJlcXVpcmUoXCIuL0NsaWVudFJlYWN0Um9vdEluZGV4XCIpO1xudmFyIERlZmF1bHRFdmVudFBsdWdpbk9yZGVyID0gcmVxdWlyZShcIi4vRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXJcIik7XG52YXIgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luID0gcmVxdWlyZShcIi4vRW50ZXJMZWF2ZUV2ZW50UGx1Z2luXCIpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG52YXIgSFRNTERPTVByb3BlcnR5Q29uZmlnID0gcmVxdWlyZShcIi4vSFRNTERPTVByb3BlcnR5Q29uZmlnXCIpO1xudmFyIE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9Nb2JpbGVTYWZhcmlDbGlja0V2ZW50UGx1Z2luXCIpO1xudmFyIFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyQ29tcG9uZW50TWl4aW5cIik7XG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQgPVxuICByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5ID0gcmVxdWlyZShcIi4vUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVwiKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0RE9NQnV0dG9uID0gcmVxdWlyZShcIi4vUmVhY3RET01CdXR0b25cIik7XG52YXIgUmVhY3RET01Gb3JtID0gcmVxdWlyZShcIi4vUmVhY3RET01Gb3JtXCIpO1xudmFyIFJlYWN0RE9NSW1nID0gcmVxdWlyZShcIi4vUmVhY3RET01JbWdcIik7XG52YXIgUmVhY3RET01JRE9wZXJhdGlvbnMgPSByZXF1aXJlKFwiLi9SZWFjdERPTUlET3BlcmF0aW9uc1wiKTtcbnZhciBSZWFjdERPTUlmcmFtZSA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NSWZyYW1lXCIpO1xudmFyIFJlYWN0RE9NSW5wdXQgPSByZXF1aXJlKFwiLi9SZWFjdERPTUlucHV0XCIpO1xudmFyIFJlYWN0RE9NT3B0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RET01PcHRpb25cIik7XG52YXIgUmVhY3RET01TZWxlY3QgPSByZXF1aXJlKFwiLi9SZWFjdERPTVNlbGVjdFwiKTtcbnZhciBSZWFjdERPTVRleHRhcmVhID0gcmVxdWlyZShcIi4vUmVhY3RET01UZXh0YXJlYVwiKTtcbnZhciBSZWFjdERPTVRleHRDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdERPTVRleHRDb21wb25lbnRcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RXZlbnRMaXN0ZW5lciA9IHJlcXVpcmUoXCIuL1JlYWN0RXZlbnRMaXN0ZW5lclwiKTtcbnZhciBSZWFjdEluamVjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0SW5qZWN0aW9uXCIpO1xudmFyIFJlYWN0SW5zdGFuY2VIYW5kbGVzID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXNcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb25cIik7XG52YXIgU2VsZWN0RXZlbnRQbHVnaW4gPSByZXF1aXJlKFwiLi9TZWxlY3RFdmVudFBsdWdpblwiKTtcbnZhciBTZXJ2ZXJSZWFjdFJvb3RJbmRleCA9IHJlcXVpcmUoXCIuL1NlcnZlclJlYWN0Um9vdEluZGV4XCIpO1xudmFyIFNpbXBsZUV2ZW50UGx1Z2luID0gcmVxdWlyZShcIi4vU2ltcGxlRXZlbnRQbHVnaW5cIik7XG52YXIgU1ZHRE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKFwiLi9TVkdET01Qcm9wZXJ0eUNvbmZpZ1wiKTtcblxudmFyIGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vY3JlYXRlRnVsbFBhZ2VDb21wb25lbnRcIik7XG5cbmZ1bmN0aW9uIGF1dG9HZW5lcmF0ZVdyYXBwZXJDbGFzcyh0eXBlKSB7XG4gIHJldHVybiBSZWFjdENsYXNzLmNyZWF0ZUNsYXNzKHtcbiAgICB0YWdOYW1lOiB0eXBlLnRvVXBwZXJDYXNlKCksXG4gICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuZXcgUmVhY3RFbGVtZW50KFxuICAgICAgICB0eXBlLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnByb3BzXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluamVjdCgpIHtcbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRFbWl0dGVyLmluamVjdFJlYWN0RXZlbnRMaXN0ZW5lcihcbiAgICBSZWFjdEV2ZW50TGlzdGVuZXJcbiAgKTtcblxuICAvKipcbiAgICogSW5qZWN0IG1vZHVsZXMgZm9yIHJlc29sdmluZyBET00gaGllcmFyY2h5IGFuZCBwbHVnaW4gb3JkZXJpbmcuXG4gICAqL1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdpbk9yZGVyKERlZmF1bHRFdmVudFBsdWdpbk9yZGVyKTtcbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRQbHVnaW5IdWIuaW5qZWN0SW5zdGFuY2VIYW5kbGUoUmVhY3RJbnN0YW5jZUhhbmRsZXMpO1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpbkh1Yi5pbmplY3RNb3VudChSZWFjdE1vdW50KTtcblxuICAvKipcbiAgICogU29tZSBpbXBvcnRhbnQgZXZlbnQgcGx1Z2lucyBpbmNsdWRlZCBieSBkZWZhdWx0ICh3aXRob3V0IGhhdmluZyB0byByZXF1aXJlXG4gICAqIHRoZW0pLlxuICAgKi9cbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRQbHVnaW5IdWIuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtcbiAgICBTaW1wbGVFdmVudFBsdWdpbjogU2ltcGxlRXZlbnRQbHVnaW4sXG4gICAgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luOiBFbnRlckxlYXZlRXZlbnRQbHVnaW4sXG4gICAgQ2hhbmdlRXZlbnRQbHVnaW46IENoYW5nZUV2ZW50UGx1Z2luLFxuICAgIE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW46IE1vYmlsZVNhZmFyaUNsaWNrRXZlbnRQbHVnaW4sXG4gICAgU2VsZWN0RXZlbnRQbHVnaW46IFNlbGVjdEV2ZW50UGx1Z2luLFxuICAgIEJlZm9yZUlucHV0RXZlbnRQbHVnaW46IEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbiAgfSk7XG5cbiAgUmVhY3RJbmplY3Rpb24uTmF0aXZlQ29tcG9uZW50LmluamVjdEdlbmVyaWNDb21wb25lbnRDbGFzcyhcbiAgICBSZWFjdERPTUNvbXBvbmVudFxuICApO1xuXG4gIFJlYWN0SW5qZWN0aW9uLk5hdGl2ZUNvbXBvbmVudC5pbmplY3RUZXh0Q29tcG9uZW50Q2xhc3MoXG4gICAgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gICk7XG5cbiAgUmVhY3RJbmplY3Rpb24uTmF0aXZlQ29tcG9uZW50LmluamVjdEF1dG9XcmFwcGVyKFxuICAgIGF1dG9HZW5lcmF0ZVdyYXBwZXJDbGFzc1xuICApO1xuXG4gIC8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBjcmVhdGVGdWxsUGFnZUNvbXBvbmVudCgpIG90aGVyd2lzZSB0aGUgbWl4aW5cbiAgLy8gd29uJ3QgYmUgaW5jbHVkZWQuXG4gIFJlYWN0SW5qZWN0aW9uLkNsYXNzLmluamVjdE1peGluKFJlYWN0QnJvd3NlckNvbXBvbmVudE1peGluKTtcblxuICBSZWFjdEluamVjdGlvbi5OYXRpdmVDb21wb25lbnQuaW5qZWN0Q29tcG9uZW50Q2xhc3Nlcyh7XG4gICAgJ2J1dHRvbic6IFJlYWN0RE9NQnV0dG9uLFxuICAgICdmb3JtJzogUmVhY3RET01Gb3JtLFxuICAgICdpZnJhbWUnOiBSZWFjdERPTUlmcmFtZSxcbiAgICAnaW1nJzogUmVhY3RET01JbWcsXG4gICAgJ2lucHV0JzogUmVhY3RET01JbnB1dCxcbiAgICAnb3B0aW9uJzogUmVhY3RET01PcHRpb24sXG4gICAgJ3NlbGVjdCc6IFJlYWN0RE9NU2VsZWN0LFxuICAgICd0ZXh0YXJlYSc6IFJlYWN0RE9NVGV4dGFyZWEsXG5cbiAgICAnaHRtbCc6IGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50KCdodG1sJyksXG4gICAgJ2hlYWQnOiBjcmVhdGVGdWxsUGFnZUNvbXBvbmVudCgnaGVhZCcpLFxuICAgICdib2R5JzogY3JlYXRlRnVsbFBhZ2VDb21wb25lbnQoJ2JvZHknKVxuICB9KTtcblxuICBSZWFjdEluamVjdGlvbi5ET01Qcm9wZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyhIVE1MRE9NUHJvcGVydHlDb25maWcpO1xuICBSZWFjdEluamVjdGlvbi5ET01Qcm9wZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyhTVkdET01Qcm9wZXJ0eUNvbmZpZyk7XG5cbiAgUmVhY3RJbmplY3Rpb24uRW1wdHlDb21wb25lbnQuaW5qZWN0RW1wdHlDb21wb25lbnQoJ25vc2NyaXB0Jyk7XG5cbiAgUmVhY3RJbmplY3Rpb24uVXBkYXRlcy5pbmplY3RSZWNvbmNpbGVUcmFuc2FjdGlvbihcbiAgICBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uXG4gICk7XG4gIFJlYWN0SW5qZWN0aW9uLlVwZGF0ZXMuaW5qZWN0QmF0Y2hpbmdTdHJhdGVneShcbiAgICBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5XG4gICk7XG5cbiAgUmVhY3RJbmplY3Rpb24uUm9vdEluZGV4LmluamVjdENyZWF0ZVJlYWN0Um9vdEluZGV4KFxuICAgIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/XG4gICAgICBDbGllbnRSZWFjdFJvb3RJbmRleC5jcmVhdGVSZWFjdFJvb3RJbmRleCA6XG4gICAgICBTZXJ2ZXJSZWFjdFJvb3RJbmRleC5jcmVhdGVSZWFjdFJvb3RJbmRleFxuICApO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkNvbXBvbmVudC5pbmplY3RFbnZpcm9ubWVudChSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCk7XG4gIFJlYWN0SW5qZWN0aW9uLkRPTUNvbXBvbmVudC5pbmplY3RJRE9wZXJhdGlvbnMoUmVhY3RET01JRE9wZXJhdGlvbnMpO1xuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICB2YXIgdXJsID0gKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiB3aW5kb3cubG9jYXRpb24uaHJlZikgfHwgJyc7XG4gICAgaWYgKCgvWz8mXXJlYWN0X3BlcmZcXGIvKS50ZXN0KHVybCkpIHtcbiAgICAgIHZhciBSZWFjdERlZmF1bHRQZXJmID0gcmVxdWlyZShcIi4vUmVhY3REZWZhdWx0UGVyZlwiKTtcbiAgICAgIFJlYWN0RGVmYXVsdFBlcmYuc3RhcnQoKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluamVjdDogaW5qZWN0XG59O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkVaV1poZFd4MFNXNXFaV04wYVc5dUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRVJsWm1GMWJIUkpibXBsWTNScGIyNWNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJDWldadmNtVkpibkIxZEVWMlpXNTBVR3gxWjJsdUlEMGdjbVZ4ZFdseVpTaGNJaTR2UW1WbWIzSmxTVzV3ZFhSRmRtVnVkRkJzZFdkcGJsd2lLVHRjYm5aaGNpQkRhR0Z1WjJWRmRtVnVkRkJzZFdkcGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDBOb1lXNW5aVVYyWlc1MFVHeDFaMmx1WENJcE8xeHVkbUZ5SUVOc2FXVnVkRkpsWVdOMFVtOXZkRWx1WkdWNElEMGdjbVZ4ZFdseVpTaGNJaTR2UTJ4cFpXNTBVbVZoWTNSU2IyOTBTVzVrWlhoY0lpazdYRzUyWVhJZ1JHVm1ZWFZzZEVWMlpXNTBVR3gxWjJsdVQzSmtaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOUVaV1poZFd4MFJYWmxiblJRYkhWbmFXNVBjbVJsY2x3aUtUdGNiblpoY2lCRmJuUmxja3hsWVhabFJYWmxiblJRYkhWbmFXNGdQU0J5WlhGMWFYSmxLRndpTGk5RmJuUmxja3hsWVhabFJYWmxiblJRYkhWbmFXNWNJaWs3WEc1MllYSWdSWGhsWTNWMGFXOXVSVzUyYVhKdmJtMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOUZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkRndpS1R0Y2JuWmhjaUJJVkUxTVJFOU5VSEp2Y0dWeWRIbERiMjVtYVdjZ1BTQnlaWEYxYVhKbEtGd2lMaTlJVkUxTVJFOU5VSEp2Y0dWeWRIbERiMjVtYVdkY0lpazdYRzUyWVhJZ1RXOWlhV3hsVTJGbVlYSnBRMnhwWTJ0RmRtVnVkRkJzZFdkcGJpQTlJSEpsY1hWcGNtVW9YQ0l1TDAxdlltbHNaVk5oWm1GeWFVTnNhV05yUlhabGJuUlFiSFZuYVc1Y0lpazdYRzUyWVhJZ1VtVmhZM1JDY205M2MyVnlRMjl0Y0c5dVpXNTBUV2w0YVc0Z1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFSnliM2R6WlhKRGIyMXdiMjVsYm5STmFYaHBibHdpS1R0Y2JuWmhjaUJTWldGamRFTnNZWE56SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGJHRnpjMXdpS1R0Y2JuWmhjaUJTWldGamRFTnZiWEJ2Ym1WdWRFSnliM2R6WlhKRmJuWnBjbTl1YldWdWRDQTlYRzRnSUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUTI5dGNHOXVaVzUwUW5KdmQzTmxja1Z1ZG1seWIyNXRaVzUwWENJcE8xeHVkbUZ5SUZKbFlXTjBSR1ZtWVhWc2RFSmhkR05vYVc1blUzUnlZWFJsWjNrZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUmxabUYxYkhSQ1lYUmphR2x1WjFOMGNtRjBaV2Q1WENJcE8xeHVkbUZ5SUZKbFlXTjBSRTlOUTI5dGNHOXVaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRVQwMURiMjF3YjI1bGJuUmNJaWs3WEc1MllYSWdVbVZoWTNSRVQwMUNkWFIwYjI0Z1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUlBUVUoxZEhSdmJsd2lLVHRjYm5aaGNpQlNaV0ZqZEVSUFRVWnZjbTBnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSUFRVWnZjbTFjSWlrN1hHNTJZWElnVW1WaFkzUkVUMDFKYldjZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUlBUVWx0WjF3aUtUdGNiblpoY2lCU1pXRmpkRVJQVFVsRVQzQmxjbUYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSRTlOU1VSUGNHVnlZWFJwYjI1elhDSXBPMXh1ZG1GeUlGSmxZV04wUkU5TlNXWnlZVzFsSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRVQwMUpabkpoYldWY0lpazdYRzUyWVhJZ1VtVmhZM1JFVDAxSmJuQjFkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUkU5TlNXNXdkWFJjSWlrN1hHNTJZWElnVW1WaFkzUkVUMDFQY0hScGIyNGdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVJQVFU5d2RHbHZibHdpS1R0Y2JuWmhjaUJTWldGamRFUlBUVk5sYkdWamRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSRTlOVTJWc1pXTjBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJFOU5WR1Y0ZEdGeVpXRWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRVJQVFZSbGVIUmhjbVZoWENJcE8xeHVkbUZ5SUZKbFlXTjBSRTlOVkdWNGRFTnZiWEJ2Ym1WdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBSRTlOVkdWNGRFTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkZkbVZ1ZEV4cGMzUmxibVZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmRtVnVkRXhwYzNSbGJtVnlYQ0lwTzF4dWRtRnlJRkpsWVdOMFNXNXFaV04wYVc5dUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkpibXBsWTNScGIyNWNJaWs3WEc1MllYSWdVbVZoWTNSSmJuTjBZVzVqWlVoaGJtUnNaWE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVsdWMzUmhibU5sU0dGdVpHeGxjMXdpS1R0Y2JuWmhjaUJTWldGamRFMXZkVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSTmIzVnVkRndpS1R0Y2JuWmhjaUJTWldGamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ymx3aUtUdGNiblpoY2lCVFpXeGxZM1JGZG1WdWRGQnNkV2RwYmlBOUlISmxjWFZwY21Vb1hDSXVMMU5sYkdWamRFVjJaVzUwVUd4MVoybHVYQ0lwTzF4dWRtRnlJRk5sY25abGNsSmxZV04wVW05dmRFbHVaR1Y0SUQwZ2NtVnhkV2x5WlNoY0lpNHZVMlZ5ZG1WeVVtVmhZM1JTYjI5MFNXNWtaWGhjSWlrN1hHNTJZWElnVTJsdGNHeGxSWFpsYm5SUWJIVm5hVzRnUFNCeVpYRjFhWEpsS0Z3aUxpOVRhVzF3YkdWRmRtVnVkRkJzZFdkcGJsd2lLVHRjYm5aaGNpQlRWa2RFVDAxUWNtOXdaWEowZVVOdmJtWnBaeUE5SUhKbGNYVnBjbVVvWENJdUwxTldSMFJQVFZCeWIzQmxjblI1UTI5dVptbG5YQ0lwTzF4dVhHNTJZWElnWTNKbFlYUmxSblZzYkZCaFoyVkRiMjF3YjI1bGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5amNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkRndpS1R0Y2JseHVablZ1WTNScGIyNGdZWFYwYjBkbGJtVnlZWFJsVjNKaGNIQmxja05zWVhOektIUjVjR1VwSUh0Y2JpQWdjbVYwZFhKdUlGSmxZV04wUTJ4aGMzTXVZM0psWVhSbFEyeGhjM01vZTF4dUlDQWdJSFJoWjA1aGJXVTZJSFI1Y0dVdWRHOVZjSEJsY2tOaGMyVW9LU3hjYmlBZ0lDQnlaVzVrWlhJNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJTWldGamRFVnNaVzFsYm5Rb1hHNGdJQ0FnSUNBZ0lIUjVjR1VzWEc0Z0lDQWdJQ0FnSUc1MWJHd3NYRzRnSUNBZ0lDQWdJRzUxYkd3c1hHNGdJQ0FnSUNBZ0lHNTFiR3dzWEc0Z0lDQWdJQ0FnSUc1MWJHd3NYRzRnSUNBZ0lDQWdJSFJvYVhNdWNISnZjSE5jYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1SUNCOUtUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FXNXFaV04wS0NrZ2UxeHVJQ0JTWldGamRFbHVhbVZqZEdsdmJpNUZkbVZ1ZEVWdGFYUjBaWEl1YVc1cVpXTjBVbVZoWTNSRmRtVnVkRXhwYzNSbGJtVnlLRnh1SUNBZ0lGSmxZV04wUlhabGJuUk1hWE4wWlc1bGNseHVJQ0FwTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm1wbFkzUWdiVzlrZFd4bGN5Qm1iM0lnY21WemIyeDJhVzVuSUVSUFRTQm9hV1Z5WVhKamFIa2dZVzVrSUhCc2RXZHBiaUJ2Y21SbGNtbHVaeTVjYmlBZ0lDb3ZYRzRnSUZKbFlXTjBTVzVxWldOMGFXOXVMa1YyWlc1MFVHeDFaMmx1U0hWaUxtbHVhbVZqZEVWMlpXNTBVR3gxWjJsdVQzSmtaWElvUkdWbVlYVnNkRVYyWlc1MFVHeDFaMmx1VDNKa1pYSXBPMXh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVGZG1WdWRGQnNkV2RwYmtoMVlpNXBibXBsWTNSSmJuTjBZVzVqWlVoaGJtUnNaU2hTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lrN1hHNGdJRkpsWVdOMFNXNXFaV04wYVc5dUxrVjJaVzUwVUd4MVoybHVTSFZpTG1sdWFtVmpkRTF2ZFc1MEtGSmxZV04wVFc5MWJuUXBPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRiMjFsSUdsdGNHOXlkR0Z1ZENCbGRtVnVkQ0J3YkhWbmFXNXpJR2x1WTJ4MVpHVmtJR0o1SUdSbFptRjFiSFFnS0hkcGRHaHZkWFFnYUdGMmFXNW5JSFJ2SUhKbGNYVnBjbVZjYmlBZ0lDb2dkR2hsYlNrdVhHNGdJQ0FxTDF4dUlDQlNaV0ZqZEVsdWFtVmpkR2x2Ymk1RmRtVnVkRkJzZFdkcGJraDFZaTVwYm1wbFkzUkZkbVZ1ZEZCc2RXZHBibk5DZVU1aGJXVW9lMXh1SUNBZ0lGTnBiWEJzWlVWMlpXNTBVR3gxWjJsdU9pQlRhVzF3YkdWRmRtVnVkRkJzZFdkcGJpeGNiaUFnSUNCRmJuUmxja3hsWVhabFJYWmxiblJRYkhWbmFXNDZJRVZ1ZEdWeVRHVmhkbVZGZG1WdWRGQnNkV2RwYml4Y2JpQWdJQ0JEYUdGdVoyVkZkbVZ1ZEZCc2RXZHBiam9nUTJoaGJtZGxSWFpsYm5SUWJIVm5hVzRzWEc0Z0lDQWdUVzlpYVd4bFUyRm1ZWEpwUTJ4cFkydEZkbVZ1ZEZCc2RXZHBiam9nVFc5aWFXeGxVMkZtWVhKcFEyeHBZMnRGZG1WdWRGQnNkV2RwYml4Y2JpQWdJQ0JUWld4bFkzUkZkbVZ1ZEZCc2RXZHBiam9nVTJWc1pXTjBSWFpsYm5SUWJIVm5hVzRzWEc0Z0lDQWdRbVZtYjNKbFNXNXdkWFJGZG1WdWRGQnNkV2RwYmpvZ1FtVm1iM0psU1c1d2RYUkZkbVZ1ZEZCc2RXZHBibHh1SUNCOUtUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVPWVhScGRtVkRiMjF3YjI1bGJuUXVhVzVxWldOMFIyVnVaWEpwWTBOdmJYQnZibVZ1ZEVOc1lYTnpLRnh1SUNBZ0lGSmxZV04wUkU5TlEyOXRjRzl1Wlc1MFhHNGdJQ2s3WEc1Y2JpQWdVbVZoWTNSSmJtcGxZM1JwYjI0dVRtRjBhWFpsUTI5dGNHOXVaVzUwTG1sdWFtVmpkRlJsZUhSRGIyMXdiMjVsYm5SRGJHRnpjeWhjYmlBZ0lDQlNaV0ZqZEVSUFRWUmxlSFJEYjIxd2IyNWxiblJjYmlBZ0tUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVPWVhScGRtVkRiMjF3YjI1bGJuUXVhVzVxWldOMFFYVjBiMWR5WVhCd1pYSW9YRzRnSUNBZ1lYVjBiMGRsYm1WeVlYUmxWM0poY0hCbGNrTnNZWE56WEc0Z0lDazdYRzVjYmlBZ0x5OGdWR2hwY3lCdVpXVmtjeUIwYnlCb1lYQndaVzRnWW1WbWIzSmxJR055WldGMFpVWjFiR3hRWVdkbFEyOXRjRzl1Wlc1MEtDa2diM1JvWlhKM2FYTmxJSFJvWlNCdGFYaHBibHh1SUNBdkx5QjNiMjRuZENCaVpTQnBibU5zZFdSbFpDNWNiaUFnVW1WaFkzUkpibXBsWTNScGIyNHVRMnhoYzNNdWFXNXFaV04wVFdsNGFXNG9VbVZoWTNSQ2NtOTNjMlZ5UTI5dGNHOXVaVzUwVFdsNGFXNHBPMXh1WEc0Z0lGSmxZV04wU1c1cVpXTjBhVzl1TGs1aGRHbDJaVU52YlhCdmJtVnVkQzVwYm1wbFkzUkRiMjF3YjI1bGJuUkRiR0Z6YzJWektIdGNiaUFnSUNBblluVjBkRzl1SnpvZ1VtVmhZM1JFVDAxQ2RYUjBiMjRzWEc0Z0lDQWdKMlp2Y20wbk9pQlNaV0ZqZEVSUFRVWnZjbTBzWEc0Z0lDQWdKMmxtY21GdFpTYzZJRkpsWVdOMFJFOU5TV1p5WVcxbExGeHVJQ0FnSUNkcGJXY25PaUJTWldGamRFUlBUVWx0Wnl4Y2JpQWdJQ0FuYVc1d2RYUW5PaUJTWldGamRFUlBUVWx1Y0hWMExGeHVJQ0FnSUNkdmNIUnBiMjRuT2lCU1pXRmpkRVJQVFU5d2RHbHZiaXhjYmlBZ0lDQW5jMlZzWldOMEp6b2dVbVZoWTNSRVQwMVRaV3hsWTNRc1hHNGdJQ0FnSjNSbGVIUmhjbVZoSnpvZ1VtVmhZM1JFVDAxVVpYaDBZWEpsWVN4Y2JseHVJQ0FnSUNkb2RHMXNKem9nWTNKbFlYUmxSblZzYkZCaFoyVkRiMjF3YjI1bGJuUW9KMmgwYld3bktTeGNiaUFnSUNBbmFHVmhaQ2M2SUdOeVpXRjBaVVoxYkd4UVlXZGxRMjl0Y0c5dVpXNTBLQ2RvWldGa0p5a3NYRzRnSUNBZ0oySnZaSGtuT2lCamNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkQ2duWW05a2VTY3BYRzRnSUgwcE8xeHVYRzRnSUZKbFlXTjBTVzVxWldOMGFXOXVMa1JQVFZCeWIzQmxjblI1TG1sdWFtVmpkRVJQVFZCeWIzQmxjblI1UTI5dVptbG5LRWhVVFV4RVQwMVFjbTl3WlhKMGVVTnZibVpwWnlrN1hHNGdJRkpsWVdOMFNXNXFaV04wYVc5dUxrUlBUVkJ5YjNCbGNuUjVMbWx1YW1WamRFUlBUVkJ5YjNCbGNuUjVRMjl1Wm1sbktGTldSMFJQVFZCeWIzQmxjblI1UTI5dVptbG5LVHRjYmx4dUlDQlNaV0ZqZEVsdWFtVmpkR2x2Ymk1RmJYQjBlVU52YlhCdmJtVnVkQzVwYm1wbFkzUkZiWEIwZVVOdmJYQnZibVZ1ZENnbmJtOXpZM0pwY0hRbktUdGNibHh1SUNCU1pXRmpkRWx1YW1WamRHbHZiaTVWY0dSaGRHVnpMbWx1YW1WamRGSmxZMjl1WTJsc1pWUnlZVzV6WVdOMGFXOXVLRnh1SUNBZ0lGSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI1Y2JpQWdLVHRjYmlBZ1VtVmhZM1JKYm1wbFkzUnBiMjR1VlhCa1lYUmxjeTVwYm1wbFkzUkNZWFJqYUdsdVoxTjBjbUYwWldkNUtGeHVJQ0FnSUZKbFlXTjBSR1ZtWVhWc2RFSmhkR05vYVc1blUzUnlZWFJsWjNsY2JpQWdLVHRjYmx4dUlDQlNaV0ZqZEVsdWFtVmpkR2x2Ymk1U2IyOTBTVzVrWlhndWFXNXFaV04wUTNKbFlYUmxVbVZoWTNSU2IyOTBTVzVrWlhnb1hHNGdJQ0FnUlhobFkzVjBhVzl1Ulc1MmFYSnZibTFsYm5RdVkyRnVWWE5sUkU5TklEOWNiaUFnSUNBZ0lFTnNhV1Z1ZEZKbFlXTjBVbTl2ZEVsdVpHVjRMbU55WldGMFpWSmxZV04wVW05dmRFbHVaR1Y0SURwY2JpQWdJQ0FnSUZObGNuWmxjbEpsWVdOMFVtOXZkRWx1WkdWNExtTnlaV0YwWlZKbFlXTjBVbTl2ZEVsdVpHVjRYRzRnSUNrN1hHNWNiaUFnVW1WaFkzUkpibXBsWTNScGIyNHVRMjl0Y0c5dVpXNTBMbWx1YW1WamRFVnVkbWx5YjI1dFpXNTBLRkpsWVdOMFEyOXRjRzl1Wlc1MFFuSnZkM05sY2tWdWRtbHliMjV0Wlc1MEtUdGNiaUFnVW1WaFkzUkpibXBsWTNScGIyNHVSRTlOUTI5dGNHOXVaVzUwTG1sdWFtVmpkRWxFVDNCbGNtRjBhVzl1Y3loU1pXRmpkRVJQVFVsRVQzQmxjbUYwYVc5dWN5azdYRzVjYmlBZ2FXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0FnSUhaaGNpQjFjbXdnUFNBb1JYaGxZM1YwYVc5dVJXNTJhWEp2Ym0xbGJuUXVZMkZ1VlhObFJFOU5JQ1ltSUhkcGJtUnZkeTVzYjJOaGRHbHZiaTVvY21WbUtTQjhmQ0FuSnp0Y2JpQWdJQ0JwWmlBb0tDOWJQeVpkY21WaFkzUmZjR1Z5Wmx4Y1lpOHBMblJsYzNRb2RYSnNLU2tnZTF4dUlDQWdJQ0FnZG1GeUlGSmxZV04wUkdWbVlYVnNkRkJsY21ZZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFUmxabUYxYkhSUVpYSm1YQ0lwTzF4dUlDQWdJQ0FnVW1WaFkzUkVaV1poZFd4MFVHVnlaaTV6ZEdGeWRDZ3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dWZWeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJSHRjYmlBZ2FXNXFaV04wT2lCcGJtcGxZM1JjYm4wN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RGVmYXVsdFBlcmZcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKFwiLi9ET01Qcm9wZXJ0eVwiKTtcbnZhciBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMgPSByZXF1aXJlKFwiLi9SZWFjdERlZmF1bHRQZXJmQW5hbHlzaXNcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG52YXIgUmVhY3RQZXJmID0gcmVxdWlyZShcIi4vUmVhY3RQZXJmXCIpO1xuXG52YXIgcGVyZm9ybWFuY2VOb3cgPSByZXF1aXJlKFwiLi9wZXJmb3JtYW5jZU5vd1wiKTtcblxuZnVuY3Rpb24gcm91bmRGbG9hdCh2YWwpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IodmFsICogMTAwKSAvIDEwMDtcbn1cblxuZnVuY3Rpb24gYWRkVmFsdWUob2JqLCBrZXksIHZhbCkge1xuICBvYmpba2V5XSA9IChvYmpba2V5XSB8fCAwKSArIHZhbDtcbn1cblxudmFyIFJlYWN0RGVmYXVsdFBlcmYgPSB7XG4gIF9hbGxNZWFzdXJlbWVudHM6IFtdLCAvLyBsYXN0IGl0ZW0gaW4gdGhlIGxpc3QgaXMgdGhlIGN1cnJlbnQgb25lXG4gIF9tb3VudFN0YWNrOiBbMF0sXG4gIF9pbmplY3RlZDogZmFsc2UsXG5cbiAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICghUmVhY3REZWZhdWx0UGVyZi5faW5qZWN0ZWQpIHtcbiAgICAgIFJlYWN0UGVyZi5pbmplY3Rpb24uaW5qZWN0TWVhc3VyZShSZWFjdERlZmF1bHRQZXJmLm1lYXN1cmUpO1xuICAgIH1cblxuICAgIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50cy5sZW5ndGggPSAwO1xuICAgIFJlYWN0UGVyZi5lbmFibGVNZWFzdXJlID0gdHJ1ZTtcbiAgfSxcblxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBSZWFjdFBlcmYuZW5hYmxlTWVhc3VyZSA9IGZhbHNlO1xuICB9LFxuXG4gIGdldExhc3RNZWFzdXJlbWVudHM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gIH0sXG5cbiAgcHJpbnRFeGNsdXNpdmU6IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cyB8fCBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gICAgdmFyIHN1bW1hcnkgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0RXhjbHVzaXZlU3VtbWFyeShtZWFzdXJlbWVudHMpO1xuICAgIGNvbnNvbGUudGFibGUoc3VtbWFyeS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ0NvbXBvbmVudCBjbGFzcyBuYW1lJzogaXRlbS5jb21wb25lbnROYW1lLFxuICAgICAgICAnVG90YWwgaW5jbHVzaXZlIHRpbWUgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5pbmNsdXNpdmUpLFxuICAgICAgICAnRXhjbHVzaXZlIG1vdW50IHRpbWUgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5leGNsdXNpdmUpLFxuICAgICAgICAnRXhjbHVzaXZlIHJlbmRlciB0aW1lIChtcyknOiByb3VuZEZsb2F0KGl0ZW0ucmVuZGVyKSxcbiAgICAgICAgJ01vdW50IHRpbWUgcGVyIGluc3RhbmNlIChtcyknOiByb3VuZEZsb2F0KGl0ZW0uZXhjbHVzaXZlIC8gaXRlbS5jb3VudCksXG4gICAgICAgICdSZW5kZXIgdGltZSBwZXIgaW5zdGFuY2UgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS5yZW5kZXIgLyBpdGVtLmNvdW50KSxcbiAgICAgICAgJ0luc3RhbmNlcyc6IGl0ZW0uY291bnRcbiAgICAgIH07XG4gICAgfSkpO1xuICAgIC8vIFRPRE86IFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRUb3RhbFRpbWUoKSBkb2VzIG5vdCByZXR1cm4gdGhlIGNvcnJlY3RcbiAgICAvLyBudW1iZXIuXG4gIH0sXG5cbiAgcHJpbnRJbmNsdXNpdmU6IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cyB8fCBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gICAgdmFyIHN1bW1hcnkgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0SW5jbHVzaXZlU3VtbWFyeShtZWFzdXJlbWVudHMpO1xuICAgIGNvbnNvbGUudGFibGUoc3VtbWFyeS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ093bmVyID4gY29tcG9uZW50JzogaXRlbS5jb21wb25lbnROYW1lLFxuICAgICAgICAnSW5jbHVzaXZlIHRpbWUgKG1zKSc6IHJvdW5kRmxvYXQoaXRlbS50aW1lKSxcbiAgICAgICAgJ0luc3RhbmNlcyc6IGl0ZW0uY291bnRcbiAgICAgIH07XG4gICAgfSkpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1RvdGFsIHRpbWU6JyxcbiAgICAgIFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRUb3RhbFRpbWUobWVhc3VyZW1lbnRzKS50b0ZpeGVkKDIpICsgJyBtcydcbiAgICApO1xuICB9LFxuXG4gIGdldE1lYXN1cmVtZW50c1N1bW1hcnlNYXA6IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIHZhciBzdW1tYXJ5ID0gUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldEluY2x1c2l2ZVN1bW1hcnkoXG4gICAgICBtZWFzdXJlbWVudHMsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICByZXR1cm4gc3VtbWFyeS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ093bmVyID4gY29tcG9uZW50JzogaXRlbS5jb21wb25lbnROYW1lLFxuICAgICAgICAnV2FzdGVkIHRpbWUgKG1zKSc6IGl0ZW0udGltZSxcbiAgICAgICAgJ0luc3RhbmNlcyc6IGl0ZW0uY291bnRcbiAgICAgIH07XG4gICAgfSk7XG4gIH0sXG5cbiAgcHJpbnRXYXN0ZWQ6IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cyB8fCBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gICAgY29uc29sZS50YWJsZShSZWFjdERlZmF1bHRQZXJmLmdldE1lYXN1cmVtZW50c1N1bW1hcnlNYXAobWVhc3VyZW1lbnRzKSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnVG90YWwgdGltZTonLFxuICAgICAgUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzLmdldFRvdGFsVGltZShtZWFzdXJlbWVudHMpLnRvRml4ZWQoMikgKyAnIG1zJ1xuICAgICk7XG4gIH0sXG5cbiAgcHJpbnRET006IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykge1xuICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cyB8fCBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHM7XG4gICAgdmFyIHN1bW1hcnkgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXMuZ2V0RE9NU3VtbWFyeShtZWFzdXJlbWVudHMpO1xuICAgIGNvbnNvbGUudGFibGUoc3VtbWFyeS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgcmVzdWx0W0RPTVByb3BlcnR5LklEX0FUVFJJQlVURV9OQU1FXSA9IGl0ZW0uaWQ7XG4gICAgICByZXN1bHRbJ3R5cGUnXSA9IGl0ZW0udHlwZTtcbiAgICAgIHJlc3VsdFsnYXJncyddID0gSlNPTi5zdHJpbmdpZnkoaXRlbS5hcmdzKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1RvdGFsIHRpbWU6JyxcbiAgICAgIFJlYWN0RGVmYXVsdFBlcmZBbmFseXNpcy5nZXRUb3RhbFRpbWUobWVhc3VyZW1lbnRzKS50b0ZpeGVkKDIpICsgJyBtcydcbiAgICApO1xuICB9LFxuXG4gIF9yZWNvcmRXcml0ZTogZnVuY3Rpb24oaWQsIGZuTmFtZSwgdG90YWxUaW1lLCBhcmdzKSB7XG4gICAgLy8gVE9ETzogdG90YWxUaW1lIGlzbid0IHRoYXQgdXNlZnVsIHNpbmNlIGl0IGRvZXNuJ3QgY291bnQgcGFpbnRzL3JlZmxvd3NcbiAgICB2YXIgd3JpdGVzID1cbiAgICAgIFJlYWN0RGVmYXVsdFBlcmZcbiAgICAgICAgLl9hbGxNZWFzdXJlbWVudHNbUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIC53cml0ZXM7XG4gICAgd3JpdGVzW2lkXSA9IHdyaXRlc1tpZF0gfHwgW107XG4gICAgd3JpdGVzW2lkXS5wdXNoKHtcbiAgICAgIHR5cGU6IGZuTmFtZSxcbiAgICAgIHRpbWU6IHRvdGFsVGltZSxcbiAgICAgIGFyZ3M6IGFyZ3NcbiAgICB9KTtcbiAgfSxcblxuICBtZWFzdXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBmbk5hbWUsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7Zm9yICh2YXIgYXJncz1bXSwkX18wPTAsJF9fMT1hcmd1bWVudHMubGVuZ3RoOyRfXzA8JF9fMTskX18wKyspIGFyZ3MucHVzaChhcmd1bWVudHNbJF9fMF0pO1xuICAgICAgdmFyIHRvdGFsVGltZTtcbiAgICAgIHZhciBydjtcbiAgICAgIHZhciBzdGFydDtcblxuICAgICAgaWYgKGZuTmFtZSA9PT0gJ19yZW5kZXJOZXdSb290Q29tcG9uZW50JyB8fFxuICAgICAgICAgIGZuTmFtZSA9PT0gJ2ZsdXNoQmF0Y2hlZFVwZGF0ZXMnKSB7XG4gICAgICAgIC8vIEEgXCJtZWFzdXJlbWVudFwiIGlzIGEgc2V0IG9mIG1ldHJpY3MgcmVjb3JkZWQgZm9yIGVhY2ggZmx1c2guIFdlIHdhbnRcbiAgICAgICAgLy8gdG8gZ3JvdXAgdGhlIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gZmx1c2ggdG9nZXRoZXIgc28gd2UgY2FuIGxvb2sgYXQgdGhlXG4gICAgICAgIC8vIGNvbXBvbmVudHMgdGhhdCByZW5kZXJlZCBhbmQgdGhlIERPTSBvcGVyYXRpb25zIHRoYXQgYWN0dWFsbHlcbiAgICAgICAgLy8gaGFwcGVuZWQgdG8gZGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgXCJ3YXN0ZWQgd29ya1wiIHBlcmZvcm1lZC5cbiAgICAgICAgUmVhY3REZWZhdWx0UGVyZi5fYWxsTWVhc3VyZW1lbnRzLnB1c2goe1xuICAgICAgICAgIGV4Y2x1c2l2ZToge30sXG4gICAgICAgICAgaW5jbHVzaXZlOiB7fSxcbiAgICAgICAgICByZW5kZXI6IHt9LFxuICAgICAgICAgIGNvdW50czoge30sXG4gICAgICAgICAgd3JpdGVzOiB7fSxcbiAgICAgICAgICBkaXNwbGF5TmFtZXM6IHt9LFxuICAgICAgICAgIHRvdGFsVGltZTogMFxuICAgICAgICB9KTtcbiAgICAgICAgc3RhcnQgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICBydiA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50c1tcbiAgICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHMubGVuZ3RoIC0gMVxuICAgICAgICBdLnRvdGFsVGltZSA9IHBlcmZvcm1hbmNlTm93KCkgLSBzdGFydDtcbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfSBlbHNlIGlmIChmbk5hbWUgPT09ICdfbW91bnRJbWFnZUludG9Ob2RlJyB8fFxuICAgICAgICAgIG1vZHVsZU5hbWUgPT09ICdSZWFjdERPTUlET3BlcmF0aW9ucycpIHtcbiAgICAgICAgc3RhcnQgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICBydiA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHRvdGFsVGltZSA9IHBlcmZvcm1hbmNlTm93KCkgLSBzdGFydDtcblxuICAgICAgICBpZiAoZm5OYW1lID09PSAnX21vdW50SW1hZ2VJbnRvTm9kZScpIHtcbiAgICAgICAgICB2YXIgbW91bnRJRCA9IFJlYWN0TW91bnQuZ2V0SUQoYXJnc1sxXSk7XG4gICAgICAgICAgUmVhY3REZWZhdWx0UGVyZi5fcmVjb3JkV3JpdGUobW91bnRJRCwgZm5OYW1lLCB0b3RhbFRpbWUsIGFyZ3NbMF0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZuTmFtZSA9PT0gJ2Rhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlcycpIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGZvcm1hdFxuICAgICAgICAgIGFyZ3NbMF0uZm9yRWFjaChmdW5jdGlvbih1cGRhdGUpIHtcbiAgICAgICAgICAgIHZhciB3cml0ZUFyZ3MgPSB7fTtcbiAgICAgICAgICAgIGlmICh1cGRhdGUuZnJvbUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdyaXRlQXJncy5mcm9tSW5kZXggPSB1cGRhdGUuZnJvbUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVwZGF0ZS50b0luZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdyaXRlQXJncy50b0luZGV4ID0gdXBkYXRlLnRvSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXBkYXRlLnRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHdyaXRlQXJncy50ZXh0Q29udGVudCA9IHVwZGF0ZS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1cGRhdGUubWFya3VwSW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd3JpdGVBcmdzLm1hcmt1cCA9IGFyZ3NbMV1bdXBkYXRlLm1hcmt1cEluZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFJlYWN0RGVmYXVsdFBlcmYuX3JlY29yZFdyaXRlKFxuICAgICAgICAgICAgICB1cGRhdGUucGFyZW50SUQsXG4gICAgICAgICAgICAgIHVwZGF0ZS50eXBlLFxuICAgICAgICAgICAgICB0b3RhbFRpbWUsXG4gICAgICAgICAgICAgIHdyaXRlQXJnc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBiYXNpYyBmb3JtYXRcbiAgICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9yZWNvcmRXcml0ZShcbiAgICAgICAgICAgIGFyZ3NbMF0sXG4gICAgICAgICAgICBmbk5hbWUsXG4gICAgICAgICAgICB0b3RhbFRpbWUsXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfSBlbHNlIGlmIChtb2R1bGVOYW1lID09PSAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnICYmIChcbiAgICAgICAgKC8vIFRPRE86IHJlY2VpdmVDb21wb25lbnQoKT9cbiAgICAgICAgKGZuTmFtZSA9PT0gJ21vdW50Q29tcG9uZW50JyB8fFxuICAgICAgICBmbk5hbWUgPT09ICd1cGRhdGVDb21wb25lbnQnIHx8IGZuTmFtZSA9PT0gJ19yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQnKSkpKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJvb3ROb2RlSUQgPSBmbk5hbWUgPT09ICdtb3VudENvbXBvbmVudCcgP1xuICAgICAgICAgIGFyZ3NbMF0gOlxuICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlSUQ7XG4gICAgICAgIHZhciBpc1JlbmRlciA9IGZuTmFtZSA9PT0gJ19yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQnO1xuICAgICAgICB2YXIgaXNNb3VudCA9IGZuTmFtZSA9PT0gJ21vdW50Q29tcG9uZW50JztcblxuICAgICAgICB2YXIgbW91bnRTdGFjayA9IFJlYWN0RGVmYXVsdFBlcmYuX21vdW50U3RhY2s7XG4gICAgICAgIHZhciBlbnRyeSA9IFJlYWN0RGVmYXVsdFBlcmYuX2FsbE1lYXN1cmVtZW50c1tcbiAgICAgICAgICBSZWFjdERlZmF1bHRQZXJmLl9hbGxNZWFzdXJlbWVudHMubGVuZ3RoIC0gMVxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChpc1JlbmRlcikge1xuICAgICAgICAgIGFkZFZhbHVlKGVudHJ5LmNvdW50cywgcm9vdE5vZGVJRCwgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VudCkge1xuICAgICAgICAgIG1vdW50U3RhY2sucHVzaCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0ID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgICAgcnYgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB0b3RhbFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpIC0gc3RhcnQ7XG5cbiAgICAgICAgaWYgKGlzUmVuZGVyKSB7XG4gICAgICAgICAgYWRkVmFsdWUoZW50cnkucmVuZGVyLCByb290Tm9kZUlELCB0b3RhbFRpbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW91bnQpIHtcbiAgICAgICAgICB2YXIgc3ViTW91bnRUaW1lID0gbW91bnRTdGFjay5wb3AoKTtcbiAgICAgICAgICBtb3VudFN0YWNrW21vdW50U3RhY2subGVuZ3RoIC0gMV0gKz0gdG90YWxUaW1lO1xuICAgICAgICAgIGFkZFZhbHVlKGVudHJ5LmV4Y2x1c2l2ZSwgcm9vdE5vZGVJRCwgdG90YWxUaW1lIC0gc3ViTW91bnRUaW1lKTtcbiAgICAgICAgICBhZGRWYWx1ZShlbnRyeS5pbmNsdXNpdmUsIHJvb3ROb2RlSUQsIHRvdGFsVGltZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkVmFsdWUoZW50cnkuaW5jbHVzaXZlLCByb290Tm9kZUlELCB0b3RhbFRpbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW50cnkuZGlzcGxheU5hbWVzW3Jvb3ROb2RlSURdID0ge1xuICAgICAgICAgIGN1cnJlbnQ6IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIG93bmVyOiB0aGlzLl9jdXJyZW50RWxlbWVudC5fb3duZXIgP1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQuX293bmVyLmdldE5hbWUoKSA6XG4gICAgICAgICAgICAnPHJvb3Q+J1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBydjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3REZWZhdWx0UGVyZjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXNcbiAqL1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcblxuLy8gRG9uJ3QgdHJ5IHRvIHNhdmUgdXNlcnMgbGVzcyB0aGFuIDEuMm1zIChhIG51bWJlciBJIG1hZGUgdXApXG52YXIgRE9OVF9DQVJFX1RIUkVTSE9MRCA9IDEuMjtcbnZhciBET01fT1BFUkFUSU9OX1RZUEVTID0ge1xuICAnX21vdW50SW1hZ2VJbnRvTm9kZSc6ICdzZXQgaW5uZXJIVE1MJyxcbiAgSU5TRVJUX01BUktVUDogJ3NldCBpbm5lckhUTUwnLFxuICBNT1ZFX0VYSVNUSU5HOiAnbW92ZScsXG4gIFJFTU9WRV9OT0RFOiAncmVtb3ZlJyxcbiAgVEVYVF9DT05URU5UOiAnc2V0IHRleHRDb250ZW50JyxcbiAgJ3VwZGF0ZVByb3BlcnR5QnlJRCc6ICd1cGRhdGUgYXR0cmlidXRlJyxcbiAgJ2RlbGV0ZVByb3BlcnR5QnlJRCc6ICdkZWxldGUgYXR0cmlidXRlJyxcbiAgJ3VwZGF0ZVN0eWxlc0J5SUQnOiAndXBkYXRlIHN0eWxlcycsXG4gICd1cGRhdGVJbm5lckhUTUxCeUlEJzogJ3NldCBpbm5lckhUTUwnLFxuICAnZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXBCeUlEJzogJ3JlcGxhY2UnXG59O1xuXG5mdW5jdGlvbiBnZXRUb3RhbFRpbWUobWVhc3VyZW1lbnRzKSB7XG4gIC8vIFRPRE86IHJldHVybiBudW1iZXIgb2YgRE9NIG9wcz8gY291bGQgYmUgbWlzbGVhZGluZy5cbiAgLy8gVE9ETzogbWVhc3VyZSBkcm9wcGVkIGZyYW1lcyBhZnRlciByZWNvbmNpbGU/XG4gIC8vIFRPRE86IGxvZyB0b3RhbCB0aW1lIG9mIGVhY2ggcmVjb25jaWxlIGFuZCB0aGUgdG9wLWxldmVsIGNvbXBvbmVudFxuICAvLyBjbGFzcyB0aGF0IHRyaWdnZXJlZCBpdC5cbiAgdmFyIHRvdGFsVGltZSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHRvdGFsVGltZSArPSBtZWFzdXJlbWVudC50b3RhbFRpbWU7XG4gIH1cbiAgcmV0dXJuIHRvdGFsVGltZTtcbn1cblxuZnVuY3Rpb24gZ2V0RE9NU3VtbWFyeShtZWFzdXJlbWVudHMpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHZhciBpZDtcblxuICAgIGZvciAoaWQgaW4gbWVhc3VyZW1lbnQud3JpdGVzKSB7XG4gICAgICBtZWFzdXJlbWVudC53cml0ZXNbaWRdLmZvckVhY2goZnVuY3Rpb24od3JpdGUpIHtcbiAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIHR5cGU6IERPTV9PUEVSQVRJT05fVFlQRVNbd3JpdGUudHlwZV0gfHwgd3JpdGUudHlwZSxcbiAgICAgICAgICBhcmdzOiB3cml0ZS5hcmdzXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpdGVtcztcbn1cblxuZnVuY3Rpb24gZ2V0RXhjbHVzaXZlU3VtbWFyeShtZWFzdXJlbWVudHMpIHtcbiAgdmFyIGNhbmRpZGF0ZXMgPSB7fTtcbiAgdmFyIGRpc3BsYXlOYW1lO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHZhciBhbGxJRHMgPSBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIG1lYXN1cmVtZW50LmV4Y2x1c2l2ZSxcbiAgICAgIG1lYXN1cmVtZW50LmluY2x1c2l2ZVxuICAgICk7XG5cbiAgICBmb3IgKHZhciBpZCBpbiBhbGxJRHMpIHtcbiAgICAgIGRpc3BsYXlOYW1lID0gbWVhc3VyZW1lbnQuZGlzcGxheU5hbWVzW2lkXS5jdXJyZW50O1xuXG4gICAgICBjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXSA9IGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdIHx8IHtcbiAgICAgICAgY29tcG9uZW50TmFtZTogZGlzcGxheU5hbWUsXG4gICAgICAgIGluY2x1c2l2ZTogMCxcbiAgICAgICAgZXhjbHVzaXZlOiAwLFxuICAgICAgICByZW5kZXI6IDAsXG4gICAgICAgIGNvdW50OiAwXG4gICAgICB9O1xuICAgICAgaWYgKG1lYXN1cmVtZW50LnJlbmRlcltpZF0pIHtcbiAgICAgICAgY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0ucmVuZGVyICs9IG1lYXN1cmVtZW50LnJlbmRlcltpZF07XG4gICAgICB9XG4gICAgICBpZiAobWVhc3VyZW1lbnQuZXhjbHVzaXZlW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXS5leGNsdXNpdmUgKz0gbWVhc3VyZW1lbnQuZXhjbHVzaXZlW2lkXTtcbiAgICAgIH1cbiAgICAgIGlmIChtZWFzdXJlbWVudC5pbmNsdXNpdmVbaWRdKSB7XG4gICAgICAgIGNhbmRpZGF0ZXNbZGlzcGxheU5hbWVdLmluY2x1c2l2ZSArPSBtZWFzdXJlbWVudC5pbmNsdXNpdmVbaWRdO1xuICAgICAgfVxuICAgICAgaWYgKG1lYXN1cmVtZW50LmNvdW50c1tpZF0pIHtcbiAgICAgICAgY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0uY291bnQgKz0gbWVhc3VyZW1lbnQuY291bnRzW2lkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBOb3cgbWFrZSBhIHNvcnRlZCBhcnJheSB3aXRoIHRoZSByZXN1bHRzLlxuICB2YXIgYXJyID0gW107XG4gIGZvciAoZGlzcGxheU5hbWUgaW4gY2FuZGlkYXRlcykge1xuICAgIGlmIChjYW5kaWRhdGVzW2Rpc3BsYXlOYW1lXS5leGNsdXNpdmUgPj0gRE9OVF9DQVJFX1RIUkVTSE9MRCkge1xuICAgICAgYXJyLnB1c2goY2FuZGlkYXRlc1tkaXNwbGF5TmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIGFyci5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYi5leGNsdXNpdmUgLSBhLmV4Y2x1c2l2ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gZ2V0SW5jbHVzaXZlU3VtbWFyeShtZWFzdXJlbWVudHMsIG9ubHlDbGVhbikge1xuICB2YXIgY2FuZGlkYXRlcyA9IHt9O1xuICB2YXIgaW5jbHVzaXZlS2V5O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50ID0gbWVhc3VyZW1lbnRzW2ldO1xuICAgIHZhciBhbGxJRHMgPSBhc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIG1lYXN1cmVtZW50LmV4Y2x1c2l2ZSxcbiAgICAgIG1lYXN1cmVtZW50LmluY2x1c2l2ZVxuICAgICk7XG4gICAgdmFyIGNsZWFuQ29tcG9uZW50cztcblxuICAgIGlmIChvbmx5Q2xlYW4pIHtcbiAgICAgIGNsZWFuQ29tcG9uZW50cyA9IGdldFVuY2hhbmdlZENvbXBvbmVudHMobWVhc3VyZW1lbnQpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGlkIGluIGFsbElEcykge1xuICAgICAgaWYgKG9ubHlDbGVhbiAmJiAhY2xlYW5Db21wb25lbnRzW2lkXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gbWVhc3VyZW1lbnQuZGlzcGxheU5hbWVzW2lkXTtcblxuICAgICAgLy8gSW5jbHVzaXZlIHRpbWUgaXMgbm90IHVzZWZ1bCBmb3IgbWFueSBjb21wb25lbnRzIHdpdGhvdXQga25vd2luZyB3aGVyZVxuICAgICAgLy8gdGhleSBhcmUgaW5zdGFudGlhdGVkLiBTbyB3ZSBhZ2dyZWdhdGUgaW5jbHVzaXZlIHRpbWUgd2l0aCBib3RoIHRoZVxuICAgICAgLy8gb3duZXIgYW5kIGN1cnJlbnQgZGlzcGxheU5hbWUgYXMgdGhlIGtleS5cbiAgICAgIGluY2x1c2l2ZUtleSA9IGRpc3BsYXlOYW1lLm93bmVyICsgJyA+ICcgKyBkaXNwbGF5TmFtZS5jdXJyZW50O1xuXG4gICAgICBjYW5kaWRhdGVzW2luY2x1c2l2ZUtleV0gPSBjYW5kaWRhdGVzW2luY2x1c2l2ZUtleV0gfHwge1xuICAgICAgICBjb21wb25lbnROYW1lOiBpbmNsdXNpdmVLZXksXG4gICAgICAgIHRpbWU6IDAsXG4gICAgICAgIGNvdW50OiAwXG4gICAgICB9O1xuXG4gICAgICBpZiAobWVhc3VyZW1lbnQuaW5jbHVzaXZlW2lkXSkge1xuICAgICAgICBjYW5kaWRhdGVzW2luY2x1c2l2ZUtleV0udGltZSArPSBtZWFzdXJlbWVudC5pbmNsdXNpdmVbaWRdO1xuICAgICAgfVxuICAgICAgaWYgKG1lYXN1cmVtZW50LmNvdW50c1tpZF0pIHtcbiAgICAgICAgY2FuZGlkYXRlc1tpbmNsdXNpdmVLZXldLmNvdW50ICs9IG1lYXN1cmVtZW50LmNvdW50c1tpZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTm93IG1ha2UgYSBzb3J0ZWQgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cy5cbiAgdmFyIGFyciA9IFtdO1xuICBmb3IgKGluY2x1c2l2ZUtleSBpbiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XS50aW1lID49IERPTlRfQ0FSRV9USFJFU0hPTEQpIHtcbiAgICAgIGFyci5wdXNoKGNhbmRpZGF0ZXNbaW5jbHVzaXZlS2V5XSk7XG4gICAgfVxuICB9XG5cbiAgYXJyLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiLnRpbWUgLSBhLnRpbWU7XG4gIH0pO1xuXG4gIHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIGdldFVuY2hhbmdlZENvbXBvbmVudHMobWVhc3VyZW1lbnQpIHtcbiAgLy8gRm9yIGEgZ2l2ZW4gcmVjb25jaWxlLCBsb29rIGF0IHdoaWNoIGNvbXBvbmVudHMgZGlkIG5vdCBhY3R1YWxseVxuICAvLyByZW5kZXIgYW55dGhpbmcgdG8gdGhlIERPTSBhbmQgcmV0dXJuIGEgbWFwcGluZyBvZiB0aGVpciBJRCB0b1xuICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgaXQgdG9vayB0byByZW5kZXIgdGhlIGVudGlyZSBzdWJ0cmVlLlxuICB2YXIgY2xlYW5Db21wb25lbnRzID0ge307XG4gIHZhciBkaXJ0eUxlYWZJRHMgPSBPYmplY3Qua2V5cyhtZWFzdXJlbWVudC53cml0ZXMpO1xuICB2YXIgYWxsSURzID0gYXNzaWduKHt9LCBtZWFzdXJlbWVudC5leGNsdXNpdmUsIG1lYXN1cmVtZW50LmluY2x1c2l2ZSk7XG5cbiAgZm9yICh2YXIgaWQgaW4gYWxsSURzKSB7XG4gICAgdmFyIGlzRGlydHkgPSBmYWxzZTtcbiAgICAvLyBGb3IgZWFjaCBjb21wb25lbnQgdGhhdCByZW5kZXJlZCwgc2VlIGlmIGEgY29tcG9uZW50IHRoYXQgdHJpZ2dlcmVkXG4gICAgLy8gYSBET00gb3AgaXMgaW4gaXRzIHN1YnRyZWUuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJ0eUxlYWZJRHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChkaXJ0eUxlYWZJRHNbaV0uaW5kZXhPZihpZCkgPT09IDApIHtcbiAgICAgICAgaXNEaXJ0eSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzRGlydHkgJiYgbWVhc3VyZW1lbnQuY291bnRzW2lkXSA+IDApIHtcbiAgICAgIGNsZWFuQ29tcG9uZW50c1tpZF0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2xlYW5Db21wb25lbnRzO1xufVxuXG52YXIgUmVhY3REZWZhdWx0UGVyZkFuYWx5c2lzID0ge1xuICBnZXRFeGNsdXNpdmVTdW1tYXJ5OiBnZXRFeGNsdXNpdmVTdW1tYXJ5LFxuICBnZXRJbmNsdXNpdmVTdW1tYXJ5OiBnZXRJbmNsdXNpdmVTdW1tYXJ5LFxuICBnZXRET01TdW1tYXJ5OiBnZXRET01TdW1tYXJ5LFxuICBnZXRUb3RhbFRpbWU6IGdldFRvdGFsVGltZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERlZmF1bHRQZXJmQW5hbHlzaXM7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RWxlbWVudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q29udGV4dCA9IHJlcXVpcmUoXCIuL1JlYWN0Q29udGV4dFwiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZVxufTtcblxuLyoqXG4gKiBXYXJuIGZvciBtdXRhdGlvbnMuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGRlZmluZVdhcm5pbmdQcm9wZXJ0eShvYmplY3QsIGtleSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcblxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcblxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXRoaXMuX3N0b3JlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX3N0b3JlW2tleV07XG4gICAgfSxcblxuICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ0RvblxcJ3Qgc2V0IHRoZSAlcyBwcm9wZXJ0eSBvZiB0aGUgUmVhY3QgZWxlbWVudC4gSW5zdGVhZCwgJyArXG4gICAgICAgICdzcGVjaWZ5IHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4gaW5pdGlhbGx5IGNyZWF0aW5nIHRoZSBlbGVtZW50LicsXG4gICAgICAgIGtleVxuICAgICAgKSA6IG51bGwpO1xuICAgICAgdGhpcy5fc3RvcmVba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICB9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIHVwZGF0ZWQgdG8gdHJ1ZSBpZiB0aGUgbWVtYnJhbmUgaXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuXG4gKi9cbnZhciB1c2VNdXRhdGlvbk1lbWJyYW5lID0gZmFsc2U7XG5cbi8qKlxuICogV2FybiBmb3IgbXV0YXRpb25zLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZGVmaW5lTXV0YXRpb25NZW1icmFuZShwcm90b3R5cGUpIHtcbiAgdHJ5IHtcbiAgICB2YXIgcHNldWRvRnJvemVuUHJvcGVydGllcyA9IHtcbiAgICAgIHByb3BzOiB0cnVlXG4gICAgfTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHNldWRvRnJvemVuUHJvcGVydGllcykge1xuICAgICAgZGVmaW5lV2FybmluZ1Byb3BlcnR5KHByb3RvdHlwZSwga2V5KTtcbiAgICB9XG4gICAgdXNlTXV0YXRpb25NZW1icmFuZSA9IHRydWU7XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICAvLyBJRSB3aWxsIGZhaWwgb24gZGVmaW5lUHJvcGVydHlcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY29uc3RydWN0b3IgZm9yIGFsbCBSZWFjdCBlbGVtZW50cy4gVGhpcyBpcyBvbmx5IHVzZWQgdG8gbWFrZSB0aGlzXG4gKiB3b3JrIHdpdGggYSBkeW5hbWljIGluc3RhbmNlb2YgY2hlY2suIE5vdGhpbmcgc2hvdWxkIGxpdmUgb24gdGhpcyBwcm90b3R5cGUuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24odHlwZSwga2V5LCByZWYsIG93bmVyLCBjb250ZXh0LCBwcm9wcykge1xuICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMua2V5ID0ga2V5O1xuICB0aGlzLnJlZiA9IHJlZjtcblxuICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICB0aGlzLl9vd25lciA9IG93bmVyO1xuXG4gIC8vIFRPRE86IERlcHJlY2F0ZSB3aXRoQ29udGV4dCwgYW5kIHRoZW4gdGhlIGNvbnRleHQgYmVjb21lcyBhY2Nlc3NpYmxlXG4gIC8vIHRocm91Z2ggdGhlIG93bmVyLlxuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBhbmQgcHJvcHMgYXJlIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IHRoZW0gb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICB0aGlzLl9zdG9yZSA9IHtwcm9wczogcHJvcHMsIG9yaWdpbmFsUHJvcHM6IGFzc2lnbih7fSwgcHJvcHMpfTtcblxuICAgIC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKHgpIHtcbiAgICB9XG4gICAgdGhpcy5fc3RvcmUudmFsaWRhdGVkID0gZmFsc2U7XG5cbiAgICAvLyBXZSdyZSBub3QgYWxsb3dlZCB0byBzZXQgcHJvcHMgZGlyZWN0bHkgb24gdGhlIG9iamVjdCBzbyB3ZSBlYXJseVxuICAgIC8vIHJldHVybiBhbmQgcmVseSBvbiB0aGUgcHJvdG90eXBlIG1lbWJyYW5lIHRvIGZvcndhcmQgdG8gdGhlIGJhY2tpbmdcbiAgICAvLyBzdG9yZS5cbiAgICBpZiAodXNlTXV0YXRpb25NZW1icmFuZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICB0aGlzLnByb3BzID0gcHJvcHM7XG59O1xuXG4vLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IGV4cG9zZSB0aGUgZnVuY3Rpb24gb24gdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LlxuLy8gUmVhY3RFbGVtZW50IHNob3VsZCBiZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgcGxhaW4gb2JqZWN0LlxuUmVhY3RFbGVtZW50LnByb3RvdHlwZSA9IHtcbiAgX2lzUmVhY3RFbGVtZW50OiB0cnVlXG59O1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIGRlZmluZU11dGF0aW9uTWVtYnJhbmUoUmVhY3RFbGVtZW50LnByb3RvdHlwZSk7XG59XG5cblJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24odHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7XG5cbiAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuICB2YXIgcHJvcHMgPSB7fTtcblxuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgcmVmID0gY29uZmlnLnJlZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5yZWY7XG4gICAga2V5ID0gY29uZmlnLmtleSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6ICcnICsgY29uZmlnLmtleTtcbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChjb25maWcuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmXG4gICAgICAgICAgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1twcm9wTmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZWFjdEVsZW1lbnQoXG4gICAgdHlwZSxcbiAgICBrZXksXG4gICAgcmVmLFxuICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsXG4gICAgUmVhY3RDb250ZXh0LmN1cnJlbnQsXG4gICAgcHJvcHNcbiAgKTtcbn07XG5cblJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG4gIC8vIEV4cG9zZSB0aGUgdHlwZSBvbiB0aGUgZmFjdG9yeSBhbmQgdGhlIHByb3RvdHlwZSBzbyB0aGF0IGl0IGNhbiBiZVxuICAvLyBlYXNpbHkgYWNjZXNzZWQgb24gZWxlbWVudHMuIEUuZy4gPEZvbyAvPi50eXBlID09PSBGb28udHlwZS5cbiAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5hbWVkIGBjb25zdHJ1Y3RvcmAgc2luY2UgdGhpcyBtYXkgbm90IGJlIHRoZSBmdW5jdGlvblxuICAvLyB0aGF0IGNyZWF0ZWQgdGhlIGVsZW1lbnQsIGFuZCBpdCBtYXkgbm90IGV2ZW4gYmUgYSBjb25zdHJ1Y3Rvci5cbiAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkXG4gIGZhY3RvcnkudHlwZSA9IHR5cGU7XG4gIHJldHVybiBmYWN0b3J5O1xufTtcblxuUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZVByb3BzID0gZnVuY3Rpb24ob2xkRWxlbWVudCwgbmV3UHJvcHMpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBuZXcgUmVhY3RFbGVtZW50KFxuICAgIG9sZEVsZW1lbnQudHlwZSxcbiAgICBvbGRFbGVtZW50LmtleSxcbiAgICBvbGRFbGVtZW50LnJlZixcbiAgICBvbGRFbGVtZW50Ll9vd25lcixcbiAgICBvbGRFbGVtZW50Ll9jb250ZXh0LFxuICAgIG5ld1Byb3BzXG4gICk7XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIC8vIElmIHRoZSBrZXkgb24gdGhlIG9yaWdpbmFsIGlzIHZhbGlkLCB0aGVuIHRoZSBjbG9uZSBpcyB2YWxpZFxuICAgIG5ld0VsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IG9sZEVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZDtcbiAgfVxuICByZXR1cm4gbmV3RWxlbWVudDtcbn07XG5cblJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZTtcblxuICAvLyBPcmlnaW5hbCBwcm9wcyBhcmUgY29waWVkXG4gIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcyk7XG5cbiAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjtcblxuICAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG4gIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChjb25maWcucmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnLmhhc093blByb3BlcnR5KHByb3BOYW1lKSAmJlxuICAgICAgICAgICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmV3IFJlYWN0RWxlbWVudChcbiAgICBlbGVtZW50LnR5cGUsXG4gICAga2V5LFxuICAgIHJlZixcbiAgICBvd25lcixcbiAgICBlbGVtZW50Ll9jb250ZXh0LFxuICAgIHByb3BzXG4gICk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgY29tcG9uZW50LlxuICogQGZpbmFsXG4gKi9cblJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAvLyBSZWFjdFRlc3RVdGlscyBpcyBvZnRlbiB1c2VkIG91dHNpZGUgb2YgYmVmb3JlRWFjaCB3aGVyZSBhcyBSZWFjdCBpc1xuICAvLyB3aXRoaW4gaXQuIFRoaXMgbGVhZHMgdG8gdHdvIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgUmVhY3Qgb24gdGhlIHNhbWVcbiAgLy8gcGFnZS4gVG8gaWRlbnRpZnkgYSBlbGVtZW50IGZyb20gYSBkaWZmZXJlbnQgUmVhY3QgaW5zdGFuY2Ugd2UgdXNlXG4gIC8vIGEgZmxhZyBpbnN0ZWFkIG9mIGFuIGluc3RhbmNlb2YgY2hlY2suXG4gIHZhciBpc0VsZW1lbnQgPSAhIShvYmplY3QgJiYgb2JqZWN0Ll9pc1JlYWN0RWxlbWVudCk7XG4gIC8vIGlmIChpc0VsZW1lbnQgJiYgIShvYmplY3QgaW5zdGFuY2VvZiBSZWFjdEVsZW1lbnQpKSB7XG4gIC8vIFRoaXMgaXMgYW4gaW5kaWNhdG9yIHRoYXQgeW91J3JlIHVzaW5nIG11bHRpcGxlIHZlcnNpb25zIG9mIFJlYWN0IGF0IHRoZVxuICAvLyBzYW1lIHRpbWUuIFRoaXMgd2lsbCBzY3JldyB3aXRoIG93bmVyc2hpcCBhbmQgc3R1ZmYuIEZpeCBpdCwgcGxlYXNlLlxuICAvLyBUT0RPOiBXZSBjb3VsZCBwb3NzaWJseSB3YXJuIGhlcmUuXG4gIC8vIH1cbiAgcmV0dXJuIGlzRWxlbWVudDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkZiR1Z0Wlc1MExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREUwTFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUkZiR1Z0Wlc1MFhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdVbVZoWTNSRGIyNTBaWGgwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGIyNTBaWGgwWENJcE8xeHVkbUZ5SUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSmNJaWs3WEc1Y2JuWmhjaUJoYzNOcFoyNGdQU0J5WlhGMWFYSmxLRndpTGk5UFltcGxZM1F1WVhOemFXZHVYQ0lwTzF4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzUyWVhJZ1VrVlRSVkpXUlVSZlVGSlBVRk1nUFNCN1hHNGdJR3RsZVRvZ2RISjFaU3hjYmlBZ2NtVm1PaUIwY25WbFhHNTlPMXh1WEc0dktpcGNiaUFxSUZkaGNtNGdabTl5SUcxMWRHRjBhVzl1Y3k1Y2JpQXFYRzRnS2lCQWFXNTBaWEp1WVd4Y2JpQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnZZbXBsWTNSY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnJaWGxjYmlBcUwxeHVablZ1WTNScGIyNGdaR1ZtYVc1bFYyRnlibWx1WjFCeWIzQmxjblI1S0c5aWFtVmpkQ3dnYTJWNUtTQjdYRzRnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaHZZbXBsWTNRc0lHdGxlU3dnZTF4dVhHNGdJQ0FnWTI5dVptbG5kWEpoWW14bE9pQm1ZV3h6WlN4Y2JpQWdJQ0JsYm5WdFpYSmhZbXhsT2lCMGNuVmxMRnh1WEc0Z0lDQWdaMlYwT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lHbG1JQ2doZEdocGN5NWZjM1J2Y21VcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmMzUnZjbVZiYTJWNVhUdGNiaUFnSUNCOUxGeHVYRzRnSUNBZ2MyVjBPaUJtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNBZ0lHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBblJHOXVYRnduZENCelpYUWdkR2hsSUNWeklIQnliM0JsY25SNUlHOW1JSFJvWlNCU1pXRmpkQ0JsYkdWdFpXNTBMaUJKYm5OMFpXRmtMQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0ozTndaV05wWm5rZ2RHaGxJR052Y25KbFkzUWdkbUZzZFdVZ2QyaGxiaUJwYm1sMGFXRnNiSGtnWTNKbFlYUnBibWNnZEdobElHVnNaVzFsYm5RdUp5eGNiaUFnSUNBZ0lDQWdhMlY1WEc0Z0lDQWdJQ0FwSURvZ2JuVnNiQ2s3WEc0Z0lDQWdJQ0IwYUdsekxsOXpkRzl5WlZ0clpYbGRJRDBnZG1Gc2RXVTdYRzRnSUNBZ2ZWeHVYRzRnSUgwcE8xeHVmVnh1WEc0dktpcGNiaUFxSUZSb2FYTWdhWE1nZFhCa1lYUmxaQ0IwYnlCMGNuVmxJR2xtSUhSb1pTQnRaVzFpY21GdVpTQnBjeUJ6ZFdOalpYTnpablZzYkhrZ1kzSmxZWFJsWkM1Y2JpQXFMMXh1ZG1GeUlIVnpaVTExZEdGMGFXOXVUV1Z0WW5KaGJtVWdQU0JtWVd4elpUdGNibHh1THlvcVhHNGdLaUJYWVhKdUlHWnZjaUJ0ZFhSaGRHbHZibk11WEc0Z0tseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEgwZ1pXeGxiV1Z1ZEZ4dUlDb3ZYRzVtZFc1amRHbHZiaUJrWldacGJtVk5kWFJoZEdsdmJrMWxiV0p5WVc1bEtIQnliM1J2ZEhsd1pTa2dlMXh1SUNCMGNua2dlMXh1SUNBZ0lIWmhjaUJ3YzJWMVpHOUdjbTk2Wlc1UWNtOXdaWEowYVdWeklEMGdlMXh1SUNBZ0lDQWdjSEp2Y0hNNklIUnlkV1ZjYmlBZ0lDQjlPMXh1SUNBZ0lHWnZjaUFvZG1GeUlHdGxlU0JwYmlCd2MyVjFaRzlHY205NlpXNVFjbTl3WlhKMGFXVnpLU0I3WEc0Z0lDQWdJQ0JrWldacGJtVlhZWEp1YVc1blVISnZjR1Z5ZEhrb2NISnZkRzkwZVhCbExDQnJaWGtwTzF4dUlDQWdJSDFjYmlBZ0lDQjFjMlZOZFhSaGRHbHZiazFsYldKeVlXNWxJRDBnZEhKMVpUdGNiaUFnZlNCallYUmphQ0FvZUNrZ2UxeHVJQ0FnSUM4dklFbEZJSGRwYkd3Z1ptRnBiQ0J2YmlCa1pXWnBibVZRY205d1pYSjBlVnh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nUW1GelpTQmpiMjV6ZEhKMVkzUnZjaUJtYjNJZ1lXeHNJRkpsWVdOMElHVnNaVzFsYm5SekxpQlVhR2x6SUdseklHOXViSGtnZFhObFpDQjBieUJ0WVd0bElIUm9hWE5jYmlBcUlIZHZjbXNnZDJsMGFDQmhJR1I1Ym1GdGFXTWdhVzV6ZEdGdVkyVnZaaUJqYUdWamF5NGdUbTkwYUdsdVp5QnphRzkxYkdRZ2JHbDJaU0J2YmlCMGFHbHpJSEJ5YjNSdmRIbHdaUzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdleXA5SUhSNWNHVmNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mRzlpYW1WamRIMGdjbVZtWEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJR3RsZVZ4dUlDb2dRSEJoY21GdElIc3FmU0J3Y205d2MxeHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpOWNiblpoY2lCU1pXRmpkRVZzWlcxbGJuUWdQU0JtZFc1amRHbHZiaWgwZVhCbExDQnJaWGtzSUhKbFppd2diM2R1WlhJc0lHTnZiblJsZUhRc0lIQnliM0J6S1NCN1hHNGdJQzh2SUVKMWFXeDBMV2x1SUhCeWIzQmxjblJwWlhNZ2RHaGhkQ0JpWld4dmJtY2diMjRnZEdobElHVnNaVzFsYm5SY2JpQWdkR2hwY3k1MGVYQmxJRDBnZEhsd1pUdGNiaUFnZEdocGN5NXJaWGtnUFNCclpYazdYRzRnSUhSb2FYTXVjbVZtSUQwZ2NtVm1PMXh1WEc0Z0lDOHZJRkpsWTI5eVpDQjBhR1VnWTI5dGNHOXVaVzUwSUhKbGMzQnZibk5wWW14bElHWnZjaUJqY21WaGRHbHVaeUIwYUdseklHVnNaVzFsYm5RdVhHNGdJSFJvYVhNdVgyOTNibVZ5SUQwZ2IzZHVaWEk3WEc1Y2JpQWdMeThnVkU5RVR6b2dSR1Z3Y21WallYUmxJSGRwZEdoRGIyNTBaWGgwTENCaGJtUWdkR2hsYmlCMGFHVWdZMjl1ZEdWNGRDQmlaV052YldWeklHRmpZMlZ6YzJsaWJHVmNiaUFnTHk4Z2RHaHliM1ZuYUNCMGFHVWdiM2R1WlhJdVhHNGdJSFJvYVhNdVgyTnZiblJsZUhRZ1BTQmpiMjUwWlhoME8xeHVYRzRnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0F2THlCVWFHVWdkbUZzYVdSaGRHbHZiaUJtYkdGbklHRnVaQ0J3Y205d2N5QmhjbVVnWTNWeWNtVnVkR3g1SUcxMWRHRjBhWFpsTGlCWFpTQndkWFFnZEdobGJTQnZibHh1SUNBZ0lDOHZJR0Z1SUdWNGRHVnlibUZzSUdKaFkydHBibWNnYzNSdmNtVWdjMjhnZEdoaGRDQjNaU0JqWVc0Z1puSmxaWHBsSUhSb1pTQjNhRzlzWlNCdlltcGxZM1F1WEc0Z0lDQWdMeThnVkdocGN5QmpZVzRnWW1VZ2NtVndiR0ZqWldRZ2QybDBhQ0JoSUZkbFlXdE5ZWEFnYjI1alpTQjBhR1Y1SUdGeVpTQnBiWEJzWlcxbGJuUmxaQ0JwYmx4dUlDQWdJQzh2SUdOdmJXMXZibXg1SUhWelpXUWdaR1YyWld4dmNHMWxiblFnWlc1MmFYSnZibTFsYm5SekxseHVJQ0FnSUhSb2FYTXVYM04wYjNKbElEMGdlM0J5YjNCek9pQndjbTl3Y3l3Z2IzSnBaMmx1WVd4UWNtOXdjem9nWVhOemFXZHVLSHQ5TENCd2NtOXdjeWw5TzF4dVhHNGdJQ0FnTHk4Z1ZHOGdiV0ZyWlNCamIyMXdZWEpwYm1jZ1VtVmhZM1JGYkdWdFpXNTBjeUJsWVhOcFpYSWdabTl5SUhSbGMzUnBibWNnY0hWeWNHOXpaWE1zSUhkbElHMWhhMlZjYmlBZ0lDQXZMeUIwYUdVZ2RtRnNhV1JoZEdsdmJpQm1iR0ZuSUc1dmJpMWxiblZ0WlhKaFlteGxJQ2gzYUdWeVpTQndiM056YVdKc1pTd2dkMmhwWTJnZ2MyaHZkV3hrWEc0Z0lDQWdMeThnYVc1amJIVmtaU0JsZG1WeWVTQmxiblpwY205dWJXVnVkQ0IzWlNCeWRXNGdkR1Z6ZEhNZ2FXNHBMQ0J6YnlCMGFHVWdkR1Z6ZENCbWNtRnRaWGR2Y210Y2JpQWdJQ0F2THlCcFoyNXZjbVZ6SUdsMExseHVJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEdocGN5NWZjM1J2Y21Vc0lDZDJZV3hwWkdGMFpXUW5MQ0I3WEc0Z0lDQWdJQ0FnSUdOdmJtWnBaM1Z5WVdKc1pUb2dabUZzYzJVc1hHNGdJQ0FnSUNBZ0lHVnVkVzFsY21GaWJHVTZJR1poYkhObExGeHVJQ0FnSUNBZ0lDQjNjbWwwWVdKc1pUb2dkSEoxWlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNCallYUmphQ0FvZUNrZ2UxeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxsOXpkRzl5WlM1MllXeHBaR0YwWldRZ1BTQm1ZV3h6WlR0Y2JseHVJQ0FnSUM4dklGZGxKM0psSUc1dmRDQmhiR3h2ZDJWa0lIUnZJSE5sZENCd2NtOXdjeUJrYVhKbFkzUnNlU0J2YmlCMGFHVWdiMkpxWldOMElITnZJSGRsSUdWaGNteDVYRzRnSUNBZ0x5OGdjbVYwZFhKdUlHRnVaQ0J5Wld4NUlHOXVJSFJvWlNCd2NtOTBiM1I1Y0dVZ2JXVnRZbkpoYm1VZ2RHOGdabTl5ZDJGeVpDQjBieUIwYUdVZ1ltRmphMmx1WjF4dUlDQWdJQzh2SUhOMGIzSmxMbHh1SUNBZ0lHbG1JQ2gxYzJWTmRYUmhkR2x2YmsxbGJXSnlZVzVsS1NCN1hHNGdJQ0FnSUNCUFltcGxZM1F1Wm5KbFpYcGxLSFJvYVhNcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhSb2FYTXVjSEp2Y0hNZ1BTQndjbTl3Y3p0Y2JuMDdYRzVjYmk4dklGZGxJR2x1ZEdWdWRHbHZibUZzYkhrZ1pHOXVKM1FnWlhod2IzTmxJSFJvWlNCbWRXNWpkR2x2YmlCdmJpQjBhR1VnWTI5dWMzUnlkV04wYjNJZ2NISnZjR1Z5ZEhrdVhHNHZMeUJTWldGamRFVnNaVzFsYm5RZ2MyaHZkV3hrSUdKbElHbHVaR2x6ZEdsdVozVnBjMmhoWW14bElHWnliMjBnWVNCd2JHRnBiaUJ2WW1wbFkzUXVYRzVTWldGamRFVnNaVzFsYm5RdWNISnZkRzkwZVhCbElEMGdlMXh1SUNCZmFYTlNaV0ZqZEVWc1pXMWxiblE2SUhSeWRXVmNibjA3WEc1Y2JtbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnWkdWbWFXNWxUWFYwWVhScGIyNU5aVzFpY21GdVpTaFNaV0ZqZEVWc1pXMWxiblF1Y0hKdmRHOTBlWEJsS1R0Y2JuMWNibHh1VW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblFnUFNCbWRXNWpkR2x2YmloMGVYQmxMQ0JqYjI1bWFXY3NJR05vYVd4a2NtVnVLU0I3WEc0Z0lIWmhjaUJ3Y205d1RtRnRaVHRjYmx4dUlDQXZMeUJTWlhObGNuWmxaQ0J1WVcxbGN5QmhjbVVnWlhoMGNtRmpkR1ZrWEc0Z0lIWmhjaUJ3Y205d2N5QTlJSHQ5TzF4dVhHNGdJSFpoY2lCclpYa2dQU0J1ZFd4c08xeHVJQ0IyWVhJZ2NtVm1JRDBnYm5Wc2JEdGNibHh1SUNCcFppQW9ZMjl1Wm1sbklDRTlJRzUxYkd3cElIdGNiaUFnSUNCeVpXWWdQU0JqYjI1bWFXY3VjbVZtSUQwOVBTQjFibVJsWm1sdVpXUWdQeUJ1ZFd4c0lEb2dZMjl1Wm1sbkxuSmxaanRjYmlBZ0lDQnJaWGtnUFNCamIyNW1hV2N1YTJWNUlEMDlQU0IxYm1SbFptbHVaV1FnUHlCdWRXeHNJRG9nSnljZ0t5QmpiMjVtYVdjdWEyVjVPMXh1SUNBZ0lDOHZJRkpsYldGcGJtbHVaeUJ3Y205d1pYSjBhV1Z6SUdGeVpTQmhaR1JsWkNCMGJ5QmhJRzVsZHlCd2NtOXdjeUJ2WW1wbFkzUmNiaUFnSUNCbWIzSWdLSEJ5YjNCT1lXMWxJR2x1SUdOdmJtWnBaeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1b1lYTlBkMjVRY205d1pYSjBlU2h3Y205d1RtRnRaU2tnSmlaY2JpQWdJQ0FnSUNBZ0lDQWhVa1ZUUlZKV1JVUmZVRkpQVUZNdWFHRnpUM2R1VUhKdmNHVnlkSGtvY0hKdmNFNWhiV1VwS1NCN1hHNGdJQ0FnSUNBZ0lIQnliM0J6VzNCeWIzQk9ZVzFsWFNBOUlHTnZibVpwWjF0d2NtOXdUbUZ0WlYwN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5OGdRMmhwYkdSeVpXNGdZMkZ1SUdKbElHMXZjbVVnZEdoaGJpQnZibVVnWVhKbmRXMWxiblFzSUdGdVpDQjBhRzl6WlNCaGNtVWdkSEpoYm5ObVpYSnlaV1FnYjI1MGIxeHVJQ0F2THlCMGFHVWdibVYzYkhrZ1lXeHNiMk5oZEdWa0lIQnliM0J6SUc5aWFtVmpkQzVjYmlBZ2RtRnlJR05vYVd4a2NtVnVUR1Z1WjNSb0lEMGdZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQXRJREk3WEc0Z0lHbG1JQ2hqYUdsc1pISmxia3hsYm1kMGFDQTlQVDBnTVNrZ2UxeHVJQ0FnSUhCeWIzQnpMbU5vYVd4a2NtVnVJRDBnWTJocGJHUnlaVzQ3WEc0Z0lIMGdaV3h6WlNCcFppQW9ZMmhwYkdSeVpXNU1aVzVuZEdnZ1BpQXhLU0I3WEc0Z0lDQWdkbUZ5SUdOb2FXeGtRWEp5WVhrZ1BTQkJjbkpoZVNoamFHbHNaSEpsYmt4bGJtZDBhQ2s3WEc0Z0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQQ0JqYUdsc1pISmxia3hsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCamFHbHNaRUZ5Y21GNVcybGRJRDBnWVhKbmRXMWxiblJ6VzJrZ0t5QXlYVHRjYmlBZ0lDQjlYRzRnSUNBZ2NISnZjSE11WTJocGJHUnlaVzRnUFNCamFHbHNaRUZ5Y21GNU8xeHVJQ0I5WEc1Y2JpQWdMeThnVW1WemIyeDJaU0JrWldaaGRXeDBJSEJ5YjNCelhHNGdJR2xtSUNoMGVYQmxJQ1ltSUhSNWNHVXVaR1ZtWVhWc2RGQnliM0J6S1NCN1hHNGdJQ0FnZG1GeUlHUmxabUYxYkhSUWNtOXdjeUE5SUhSNWNHVXVaR1ZtWVhWc2RGQnliM0J6TzF4dUlDQWdJR1p2Y2lBb2NISnZjRTVoYldVZ2FXNGdaR1ZtWVhWc2RGQnliM0J6S1NCN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlIQnliM0J6VzNCeWIzQk9ZVzFsWFNBOVBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0FnSUNBZ2NISnZjSE5iY0hKdmNFNWhiV1ZkSUQwZ1pHVm1ZWFZzZEZCeWIzQnpXM0J5YjNCT1lXMWxYVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdibVYzSUZKbFlXTjBSV3hsYldWdWRDaGNiaUFnSUNCMGVYQmxMRnh1SUNBZ0lHdGxlU3hjYmlBZ0lDQnlaV1lzWEc0Z0lDQWdVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSXVZM1Z5Y21WdWRDeGNiaUFnSUNCU1pXRmpkRU52Ym5SbGVIUXVZM1Z5Y21WdWRDeGNiaUFnSUNCd2NtOXdjMXh1SUNBcE8xeHVmVHRjYmx4dVVtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVWmhZM1J2Y25rZ1BTQm1kVzVqZEdsdmJpaDBlWEJsS1NCN1hHNGdJSFpoY2lCbVlXTjBiM0o1SUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5RdVltbHVaQ2h1ZFd4c0xDQjBlWEJsS1R0Y2JpQWdMeThnUlhod2IzTmxJSFJvWlNCMGVYQmxJRzl1SUhSb1pTQm1ZV04wYjNKNUlHRnVaQ0IwYUdVZ2NISnZkRzkwZVhCbElITnZJSFJvWVhRZ2FYUWdZMkZ1SUdKbFhHNGdJQzh2SUdWaGMybHNlU0JoWTJObGMzTmxaQ0J2YmlCbGJHVnRaVzUwY3k0Z1JTNW5MaUE4Um05dklDOCtMblI1Y0dVZ1BUMDlJRVp2Ynk1MGVYQmxMbHh1SUNBdkx5QlVhR2x6SUhOb2IzVnNaQ0J1YjNRZ1ltVWdibUZ0WldRZ1lHTnZibk4wY25WamRHOXlZQ0J6YVc1alpTQjBhR2x6SUcxaGVTQnViM1FnWW1VZ2RHaGxJR1oxYm1OMGFXOXVYRzRnSUM4dklIUm9ZWFFnWTNKbFlYUmxaQ0IwYUdVZ1pXeGxiV1Z1ZEN3Z1lXNWtJR2wwSUcxaGVTQnViM1FnWlhabGJpQmlaU0JoSUdOdmJuTjBjblZqZEc5eUxseHVJQ0F2THlCTVpXZGhZM2tnYUc5dmF5QlVUMFJQT2lCWFlYSnVJR2xtSUhSb2FYTWdhWE1nWVdOalpYTnpaV1JjYmlBZ1ptRmpkRzl5ZVM1MGVYQmxJRDBnZEhsd1pUdGNiaUFnY21WMGRYSnVJR1poWTNSdmNuazdYRzU5TzF4dVhHNVNaV0ZqZEVWc1pXMWxiblF1WTJ4dmJtVkJibVJTWlhCc1lXTmxVSEp2Y0hNZ1BTQm1kVzVqZEdsdmJpaHZiR1JGYkdWdFpXNTBMQ0J1WlhkUWNtOXdjeWtnZTF4dUlDQjJZWElnYm1WM1JXeGxiV1Z1ZENBOUlHNWxkeUJTWldGamRFVnNaVzFsYm5Rb1hHNGdJQ0FnYjJ4a1JXeGxiV1Z1ZEM1MGVYQmxMRnh1SUNBZ0lHOXNaRVZzWlcxbGJuUXVhMlY1TEZ4dUlDQWdJRzlzWkVWc1pXMWxiblF1Y21WbUxGeHVJQ0FnSUc5c1pFVnNaVzFsYm5RdVgyOTNibVZ5TEZ4dUlDQWdJRzlzWkVWc1pXMWxiblF1WDJOdmJuUmxlSFFzWEc0Z0lDQWdibVYzVUhKdmNITmNiaUFnS1R0Y2JseHVJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdMeThnU1dZZ2RHaGxJR3RsZVNCdmJpQjBhR1VnYjNKcFoybHVZV3dnYVhNZ2RtRnNhV1FzSUhSb1pXNGdkR2hsSUdOc2IyNWxJR2x6SUhaaGJHbGtYRzRnSUNBZ2JtVjNSV3hsYldWdWRDNWZjM1J2Y21VdWRtRnNhV1JoZEdWa0lEMGdiMnhrUld4bGJXVnVkQzVmYzNSdmNtVXVkbUZzYVdSaGRHVmtPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQnVaWGRGYkdWdFpXNTBPMXh1ZlR0Y2JseHVVbVZoWTNSRmJHVnRaVzUwTG1Oc2IyNWxSV3hsYldWdWRDQTlJR1oxYm1OMGFXOXVLR1ZzWlcxbGJuUXNJR052Ym1acFp5d2dZMmhwYkdSeVpXNHBJSHRjYmlBZ2RtRnlJSEJ5YjNCT1lXMWxPMXh1WEc0Z0lDOHZJRTl5YVdkcGJtRnNJSEJ5YjNCeklHRnlaU0JqYjNCcFpXUmNiaUFnZG1GeUlIQnliM0J6SUQwZ1lYTnphV2R1S0h0OUxDQmxiR1Z0Wlc1MExuQnliM0J6S1R0Y2JseHVJQ0F2THlCU1pYTmxjblpsWkNCdVlXMWxjeUJoY21VZ1pYaDBjbUZqZEdWa1hHNGdJSFpoY2lCclpYa2dQU0JsYkdWdFpXNTBMbXRsZVR0Y2JpQWdkbUZ5SUhKbFppQTlJR1ZzWlcxbGJuUXVjbVZtTzF4dVhHNGdJQzh2SUU5M2JtVnlJSGRwYkd3Z1ltVWdjSEpsYzJWeWRtVmtMQ0IxYm14bGMzTWdjbVZtSUdseklHOTJaWEp5YVdSa1pXNWNiaUFnZG1GeUlHOTNibVZ5SUQwZ1pXeGxiV1Z1ZEM1ZmIzZHVaWEk3WEc1Y2JpQWdhV1lnS0dOdmJtWnBaeUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdhV1lnS0dOdmJtWnBaeTV5WldZZ0lUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJQ0FnTHk4Z1UybHNaVzUwYkhrZ2MzUmxZV3dnZEdobElISmxaaUJtY205dElIUm9aU0J3WVhKbGJuUXVYRzRnSUNBZ0lDQnlaV1lnUFNCamIyNW1hV2N1Y21WbU8xeHVJQ0FnSUNBZ2IzZHVaWElnUFNCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2k1amRYSnlaVzUwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWTI5dVptbG5MbXRsZVNBaFBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdJQ0JyWlhrZ1BTQW5KeUFySUdOdmJtWnBaeTVyWlhrN1hHNGdJQ0FnZlZ4dUlDQWdJQzh2SUZKbGJXRnBibWx1WnlCd2NtOXdaWEowYVdWeklHOTJaWEp5YVdSbElHVjRhWE4wYVc1bklIQnliM0J6WEc0Z0lDQWdabTl5SUNod2NtOXdUbUZ0WlNCcGJpQmpiMjVtYVdjcElIdGNiaUFnSUNBZ0lHbG1JQ2hqYjI1bWFXY3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb2NISnZjRTVoYldVcElDWW1YRzRnSUNBZ0lDQWdJQ0FnSVZKRlUwVlNWa1ZFWDFCU1QxQlRMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JPWVcxbEtTa2dlMXh1SUNBZ0lDQWdJQ0J3Y205d2MxdHdjbTl3VG1GdFpWMGdQU0JqYjI1bWFXZGJjSEp2Y0U1aGJXVmRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQzh2SUVOb2FXeGtjbVZ1SUdOaGJpQmlaU0J0YjNKbElIUm9ZVzRnYjI1bElHRnlaM1Z0Wlc1MExDQmhibVFnZEdodmMyVWdZWEpsSUhSeVlXNXpabVZ5Y21Wa0lHOXVkRzljYmlBZ0x5OGdkR2hsSUc1bGQyeDVJR0ZzYkc5allYUmxaQ0J3Y205d2N5QnZZbXBsWTNRdVhHNGdJSFpoY2lCamFHbHNaSEpsYmt4bGJtZDBhQ0E5SUdGeVozVnRaVzUwY3k1c1pXNW5kR2dnTFNBeU8xeHVJQ0JwWmlBb1kyaHBiR1J5Wlc1TVpXNW5kR2dnUFQwOUlERXBJSHRjYmlBZ0lDQndjbTl3Y3k1amFHbHNaSEpsYmlBOUlHTm9hV3hrY21WdU8xeHVJQ0I5SUdWc2MyVWdhV1lnS0dOb2FXeGtjbVZ1VEdWdVozUm9JRDRnTVNrZ2UxeHVJQ0FnSUhaaGNpQmphR2xzWkVGeWNtRjVJRDBnUVhKeVlYa29ZMmhwYkdSeVpXNU1aVzVuZEdncE8xeHVJQ0FnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z1kyaHBiR1J5Wlc1TVpXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdZMmhwYkdSQmNuSmhlVnRwWFNBOUlHRnlaM1Z0Wlc1MGMxdHBJQ3NnTWwwN1hHNGdJQ0FnZlZ4dUlDQWdJSEJ5YjNCekxtTm9hV3hrY21WdUlEMGdZMmhwYkdSQmNuSmhlVHRjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJ1WlhjZ1VtVmhZM1JGYkdWdFpXNTBLRnh1SUNBZ0lHVnNaVzFsYm5RdWRIbHdaU3hjYmlBZ0lDQnJaWGtzWEc0Z0lDQWdjbVZtTEZ4dUlDQWdJRzkzYm1WeUxGeHVJQ0FnSUdWc1pXMWxiblF1WDJOdmJuUmxlSFFzWEc0Z0lDQWdjSEp2Y0hOY2JpQWdLVHRjYm4wN1hHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQnZZbXBsWTNSY2JpQXFJRUJ5WlhSMWNtNGdlMkp2YjJ4bFlXNTlJRlJ5ZFdVZ2FXWWdZRzlpYW1WamRHQWdhWE1nWVNCMllXeHBaQ0JqYjIxd2IyNWxiblF1WEc0Z0tpQkFabWx1WVd4Y2JpQXFMMXh1VW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwSUQwZ1puVnVZM1JwYjI0b2IySnFaV04wS1NCN1hHNGdJQzh2SUZKbFlXTjBWR1Z6ZEZWMGFXeHpJR2x6SUc5bWRHVnVJSFZ6WldRZ2IzVjBjMmxrWlNCdlppQmlaV1p2Y21WRllXTm9JSGRvWlhKbElHRnpJRkpsWVdOMElHbHpYRzRnSUM4dklIZHBkR2hwYmlCcGRDNGdWR2hwY3lCc1pXRmtjeUIwYnlCMGQyOGdaR2xtWm1WeVpXNTBJR2x1YzNSaGJtTmxjeUJ2WmlCU1pXRmpkQ0J2YmlCMGFHVWdjMkZ0WlZ4dUlDQXZMeUJ3WVdkbExpQlVieUJwWkdWdWRHbG1lU0JoSUdWc1pXMWxiblFnWm5KdmJTQmhJR1JwWm1abGNtVnVkQ0JTWldGamRDQnBibk4wWVc1alpTQjNaU0IxYzJWY2JpQWdMeThnWVNCbWJHRm5JR2x1YzNSbFlXUWdiMllnWVc0Z2FXNXpkR0Z1WTJWdlppQmphR1ZqYXk1Y2JpQWdkbUZ5SUdselJXeGxiV1Z1ZENBOUlDRWhLRzlpYW1WamRDQW1KaUJ2WW1wbFkzUXVYMmx6VW1WaFkzUkZiR1Z0Wlc1MEtUdGNiaUFnTHk4Z2FXWWdLR2x6Uld4bGJXVnVkQ0FtSmlBaEtHOWlhbVZqZENCcGJuTjBZVzVqWlc5bUlGSmxZV04wUld4bGJXVnVkQ2twSUh0Y2JpQWdMeThnVkdocGN5QnBjeUJoYmlCcGJtUnBZMkYwYjNJZ2RHaGhkQ0I1YjNVbmNtVWdkWE5wYm1jZ2JYVnNkR2x3YkdVZ2RtVnljMmx2Ym5NZ2IyWWdVbVZoWTNRZ1lYUWdkR2hsWEc0Z0lDOHZJSE5oYldVZ2RHbHRaUzRnVkdocGN5QjNhV3hzSUhOamNtVjNJSGRwZEdnZ2IzZHVaWEp6YUdsd0lHRnVaQ0J6ZEhWbVppNGdSbWw0SUdsMExDQndiR1ZoYzJVdVhHNGdJQzh2SUZSUFJFODZJRmRsSUdOdmRXeGtJSEJ2YzNOcFlteDVJSGRoY200Z2FHVnlaUzVjYmlBZ0x5OGdmVnh1SUNCeVpYUjFjbTRnYVhORmJHVnRaVzUwTzF4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JTWldGamRFVnNaVzFsYm5RN1hHNGlYWDA9IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEVsZW1lbnRWYWxpZGF0b3JcbiAqL1xuXG4vKipcbiAqIFJlYWN0RWxlbWVudFZhbGlkYXRvciBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIGEgZWxlbWVudCBmYWN0b3J5XG4gKiB3aGljaCB2YWxpZGF0ZXMgdGhlIHByb3BzIHBhc3NlZCB0byB0aGUgZWxlbWVudC4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZVxuICogdXNlZCBvbmx5IGluIERFViBhbmQgY291bGQgYmUgcmVwbGFjZWQgYnkgYSBzdGF0aWMgdHlwZSBjaGVja2VyIGZvciBsYW5ndWFnZXNcbiAqIHRoYXQgc3VwcG9ydCBpdC5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RGcmFnbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RnJhZ21lbnRcIik7XG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbnNcIik7XG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSByZXF1aXJlKFwiLi9SZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1wiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0TmF0aXZlQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3ROYXRpdmVDb21wb25lbnRcIik7XG5cbnZhciBnZXRJdGVyYXRvckZuID0gcmVxdWlyZShcIi4vZ2V0SXRlcmF0b3JGblwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICB2YXIgbmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcblxudmFyIE5VTUVSSUNfUFJPUEVSVFlfUkVHRVggPSAvXlxcZCskLztcblxuLyoqXG4gKiBHZXRzIHRoZSBpbnN0YW5jZSdzIG5hbWUgZm9yIHVzZSBpbiB3YXJuaW5ncy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEByZXR1cm4gez9zdHJpbmd9IERpc3BsYXkgbmFtZSBvciB1bmRlZmluZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TmFtZShpbnN0YW5jZSkge1xuICB2YXIgcHVibGljSW5zdGFuY2UgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICBpZiAoIXB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICB2YXIgY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgaWYgKCFjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IGNvbnN0cnVjdG9yLm5hbWUgfHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGN1cnJlbnQgb3duZXIncyBkaXNwbGF5TmFtZSBmb3IgdXNlIGluIHdhcm5pbmdzLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHJldHVybiB7P3N0cmluZ30gRGlzcGxheSBuYW1lIG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50T3duZXJEaXNwbGF5TmFtZSgpIHtcbiAgdmFyIGN1cnJlbnQgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICByZXR1cm4gKFxuICAgIGN1cnJlbnQgJiYgZ2V0TmFtZShjdXJyZW50KSB8fCB1bmRlZmluZWRcbiAgKTtcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcblxuICB3YXJuQW5kTW9uaXRvckZvcktleVVzZShcbiAgICAnRWFjaCBjaGlsZCBpbiBhbiBhcnJheSBvciBpdGVyYXRvciBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJyxcbiAgICBlbGVtZW50LFxuICAgIHBhcmVudFR5cGVcbiAgKTtcbn1cblxuLyoqXG4gKiBXYXJuIGlmIHRoZSBrZXkgaXMgYmVpbmcgZGVmaW5lZCBhcyBhbiBvYmplY3QgcHJvcGVydHkgYnV0IGhhcyBhbiBpbmNvcnJlY3RcbiAqIHZhbHVlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgUHJvcGVydHkgbmFtZSBvZiB0aGUga2V5LlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgQ29tcG9uZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHlLZXkobmFtZSwgZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIU5VTUVSSUNfUFJPUEVSVFlfUkVHRVgudGVzdChuYW1lKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB3YXJuQW5kTW9uaXRvckZvcktleVVzZShcbiAgICAnQ2hpbGQgb2JqZWN0cyBzaG91bGQgaGF2ZSBub24tbnVtZXJpYyBrZXlzIHNvIG9yZGVyaW5nIGlzIHByZXNlcnZlZC4nLFxuICAgIGVsZW1lbnQsXG4gICAgcGFyZW50VHlwZVxuICApO1xufVxuXG4vKipcbiAqIFNoYXJlZCB3YXJuaW5nIGFuZCBtb25pdG9yaW5nIGNvZGUgZm9yIHRoZSBrZXkgd2FybmluZ3MuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgYmFzZSB3YXJuaW5nIHRoYXQgZ2V0cyBvdXRwdXQuXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBDb21wb25lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuZnVuY3Rpb24gd2FybkFuZE1vbml0b3JGb3JLZXlVc2UobWVzc2FnZSwgZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudE93bmVyRGlzcGxheU5hbWUoKTtcbiAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgP1xuICAgIHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICB2YXIgdXNlTmFtZSA9IG93bmVyTmFtZSB8fCBwYXJlbnROYW1lO1xuICB2YXIgbWVtb2l6ZXIgPSBvd25lckhhc0tleVVzZVdhcm5pbmdbbWVzc2FnZV0gfHwgKFxuICAgIChvd25lckhhc0tleVVzZVdhcm5pbmdbbWVzc2FnZV0gPSB7fSlcbiAgKTtcbiAgaWYgKG1lbW9pemVyLmhhc093blByb3BlcnR5KHVzZU5hbWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG1lbW9pemVyW3VzZU5hbWVdID0gdHJ1ZTtcblxuICB2YXIgcGFyZW50T3JPd25lckFkZGVuZHVtID1cbiAgICBvd25lck5hbWUgPyAoXCIgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgXCIgKyBvd25lck5hbWUgKyBcIi5cIikgOlxuICAgIHBhcmVudE5hbWUgPyAoXCIgQ2hlY2sgdGhlIFJlYWN0LnJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCIpIDpcbiAgICAnJztcblxuICAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cbiAgdmFyIGNoaWxkT3duZXJBZGRlbmR1bSA9ICcnO1xuICBpZiAoZWxlbWVudCAmJlxuICAgICAgZWxlbWVudC5fb3duZXIgJiZcbiAgICAgIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gTmFtZSBvZiB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgdmFyIGNoaWxkT3duZXJOYW1lID0gZ2V0TmFtZShlbGVtZW50Ll9vd25lcik7XG5cbiAgICBjaGlsZE93bmVyQWRkZW5kdW0gPSAoXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBjaGlsZE93bmVyTmFtZSArIFwiLlwiKTtcbiAgfVxuXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgIGZhbHNlLFxuICAgIG1lc3NhZ2UgKyAnJXMlcyBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyxcbiAgICBwYXJlbnRPck93bmVyQWRkZW5kdW0sXG4gICAgY2hpbGRPd25lckFkZGVuZHVtXG4gICkgOiBudWxsKTtcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG4gICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG4gICAgLy8gRW50cnkgaXRlcmF0b3JzIHByb3ZpZGUgaW1wbGljaXQga2V5cy5cbiAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGZyYWdtZW50ID0gUmVhY3RGcmFnbWVudC5leHRyYWN0SWZGcmFnbWVudChub2RlKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBmcmFnbWVudCkge1xuICAgICAgICBpZiAoZnJhZ21lbnQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHZhbGlkYXRlUHJvcGVydHlLZXkoa2V5LCBmcmFnbWVudFtrZXldLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSBwcm9wcyBhcmUgdmFsaWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BUeXBlcyBNYXAgb2YgcHJvcCBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyhjb21wb25lbnROYW1lLCBwcm9wVHlwZXMsIHByb3BzLCBsb2NhdGlvbikge1xuICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wVHlwZXMpIHtcbiAgICBpZiAocHJvcFR5cGVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgdmFyIGVycm9yO1xuICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgdHlwZW9mIHByb3BUeXBlc1twcm9wTmFtZV0gPT09ICdmdW5jdGlvbicsXG4gICAgICAgICAgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArXG4gICAgICAgICAgJ1JlYWN0LlByb3BUeXBlcy4nLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJyxcbiAgICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sXG4gICAgICAgICAgcHJvcE5hbWVcbiAgICAgICAgKSA6IGludmFyaWFudCh0eXBlb2YgcHJvcFR5cGVzW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJykpO1xuICAgICAgICBlcnJvciA9IHByb3BUeXBlc1twcm9wTmFtZV0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbik7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgfVxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgdmFyIGFkZGVuZHVtID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKHRoaXMpO1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhmYWxzZSwgJ0ZhaWxlZCBwcm9wVHlwZTogJXMlcycsIGVycm9yLm1lc3NhZ2UsIGFkZGVuZHVtKSA6IG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgd2FybmVkUHJvcHNNdXRhdGlvbnMgPSB7fTtcblxuLyoqXG4gKiBXYXJuIGFib3V0IG11dGF0aW5nIHByb3BzIHdoZW4gc2V0dGluZyBgcHJvcE5hbWVgIG9uIGBlbGVtZW50YC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcE5hbWUgVGhlIHN0cmluZyBrZXkgd2l0aGluIHByb3BzIHRoYXQgd2FzIHNldFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gd2FybkZvclByb3BzTXV0YXRpb24ocHJvcE5hbWUsIGVsZW1lbnQpIHtcbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBlbGVtZW50TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyA/IHR5cGUgOiB0eXBlLmRpc3BsYXlOYW1lO1xuICB2YXIgb3duZXJOYW1lID0gZWxlbWVudC5fb3duZXIgP1xuICAgIGVsZW1lbnQuX293bmVyLmdldFB1YmxpY0luc3RhbmNlKCkuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgOiBudWxsO1xuXG4gIHZhciB3YXJuaW5nS2V5ID0gcHJvcE5hbWUgKyAnfCcgKyBlbGVtZW50TmFtZSArICd8JyArIG93bmVyTmFtZTtcbiAgaWYgKHdhcm5lZFByb3BzTXV0YXRpb25zLmhhc093blByb3BlcnR5KHdhcm5pbmdLZXkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdhcm5lZFByb3BzTXV0YXRpb25zW3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICB2YXIgZWxlbWVudEluZm8gPSAnJztcbiAgaWYgKGVsZW1lbnROYW1lKSB7XG4gICAgZWxlbWVudEluZm8gPSAnIDwnICsgZWxlbWVudE5hbWUgKyAnIC8+JztcbiAgfVxuICB2YXIgb3duZXJJbmZvID0gJyc7XG4gIGlmIChvd25lck5hbWUpIHtcbiAgICBvd25lckluZm8gPSAnIFRoZSBlbGVtZW50IHdhcyBjcmVhdGVkIGJ5ICcgKyBvd25lck5hbWUgKyAnLic7XG4gIH1cblxuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICBmYWxzZSxcbiAgICAnRG9uXFwndCBzZXQgLnByb3BzLiVzIG9mIHRoZSBSZWFjdCBjb21wb25lbnQlcy4gSW5zdGVhZCwgc3BlY2lmeSB0aGUgJyArXG4gICAgJ2NvcnJlY3QgdmFsdWUgd2hlbiBpbml0aWFsbHkgY3JlYXRpbmcgdGhlIGVsZW1lbnQgb3IgdXNlICcgK1xuICAgICdSZWFjdC5jbG9uZUVsZW1lbnQgdG8gbWFrZSBhIG5ldyBlbGVtZW50IHdpdGggdXBkYXRlZCBwcm9wcy4lcycsXG4gICAgcHJvcE5hbWUsXG4gICAgZWxlbWVudEluZm8sXG4gICAgb3duZXJJbmZvXG4gICkgOiBudWxsKTtcbn1cblxuLy8gSW5saW5lIE9iamVjdC5pcyBwb2x5ZmlsbFxuZnVuY3Rpb24gaXMoYSwgYikge1xuICBpZiAoYSAhPT0gYSkge1xuICAgIC8vIE5hTlxuICAgIHJldHVybiBiICE9PSBiO1xuICB9XG4gIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAvLyArLTBcbiAgICByZXR1cm4gMSAvIGEgPT09IDEgLyBiO1xuICB9XG4gIHJldHVybiBhID09PSBiO1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIGNoZWNrIGlmIGl0cyBwcm9wcyBoYXZlIGJlZW4gbXV0YXRlZCBzaW5jZSBlbGVtZW50XG4gKiBjcmVhdGlvbiAob3IgdGhlIGxhc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uKS4gSW4gcGFydGljdWxhciwgY2hlY2sgaWYgYW55XG4gKiBuZXcgcHJvcHMgaGF2ZSBiZWVuIGFkZGVkLCB3aGljaCB3ZSBjYW4ndCBkaXJlY3RseSBjYXRjaCBieSBkZWZpbmluZyB3YXJuaW5nXG4gKiBwcm9wZXJ0aWVzIG9uIHRoZSBwcm9wcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzKGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSkge1xuICAgIC8vIEVsZW1lbnQgd2FzIGNyZWF0ZWQgdXNpbmcgYG5ldyBSZWFjdEVsZW1lbnRgIGRpcmVjdGx5IG9yIHdpdGhcbiAgICAvLyBgUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnRgOyBza2lwIG11dGF0aW9uIGNoZWNraW5nXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG9yaWdpbmFsUHJvcHMgPSBlbGVtZW50Ll9zdG9yZS5vcmlnaW5hbFByb3BzO1xuICB2YXIgcHJvcHMgPSBlbGVtZW50LnByb3BzO1xuXG4gIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BzKSB7XG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgaWYgKCFvcmlnaW5hbFByb3BzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSB8fFxuICAgICAgICAgICFpcyhvcmlnaW5hbFByb3BzW3Byb3BOYW1lXSwgcHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICB3YXJuRm9yUHJvcHNNdXRhdGlvbihwcm9wTmFtZSwgZWxlbWVudCk7XG5cbiAgICAgICAgLy8gQ29weSBvdmVyIHRoZSBuZXcgdmFsdWUgc28gdGhhdCB0aGUgdHdvIHByb3BzIG9iamVjdHMgbWF0Y2ggYWdhaW5cbiAgICAgICAgb3JpZ2luYWxQcm9wc1twcm9wTmFtZV0gPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PSBudWxsKSB7XG4gICAgLy8gVGhpcyBoYXMgYWxyZWFkeSB3YXJuZWQuIERvbid0IHRocm93LlxuICAgIHJldHVybjtcbiAgfVxuICAvLyBFeHRyYWN0IHRoZSBjb21wb25lbnQgY2xhc3MgZnJvbSB0aGUgZWxlbWVudC4gQ29udmVydHMgc3RyaW5nIHR5cGVzXG4gIC8vIHRvIGEgY29tcG9zaXRlIGNsYXNzIHdoaWNoIG1heSBoYXZlIHByb3BUeXBlcy5cbiAgLy8gVE9ETzogVmFsaWRhdGluZyBhIHN0cmluZydzIHByb3BUeXBlcyBpcyBub3QgZGVjb3VwbGVkIGZyb20gdGhlXG4gIC8vIHJlbmRlcmluZyB0YXJnZXQgd2hpY2ggaXMgcHJvYmxlbWF0aWMuXG4gIHZhciBjb21wb25lbnRDbGFzcyA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudChcbiAgICBlbGVtZW50XG4gICk7XG4gIHZhciBuYW1lID0gY29tcG9uZW50Q2xhc3MuZGlzcGxheU5hbWUgfHwgY29tcG9uZW50Q2xhc3MubmFtZTtcbiAgaWYgKGNvbXBvbmVudENsYXNzLnByb3BUeXBlcykge1xuICAgIGNoZWNrUHJvcFR5cGVzKFxuICAgICAgbmFtZSxcbiAgICAgIGNvbXBvbmVudENsYXNzLnByb3BUeXBlcyxcbiAgICAgIGVsZW1lbnQucHJvcHMsXG4gICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25zLnByb3BcbiAgICApO1xuICB9XG4gIGlmICh0eXBlb2YgY29tcG9uZW50Q2xhc3MuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBjb21wb25lbnRDbGFzcy5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQsXG4gICAgICAnZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgK1xuICAgICAgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nXG4gICAgKSA6IG51bGwpO1xuICB9XG59XG5cbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSB7XG5cbiAgY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzOiBjaGVja0FuZFdhcm5Gb3JNdXRhdGVkUHJvcHMsXG5cbiAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24odHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gICAgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgdHlwZSAhPSBudWxsLFxuICAgICAgJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgc2hvdWxkIG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4gSXQgc2hvdWxkICcgK1xuICAgICAgICAnYmUgYSBzdHJpbmcgKGZvciBET00gZWxlbWVudHMpIG9yIGEgUmVhY3RDbGFzcyAoZm9yIGNvbXBvc2l0ZSAnICtcbiAgICAgICAgJ2NvbXBvbmVudHMpLidcbiAgICApIDogbnVsbCk7XG5cbiAgICB2YXIgZWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9LFxuXG4gIGNyZWF0ZUZhY3Rvcnk6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVFbGVtZW50LmJpbmQoXG4gICAgICBudWxsLFxuICAgICAgdHlwZVxuICAgICk7XG4gICAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkXG4gICAgdmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICB2YWxpZGF0ZWRGYWN0b3J5LFxuICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICdGYWN0b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNzIHRoZSBjbGFzcyBkaXJlY3RseSAnICtcbiAgICAgICAgICAgICAgICAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nXG4gICAgICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0eXBlJywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0eXBlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eSAoZXM1LXNoaW0vc2hhbSB0b28pXG4gICAgICB9XG4gICAgfVxuXG5cbiAgICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbiAgfSxcblxuICBjbG9uZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICAgIHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIG5ld0VsZW1lbnQudHlwZSk7XG4gICAgfVxuICAgIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICAgIHJldHVybiBuZXdFbGVtZW50O1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkZiR1Z0Wlc1MFZtRnNhV1JoZEc5eUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRRdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRVZzWlcxbGJuUldZV3hwWkdGMGIzSmNiaUFxTDF4dVhHNHZLaXBjYmlBcUlGSmxZV04wUld4bGJXVnVkRlpoYkdsa1lYUnZjaUJ3Y205MmFXUmxjeUJoSUhkeVlYQndaWElnWVhKdmRXNWtJR0VnWld4bGJXVnVkQ0JtWVdOMGIzSjVYRzRnS2lCM2FHbGphQ0IyWVd4cFpHRjBaWE1nZEdobElIQnliM0J6SUhCaGMzTmxaQ0IwYnlCMGFHVWdaV3hsYldWdWRDNGdWR2hwY3lCcGN5QnBiblJsYm1SbFpDQjBieUJpWlZ4dUlDb2dkWE5sWkNCdmJteDVJR2x1SUVSRlZpQmhibVFnWTI5MWJHUWdZbVVnY21Wd2JHRmpaV1FnWW5rZ1lTQnpkR0YwYVdNZ2RIbHdaU0JqYUdWamEyVnlJR1p2Y2lCc1lXNW5kV0ZuWlhOY2JpQXFJSFJvWVhRZ2MzVndjRzl5ZENCcGRDNWNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRFVnNaVzFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnNaVzFsYm5SY0lpazdYRzUyWVhJZ1VtVmhZM1JHY21GbmJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUm5KaFoyMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUlFjbTl3Vkhsd1pVeHZZMkYwYVc5dWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJuTmNJaWs3WEc1MllYSWdVbVZoWTNSUWNtOXdWSGx3WlV4dlkyRjBhVzl1VG1GdFpYTWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRkJ5YjNCVWVYQmxURzlqWVhScGIyNU9ZVzFsYzF3aUtUdGNiblpoY2lCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlYQ0lwTzF4dWRtRnlJRkpsWVdOMFRtRjBhWFpsUTI5dGNHOXVaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNST1lYUnBkbVZEYjIxd2IyNWxiblJjSWlrN1hHNWNiblpoY2lCblpYUkpkR1Z5WVhSdmNrWnVJRDBnY21WeGRXbHlaU2hjSWk0dloyVjBTWFJsY21GMGIzSkdibHdpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1MllYSWdkMkZ5Ym1sdVp5QTlJSEpsY1hWcGNtVW9YQ0l1TDNkaGNtNXBibWRjSWlrN1hHNWNibVoxYm1OMGFXOXVJR2RsZEVSbFkyeGhjbUYwYVc5dVJYSnliM0pCWkdSbGJtUjFiU2dwSUh0Y2JpQWdhV1lnS0ZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblFwSUh0Y2JpQWdJQ0IyWVhJZ2JtRnRaU0E5SUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblF1WjJWMFRtRnRaU2dwTzF4dUlDQWdJR2xtSUNodVlXMWxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdKeUJEYUdWamF5QjBhR1VnY21WdVpHVnlJRzFsZEdodlpDQnZaaUJnSnlBcklHNWhiV1VnS3lBbllDNG5PMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z0p5YzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1YyRnliaUJwWmlCMGFHVnlaU2R6SUc1dklHdGxlU0JsZUhCc2FXTnBkR3g1SUhObGRDQnZiaUJrZVc1aGJXbGpJR0Z5Y21GNWN5QnZaaUJqYUdsc1pISmxiaUJ2Y2x4dUlDb2diMkpxWldOMElHdGxlWE1nWVhKbElHNXZkQ0IyWVd4cFpDNGdWR2hwY3lCaGJHeHZkM01nZFhNZ2RHOGdhMlZsY0NCMGNtRmpheUJ2WmlCamFHbHNaSEpsYmlCaVpYUjNaV1Z1WEc0Z0tpQjFjR1JoZEdWekxseHVJQ292WEc1MllYSWdiM2R1WlhKSVlYTkxaWGxWYzJWWFlYSnVhVzVuSUQwZ2UzMDdYRzVjYm5aaGNpQnNiMmRuWldSVWVYQmxSbUZwYkhWeVpYTWdQU0I3ZlR0Y2JseHVkbUZ5SUU1VlRVVlNTVU5mVUZKUFVFVlNWRmxmVWtWSFJWZ2dQU0F2WGx4Y1pDc2tMenRjYmx4dUx5b3FYRzRnS2lCSFpYUnpJSFJvWlNCcGJuTjBZVzVqWlNkeklHNWhiV1VnWm05eUlIVnpaU0JwYmlCM1lYSnVhVzVuY3k1Y2JpQXFYRzRnS2lCQWFXNTBaWEp1WVd4Y2JpQXFJRUJ5WlhSMWNtNGdlejl6ZEhKcGJtZDlJRVJwYzNCc1lYa2dibUZ0WlNCdmNpQjFibVJsWm1sdVpXUmNiaUFxTDF4dVpuVnVZM1JwYjI0Z1oyVjBUbUZ0WlNocGJuTjBZVzVqWlNrZ2UxeHVJQ0IyWVhJZ2NIVmliR2xqU1c1emRHRnVZMlVnUFNCcGJuTjBZVzVqWlNBbUppQnBibk4wWVc1alpTNW5aWFJRZFdKc2FXTkpibk4wWVc1alpTZ3BPMXh1SUNCcFppQW9JWEIxWW14cFkwbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhWdVpHVm1hVzVsWkR0Y2JpQWdmVnh1SUNCMllYSWdZMjl1YzNSeWRXTjBiM0lnUFNCd2RXSnNhV05KYm5OMFlXNWpaUzVqYjI1emRISjFZM1J2Y2p0Y2JpQWdhV1lnS0NGamIyNXpkSEoxWTNSdmNpa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMWJtUmxabWx1WldRN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUdOdmJuTjBjblZqZEc5eUxtUnBjM0JzWVhsT1lXMWxJSHg4SUdOdmJuTjBjblZqZEc5eUxtNWhiV1VnZkh3Z2RXNWtaV1pwYm1Wa08xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGRITWdkR2hsSUdOMWNuSmxiblFnYjNkdVpYSW5jeUJrYVhOd2JHRjVUbUZ0WlNCbWIzSWdkWE5sSUdsdUlIZGhjbTVwYm1kekxseHVJQ3BjYmlBcUlFQnBiblJsY201aGJGeHVJQ29nUUhKbGRIVnliaUI3UDNOMGNtbHVaMzBnUkdsemNHeGhlU0J1WVcxbElHOXlJSFZ1WkdWbWFXNWxaRnh1SUNvdlhHNW1kVzVqZEdsdmJpQm5aWFJEZFhKeVpXNTBUM2R1WlhKRWFYTndiR0Y1VG1GdFpTZ3BJSHRjYmlBZ2RtRnlJR04xY25KbGJuUWdQU0JTWldGamRFTjFjbkpsYm5SUGQyNWxjaTVqZFhKeVpXNTBPMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJR04xY25KbGJuUWdKaVlnWjJWMFRtRnRaU2hqZFhKeVpXNTBLU0I4ZkNCMWJtUmxabWx1WldSY2JpQWdLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlhZWEp1SUdsbUlIUm9aU0JsYkdWdFpXNTBJR1J2WlhOdUozUWdhR0YyWlNCaGJpQmxlSEJzYVdOcGRDQnJaWGtnWVhOemFXZHVaV1FnZEc4Z2FYUXVYRzRnS2lCVWFHbHpJR1ZzWlcxbGJuUWdhWE1nYVc0Z1lXNGdZWEp5WVhrdUlGUm9aU0JoY25KaGVTQmpiM1ZzWkNCbmNtOTNJR0Z1WkNCemFISnBibXNnYjNJZ1ltVmNiaUFxSUhKbGIzSmtaWEpsWkM0Z1FXeHNJR05vYVd4a2NtVnVJSFJvWVhRZ2FHRjJaVzRuZENCaGJISmxZV1I1SUdKbFpXNGdkbUZzYVdSaGRHVmtJR0Z5WlNCeVpYRjFhWEpsWkNCMGIxeHVJQ29nYUdGMlpTQmhJRndpYTJWNVhDSWdjSEp2Y0dWeWRIa2dZWE56YVdkdVpXUWdkRzhnYVhRdVhHNGdLbHh1SUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ1pXeGxiV1Z1ZENCRmJHVnRaVzUwSUhSb1lYUWdjbVZ4ZFdseVpYTWdZU0JyWlhrdVhHNGdLaUJBY0dGeVlXMGdleXA5SUhCaGNtVnVkRlI1Y0dVZ1pXeGxiV1Z1ZENkeklIQmhjbVZ1ZENkeklIUjVjR1V1WEc0Z0tpOWNibVoxYm1OMGFXOXVJSFpoYkdsa1lYUmxSWGh3YkdsamFYUkxaWGtvWld4bGJXVnVkQ3dnY0dGeVpXNTBWSGx3WlNrZ2UxeHVJQ0JwWmlBb1pXeGxiV1Z1ZEM1ZmMzUnZjbVV1ZG1Gc2FXUmhkR1ZrSUh4OElHVnNaVzFsYm5RdWEyVjVJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQnlaWFIxY200N1hHNGdJSDFjYmlBZ1pXeGxiV1Z1ZEM1ZmMzUnZjbVV1ZG1Gc2FXUmhkR1ZrSUQwZ2RISjFaVHRjYmx4dUlDQjNZWEp1UVc1a1RXOXVhWFJ2Y2tadmNrdGxlVlZ6WlNoY2JpQWdJQ0FuUldGamFDQmphR2xzWkNCcGJpQmhiaUJoY25KaGVTQnZjaUJwZEdWeVlYUnZjaUJ6YUc5MWJHUWdhR0YyWlNCaElIVnVhWEYxWlNCY0ltdGxlVndpSUhCeWIzQXVKeXhjYmlBZ0lDQmxiR1Z0Wlc1MExGeHVJQ0FnSUhCaGNtVnVkRlI1Y0dWY2JpQWdLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlhZWEp1SUdsbUlIUm9aU0JyWlhrZ2FYTWdZbVZwYm1jZ1pHVm1hVzVsWkNCaGN5QmhiaUJ2WW1wbFkzUWdjSEp2Y0dWeWRIa2dZblYwSUdoaGN5QmhiaUJwYm1OdmNuSmxZM1JjYmlBcUlIWmhiSFZsTGx4dUlDcGNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHNWhiV1VnVUhKdmNHVnlkSGtnYm1GdFpTQnZaaUIwYUdVZ2EyVjVMbHh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJR1ZzWlcxbGJuUWdRMjl0Y0c5dVpXNTBJSFJvWVhRZ2NtVnhkV2x5WlhNZ1lTQnJaWGt1WEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJSEJoY21WdWRGUjVjR1VnWld4bGJXVnVkQ2R6SUhCaGNtVnVkQ2R6SUhSNWNHVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFVISnZjR1Z5ZEhsTFpYa29ibUZ0WlN3Z1pXeGxiV1Z1ZEN3Z2NHRnlaVzUwVkhsd1pTa2dlMXh1SUNCcFppQW9JVTVWVFVWU1NVTmZVRkpQVUVWU1ZGbGZVa1ZIUlZndWRHVnpkQ2h1WVcxbEtTa2dlMXh1SUNBZ0lISmxkSFZ5Ymp0Y2JpQWdmVnh1SUNCM1lYSnVRVzVrVFc5dWFYUnZja1p2Y2t0bGVWVnpaU2hjYmlBZ0lDQW5RMmhwYkdRZ2IySnFaV04wY3lCemFHOTFiR1FnYUdGMlpTQnViMjR0Ym5WdFpYSnBZeUJyWlhseklITnZJRzl5WkdWeWFXNW5JR2x6SUhCeVpYTmxjblpsWkM0bkxGeHVJQ0FnSUdWc1pXMWxiblFzWEc0Z0lDQWdjR0Z5Wlc1MFZIbHdaVnh1SUNBcE8xeHVmVnh1WEc0dktpcGNiaUFxSUZOb1lYSmxaQ0IzWVhKdWFXNW5JR0Z1WkNCdGIyNXBkRzl5YVc1bklHTnZaR1VnWm05eUlIUm9aU0JyWlhrZ2QyRnlibWx1WjNNdVhHNGdLbHh1SUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiV1Z6YzJGblpTQlVhR1VnWW1GelpTQjNZWEp1YVc1bklIUm9ZWFFnWjJWMGN5QnZkWFJ3ZFhRdVhHNGdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ1pXeGxiV1Z1ZENCRGIyMXdiMjVsYm5RZ2RHaGhkQ0J5WlhGMWFYSmxjeUJoSUd0bGVTNWNiaUFxSUVCd1lYSmhiU0I3S24wZ2NHRnlaVzUwVkhsd1pTQmxiR1Z0Wlc1MEozTWdjR0Z5Wlc1MEozTWdkSGx3WlM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnZDJGeWJrRnVaRTF2Ym1sMGIzSkdiM0pMWlhsVmMyVW9iV1Z6YzJGblpTd2daV3hsYldWdWRDd2djR0Z5Wlc1MFZIbHdaU2tnZTF4dUlDQjJZWElnYjNkdVpYSk9ZVzFsSUQwZ1oyVjBRM1Z5Y21WdWRFOTNibVZ5UkdsemNHeGhlVTVoYldVb0tUdGNiaUFnZG1GeUlIQmhjbVZ1ZEU1aGJXVWdQU0IwZVhCbGIyWWdjR0Z5Wlc1MFZIbHdaU0E5UFQwZ0ozTjBjbWx1WnljZ1AxeHVJQ0FnSUhCaGNtVnVkRlI1Y0dVZ09pQndZWEpsYm5SVWVYQmxMbVJwYzNCc1lYbE9ZVzFsSUh4OElIQmhjbVZ1ZEZSNWNHVXVibUZ0WlR0Y2JseHVJQ0IyWVhJZ2RYTmxUbUZ0WlNBOUlHOTNibVZ5VG1GdFpTQjhmQ0J3WVhKbGJuUk9ZVzFsTzF4dUlDQjJZWElnYldWdGIybDZaWElnUFNCdmQyNWxja2hoYzB0bGVWVnpaVmRoY201cGJtZGJiV1Z6YzJGblpWMGdmSHdnS0Z4dUlDQWdJQ2h2ZDI1bGNraGhjMHRsZVZWelpWZGhjbTVwYm1kYmJXVnpjMkZuWlYwZ1BTQjdmU2xjYmlBZ0tUdGNiaUFnYVdZZ0tHMWxiVzlwZW1WeUxtaGhjMDkzYmxCeWIzQmxjblI1S0hWelpVNWhiV1VwS1NCN1hHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNGdJRzFsYlc5cGVtVnlXM1Z6WlU1aGJXVmRJRDBnZEhKMVpUdGNibHh1SUNCMllYSWdjR0Z5Wlc1MFQzSlBkMjVsY2tGa1pHVnVaSFZ0SUQxY2JpQWdJQ0J2ZDI1bGNrNWhiV1VnUHlBb1hDSWdRMmhsWTJzZ2RHaGxJSEpsYm1SbGNpQnRaWFJvYjJRZ2IyWWdYQ0lnS3lCdmQyNWxjazVoYldVZ0t5QmNJaTVjSWlrZ09seHVJQ0FnSUhCaGNtVnVkRTVoYldVZ1B5QW9YQ0lnUTJobFkyc2dkR2hsSUZKbFlXTjBMbkpsYm1SbGNpQmpZV3hzSUhWemFXNW5JRHhjSWlBcklIQmhjbVZ1ZEU1aGJXVWdLeUJjSWo0dVhDSXBJRHBjYmlBZ0lDQW5KenRjYmx4dUlDQXZMeUJWYzNWaGJHeDVJSFJvWlNCamRYSnlaVzUwSUc5M2JtVnlJR2x6SUhSb1pTQnZabVpsYm1SbGNpd2dZblYwSUdsbUlHbDBJR0ZqWTJWd2RITWdZMmhwYkdSeVpXNGdZWE1nWVZ4dUlDQXZMeUJ3Y205d1pYSjBlU3dnYVhRZ2JXRjVJR0psSUhSb1pTQmpjbVZoZEc5eUlHOW1JSFJvWlNCamFHbHNaQ0IwYUdGMEozTWdjbVZ6Y0c5dWMybGliR1VnWm05eVhHNGdJQzh2SUdGemMybG5ibWx1WnlCcGRDQmhJR3RsZVM1Y2JpQWdkbUZ5SUdOb2FXeGtUM2R1WlhKQlpHUmxibVIxYlNBOUlDY25PMXh1SUNCcFppQW9aV3hsYldWdWRDQW1KbHh1SUNBZ0lDQWdaV3hsYldWdWRDNWZiM2R1WlhJZ0ppWmNiaUFnSUNBZ0lHVnNaVzFsYm5RdVgyOTNibVZ5SUNFOVBTQlNaV0ZqZEVOMWNuSmxiblJQZDI1bGNpNWpkWEp5Wlc1MEtTQjdYRzRnSUNBZ0x5OGdUbUZ0WlNCdlppQjBhR1VnWTI5dGNHOXVaVzUwSUhSb1lYUWdiM0pwWjJsdVlXeHNlU0JqY21WaGRHVmtJSFJvYVhNZ1kyaHBiR1F1WEc0Z0lDQWdkbUZ5SUdOb2FXeGtUM2R1WlhKT1lXMWxJRDBnWjJWMFRtRnRaU2hsYkdWdFpXNTBMbDl2ZDI1bGNpazdYRzVjYmlBZ0lDQmphR2xzWkU5M2JtVnlRV1JrWlc1a2RXMGdQU0FvWENJZ1NYUWdkMkZ6SUhCaGMzTmxaQ0JoSUdOb2FXeGtJR1p5YjIwZ1hDSWdLeUJqYUdsc1pFOTNibVZ5VG1GdFpTQXJJRndpTGx3aUtUdGNiaUFnZlZ4dVhHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUdaaGJITmxMRnh1SUNBZ0lHMWxjM05oWjJVZ0t5QW5KWE1sY3lCVFpXVWdhSFIwY0hNNkx5OW1ZaTV0WlM5eVpXRmpkQzEzWVhKdWFXNW5MV3RsZVhNZ1ptOXlJRzF2Y21VZ2FXNW1iM0p0WVhScGIyNHVKeXhjYmlBZ0lDQndZWEpsYm5SUGNrOTNibVZ5UVdSa1pXNWtkVzBzWEc0Z0lDQWdZMmhwYkdSUGQyNWxja0ZrWkdWdVpIVnRYRzRnSUNrZ09pQnVkV3hzS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJGYm5OMWNtVWdkR2hoZENCbGRtVnllU0JsYkdWdFpXNTBJR1ZwZEdobGNpQnBjeUJ3WVhOelpXUWdhVzRnWVNCemRHRjBhV01nYkc5allYUnBiMjRzSUdsdUlHRnVYRzRnS2lCaGNuSmhlU0IzYVhSb0lHRnVJR1Y0Y0d4cFkybDBJR3RsZVhNZ2NISnZjR1Z5ZEhrZ1pHVm1hVzVsWkN3Z2IzSWdhVzRnWVc0Z2IySnFaV04wSUd4cGRHVnlZV3hjYmlBcUlIZHBkR2dnZG1Gc2FXUWdhMlY1SUhCeWIzQmxjblI1TGx4dUlDcGNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEU1dlpHVjlJRzV2WkdVZ1UzUmhkR2xqWVd4c2VTQndZWE56WldRZ1kyaHBiR1FnYjJZZ1lXNTVJSFI1Y0dVdVhHNGdLaUJBY0dGeVlXMGdleXA5SUhCaGNtVnVkRlI1Y0dVZ2JtOWtaU2R6SUhCaGNtVnVkQ2R6SUhSNWNHVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlIWmhiR2xrWVhSbFEyaHBiR1JMWlhsektHNXZaR1VzSUhCaGNtVnVkRlI1Y0dVcElIdGNiaUFnYVdZZ0tFRnljbUY1TG1selFYSnlZWGtvYm05a1pTa3BJSHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJRzV2WkdVdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQWdJSFpoY2lCamFHbHNaQ0E5SUc1dlpHVmJhVjA3WEc0Z0lDQWdJQ0JwWmlBb1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtHTm9hV3hrS1NrZ2UxeHVJQ0FnSUNBZ0lDQjJZV3hwWkdGMFpVVjRjR3hwWTJsMFMyVjVLR05vYVd4a0xDQndZWEpsYm5SVWVYQmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgwZ1pXeHpaU0JwWmlBb1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtHNXZaR1VwS1NCN1hHNGdJQ0FnTHk4Z1ZHaHBjeUJsYkdWdFpXNTBJSGRoY3lCd1lYTnpaV1FnYVc0Z1lTQjJZV3hwWkNCc2IyTmhkR2x2Ymk1Y2JpQWdJQ0J1YjJSbExsOXpkRzl5WlM1MllXeHBaR0YwWldRZ1BTQjBjblZsTzF4dUlDQjlJR1ZzYzJVZ2FXWWdLRzV2WkdVcElIdGNiaUFnSUNCMllYSWdhWFJsY21GMGIzSkdiaUE5SUdkbGRFbDBaWEpoZEc5eVJtNG9ibTlrWlNrN1hHNGdJQ0FnTHk4Z1JXNTBjbmtnYVhSbGNtRjBiM0p6SUhCeWIzWnBaR1VnYVcxd2JHbGphWFFnYTJWNWN5NWNiaUFnSUNCcFppQW9hWFJsY21GMGIzSkdiaWtnZTF4dUlDQWdJQ0FnYVdZZ0tHbDBaWEpoZEc5eVJtNGdJVDA5SUc1dlpHVXVaVzUwY21sbGN5a2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2FYUmxjbUYwYjNJZ1BTQnBkR1Z5WVhSdmNrWnVMbU5oYkd3b2JtOWtaU2s3WEc0Z0lDQWdJQ0FnSUhaaGNpQnpkR1Z3TzF4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvSVNoemRHVndJRDBnYVhSbGNtRjBiM0l1Ym1WNGRDZ3BLUzVrYjI1bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaHpkR1Z3TG5aaGJIVmxLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZzYVdSaGRHVkZlSEJzYVdOcGRFdGxlU2h6ZEdWd0xuWmhiSFZsTENCd1lYSmxiblJVZVhCbEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJ1YjJSbElEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJQ0FnZG1GeUlHWnlZV2R0Wlc1MElEMGdVbVZoWTNSR2NtRm5iV1Z1ZEM1bGVIUnlZV04wU1daR2NtRm5iV1Z1ZENodWIyUmxLVHRjYmlBZ0lDQWdJR1p2Y2lBb2RtRnlJR3RsZVNCcGJpQm1jbUZuYldWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1puSmhaMjFsYm5RdWFHRnpUM2R1VUhKdmNHVnlkSGtvYTJWNUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhaaGJHbGtZWFJsVUhKdmNHVnlkSGxMWlhrb2EyVjVMQ0JtY21GbmJXVnVkRnRyWlhsZExDQndZWEpsYm5SVWVYQmxLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVmVnh1WEc0dktpcGNiaUFxSUVGemMyVnlkQ0IwYUdGMElIUm9aU0J3Y205d2N5QmhjbVVnZG1Gc2FXUmNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1kyOXRjRzl1Wlc1MFRtRnRaU0JPWVcxbElHOW1JSFJvWlNCamIyMXdiMjVsYm5RZ1ptOXlJR1Z5Y205eUlHMWxjM05oWjJWekxseHVJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJ5YjNCVWVYQmxjeUJOWVhBZ2IyWWdjSEp2Y0NCdVlXMWxJSFJ2SUdFZ1VtVmhZM1JRY205d1ZIbHdaVnh1SUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhCeWIzQnpYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYkc5allYUnBiMjRnWlM1bkxpQmNJbkJ5YjNCY0lpd2dYQ0pqYjI1MFpYaDBYQ0lzSUZ3aVkyaHBiR1FnWTI5dWRHVjRkRndpWEc0Z0tpQkFjSEpwZG1GMFpWeHVJQ292WEc1bWRXNWpkR2x2YmlCamFHVmphMUJ5YjNCVWVYQmxjeWhqYjIxd2IyNWxiblJPWVcxbExDQndjbTl3Vkhsd1pYTXNJSEJ5YjNCekxDQnNiMk5oZEdsdmJpa2dlMXh1SUNCbWIzSWdLSFpoY2lCd2NtOXdUbUZ0WlNCcGJpQndjbTl3Vkhsd1pYTXBJSHRjYmlBZ0lDQnBaaUFvY0hKdmNGUjVjR1Z6TG1oaGMwOTNibEJ5YjNCbGNuUjVLSEJ5YjNCT1lXMWxLU2tnZTF4dUlDQWdJQ0FnZG1GeUlHVnljbTl5TzF4dUlDQWdJQ0FnTHk4Z1VISnZjQ0IwZVhCbElIWmhiR2xrWVhScGIyNGdiV0Y1SUhSb2NtOTNMaUJKYmlCallYTmxJSFJvWlhrZ1pHOHNJSGRsSUdSdmJpZDBJSGRoYm5RZ2RHOWNiaUFnSUNBZ0lDOHZJR1poYVd3Z2RHaGxJSEpsYm1SbGNpQndhR0Z6WlNCM2FHVnlaU0JwZENCa2FXUnVKM1FnWm1GcGJDQmlaV1p2Y21VdUlGTnZJSGRsSUd4dlp5QnBkQzVjYmlBZ0lDQWdJQzh2SUVGbWRHVnlJSFJvWlhObElHaGhkbVVnWW1WbGJpQmpiR1ZoYm1Wa0lIVndMQ0IzWlNkc2JDQnNaWFFnZEdobGJTQjBhSEp2ZHk1Y2JpQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQzh2SUZSb2FYTWdhWE1nYVc1MFpXNTBhVzl1WVd4c2VTQmhiaUJwYm5aaGNtbGhiblFnZEdoaGRDQm5aWFJ6SUdOaGRXZG9kQzRnU1hRbmN5QjBhR1VnYzJGdFpWeHVJQ0FnSUNBZ0lDQXZMeUJpWldoaGRtbHZjaUJoY3lCM2FYUm9iM1YwSUhSb2FYTWdjM1JoZEdWdFpXNTBJR1Y0WTJWd2RDQjNhWFJvSUdFZ1ltVjBkR1Z5SUcxbGMzTmhaMlV1WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUNBZ2RIbHdaVzltSUhCeWIzQlVlWEJsYzF0d2NtOXdUbUZ0WlYwZ1BUMDlJQ2RtZFc1amRHbHZiaWNzWEc0Z0lDQWdJQ0FnSUNBZ0p5VnpPaUFsY3lCMGVYQmxJR0FsYzJBZ2FYTWdhVzUyWVd4cFpEc2dhWFFnYlhWemRDQmlaU0JoSUdaMWJtTjBhVzl1TENCMWMzVmhiR3g1SUdaeWIyMGdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oxSmxZV04wTGxCeWIzQlVlWEJsY3k0bkxGeHVJQ0FnSUNBZ0lDQWdJR052YlhCdmJtVnVkRTVoYldVZ2ZId2dKMUpsWVdOMElHTnNZWE56Snl4Y2JpQWdJQ0FnSUNBZ0lDQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGMxdHNiMk5oZEdsdmJsMHNYRzRnSUNBZ0lDQWdJQ0FnY0hKdmNFNWhiV1ZjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaDBlWEJsYjJZZ2NISnZjRlI1Y0dWelczQnliM0JPWVcxbFhTQTlQVDBnSjJaMWJtTjBhVzl1SnlrcE8xeHVJQ0FnSUNBZ0lDQmxjbkp2Y2lBOUlIQnliM0JVZVhCbGMxdHdjbTl3VG1GdFpWMG9jSEp2Y0hNc0lIQnliM0JPWVcxbExDQmpiMjF3YjI1bGJuUk9ZVzFsTENCc2IyTmhkR2x2YmlrN1hHNGdJQ0FnSUNCOUlHTmhkR05vSUNobGVDa2dlMXh1SUNBZ0lDQWdJQ0JsY25KdmNpQTlJR1Y0TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tHVnljbTl5SUdsdWMzUmhibU5sYjJZZ1JYSnliM0lnSmlZZ0lTaGxjbkp2Y2k1dFpYTnpZV2RsSUdsdUlHeHZaMmRsWkZSNWNHVkdZV2xzZFhKbGN5a3BJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1QyNXNlU0J0YjI1cGRHOXlJSFJvYVhNZ1ptRnBiSFZ5WlNCdmJtTmxJR0psWTJGMWMyVWdkR2hsY21VZ2RHVnVaSE1nZEc4Z1ltVWdZU0JzYjNRZ2IyWWdkR2hsWEc0Z0lDQWdJQ0FnSUM4dklITmhiV1VnWlhKeWIzSXVYRzRnSUNBZ0lDQWdJR3h2WjJkbFpGUjVjR1ZHWVdsc2RYSmxjMXRsY25KdmNpNXRaWE56WVdkbFhTQTlJSFJ5ZFdVN1hHNWNiaUFnSUNBZ0lDQWdkbUZ5SUdGa1pHVnVaSFZ0SUQwZ1oyVjBSR1ZqYkdGeVlYUnBiMjVGY25KdmNrRmtaR1Z1WkhWdEtIUm9hWE1wTzF4dUlDQWdJQ0FnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhtWVd4elpTd2dKMFpoYVd4bFpDQndjbTl3Vkhsd1pUb2dKWE1sY3ljc0lHVnljbTl5TG0xbGMzTmhaMlVzSUdGa1pHVnVaSFZ0S1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVmVnh1WEc1MllYSWdkMkZ5Ym1Wa1VISnZjSE5OZFhSaGRHbHZibk1nUFNCN2ZUdGNibHh1THlvcVhHNGdLaUJYWVhKdUlHRmliM1YwSUcxMWRHRjBhVzVuSUhCeWIzQnpJSGRvWlc0Z2MyVjBkR2x1WnlCZ2NISnZjRTVoYldWZ0lHOXVJR0JsYkdWdFpXNTBZQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjSEp2Y0U1aGJXVWdWR2hsSUhOMGNtbHVaeUJyWlhrZ2QybDBhR2x1SUhCeWIzQnpJSFJvWVhRZ2QyRnpJSE5sZEZ4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUdWc1pXMWxiblJjYmlBcUwxeHVablZ1WTNScGIyNGdkMkZ5YmtadmNsQnliM0J6VFhWMFlYUnBiMjRvY0hKdmNFNWhiV1VzSUdWc1pXMWxiblFwSUh0Y2JpQWdkbUZ5SUhSNWNHVWdQU0JsYkdWdFpXNTBMblI1Y0dVN1hHNGdJSFpoY2lCbGJHVnRaVzUwVG1GdFpTQTlJSFI1Y0dWdlppQjBlWEJsSUQwOVBTQW5jM1J5YVc1bkp5QS9JSFI1Y0dVZ09pQjBlWEJsTG1ScGMzQnNZWGxPWVcxbE8xeHVJQ0IyWVhJZ2IzZHVaWEpPWVcxbElEMGdaV3hsYldWdWRDNWZiM2R1WlhJZ1AxeHVJQ0FnSUdWc1pXMWxiblF1WDI5M2JtVnlMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2t1WTI5dWMzUnlkV04wYjNJdVpHbHpjR3hoZVU1aGJXVWdPaUJ1ZFd4c08xeHVYRzRnSUhaaGNpQjNZWEp1YVc1blMyVjVJRDBnY0hKdmNFNWhiV1VnS3lBbmZDY2dLeUJsYkdWdFpXNTBUbUZ0WlNBcklDZDhKeUFySUc5M2JtVnlUbUZ0WlR0Y2JpQWdhV1lnS0hkaGNtNWxaRkJ5YjNCelRYVjBZWFJwYjI1ekxtaGhjMDkzYmxCeWIzQmxjblI1S0hkaGNtNXBibWRMWlhrcEtTQjdYRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzRnSUhkaGNtNWxaRkJ5YjNCelRYVjBZWFJwYjI1elczZGhjbTVwYm1kTFpYbGRJRDBnZEhKMVpUdGNibHh1SUNCMllYSWdaV3hsYldWdWRFbHVabThnUFNBbkp6dGNiaUFnYVdZZ0tHVnNaVzFsYm5ST1lXMWxLU0I3WEc0Z0lDQWdaV3hsYldWdWRFbHVabThnUFNBbklEd25JQ3NnWld4bGJXVnVkRTVoYldVZ0t5QW5JQzgrSnp0Y2JpQWdmVnh1SUNCMllYSWdiM2R1WlhKSmJtWnZJRDBnSnljN1hHNGdJR2xtSUNodmQyNWxjazVoYldVcElIdGNiaUFnSUNCdmQyNWxja2x1Wm04Z1BTQW5JRlJvWlNCbGJHVnRaVzUwSUhkaGN5QmpjbVZoZEdWa0lHSjVJQ2NnS3lCdmQyNWxjazVoYldVZ0t5QW5MaWM3WEc0Z0lIMWNibHh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FuUkc5dVhGd25kQ0J6WlhRZ0xuQnliM0J6TGlWeklHOW1JSFJvWlNCU1pXRmpkQ0JqYjIxd2IyNWxiblFsY3k0Z1NXNXpkR1ZoWkN3Z2MzQmxZMmxtZVNCMGFHVWdKeUFyWEc0Z0lDQWdKMk52Y25KbFkzUWdkbUZzZFdVZ2QyaGxiaUJwYm1sMGFXRnNiSGtnWTNKbFlYUnBibWNnZEdobElHVnNaVzFsYm5RZ2IzSWdkWE5sSUNjZ0sxeHVJQ0FnSUNkU1pXRmpkQzVqYkc5dVpVVnNaVzFsYm5RZ2RHOGdiV0ZyWlNCaElHNWxkeUJsYkdWdFpXNTBJSGRwZEdnZ2RYQmtZWFJsWkNCd2NtOXdjeTRsY3ljc1hHNGdJQ0FnY0hKdmNFNWhiV1VzWEc0Z0lDQWdaV3hsYldWdWRFbHVabThzWEc0Z0lDQWdiM2R1WlhKSmJtWnZYRzRnSUNrZ09pQnVkV3hzS1R0Y2JuMWNibHh1THk4Z1NXNXNhVzVsSUU5aWFtVmpkQzVwY3lCd2IyeDVabWxzYkZ4dVpuVnVZM1JwYjI0Z2FYTW9ZU3dnWWlrZ2UxeHVJQ0JwWmlBb1lTQWhQVDBnWVNrZ2UxeHVJQ0FnSUM4dklFNWhUbHh1SUNBZ0lISmxkSFZ5YmlCaUlDRTlQU0JpTzF4dUlDQjlYRzRnSUdsbUlDaGhJRDA5UFNBd0lDWW1JR0lnUFQwOUlEQXBJSHRjYmlBZ0lDQXZMeUFyTFRCY2JpQWdJQ0J5WlhSMWNtNGdNU0F2SUdFZ1BUMDlJREVnTHlCaU8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCaElEMDlQU0JpTzF4dWZWeHVYRzR2S2lwY2JpQXFJRWRwZG1WdUlHRnVJR1ZzWlcxbGJuUXNJR05vWldOcklHbG1JR2wwY3lCd2NtOXdjeUJvWVhabElHSmxaVzRnYlhWMFlYUmxaQ0J6YVc1alpTQmxiR1Z0Wlc1MFhHNGdLaUJqY21WaGRHbHZiaUFvYjNJZ2RHaGxJR3hoYzNRZ1kyRnNiQ0IwYnlCMGFHbHpJR1oxYm1OMGFXOXVLUzRnU1c0Z2NHRnlkR2xqZFd4aGNpd2dZMmhsWTJzZ2FXWWdZVzU1WEc0Z0tpQnVaWGNnY0hKdmNITWdhR0YyWlNCaVpXVnVJR0ZrWkdWa0xDQjNhR2xqYUNCM1pTQmpZVzRuZENCa2FYSmxZM1JzZVNCallYUmphQ0JpZVNCa1pXWnBibWx1WnlCM1lYSnVhVzVuWEc0Z0tpQndjbTl3WlhKMGFXVnpJRzl1SUhSb1pTQndjbTl3Y3lCdlltcGxZM1F1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHVnNaVzFsYm5SY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWTJobFkydEJibVJYWVhKdVJtOXlUWFYwWVhSbFpGQnliM0J6S0dWc1pXMWxiblFwSUh0Y2JpQWdhV1lnS0NGbGJHVnRaVzUwTGw5emRHOXlaU2tnZTF4dUlDQWdJQzh2SUVWc1pXMWxiblFnZDJGeklHTnlaV0YwWldRZ2RYTnBibWNnWUc1bGR5QlNaV0ZqZEVWc1pXMWxiblJnSUdScGNtVmpkR3g1SUc5eUlIZHBkR2hjYmlBZ0lDQXZMeUJnVW1WaFkzUkZiR1Z0Wlc1MExtTnlaV0YwWlVWc1pXMWxiblJnT3lCemEybHdJRzExZEdGMGFXOXVJR05vWldOcmFXNW5YRzRnSUNBZ2NtVjBkWEp1TzF4dUlDQjlYRzVjYmlBZ2RtRnlJRzl5YVdkcGJtRnNVSEp2Y0hNZ1BTQmxiR1Z0Wlc1MExsOXpkRzl5WlM1dmNtbG5hVzVoYkZCeWIzQnpPMXh1SUNCMllYSWdjSEp2Y0hNZ1BTQmxiR1Z0Wlc1MExuQnliM0J6TzF4dVhHNGdJR1p2Y2lBb2RtRnlJSEJ5YjNCT1lXMWxJR2x1SUhCeWIzQnpLU0I3WEc0Z0lDQWdhV1lnS0hCeWIzQnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JPWVcxbEtTa2dlMXh1SUNBZ0lDQWdhV1lnS0NGdmNtbG5hVzVoYkZCeWIzQnpMbWhoYzA5M2JsQnliM0JsY25SNUtIQnliM0JPWVcxbEtTQjhmRnh1SUNBZ0lDQWdJQ0FnSUNGcGN5aHZjbWxuYVc1aGJGQnliM0J6VzNCeWIzQk9ZVzFsWFN3Z2NISnZjSE5iY0hKdmNFNWhiV1ZkS1NrZ2UxeHVJQ0FnSUNBZ0lDQjNZWEp1Um05eVVISnZjSE5OZFhSaGRHbHZiaWh3Y205d1RtRnRaU3dnWld4bGJXVnVkQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0x5OGdRMjl3ZVNCdmRtVnlJSFJvWlNCdVpYY2dkbUZzZFdVZ2MyOGdkR2hoZENCMGFHVWdkSGR2SUhCeWIzQnpJRzlpYW1WamRITWdiV0YwWTJnZ1lXZGhhVzVjYmlBZ0lDQWdJQ0FnYjNKcFoybHVZV3hRY205d2MxdHdjbTl3VG1GdFpWMGdQU0J3Y205d2MxdHdjbTl3VG1GdFpWMDdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dSMmwyWlc0Z1lXNGdaV3hsYldWdWRDd2dkbUZzYVdSaGRHVWdkR2hoZENCcGRITWdjSEp2Y0hNZ1ptOXNiRzkzSUhSb1pTQndjbTl3Vkhsd1pYTWdaR1ZtYVc1cGRHbHZiaXhjYmlBcUlIQnliM1pwWkdWa0lHSjVJSFJvWlNCMGVYQmxMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdVbVZoWTNSRmJHVnRaVzUwZlNCbGJHVnRaVzUwWEc0Z0tpOWNibVoxYm1OMGFXOXVJSFpoYkdsa1lYUmxVSEp2Y0ZSNWNHVnpLR1ZzWlcxbGJuUXBJSHRjYmlBZ2FXWWdLR1ZzWlcxbGJuUXVkSGx3WlNBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnTHk4Z1ZHaHBjeUJvWVhNZ1lXeHlaV0ZrZVNCM1lYSnVaV1F1SUVSdmJpZDBJSFJvY205M0xseHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0F2THlCRmVIUnlZV04wSUhSb1pTQmpiMjF3YjI1bGJuUWdZMnhoYzNNZ1puSnZiU0IwYUdVZ1pXeGxiV1Z1ZEM0Z1EyOXVkbVZ5ZEhNZ2MzUnlhVzVuSUhSNWNHVnpYRzRnSUM4dklIUnZJR0VnWTI5dGNHOXphWFJsSUdOc1lYTnpJSGRvYVdOb0lHMWhlU0JvWVhabElIQnliM0JVZVhCbGN5NWNiaUFnTHk4Z1ZFOUVUem9nVm1Gc2FXUmhkR2x1WnlCaElITjBjbWx1WnlkeklIQnliM0JVZVhCbGN5QnBjeUJ1YjNRZ1pHVmpiM1Z3YkdWa0lHWnliMjBnZEdobFhHNGdJQzh2SUhKbGJtUmxjbWx1WnlCMFlYSm5aWFFnZDJocFkyZ2dhWE1nY0hKdllteGxiV0YwYVdNdVhHNGdJSFpoY2lCamIyMXdiMjVsYm5SRGJHRnpjeUE5SUZKbFlXTjBUbUYwYVhabFEyOXRjRzl1Wlc1MExtZGxkRU52YlhCdmJtVnVkRU5zWVhOelJtOXlSV3hsYldWdWRDaGNiaUFnSUNCbGJHVnRaVzUwWEc0Z0lDazdYRzRnSUhaaGNpQnVZVzFsSUQwZ1kyOXRjRzl1Wlc1MFEyeGhjM011WkdsemNHeGhlVTVoYldVZ2ZId2dZMjl0Y0c5dVpXNTBRMnhoYzNNdWJtRnRaVHRjYmlBZ2FXWWdLR052YlhCdmJtVnVkRU5zWVhOekxuQnliM0JVZVhCbGN5a2dlMXh1SUNBZ0lHTm9aV05yVUhKdmNGUjVjR1Z6S0Z4dUlDQWdJQ0FnYm1GdFpTeGNiaUFnSUNBZ0lHTnZiWEJ2Ym1WdWRFTnNZWE56TG5CeWIzQlVlWEJsY3l4Y2JpQWdJQ0FnSUdWc1pXMWxiblF1Y0hKdmNITXNYRzRnSUNBZ0lDQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjV6TG5CeWIzQmNiaUFnSUNBcE8xeHVJQ0I5WEc0Z0lHbG1JQ2gwZVhCbGIyWWdZMjl0Y0c5dVpXNTBRMnhoYzNNdVoyVjBSR1ZtWVhWc2RGQnliM0J6SUQwOVBTQW5ablZ1WTNScGIyNG5LU0I3WEc0Z0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lIZGhjbTVwYm1jb1hHNGdJQ0FnSUNCamIyMXdiMjVsYm5SRGJHRnpjeTVuWlhSRVpXWmhkV3gwVUhKdmNITXVhWE5TWldGamRFTnNZWE56UVhCd2NtOTJaV1FzWEc0Z0lDQWdJQ0FuWjJWMFJHVm1ZWFZzZEZCeWIzQnpJR2x6SUc5dWJIa2dkWE5sWkNCdmJpQmpiR0Z6YzJsaklGSmxZV04wTG1OeVpXRjBaVU5zWVhOeklDY2dLMXh1SUNBZ0lDQWdKMlJsWm1sdWFYUnBiMjV6TGlCVmMyVWdZU0J6ZEdGMGFXTWdjSEp2Y0dWeWRIa2dibUZ0WldRZ1lHUmxabUYxYkhSUWNtOXdjMkFnYVc1emRHVmhaQzRuWEc0Z0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNCOVhHNTlYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0lnUFNCN1hHNWNiaUFnWTJobFkydEJibVJYWVhKdVJtOXlUWFYwWVhSbFpGQnliM0J6T2lCamFHVmphMEZ1WkZkaGNtNUdiM0pOZFhSaGRHVmtVSEp2Y0hNc1hHNWNiaUFnWTNKbFlYUmxSV3hsYldWdWREb2dablZ1WTNScGIyNG9kSGx3WlN3Z2NISnZjSE1zSUdOb2FXeGtjbVZ1S1NCN1hHNGdJQ0FnTHk4Z1YyVWdkMkZ5YmlCcGJpQjBhR2x6SUdOaGMyVWdZblYwSUdSdmJpZDBJSFJvY205M0xpQlhaU0JsZUhCbFkzUWdkR2hsSUdWc1pXMWxiblFnWTNKbFlYUnBiMjRnZEc5Y2JpQWdJQ0F2THlCemRXTmpaV1ZrSUdGdVpDQjBhR1Z5WlNCM2FXeHNJR3hwYTJWc2VTQmlaU0JsY25KdmNuTWdhVzRnY21WdVpHVnlMbHh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnZEhsd1pTQWhQU0J1ZFd4c0xGeHVJQ0FnSUNBZ0oxSmxZV04wTG1OeVpXRjBaVVZzWlcxbGJuUTZJSFI1Y0dVZ2MyaHZkV3hrSUc1dmRDQmlaU0J1ZFd4c0lHOXlJSFZ1WkdWbWFXNWxaQzRnU1hRZ2MyaHZkV3hrSUNjZ0sxeHVJQ0FnSUNBZ0lDQW5ZbVVnWVNCemRISnBibWNnS0dadmNpQkVUMDBnWld4bGJXVnVkSE1wSUc5eUlHRWdVbVZoWTNSRGJHRnpjeUFvWm05eUlHTnZiWEJ2YzJsMFpTQW5JQ3RjYmlBZ0lDQWdJQ0FnSjJOdmJYQnZibVZ1ZEhNcExpZGNiaUFnSUNBcElEb2diblZzYkNrN1hHNWNiaUFnSUNCMllYSWdaV3hsYldWdWRDQTlJRkpsWVdOMFJXeGxiV1Z1ZEM1amNtVmhkR1ZGYkdWdFpXNTBMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNWNiaUFnSUNBdkx5QlVhR1VnY21WemRXeDBJR05oYmlCaVpTQnVkV3hzYVhOb0lHbG1JR0VnYlc5amF5QnZjaUJoSUdOMWMzUnZiU0JtZFc1amRHbHZiaUJwY3lCMWMyVmtMbHh1SUNBZ0lDOHZJRlJQUkU4NklFUnliM0FnZEdocGN5QjNhR1Z1SUhSb1pYTmxJR0Z5WlNCdWJ5QnNiMjVuWlhJZ1lXeHNiM2RsWkNCaGN5QjBhR1VnZEhsd1pTQmhjbWQxYldWdWRDNWNiaUFnSUNCcFppQW9aV3hsYldWdWRDQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1pXeGxiV1Z1ZER0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01qc2dhU0E4SUdGeVozVnRaVzUwY3k1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdkbUZzYVdSaGRHVkRhR2xzWkV0bGVYTW9ZWEpuZFcxbGJuUnpXMmxkTENCMGVYQmxLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjJZV3hwWkdGMFpWQnliM0JVZVhCbGN5aGxiR1Z0Wlc1MEtUdGNibHh1SUNBZ0lISmxkSFZ5YmlCbGJHVnRaVzUwTzF4dUlDQjlMRnh1WEc0Z0lHTnlaV0YwWlVaaFkzUnZjbms2SUdaMWJtTjBhVzl1S0hSNWNHVXBJSHRjYmlBZ0lDQjJZWElnZG1Gc2FXUmhkR1ZrUm1GamRHOXllU0E5SUZKbFlXTjBSV3hsYldWdWRGWmhiR2xrWVhSdmNpNWpjbVZoZEdWRmJHVnRaVzUwTG1KcGJtUW9YRzRnSUNBZ0lDQnVkV3hzTEZ4dUlDQWdJQ0FnZEhsd1pWeHVJQ0FnSUNrN1hHNGdJQ0FnTHk4Z1RHVm5ZV041SUdodmIyc2dWRTlFVHpvZ1YyRnliaUJwWmlCMGFHbHpJR2x6SUdGalkyVnpjMlZrWEc0Z0lDQWdkbUZzYVdSaGRHVmtSbUZqZEc5eWVTNTBlWEJsSUQwZ2RIbHdaVHRjYmx4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lFOWlhbVZqZEM1a1pXWnBibVZRY205d1pYSjBlU2hjYmlBZ0lDQWdJQ0FnSUNCMllXeHBaR0YwWldSR1lXTjBiM0o1TEZ4dUlDQWdJQ0FnSUNBZ0lDZDBlWEJsSnl4Y2JpQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR2RsZERvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdaaGJITmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2RHWVdOMGIzSjVMblI1Y0dVZ2FYTWdaR1Z3Y21WallYUmxaQzRnUVdOalpYTnpJSFJvWlNCamJHRnpjeUJrYVhKbFkzUnNlU0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBblltVm1iM0psSUhCaGMzTnBibWNnYVhRZ2RHOGdZM0psWVhSbFJtRmpkRzl5ZVM0blhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnVDJKcVpXTjBMbVJsWm1sdVpWQnliM0JsY25SNUtIUm9hWE1zSUNkMGVYQmxKeXdnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGJIVmxPaUIwZVhCbFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEhsd1pUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5SUdOaGRHTm9JQ2g0S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRWxGSUhkcGJHd2dabUZwYkNCdmJpQmtaV1pwYm1WUWNtOXdaWEowZVNBb1pYTTFMWE5vYVcwdmMyaGhiU0IwYjI4cFhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNWNiaUFnSUNCeVpYUjFjbTRnZG1Gc2FXUmhkR1ZrUm1GamRHOXllVHRjYmlBZ2ZTeGNibHh1SUNCamJHOXVaVVZzWlcxbGJuUTZJR1oxYm1OMGFXOXVLR1ZzWlcxbGJuUXNJSEJ5YjNCekxDQmphR2xzWkhKbGJpa2dlMXh1SUNBZ0lIWmhjaUJ1WlhkRmJHVnRaVzUwSUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU5zYjI1bFJXeGxiV1Z1ZEM1aGNIQnNlU2gwYUdsekxDQmhjbWQxYldWdWRITXBPMXh1SUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0F5T3lCcElEd2dZWEpuZFcxbGJuUnpMbXhsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCMllXeHBaR0YwWlVOb2FXeGtTMlY1Y3loaGNtZDFiV1Z1ZEhOYmFWMHNJRzVsZDBWc1pXMWxiblF1ZEhsd1pTazdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGJHbGtZWFJsVUhKdmNGUjVjR1Z6S0c1bGQwVnNaVzFsYm5RcE8xeHVJQ0FnSUhKbGRIVnliaUJ1WlhkRmJHVnRaVzUwTzF4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RW1wdHlDb21wb25lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbnZhciBjb21wb25lbnQ7XG4vLyBUaGlzIHJlZ2lzdHJ5IGtlZXBzIHRyYWNrIG9mIHRoZSBSZWFjdCBJRHMgb2YgdGhlIGNvbXBvbmVudHMgdGhhdCByZW5kZXJlZCB0b1xuLy8gYG51bGxgIChpbiByZWFsaXR5IGEgcGxhY2Vob2xkZXIgc3VjaCBhcyBgbm9zY3JpcHRgKVxudmFyIG51bGxDb21wb25lbnRJRHNSZWdpc3RyeSA9IHt9O1xuXG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudEluamVjdGlvbiA9IHtcbiAgaW5qZWN0RW1wdHlDb21wb25lbnQ6IGZ1bmN0aW9uKGVtcHR5Q29tcG9uZW50KSB7XG4gICAgY29tcG9uZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkoZW1wdHlDb21wb25lbnQpO1xuICB9XG59O1xuXG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudFR5cGUgPSBmdW5jdGlvbigpIHt9O1xuUmVhY3RFbXB0eUNvbXBvbmVudFR5cGUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQodGhpcyk7XG4gIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBydW4gdGhlc2UgbWV0aG9kcyBpbiB0aGUgY29ycmVjdCBvcmRlciwgd2Ugc2hvdWxkbid0XG4gIC8vIG5lZWQgdGhpcyBjaGVjay4gV2UncmUgZ29pbmcgdG8gYXNzdW1lIGlmIHdlJ3JlIGhlcmUgaXQgbWVhbnMgd2UgcmFuXG4gIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGFscmVhZHkgc28gdGhlcmUgaXMgbm8gaW50ZXJuYWwgaW5zdGFuY2UgKGl0IGdldHNcbiAgLy8gcmVtb3ZlZCBhcyBwYXJ0IG9mIHRoZSB1bm1vdW50aW5nIHByb2Nlc3MpLlxuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVnaXN0ZXJOdWxsQ29tcG9uZW50SUQoaW50ZXJuYWxJbnN0YW5jZS5fcm9vdE5vZGVJRCk7XG59O1xuUmVhY3RFbXB0eUNvbXBvbmVudFR5cGUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQodGhpcyk7XG4gIC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjaGVjay4gU2VlIFRPRE8gaW4gY29tcG9uZW50RGlkTW91bnQuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBkZXJlZ2lzdGVyTnVsbENvbXBvbmVudElEKGludGVybmFsSW5zdGFuY2UuX3Jvb3ROb2RlSUQpO1xufTtcblJlYWN0RW1wdHlDb21wb25lbnRUeXBlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBjb21wb25lbnQsXG4gICAgJ1RyeWluZyB0byByZXR1cm4gbnVsbCBmcm9tIGEgcmVuZGVyLCBidXQgbm8gbnVsbCBwbGFjZWhvbGRlciBjb21wb25lbnQgJyArXG4gICAgJ3dhcyBpbmplY3RlZC4nXG4gICkgOiBpbnZhcmlhbnQoY29tcG9uZW50KSk7XG4gIHJldHVybiBjb21wb25lbnQoKTtcbn07XG5cbnZhciBlbXB0eUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudChSZWFjdEVtcHR5Q29tcG9uZW50VHlwZSk7XG5cbi8qKlxuICogTWFyayB0aGUgY29tcG9uZW50IGFzIGhhdmluZyByZW5kZXJlZCB0byBudWxsLlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIENvbXBvbmVudCdzIGBfcm9vdE5vZGVJRGAuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyTnVsbENvbXBvbmVudElEKGlkKSB7XG4gIG51bGxDb21wb25lbnRJRHNSZWdpc3RyeVtpZF0gPSB0cnVlO1xufVxuXG4vKipcbiAqIFVubWFyayB0aGUgY29tcG9uZW50IGFzIGhhdmluZyByZW5kZXJlZCB0byBudWxsOiBpdCByZW5kZXJzIHRvIHNvbWV0aGluZyBub3cuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQ29tcG9uZW50J3MgYF9yb290Tm9kZUlEYC5cbiAqL1xuZnVuY3Rpb24gZGVyZWdpc3Rlck51bGxDb21wb25lbnRJRChpZCkge1xuICBkZWxldGUgbnVsbENvbXBvbmVudElEc1JlZ2lzdHJ5W2lkXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgQ29tcG9uZW50J3MgYF9yb290Tm9kZUlEYC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBpcyByZW5kZXJlZCB0byBudWxsLlxuICovXG5mdW5jdGlvbiBpc051bGxDb21wb25lbnRJRChpZCkge1xuICByZXR1cm4gISFudWxsQ29tcG9uZW50SURzUmVnaXN0cnlbaWRdO1xufVxuXG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudCA9IHtcbiAgZW1wdHlFbGVtZW50OiBlbXB0eUVsZW1lbnQsXG4gIGluamVjdGlvbjogUmVhY3RFbXB0eUNvbXBvbmVudEluamVjdGlvbixcbiAgaXNOdWxsQ29tcG9uZW50SUQ6IGlzTnVsbENvbXBvbmVudElEXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RW1wdHlDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TkMweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUZKbFlXTjBSVzF3ZEhsRGIyMXdiMjVsYm5SY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUkpibk4wWVc1alpVMWhjQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wU1c1emRHRnVZMlZOWVhCY0lpazdYRzVjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYm5aaGNpQmpiMjF3YjI1bGJuUTdYRzR2THlCVWFHbHpJSEpsWjJsemRISjVJR3RsWlhCeklIUnlZV05ySUc5bUlIUm9aU0JTWldGamRDQkpSSE1nYjJZZ2RHaGxJR052YlhCdmJtVnVkSE1nZEdoaGRDQnlaVzVrWlhKbFpDQjBiMXh1THk4Z1lHNTFiR3hnSUNocGJpQnlaV0ZzYVhSNUlHRWdjR3hoWTJWb2IyeGtaWElnYzNWamFDQmhjeUJnYm05elkzSnBjSFJnS1Z4dWRtRnlJRzUxYkd4RGIyMXdiMjVsYm5SSlJITlNaV2RwYzNSeWVTQTlJSHQ5TzF4dVhHNTJZWElnVW1WaFkzUkZiWEIwZVVOdmJYQnZibVZ1ZEVsdWFtVmpkR2x2YmlBOUlIdGNiaUFnYVc1cVpXTjBSVzF3ZEhsRGIyMXdiMjVsYm5RNklHWjFibU4wYVc5dUtHVnRjSFI1UTI5dGNHOXVaVzUwS1NCN1hHNGdJQ0FnWTI5dGNHOXVaVzUwSUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVWmhZM1J2Y25rb1pXMXdkSGxEYjIxd2IyNWxiblFwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnVW1WaFkzUkZiWEIwZVVOdmJYQnZibVZ1ZEZSNWNHVWdQU0JtZFc1amRHbHZiaWdwSUh0OU8xeHVVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRlI1Y0dVdWNISnZkRzkwZVhCbExtTnZiWEJ2Ym1WdWRFUnBaRTF2ZFc1MElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUJwYm5SbGNtNWhiRWx1YzNSaGJtTmxJRDBnVW1WaFkzUkpibk4wWVc1alpVMWhjQzVuWlhRb2RHaHBjeWs3WEc0Z0lDOHZJRlJQUkU4NklFMWhhMlVnYzNWeVpTQjNaU0J5ZFc0Z2RHaGxjMlVnYldWMGFHOWtjeUJwYmlCMGFHVWdZMjl5Y21WamRDQnZjbVJsY2l3Z2QyVWdjMmh2ZFd4a2JpZDBYRzRnSUM4dklHNWxaV1FnZEdocGN5QmphR1ZqYXk0Z1YyVW5jbVVnWjI5cGJtY2dkRzhnWVhOemRXMWxJR2xtSUhkbEozSmxJR2hsY21VZ2FYUWdiV1ZoYm5NZ2QyVWdjbUZ1WEc0Z0lDOHZJR052YlhCdmJtVnVkRmRwYkd4VmJtMXZkVzUwSUdGc2NtVmhaSGtnYzI4Z2RHaGxjbVVnYVhNZ2JtOGdhVzUwWlhKdVlXd2dhVzV6ZEdGdVkyVWdLR2wwSUdkbGRITmNiaUFnTHk4Z2NtVnRiM1psWkNCaGN5QndZWEowSUc5bUlIUm9aU0IxYm0xdmRXNTBhVzVuSUhCeWIyTmxjM01wTGx4dUlDQnBaaUFvSVdsdWRHVnlibUZzU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0J5WlhSMWNtNDdYRzRnSUgxY2JpQWdjbVZuYVhOMFpYSk9kV3hzUTI5dGNHOXVaVzUwU1VRb2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmNtOXZkRTV2WkdWSlJDazdYRzU5TzF4dVVtVmhZM1JGYlhCMGVVTnZiWEJ2Ym1WdWRGUjVjR1V1Y0hKdmRHOTBlWEJsTG1OdmJYQnZibVZ1ZEZkcGJHeFZibTF2ZFc1MElEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lIWmhjaUJwYm5SbGNtNWhiRWx1YzNSaGJtTmxJRDBnVW1WaFkzUkpibk4wWVc1alpVMWhjQzVuWlhRb2RHaHBjeWs3WEc0Z0lDOHZJRlJQUkU4NklFZGxkQ0J5YVdRZ2IyWWdkR2hwY3lCamFHVmpheTRnVTJWbElGUlBSRThnYVc0Z1kyOXRjRzl1Wlc1MFJHbGtUVzkxYm5RdVhHNGdJR2xtSUNnaGFXNTBaWEp1WVd4SmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUhKbGRIVnlianRjYmlBZ2ZWeHVJQ0JrWlhKbFoybHpkR1Z5VG5Wc2JFTnZiWEJ2Ym1WdWRFbEVLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYM0p2YjNST2IyUmxTVVFwTzF4dWZUdGNibEpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblJVZVhCbExuQnliM1J2ZEhsd1pTNXlaVzVrWlhJZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0JqYjIxd2IyNWxiblFzWEc0Z0lDQWdKMVJ5ZVdsdVp5QjBieUJ5WlhSMWNtNGdiblZzYkNCbWNtOXRJR0VnY21WdVpHVnlMQ0JpZFhRZ2JtOGdiblZzYkNCd2JHRmpaV2h2YkdSbGNpQmpiMjF3YjI1bGJuUWdKeUFyWEc0Z0lDQWdKM2RoY3lCcGJtcGxZM1JsWkM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1kyOXRjRzl1Wlc1MEtTazdYRzRnSUhKbGRIVnliaUJqYjIxd2IyNWxiblFvS1R0Y2JuMDdYRzVjYm5aaGNpQmxiWEIwZVVWc1pXMWxiblFnUFNCU1pXRmpkRVZzWlcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENoU1pXRmpkRVZ0Y0hSNVEyOXRjRzl1Wlc1MFZIbHdaU2s3WEc1Y2JpOHFLbHh1SUNvZ1RXRnlheUIwYUdVZ1kyOXRjRzl1Wlc1MElHRnpJR2hoZG1sdVp5QnlaVzVrWlhKbFpDQjBieUJ1ZFd4c0xseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR2xrSUVOdmJYQnZibVZ1ZENkeklHQmZjbTl2ZEU1dlpHVkpSR0F1WEc0Z0tpOWNibVoxYm1OMGFXOXVJSEpsWjJsemRHVnlUblZzYkVOdmJYQnZibVZ1ZEVsRUtHbGtLU0I3WEc0Z0lHNTFiR3hEYjIxd2IyNWxiblJKUkhOU1pXZHBjM1J5ZVZ0cFpGMGdQU0IwY25WbE8xeHVmVnh1WEc0dktpcGNiaUFxSUZWdWJXRnlheUIwYUdVZ1kyOXRjRzl1Wlc1MElHRnpJR2hoZG1sdVp5QnlaVzVrWlhKbFpDQjBieUJ1ZFd4c09pQnBkQ0J5Wlc1a1pYSnpJSFJ2SUhOdmJXVjBhR2x1WnlCdWIzY3VYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1EyOXRjRzl1Wlc1MEozTWdZRjl5YjI5MFRtOWtaVWxFWUM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWkdWeVpXZHBjM1JsY2s1MWJHeERiMjF3YjI1bGJuUkpSQ2hwWkNrZ2UxeHVJQ0JrWld4bGRHVWdiblZzYkVOdmJYQnZibVZ1ZEVsRWMxSmxaMmx6ZEhKNVcybGtYVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2FXUWdRMjl0Y0c5dVpXNTBKM01nWUY5eWIyOTBUbTlrWlVsRVlDNWNiaUFxSUVCeVpYUjFjbTRnZTJKdmIyeGxZVzU5SUZSeWRXVWdhV1lnZEdobElHTnZiWEJ2Ym1WdWRDQnBjeUJ5Wlc1a1pYSmxaQ0IwYnlCdWRXeHNMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQnBjMDUxYkd4RGIyMXdiMjVsYm5SSlJDaHBaQ2tnZTF4dUlDQnlaWFIxY200Z0lTRnVkV3hzUTI5dGNHOXVaVzUwU1VSelVtVm5hWE4wY25sYmFXUmRPMXh1ZlZ4dVhHNTJZWElnVW1WaFkzUkZiWEIwZVVOdmJYQnZibVZ1ZENBOUlIdGNiaUFnWlcxd2RIbEZiR1Z0Wlc1ME9pQmxiWEIwZVVWc1pXMWxiblFzWEc0Z0lHbHVhbVZqZEdsdmJqb2dVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRWx1YW1WamRHbHZiaXhjYmlBZ2FYTk9kV3hzUTI5dGNHOXVaVzUwU1VRNklHbHpUblZzYkVOdmJYQnZibVZ1ZEVsRVhHNTlPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBSVzF3ZEhsRGIyMXdiMjVsYm5RN1hHNGlYWDA9IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RXJyb3JVdGlsc1xuICogQHR5cGVjaGVja3NcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIFJlYWN0RXJyb3JVdGlscyA9IHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBndWFyZGVkIHZlcnNpb24gb2YgYSBmdW5jdGlvbi4gVGhpcyBpcyBzdXBwb3NlZCB0byBtYWtlIGRlYnVnZ2luZ1xuICAgKiBvZiBldmVudCBoYW5kbGVycyBlYXNpZXIuIFRvIGFpZCBkZWJ1Z2dpbmcgd2l0aCB0aGUgYnJvd3NlcidzIGRlYnVnZ2VyLFxuICAgKiB0aGlzIGN1cnJlbnRseSBzaW1wbHkgcmV0dXJucyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmMgRnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGd1YXJkXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICAgKi9cbiAgZ3VhcmQ6IGZ1bmN0aW9uKGZ1bmMsIG5hbWUpIHtcbiAgICByZXR1cm4gZnVuYztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVycm9yVXRpbHM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RFdmVudEVtaXR0ZXJNaXhpblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZShcIi4vRXZlbnRQbHVnaW5IdWJcIik7XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50UXVldWVJbkJhdGNoKGV2ZW50cykge1xuICBFdmVudFBsdWdpbkh1Yi5lbnF1ZXVlRXZlbnRzKGV2ZW50cyk7XG4gIEV2ZW50UGx1Z2luSHViLnByb2Nlc3NFdmVudFF1ZXVlKCk7XG59XG5cbnZhciBSZWFjdEV2ZW50RW1pdHRlck1peGluID0ge1xuXG4gIC8qKlxuICAgKiBTdHJlYW1zIGEgZmlyZWQgdG9wLWxldmVsIGV2ZW50IHRvIGBFdmVudFBsdWdpbkh1YmAgd2hlcmUgcGx1Z2lucyBoYXZlIHRoZVxuICAgKiBvcHBvcnR1bml0eSB0byBjcmVhdGUgYFJlYWN0RXZlbnRgcyB0byBiZSBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgZW52aXJvbm1lbnQgZXZlbnQuXG4gICAqL1xuICBoYW5kbGVUb3BMZXZlbDogZnVuY3Rpb24oXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICB0b3BMZXZlbFRhcmdldCxcbiAgICAgIHRvcExldmVsVGFyZ2V0SUQsXG4gICAgICBuYXRpdmVFdmVudCkge1xuICAgIHZhciBldmVudHMgPSBFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApO1xuXG4gICAgcnVuRXZlbnRRdWV1ZUluQmF0Y2goZXZlbnRzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEV2ZW50RW1pdHRlck1peGluO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0RXZlbnRMaXN0ZW5lclxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudExpc3RlbmVyID0gcmVxdWlyZShcIi4vRXZlbnRMaXN0ZW5lclwiKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZShcIi4vUmVhY3RNb3VudFwiKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKFwiLi9SZWFjdFVwZGF0ZXNcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRUYXJnZXRcIik7XG52YXIgZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24gPSByZXF1aXJlKFwiLi9nZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvblwiKTtcblxuLyoqXG4gKiBGaW5kcyB0aGUgcGFyZW50IFJlYWN0IGNvbXBvbmVudCBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHsqfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRXZlbnRUYXJnZXR9IFBhcmVudCBjb250YWluZXIsIG9yIGBudWxsYCBpZiB0aGUgc3BlY2lmaWVkIG5vZGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IG5lc3RlZC5cbiAqL1xuZnVuY3Rpb24gZmluZFBhcmVudChub2RlKSB7XG4gIC8vIFRPRE86IEl0IG1heSBiZSBhIGdvb2QgaWRlYSB0byBjYWNoZSB0aGlzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgRE9NXG4gIC8vIHRyYXZlcnNhbCwgYnV0IGNhY2hpbmcgaXMgZGlmZmljdWx0IHRvIGRvIGNvcnJlY3RseSB3aXRob3V0IHVzaW5nIGFcbiAgLy8gbXV0YXRpb24gb2JzZXJ2ZXIgdG8gbGlzdGVuIGZvciBhbGwgRE9NIGNoYW5nZXMuXG4gIHZhciBub2RlSUQgPSBSZWFjdE1vdW50LmdldElEKG5vZGUpO1xuICB2YXIgcm9vdElEID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuZ2V0UmVhY3RSb290SURGcm9tTm9kZUlEKG5vZGVJRCk7XG4gIHZhciBjb250YWluZXIgPSBSZWFjdE1vdW50LmZpbmRSZWFjdENvbnRhaW5lckZvcklEKHJvb3RJRCk7XG4gIHZhciBwYXJlbnQgPSBSZWFjdE1vdW50LmdldEZpcnN0UmVhY3RET00oY29udGFpbmVyKTtcbiAgcmV0dXJuIHBhcmVudDtcbn1cblxuLy8gVXNlZCB0byBzdG9yZSBhbmNlc3RvciBoaWVyYXJjaHkgaW4gdG9wIGxldmVsIGNhbGxiYWNrXG5mdW5jdGlvbiBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICB0aGlzLnRvcExldmVsVHlwZSA9IHRvcExldmVsVHlwZTtcbiAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICB0aGlzLmFuY2VzdG9ycyA9IFtdO1xufVxuYXNzaWduKFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZy5wcm90b3R5cGUsIHtcbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50b3BMZXZlbFR5cGUgPSBudWxsO1xuICAgIHRoaXMubmF0aXZlRXZlbnQgPSBudWxsO1xuICAgIHRoaXMuYW5jZXN0b3JzLmxlbmd0aCA9IDA7XG4gIH1cbn0pO1xuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFxuICBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcsXG4gIFBvb2xlZENsYXNzLnR3b0FyZ3VtZW50UG9vbGVyXG4pO1xuXG5mdW5jdGlvbiBoYW5kbGVUb3BMZXZlbEltcGwoYm9va0tlZXBpbmcpIHtcbiAgdmFyIHRvcExldmVsVGFyZ2V0ID0gUmVhY3RNb3VudC5nZXRGaXJzdFJlYWN0RE9NKFxuICAgIGdldEV2ZW50VGFyZ2V0KGJvb2tLZWVwaW5nLm5hdGl2ZUV2ZW50KVxuICApIHx8IHdpbmRvdztcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGhpZXJhcmNoeSwgaW4gY2FzZSB0aGVyZSdzIGFueSBuZXN0ZWQgY29tcG9uZW50cy5cbiAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBidWlsZCB0aGUgYXJyYXkgb2YgYW5jZXN0b3JzIGJlZm9yZSBjYWxsaW5nIGFueVxuICAvLyBldmVudCBoYW5kbGVycywgYmVjYXVzZSBldmVudCBoYW5kbGVycyBjYW4gbW9kaWZ5IHRoZSBET00sIGxlYWRpbmcgdG9cbiAgLy8gaW5jb25zaXN0ZW5jaWVzIHdpdGggUmVhY3RNb3VudCdzIG5vZGUgY2FjaGUuIFNlZSAjMTEwNS5cbiAgdmFyIGFuY2VzdG9yID0gdG9wTGV2ZWxUYXJnZXQ7XG4gIHdoaWxlIChhbmNlc3Rvcikge1xuICAgIGJvb2tLZWVwaW5nLmFuY2VzdG9ycy5wdXNoKGFuY2VzdG9yKTtcbiAgICBhbmNlc3RvciA9IGZpbmRQYXJlbnQoYW5jZXN0b3IpO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBib29rS2VlcGluZy5hbmNlc3RvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdG9wTGV2ZWxUYXJnZXQgPSBib29rS2VlcGluZy5hbmNlc3RvcnNbaV07XG4gICAgdmFyIHRvcExldmVsVGFyZ2V0SUQgPSBSZWFjdE1vdW50LmdldElEKHRvcExldmVsVGFyZ2V0KSB8fCAnJztcbiAgICBSZWFjdEV2ZW50TGlzdGVuZXIuX2hhbmRsZVRvcExldmVsKFxuICAgICAgYm9va0tlZXBpbmcudG9wTGV2ZWxUeXBlLFxuICAgICAgdG9wTGV2ZWxUYXJnZXQsXG4gICAgICB0b3BMZXZlbFRhcmdldElELFxuICAgICAgYm9va0tlZXBpbmcubmF0aXZlRXZlbnRcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFZhbHVlTW9uaXRvcihjYikge1xuICB2YXIgc2Nyb2xsUG9zaXRpb24gPSBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbih3aW5kb3cpO1xuICBjYihzY3JvbGxQb3NpdGlvbik7XG59XG5cbnZhciBSZWFjdEV2ZW50TGlzdGVuZXIgPSB7XG4gIF9lbmFibGVkOiB0cnVlLFxuICBfaGFuZGxlVG9wTGV2ZWw6IG51bGwsXG5cbiAgV0lORE9XX0hBTkRMRTogRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gd2luZG93IDogbnVsbCxcblxuICBzZXRIYW5kbGVUb3BMZXZlbDogZnVuY3Rpb24oaGFuZGxlVG9wTGV2ZWwpIHtcbiAgICBSZWFjdEV2ZW50TGlzdGVuZXIuX2hhbmRsZVRvcExldmVsID0gaGFuZGxlVG9wTGV2ZWw7XG4gIH0sXG5cbiAgc2V0RW5hYmxlZDogZnVuY3Rpb24oZW5hYmxlZCkge1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZCA9ICEhZW5hYmxlZDtcbiAgfSxcblxuICBpc0VuYWJsZWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBSZWFjdEV2ZW50TGlzdGVuZXIuX2VuYWJsZWQ7XG4gIH0sXG5cblxuICAvKipcbiAgICogVHJhcHMgdG9wLWxldmVsIGV2ZW50cyBieSB1c2luZyBldmVudCBidWJibGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGFuZGxlckJhc2VOYW1lIEV2ZW50IG5hbWUgKGUuZy4gXCJjbGlja1wiKS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGhhbmRsZSBFbGVtZW50IG9uIHdoaWNoIHRvIGF0dGFjaCBsaXN0ZW5lci5cbiAgICogQHJldHVybiB7b2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBhIHJlbW92ZSBmdW5jdGlvbiB3aGljaCB3aWxsIGZvcmNlZnVsbHlcbiAgICogICAgICAgICAgICAgICAgICByZW1vdmUgdGhlIGxpc3RlbmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHRyYXBCdWJibGVkRXZlbnQ6IGZ1bmN0aW9uKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpIHtcbiAgICB2YXIgZWxlbWVudCA9IGhhbmRsZTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5saXN0ZW4oXG4gICAgICBlbGVtZW50LFxuICAgICAgaGFuZGxlckJhc2VOYW1lLFxuICAgICAgUmVhY3RFdmVudExpc3RlbmVyLmRpc3BhdGNoRXZlbnQuYmluZChudWxsLCB0b3BMZXZlbFR5cGUpXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogVHJhcHMgYSB0b3AtbGV2ZWwgZXZlbnQgYnkgdXNpbmcgZXZlbnQgY2FwdHVyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoYW5kbGVyQmFzZU5hbWUgRXZlbnQgbmFtZSAoZS5nLiBcImNsaWNrXCIpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gaGFuZGxlIEVsZW1lbnQgb24gd2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IEFuIG9iamVjdCB3aXRoIGEgcmVtb3ZlIGZ1bmN0aW9uIHdoaWNoIHdpbGwgZm9yY2VmdWxseVxuICAgKiAgICAgICAgICAgICAgICAgIHJlbW92ZSB0aGUgbGlzdGVuZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhcENhcHR1cmVkRXZlbnQ6IGZ1bmN0aW9uKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpIHtcbiAgICB2YXIgZWxlbWVudCA9IGhhbmRsZTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5jYXB0dXJlKFxuICAgICAgZWxlbWVudCxcbiAgICAgIGhhbmRsZXJCYXNlTmFtZSxcbiAgICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5kaXNwYXRjaEV2ZW50LmJpbmQobnVsbCwgdG9wTGV2ZWxUeXBlKVxuICAgICk7XG4gIH0sXG5cbiAgbW9uaXRvclNjcm9sbFZhbHVlOiBmdW5jdGlvbihyZWZyZXNoKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gc2Nyb2xsVmFsdWVNb25pdG9yLmJpbmQobnVsbCwgcmVmcmVzaCk7XG4gICAgRXZlbnRMaXN0ZW5lci5saXN0ZW4od2luZG93LCAnc2Nyb2xsJywgY2FsbGJhY2spO1xuICB9LFxuXG4gIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgICBpZiAoIVJlYWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBib29rS2VlcGluZyA9IFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZy5nZXRQb29sZWQoXG4gICAgICB0b3BMZXZlbFR5cGUsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEV2ZW50IHF1ZXVlIGJlaW5nIHByb2Nlc3NlZCBpbiB0aGUgc2FtZSBjeWNsZSBhbGxvd3NcbiAgICAgIC8vIGBwcmV2ZW50RGVmYXVsdGAuXG4gICAgICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMoaGFuZGxlVG9wTGV2ZWxJbXBsLCBib29rS2VlcGluZyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZy5yZWxlYXNlKGJvb2tLZWVwaW5nKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFdmVudExpc3RlbmVyO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4qIEBwcm92aWRlc01vZHVsZSBSZWFjdEZyYWdtZW50XG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuLyoqXG4gKiBXZSB1c2VkIHRvIGFsbG93IGtleWVkIG9iamVjdHMgdG8gc2VydmUgYXMgYSBjb2xsZWN0aW9uIG9mIFJlYWN0RWxlbWVudHMsXG4gKiBvciBuZXN0ZWQgc2V0cy4gVGhpcyBhbGxvd2VkIHVzIGEgd2F5IHRvIGV4cGxpY2l0bHkga2V5IGEgc2V0IGEgZnJhZ21lbnQgb2ZcbiAqIGNvbXBvbmVudHMuIFRoaXMgaXMgbm93IGJlaW5nIHJlcGxhY2VkIHdpdGggYW4gb3BhcXVlIGRhdGEgc3RydWN0dXJlLlxuICogVGhlIHVwZ3JhZGUgcGF0aCBpcyB0byBjYWxsIFJlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVudCh7IGtleTogdmFsdWUgfSkgdG9cbiAqIGNyZWF0ZSBhIGtleWVkIGZyYWdtZW50LiBUaGUgcmVzdWx0aW5nIGRhdGEgc3RydWN0dXJlIGlzIG9wYXF1ZSwgZm9yIG5vdy5cbiAqL1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHZhciBmcmFnbWVudEtleSA9ICdfcmVhY3RGcmFnbWVudCc7XG4gIHZhciBkaWRXYXJuS2V5ID0gJ19yZWFjdERpZFdhcm4nO1xuICB2YXIgY2FuV2FybkZvclJlYWN0RnJhZ21lbnQgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIC8vIEZlYXR1cmUgdGVzdC4gRG9uJ3QgZXZlbiB0cnkgdG8gaXNzdWUgdGhpcyB3YXJuaW5nIGlmIHdlIGNhbid0IHVzZVxuICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLlxuXG4gICAgdmFyIGR1bW15ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAge30sXG4gICAgICBmcmFnbWVudEtleSxcbiAgICAgIHtlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IHRydWV9XG4gICAgKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgIHt9LFxuICAgICAgJ2tleScsXG4gICAgICB7ZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkdW1teX1cbiAgICApO1xuXG4gICAgY2FuV2FybkZvclJlYWN0RnJhZ21lbnQgPSB0cnVlO1xuICB9IGNhdGNoICh4KSB7IH1cblxuICB2YXIgcHJveHlQcm9wZXJ0eUFjY2Vzc1dpdGhXYXJuaW5nID0gZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICB0aGlzW2RpZFdhcm5LZXldLFxuICAgICAgICAgICdBIFJlYWN0RnJhZ21lbnQgaXMgYW4gb3BhcXVlIHR5cGUuIEFjY2Vzc2luZyBhbnkgb2YgaXRzICcgK1xuICAgICAgICAgICdwcm9wZXJ0aWVzIGlzIGRlcHJlY2F0ZWQuIFBhc3MgaXQgdG8gb25lIG9mIHRoZSBSZWFjdC5DaGlsZHJlbiAnICtcbiAgICAgICAgICAnaGVscGVycy4nXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgdGhpc1tkaWRXYXJuS2V5XSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzW2ZyYWdtZW50S2V5XVtrZXldO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgdGhpc1tkaWRXYXJuS2V5XSxcbiAgICAgICAgICAnQSBSZWFjdEZyYWdtZW50IGlzIGFuIGltbXV0YWJsZSBvcGFxdWUgdHlwZS4gTXV0YXRpbmcgaXRzICcgK1xuICAgICAgICAgICdwcm9wZXJ0aWVzIGlzIGRlcHJlY2F0ZWQuJ1xuICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIHRoaXNbZGlkV2FybktleV0gPSB0cnVlO1xuICAgICAgICB0aGlzW2ZyYWdtZW50S2V5XVtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGlzc3VlZFdhcm5pbmdzID0ge307XG5cbiAgdmFyIGRpZFdhcm5Gb3JGcmFnbWVudCA9IGZ1bmN0aW9uKGZyYWdtZW50KSB7XG4gICAgLy8gV2UgdXNlIHRoZSBrZXlzIGFuZCB0aGUgdHlwZSBvZiB0aGUgdmFsdWUgYXMgYSBoZXVyaXN0aWMgdG8gZGVkdXBlIHRoZVxuICAgIC8vIHdhcm5pbmcgdG8gYXZvaWQgc3BhbW1pbmcgdG9vIG11Y2guXG4gICAgdmFyIGZyYWdtZW50Q2FjaGVLZXkgPSAnJztcbiAgICBmb3IgKHZhciBrZXkgaW4gZnJhZ21lbnQpIHtcbiAgICAgIGZyYWdtZW50Q2FjaGVLZXkgKz0ga2V5ICsgJzonICsgKHR5cGVvZiBmcmFnbWVudFtrZXldKSArICcsJztcbiAgICB9XG4gICAgdmFyIGFscmVhZHlXYXJuZWRPbmNlID0gISFpc3N1ZWRXYXJuaW5nc1tmcmFnbWVudENhY2hlS2V5XTtcbiAgICBpc3N1ZWRXYXJuaW5nc1tmcmFnbWVudENhY2hlS2V5XSA9IHRydWU7XG4gICAgcmV0dXJuIGFscmVhZHlXYXJuZWRPbmNlO1xuICB9O1xufVxuXG52YXIgUmVhY3RGcmFnbWVudCA9IHtcbiAgLy8gV3JhcCBhIGtleWVkIG9iamVjdCBpbiBhbiBvcGFxdWUgcHJveHkgdGhhdCB3YXJucyB5b3UgaWYgeW91IGFjY2VzcyBhbnlcbiAgLy8gb2YgaXRzIHByb3BlcnRpZXMuXG4gIGNyZWF0ZTogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgaWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnIHx8ICFvYmplY3QgfHwgQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICdSZWFjdC5hZGRvbnMuY3JlYXRlRnJhZ21lbnQgb25seSBhY2NlcHRzIGEgc2luZ2xlIG9iamVjdC4nLFxuICAgICAgICAgIG9iamVjdFxuICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9XG4gICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG9iamVjdCkpIHtcbiAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgJ1JlYWN0LmFkZG9ucy5jcmVhdGVGcmFnbWVudCBkb2VzIG5vdCBhY2NlcHQgYSBSZWFjdEVsZW1lbnQgJyArXG4gICAgICAgICAgJ3dpdGhvdXQgYSB3cmFwcGVyIG9iamVjdC4nXG4gICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIGlmIChjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCkge1xuICAgICAgICB2YXIgcHJveHkgPSB7fTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBmcmFnbWVudEtleSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBvYmplY3RcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwgZGlkV2FybktleSwge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIHByb3h5UHJvcGVydHlBY2Nlc3NXaXRoV2FybmluZyhwcm94eSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMocHJveHkpO1xuICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0sXG4gIC8vIEV4dHJhY3QgdGhlIG9yaWdpbmFsIGtleWVkIG9iamVjdCBmcm9tIHRoZSBmcmFnbWVudCBvcGFxdWUgdHlwZS4gV2FybiBpZlxuICAvLyBhIHBsYWluIG9iamVjdCBpcyBwYXNzZWQgaGVyZS5cbiAgZXh0cmFjdDogZnVuY3Rpb24oZnJhZ21lbnQpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBpZiAoY2FuV2FybkZvclJlYWN0RnJhZ21lbnQpIHtcbiAgICAgICAgaWYgKCFmcmFnbWVudFtmcmFnbWVudEtleV0pIHtcbiAgICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgICAgICAgIGRpZFdhcm5Gb3JGcmFnbWVudChmcmFnbWVudCksXG4gICAgICAgICAgICAnQW55IHVzZSBvZiBhIGtleWVkIG9iamVjdCBzaG91bGQgYmUgd3JhcHBlZCBpbiAnICtcbiAgICAgICAgICAgICdSZWFjdC5hZGRvbnMuY3JlYXRlRnJhZ21lbnQob2JqZWN0KSBiZWZvcmUgYmVpbmcgcGFzc2VkIGFzIGEgJyArXG4gICAgICAgICAgICAnY2hpbGQuJ1xuICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZyYWdtZW50W2ZyYWdtZW50S2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9LFxuICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZnJhZ21lbnQgYW5kIGlmIHNvLCBleHRyYWN0IHRoZSBrZXllZCBvYmplY3QuIElmIGl0XG4gIC8vIGlzIGEgZnJhZ21lbnQtbGlrZSBvYmplY3QsIHdhcm4gdGhhdCBpdCBzaG91bGQgYmUgd3JhcHBlZC4gSWdub3JlIGlmIHdlXG4gIC8vIGNhbid0IGRldGVybWluZSB3aGF0IGtpbmQgb2Ygb2JqZWN0IHRoaXMgaXMuXG4gIGV4dHJhY3RJZkZyYWdtZW50OiBmdW5jdGlvbihmcmFnbWVudCkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIGlmIChjYW5XYXJuRm9yUmVhY3RGcmFnbWVudCkge1xuICAgICAgICAvLyBJZiBpdCBpcyB0aGUgb3BhcXVlIHR5cGUsIHJldHVybiB0aGUga2V5ZWQgb2JqZWN0LlxuICAgICAgICBpZiAoZnJhZ21lbnRbZnJhZ21lbnRLZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGZyYWdtZW50W2ZyYWdtZW50S2V5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlcndpc2UsIGNoZWNrIGVhY2ggcHJvcGVydHkgaWYgaXQgaGFzIGFuIGVsZW1lbnQsIGlmIGl0IGRvZXNcbiAgICAgICAgLy8gaXQgaXMgcHJvYmFibHkgbWVhbnQgYXMgYSBmcmFnbWVudCwgc28gd2UgY2FuIHdhcm4gZWFybHkuIERlZmVyLFxuICAgICAgICAvLyB0aGUgd2FybmluZyB0byBleHRyYWN0LlxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZnJhZ21lbnQpIHtcbiAgICAgICAgICBpZiAoZnJhZ21lbnQuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgICBSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoZnJhZ21lbnRba2V5XSkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIGZyYWdtZW50IG9iamVjdCwgd2Ugc2hvdWxkIHByb3ZpZGUgYW5cbiAgICAgICAgICAgIC8vIGVhcmx5IHdhcm5pbmcuXG4gICAgICAgICAgICByZXR1cm4gUmVhY3RGcmFnbWVudC5leHRyYWN0KGZyYWdtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RnJhZ21lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSR2NtRm5iV1Z1ZEM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaW9nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFJuSmhaMjFsYm5SY2Jpb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlGSmxZV04wUld4bGJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRndpS1R0Y2JseHVkbUZ5SUhkaGNtNXBibWNnUFNCeVpYRjFhWEpsS0Z3aUxpOTNZWEp1YVc1blhDSXBPMXh1WEc0dktpcGNiaUFxSUZkbElIVnpaV1FnZEc4Z1lXeHNiM2NnYTJWNVpXUWdiMkpxWldOMGN5QjBieUJ6WlhKMlpTQmhjeUJoSUdOdmJHeGxZM1JwYjI0Z2IyWWdVbVZoWTNSRmJHVnRaVzUwY3l4Y2JpQXFJRzl5SUc1bGMzUmxaQ0J6WlhSekxpQlVhR2x6SUdGc2JHOTNaV1FnZFhNZ1lTQjNZWGtnZEc4Z1pYaHdiR2xqYVhSc2VTQnJaWGtnWVNCelpYUWdZU0JtY21GbmJXVnVkQ0J2Wmx4dUlDb2dZMjl0Y0c5dVpXNTBjeTRnVkdocGN5QnBjeUJ1YjNjZ1ltVnBibWNnY21Wd2JHRmpaV1FnZDJsMGFDQmhiaUJ2Y0dGeGRXVWdaR0YwWVNCemRISjFZM1IxY21VdVhHNGdLaUJVYUdVZ2RYQm5jbUZrWlNCd1lYUm9JR2x6SUhSdklHTmhiR3dnVW1WaFkzUXVZV1JrYjI1ekxtTnlaV0YwWlVaeVlXZHRaVzUwS0hzZ2EyVjVPaUIyWVd4MVpTQjlLU0IwYjF4dUlDb2dZM0psWVhSbElHRWdhMlY1WldRZ1puSmhaMjFsYm5RdUlGUm9aU0J5WlhOMWJIUnBibWNnWkdGMFlTQnpkSEoxWTNSMWNtVWdhWE1nYjNCaGNYVmxMQ0JtYjNJZ2JtOTNMbHh1SUNvdlhHNWNibWxtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ2RtRnlJR1p5WVdkdFpXNTBTMlY1SUQwZ0oxOXlaV0ZqZEVaeVlXZHRaVzUwSnp0Y2JpQWdkbUZ5SUdScFpGZGhjbTVMWlhrZ1BTQW5YM0psWVdOMFJHbGtWMkZ5YmljN1hHNGdJSFpoY2lCallXNVhZWEp1Um05eVVtVmhZM1JHY21GbmJXVnVkQ0E5SUdaaGJITmxPMXh1WEc0Z0lIUnllU0I3WEc0Z0lDQWdMeThnUm1WaGRIVnlaU0IwWlhOMExpQkViMjRuZENCbGRtVnVJSFJ5ZVNCMGJ5QnBjM04xWlNCMGFHbHpJSGRoY201cGJtY2dhV1lnZDJVZ1kyRnVKM1FnZFhObFhHNGdJQ0FnTHk4Z1pXNTFiV1Z5WVdKc1pUb2dabUZzYzJVdVhHNWNiaUFnSUNCMllYSWdaSFZ0YlhrZ1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQXhPMXh1SUNBZ0lIMDdYRzVjYmlBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvWEc0Z0lDQWdJQ0I3ZlN4Y2JpQWdJQ0FnSUdaeVlXZHRaVzUwUzJWNUxGeHVJQ0FnSUNBZ2UyVnVkVzFsY21GaWJHVTZJR1poYkhObExDQjJZV3gxWlRvZ2RISjFaWDFjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0Z4dUlDQWdJQ0FnZTMwc1hHNGdJQ0FnSUNBbmEyVjVKeXhjYmlBZ0lDQWdJSHRsYm5WdFpYSmhZbXhsT2lCMGNuVmxMQ0JuWlhRNklHUjFiVzE1ZlZ4dUlDQWdJQ2s3WEc1Y2JpQWdJQ0JqWVc1WFlYSnVSbTl5VW1WaFkzUkdjbUZuYldWdWRDQTlJSFJ5ZFdVN1hHNGdJSDBnWTJGMFkyZ2dLSGdwSUhzZ2ZWeHVYRzRnSUhaaGNpQndjbTk0ZVZCeWIzQmxjblI1UVdOalpYTnpWMmwwYUZkaGNtNXBibWNnUFNCbWRXNWpkR2x2Ymlodlltb3NJR3RsZVNrZ2UxeHVJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaHZZbW9zSUd0bGVTd2dlMXh1SUNBZ0lDQWdaVzUxYldWeVlXSnNaVG9nZEhKMVpTeGNiaUFnSUNBZ0lHZGxkRG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSUNBZ0lIUm9hWE5iWkdsa1YyRnlia3RsZVYwc1hHNGdJQ0FnSUNBZ0lDQWdKMEVnVW1WaFkzUkdjbUZuYldWdWRDQnBjeUJoYmlCdmNHRnhkV1VnZEhsd1pTNGdRV05qWlhOemFXNW5JR0Z1ZVNCdlppQnBkSE1nSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM0J5YjNCbGNuUnBaWE1nYVhNZ1pHVndjbVZqWVhSbFpDNGdVR0Z6Y3lCcGRDQjBieUJ2Ym1VZ2IyWWdkR2hsSUZKbFlXTjBMa05vYVd4a2NtVnVJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZG9aV3h3WlhKekxpZGNiaUFnSUNBZ0lDQWdLU0E2SUc1MWJHd3BPMXh1SUNBZ0lDQWdJQ0IwYUdselcyUnBaRmRoY201TFpYbGRJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE5iWm5KaFoyMWxiblJMWlhsZFcydGxlVjA3WEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnYzJWME9pQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lDQjBhR2x6VzJScFpGZGhjbTVMWlhsZExGeHVJQ0FnSUNBZ0lDQWdJQ2RCSUZKbFlXTjBSbkpoWjIxbGJuUWdhWE1nWVc0Z2FXMXRkWFJoWW14bElHOXdZWEYxWlNCMGVYQmxMaUJOZFhSaGRHbHVaeUJwZEhNZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSjNCeWIzQmxjblJwWlhNZ2FYTWdaR1Z3Y21WallYUmxaQzRuWEc0Z0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjMXRrYVdSWFlYSnVTMlY1WFNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUhSb2FYTmJabkpoWjIxbGJuUkxaWGxkVzJ0bGVWMGdQU0IyWVd4MVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUtUdGNiaUFnZlR0Y2JseHVJQ0IyWVhJZ2FYTnpkV1ZrVjJGeWJtbHVaM01nUFNCN2ZUdGNibHh1SUNCMllYSWdaR2xrVjJGeWJrWnZja1p5WVdkdFpXNTBJRDBnWm5WdVkzUnBiMjRvWm5KaFoyMWxiblFwSUh0Y2JpQWdJQ0F2THlCWFpTQjFjMlVnZEdobElHdGxlWE1nWVc1a0lIUm9aU0IwZVhCbElHOW1JSFJvWlNCMllXeDFaU0JoY3lCaElHaGxkWEpwYzNScFl5QjBieUJrWldSMWNHVWdkR2hsWEc0Z0lDQWdMeThnZDJGeWJtbHVaeUIwYnlCaGRtOXBaQ0J6Y0dGdGJXbHVaeUIwYjI4Z2JYVmphQzVjYmlBZ0lDQjJZWElnWm5KaFoyMWxiblJEWVdOb1pVdGxlU0E5SUNjbk8xeHVJQ0FnSUdadmNpQW9kbUZ5SUd0bGVTQnBiaUJtY21GbmJXVnVkQ2tnZTF4dUlDQWdJQ0FnWm5KaFoyMWxiblJEWVdOb1pVdGxlU0FyUFNCclpYa2dLeUFuT2ljZ0t5QW9kSGx3Wlc5bUlHWnlZV2R0Wlc1MFcydGxlVjBwSUNzZ0p5d25PMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdZV3h5WldGa2VWZGhjbTVsWkU5dVkyVWdQU0FoSVdsemMzVmxaRmRoY201cGJtZHpXMlp5WVdkdFpXNTBRMkZqYUdWTFpYbGRPMXh1SUNBZ0lHbHpjM1ZsWkZkaGNtNXBibWR6VzJaeVlXZHRaVzUwUTJGamFHVkxaWGxkSUQwZ2RISjFaVHRjYmlBZ0lDQnlaWFIxY200Z1lXeHlaV0ZrZVZkaGNtNWxaRTl1WTJVN1hHNGdJSDA3WEc1OVhHNWNiblpoY2lCU1pXRmpkRVp5WVdkdFpXNTBJRDBnZTF4dUlDQXZMeUJYY21Gd0lHRWdhMlY1WldRZ2IySnFaV04wSUdsdUlHRnVJRzl3WVhGMVpTQndjbTk0ZVNCMGFHRjBJSGRoY201eklIbHZkU0JwWmlCNWIzVWdZV05qWlhOeklHRnVlVnh1SUNBdkx5QnZaaUJwZEhNZ2NISnZjR1Z5ZEdsbGN5NWNiaUFnWTNKbFlYUmxPaUJtZFc1amRHbHZiaWh2WW1wbFkzUXBJSHRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYW1WamRDQWhQVDBnSjI5aWFtVmpkQ2NnZkh3Z0lXOWlhbVZqZENCOGZDQkJjbkpoZVM1cGMwRnljbUY1S0c5aWFtVmpkQ2twSUh0Y2JpQWdJQ0FnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0oxSmxZV04wTG1Ga1pHOXVjeTVqY21WaGRHVkdjbUZuYldWdWRDQnZibXg1SUdGalkyVndkSE1nWVNCemFXNW5iR1VnYjJKcVpXTjBMaWNzWEc0Z0lDQWdJQ0FnSUNBZ2IySnFaV04wWEc0Z0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUc5aWFtVmpkRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoU1pXRmpkRVZzWlcxbGJuUXVhWE5XWVd4cFpFVnNaVzFsYm5Rb2IySnFaV04wS1NrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ0lDQm1ZV3h6WlN4Y2JpQWdJQ0FnSUNBZ0lDQW5VbVZoWTNRdVlXUmtiMjV6TG1OeVpXRjBaVVp5WVdkdFpXNTBJR1J2WlhNZ2JtOTBJR0ZqWTJWd2RDQmhJRkpsWVdOMFJXeGxiV1Z1ZENBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuZDJsMGFHOTFkQ0JoSUhkeVlYQndaWElnYjJKcVpXTjBMaWRjYmlBZ0lDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjJKcVpXTjBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0dOaGJsZGhjbTVHYjNKU1pXRmpkRVp5WVdkdFpXNTBLU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQndjbTk0ZVNBOUlIdDlPMXh1SUNBZ0lDQWdJQ0JQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb2NISnZlSGtzSUdaeVlXZHRaVzUwUzJWNUxDQjdYRzRnSUNBZ0lDQWdJQ0FnWlc1MWJXVnlZV0pzWlRvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ2RtRnNkV1U2SUc5aWFtVmpkRnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLSEJ5YjNoNUxDQmthV1JYWVhKdVMyVjVMQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2QzSnBkR0ZpYkdVNklIUnlkV1VzWEc0Z0lDQWdJQ0FnSUNBZ1pXNTFiV1Z5WVdKc1pUb2dabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDQWdkbUZzZFdVNklHWmhiSE5sWEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnJaWGtnYVc0Z2IySnFaV04wS1NCN1hHNGdJQ0FnSUNBZ0lDQWdjSEp2ZUhsUWNtOXdaWEowZVVGalkyVnpjMWRwZEdoWFlYSnVhVzVuS0hCeWIzaDVMQ0JyWlhrcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJRTlpYW1WamRDNXdjbVYyWlc1MFJYaDBaVzV6YVc5dWN5aHdjbTk0ZVNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCd2NtOTRlVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUc5aWFtVmpkRHRjYmlBZ2ZTeGNiaUFnTHk4Z1JYaDBjbUZqZENCMGFHVWdiM0pwWjJsdVlXd2dhMlY1WldRZ2IySnFaV04wSUdaeWIyMGdkR2hsSUdaeVlXZHRaVzUwSUc5d1lYRjFaU0IwZVhCbExpQlhZWEp1SUdsbVhHNGdJQzh2SUdFZ2NHeGhhVzRnYjJKcVpXTjBJR2x6SUhCaGMzTmxaQ0JvWlhKbExseHVJQ0JsZUhSeVlXTjBPaUJtZFc1amRHbHZiaWhtY21GbmJXVnVkQ2tnZTF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJR2xtSUNoallXNVhZWEp1Um05eVVtVmhZM1JHY21GbmJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9JV1p5WVdkdFpXNTBXMlp5WVdkdFpXNTBTMlY1WFNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdsa1YyRnlia1p2Y2taeVlXZHRaVzUwS0daeVlXZHRaVzUwS1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2RCYm5rZ2RYTmxJRzltSUdFZ2EyVjVaV1FnYjJKcVpXTjBJSE5vYjNWc1pDQmlaU0IzY21Gd2NHVmtJR2x1SUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBMbUZrWkc5dWN5NWpjbVZoZEdWR2NtRm5iV1Z1ZENodlltcGxZM1FwSUdKbFptOXlaU0JpWldsdVp5QndZWE56WldRZ1lYTWdZU0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2RqYUdsc1pDNG5YRzRnSUNBZ0lDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWNtRm5iV1Z1ZER0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1puSmhaMjFsYm5SYlpuSmhaMjFsYm5STFpYbGRPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWm5KaFoyMWxiblE3WEc0Z0lIMHNYRzRnSUM4dklFTm9aV05ySUdsbUlIUm9hWE1nYVhNZ1lTQm1jbUZuYldWdWRDQmhibVFnYVdZZ2MyOHNJR1Y0ZEhKaFkzUWdkR2hsSUd0bGVXVmtJRzlpYW1WamRDNGdTV1lnYVhSY2JpQWdMeThnYVhNZ1lTQm1jbUZuYldWdWRDMXNhV3RsSUc5aWFtVmpkQ3dnZDJGeWJpQjBhR0YwSUdsMElITm9iM1ZzWkNCaVpTQjNjbUZ3Y0dWa0xpQkpaMjV2Y21VZ2FXWWdkMlZjYmlBZ0x5OGdZMkZ1SjNRZ1pHVjBaWEp0YVc1bElIZG9ZWFFnYTJsdVpDQnZaaUJ2WW1wbFkzUWdkR2hwY3lCcGN5NWNiaUFnWlhoMGNtRmpkRWxtUm5KaFoyMWxiblE2SUdaMWJtTjBhVzl1S0daeVlXZHRaVzUwS1NCN1hHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnYVdZZ0tHTmhibGRoY201R2IzSlNaV0ZqZEVaeVlXZHRaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRWxtSUdsMElHbHpJSFJvWlNCdmNHRnhkV1VnZEhsd1pTd2djbVYwZFhKdUlIUm9aU0JyWlhsbFpDQnZZbXBsWTNRdVhHNGdJQ0FnSUNBZ0lHbG1JQ2htY21GbmJXVnVkRnRtY21GbmJXVnVkRXRsZVYwcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdabkpoWjIxbGJuUmJabkpoWjIxbGJuUkxaWGxkTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHZJRTkwYUdWeWQybHpaU3dnWTJobFkyc2daV0ZqYUNCd2NtOXdaWEowZVNCcFppQnBkQ0JvWVhNZ1lXNGdaV3hsYldWdWRDd2dhV1lnYVhRZ1pHOWxjMXh1SUNBZ0lDQWdJQ0F2THlCcGRDQnBjeUJ3Y205aVlXSnNlU0J0WldGdWRDQmhjeUJoSUdaeVlXZHRaVzUwTENCemJ5QjNaU0JqWVc0Z2QyRnliaUJsWVhKc2VTNGdSR1ZtWlhJc1hHNGdJQ0FnSUNBZ0lDOHZJSFJvWlNCM1lYSnVhVzVuSUhSdklHVjRkSEpoWTNRdVhHNGdJQ0FnSUNBZ0lHWnZjaUFvZG1GeUlHdGxlU0JwYmlCbWNtRm5iV1Z1ZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNobWNtRm5iV1Z1ZEM1b1lYTlBkMjVRY205d1pYSjBlU2hyWlhrcElDWW1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaG1jbUZuYldWdWRGdHJaWGxkS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1ZHaHBjeUJzYjI5cmN5QnNhV3RsSUdFZ1puSmhaMjFsYm5RZ2IySnFaV04wTENCM1pTQnphRzkxYkdRZ2NISnZkbWxrWlNCaGJseHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1pXRnliSGtnZDJGeWJtbHVaeTVjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCU1pXRmpkRVp5WVdkdFpXNTBMbVY0ZEhKaFkzUW9abkpoWjIxbGJuUXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdabkpoWjIxbGJuUTdYRzRnSUgxY2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUkdjbUZuYldWdWREdGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEluamVjdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZShcIi4vRE9NUHJvcGVydHlcIik7XG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcbnZhciBSZWFjdENvbXBvbmVudEVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudFwiKTtcbnZhciBSZWFjdENsYXNzID0gcmVxdWlyZShcIi4vUmVhY3RDbGFzc1wiKTtcbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbXB0eUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcIik7XG52YXIgUmVhY3ROYXRpdmVDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdE5hdGl2ZUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NQ29tcG9uZW50XCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFJvb3RJbmRleCA9IHJlcXVpcmUoXCIuL1JlYWN0Um9vdEluZGV4XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIFJlYWN0SW5qZWN0aW9uID0ge1xuICBDb21wb25lbnQ6IFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQuaW5qZWN0aW9uLFxuICBDbGFzczogUmVhY3RDbGFzcy5pbmplY3Rpb24sXG4gIERPTUNvbXBvbmVudDogUmVhY3RET01Db21wb25lbnQuaW5qZWN0aW9uLFxuICBET01Qcm9wZXJ0eTogRE9NUHJvcGVydHkuaW5qZWN0aW9uLFxuICBFbXB0eUNvbXBvbmVudDogUmVhY3RFbXB0eUNvbXBvbmVudC5pbmplY3Rpb24sXG4gIEV2ZW50UGx1Z2luSHViOiBFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24sXG4gIEV2ZW50RW1pdHRlcjogUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmluamVjdGlvbixcbiAgTmF0aXZlQ29tcG9uZW50OiBSZWFjdE5hdGl2ZUNvbXBvbmVudC5pbmplY3Rpb24sXG4gIFBlcmY6IFJlYWN0UGVyZi5pbmplY3Rpb24sXG4gIFJvb3RJbmRleDogUmVhY3RSb290SW5kZXguaW5qZWN0aW9uLFxuICBVcGRhdGVzOiBSZWFjdFVwZGF0ZXMuaW5qZWN0aW9uXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5qZWN0aW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0SW5wdXRTZWxlY3Rpb25cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdERPTVNlbGVjdGlvbiA9IHJlcXVpcmUoXCIuL1JlYWN0RE9NU2VsZWN0aW9uXCIpO1xuXG52YXIgY29udGFpbnNOb2RlID0gcmVxdWlyZShcIi4vY29udGFpbnNOb2RlXCIpO1xudmFyIGZvY3VzTm9kZSA9IHJlcXVpcmUoXCIuL2ZvY3VzTm9kZVwiKTtcbnZhciBnZXRBY3RpdmVFbGVtZW50ID0gcmVxdWlyZShcIi4vZ2V0QWN0aXZlRWxlbWVudFwiKTtcblxuZnVuY3Rpb24gaXNJbkRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIGNvbnRhaW5zTm9kZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG5vZGUpO1xufVxuXG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4gKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xudmFyIFJlYWN0SW5wdXRTZWxlY3Rpb24gPSB7XG5cbiAgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOiBmdW5jdGlvbihlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0gJiYgKFxuICAgICAgKChlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmIGVsZW0udHlwZSA9PT0gJ3RleHQnKSB8fFxuICAgICAgZWxlbS5ub2RlTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCBlbGVtLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKVxuICAgICk7XG4gIH0sXG5cbiAgZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb246IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZm9jdXNlZEVsZW06IGZvY3VzZWRFbGVtLFxuICAgICAgc2VsZWN0aW9uUmFuZ2U6XG4gICAgICAgICAgUmVhY3RJbnB1dFNlbGVjdGlvbi5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZm9jdXNlZEVsZW0pID9cbiAgICAgICAgICBSZWFjdElucHV0U2VsZWN0aW9uLmdldFNlbGVjdGlvbihmb2N1c2VkRWxlbSkgOlxuICAgICAgICAgIG51bGxcbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcmVzdG9yZVNlbGVjdGlvbjogSWYgYW55IHNlbGVjdGlvbiBpbmZvcm1hdGlvbiB3YXMgcG90ZW50aWFsbHkgbG9zdCxcbiAgICogcmVzdG9yZSBpdC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCByZW1vdmUgZG9tXG4gICAqIG5vZGVzIGFuZCBwbGFjZSB0aGVtIGJhY2sgaW4sIHJlc3VsdGluZyBpbiBmb2N1cyBiZWluZyBsb3N0LlxuICAgKi9cbiAgcmVzdG9yZVNlbGVjdGlvbjogZnVuY3Rpb24ocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikge1xuICAgIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB2YXIgcHJpb3JGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gICAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuICAgIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJlxuICAgICAgICBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIGlmIChSZWFjdElucHV0U2VsZWN0aW9uLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgICBSZWFjdElucHV0U2VsZWN0aW9uLnNldFNlbGVjdGlvbihcbiAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLFxuICAgICAgICAgIHByaW9yU2VsZWN0aW9uUmFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZvY3VzTm9kZShwcmlvckZvY3VzZWRFbGVtKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICAgKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAgICogLUBpbnB1dDogTG9vayB1cCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXRcbiAgICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gICAqL1xuICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgdmFyIHNlbGVjdGlvbjtcblxuICAgIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgICAvLyBNb2Rlcm4gYnJvd3NlciB3aXRoIGlucHV0IG9yIHRleHRhcmVhLlxuICAgICAgc2VsZWN0aW9uID0ge1xuICAgICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uICYmIGlucHV0Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAvLyBJRTggaW5wdXQuXG4gICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcbiAgICAgIC8vIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBzZWxlY3Rpb24gcGVyIGRvY3VtZW50IGluIElFLCBzbyBpdCBtdXN0XG4gICAgICAvLyBiZSBpbiBvdXIgZWxlbWVudC5cbiAgICAgIGlmIChyYW5nZS5wYXJlbnRFbGVtZW50KCkgPT09IGlucHV0KSB7XG4gICAgICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgICAgICBzdGFydDogLXJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgLWlucHV0LnZhbHVlLmxlbmd0aCksXG4gICAgICAgICAgZW5kOiAtcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgLWlucHV0LnZhbHVlLmxlbmd0aClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgICBzZWxlY3Rpb24gPSBSZWFjdERPTVNlbGVjdGlvbi5nZXRPZmZzZXRzKGlucHV0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uIHx8IHtzdGFydDogMCwgZW5kOiAwfTtcbiAgfSxcblxuICAvKipcbiAgICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gICAqIHRoZSBpbnB1dC5cbiAgICogLUBpbnB1dCAgICAgU2V0IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYVxuICAgKiAtQG9mZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4gICAqL1xuICBzZXRTZWxlY3Rpb246IGZ1bmN0aW9uKGlucHV0LCBvZmZzZXRzKSB7XG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQ7XG4gICAgaWYgKHR5cGVvZiBlbmQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICB9XG5cbiAgICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBpbnB1dC5ub2RlTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgdmFyIHJhbmdlID0gaW5wdXQuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpO1xuICAgICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kIC0gc3RhcnQpO1xuICAgICAgcmFuZ2Uuc2VsZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RE9NU2VsZWN0aW9uLnNldE9mZnNldHMoaW5wdXQsIG9mZnNldHMpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdElucHV0U2VsZWN0aW9uO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdEluc3RhbmNlSGFuZGxlc1xuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFJvb3RJbmRleCA9IHJlcXVpcmUoXCIuL1JlYWN0Um9vdEluZGV4XCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG52YXIgU0VQQVJBVE9SID0gJy4nO1xudmFyIFNFUEFSQVRPUl9MRU5HVEggPSBTRVBBUkFUT1IubGVuZ3RoO1xuXG4vKipcbiAqIE1heGltdW0gZGVwdGggb2YgdHJhdmVyc2FscyBiZWZvcmUgd2UgY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIGEgYmFkIElELlxuICovXG52YXIgTUFYX1RSRUVfREVQVEggPSAxMDA7XG5cbi8qKlxuICogQ3JlYXRlcyBhIERPTSBJRCBwcmVmaXggdG8gdXNlIHdoZW4gbW91bnRpbmcgUmVhY3QgY29tcG9uZW50cy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggQSB1bmlxdWUgaW50ZWdlclxuICogQHJldHVybiB7c3RyaW5nfSBSZWFjdCByb290IElELlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdElEU3RyaW5nKGluZGV4KSB7XG4gIHJldHVybiBTRVBBUkFUT1IgKyBpbmRleC50b1N0cmluZygzNik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgY2hhcmFjdGVyIGluIHRoZSBzdXBwbGllZCBJRCBpcyBhIHNlcGFyYXRvciBvciB0aGUgZW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBBIFJlYWN0IERPTSBJRC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBvZiB0aGUgY2hhcmFjdGVyIHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIGlzIGEgc2VwYXJhdG9yIG9yIGVuZCBvZiB0aGUgSUQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc0JvdW5kYXJ5KGlkLCBpbmRleCkge1xuICByZXR1cm4gaWQuY2hhckF0KGluZGV4KSA9PT0gU0VQQVJBVE9SIHx8IGluZGV4ID09PSBpZC5sZW5ndGg7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBzdXBwbGllZCBzdHJpbmcgaXMgYSB2YWxpZCBSZWFjdCBET00gSUQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIEEgUmVhY3QgRE9NIElELCBtYXliZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIFJlYWN0IERPTSBJRC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRJRChpZCkge1xuICByZXR1cm4gaWQgPT09ICcnIHx8IChcbiAgICBpZC5jaGFyQXQoMCkgPT09IFNFUEFSQVRPUiAmJiBpZC5jaGFyQXQoaWQubGVuZ3RoIC0gMSkgIT09IFNFUEFSQVRPUlxuICApO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZmlyc3QgSUQgaXMgYW4gYW5jZXN0b3Igb2Ygb3IgZXF1YWwgdG8gdGhlIHNlY29uZCBJRC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5jZXN0b3JJRFxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NlbmRhbnRJRFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgYW5jZXN0b3JJRGAgaXMgYW4gYW5jZXN0b3Igb2YgYGRlc2NlbmRhbnRJRGAuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNBbmNlc3RvcklET2YoYW5jZXN0b3JJRCwgZGVzY2VuZGFudElEKSB7XG4gIHJldHVybiAoXG4gICAgZGVzY2VuZGFudElELmluZGV4T2YoYW5jZXN0b3JJRCkgPT09IDAgJiZcbiAgICBpc0JvdW5kYXJ5KGRlc2NlbmRhbnRJRCwgYW5jZXN0b3JJRC5sZW5ndGgpXG4gICk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcGFyZW50IElEIG9mIHRoZSBzdXBwbGllZCBSZWFjdCBET00gSUQsIGBpZGAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIElEIG9mIGEgY29tcG9uZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBJRCBvZiB0aGUgcGFyZW50LCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnRJRChpZCkge1xuICByZXR1cm4gaWQgPyBpZC5zdWJzdHIoMCwgaWQubGFzdEluZGV4T2YoU0VQQVJBVE9SKSkgOiAnJztcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IERPTSBJRCBvbiB0aGUgdHJlZSBwYXRoIGZyb20gdGhlIHN1cHBsaWVkIGBhbmNlc3RvcklEYCB0byB0aGVcbiAqIHN1cHBsaWVkIGBkZXN0aW5hdGlvbklEYC4gSWYgdGhleSBhcmUgZXF1YWwsIHRoZSBJRCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5jZXN0b3JJRCBJRCBvZiBhbiBhbmNlc3RvciBub2RlIG9mIGBkZXN0aW5hdGlvbklEYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbklEIElEIG9mIHRoZSBkZXN0aW5hdGlvbiBub2RlLlxuICogQHJldHVybiB7c3RyaW5nfSBOZXh0IElEIG9uIHRoZSBwYXRoIGZyb20gYGFuY2VzdG9ySURgIHRvIGBkZXN0aW5hdGlvbklEYC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldE5leHREZXNjZW5kYW50SUQoYW5jZXN0b3JJRCwgZGVzdGluYXRpb25JRCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIGlzVmFsaWRJRChhbmNlc3RvcklEKSAmJiBpc1ZhbGlkSUQoZGVzdGluYXRpb25JRCksXG4gICAgJ2dldE5leHREZXNjZW5kYW50SUQoJXMsICVzKTogUmVjZWl2ZWQgYW4gaW52YWxpZCBSZWFjdCBET00gSUQuJyxcbiAgICBhbmNlc3RvcklELFxuICAgIGRlc3RpbmF0aW9uSURcbiAgKSA6IGludmFyaWFudChpc1ZhbGlkSUQoYW5jZXN0b3JJRCkgJiYgaXNWYWxpZElEKGRlc3RpbmF0aW9uSUQpKSk7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgaXNBbmNlc3RvcklET2YoYW5jZXN0b3JJRCwgZGVzdGluYXRpb25JRCksXG4gICAgJ2dldE5leHREZXNjZW5kYW50SUQoLi4uKTogUmVhY3QgaGFzIG1hZGUgYW4gaW52YWxpZCBhc3N1bXB0aW9uIGFib3V0ICcgK1xuICAgICd0aGUgRE9NIGhpZXJhcmNoeS4gRXhwZWN0ZWQgYCVzYCB0byBiZSBhbiBhbmNlc3RvciBvZiBgJXNgLicsXG4gICAgYW5jZXN0b3JJRCxcbiAgICBkZXN0aW5hdGlvbklEXG4gICkgOiBpbnZhcmlhbnQoaXNBbmNlc3RvcklET2YoYW5jZXN0b3JJRCwgZGVzdGluYXRpb25JRCkpKTtcbiAgaWYgKGFuY2VzdG9ySUQgPT09IGRlc3RpbmF0aW9uSUQpIHtcbiAgICByZXR1cm4gYW5jZXN0b3JJRDtcbiAgfVxuICAvLyBTa2lwIG92ZXIgdGhlIGFuY2VzdG9yIGFuZCB0aGUgaW1tZWRpYXRlIHNlcGFyYXRvci4gVHJhdmVyc2UgdW50aWwgd2UgaGl0XG4gIC8vIGFub3RoZXIgc2VwYXJhdG9yIG9yIHdlIHJlYWNoIHRoZSBlbmQgb2YgYGRlc3RpbmF0aW9uSURgLlxuICB2YXIgc3RhcnQgPSBhbmNlc3RvcklELmxlbmd0aCArIFNFUEFSQVRPUl9MRU5HVEg7XG4gIHZhciBpO1xuICBmb3IgKGkgPSBzdGFydDsgaSA8IGRlc3RpbmF0aW9uSUQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaXNCb3VuZGFyeShkZXN0aW5hdGlvbklELCBpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBkZXN0aW5hdGlvbklELnN1YnN0cigwLCBpKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBJRCBvZiB0d28gSURzLlxuICpcbiAqIFVzaW5nIHRoaXMgSUQgc2NoZW1lLCB0aGUgbmVhcmVzdCBjb21tb24gYW5jZXN0b3IgSUQgaXMgdGhlIGxvbmdlc3QgY29tbW9uXG4gKiBwcmVmaXggb2YgdGhlIHR3byBJRHMgdGhhdCBpbW1lZGlhdGVseSBwcmVjZWRlZCBhIFwibWFya2VyXCIgaW4gYm90aCBzdHJpbmdzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvbmVJRFxuICogQHBhcmFtIHtzdHJpbmd9IHR3b0lEXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5lYXJlc3QgY29tbW9uIGFuY2VzdG9yIElELCBvciB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vbmUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBnZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQob25lSUQsIHR3b0lEKSB7XG4gIHZhciBtaW5MZW5ndGggPSBNYXRoLm1pbihvbmVJRC5sZW5ndGgsIHR3b0lELmxlbmd0aCk7XG4gIGlmIChtaW5MZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgdmFyIGxhc3RDb21tb25NYXJrZXJJbmRleCA9IDA7XG4gIC8vIFVzZSBgPD1gIHRvIHRyYXZlcnNlIHVudGlsIHRoZSBcIkVPTFwiIG9mIHRoZSBzaG9ydGVyIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbWluTGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaXNCb3VuZGFyeShvbmVJRCwgaSkgJiYgaXNCb3VuZGFyeSh0d29JRCwgaSkpIHtcbiAgICAgIGxhc3RDb21tb25NYXJrZXJJbmRleCA9IGk7XG4gICAgfSBlbHNlIGlmIChvbmVJRC5jaGFyQXQoaSkgIT09IHR3b0lELmNoYXJBdChpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHZhciBsb25nZXN0Q29tbW9uSUQgPSBvbmVJRC5zdWJzdHIoMCwgbGFzdENvbW1vbk1hcmtlckluZGV4KTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBpc1ZhbGlkSUQobG9uZ2VzdENvbW1vbklEKSxcbiAgICAnZ2V0Rmlyc3RDb21tb25BbmNlc3RvcklEKCVzLCAlcyk6IEV4cGVjdGVkIGEgdmFsaWQgUmVhY3QgRE9NIElEOiAlcycsXG4gICAgb25lSUQsXG4gICAgdHdvSUQsXG4gICAgbG9uZ2VzdENvbW1vbklEXG4gICkgOiBpbnZhcmlhbnQoaXNWYWxpZElEKGxvbmdlc3RDb21tb25JRCkpKTtcbiAgcmV0dXJuIGxvbmdlc3RDb21tb25JRDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgdGhlIHBhcmVudCBwYXRoIGJldHdlZW4gdHdvIElEcyAoZWl0aGVyIHVwIG9yIGRvd24pLiBUaGUgSURzIG11c3RcbiAqIG5vdCBiZSB0aGUgc2FtZSwgYW5kIHRoZXJlIG11c3QgZXhpc3QgYSBwYXJlbnQgcGF0aCBiZXR3ZWVuIHRoZW0uIElmIHRoZVxuICogY2FsbGJhY2sgcmV0dXJucyBgZmFsc2VgLCB0cmF2ZXJzYWwgaXMgc3RvcHBlZC5cbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IHN0YXJ0IElEIGF0IHdoaWNoIHRvIHN0YXJ0IHRyYXZlcnNhbC5cbiAqIEBwYXJhbSB7P3N0cmluZ30gc3RvcCBJRCBhdCB3aGljaCB0byBlbmQgdHJhdmVyc2FsLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgdG8gaW52b2tlIGVhY2ggSUQgd2l0aC5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IHNraXBGaXJzdCBXaGV0aGVyIG9yIG5vdCB0byBza2lwIHRoZSBmaXJzdCBub2RlLlxuICogQHBhcmFtIHs/Ym9vbGVhbn0gc2tpcExhc3QgV2hldGhlciBvciBub3QgdG8gc2tpcCB0aGUgbGFzdCBub2RlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VQYXJlbnRQYXRoKHN0YXJ0LCBzdG9wLCBjYiwgYXJnLCBza2lwRmlyc3QsIHNraXBMYXN0KSB7XG4gIHN0YXJ0ID0gc3RhcnQgfHwgJyc7XG4gIHN0b3AgPSBzdG9wIHx8ICcnO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIHN0YXJ0ICE9PSBzdG9wLFxuICAgICd0cmF2ZXJzZVBhcmVudFBhdGgoLi4uKTogQ2Fubm90IHRyYXZlcnNlIGZyb20gYW5kIHRvIHRoZSBzYW1lIElELCBgJXNgLicsXG4gICAgc3RhcnRcbiAgKSA6IGludmFyaWFudChzdGFydCAhPT0gc3RvcCkpO1xuICB2YXIgdHJhdmVyc2VVcCA9IGlzQW5jZXN0b3JJRE9mKHN0b3AsIHN0YXJ0KTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICB0cmF2ZXJzZVVwIHx8IGlzQW5jZXN0b3JJRE9mKHN0YXJ0LCBzdG9wKSxcbiAgICAndHJhdmVyc2VQYXJlbnRQYXRoKCVzLCAlcywgLi4uKTogQ2Fubm90IHRyYXZlcnNlIGZyb20gdHdvIElEcyB0aGF0IGRvICcgK1xuICAgICdub3QgaGF2ZSBhIHBhcmVudCBwYXRoLicsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICApIDogaW52YXJpYW50KHRyYXZlcnNlVXAgfHwgaXNBbmNlc3RvcklET2Yoc3RhcnQsIHN0b3ApKSk7XG4gIC8vIFRyYXZlcnNlIGZyb20gYHN0YXJ0YCB0byBgc3RvcGAgb25lIGRlcHRoIGF0IGEgdGltZS5cbiAgdmFyIGRlcHRoID0gMDtcbiAgdmFyIHRyYXZlcnNlID0gdHJhdmVyc2VVcCA/IGdldFBhcmVudElEIDogZ2V0TmV4dERlc2NlbmRhbnRJRDtcbiAgZm9yICh2YXIgaWQgPSBzdGFydDsgLyogdW50aWwgYnJlYWsgKi87IGlkID0gdHJhdmVyc2UoaWQsIHN0b3ApKSB7XG4gICAgdmFyIHJldDtcbiAgICBpZiAoKCFza2lwRmlyc3QgfHwgaWQgIT09IHN0YXJ0KSAmJiAoIXNraXBMYXN0IHx8IGlkICE9PSBzdG9wKSkge1xuICAgICAgcmV0ID0gY2IoaWQsIHRyYXZlcnNlVXAsIGFyZyk7XG4gICAgfVxuICAgIGlmIChyZXQgPT09IGZhbHNlIHx8IGlkID09PSBzdG9wKSB7XG4gICAgICAvLyBPbmx5IGJyZWFrIC8vYWZ0ZXIvLyB2aXNpdGluZyBgc3RvcGAuXG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGRlcHRoKysgPCBNQVhfVFJFRV9ERVBUSCxcbiAgICAgICd0cmF2ZXJzZVBhcmVudFBhdGgoJXMsICVzLCAuLi4pOiBEZXRlY3RlZCBhbiBpbmZpbml0ZSBsb29wIHdoaWxlICcgK1xuICAgICAgJ3RyYXZlcnNpbmcgdGhlIFJlYWN0IERPTSBJRCB0cmVlLiBUaGlzIG1heSBiZSBkdWUgdG8gbWFsZm9ybWVkIElEczogJXMnLFxuICAgICAgc3RhcnQsIHN0b3BcbiAgICApIDogaW52YXJpYW50KGRlcHRoKysgPCBNQVhfVFJFRV9ERVBUSCkpO1xuICB9XG59XG5cbi8qKlxuICogTWFuYWdlcyB0aGUgSURzIGFzc2lnbmVkIHRvIERPTSByZXByZXNlbnRhdGlvbnMgb2YgUmVhY3QgY29tcG9uZW50cy4gVGhpc1xuICogdXNlcyBhIHNwZWNpZmljIHNjaGVtZSBpbiBvcmRlciB0byB0cmF2ZXJzZSB0aGUgRE9NIGVmZmljaWVudGx5IChlLmcuIGluXG4gKiBvcmRlciB0byBzaW11bGF0ZSBldmVudHMpLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSB7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBSZWFjdCByb290IElEXG4gICAqIEByZXR1cm4ge3N0cmluZ30gQSBSZWFjdCByb290IElELlxuICAgKi9cbiAgY3JlYXRlUmVhY3RSb290SUQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBnZXRSZWFjdFJvb3RJRFN0cmluZyhSZWFjdFJvb3RJbmRleC5jcmVhdGVSZWFjdFJvb3RJbmRleCgpKTtcbiAgfSxcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIFJlYWN0IElEIGJ5IGpvaW5pbmcgYSByb290IElEIHdpdGggYSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdElEIFJvb3QgSUQgb2YgYSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBBIGNvbXBvbmVudCdzIG5hbWUgKGFzIGZsYXR0ZW5lZCBjaGlsZHJlbikuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gQSBSZWFjdCBJRC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjcmVhdGVSZWFjdElEOiBmdW5jdGlvbihyb290SUQsIG5hbWUpIHtcbiAgICByZXR1cm4gcm9vdElEICsgbmFtZTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0cyB0aGUgRE9NIElEIG9mIHRoZSBSZWFjdCBjb21wb25lbnQgdGhhdCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSB0aGF0XG4gICAqIGNvbnRhaW5zIHRoZSBSZWFjdCBjb21wb25lbnQgd2l0aCB0aGUgc3VwcGxpZWQgRE9NIElELlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgRE9NIElEIG9mIGEgUmVhY3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBET00gSUQgb2YgdGhlIFJlYWN0IGNvbXBvbmVudCB0aGF0IGlzIHRoZSByb290LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFJlYWN0Um9vdElERnJvbU5vZGVJRDogZnVuY3Rpb24oaWQpIHtcbiAgICBpZiAoaWQgJiYgaWQuY2hhckF0KDApID09PSBTRVBBUkFUT1IgJiYgaWQubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGluZGV4ID0gaWQuaW5kZXhPZihTRVBBUkFUT1IsIDEpO1xuICAgICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpZC5zdWJzdHIoMCwgaW5kZXgpIDogaWQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgdGhlIElEIGhpZXJhcmNoeSBhbmQgaW52b2tlcyB0aGUgc3VwcGxpZWQgYGNiYCBvbiBhbnkgSURzIHRoYXRcbiAgICogc2hvdWxkIHdvdWxkIHJlY2VpdmUgYSBgbW91c2VFbnRlcmAgb3IgYG1vdXNlTGVhdmVgIGV2ZW50LlxuICAgKlxuICAgKiBOT1RFOiBEb2VzIG5vdCBpbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBuZWFyZXN0IGNvbW1vbiBhbmNlc3RvciBiZWNhdXNlXG4gICAqIG5vdGhpbmcgXCJlbnRlcmVkXCIgb3IgXCJsZWZ0XCIgdGhhdCBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGVhdmVJRCBJRCBiZWluZyBsZWZ0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW50ZXJJRCBJRCBiZWluZyBlbnRlcmVkLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYiBDYWxsYmFjayB0byBpbnZva2Ugb24gZWFjaCBlbnRlcmVkL2xlZnQgSUQuXG4gICAqIEBwYXJhbSB7Kn0gdXBBcmcgQXJndW1lbnQgdG8gaW52b2tlIHRoZSBjYWxsYmFjayB3aXRoIG9uIGxlZnQgSURzLlxuICAgKiBAcGFyYW0geyp9IGRvd25BcmcgQXJndW1lbnQgdG8gaW52b2tlIHRoZSBjYWxsYmFjayB3aXRoIG9uIGVudGVyZWQgSURzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHRyYXZlcnNlRW50ZXJMZWF2ZTogZnVuY3Rpb24obGVhdmVJRCwgZW50ZXJJRCwgY2IsIHVwQXJnLCBkb3duQXJnKSB7XG4gICAgdmFyIGFuY2VzdG9ySUQgPSBnZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQobGVhdmVJRCwgZW50ZXJJRCk7XG4gICAgaWYgKGFuY2VzdG9ySUQgIT09IGxlYXZlSUQpIHtcbiAgICAgIHRyYXZlcnNlUGFyZW50UGF0aChsZWF2ZUlELCBhbmNlc3RvcklELCBjYiwgdXBBcmcsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKGFuY2VzdG9ySUQgIT09IGVudGVySUQpIHtcbiAgICAgIHRyYXZlcnNlUGFyZW50UGF0aChhbmNlc3RvcklELCBlbnRlcklELCBjYiwgZG93bkFyZywgdHJ1ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogU2ltdWxhdGVzIHRoZSB0cmF2ZXJzYWwgb2YgYSB0d28tcGhhc2UsIGNhcHR1cmUvYnViYmxlIGV2ZW50IGRpc3BhdGNoLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIHRyYXZlcnNhbCBoYXBwZW5zIG9uIElEcyB3aXRob3V0IHRvdWNoaW5nIHRoZSBET00uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRJRCBJRCBvZiB0aGUgdGFyZ2V0IG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNiIENhbGxiYWNrIHRvIGludm9rZS5cbiAgICogQHBhcmFtIHsqfSBhcmcgQXJndW1lbnQgdG8gaW52b2tlIHRoZSBjYWxsYmFjayB3aXRoLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHRyYXZlcnNlVHdvUGhhc2U6IGZ1bmN0aW9uKHRhcmdldElELCBjYiwgYXJnKSB7XG4gICAgaWYgKHRhcmdldElEKSB7XG4gICAgICB0cmF2ZXJzZVBhcmVudFBhdGgoJycsIHRhcmdldElELCBjYiwgYXJnLCB0cnVlLCBmYWxzZSk7XG4gICAgICB0cmF2ZXJzZVBhcmVudFBhdGgodGFyZ2V0SUQsICcnLCBjYiwgYXJnLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZSBhIG5vZGUgSUQsIGNhbGxpbmcgdGhlIHN1cHBsaWVkIGBjYmAgZm9yIGVhY2ggYW5jZXN0b3IgSUQuIEZvclxuICAgKiBleGFtcGxlLCBwYXNzaW5nIGAuMC4kcm93LTAuMWAgd291bGQgcmVzdWx0IGluIGBjYmAgZ2V0dGluZyBjYWxsZWRcbiAgICogd2l0aCBgLjBgLCBgLjAuJHJvdy0wYCwgYW5kIGAuMC4kcm93LTAuMWAuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgdHJhdmVyc2FsIGhhcHBlbnMgb24gSURzIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElEIElEIG9mIHRoZSB0YXJnZXQgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2IgQ2FsbGJhY2sgdG8gaW52b2tlLlxuICAgKiBAcGFyYW0geyp9IGFyZyBBcmd1bWVudCB0byBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGguXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdHJhdmVyc2VBbmNlc3RvcnM6IGZ1bmN0aW9uKHRhcmdldElELCBjYiwgYXJnKSB7XG4gICAgdHJhdmVyc2VQYXJlbnRQYXRoKCcnLCB0YXJnZXRJRCwgY2IsIGFyZywgdHJ1ZSwgZmFsc2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFeHBvc2VkIGZvciB1bml0IHRlc3RpbmcuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Rmlyc3RDb21tb25BbmNlc3RvcklEOiBnZXRGaXJzdENvbW1vbkFuY2VzdG9ySUQsXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIHVuaXQgdGVzdGluZy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXROZXh0RGVzY2VuZGFudElEOiBnZXROZXh0RGVzY2VuZGFudElELFxuXG4gIGlzQW5jZXN0b3JJRE9mOiBpc0FuY2VzdG9ySURPZixcblxuICBTRVBBUkFUT1I6IFNFUEFSQVRPUlxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUkpibk4wWVc1alpVaGhibVJzWlhNdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpYRzRnS2lCQWRIbHdaV05vWldOcmN5QnpkR0YwYVdNdGIyNXNlVnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUZKbFlXTjBVbTl2ZEVsdVpHVjRJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JTYjI5MFNXNWtaWGhjSWlrN1hHNWNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiblpoY2lCVFJWQkJVa0ZVVDFJZ1BTQW5MaWM3WEc1MllYSWdVMFZRUVZKQlZFOVNYMHhGVGtkVVNDQTlJRk5GVUVGU1FWUlBVaTVzWlc1bmRHZzdYRzVjYmk4cUtseHVJQ29nVFdGNGFXMTFiU0JrWlhCMGFDQnZaaUIwY21GMlpYSnpZV3h6SUdKbFptOXlaU0IzWlNCamIyNXphV1JsY2lCMGFHVWdjRzl6YzJsaWFXeHBkSGtnYjJZZ1lTQmlZV1FnU1VRdVhHNGdLaTljYm5aaGNpQk5RVmhmVkZKRlJWOUVSVkJVU0NBOUlERXdNRHRjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdFZ1JFOU5JRWxFSUhCeVpXWnBlQ0IwYnlCMWMyVWdkMmhsYmlCdGIzVnVkR2x1WnlCU1pXRmpkQ0JqYjIxd2IyNWxiblJ6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3Ym5WdFltVnlmU0JwYm1SbGVDQkJJSFZ1YVhGMVpTQnBiblJsWjJWeVhHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlJRkpsWVdOMElISnZiM1FnU1VRdVhHNGdLaUJBYVc1MFpYSnVZV3hjYmlBcUwxeHVablZ1WTNScGIyNGdaMlYwVW1WaFkzUlNiMjkwU1VSVGRISnBibWNvYVc1a1pYZ3BJSHRjYmlBZ2NtVjBkWEp1SUZORlVFRlNRVlJQVWlBcklHbHVaR1Y0TG5SdlUzUnlhVzVuS0RNMktUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGFHVmphM01nYVdZZ1lTQmphR0Z5WVdOMFpYSWdhVzRnZEdobElITjFjSEJzYVdWa0lFbEVJR2x6SUdFZ2MyVndZWEpoZEc5eUlHOXlJSFJvWlNCbGJtUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRUVnVW1WaFkzUWdSRTlOSUVsRUxseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR2x1WkdWNElFbHVaR1Y0SUc5bUlIUm9aU0JqYUdGeVlXTjBaWElnZEc4Z1kyaGxZMnN1WEc0Z0tpQkFjbVYwZFhKdUlIdGliMjlzWldGdWZTQlVjblZsSUdsbUlIUm9aU0JqYUdGeVlXTjBaWElnYVhNZ1lTQnpaWEJoY21GMGIzSWdiM0lnWlc1a0lHOW1JSFJvWlNCSlJDNWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVoxYm1OMGFXOXVJR2x6UW05MWJtUmhjbmtvYVdRc0lHbHVaR1Y0S1NCN1hHNGdJSEpsZEhWeWJpQnBaQzVqYUdGeVFYUW9hVzVrWlhncElEMDlQU0JUUlZCQlVrRlVUMUlnZkh3Z2FXNWtaWGdnUFQwOUlHbGtMbXhsYm1kMGFEdGNibjFjYmx4dUx5b3FYRzRnS2lCRGFHVmphM01nYVdZZ2RHaGxJSE4xY0hCc2FXVmtJSE4wY21sdVp5QnBjeUJoSUhaaGJHbGtJRkpsWVdOMElFUlBUU0JKUkM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1FTQlNaV0ZqZENCRVQwMGdTVVFzSUcxaGVXSmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCMGFHVWdjM1J5YVc1bklHbHpJR0VnZG1Gc2FXUWdVbVZoWTNRZ1JFOU5JRWxFTGx4dUlDb2dRSEJ5YVhaaGRHVmNiaUFxTDF4dVpuVnVZM1JwYjI0Z2FYTldZV3hwWkVsRUtHbGtLU0I3WEc0Z0lISmxkSFZ5YmlCcFpDQTlQVDBnSnljZ2ZId2dLRnh1SUNBZ0lHbGtMbU5vWVhKQmRDZ3dLU0E5UFQwZ1UwVlFRVkpCVkU5U0lDWW1JR2xrTG1Ob1lYSkJkQ2hwWkM1c1pXNW5kR2dnTFNBeEtTQWhQVDBnVTBWUVFWSkJWRTlTWEc0Z0lDazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyaGxZMnR6SUdsbUlIUm9aU0JtYVhKemRDQkpSQ0JwY3lCaGJpQmhibU5sYzNSdmNpQnZaaUJ2Y2lCbGNYVmhiQ0IwYnlCMGFHVWdjMlZqYjI1a0lFbEVMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQmhibU5sYzNSdmNrbEVYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnWkdWelkyVnVaR0Z1ZEVsRVhHNGdLaUJBY21WMGRYSnVJSHRpYjI5c1pXRnVmU0JVY25WbElHbG1JR0JoYm1ObGMzUnZja2xFWUNCcGN5QmhiaUJoYm1ObGMzUnZjaUJ2WmlCZ1pHVnpZMlZ1WkdGdWRFbEVZQzVjYmlBcUlFQnBiblJsY201aGJGeHVJQ292WEc1bWRXNWpkR2x2YmlCcGMwRnVZMlZ6ZEc5eVNVUlBaaWhoYm1ObGMzUnZja2xFTENCa1pYTmpaVzVrWVc1MFNVUXBJSHRjYmlBZ2NtVjBkWEp1SUNoY2JpQWdJQ0JrWlhOalpXNWtZVzUwU1VRdWFXNWtaWGhQWmloaGJtTmxjM1J2Y2tsRUtTQTlQVDBnTUNBbUpseHVJQ0FnSUdselFtOTFibVJoY25rb1pHVnpZMlZ1WkdGdWRFbEVMQ0JoYm1ObGMzUnZja2xFTG14bGJtZDBhQ2xjYmlBZ0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCSFpYUnpJSFJvWlNCd1lYSmxiblFnU1VRZ2IyWWdkR2hsSUhOMWNIQnNhV1ZrSUZKbFlXTjBJRVJQVFNCSlJDd2dZR2xrWUM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1NVUWdiMllnWVNCamIyMXdiMjVsYm5RdVhHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlJRWxFSUc5bUlIUm9aU0J3WVhKbGJuUXNJRzl5SUdGdUlHVnRjSFI1SUhOMGNtbHVaeTVjYmlBcUlFQndjbWwyWVhSbFhHNGdLaTljYm1aMWJtTjBhVzl1SUdkbGRGQmhjbVZ1ZEVsRUtHbGtLU0I3WEc0Z0lISmxkSFZ5YmlCcFpDQS9JR2xrTG5OMVluTjBjaWd3TENCcFpDNXNZWE4wU1c1a1pYaFBaaWhUUlZCQlVrRlVUMUlwS1NBNklDY25PMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZGxkSE1nZEdobElHNWxlSFFnUkU5TklFbEVJRzl1SUhSb1pTQjBjbVZsSUhCaGRHZ2dabkp2YlNCMGFHVWdjM1Z3Y0d4cFpXUWdZR0Z1WTJWemRHOXlTVVJnSUhSdklIUm9aVnh1SUNvZ2MzVndjR3hwWldRZ1lHUmxjM1JwYm1GMGFXOXVTVVJnTGlCSlppQjBhR1Y1SUdGeVpTQmxjWFZoYkN3Z2RHaGxJRWxFSUdseklISmxkSFZ5Ym1Wa0xseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCaGJtTmxjM1J2Y2tsRUlFbEVJRzltSUdGdUlHRnVZMlZ6ZEc5eUlHNXZaR1VnYjJZZ1lHUmxjM1JwYm1GMGFXOXVTVVJnTGx4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHUmxjM1JwYm1GMGFXOXVTVVFnU1VRZ2IyWWdkR2hsSUdSbGMzUnBibUYwYVc5dUlHNXZaR1V1WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlFNWxlSFFnU1VRZ2IyNGdkR2hsSUhCaGRHZ2dabkp2YlNCZ1lXNWpaWE4wYjNKSlJHQWdkRzhnWUdSbGMzUnBibUYwYVc5dVNVUmdMbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFMMXh1Wm5WdVkzUnBiMjRnWjJWMFRtVjRkRVJsYzJObGJtUmhiblJKUkNoaGJtTmxjM1J2Y2tsRUxDQmtaWE4wYVc1aGRHbHZia2xFS1NCN1hHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ2FYTldZV3hwWkVsRUtHRnVZMlZ6ZEc5eVNVUXBJQ1ltSUdselZtRnNhV1JKUkNoa1pYTjBhVzVoZEdsdmJrbEVLU3hjYmlBZ0lDQW5aMlYwVG1WNGRFUmxjMk5sYm1SaGJuUkpSQ2dsY3l3Z0pYTXBPaUJTWldObGFYWmxaQ0JoYmlCcGJuWmhiR2xrSUZKbFlXTjBJRVJQVFNCSlJDNG5MRnh1SUNBZ0lHRnVZMlZ6ZEc5eVNVUXNYRzRnSUNBZ1pHVnpkR2x1WVhScGIyNUpSRnh1SUNBcElEb2dhVzUyWVhKcFlXNTBLR2x6Vm1Gc2FXUkpSQ2hoYm1ObGMzUnZja2xFS1NBbUppQnBjMVpoYkdsa1NVUW9aR1Z6ZEdsdVlYUnBiMjVKUkNrcEtUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQnBjMEZ1WTJWemRHOXlTVVJQWmloaGJtTmxjM1J2Y2tsRUxDQmtaWE4wYVc1aGRHbHZia2xFS1N4Y2JpQWdJQ0FuWjJWMFRtVjRkRVJsYzJObGJtUmhiblJKUkNndUxpNHBPaUJTWldGamRDQm9ZWE1nYldGa1pTQmhiaUJwYm5aaGJHbGtJR0Z6YzNWdGNIUnBiMjRnWVdKdmRYUWdKeUFyWEc0Z0lDQWdKM1JvWlNCRVQwMGdhR2xsY21GeVkyaDVMaUJGZUhCbFkzUmxaQ0JnSlhOZ0lIUnZJR0psSUdGdUlHRnVZMlZ6ZEc5eUlHOW1JR0FsYzJBdUp5eGNiaUFnSUNCaGJtTmxjM1J2Y2tsRUxGeHVJQ0FnSUdSbGMzUnBibUYwYVc5dVNVUmNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaHBjMEZ1WTJWemRHOXlTVVJQWmloaGJtTmxjM1J2Y2tsRUxDQmtaWE4wYVc1aGRHbHZia2xFS1NrcE8xeHVJQ0JwWmlBb1lXNWpaWE4wYjNKSlJDQTlQVDBnWkdWemRHbHVZWFJwYjI1SlJDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCaGJtTmxjM1J2Y2tsRU8xeHVJQ0I5WEc0Z0lDOHZJRk5yYVhBZ2IzWmxjaUIwYUdVZ1lXNWpaWE4wYjNJZ1lXNWtJSFJvWlNCcGJXMWxaR2xoZEdVZ2MyVndZWEpoZEc5eUxpQlVjbUYyWlhKelpTQjFiblJwYkNCM1pTQm9hWFJjYmlBZ0x5OGdZVzV2ZEdobGNpQnpaWEJoY21GMGIzSWdiM0lnZDJVZ2NtVmhZMmdnZEdobElHVnVaQ0J2WmlCZ1pHVnpkR2x1WVhScGIyNUpSR0F1WEc0Z0lIWmhjaUJ6ZEdGeWRDQTlJR0Z1WTJWemRHOXlTVVF1YkdWdVozUm9JQ3NnVTBWUVFWSkJWRTlTWDB4RlRrZFVTRHRjYmlBZ2RtRnlJR2s3WEc0Z0lHWnZjaUFvYVNBOUlITjBZWEowT3lCcElEd2daR1Z6ZEdsdVlYUnBiMjVKUkM1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2hwYzBKdmRXNWtZWEo1S0dSbGMzUnBibUYwYVc5dVNVUXNJR2twS1NCN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHUmxjM1JwYm1GMGFXOXVTVVF1YzNWaWMzUnlLREFzSUdrcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGRITWdkR2hsSUc1bFlYSmxjM1FnWTI5dGJXOXVJR0Z1WTJWemRHOXlJRWxFSUc5bUlIUjNieUJKUkhNdVhHNGdLbHh1SUNvZ1ZYTnBibWNnZEdocGN5QkpSQ0J6WTJobGJXVXNJSFJvWlNCdVpXRnlaWE4wSUdOdmJXMXZiaUJoYm1ObGMzUnZjaUJKUkNCcGN5QjBhR1VnYkc5dVoyVnpkQ0JqYjIxdGIyNWNiaUFxSUhCeVpXWnBlQ0J2WmlCMGFHVWdkSGR2SUVsRWN5QjBhR0YwSUdsdGJXVmthV0YwWld4NUlIQnlaV05sWkdWa0lHRWdYQ0p0WVhKclpYSmNJaUJwYmlCaWIzUm9JSE4wY21sdVozTXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHOXVaVWxFWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RIZHZTVVJjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ1RtVmhjbVZ6ZENCamIyMXRiMjRnWVc1alpYTjBiM0lnU1VRc0lHOXlJSFJvWlNCbGJYQjBlU0J6ZEhKcGJtY2dhV1lnYm05dVpTNWNiaUFxSUVCd2NtbDJZWFJsWEc0Z0tpOWNibVoxYm1OMGFXOXVJR2RsZEVacGNuTjBRMjl0Ylc5dVFXNWpaWE4wYjNKSlJDaHZibVZKUkN3Z2RIZHZTVVFwSUh0Y2JpQWdkbUZ5SUcxcGJreGxibWQwYUNBOUlFMWhkR2d1YldsdUtHOXVaVWxFTG14bGJtZDBhQ3dnZEhkdlNVUXViR1Z1WjNSb0tUdGNiaUFnYVdZZ0tHMXBia3hsYm1kMGFDQTlQVDBnTUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUFuSnp0Y2JpQWdmVnh1SUNCMllYSWdiR0Z6ZEVOdmJXMXZiazFoY210bGNrbHVaR1Y0SUQwZ01EdGNiaUFnTHk4Z1ZYTmxJR0E4UFdBZ2RHOGdkSEpoZG1WeWMyVWdkVzUwYVd3Z2RHaGxJRndpUlU5TVhDSWdiMllnZEdobElITm9iM0owWlhJZ2MzUnlhVzVuTGx4dUlDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThQU0J0YVc1TVpXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2hwYzBKdmRXNWtZWEo1S0c5dVpVbEVMQ0JwS1NBbUppQnBjMEp2ZFc1a1lYSjVLSFIzYjBsRUxDQnBLU2tnZTF4dUlDQWdJQ0FnYkdGemRFTnZiVzF2YmsxaGNtdGxja2x1WkdWNElEMGdhVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLRzl1WlVsRUxtTm9ZWEpCZENocEtTQWhQVDBnZEhkdlNVUXVZMmhoY2tGMEtHa3BLU0I3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCOVhHNGdJSDFjYmlBZ2RtRnlJR3h2Ym1kbGMzUkRiMjF0YjI1SlJDQTlJRzl1WlVsRUxuTjFZbk4wY2lnd0xDQnNZWE4wUTI5dGJXOXVUV0Z5YTJWeVNXNWtaWGdwTzF4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUdselZtRnNhV1JKUkNoc2IyNW5aWE4wUTI5dGJXOXVTVVFwTEZ4dUlDQWdJQ2RuWlhSR2FYSnpkRU52YlcxdmJrRnVZMlZ6ZEc5eVNVUW9KWE1zSUNWektUb2dSWGh3WldOMFpXUWdZU0IyWVd4cFpDQlNaV0ZqZENCRVQwMGdTVVE2SUNWekp5eGNiaUFnSUNCdmJtVkpSQ3hjYmlBZ0lDQjBkMjlKUkN4Y2JpQWdJQ0JzYjI1blpYTjBRMjl0Ylc5dVNVUmNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaHBjMVpoYkdsa1NVUW9iRzl1WjJWemRFTnZiVzF2YmtsRUtTa3BPMXh1SUNCeVpYUjFjbTRnYkc5dVoyVnpkRU52YlcxdmJrbEVPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGUnlZWFpsY25ObGN5QjBhR1VnY0dGeVpXNTBJSEJoZEdnZ1ltVjBkMlZsYmlCMGQyOGdTVVJ6SUNobGFYUm9aWElnZFhBZ2IzSWdaRzkzYmlrdUlGUm9aU0JKUkhNZ2JYVnpkRnh1SUNvZ2JtOTBJR0psSUhSb1pTQnpZVzFsTENCaGJtUWdkR2hsY21VZ2JYVnpkQ0JsZUdsemRDQmhJSEJoY21WdWRDQndZWFJvSUdKbGRIZGxaVzRnZEdobGJTNGdTV1lnZEdobFhHNGdLaUJqWVd4c1ltRmpheUJ5WlhSMWNtNXpJR0JtWVd4elpXQXNJSFJ5WVhabGNuTmhiQ0JwY3lCemRHOXdjR1ZrTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3UDNOMGNtbHVaMzBnYzNSaGNuUWdTVVFnWVhRZ2QyaHBZMmdnZEc4Z2MzUmhjblFnZEhKaGRtVnljMkZzTGx4dUlDb2dRSEJoY21GdElIcy9jM1J5YVc1bmZTQnpkRzl3SUVsRUlHRjBJSGRvYVdOb0lIUnZJR1Z1WkNCMGNtRjJaWEp6WVd3dVhHNGdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0JqWWlCRFlXeHNZbUZqYXlCMGJ5QnBiblp2YTJVZ1pXRmphQ0JKUkNCM2FYUm9MbHh1SUNvZ1FIQmhjbUZ0SUhzL1ltOXZiR1ZoYm4wZ2MydHBjRVpwY25OMElGZG9aWFJvWlhJZ2IzSWdibTkwSUhSdklITnJhWEFnZEdobElHWnBjbk4wSUc1dlpHVXVYRzRnS2lCQWNHRnlZVzBnZXo5aWIyOXNaV0Z1ZlNCemEybHdUR0Z6ZENCWGFHVjBhR1Z5SUc5eUlHNXZkQ0IwYnlCemEybHdJSFJvWlNCc1lYTjBJRzV2WkdVdVhHNGdLaUJBY0hKcGRtRjBaVnh1SUNvdlhHNW1kVzVqZEdsdmJpQjBjbUYyWlhKelpWQmhjbVZ1ZEZCaGRHZ29jM1JoY25Rc0lITjBiM0FzSUdOaUxDQmhjbWNzSUhOcmFYQkdhWEp6ZEN3Z2MydHBjRXhoYzNRcElIdGNiaUFnYzNSaGNuUWdQU0J6ZEdGeWRDQjhmQ0FuSnp0Y2JpQWdjM1J2Y0NBOUlITjBiM0FnZkh3Z0p5YzdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdjM1JoY25RZ0lUMDlJSE4wYjNBc1hHNGdJQ0FnSjNSeVlYWmxjbk5sVUdGeVpXNTBVR0YwYUNndUxpNHBPaUJEWVc1dWIzUWdkSEpoZG1WeWMyVWdabkp2YlNCaGJtUWdkRzhnZEdobElITmhiV1VnU1VRc0lHQWxjMkF1Snl4Y2JpQWdJQ0J6ZEdGeWRGeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtITjBZWEowSUNFOVBTQnpkRzl3S1NrN1hHNGdJSFpoY2lCMGNtRjJaWEp6WlZWd0lEMGdhWE5CYm1ObGMzUnZja2xFVDJZb2MzUnZjQ3dnYzNSaGNuUXBPMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJSFJ5WVhabGNuTmxWWEFnZkh3Z2FYTkJibU5sYzNSdmNrbEVUMllvYzNSaGNuUXNJSE4wYjNBcExGeHVJQ0FnSUNkMGNtRjJaWEp6WlZCaGNtVnVkRkJoZEdnb0pYTXNJQ1Z6TENBdUxpNHBPaUJEWVc1dWIzUWdkSEpoZG1WeWMyVWdabkp2YlNCMGQyOGdTVVJ6SUhSb1lYUWdaRzhnSnlBclhHNGdJQ0FnSjI1dmRDQm9ZWFpsSUdFZ2NHRnlaVzUwSUhCaGRHZ3VKeXhjYmlBZ0lDQnpkR0Z5ZEN4Y2JpQWdJQ0J6ZEc5d1hHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2RISmhkbVZ5YzJWVmNDQjhmQ0JwYzBGdVkyVnpkRzl5U1VSUFppaHpkR0Z5ZEN3Z2MzUnZjQ2twS1R0Y2JpQWdMeThnVkhKaGRtVnljMlVnWm5KdmJTQmdjM1JoY25SZ0lIUnZJR0J6ZEc5d1lDQnZibVVnWkdWd2RHZ2dZWFFnWVNCMGFXMWxMbHh1SUNCMllYSWdaR1Z3ZEdnZ1BTQXdPMXh1SUNCMllYSWdkSEpoZG1WeWMyVWdQU0IwY21GMlpYSnpaVlZ3SUQ4Z1oyVjBVR0Z5Wlc1MFNVUWdPaUJuWlhST1pYaDBSR1Z6WTJWdVpHRnVkRWxFTzF4dUlDQm1iM0lnS0haaGNpQnBaQ0E5SUhOMFlYSjBPeUF2S2lCMWJuUnBiQ0JpY21WaGF5QXFMenNnYVdRZ1BTQjBjbUYyWlhKelpTaHBaQ3dnYzNSdmNDa3BJSHRjYmlBZ0lDQjJZWElnY21WME8xeHVJQ0FnSUdsbUlDZ29JWE5yYVhCR2FYSnpkQ0I4ZkNCcFpDQWhQVDBnYzNSaGNuUXBJQ1ltSUNnaGMydHBjRXhoYzNRZ2ZId2dhV1FnSVQwOUlITjBiM0FwS1NCN1hHNGdJQ0FnSUNCeVpYUWdQU0JqWWlocFpDd2dkSEpoZG1WeWMyVlZjQ3dnWVhKbktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tISmxkQ0E5UFQwZ1ptRnNjMlVnZkh3Z2FXUWdQVDA5SUhOMGIzQXBJSHRjYmlBZ0lDQWdJQzh2SUU5dWJIa2dZbkpsWVdzZ0x5OWhablJsY2k4dklIWnBjMmwwYVc1bklHQnpkRzl3WUM1Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnWkdWd2RHZ3JLeUE4SUUxQldGOVVVa1ZGWDBSRlVGUklMRnh1SUNBZ0lDQWdKM1J5WVhabGNuTmxVR0Z5Wlc1MFVHRjBhQ2dsY3l3Z0pYTXNJQzR1TGlrNklFUmxkR1ZqZEdWa0lHRnVJR2x1Wm1sdWFYUmxJR3h2YjNBZ2QyaHBiR1VnSnlBclhHNGdJQ0FnSUNBbmRISmhkbVZ5YzJsdVp5QjBhR1VnVW1WaFkzUWdSRTlOSUVsRUlIUnlaV1V1SUZSb2FYTWdiV0Y1SUdKbElHUjFaU0IwYnlCdFlXeG1iM0p0WldRZ1NVUnpPaUFsY3ljc1hHNGdJQ0FnSUNCemRHRnlkQ3dnYzNSdmNGeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9aR1Z3ZEdnckt5QThJRTFCV0Y5VVVrVkZYMFJGVUZSSUtTazdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJOWVc1aFoyVnpJSFJvWlNCSlJITWdZWE56YVdkdVpXUWdkRzhnUkU5TklISmxjSEpsYzJWdWRHRjBhVzl1Y3lCdlppQlNaV0ZqZENCamIyMXdiMjVsYm5SekxpQlVhR2x6WEc0Z0tpQjFjMlZ6SUdFZ2MzQmxZMmxtYVdNZ2MyTm9aVzFsSUdsdUlHOXlaR1Z5SUhSdklIUnlZWFpsY25ObElIUm9aU0JFVDAwZ1pXWm1hV05wWlc1MGJIa2dLR1V1Wnk0Z2FXNWNiaUFxSUc5eVpHVnlJSFJ2SUhOcGJYVnNZWFJsSUdWMlpXNTBjeWt1WEc0Z0tseHVJQ29nUUdsdWRHVnlibUZzWEc0Z0tpOWNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5QTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRMjl1YzNSeWRXTjBjeUJoSUZKbFlXTjBJSEp2YjNRZ1NVUmNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCQklGSmxZV04wSUhKdmIzUWdTVVF1WEc0Z0lDQXFMMXh1SUNCamNtVmhkR1ZTWldGamRGSnZiM1JKUkRvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUdkbGRGSmxZV04wVW05dmRFbEVVM1J5YVc1bktGSmxZV04wVW05dmRFbHVaR1Y0TG1OeVpXRjBaVkpsWVdOMFVtOXZkRWx1WkdWNEtDa3BPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCRGIyNXpkSEoxWTNSeklHRWdVbVZoWTNRZ1NVUWdZbmtnYW05cGJtbHVaeUJoSUhKdmIzUWdTVVFnZDJsMGFDQmhJRzVoYldVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnliMjkwU1VRZ1VtOXZkQ0JKUkNCdlppQmhJSEJoY21WdWRDQmpiMjF3YjI1bGJuUXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdVlXMWxJRUVnWTI5dGNHOXVaVzUwSjNNZ2JtRnRaU0FvWVhNZ1pteGhkSFJsYm1Wa0lHTm9hV3hrY21WdUtTNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCQklGSmxZV04wSUVsRUxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHTnlaV0YwWlZKbFlXTjBTVVE2SUdaMWJtTjBhVzl1S0hKdmIzUkpSQ3dnYm1GdFpTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCeWIyOTBTVVFnS3lCdVlXMWxPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCSFpYUnpJSFJvWlNCRVQwMGdTVVFnYjJZZ2RHaGxJRkpsWVdOMElHTnZiWEJ2Ym1WdWRDQjBhR0YwSUdseklIUm9aU0J5YjI5MElHOW1JSFJvWlNCMGNtVmxJSFJvWVhSY2JpQWdJQ29nWTI5dWRHRnBibk1nZEdobElGSmxZV04wSUdOdmJYQnZibVZ1ZENCM2FYUm9JSFJvWlNCemRYQndiR2xsWkNCRVQwMGdTVVF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkVUMDBnU1VRZ2IyWWdZU0JTWldGamRDQmpiMjF3YjI1bGJuUXVYRzRnSUNBcUlFQnlaWFIxY200Z2V6OXpkSEpwYm1kOUlFUlBUU0JKUkNCdlppQjBhR1VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBJSFJvWVhRZ2FYTWdkR2hsSUhKdmIzUXVYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdaMlYwVW1WaFkzUlNiMjkwU1VSR2NtOXRUbTlrWlVsRU9pQm1kVzVqZEdsdmJpaHBaQ2tnZTF4dUlDQWdJR2xtSUNocFpDQW1KaUJwWkM1amFHRnlRWFFvTUNrZ1BUMDlJRk5GVUVGU1FWUlBVaUFtSmlCcFpDNXNaVzVuZEdnZ1BpQXhLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2FXNWtaWGdnUFNCcFpDNXBibVJsZUU5bUtGTkZVRUZTUVZSUFVpd2dNU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhVzVrWlhnZ1BpQXRNU0EvSUdsa0xuTjFZbk4wY2lnd0xDQnBibVJsZUNrZ09pQnBaRHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZSeVlYWmxjbk5sY3lCMGFHVWdTVVFnYUdsbGNtRnlZMmg1SUdGdVpDQnBiblp2YTJWeklIUm9aU0J6ZFhCd2JHbGxaQ0JnWTJKZ0lHOXVJR0Z1ZVNCSlJITWdkR2hoZEZ4dUlDQWdLaUJ6YUc5MWJHUWdkMjkxYkdRZ2NtVmpaV2wyWlNCaElHQnRiM1Z6WlVWdWRHVnlZQ0J2Y2lCZ2JXOTFjMlZNWldGMlpXQWdaWFpsYm5RdVhHNGdJQ0FxWEc0Z0lDQXFJRTVQVkVVNklFUnZaWE1nYm05MElHbHVkbTlyWlNCMGFHVWdZMkZzYkdKaFkyc2diMjRnZEdobElHNWxZWEpsYzNRZ1kyOXRiVzl1SUdGdVkyVnpkRzl5SUdKbFkyRjFjMlZjYmlBZ0lDb2dibTkwYUdsdVp5QmNJbVZ1ZEdWeVpXUmNJaUJ2Y2lCY0lteGxablJjSWlCMGFHRjBJR1ZzWlcxbGJuUXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JzWldGMlpVbEVJRWxFSUdKbGFXNW5JR3hsWm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JsYm5SbGNrbEVJRWxFSUdKbGFXNW5JR1Z1ZEdWeVpXUXVYRzRnSUNBcUlFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlHTmlJRU5oYkd4aVlXTnJJSFJ2SUdsdWRtOXJaU0J2YmlCbFlXTm9JR1Z1ZEdWeVpXUXZiR1ZtZENCSlJDNWNiaUFnSUNvZ1FIQmhjbUZ0SUhzcWZTQjFjRUZ5WnlCQmNtZDFiV1Z1ZENCMGJ5QnBiblp2YTJVZ2RHaGxJR05oYkd4aVlXTnJJSGRwZEdnZ2IyNGdiR1ZtZENCSlJITXVYRzRnSUNBcUlFQndZWEpoYlNCN0tuMGdaRzkzYmtGeVp5QkJjbWQxYldWdWRDQjBieUJwYm5admEyVWdkR2hsSUdOaGJHeGlZV05ySUhkcGRHZ2diMjRnWlc1MFpYSmxaQ0JKUkhNdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ2RISmhkbVZ5YzJWRmJuUmxja3hsWVhabE9pQm1kVzVqZEdsdmJpaHNaV0YyWlVsRUxDQmxiblJsY2tsRUxDQmpZaXdnZFhCQmNtY3NJR1J2ZDI1QmNtY3BJSHRjYmlBZ0lDQjJZWElnWVc1alpYTjBiM0pKUkNBOUlHZGxkRVpwY25OMFEyOXRiVzl1UVc1alpYTjBiM0pKUkNoc1pXRjJaVWxFTENCbGJuUmxja2xFS1R0Y2JpQWdJQ0JwWmlBb1lXNWpaWE4wYjNKSlJDQWhQVDBnYkdWaGRtVkpSQ2tnZTF4dUlDQWdJQ0FnZEhKaGRtVnljMlZRWVhKbGJuUlFZWFJvS0d4bFlYWmxTVVFzSUdGdVkyVnpkRzl5U1VRc0lHTmlMQ0IxY0VGeVp5d2dabUZzYzJVc0lIUnlkV1VwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWVc1alpYTjBiM0pKUkNBaFBUMGdaVzUwWlhKSlJDa2dlMXh1SUNBZ0lDQWdkSEpoZG1WeWMyVlFZWEpsYm5SUVlYUm9LR0Z1WTJWemRHOXlTVVFzSUdWdWRHVnlTVVFzSUdOaUxDQmtiM2R1UVhKbkxDQjBjblZsTENCbVlXeHpaU2s3WEc0Z0lDQWdmVnh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVGFXMTFiR0YwWlhNZ2RHaGxJSFJ5WVhabGNuTmhiQ0J2WmlCaElIUjNieTF3YUdGelpTd2dZMkZ3ZEhWeVpTOWlkV0ppYkdVZ1pYWmxiblFnWkdsemNHRjBZMmd1WEc0Z0lDQXFYRzRnSUNBcUlFNVBWRVU2SUZSb2FYTWdkSEpoZG1WeWMyRnNJR2hoY0hCbGJuTWdiMjRnU1VSeklIZHBkR2h2ZFhRZ2RHOTFZMmhwYm1jZ2RHaGxJRVJQVFM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIUmhjbWRsZEVsRUlFbEVJRzltSUhSb1pTQjBZWEpuWlhRZ2JtOWtaUzVjYmlBZ0lDb2dRSEJoY21GdElIdG1kVzVqZEdsdmJuMGdZMklnUTJGc2JHSmhZMnNnZEc4Z2FXNTJiMnRsTGx4dUlDQWdLaUJBY0dGeVlXMGdleXA5SUdGeVp5QkJjbWQxYldWdWRDQjBieUJwYm5admEyVWdkR2hsSUdOaGJHeGlZV05ySUhkcGRHZ3VYRzRnSUNBcUlFQnBiblJsY201aGJGeHVJQ0FnS2k5Y2JpQWdkSEpoZG1WeWMyVlVkMjlRYUdGelpUb2dablZ1WTNScGIyNG9kR0Z5WjJWMFNVUXNJR05pTENCaGNtY3BJSHRjYmlBZ0lDQnBaaUFvZEdGeVoyVjBTVVFwSUh0Y2JpQWdJQ0FnSUhSeVlYWmxjbk5sVUdGeVpXNTBVR0YwYUNnbkp5d2dkR0Z5WjJWMFNVUXNJR05pTENCaGNtY3NJSFJ5ZFdVc0lHWmhiSE5sS1R0Y2JpQWdJQ0FnSUhSeVlYWmxjbk5sVUdGeVpXNTBVR0YwYUNoMFlYSm5aWFJKUkN3Z0p5Y3NJR05pTENCaGNtY3NJR1poYkhObExDQjBjblZsS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGUnlZWFpsY25ObElHRWdibTlrWlNCSlJDd2dZMkZzYkdsdVp5QjBhR1VnYzNWd2NHeHBaV1FnWUdOaVlDQm1iM0lnWldGamFDQmhibU5sYzNSdmNpQkpSQzRnUm05eVhHNGdJQ0FxSUdWNFlXMXdiR1VzSUhCaGMzTnBibWNnWUM0d0xpUnliM2N0TUM0eFlDQjNiM1ZzWkNCeVpYTjFiSFFnYVc0Z1lHTmlZQ0JuWlhSMGFXNW5JR05oYkd4bFpGeHVJQ0FnS2lCM2FYUm9JR0F1TUdBc0lHQXVNQzRrY205M0xUQmdMQ0JoYm1RZ1lDNHdMaVJ5YjNjdE1DNHhZQzVjYmlBZ0lDcGNiaUFnSUNvZ1RrOVVSVG9nVkdocGN5QjBjbUYyWlhKellXd2dhR0Z3Y0dWdWN5QnZiaUJKUkhNZ2QybDBhRzkxZENCMGIzVmphR2x1WnlCMGFHVWdSRTlOTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RHRnlaMlYwU1VRZ1NVUWdiMllnZEdobElIUmhjbWRsZENCdWIyUmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpZaUJEWVd4c1ltRmpheUIwYnlCcGJuWnZhMlV1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdLbjBnWVhKbklFRnlaM1Z0Wlc1MElIUnZJR2x1ZG05clpTQjBhR1VnWTJGc2JHSmhZMnNnZDJsMGFDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQjBjbUYyWlhKelpVRnVZMlZ6ZEc5eWN6b2dablZ1WTNScGIyNG9kR0Z5WjJWMFNVUXNJR05pTENCaGNtY3BJSHRjYmlBZ0lDQjBjbUYyWlhKelpWQmhjbVZ1ZEZCaGRHZ29KeWNzSUhSaGNtZGxkRWxFTENCallpd2dZWEpuTENCMGNuVmxMQ0JtWVd4elpTazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVWNGNHOXpaV1FnWm05eUlIVnVhWFFnZEdWemRHbHVaeTVjYmlBZ0lDb2dRSEJ5YVhaaGRHVmNiaUFnSUNvdlhHNGdJRjluWlhSR2FYSnpkRU52YlcxdmJrRnVZMlZ6ZEc5eVNVUTZJR2RsZEVacGNuTjBRMjl0Ylc5dVFXNWpaWE4wYjNKSlJDeGNibHh1SUNBdktpcGNiaUFnSUNvZ1JYaHdiM05sWkNCbWIzSWdkVzVwZENCMFpYTjBhVzVuTGx4dUlDQWdLaUJBY0hKcGRtRjBaVnh1SUNBZ0tpOWNiaUFnWDJkbGRFNWxlSFJFWlhOalpXNWtZVzUwU1VRNklHZGxkRTVsZUhSRVpYTmpaVzVrWVc1MFNVUXNYRzVjYmlBZ2FYTkJibU5sYzNSdmNrbEVUMlk2SUdselFXNWpaWE4wYjNKSlJFOW1MRnh1WEc0Z0lGTkZVRUZTUVZSUFVqb2dVMFZRUVZKQlZFOVNYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSSmJuTjBZVzVqWlVoaGJtUnNaWE03WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RJbnN0YW5jZU1hcFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICogaW5zdGFuY2UgKGtleSkgYW5kIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAodmFsdWUpLiBUaGlzIGFsbG93cyBwdWJsaWNcbiAqIG1ldGhvZHMgdG8gYWNjZXB0IHRoZSB1c2VyIGZhY2luZyBpbnN0YW5jZSBhcyBhbiBhcmd1bWVudCBhbmQgbWFwIHRoZW0gYmFja1xuICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAqL1xuXG4vLyBUT0RPOiBSZXBsYWNlIHRoaXMgd2l0aCBFUzY6IHZhciBSZWFjdEluc3RhbmNlTWFwID0gbmV3IE1hcCgpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSB7XG5cbiAgLyoqXG4gICAqIFRoaXMgQVBJIHNob3VsZCBiZSBjYWxsZWQgYGRlbGV0ZWAgYnV0IHdlJ2QgaGF2ZSB0byBtYWtlIHN1cmUgdG8gYWx3YXlzXG4gICAqIHRyYW5zZm9ybSB0aGVzZSB0byBzdHJpbmdzIGZvciBJRSBzdXBwb3J0LiBXaGVuIHRoaXMgdHJhbnNmb3JtIGlzIGZ1bGx5XG4gICAqIHN1cHBvcnRlZCB3ZSBjYW4gcmVuYW1lIGl0LlxuICAgKi9cbiAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHtcbiAgICBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgfSxcblxuICBnZXQ6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZTtcbiAgfSxcblxuICBoYXM6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSAhPT0gdW5kZWZpbmVkO1xuICB9LFxuXG4gIHNldDogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gdmFsdWU7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEluc3RhbmNlTWFwO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdExpZmVDeWNsZVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBtYW5hZ2VzIHRoZSBib29ra2VlcGluZyB3aGVuIGEgY29tcG9uZW50IGlzIGluIHRoZSBwcm9jZXNzXG4gKiBvZiBiZWluZyBtb3VudGVkIG9yIGJlaW5nIHVubW91bnRlZC4gVGhpcyBpcyB1c2VkIGFzIGEgd2F5IHRvIGVuZm9yY2VcbiAqIGludmFyaWFudHMgKG9yIHdhcm5pbmdzKSB3aGVuIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBjYWxsXG4gKiBzZXRTdGF0ZS9mb3JjZVVwZGF0ZS5cbiAqXG4gKiBjdXJyZW50bHlNb3VudGluZ0luc3RhbmNlOiBEdXJpbmcgdGhlIGNvbnN0cnVjdGlvbiBwaGFzZSwgaXQgaXMgbm90IHBvc3NpYmxlXG4gKiB0byB0cmlnZ2VyIGFuIHVwZGF0ZSBzaW5jZSB0aGUgaW5zdGFuY2UgaXMgbm90IGZ1bGx5IG1vdW50ZWQgeWV0LiBIb3dldmVyLCB3ZVxuICogY3VycmVudGx5IGFsbG93IHRoaXMgYXMgYSBjb252ZW5pZW5jZSBmb3IgbXV0YXRpbmcgdGhlIGluaXRpYWwgc3RhdGUuXG4gKlxuICogY3VycmVudGx5VW5tb3VudGluZ0luc3RhbmNlOiBEdXJpbmcgdGhlIHVubW91bnRpbmcgcGhhc2UsIHRoZSBpbnN0YW5jZSBpc1xuICogc3RpbGwgbW91bnRlZCBhbmQgY2FuIHRoZXJlZm9yZSBzY2hlZHVsZSBhbiB1cGRhdGUuIEhvd2V2ZXIsIHRoaXMgaXMgbm90XG4gKiByZWNvbW1lbmRlZCBhbmQgcHJvYmFibHkgYW4gZXJyb3Igc2luY2UgaXQncyBhYm91dCB0byBiZSB1bm1vdW50ZWQuXG4gKiBUaGVyZWZvcmUgd2Ugc3RpbGwgd2FudCB0byB0cmlnZ2VyIGluIGFuIGVycm9yIGZvciB0aGF0IGNhc2UuXG4gKi9cblxudmFyIFJlYWN0TGlmZUN5Y2xlID0ge1xuICBjdXJyZW50bHlNb3VudGluZ0luc3RhbmNlOiBudWxsLFxuICBjdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2U6IG51bGxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RMaWZlQ3ljbGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RMaW5rXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBSZWFjdExpbmsgZW5jYXBzdWxhdGVzIGEgY29tbW9uIHBhdHRlcm4gaW4gd2hpY2ggYSBjb21wb25lbnQgd2FudHMgdG8gbW9kaWZ5XG4gKiBhIHByb3AgcmVjZWl2ZWQgZnJvbSBpdHMgcGFyZW50LiBSZWFjdExpbmsgYWxsb3dzIHRoZSBwYXJlbnQgdG8gcGFzcyBkb3duIGFcbiAqIHZhbHVlIGNvdXBsZWQgd2l0aCBhIGNhbGxiYWNrIHRoYXQsIHdoZW4gaW52b2tlZCwgZXhwcmVzc2VzIGFuIGludGVudCB0b1xuICogbW9kaWZ5IHRoYXQgdmFsdWUuIEZvciBleGFtcGxlOlxuICpcbiAqIFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAqICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHtcbiAqICAgICByZXR1cm4ge3ZhbHVlOiAnJ307XG4gKiAgIH0sXG4gKiAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gKiAgICAgdmFyIHZhbHVlTGluayA9IG5ldyBSZWFjdExpbmsodGhpcy5zdGF0ZS52YWx1ZSwgdGhpcy5faGFuZGxlVmFsdWVDaGFuZ2UpO1xuICogICAgIHJldHVybiA8aW5wdXQgdmFsdWVMaW5rPXt2YWx1ZUxpbmt9IC8+O1xuICogICB9LFxuICogICB0aGlzLl9oYW5kbGVWYWx1ZUNoYW5nZTogZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAqICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogbmV3VmFsdWV9KTtcbiAqICAgfVxuICogfSk7XG4gKlxuICogV2UgaGF2ZSBwcm92aWRlZCBzb21lIHN1Z2FyeSBtaXhpbnMgdG8gbWFrZSB0aGUgY3JlYXRpb24gYW5kXG4gKiBjb25zdW1wdGlvbiBvZiBSZWFjdExpbmsgZWFzaWVyOyBzZWUgTGlua2VkVmFsdWVVdGlscyBhbmQgTGlua2VkU3RhdGVNaXhpbi5cbiAqL1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKFwiLi9SZWFjdFwiKTtcblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxpbmtcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlcXVlc3RDaGFuZ2UgY2FsbGJhY2sgdG8gcmVxdWVzdCBhIGNoYW5nZVxuICovXG5mdW5jdGlvbiBSZWFjdExpbmsodmFsdWUsIHJlcXVlc3RDaGFuZ2UpIHtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB0aGlzLnJlcXVlc3RDaGFuZ2UgPSByZXF1ZXN0Q2hhbmdlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wVHlwZSB0aGF0IGVuZm9yY2VzIHRoZSBSZWFjdExpbmsgQVBJIGFuZCBvcHRpb25hbGx5IGNoZWNrcyB0aGVcbiAqIHR5cGUgb2YgdGhlIHZhbHVlIGJlaW5nIHBhc3NlZCBpbnNpZGUgdGhlIGxpbmsuIEV4YW1wbGU6XG4gKlxuICogTXlDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICogICB0YWJJbmRleExpbms6IFJlYWN0TGluay5Qcm9wVHlwZXMubGluayhSZWFjdC5Qcm9wVHlwZXMubnVtYmVyKVxuICogfVxuICovXG5mdW5jdGlvbiBjcmVhdGVMaW5rVHlwZUNoZWNrZXIobGlua1R5cGUpIHtcbiAgdmFyIHNoYXBlcyA9IHtcbiAgICB2YWx1ZTogdHlwZW9mIGxpbmtUeXBlID09PSAndW5kZWZpbmVkJyA/XG4gICAgICBSZWFjdC5Qcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQgOlxuICAgICAgbGlua1R5cGUuaXNSZXF1aXJlZCxcbiAgICByZXF1ZXN0Q2hhbmdlOiBSZWFjdC5Qcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gIH07XG4gIHJldHVybiBSZWFjdC5Qcm9wVHlwZXMuc2hhcGUoc2hhcGVzKTtcbn1cblxuUmVhY3RMaW5rLlByb3BUeXBlcyA9IHtcbiAgbGluazogY3JlYXRlTGlua1R5cGVDaGVja2VyXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TGluaztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdE1hcmt1cENoZWNrc3VtXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWRsZXIzMiA9IHJlcXVpcmUoXCIuL2FkbGVyMzJcIik7XG5cbnZhciBSZWFjdE1hcmt1cENoZWNrc3VtID0ge1xuICBDSEVDS1NVTV9BVFRSX05BTUU6ICdkYXRhLXJlYWN0LWNoZWNrc3VtJyxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgc3RyaW5nXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTWFya3VwIHN0cmluZyB3aXRoIGNoZWNrc3VtIGF0dHJpYnV0ZSBhdHRhY2hlZFxuICAgKi9cbiAgYWRkQ2hlY2tzdW1Ub01hcmt1cDogZnVuY3Rpb24obWFya3VwKSB7XG4gICAgdmFyIGNoZWNrc3VtID0gYWRsZXIzMihtYXJrdXApO1xuICAgIHJldHVybiBtYXJrdXAucmVwbGFjZShcbiAgICAgICc+JyxcbiAgICAgICcgJyArIFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FICsgJz1cIicgKyBjaGVja3N1bSArICdcIj4nXG4gICAgKTtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCB0byB1c2VcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50IHJvb3QgUmVhY3QgZWxlbWVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciBvciBub3QgdGhlIG1hcmt1cCBpcyB0aGUgc2FtZVxuICAgKi9cbiAgY2FuUmV1c2VNYXJrdXA6IGZ1bmN0aW9uKG1hcmt1cCwgZWxlbWVudCkge1xuICAgIHZhciBleGlzdGluZ0NoZWNrc3VtID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXG4gICAgICBSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRVxuICAgICk7XG4gICAgZXhpc3RpbmdDaGVja3N1bSA9IGV4aXN0aW5nQ2hlY2tzdW0gJiYgcGFyc2VJbnQoZXhpc3RpbmdDaGVja3N1bSwgMTApO1xuICAgIHZhciBtYXJrdXBDaGVja3N1bSA9IGFkbGVyMzIobWFya3VwKTtcbiAgICByZXR1cm4gbWFya3VwQ2hlY2tzdW0gPT09IGV4aXN0aW5nQ2hlY2tzdW07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNYXJrdXBDaGVja3N1bTtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RNb3VudFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZShcIi4vRE9NUHJvcGVydHlcIik7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFZhbGlkYXRvclwiKTtcbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbXB0eUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzXCIpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlTWFwXCIpO1xudmFyIFJlYWN0TWFya3VwQ2hlY2tzdW0gPSByZXF1aXJlKFwiLi9SZWFjdE1hcmt1cENoZWNrc3VtXCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdFJlY29uY2lsZXJcIik7XG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlUXVldWVcIik7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZShcIi4vUmVhY3RVcGRhdGVzXCIpO1xuXG52YXIgZW1wdHlPYmplY3QgPSByZXF1aXJlKFwiLi9lbXB0eU9iamVjdFwiKTtcbnZhciBjb250YWluc05vZGUgPSByZXF1aXJlKFwiLi9jb250YWluc05vZGVcIik7XG52YXIgZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyID0gcmVxdWlyZShcIi4vZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyXCIpO1xudmFyIGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50XCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciBzZXRJbm5lckhUTUwgPSByZXF1aXJlKFwiLi9zZXRJbm5lckhUTUxcIik7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9zaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIFNFUEFSQVRPUiA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLlNFUEFSQVRPUjtcblxudmFyIEFUVFJfTkFNRSA9IERPTVByb3BlcnR5LklEX0FUVFJJQlVURV9OQU1FO1xudmFyIG5vZGVDYWNoZSA9IHt9O1xuXG52YXIgRUxFTUVOVF9OT0RFX1RZUEUgPSAxO1xudmFyIERPQ19OT0RFX1RZUEUgPSA5O1xuXG4vKiogTWFwcGluZyBmcm9tIHJlYWN0Um9vdElEIHRvIFJlYWN0IGNvbXBvbmVudCBpbnN0YW5jZS4gKi9cbnZhciBpbnN0YW5jZXNCeVJlYWN0Um9vdElEID0ge307XG5cbi8qKiBNYXBwaW5nIGZyb20gcmVhY3RSb290SUQgdG8gYGNvbnRhaW5lcmAgbm9kZXMuICovXG52YXIgY29udGFpbmVyc0J5UmVhY3RSb290SUQgPSB7fTtcblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAvKiogX19ERVZfXy1vbmx5IG1hcHBpbmcgZnJvbSByZWFjdFJvb3RJRCB0byByb290IGVsZW1lbnRzLiAqL1xuICB2YXIgcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRCA9IHt9O1xufVxuXG4vLyBVc2VkIHRvIHN0b3JlIGJyZWFkdGgtZmlyc3Qgc2VhcmNoIHN0YXRlIGluIGZpbmRDb21wb25lbnRSb290LlxudmFyIGZpbmRDb21wb25lbnRSb290UmV1c2FibGVBcnJheSA9IFtdO1xuXG4vKipcbiAqIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gKiB0aGF0J3Mgbm90IGNvbW1vbiBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHdoZXJlIHRoZSBzdHJpbmdzIGRpdmVyZ2VcbiAqL1xuZnVuY3Rpb24gZmlyc3REaWZmZXJlbmNlSW5kZXgoc3RyaW5nMSwgc3RyaW5nMikge1xuICB2YXIgbWluTGVuID0gTWF0aC5taW4oc3RyaW5nMS5sZW5ndGgsIHN0cmluZzIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW5MZW47IGkrKykge1xuICAgIGlmIChzdHJpbmcxLmNoYXJBdChpKSAhPT0gc3RyaW5nMi5jaGFyQXQoaSkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nMS5sZW5ndGggPT09IHN0cmluZzIubGVuZ3RoID8gLTEgOiBtaW5MZW47XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdGhhdCBtYXkgY29udGFpbiBhIFJlYWN0IGNvbXBvbmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IEEgXCJyZWFjdFJvb3RcIiBJRCwgaWYgYSBSZWFjdCBjb21wb25lbnQgaXMgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdElEKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgcmV0dXJuIHJvb3RFbGVtZW50ICYmIFJlYWN0TW91bnQuZ2V0SUQocm9vdEVsZW1lbnQpO1xufVxuXG4vKipcbiAqIEFjY2Vzc2luZyBub2RlW0FUVFJfTkFNRV0gb3IgY2FsbGluZyBnZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKSBvbiBhIGZvcm1cbiAqIGVsZW1lbnQgY2FuIHJldHVybiBpdHMgY29udHJvbCB3aG9zZSBuYW1lIG9yIElEIGVxdWFscyBBVFRSX05BTUUuIEFsbFxuICogRE9NIG5vZGVzIHN1cHBvcnQgYGdldEF0dHJpYnV0ZU5vZGVgIGJ1dCB0aGlzIGNhbiBhbHNvIGdldCBjYWxsZWQgb25cbiAqIG90aGVyIG9iamVjdHMgc28ganVzdCByZXR1cm4gJycgaWYgd2UncmUgZ2l2ZW4gc29tZXRoaW5nIG90aGVyIHRoYW4gYVxuICogRE9NIG5vZGUgKHN1Y2ggYXMgd2luZG93KS5cbiAqXG4gKiBAcGFyYW0gez9ET01FbGVtZW50fERPTVdpbmRvd3xET01Eb2N1bWVudHxET01UZXh0Tm9kZX0gbm9kZSBET00gbm9kZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gSUQgb2YgdGhlIHN1cHBsaWVkIGBkb21Ob2RlYC5cbiAqL1xuZnVuY3Rpb24gZ2V0SUQobm9kZSkge1xuICB2YXIgaWQgPSBpbnRlcm5hbEdldElEKG5vZGUpO1xuICBpZiAoaWQpIHtcbiAgICBpZiAobm9kZUNhY2hlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgdmFyIGNhY2hlZCA9IG5vZGVDYWNoZVtpZF07XG4gICAgICBpZiAoY2FjaGVkICE9PSBub2RlKSB7XG4gICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgICAgIWlzVmFsaWQoY2FjaGVkLCBpZCksXG4gICAgICAgICAgJ1JlYWN0TW91bnQ6IFR3byB2YWxpZCBidXQgdW5lcXVhbCBub2RlcyB3aXRoIHRoZSBzYW1lIGAlc2A6ICVzJyxcbiAgICAgICAgICBBVFRSX05BTUUsIGlkXG4gICAgICAgICkgOiBpbnZhcmlhbnQoIWlzVmFsaWQoY2FjaGVkLCBpZCkpKTtcblxuICAgICAgICBub2RlQ2FjaGVbaWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZUNhY2hlW2lkXSA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBpbnRlcm5hbEdldElEKG5vZGUpIHtcbiAgLy8gSWYgbm9kZSBpcyBzb21ldGhpbmcgbGlrZSBhIHdpbmRvdywgZG9jdW1lbnQsIG9yIHRleHQgbm9kZSwgbm9uZSBvZlxuICAvLyB3aGljaCBzdXBwb3J0IGF0dHJpYnV0ZXMgb3IgYSAuZ2V0QXR0cmlidXRlIG1ldGhvZCwgZ3JhY2VmdWxseSByZXR1cm5cbiAgLy8gdGhlIGVtcHR5IHN0cmluZywgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIG1pc3NpbmcuXG4gIHJldHVybiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgfHwgJyc7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgUmVhY3Qtc3BlY2lmaWMgSUQgb2YgdGhlIGdpdmVuIG5vZGUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIFRoZSBET00gbm9kZSB3aG9zZSBJRCB3aWxsIGJlIHNldC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgdmFsdWUgb2YgdGhlIElEIGF0dHJpYnV0ZS5cbiAqL1xuZnVuY3Rpb24gc2V0SUQobm9kZSwgaWQpIHtcbiAgdmFyIG9sZElEID0gaW50ZXJuYWxHZXRJRChub2RlKTtcbiAgaWYgKG9sZElEICE9PSBpZCkge1xuICAgIGRlbGV0ZSBub2RlQ2FjaGVbb2xkSURdO1xuICB9XG4gIG5vZGUuc2V0QXR0cmlidXRlKEFUVFJfTkFNRSwgaWQpO1xuICBub2RlQ2FjaGVbaWRdID0gbm9kZTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgbm9kZSB3aXRoIHRoZSBzdXBwbGllZCBSZWFjdC1nZW5lcmF0ZWQgRE9NIElELlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBBIFJlYWN0LWdlbmVyYXRlZCBET00gSUQuXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fSBET00gbm9kZSB3aXRoIHRoZSBzdXBwbGVkIGBpZGAuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZShpZCkge1xuICBpZiAoIW5vZGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpZCkgfHwgIWlzVmFsaWQobm9kZUNhY2hlW2lkXSwgaWQpKSB7XG4gICAgbm9kZUNhY2hlW2lkXSA9IFJlYWN0TW91bnQuZmluZFJlYWN0Tm9kZUJ5SUQoaWQpO1xuICB9XG4gIHJldHVybiBub2RlQ2FjaGVbaWRdO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBub2RlIHdpdGggdGhlIHN1cHBsaWVkIHB1YmxpYyBSZWFjdCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0geyp9IGluc3RhbmNlIEEgcHVibGljIFJlYWN0IGluc3RhbmNlLlxuICogQHJldHVybiB7P0RPTUVsZW1lbnR9IERPTSBub2RlIHdpdGggdGhlIHN1cHBsZWQgYGlkYC5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHZhciBpZCA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KGluc3RhbmNlKS5fcm9vdE5vZGVJRDtcbiAgaWYgKFJlYWN0RW1wdHlDb21wb25lbnQuaXNOdWxsQ29tcG9uZW50SUQoaWQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFub2RlQ2FjaGUuaGFzT3duUHJvcGVydHkoaWQpIHx8ICFpc1ZhbGlkKG5vZGVDYWNoZVtpZF0sIGlkKSkge1xuICAgIG5vZGVDYWNoZVtpZF0gPSBSZWFjdE1vdW50LmZpbmRSZWFjdE5vZGVCeUlEKGlkKTtcbiAgfVxuICByZXR1cm4gbm9kZUNhY2hlW2lkXTtcbn1cblxuLyoqXG4gKiBBIG5vZGUgaXMgXCJ2YWxpZFwiIGlmIGl0IGlzIGNvbnRhaW5lZCBieSBhIGN1cnJlbnRseSBtb3VudGVkIGNvbnRhaW5lci5cbiAqXG4gKiBUaGlzIG1lYW5zIHRoYXQgdGhlIG5vZGUgZG9lcyBub3QgaGF2ZSB0byBiZSBjb250YWluZWQgYnkgYSBkb2N1bWVudCBpblxuICogb3JkZXIgdG8gYmUgY29uc2lkZXJlZCB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gez9ET01FbGVtZW50fSBub2RlIFRoZSBjYW5kaWRhdGUgRE9NIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIGV4cGVjdGVkIElEIG9mIHRoZSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbm9kZSBpcyBjb250YWluZWQgYnkgYSBtb3VudGVkIGNvbnRhaW5lci5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZChub2RlLCBpZCkge1xuICBpZiAobm9kZSkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBpbnRlcm5hbEdldElEKG5vZGUpID09PSBpZCxcbiAgICAgICdSZWFjdE1vdW50OiBVbmV4cGVjdGVkIG1vZGlmaWNhdGlvbiBvZiBgJXNgJyxcbiAgICAgIEFUVFJfTkFNRVxuICAgICkgOiBpbnZhcmlhbnQoaW50ZXJuYWxHZXRJRChub2RlKSA9PT0gaWQpKTtcblxuICAgIHZhciBjb250YWluZXIgPSBSZWFjdE1vdW50LmZpbmRSZWFjdENvbnRhaW5lckZvcklEKGlkKTtcbiAgICBpZiAoY29udGFpbmVyICYmIGNvbnRhaW5zTm9kZShjb250YWluZXIsIG5vZGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2F1c2VzIHRoZSBjYWNoZSB0byBmb3JnZXQgYWJvdXQgb25lIFJlYWN0LXNwZWNpZmljIElELlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgdG8gZm9yZ2V0LlxuICovXG5mdW5jdGlvbiBwdXJnZUlEKGlkKSB7XG4gIGRlbGV0ZSBub2RlQ2FjaGVbaWRdO1xufVxuXG52YXIgZGVlcGVzdE5vZGVTb0ZhciA9IG51bGw7XG5mdW5jdGlvbiBmaW5kRGVlcGVzdENhY2hlZEFuY2VzdG9ySW1wbChhbmNlc3RvcklEKSB7XG4gIHZhciBhbmNlc3RvciA9IG5vZGVDYWNoZVthbmNlc3RvcklEXTtcbiAgaWYgKGFuY2VzdG9yICYmIGlzVmFsaWQoYW5jZXN0b3IsIGFuY2VzdG9ySUQpKSB7XG4gICAgZGVlcGVzdE5vZGVTb0ZhciA9IGFuY2VzdG9yO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgbm9kZSBpc24ndCBwb3B1bGF0ZWQgaW4gdGhlIGNhY2hlLCBzbyBwcmVzdW1hYmx5IG5vbmUgb2YgaXRzXG4gICAgLy8gZGVzY2VuZGFudHMgYXJlLiBCcmVhayBvdXQgb2YgdGhlIGxvb3AuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkZWVwZXN0IGNhY2hlZCBub2RlIHdob3NlIElEIGlzIGEgcHJlZml4IG9mIGB0YXJnZXRJRGAuXG4gKi9cbmZ1bmN0aW9uIGZpbmREZWVwZXN0Q2FjaGVkQW5jZXN0b3IodGFyZ2V0SUQpIHtcbiAgZGVlcGVzdE5vZGVTb0ZhciA9IG51bGw7XG4gIFJlYWN0SW5zdGFuY2VIYW5kbGVzLnRyYXZlcnNlQW5jZXN0b3JzKFxuICAgIHRhcmdldElELFxuICAgIGZpbmREZWVwZXN0Q2FjaGVkQW5jZXN0b3JJbXBsXG4gICk7XG5cbiAgdmFyIGZvdW5kTm9kZSA9IGRlZXBlc3ROb2RlU29GYXI7XG4gIGRlZXBlc3ROb2RlU29GYXIgPSBudWxsO1xuICByZXR1cm4gZm91bmROb2RlO1xufVxuXG4vKipcbiAqIE1vdW50cyB0aGlzIGNvbXBvbmVudCBhbmQgaW5zZXJ0cyBpdCBpbnRvIHRoZSBET00uXG4gKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50SW5zdGFuY2UgVGhlIGluc3RhbmNlIHRvIG1vdW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50SW50b05vZGUoXG4gICAgY29tcG9uZW50SW5zdGFuY2UsXG4gICAgcm9vdElELFxuICAgIGNvbnRhaW5lcixcbiAgICB0cmFuc2FjdGlvbixcbiAgICBzaG91bGRSZXVzZU1hcmt1cCkge1xuICB2YXIgbWFya3VwID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KFxuICAgIGNvbXBvbmVudEluc3RhbmNlLCByb290SUQsIHRyYW5zYWN0aW9uLCBlbXB0eU9iamVjdFxuICApO1xuICBjb21wb25lbnRJbnN0YW5jZS5faXNUb3BMZXZlbCA9IHRydWU7XG4gIFJlYWN0TW91bnQuX21vdW50SW1hZ2VJbnRvTm9kZShtYXJrdXAsIGNvbnRhaW5lciwgc2hvdWxkUmV1c2VNYXJrdXApO1xufVxuXG4vKipcbiAqIEJhdGNoZWQgbW91bnQuXG4gKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50SW5zdGFuY2UgVGhlIGluc3RhbmNlIHRvIG1vdW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1bmN0aW9uIGJhdGNoZWRNb3VudENvbXBvbmVudEludG9Ob2RlKFxuICAgIGNvbXBvbmVudEluc3RhbmNlLFxuICAgIHJvb3RJRCxcbiAgICBjb250YWluZXIsXG4gICAgc2hvdWxkUmV1c2VNYXJrdXApIHtcbiAgdmFyIHRyYW5zYWN0aW9uID0gUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7XG4gIHRyYW5zYWN0aW9uLnBlcmZvcm0oXG4gICAgbW91bnRDb21wb25lbnRJbnRvTm9kZSxcbiAgICBudWxsLFxuICAgIGNvbXBvbmVudEluc3RhbmNlLFxuICAgIHJvb3RJRCxcbiAgICBjb250YWluZXIsXG4gICAgdHJhbnNhY3Rpb24sXG4gICAgc2hvdWxkUmV1c2VNYXJrdXBcbiAgKTtcbiAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7XG59XG5cbi8qKlxuICogTW91bnRpbmcgaXMgdGhlIHByb2Nlc3Mgb2YgaW5pdGlhbGl6aW5nIGEgUmVhY3QgY29tcG9uZW50IGJ5IGNyZWF0aW5nIGl0c1xuICogcmVwcmVzZW50YXRpdmUgRE9NIGVsZW1lbnRzIGFuZCBpbnNlcnRpbmcgdGhlbSBpbnRvIGEgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiBBbnkgcHJpb3IgY29udGVudCBpbnNpZGUgYGNvbnRhaW5lcmAgaXMgZGVzdHJveWVkIGluIHRoZSBwcm9jZXNzLlxuICpcbiAqICAgUmVhY3RNb3VudC5yZW5kZXIoXG4gKiAgICAgY29tcG9uZW50LFxuICogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKVxuICogICApO1xuICpcbiAqICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPiAgICAgICAgICAgICAgICAgICA8LS0gU3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiAgICAgPGRpdiBkYXRhLXJlYWN0aWQ9XCIuM1wiPiAgICAgICAgICAgICAgPC0tIFJlbmRlcmVkIHJlYWN0Um9vdCBvZiBSZWFjdFxuICogICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LlxuICogICAgIDwvZGl2PlxuICogICA8L2Rpdj5cbiAqXG4gKiBJbnNpZGUgb2YgYGNvbnRhaW5lcmAsIHRoZSBmaXJzdCBlbGVtZW50IHJlbmRlcmVkIGlzIHRoZSBcInJlYWN0Um9vdFwiLlxuICovXG52YXIgUmVhY3RNb3VudCA9IHtcbiAgLyoqIEV4cG9zZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqKi9cbiAgX2luc3RhbmNlc0J5UmVhY3RSb290SUQ6IGluc3RhbmNlc0J5UmVhY3RSb290SUQsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBob29rIHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVuZGVyaW5nIFJlYWN0IGNvbXBvbmVudHMgd2hpbGVcbiAgICogZW5zdXJpbmcgdGhhdCB0aGUgYXBwYXJlbnQgc2Nyb2xsIHBvc2l0aW9uIG9mIGl0cyBgY29udGFpbmVyYCBkb2VzIG5vdFxuICAgKiBjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIFRoZSBgY29udGFpbmVyYCBiZWluZyByZW5kZXJlZCBpbnRvLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSByZW5kZXJDYWxsYmFjayBUaGlzIG11c3QgYmUgY2FsbGVkIG9uY2UgdG8gZG8gdGhlIHJlbmRlci5cbiAgICovXG4gIHNjcm9sbE1vbml0b3I6IGZ1bmN0aW9uKGNvbnRhaW5lciwgcmVuZGVyQ2FsbGJhY2spIHtcbiAgICByZW5kZXJDYWxsYmFjaygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUYWtlIGEgY29tcG9uZW50IHRoYXQncyBhbHJlYWR5IG1vdW50ZWQgaW50byB0aGUgRE9NIGFuZCByZXBsYWNlIGl0cyBwcm9wc1xuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBwcmV2Q29tcG9uZW50IGNvbXBvbmVudCBpbnN0YW5jZSBhbHJlYWR5IGluIHRoZSBET01cbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW5kZXJcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgY29udGFpbmVyIHRvIHJlbmRlciBpbnRvXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgb24gY29tcGxldGlvblxuICAgKi9cbiAgX3VwZGF0ZVJvb3RDb21wb25lbnQ6IGZ1bmN0aW9uKFxuICAgICAgcHJldkNvbXBvbmVudCxcbiAgICAgIG5leHRFbGVtZW50LFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY2FsbGJhY2spIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzKG5leHRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBSZWFjdE1vdW50LnNjcm9sbE1vbml0b3IoY29udGFpbmVyLCBmdW5jdGlvbigpIHtcbiAgICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbChwcmV2Q29tcG9uZW50LCBuZXh0RWxlbWVudCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbChwcmV2Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIHJvb3QgZWxlbWVudCBpbiBjYXNlIGl0IGxhdGVyIGdldHMgdHJhbnNwbGFudGVkLlxuICAgICAgcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtnZXRSZWFjdFJvb3RJRChjb250YWluZXIpXSA9XG4gICAgICAgIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBwcmV2Q29tcG9uZW50O1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNvbXBvbmVudCBpbnRvIHRoZSBpbnN0YW5jZSBtYXAgYW5kIHN0YXJ0cyBzY3JvbGwgdmFsdWVcbiAgICogbW9uaXRvcmluZ1xuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50IGNvbXBvbmVudCBpbnN0YW5jZSB0byByZW5kZXJcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgY29udGFpbmVyIHRvIHJlbmRlciBpbnRvXG4gICAqIEByZXR1cm4ge3N0cmluZ30gcmVhY3RSb290IElEIHByZWZpeFxuICAgKi9cbiAgX3JlZ2lzdGVyQ29tcG9uZW50OiBmdW5jdGlvbihuZXh0Q29tcG9uZW50LCBjb250YWluZXIpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgY29udGFpbmVyICYmIChcbiAgICAgICAgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgfHwgY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKVxuICAgICAgKSxcbiAgICAgICdfcmVnaXN0ZXJDb21wb25lbnQoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC4nXG4gICAgKSA6IGludmFyaWFudChjb250YWluZXIgJiYgKFxuICAgICAgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgfHwgY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKVxuICAgICkpKTtcblxuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5lbnN1cmVTY3JvbGxWYWx1ZU1vbml0b3JpbmcoKTtcblxuICAgIHZhciByZWFjdFJvb3RJRCA9IFJlYWN0TW91bnQucmVnaXN0ZXJDb250YWluZXIoY29udGFpbmVyKTtcbiAgICBpbnN0YW5jZXNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXSA9IG5leHRDb21wb25lbnQ7XG4gICAgcmV0dXJuIHJlYWN0Um9vdElEO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBuZXcgY29tcG9uZW50IGludG8gdGhlIERPTS5cbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IGVsZW1lbnQgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIGlmIHdlIHNob3VsZCBza2lwIHRoZSBtYXJrdXAgaW5zZXJ0aW9uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50XG4gICAqL1xuICBfcmVuZGVyTmV3Um9vdENvbXBvbmVudDogZnVuY3Rpb24oXG4gICAgbmV4dEVsZW1lbnQsXG4gICAgY29udGFpbmVyLFxuICAgIHNob3VsZFJldXNlTWFya3VwXG4gICkge1xuICAgIC8vIFZhcmlvdXMgcGFydHMgb2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAgIC8vIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQpIGFzc3VtZSB0aGF0IGNhbGxzIHRvIHJlbmRlciBhcmVuJ3QgbmVzdGVkO1xuICAgIC8vIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgY2FzZS5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCxcbiAgICAgICdfcmVuZGVyTmV3Um9vdENvbXBvbmVudCgpOiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uICcgK1xuICAgICAgJ29mIHByb3BzIGFuZCBzdGF0ZTsgdHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSAnICtcbiAgICAgICdyZW5kZXIgaXMgbm90IGFsbG93ZWQuIElmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiAnICtcbiAgICAgICdjb21wb25lbnREaWRVcGRhdGUuJ1xuICAgICkgOiBudWxsKTtcblxuICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQobmV4dEVsZW1lbnQsIG51bGwpO1xuICAgIHZhciByZWFjdFJvb3RJRCA9IFJlYWN0TW91bnQuX3JlZ2lzdGVyQ29tcG9uZW50KFxuICAgICAgY29tcG9uZW50SW5zdGFuY2UsXG4gICAgICBjb250YWluZXJcbiAgICApO1xuXG4gICAgLy8gVGhlIGluaXRpYWwgcmVuZGVyIGlzIHN5bmNocm9ub3VzIGJ1dCBhbnkgdXBkYXRlcyB0aGF0IGhhcHBlbiBkdXJpbmdcbiAgICAvLyByZW5kZXJpbmcsIGluIGNvbXBvbmVudFdpbGxNb3VudCBvciBjb21wb25lbnREaWRNb3VudCwgd2lsbCBiZSBiYXRjaGVkXG4gICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGJhdGNoaW5nIHN0cmF0ZWd5LlxuXG4gICAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKFxuICAgICAgYmF0Y2hlZE1vdW50Q29tcG9uZW50SW50b05vZGUsXG4gICAgICBjb21wb25lbnRJbnN0YW5jZSxcbiAgICAgIHJlYWN0Um9vdElELFxuICAgICAgY29udGFpbmVyLFxuICAgICAgc2hvdWxkUmV1c2VNYXJrdXBcbiAgICApO1xuXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgLy8gUmVjb3JkIHRoZSByb290IGVsZW1lbnQgaW4gY2FzZSBpdCBsYXRlciBnZXRzIHRyYW5zcGxhbnRlZC5cbiAgICAgIHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbcmVhY3RSb290SURdID1cbiAgICAgICAgZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudEluc3RhbmNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgUmVhY3QgY29tcG9uZW50IGludG8gdGhlIERPTSBpbiB0aGUgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gICAqXG4gICAqIElmIHRoZSBSZWFjdCBjb21wb25lbnQgd2FzIHByZXZpb3VzbHkgcmVuZGVyZWQgaW50byBgY29udGFpbmVyYCwgdGhpcyB3aWxsXG4gICAqIHBlcmZvcm0gYW4gdXBkYXRlIG9uIGl0IGFuZCBvbmx5IG11dGF0ZSB0aGUgRE9NIGFzIG5lY2Vzc2FyeSB0byByZWZsZWN0IHRoZVxuICAgKiBsYXRlc3QgUmVhY3QgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnQgQ29tcG9uZW50IGVsZW1lbnQgdG8gcmVuZGVyLlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byByZW5kZXIgaW50by5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRyaWdnZXJlZCBvbiBjb21wbGV0aW9uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBDb21wb25lbnQgaW5zdGFuY2UgcmVuZGVyZWQgaW4gYGNvbnRhaW5lcmAuXG4gICAqL1xuICByZW5kZXI6IGZ1bmN0aW9uKG5leHRFbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChuZXh0RWxlbWVudCksXG4gICAgICAnUmVhY3QucmVuZGVyKCk6IEludmFsaWQgY29tcG9uZW50IGVsZW1lbnQuJXMnLFxuICAgICAgKFxuICAgICAgICB0eXBlb2YgbmV4dEVsZW1lbnQgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAnIEluc3RlYWQgb2YgcGFzc2luZyBhbiBlbGVtZW50IHN0cmluZywgbWFrZSBzdXJlIHRvIGluc3RhbnRpYXRlICcgK1xuICAgICAgICAgICdpdCBieSBwYXNzaW5nIGl0IHRvIFJlYWN0LmNyZWF0ZUVsZW1lbnQuJyA6XG4gICAgICAgIHR5cGVvZiBuZXh0RWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgJyBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBjb21wb25lbnQgY2xhc3MsIG1ha2Ugc3VyZSB0byBpbnN0YW50aWF0ZSAnICtcbiAgICAgICAgICAnaXQgYnkgcGFzc2luZyBpdCB0byBSZWFjdC5jcmVhdGVFbGVtZW50LicgOlxuICAgICAgICAvLyBDaGVjayBpZiBpdCBxdWFja3MgbGlrZSBhbiBlbGVtZW50XG4gICAgICAgIG5leHRFbGVtZW50ICE9IG51bGwgJiYgbmV4dEVsZW1lbnQucHJvcHMgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgJyBUaGlzIG1heSBiZSBjYXVzZWQgYnkgdW5pbnRlbnRpb25hbGx5IGxvYWRpbmcgdHdvIGluZGVwZW5kZW50ICcgK1xuICAgICAgICAgICdjb3BpZXMgb2YgUmVhY3QuJyA6XG4gICAgICAgICAgJydcbiAgICAgIClcbiAgICApIDogaW52YXJpYW50KFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChuZXh0RWxlbWVudCkpKTtcblxuICAgIHZhciBwcmV2Q29tcG9uZW50ID0gaW5zdGFuY2VzQnlSZWFjdFJvb3RJRFtnZXRSZWFjdFJvb3RJRChjb250YWluZXIpXTtcblxuICAgIGlmIChwcmV2Q29tcG9uZW50KSB7XG4gICAgICB2YXIgcHJldkVsZW1lbnQgPSBwcmV2Q29tcG9uZW50Ll9jdXJyZW50RWxlbWVudDtcbiAgICAgIGlmIChzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBSZWFjdE1vdW50Ll91cGRhdGVSb290Q29tcG9uZW50KFxuICAgICAgICAgIHByZXZDb21wb25lbnQsXG4gICAgICAgICAgbmV4dEVsZW1lbnQsXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICkuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFJlYWN0TW91bnQudW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWFjdFJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGNvbnRhaW5lckhhc1JlYWN0TWFya3VwID1cbiAgICAgIHJlYWN0Um9vdEVsZW1lbnQgJiYgUmVhY3RNb3VudC5pc1JlbmRlcmVkQnlSZWFjdChyZWFjdFJvb3RFbGVtZW50KTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIGlmICghY29udGFpbmVySGFzUmVhY3RNYXJrdXAgfHwgcmVhY3RSb290RWxlbWVudC5uZXh0U2libGluZykge1xuICAgICAgICB2YXIgcm9vdEVsZW1lbnRTaWJsaW5nID0gcmVhY3RSb290RWxlbWVudDtcbiAgICAgICAgd2hpbGUgKHJvb3RFbGVtZW50U2libGluZykge1xuICAgICAgICAgIGlmIChSZWFjdE1vdW50LmlzUmVuZGVyZWRCeVJlYWN0KHJvb3RFbGVtZW50U2libGluZykpIHtcbiAgICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArXG4gICAgICAgICAgICAgICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArXG4gICAgICAgICAgICAgICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nXG4gICAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb290RWxlbWVudFNpYmxpbmcgPSByb290RWxlbWVudFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkUmV1c2VNYXJrdXAgPSBjb250YWluZXJIYXNSZWFjdE1hcmt1cCAmJiAhcHJldkNvbXBvbmVudDtcblxuICAgIHZhciBjb21wb25lbnQgPSBSZWFjdE1vdW50Ll9yZW5kZXJOZXdSb290Q29tcG9uZW50KFxuICAgICAgbmV4dEVsZW1lbnQsXG4gICAgICBjb250YWluZXIsXG4gICAgICBzaG91bGRSZXVzZU1hcmt1cFxuICAgICkuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwoY29tcG9uZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfSxcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGNvbXBvbmVudCBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgIHdpdGggYGluaXRpYWxQcm9wc2AgYW5kXG4gICAqIHJlbmRlcnMgaXQgaW50byB0aGUgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yIFJlYWN0IGNvbXBvbmVudCBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBwcm9wcyBJbml0aWFsIHByb3BzIG9mIHRoZSBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gQ29tcG9uZW50IGluc3RhbmNlIHJlbmRlcmVkIGluIGBjb250YWluZXJgLlxuICAgKi9cbiAgY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50OiBmdW5jdGlvbihjb25zdHJ1Y3RvciwgcHJvcHMsIGNvbnRhaW5lcikge1xuICAgIHZhciBlbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQoY29uc3RydWN0b3IsIHByb3BzKTtcbiAgICByZXR1cm4gUmVhY3RNb3VudC5yZW5kZXIoZWxlbWVudCwgY29udGFpbmVyKTtcbiAgfSxcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGNvbXBvbmVudCBpbnN0YW5jZSBvZiBgY29uc3RydWN0b3JgIHdpdGggYGluaXRpYWxQcm9wc2AgYW5kXG4gICAqIHJlbmRlcnMgaXQgaW50byBhIGNvbnRhaW5lciBub2RlIGlkZW50aWZpZWQgYnkgc3VwcGxpZWQgYGlkYC5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcG9uZW50Q29uc3RydWN0b3IgUmVhY3QgY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7P29iamVjdH0gcHJvcHMgSW5pdGlhbCBwcm9wcyBvZiB0aGUgY29tcG9uZW50IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgdGhlIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gQ29tcG9uZW50IGluc3RhbmNlIHJlbmRlcmVkIGluIHRoZSBjb250YWluZXIgbm9kZS5cbiAgICovXG4gIGNvbnN0cnVjdEFuZFJlbmRlckNvbXBvbmVudEJ5SUQ6IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBwcm9wcywgaWQpIHtcbiAgICB2YXIgZG9tTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgZG9tTm9kZSxcbiAgICAgICdUcmllZCB0byBnZXQgZWxlbWVudCB3aXRoIGlkIG9mIFwiJXNcIiBidXQgaXQgaXMgbm90IHByZXNlbnQgb24gdGhlIHBhZ2UuJyxcbiAgICAgIGlkXG4gICAgKSA6IGludmFyaWFudChkb21Ob2RlKSk7XG4gICAgcmV0dXJuIFJlYWN0TW91bnQuY29uc3RydWN0QW5kUmVuZGVyQ29tcG9uZW50KGNvbnN0cnVjdG9yLCBwcm9wcywgZG9tTm9kZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNvbnRhaW5lciBub2RlIGludG8gd2hpY2ggUmVhY3QgY29tcG9uZW50cyB3aWxsIGJlIHJlbmRlcmVkLlxuICAgKiBUaGlzIGFsc28gY3JlYXRlcyB0aGUgXCJyZWFjdFJvb3RcIiBJRCB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnRcbiAgICogcmVuZGVyZWQgd2l0aGluLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byByZWdpc3RlciBhcyBhIGNvbnRhaW5lci5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgXCJyZWFjdFJvb3RcIiBJRCBvZiBlbGVtZW50cyByZW5kZXJlZCB3aXRoaW4uXG4gICAqL1xuICByZWdpc3RlckNvbnRhaW5lcjogZnVuY3Rpb24oY29udGFpbmVyKSB7XG4gICAgdmFyIHJlYWN0Um9vdElEID0gZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKTtcbiAgICBpZiAocmVhY3RSb290SUQpIHtcbiAgICAgIC8vIElmIG9uZSBleGlzdHMsIG1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIFwicmVhY3RSb290XCIgSUQuXG4gICAgICByZWFjdFJvb3RJRCA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmdldFJlYWN0Um9vdElERnJvbU5vZGVJRChyZWFjdFJvb3RJRCk7XG4gICAgfVxuICAgIGlmICghcmVhY3RSb290SUQpIHtcbiAgICAgIC8vIE5vIHZhbGlkIFwicmVhY3RSb290XCIgSUQgZm91bmQsIGNyZWF0ZSBvbmUuXG4gICAgICByZWFjdFJvb3RJRCA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmNyZWF0ZVJlYWN0Um9vdElEKCk7XG4gICAgfVxuICAgIGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXSA9IGNvbnRhaW5lcjtcbiAgICByZXR1cm4gcmVhY3RSb290SUQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVubW91bnRzIGFuZCBkZXN0cm95cyB0aGUgUmVhY3QgY29tcG9uZW50IHJlbmRlcmVkIGluIHRoZSBgY29udGFpbmVyYC5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgY29udGFpbmluZyBhIFJlYWN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBhIGNvbXBvbmVudCB3YXMgZm91bmQgaW4gYW5kIHVubW91bnRlZCBmcm9tXG4gICAqICAgICAgICAgICAgICAgICAgIGBjb250YWluZXJgXG4gICAqL1xuICB1bm1vdW50Q29tcG9uZW50QXROb2RlOiBmdW5jdGlvbihjb250YWluZXIpIHtcbiAgICAvLyBWYXJpb3VzIHBhcnRzIG9mIG91ciBjb2RlIChzdWNoIGFzIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50J3NcbiAgICAvLyBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KSBhc3N1bWUgdGhhdCBjYWxscyB0byByZW5kZXIgYXJlbid0IG5lc3RlZDtcbiAgICAvLyB2ZXJpZnkgdGhhdCB0aGF0J3MgdGhlIGNhc2UuIChTdHJpY3RseSBzcGVha2luZywgdW5tb3VudGluZyB3b24ndCBjYXVzZSBhXG4gICAgLy8gcmVuZGVyIGJ1dCB3ZSBzdGlsbCBkb24ndCBleHBlY3QgdG8gYmUgaW4gYSByZW5kZXIgY2FsbCBoZXJlLilcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCxcbiAgICAgICd1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgJyArXG4gICAgICAncHJvcHMgYW5kIHN0YXRlOyB0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyAnICtcbiAgICAgICdub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluICcgK1xuICAgICAgJ2NvbXBvbmVudERpZFVwZGF0ZS4nXG4gICAgKSA6IG51bGwpO1xuXG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIGNvbnRhaW5lciAmJiAoXG4gICAgICAgIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFIHx8IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSlcbiAgICAgICksXG4gICAgICAndW5tb3VudENvbXBvbmVudEF0Tm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LidcbiAgICApIDogaW52YXJpYW50KGNvbnRhaW5lciAmJiAoXG4gICAgICAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpXG4gICAgKSkpO1xuXG4gICAgdmFyIHJlYWN0Um9vdElEID0gZ2V0UmVhY3RSb290SUQoY29udGFpbmVyKTtcbiAgICB2YXIgY29tcG9uZW50ID0gaW5zdGFuY2VzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF07XG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgUmVhY3RNb3VudC51bm1vdW50Q29tcG9uZW50RnJvbU5vZGUoY29tcG9uZW50LCBjb250YWluZXIpO1xuICAgIGRlbGV0ZSBpbnN0YW5jZXNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTtcbiAgICBkZWxldGUgY29udGFpbmVyc0J5UmVhY3RSb290SURbcmVhY3RSb290SURdO1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIGRlbGV0ZSByb290RWxlbWVudHNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVubW91bnRzIGEgY29tcG9uZW50IGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIERPTS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW5zdGFuY2UgUmVhY3QgY29tcG9uZW50IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGNvbnRhaW5lciBET00gZWxlbWVudCB0byB1bm1vdW50IGZyb20uXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICogQHNlZSB7UmVhY3RNb3VudC51bm1vdW50Q29tcG9uZW50QXROb2RlfVxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudEZyb21Ob2RlOiBmdW5jdGlvbihpbnN0YW5jZSwgY29udGFpbmVyKSB7XG4gICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQoaW5zdGFuY2UpO1xuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DX05PREVfVFlQRSkge1xuICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBodHRwOi8vanNwZXJmLmNvbS9lbXB0eWluZy1hLW5vZGVcbiAgICB3aGlsZSAoY29udGFpbmVyLmxhc3RDaGlsZCkge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5sYXN0Q2hpbGQpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRmluZHMgdGhlIGNvbnRhaW5lciBET00gZWxlbWVudCB0aGF0IGNvbnRhaW5zIFJlYWN0IGNvbXBvbmVudCB0byB3aGljaCB0aGVcbiAgICogc3VwcGxpZWQgRE9NIGBpZGAgYmVsb25ncy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiBhbiBlbGVtZW50IHJlbmRlcmVkIGJ5IGEgUmVhY3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJuIHs/RE9NRWxlbWVudH0gRE9NIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgYGlkYC5cbiAgICovXG4gIGZpbmRSZWFjdENvbnRhaW5lckZvcklEOiBmdW5jdGlvbihpZCkge1xuICAgIHZhciByZWFjdFJvb3RJRCA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmdldFJlYWN0Um9vdElERnJvbU5vZGVJRChpZCk7XG4gICAgdmFyIGNvbnRhaW5lciA9IGNvbnRhaW5lcnNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXTtcblxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHZhciByb290RWxlbWVudCA9IHJvb3RFbGVtZW50c0J5UmVhY3RSb290SURbcmVhY3RSb290SURdO1xuICAgICAgaWYgKHJvb3RFbGVtZW50ICYmIHJvb3RFbGVtZW50LnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIC8vIENhbGwgaW50ZXJuYWxHZXRJRCBoZXJlIGJlY2F1c2UgZ2V0SUQgY2FsbHMgaXNWYWxpZCB3aGljaCBjYWxsc1xuICAgICAgICAgIC8vIGZpbmRSZWFjdENvbnRhaW5lckZvcklEICh0aGlzIGZ1bmN0aW9uKS5cbiAgICAgICAgICBpbnRlcm5hbEdldElEKHJvb3RFbGVtZW50KSA9PT0gcmVhY3RSb290SUQsXG4gICAgICAgICAgJ1JlYWN0TW91bnQ6IFJvb3QgZWxlbWVudCBJRCBkaWZmZXJlZCBmcm9tIHJlYWN0Um9vdElELidcbiAgICAgICAgKSA6IGludmFyaWFudCgvLyBDYWxsIGludGVybmFsR2V0SUQgaGVyZSBiZWNhdXNlIGdldElEIGNhbGxzIGlzVmFsaWQgd2hpY2ggY2FsbHNcbiAgICAgICAgLy8gZmluZFJlYWN0Q29udGFpbmVyRm9ySUQgKHRoaXMgZnVuY3Rpb24pLlxuICAgICAgICBpbnRlcm5hbEdldElEKHJvb3RFbGVtZW50KSA9PT0gcmVhY3RSb290SUQpKTtcblxuICAgICAgICB2YXIgY29udGFpbmVyQ2hpbGQgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgICAgaWYgKGNvbnRhaW5lckNoaWxkICYmXG4gICAgICAgICAgICByZWFjdFJvb3RJRCA9PT0gaW50ZXJuYWxHZXRJRChjb250YWluZXJDaGlsZCkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY29udGFpbmVyIGhhcyBhIG5ldyBjaGlsZCB3aXRoIHRoZSBzYW1lIElEIGFzIHRoZSBvbGRcbiAgICAgICAgICAvLyByb290IGVsZW1lbnQsIHRoZW4gcm9vdEVsZW1lbnRzQnlSZWFjdFJvb3RJRFtyZWFjdFJvb3RJRF0gaXNcbiAgICAgICAgICAvLyBqdXN0IHN0YWxlIGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLiBUaGUgY2FzZSB0aGF0IGRlc2VydmVzIGFcbiAgICAgICAgICAvLyB3YXJuaW5nIGlzIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBlbXB0eS5cbiAgICAgICAgICByb290RWxlbWVudHNCeVJlYWN0Um9vdElEW3JlYWN0Um9vdElEXSA9IGNvbnRhaW5lckNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAnUmVhY3RNb3VudDogUm9vdCBlbGVtZW50IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBpdHMgb3JpZ2luYWwgJyArXG4gICAgICAgICAgICAnY29udGFpbmVyLiBOZXcgY29udGFpbmVyOicsIHJvb3RFbGVtZW50LnBhcmVudE5vZGVcbiAgICAgICAgICApIDogbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbiBlbGVtZW50IHJlbmRlcmVkIGJ5IFJlYWN0IHdpdGggdGhlIHN1cHBsaWVkIElELlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgb2YgYSBET00gbm9kZSBpbiB0aGUgUmVhY3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJuIHtET01FbGVtZW50fSBSb290IERPTSBub2RlIG9mIHRoZSBSZWFjdCBjb21wb25lbnQuXG4gICAqL1xuICBmaW5kUmVhY3ROb2RlQnlJRDogZnVuY3Rpb24oaWQpIHtcbiAgICB2YXIgcmVhY3RSb290ID0gUmVhY3RNb3VudC5maW5kUmVhY3RDb250YWluZXJGb3JJRChpZCk7XG4gICAgcmV0dXJuIFJlYWN0TW91bnQuZmluZENvbXBvbmVudFJvb3QocmVhY3RSb290LCBpZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRydWUgaWYgdGhlIHN1cHBsaWVkIGBub2RlYCBpcyByZW5kZXJlZCBieSBSZWFjdC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBub2RlIERPTSBFbGVtZW50IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBET00gRWxlbWVudCBhcHBlYXJzIHRvIGJlIHJlbmRlcmVkIGJ5IFJlYWN0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGlzUmVuZGVyZWRCeVJlYWN0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDEpIHtcbiAgICAgIC8vIE5vdCBhIERPTUVsZW1lbnQsIHRoZXJlZm9yZSBub3QgYSBSZWFjdCBjb21wb25lbnRcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGlkID0gUmVhY3RNb3VudC5nZXRJRChub2RlKTtcbiAgICByZXR1cm4gaWQgPyBpZC5jaGFyQXQoMCkgPT09IFNFUEFSQVRPUiA6IGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgdXAgdGhlIGFuY2VzdG9ycyBvZiB0aGUgc3VwcGxpZWQgbm9kZSB0byBmaW5kIGEgbm9kZSB0aGF0IGlzIGFcbiAgICogRE9NIHJlcHJlc2VudGF0aW9uIG9mIGEgUmVhY3QgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0geyp9IG5vZGVcbiAgICogQHJldHVybiB7P0RPTUV2ZW50VGFyZ2V0fVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldEZpcnN0UmVhY3RET006IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgY3VycmVudCA9IG5vZGU7XG4gICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudC5wYXJlbnROb2RlICE9PSBjdXJyZW50KSB7XG4gICAgICBpZiAoUmVhY3RNb3VudC5pc1JlbmRlcmVkQnlSZWFjdChjdXJyZW50KSkge1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIG5vZGUgd2l0aCB0aGUgc3VwcGxpZWQgYHRhcmdldElEYCBpbnNpZGUgb2YgdGhlIHN1cHBsaWVkXG4gICAqIGBhbmNlc3Rvck5vZGVgLiAgRXhwbG9pdHMgdGhlIElEIG5hbWluZyBzY2hlbWUgdG8gcGVyZm9ybSB0aGUgc2VhcmNoXG4gICAqIHF1aWNrbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IGFuY2VzdG9yTm9kZSBTZWFyY2ggZnJvbSB0aGlzIHJvb3QuXG4gICAqIEBwYXJhcm0ge3N0cmluZ30gdGFyZ2V0SUQgSUQgb2YgdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJuIHtET01FdmVudFRhcmdldH0gRE9NIG5vZGUgd2l0aCB0aGUgc3VwcGxpZWQgYHRhcmdldElEYC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBmaW5kQ29tcG9uZW50Um9vdDogZnVuY3Rpb24oYW5jZXN0b3JOb2RlLCB0YXJnZXRJRCkge1xuICAgIHZhciBmaXJzdENoaWxkcmVuID0gZmluZENvbXBvbmVudFJvb3RSZXVzYWJsZUFycmF5O1xuICAgIHZhciBjaGlsZEluZGV4ID0gMDtcblxuICAgIHZhciBkZWVwZXN0QW5jZXN0b3IgPSBmaW5kRGVlcGVzdENhY2hlZEFuY2VzdG9yKHRhcmdldElEKSB8fCBhbmNlc3Rvck5vZGU7XG5cbiAgICBmaXJzdENoaWxkcmVuWzBdID0gZGVlcGVzdEFuY2VzdG9yLmZpcnN0Q2hpbGQ7XG4gICAgZmlyc3RDaGlsZHJlbi5sZW5ndGggPSAxO1xuXG4gICAgd2hpbGUgKGNoaWxkSW5kZXggPCBmaXJzdENoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgdmFyIGNoaWxkID0gZmlyc3RDaGlsZHJlbltjaGlsZEluZGV4KytdO1xuICAgICAgdmFyIHRhcmdldENoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgdmFyIGNoaWxkSUQgPSBSZWFjdE1vdW50LmdldElEKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkSUQpIHtcbiAgICAgICAgICAvLyBFdmVuIGlmIHdlIGZpbmQgdGhlIG5vZGUgd2UncmUgbG9va2luZyBmb3IsIHdlIGZpbmlzaCBsb29waW5nXG4gICAgICAgICAgLy8gdGhyb3VnaCBpdHMgc2libGluZ3MgdG8gZW5zdXJlIHRoZXkncmUgY2FjaGVkIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAgIC8vIHRvIHJldmlzaXQgdGhpcyBub2RlIGFnYWluLiBPdGhlcndpc2UsIHdlIG1ha2Ugbl4yIGNhbGxzIHRvIGdldElEXG4gICAgICAgICAgLy8gd2hlbiB2aXNpdGluZyB0aGUgbWFueSBjaGlsZHJlbiBvZiBhIHNpbmdsZSBub2RlIGluIG9yZGVyLlxuXG4gICAgICAgICAgaWYgKHRhcmdldElEID09PSBjaGlsZElEKSB7XG4gICAgICAgICAgICB0YXJnZXRDaGlsZCA9IGNoaWxkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoUmVhY3RJbnN0YW5jZUhhbmRsZXMuaXNBbmNlc3RvcklET2YoY2hpbGRJRCwgdGFyZ2V0SUQpKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBmaW5kIGEgY2hpbGQgd2hvc2UgSUQgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIElELFxuICAgICAgICAgICAgLy8gdGhlbiB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdlIG9ubHkgd2FudCB0byBzZWFyY2ggdGhlIHN1YnRyZWVcbiAgICAgICAgICAgIC8vIHJvb3RlZCBhdCB0aGlzIGNoaWxkLCBzbyB3ZSBjYW4gdGhyb3cgb3V0IHRoZSByZXN0IG9mIHRoZVxuICAgICAgICAgICAgLy8gc2VhcmNoIHN0YXRlLlxuICAgICAgICAgICAgZmlyc3RDaGlsZHJlbi5sZW5ndGggPSBjaGlsZEluZGV4ID0gMDtcbiAgICAgICAgICAgIGZpcnN0Q2hpbGRyZW4ucHVzaChjaGlsZC5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGNoaWxkIGhhZCBubyBJRCwgdGhlbiB0aGVyZSdzIGEgY2hhbmNlIHRoYXQgaXQgd2FzXG4gICAgICAgICAgLy8gaW5qZWN0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgYnJvd3NlciwgYXMgd2hlbiBhIGA8dGFibGU+YFxuICAgICAgICAgIC8vIGVsZW1lbnQgc3Byb3V0cyBhbiBleHRyYSBgPHRib2R5PmAgY2hpbGQgYXMgYSBzaWRlIGVmZmVjdCBvZlxuICAgICAgICAgIC8vIGAuaW5uZXJIVE1MYCBwYXJzaW5nLiBPcHRpbWlzdGljYWxseSBjb250aW51ZSBkb3duIHRoaXNcbiAgICAgICAgICAvLyBicmFuY2gsIGJ1dCBub3QgYmVmb3JlIGV4YW1pbmluZyB0aGUgb3RoZXIgc2libGluZ3MuXG4gICAgICAgICAgZmlyc3RDaGlsZHJlbi5wdXNoKGNoaWxkLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldENoaWxkKSB7XG4gICAgICAgIC8vIEVtcHR5aW5nIGZpcnN0Q2hpbGRyZW4vZmluZENvbXBvbmVudFJvb3RSZXVzYWJsZUFycmF5IGlzXG4gICAgICAgIC8vIG5vdCBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzLCBidXQgaXQgaGVscHMgdGhlIEdDIHJlY2xhaW1cbiAgICAgICAgLy8gYW55IG5vZGVzIHRoYXQgd2VyZSBsZWZ0IGF0IHRoZSBlbmQgb2YgdGhlIHNlYXJjaC5cbiAgICAgICAgZmlyc3RDaGlsZHJlbi5sZW5ndGggPSAwO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXRDaGlsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaXJzdENoaWxkcmVuLmxlbmd0aCA9IDA7XG5cbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnZmluZENvbXBvbmVudFJvb3QoLi4uLCAlcyk6IFVuYWJsZSB0byBmaW5kIGVsZW1lbnQuIFRoaXMgcHJvYmFibHkgJyArXG4gICAgICAnbWVhbnMgdGhlIERPTSB3YXMgdW5leHBlY3RlZGx5IG11dGF0ZWQgKGUuZy4sIGJ5IHRoZSBicm93c2VyKSwgJyArXG4gICAgICAndXN1YWxseSBkdWUgdG8gZm9yZ2V0dGluZyBhIDx0Ym9keT4gd2hlbiB1c2luZyB0YWJsZXMsIG5lc3RpbmcgdGFncyAnICtcbiAgICAgICdsaWtlIDxmb3JtPiwgPHA+LCBvciA8YT4sIG9yIHVzaW5nIG5vbi1TVkcgZWxlbWVudHMgaW4gYW4gPHN2Zz4gJyArXG4gICAgICAncGFyZW50LiAnICtcbiAgICAgICdUcnkgaW5zcGVjdGluZyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIGVsZW1lbnQgd2l0aCBSZWFjdCBJRCBgJXNgLicsXG4gICAgICB0YXJnZXRJRCxcbiAgICAgIFJlYWN0TW91bnQuZ2V0SUQoYW5jZXN0b3JOb2RlKVxuICAgICkgOiBpbnZhcmlhbnQoZmFsc2UpKTtcbiAgfSxcblxuICBfbW91bnRJbWFnZUludG9Ob2RlOiBmdW5jdGlvbihtYXJrdXAsIGNvbnRhaW5lciwgc2hvdWxkUmV1c2VNYXJrdXApIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgY29udGFpbmVyICYmIChcbiAgICAgICAgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFX1RZUEUgfHwgY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKVxuICAgICAgKSxcbiAgICAgICdtb3VudENvbXBvbmVudEludG9Ob2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IHZhbGlkLidcbiAgICApIDogaW52YXJpYW50KGNvbnRhaW5lciAmJiAoXG4gICAgICAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpXG4gICAgKSkpO1xuXG4gICAgaWYgKHNob3VsZFJldXNlTWFya3VwKSB7XG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIGlmIChSZWFjdE1hcmt1cENoZWNrc3VtLmNhblJldXNlTWFya3VwKG1hcmt1cCwgcm9vdEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjaGVja3N1bSA9IHJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZShcbiAgICAgICAgICBSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRVxuICAgICAgICApO1xuICAgICAgICByb290RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUUpO1xuXG4gICAgICAgIHZhciByb290TWFya3VwID0gcm9vdEVsZW1lbnQub3V0ZXJIVE1MO1xuICAgICAgICByb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUUsXG4gICAgICAgICAgY2hlY2tzdW1cbiAgICAgICAgKTtcblxuICAgICAgICB2YXIgZGlmZkluZGV4ID0gZmlyc3REaWZmZXJlbmNlSW5kZXgobWFya3VwLCByb290TWFya3VwKTtcbiAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSAnIChjbGllbnQpICcgK1xuICAgICAgICAgIG1hcmt1cC5zdWJzdHJpbmcoZGlmZkluZGV4IC0gMjAsIGRpZmZJbmRleCArIDIwKSArXG4gICAgICAgICAgJ1xcbiAoc2VydmVyKSAnICsgcm9vdE1hcmt1cC5zdWJzdHJpbmcoZGlmZkluZGV4IC0gMjAsIGRpZmZJbmRleCArIDIwKTtcblxuICAgICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICAgIGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gRE9DX05PREVfVFlQRSxcbiAgICAgICAgICAnWW91XFwncmUgdHJ5aW5nIHRvIHJlbmRlciBhIGNvbXBvbmVudCB0byB0aGUgZG9jdW1lbnQgdXNpbmcgJyArXG4gICAgICAgICAgJ3NlcnZlciByZW5kZXJpbmcgYnV0IHRoZSBjaGVja3N1bSB3YXMgaW52YWxpZC4gVGhpcyB1c3VhbGx5ICcgK1xuICAgICAgICAgICdtZWFucyB5b3UgcmVuZGVyZWQgYSBkaWZmZXJlbnQgY29tcG9uZW50IHR5cGUgb3IgcHJvcHMgb24gJyArXG4gICAgICAgICAgJ3RoZSBjbGllbnQgZnJvbSB0aGUgb25lIG9uIHRoZSBzZXJ2ZXIsIG9yIHlvdXIgcmVuZGVyKCkgJyArXG4gICAgICAgICAgJ21ldGhvZHMgYXJlIGltcHVyZS4gUmVhY3QgY2Fubm90IGhhbmRsZSB0aGlzIGNhc2UgZHVlIHRvICcgK1xuICAgICAgICAgICdjcm9zcy1icm93c2VyIHF1aXJrcyBieSByZW5kZXJpbmcgYXQgdGhlIGRvY3VtZW50IHJvb3QuIFlvdSAnICtcbiAgICAgICAgICAnc2hvdWxkIGxvb2sgZm9yIGVudmlyb25tZW50IGRlcGVuZGVudCBjb2RlIGluIHlvdXIgY29tcG9uZW50cyAnICtcbiAgICAgICAgICAnYW5kIGVuc3VyZSB0aGUgcHJvcHMgYXJlIHRoZSBzYW1lIGNsaWVudCBhbmQgc2VydmVyIHNpZGU6XFxuJXMnLFxuICAgICAgICAgIGRpZmZlcmVuY2VcbiAgICAgICAgKSA6IGludmFyaWFudChjb250YWluZXIubm9kZVR5cGUgIT09IERPQ19OT0RFX1RZUEUpKTtcblxuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICdSZWFjdCBhdHRlbXB0ZWQgdG8gcmV1c2UgbWFya3VwIGluIGEgY29udGFpbmVyIGJ1dCB0aGUgJyArXG4gICAgICAgICAgICAnY2hlY2tzdW0gd2FzIGludmFsaWQuIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgeW91IGFyZSAnICtcbiAgICAgICAgICAgICd1c2luZyBzZXJ2ZXIgcmVuZGVyaW5nIGFuZCB0aGUgbWFya3VwIGdlbmVyYXRlZCBvbiB0aGUgJyArXG4gICAgICAgICAgICAnc2VydmVyIHdhcyBub3Qgd2hhdCB0aGUgY2xpZW50IHdhcyBleHBlY3RpbmcuIFJlYWN0IGluamVjdGVkICcgK1xuICAgICAgICAgICAgJ25ldyBtYXJrdXAgdG8gY29tcGVuc2F0ZSB3aGljaCB3b3JrcyBidXQgeW91IGhhdmUgbG9zdCBtYW55ICcgK1xuICAgICAgICAgICAgJ29mIHRoZSBiZW5lZml0cyBvZiBzZXJ2ZXIgcmVuZGVyaW5nLiBJbnN0ZWFkLCBmaWd1cmUgb3V0ICcgK1xuICAgICAgICAgICAgJ3doeSB0aGUgbWFya3VwIGJlaW5nIGdlbmVyYXRlZCBpcyBkaWZmZXJlbnQgb24gdGhlIGNsaWVudCAnICtcbiAgICAgICAgICAgICdvciBzZXJ2ZXI6XFxuJXMnLFxuICAgICAgICAgICAgZGlmZmVyZW5jZVxuICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBjb250YWluZXIubm9kZVR5cGUgIT09IERPQ19OT0RFX1RZUEUsXG4gICAgICAnWW91XFwncmUgdHJ5aW5nIHRvIHJlbmRlciBhIGNvbXBvbmVudCB0byB0aGUgZG9jdW1lbnQgYnV0ICcgK1xuICAgICAgICAneW91IGRpZG5cXCd0IHVzZSBzZXJ2ZXIgcmVuZGVyaW5nLiBXZSBjYW5cXCd0IGRvIHRoaXMgJyArXG4gICAgICAgICd3aXRob3V0IHVzaW5nIHNlcnZlciByZW5kZXJpbmcgZHVlIHRvIGNyb3NzLWJyb3dzZXIgcXVpcmtzLiAnICtcbiAgICAgICAgJ1NlZSBSZWFjdC5yZW5kZXJUb1N0cmluZygpIGZvciBzZXJ2ZXIgcmVuZGVyaW5nLidcbiAgICApIDogaW52YXJpYW50KGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gRE9DX05PREVfVFlQRSkpO1xuXG4gICAgc2V0SW5uZXJIVE1MKGNvbnRhaW5lciwgbWFya3VwKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVhY3QgSUQgdXRpbGl0aWVzLlxuICAgKi9cblxuICBnZXRSZWFjdFJvb3RJRDogZ2V0UmVhY3RSb290SUQsXG5cbiAgZ2V0SUQ6IGdldElELFxuXG4gIHNldElEOiBzZXRJRCxcblxuICBnZXROb2RlOiBnZXROb2RlLFxuXG4gIGdldE5vZGVGcm9tSW5zdGFuY2U6IGdldE5vZGVGcm9tSW5zdGFuY2UsXG5cbiAgcHVyZ2VJRDogcHVyZ2VJRFxufTtcblxuUmVhY3RQZXJmLm1lYXN1cmVNZXRob2RzKFJlYWN0TW91bnQsICdSZWFjdE1vdW50Jywge1xuICBfcmVuZGVyTmV3Um9vdENvbXBvbmVudDogJ19yZW5kZXJOZXdSb290Q29tcG9uZW50JyxcbiAgX21vdW50SW1hZ2VJbnRvTm9kZTogJ19tb3VudEltYWdlSW50b05vZGUnXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE1vdW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUk5iM1Z1ZEM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdVbVZoWTNSTmIzVnVkRnh1SUNvdlhHNWNiaWQxYzJVZ2MzUnlhV04wSnp0Y2JseHVkbUZ5SUVSUFRWQnliM0JsY25SNUlEMGdjbVZ4ZFdseVpTaGNJaTR2UkU5TlVISnZjR1Z5ZEhsY0lpazdYRzUyWVhJZ1VtVmhZM1JDY205M2MyVnlSWFpsYm5SRmJXbDBkR1Z5SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSQ2NtOTNjMlZ5UlhabGJuUkZiV2wwZEdWeVhDSXBPMXh1ZG1GeUlGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkRkWEp5Wlc1MFQzZHVaWEpjSWlrN1hHNTJZWElnVW1WaFkzUkZiR1Z0Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkZiR1Z0Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wUld4bGJXVnVkRlpoYkdsa1lYUnZjaUE5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wUld4bGJXVnVkRlpoYkdsa1lYUnZjbHdpS1R0Y2JuWmhjaUJTWldGamRFVnRjSFI1UTI5dGNHOXVaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSRmJYQjBlVU52YlhCdmJtVnVkRndpS1R0Y2JuWmhjaUJTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6WENJcE8xeHVkbUZ5SUZKbFlXTjBTVzV6ZEdGdVkyVk5ZWEFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVsdWMzUmhibU5sVFdGd1hDSXBPMXh1ZG1GeUlGSmxZV04wVFdGeWEzVndRMmhsWTJ0emRXMGdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTFoY210MWNFTm9aV05yYzNWdFhDSXBPMXh1ZG1GeUlGSmxZV04wVUdWeVppQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVR1Z5Wmx3aUtUdGNiblpoY2lCU1pXRmpkRkpsWTI5dVkybHNaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZKbFkyOXVZMmxzWlhKY0lpazdYRzUyWVhJZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlNBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFZYQmtZWFJsVVhWbGRXVmNJaWs3WEc1MllYSWdVbVZoWTNSVmNHUmhkR1Z6SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSVmNHUmhkR1Z6WENJcE8xeHVYRzUyWVhJZ1pXMXdkSGxQWW1wbFkzUWdQU0J5WlhGMWFYSmxLRndpTGk5bGJYQjBlVTlpYW1WamRGd2lLVHRjYm5aaGNpQmpiMjUwWVdsdWMwNXZaR1VnUFNCeVpYRjFhWEpsS0Z3aUxpOWpiMjUwWVdsdWMwNXZaR1ZjSWlrN1hHNTJZWElnWjJWMFVtVmhZM1JTYjI5MFJXeGxiV1Z1ZEVsdVEyOXVkR0ZwYm1WeUlEMGdjbVZ4ZFdseVpTaGNJaTR2WjJWMFVtVmhZM1JTYjI5MFJXeGxiV1Z1ZEVsdVEyOXVkR0ZwYm1WeVhDSXBPMXh1ZG1GeUlHbHVjM1JoYm5ScFlYUmxVbVZoWTNSRGIyMXdiMjVsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwybHVkbUZ5YVdGdWRGd2lLVHRjYm5aaGNpQnpaWFJKYm01bGNraFVUVXdnUFNCeVpYRjFhWEpsS0Z3aUxpOXpaWFJKYm01bGNraFVUVXhjSWlrN1hHNTJZWElnYzJodmRXeGtWWEJrWVhSbFVtVmhZM1JEYjIxd2IyNWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXphRzkxYkdSVmNHUmhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRGd2lLVHRjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVkbUZ5SUZORlVFRlNRVlJQVWlBOUlGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMbE5GVUVGU1FWUlBVanRjYmx4dWRtRnlJRUZVVkZKZlRrRk5SU0E5SUVSUFRWQnliM0JsY25SNUxrbEVYMEZVVkZKSlFsVlVSVjlPUVUxRk8xeHVkbUZ5SUc1dlpHVkRZV05vWlNBOUlIdDlPMXh1WEc1MllYSWdSVXhGVFVWT1ZGOU9UMFJGWDFSWlVFVWdQU0F4TzF4dWRtRnlJRVJQUTE5T1QwUkZYMVJaVUVVZ1BTQTVPMXh1WEc0dktpb2dUV0Z3Y0dsdVp5Qm1jbTl0SUhKbFlXTjBVbTl2ZEVsRUlIUnZJRkpsWVdOMElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTNGdLaTljYm5aaGNpQnBibk4wWVc1alpYTkNlVkpsWVdOMFVtOXZkRWxFSUQwZ2UzMDdYRzVjYmk4cUtpQk5ZWEJ3YVc1bklHWnliMjBnY21WaFkzUlNiMjkwU1VRZ2RHOGdZR052Ym5SaGFXNWxjbUFnYm05a1pYTXVJQ292WEc1MllYSWdZMjl1ZEdGcGJtVnljMEo1VW1WaFkzUlNiMjkwU1VRZ1BTQjdmVHRjYmx4dWFXWWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlrZ2UxeHVJQ0F2S2lvZ1gxOUVSVlpmWHkxdmJteDVJRzFoY0hCcGJtY2dabkp2YlNCeVpXRmpkRkp2YjNSSlJDQjBieUJ5YjI5MElHVnNaVzFsYm5SekxpQXFMMXh1SUNCMllYSWdjbTl2ZEVWc1pXMWxiblJ6UW5sU1pXRmpkRkp2YjNSSlJDQTlJSHQ5TzF4dWZWeHVYRzR2THlCVmMyVmtJSFJ2SUhOMGIzSmxJR0p5WldGa2RHZ3RabWx5YzNRZ2MyVmhjbU5vSUhOMFlYUmxJR2x1SUdacGJtUkRiMjF3YjI1bGJuUlNiMjkwTGx4dWRtRnlJR1pwYm1SRGIyMXdiMjVsYm5SU2IyOTBVbVYxYzJGaWJHVkJjbkpoZVNBOUlGdGRPMXh1WEc0dktpcGNiaUFxSUVacGJtUnpJSFJvWlNCcGJtUmxlQ0J2WmlCMGFHVWdabWx5YzNRZ1kyaGhjbUZqZEdWeVhHNGdLaUIwYUdGMEozTWdibTkwSUdOdmJXMXZiaUJpWlhSM1pXVnVJSFJvWlNCMGQyOGdaMmwyWlc0Z2MzUnlhVzVuY3k1Y2JpQXFYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUhSb1pTQnBibVJsZUNCdlppQjBhR1VnWTJoaGNtRmpkR1Z5SUhkb1pYSmxJSFJvWlNCemRISnBibWR6SUdScGRtVnlaMlZjYmlBcUwxeHVablZ1WTNScGIyNGdabWx5YzNSRWFXWm1aWEpsYm1ObFNXNWtaWGdvYzNSeWFXNW5NU3dnYzNSeWFXNW5NaWtnZTF4dUlDQjJZWElnYldsdVRHVnVJRDBnVFdGMGFDNXRhVzRvYzNSeWFXNW5NUzVzWlc1bmRHZ3NJSE4wY21sdVp6SXViR1Z1WjNSb0tUdGNiaUFnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCdGFXNU1aVzQ3SUdrckt5a2dlMXh1SUNBZ0lHbG1JQ2h6ZEhKcGJtY3hMbU5vWVhKQmRDaHBLU0FoUFQwZ2MzUnlhVzVuTWk1amFHRnlRWFFvYVNrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYzNSeWFXNW5NUzVzWlc1bmRHZ2dQVDA5SUhOMGNtbHVaekl1YkdWdVozUm9JRDhnTFRFZ09pQnRhVzVNWlc0N1hHNTlYRzVjYmk4cUtseHVJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCamIyNTBZV2x1WlhJZ1JFOU5JR1ZzWlcxbGJuUWdkR2hoZENCdFlYa2dZMjl1ZEdGcGJpQmhJRkpsWVdOMElHTnZiWEJ2Ym1WdWRDNWNiaUFxSUVCeVpYUjFjbTRnZXo5emRISnBibWQ5SUVFZ1hDSnlaV0ZqZEZKdmIzUmNJaUJKUkN3Z2FXWWdZU0JTWldGamRDQmpiMjF3YjI1bGJuUWdhWE1nY21WdVpHVnlaV1F1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2RsZEZKbFlXTjBVbTl2ZEVsRUtHTnZiblJoYVc1bGNpa2dlMXh1SUNCMllYSWdjbTl2ZEVWc1pXMWxiblFnUFNCblpYUlNaV0ZqZEZKdmIzUkZiR1Z0Wlc1MFNXNURiMjUwWVdsdVpYSW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ2NtVjBkWEp1SUhKdmIzUkZiR1Z0Wlc1MElDWW1JRkpsWVdOMFRXOTFiblF1WjJWMFNVUW9jbTl2ZEVWc1pXMWxiblFwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUZqWTJWemMybHVaeUJ1YjJSbFcwRlVWRkpmVGtGTlJWMGdiM0lnWTJGc2JHbHVaeUJuWlhSQmRIUnlhV0oxZEdVb1FWUlVVbDlPUVUxRktTQnZiaUJoSUdadmNtMWNiaUFxSUdWc1pXMWxiblFnWTJGdUlISmxkSFZ5YmlCcGRITWdZMjl1ZEhKdmJDQjNhRzl6WlNCdVlXMWxJRzl5SUVsRUlHVnhkV0ZzY3lCQlZGUlNYMDVCVFVVdUlFRnNiRnh1SUNvZ1JFOU5JRzV2WkdWeklITjFjSEJ2Y25RZ1lHZGxkRUYwZEhKcFluVjBaVTV2WkdWZ0lHSjFkQ0IwYUdseklHTmhiaUJoYkhOdklHZGxkQ0JqWVd4c1pXUWdiMjVjYmlBcUlHOTBhR1Z5SUc5aWFtVmpkSE1nYzI4Z2FuVnpkQ0J5WlhSMWNtNGdKeWNnYVdZZ2QyVW5jbVVnWjJsMlpXNGdjMjl0WlhSb2FXNW5JRzkwYUdWeUlIUm9ZVzRnWVZ4dUlDb2dSRTlOSUc1dlpHVWdLSE4xWTJnZ1lYTWdkMmx1Wkc5M0tTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2V6OUVUMDFGYkdWdFpXNTBmRVJQVFZkcGJtUnZkM3hFVDAxRWIyTjFiV1Z1ZEh4RVQwMVVaWGgwVG05a1pYMGdibTlrWlNCRVQwMGdibTlrWlM1Y2JpQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdTVVFnYjJZZ2RHaGxJSE4xY0hCc2FXVmtJR0JrYjIxT2IyUmxZQzVjYmlBcUwxeHVablZ1WTNScGIyNGdaMlYwU1VRb2JtOWtaU2tnZTF4dUlDQjJZWElnYVdRZ1BTQnBiblJsY201aGJFZGxkRWxFS0c1dlpHVXBPMXh1SUNCcFppQW9hV1FwSUh0Y2JpQWdJQ0JwWmlBb2JtOWtaVU5oWTJobExtaGhjMDkzYmxCeWIzQmxjblI1S0dsa0tTa2dlMXh1SUNBZ0lDQWdkbUZ5SUdOaFkyaGxaQ0E5SUc1dlpHVkRZV05vWlZ0cFpGMDdYRzRnSUNBZ0lDQnBaaUFvWTJGamFHVmtJQ0U5UFNCdWIyUmxLU0I3WEc0Z0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUNBZ0lXbHpWbUZzYVdRb1kyRmphR1ZrTENCcFpDa3NYRzRnSUNBZ0lDQWdJQ0FnSjFKbFlXTjBUVzkxYm5RNklGUjNieUIyWVd4cFpDQmlkWFFnZFc1bGNYVmhiQ0J1YjJSbGN5QjNhWFJvSUhSb1pTQnpZVzFsSUdBbGMyQTZJQ1Z6Snl4Y2JpQWdJQ0FnSUNBZ0lDQkJWRlJTWDA1QlRVVXNJR2xrWEc0Z0lDQWdJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9JV2x6Vm1Gc2FXUW9ZMkZqYUdWa0xDQnBaQ2twS1R0Y2JseHVJQ0FnSUNBZ0lDQnViMlJsUTJGamFHVmJhV1JkSUQwZ2JtOWtaVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2JtOWtaVU5oWTJobFcybGtYU0E5SUc1dlpHVTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHbGtPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnBiblJsY201aGJFZGxkRWxFS0c1dlpHVXBJSHRjYmlBZ0x5OGdTV1lnYm05a1pTQnBjeUJ6YjIxbGRHaHBibWNnYkdsclpTQmhJSGRwYm1SdmR5d2daRzlqZFcxbGJuUXNJRzl5SUhSbGVIUWdibTlrWlN3Z2JtOXVaU0J2Wmx4dUlDQXZMeUIzYUdsamFDQnpkWEJ3YjNKMElHRjBkSEpwWW5WMFpYTWdiM0lnWVNBdVoyVjBRWFIwY21saWRYUmxJRzFsZEdodlpDd2daM0poWTJWbWRXeHNlU0J5WlhSMWNtNWNiaUFnTHk4Z2RHaGxJR1Z0Y0hSNUlITjBjbWx1Wnl3Z1lYTWdhV1lnZEdobElHRjBkSEpwWW5WMFpTQjNaWEpsSUcxcGMzTnBibWN1WEc0Z0lISmxkSFZ5YmlCdWIyUmxJQ1ltSUc1dlpHVXVaMlYwUVhSMGNtbGlkWFJsSUNZbUlHNXZaR1V1WjJWMFFYUjBjbWxpZFhSbEtFRlVWRkpmVGtGTlJTa2dmSHdnSnljN1hHNTlYRzVjYmk4cUtseHVJQ29nVTJWMGN5QjBhR1VnVW1WaFkzUXRjM0JsWTJsbWFXTWdTVVFnYjJZZ2RHaGxJR2RwZG1WdUlHNXZaR1V1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCdWIyUmxJRlJvWlNCRVQwMGdibTlrWlNCM2FHOXpaU0JKUkNCM2FXeHNJR0psSUhObGRDNWNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JwWkNCVWFHVWdkbUZzZFdVZ2IyWWdkR2hsSUVsRUlHRjBkSEpwWW5WMFpTNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2MyVjBTVVFvYm05a1pTd2dhV1FwSUh0Y2JpQWdkbUZ5SUc5c1pFbEVJRDBnYVc1MFpYSnVZV3hIWlhSSlJDaHViMlJsS1R0Y2JpQWdhV1lnS0c5c1pFbEVJQ0U5UFNCcFpDa2dlMXh1SUNBZ0lHUmxiR1YwWlNCdWIyUmxRMkZqYUdWYmIyeGtTVVJkTzF4dUlDQjlYRzRnSUc1dlpHVXVjMlYwUVhSMGNtbGlkWFJsS0VGVVZGSmZUa0ZOUlN3Z2FXUXBPMXh1SUNCdWIyUmxRMkZqYUdWYmFXUmRJRDBnYm05a1pUdGNibjFjYmx4dUx5b3FYRzRnS2lCR2FXNWtjeUIwYUdVZ2JtOWtaU0IzYVhSb0lIUm9aU0J6ZFhCd2JHbGxaQ0JTWldGamRDMW5aVzVsY21GMFpXUWdSRTlOSUVsRUxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQkJJRkpsWVdOMExXZGxibVZ5WVhSbFpDQkVUMDBnU1VRdVhHNGdLaUJBY21WMGRYSnVJSHRFVDAxRmJHVnRaVzUwZlNCRVQwMGdibTlrWlNCM2FYUm9JSFJvWlNCemRYQndiR1ZrSUdCcFpHQXVYRzRnS2lCQWFXNTBaWEp1WVd4Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWjJWMFRtOWtaU2hwWkNrZ2UxeHVJQ0JwWmlBb0lXNXZaR1ZEWVdOb1pTNW9ZWE5QZDI1UWNtOXdaWEowZVNocFpDa2dmSHdnSVdselZtRnNhV1FvYm05a1pVTmhZMmhsVzJsa1hTd2dhV1FwS1NCN1hHNGdJQ0FnYm05a1pVTmhZMmhsVzJsa1hTQTlJRkpsWVdOMFRXOTFiblF1Wm1sdVpGSmxZV04wVG05a1pVSjVTVVFvYVdRcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdWIyUmxRMkZqYUdWYmFXUmRPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFWnBibVJ6SUhSb1pTQnViMlJsSUhkcGRHZ2dkR2hsSUhOMWNIQnNhV1ZrSUhCMVlteHBZeUJTWldGamRDQnBibk4wWVc1alpTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2V5cDlJR2x1YzNSaGJtTmxJRUVnY0hWaWJHbGpJRkpsWVdOMElHbHVjM1JoYm1ObExseHVJQ29nUUhKbGRIVnliaUI3UDBSUFRVVnNaVzFsYm5SOUlFUlBUU0J1YjJSbElIZHBkR2dnZEdobElITjFjSEJzWldRZ1lHbGtZQzVjYmlBcUlFQnBiblJsY201aGJGeHVJQ292WEc1bWRXNWpkR2x2YmlCblpYUk9iMlJsUm5KdmJVbHVjM1JoYm1ObEtHbHVjM1JoYm1ObEtTQjdYRzRnSUhaaGNpQnBaQ0E5SUZKbFlXTjBTVzV6ZEdGdVkyVk5ZWEF1WjJWMEtHbHVjM1JoYm1ObEtTNWZjbTl2ZEU1dlpHVkpSRHRjYmlBZ2FXWWdLRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblF1YVhOT2RXeHNRMjl0Y0c5dVpXNTBTVVFvYVdRcEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgxY2JpQWdhV1lnS0NGdWIyUmxRMkZqYUdVdWFHRnpUM2R1VUhKdmNHVnlkSGtvYVdRcElIeDhJQ0ZwYzFaaGJHbGtLRzV2WkdWRFlXTm9aVnRwWkYwc0lHbGtLU2tnZTF4dUlDQWdJRzV2WkdWRFlXTm9aVnRwWkYwZ1BTQlNaV0ZqZEUxdmRXNTBMbVpwYm1SU1pXRmpkRTV2WkdWQ2VVbEVLR2xrS1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYm05a1pVTmhZMmhsVzJsa1hUdGNibjFjYmx4dUx5b3FYRzRnS2lCQklHNXZaR1VnYVhNZ1hDSjJZV3hwWkZ3aUlHbG1JR2wwSUdseklHTnZiblJoYVc1bFpDQmllU0JoSUdOMWNuSmxiblJzZVNCdGIzVnVkR1ZrSUdOdmJuUmhhVzVsY2k1Y2JpQXFYRzRnS2lCVWFHbHpJRzFsWVc1eklIUm9ZWFFnZEdobElHNXZaR1VnWkc5bGN5QnViM1FnYUdGMlpTQjBieUJpWlNCamIyNTBZV2x1WldRZ1lua2dZU0JrYjJOMWJXVnVkQ0JwYmx4dUlDb2diM0prWlhJZ2RHOGdZbVVnWTI5dWMybGtaWEpsWkNCMllXeHBaQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlejlFVDAxRmJHVnRaVzUwZlNCdWIyUmxJRlJvWlNCallXNWthV1JoZEdVZ1JFOU5JRzV2WkdVdVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnVkdobElHVjRjR1ZqZEdWa0lFbEVJRzltSUhSb1pTQnViMlJsTGx4dUlDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMGdWMmhsZEdobGNpQjBhR1VnYm05a1pTQnBjeUJqYjI1MFlXbHVaV1FnWW5rZ1lTQnRiM1Z1ZEdWa0lHTnZiblJoYVc1bGNpNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2FYTldZV3hwWkNodWIyUmxMQ0JwWkNrZ2UxeHVJQ0JwWmlBb2JtOWtaU2tnZTF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQnBiblJsY201aGJFZGxkRWxFS0c1dlpHVXBJRDA5UFNCcFpDeGNiaUFnSUNBZ0lDZFNaV0ZqZEUxdmRXNTBPaUJWYm1WNGNHVmpkR1ZrSUcxdlpHbG1hV05oZEdsdmJpQnZaaUJnSlhOZ0p5eGNiaUFnSUNBZ0lFRlVWRkpmVGtGTlJWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9hVzUwWlhKdVlXeEhaWFJKUkNodWIyUmxLU0E5UFQwZ2FXUXBLVHRjYmx4dUlDQWdJSFpoY2lCamIyNTBZV2x1WlhJZ1BTQlNaV0ZqZEUxdmRXNTBMbVpwYm1SU1pXRmpkRU52Ym5SaGFXNWxja1p2Y2tsRUtHbGtLVHRjYmlBZ0lDQnBaaUFvWTI5dWRHRnBibVZ5SUNZbUlHTnZiblJoYVc1elRtOWtaU2hqYjI1MFlXbHVaWElzSUc1dlpHVXBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnWm1Gc2MyVTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyRjFjMlZ6SUhSb1pTQmpZV05vWlNCMGJ5Qm1iM0puWlhRZ1lXSnZkWFFnYjI1bElGSmxZV04wTFhOd1pXTnBabWxqSUVsRUxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCcFpDQlVhR1VnU1VRZ2RHOGdabTl5WjJWMExseHVJQ292WEc1bWRXNWpkR2x2YmlCd2RYSm5aVWxFS0dsa0tTQjdYRzRnSUdSbGJHVjBaU0J1YjJSbFEyRmphR1ZiYVdSZE8xeHVmVnh1WEc1MllYSWdaR1ZsY0dWemRFNXZaR1ZUYjBaaGNpQTlJRzUxYkd3N1hHNW1kVzVqZEdsdmJpQm1hVzVrUkdWbGNHVnpkRU5oWTJobFpFRnVZMlZ6ZEc5eVNXMXdiQ2hoYm1ObGMzUnZja2xFS1NCN1hHNGdJSFpoY2lCaGJtTmxjM1J2Y2lBOUlHNXZaR1ZEWVdOb1pWdGhibU5sYzNSdmNrbEVYVHRjYmlBZ2FXWWdLR0Z1WTJWemRHOXlJQ1ltSUdselZtRnNhV1FvWVc1alpYTjBiM0lzSUdGdVkyVnpkRzl5U1VRcEtTQjdYRzRnSUNBZ1pHVmxjR1Z6ZEU1dlpHVlRiMFpoY2lBOUlHRnVZMlZ6ZEc5eU8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDOHZJRlJvYVhNZ2JtOWtaU0JwYzI0bmRDQndiM0IxYkdGMFpXUWdhVzRnZEdobElHTmhZMmhsTENCemJ5QndjbVZ6ZFcxaFlteDVJRzV2Ym1VZ2IyWWdhWFJ6WEc0Z0lDQWdMeThnWkdWelkyVnVaR0Z1ZEhNZ1lYSmxMaUJDY21WaGF5QnZkWFFnYjJZZ2RHaGxJR3h2YjNBdVhHNGdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdUlIUm9aU0JrWldWd1pYTjBJR05oWTJobFpDQnViMlJsSUhkb2IzTmxJRWxFSUdseklHRWdjSEpsWm1sNElHOW1JR0IwWVhKblpYUkpSR0F1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR1pwYm1SRVpXVndaWE4wUTJGamFHVmtRVzVqWlhOMGIzSW9kR0Z5WjJWMFNVUXBJSHRjYmlBZ1pHVmxjR1Z6ZEU1dlpHVlRiMFpoY2lBOUlHNTFiR3c3WEc0Z0lGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMblJ5WVhabGNuTmxRVzVqWlhOMGIzSnpLRnh1SUNBZ0lIUmhjbWRsZEVsRUxGeHVJQ0FnSUdacGJtUkVaV1Z3WlhOMFEyRmphR1ZrUVc1alpYTjBiM0pKYlhCc1hHNGdJQ2s3WEc1Y2JpQWdkbUZ5SUdadmRXNWtUbTlrWlNBOUlHUmxaWEJsYzNST2IyUmxVMjlHWVhJN1hHNGdJR1JsWlhCbGMzUk9iMlJsVTI5R1lYSWdQU0J1ZFd4c08xeHVJQ0J5WlhSMWNtNGdabTkxYm1ST2IyUmxPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFMXZkVzUwY3lCMGFHbHpJR052YlhCdmJtVnVkQ0JoYm1RZ2FXNXpaWEowY3lCcGRDQnBiblJ2SUhSb1pTQkVUMDB1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdZMjl0Y0c5dVpXNTBTVzV6ZEdGdVkyVWdWR2hsSUdsdWMzUmhibU5sSUhSdklHMXZkVzUwTGx4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlISnZiM1JKUkNCRVQwMGdTVVFnYjJZZ2RHaGxJSEp2YjNRZ2JtOWtaUzVjYmlBcUlFQndZWEpoYlNCN1JFOU5SV3hsYldWdWRIMGdZMjl1ZEdGcGJtVnlJRVJQVFNCbGJHVnRaVzUwSUhSdklHMXZkVzUwSUdsdWRHOHVYRzRnS2lCQWNHRnlZVzBnZTFKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjU5SUhSeVlXNXpZV04wYVc5dVhHNGdLaUJBY0dGeVlXMGdlMkp2YjJ4bFlXNTlJSE5vYjNWc1pGSmxkWE5sVFdGeWEzVndJRWxtSUhSeWRXVXNJR1J2SUc1dmRDQnBibk5sY25RZ2JXRnlhM1Z3WEc0Z0tpOWNibVoxYm1OMGFXOXVJRzF2ZFc1MFEyOXRjRzl1Wlc1MFNXNTBiMDV2WkdVb1hHNGdJQ0FnWTI5dGNHOXVaVzUwU1c1emRHRnVZMlVzWEc0Z0lDQWdjbTl2ZEVsRUxGeHVJQ0FnSUdOdmJuUmhhVzVsY2l4Y2JpQWdJQ0IwY21GdWMyRmpkR2x2Yml4Y2JpQWdJQ0J6YUc5MWJHUlNaWFZ6WlUxaGNtdDFjQ2tnZTF4dUlDQjJZWElnYldGeWEzVndJRDBnVW1WaFkzUlNaV052Ym1OcGJHVnlMbTF2ZFc1MFEyOXRjRzl1Wlc1MEtGeHVJQ0FnSUdOdmJYQnZibVZ1ZEVsdWMzUmhibU5sTENCeWIyOTBTVVFzSUhSeVlXNXpZV04wYVc5dUxDQmxiWEIwZVU5aWFtVmpkRnh1SUNBcE8xeHVJQ0JqYjIxd2IyNWxiblJKYm5OMFlXNWpaUzVmYVhOVWIzQk1aWFpsYkNBOUlIUnlkV1U3WEc0Z0lGSmxZV04wVFc5MWJuUXVYMjF2ZFc1MFNXMWhaMlZKYm5SdlRtOWtaU2h0WVhKcmRYQXNJR052Ym5SaGFXNWxjaXdnYzJodmRXeGtVbVYxYzJWTllYSnJkWEFwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUpoZEdOb1pXUWdiVzkxYm5RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRU52YlhCdmJtVnVkSDBnWTI5dGNHOXVaVzUwU1c1emRHRnVZMlVnVkdobElHbHVjM1JoYm1ObElIUnZJRzF2ZFc1MExseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSEp2YjNSSlJDQkVUMDBnU1VRZ2IyWWdkR2hsSUhKdmIzUWdibTlrWlM1Y2JpQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWTI5dWRHRnBibVZ5SUVSUFRTQmxiR1Z0Wlc1MElIUnZJRzF2ZFc1MElHbHVkRzh1WEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlITm9iM1ZzWkZKbGRYTmxUV0Z5YTNWd0lFbG1JSFJ5ZFdVc0lHUnZJRzV2ZENCcGJuTmxjblFnYldGeWEzVndYRzRnS2k5Y2JtWjFibU4wYVc5dUlHSmhkR05vWldSTmIzVnVkRU52YlhCdmJtVnVkRWx1ZEc5T2IyUmxLRnh1SUNBZ0lHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObExGeHVJQ0FnSUhKdmIzUkpSQ3hjYmlBZ0lDQmpiMjUwWVdsdVpYSXNYRzRnSUNBZ2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhBcElIdGNiaUFnZG1GeUlIUnlZVzV6WVdOMGFXOXVJRDBnVW1WaFkzUlZjR1JoZEdWekxsSmxZV04wVW1WamIyNWphV3hsVkhKaGJuTmhZM1JwYjI0dVoyVjBVRzl2YkdWa0tDazdYRzRnSUhSeVlXNXpZV04wYVc5dUxuQmxjbVp2Y20wb1hHNGdJQ0FnYlc5MWJuUkRiMjF3YjI1bGJuUkpiblJ2VG05a1pTeGNiaUFnSUNCdWRXeHNMRnh1SUNBZ0lHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObExGeHVJQ0FnSUhKdmIzUkpSQ3hjYmlBZ0lDQmpiMjUwWVdsdVpYSXNYRzRnSUNBZ2RISmhibk5oWTNScGIyNHNYRzRnSUNBZ2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhCY2JpQWdLVHRjYmlBZ1VtVmhZM1JWY0dSaGRHVnpMbEpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNHVjbVZzWldGelpTaDBjbUZ1YzJGamRHbHZiaWs3WEc1OVhHNWNiaThxS2x4dUlDb2dUVzkxYm5ScGJtY2dhWE1nZEdobElIQnliMk5sYzNNZ2IyWWdhVzVwZEdsaGJHbDZhVzVuSUdFZ1VtVmhZM1FnWTI5dGNHOXVaVzUwSUdKNUlHTnlaV0YwYVc1bklHbDBjMXh1SUNvZ2NtVndjbVZ6Wlc1MFlYUnBkbVVnUkU5TklHVnNaVzFsYm5SeklHRnVaQ0JwYm5ObGNuUnBibWNnZEdobGJTQnBiblJ2SUdFZ2MzVndjR3hwWldRZ1lHTnZiblJoYVc1bGNtQXVYRzRnS2lCQmJua2djSEpwYjNJZ1kyOXVkR1Z1ZENCcGJuTnBaR1VnWUdOdmJuUmhhVzVsY21BZ2FYTWdaR1Z6ZEhKdmVXVmtJR2x1SUhSb1pTQndjbTlqWlhOekxseHVJQ3BjYmlBcUlDQWdVbVZoWTNSTmIzVnVkQzV5Wlc1a1pYSW9YRzRnS2lBZ0lDQWdZMjl0Y0c5dVpXNTBMRnh1SUNvZ0lDQWdJR1J2WTNWdFpXNTBMbWRsZEVWc1pXMWxiblJDZVVsa0tDZGpiMjUwWVdsdVpYSW5LVnh1SUNvZ0lDQXBPMXh1SUNwY2JpQXFJQ0FnUEdScGRpQnBaRDFjSW1OdmJuUmhhVzVsY2x3aVBpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThMUzBnVTNWd2NHeHBaV1FnWUdOdmJuUmhhVzVsY21BdVhHNGdLaUFnSUNBZ1BHUnBkaUJrWVhSaExYSmxZV04wYVdROVhDSXVNMXdpUGlBZ0lDQWdJQ0FnSUNBZ0lDQWdQQzB0SUZKbGJtUmxjbVZrSUhKbFlXTjBVbTl2ZENCdlppQlNaV0ZqZEZ4dUlDb2dJQ0FnSUNBZ0x5OGdMaTR1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0c5dVpXNTBMbHh1SUNvZ0lDQWdJRHd2WkdsMlBseHVJQ29nSUNBOEwyUnBkajVjYmlBcVhHNGdLaUJKYm5OcFpHVWdiMllnWUdOdmJuUmhhVzVsY21Bc0lIUm9aU0JtYVhKemRDQmxiR1Z0Wlc1MElISmxibVJsY21Wa0lHbHpJSFJvWlNCY0luSmxZV04wVW05dmRGd2lMbHh1SUNvdlhHNTJZWElnVW1WaFkzUk5iM1Z1ZENBOUlIdGNiaUFnTHlvcUlFVjRjRzl6WldRZ1ptOXlJR1JsWW5WbloybHVaeUJ3ZFhKd2IzTmxjeUFxS2k5Y2JpQWdYMmx1YzNSaGJtTmxjMEo1VW1WaFkzUlNiMjkwU1VRNklHbHVjM1JoYm1ObGMwSjVVbVZoWTNSU2IyOTBTVVFzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvYVhNZ2FYTWdZU0JvYjI5cklIQnliM1pwWkdWa0lIUnZJSE4xY0hCdmNuUWdjbVZ1WkdWeWFXNW5JRkpsWVdOMElHTnZiWEJ2Ym1WdWRITWdkMmhwYkdWY2JpQWdJQ29nWlc1emRYSnBibWNnZEdoaGRDQjBhR1VnWVhCd1lYSmxiblFnYzJOeWIyeHNJSEJ2YzJsMGFXOXVJRzltSUdsMGN5QmdZMjl1ZEdGcGJtVnlZQ0JrYjJWeklHNXZkRnh1SUNBZ0tpQmphR0Z1WjJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWTI5dWRHRnBibVZ5SUZSb1pTQmdZMjl1ZEdGcGJtVnlZQ0JpWldsdVp5QnlaVzVrWlhKbFpDQnBiblJ2TGx4dUlDQWdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVmU0J5Wlc1a1pYSkRZV3hzWW1GamF5QlVhR2x6SUcxMWMzUWdZbVVnWTJGc2JHVmtJRzl1WTJVZ2RHOGdaRzhnZEdobElISmxibVJsY2k1Y2JpQWdJQ292WEc0Z0lITmpjbTlzYkUxdmJtbDBiM0k2SUdaMWJtTjBhVzl1S0dOdmJuUmhhVzVsY2l3Z2NtVnVaR1Z5UTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0J5Wlc1a1pYSkRZV3hzWW1GamF5Z3BPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVVlXdGxJR0VnWTI5dGNHOXVaVzUwSUhSb1lYUW5jeUJoYkhKbFlXUjVJRzF2ZFc1MFpXUWdhVzUwYnlCMGFHVWdSRTlOSUdGdVpDQnlaWEJzWVdObElHbDBjeUJ3Y205d2MxeHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0J3Y21WMlEyOXRjRzl1Wlc1MElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTQmhiSEpsWVdSNUlHbHVJSFJvWlNCRVQwMWNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJRzVsZUhSRmJHVnRaVzUwSUdOdmJYQnZibVZ1ZENCcGJuTjBZVzVqWlNCMGJ5QnlaVzVrWlhKY2JpQWdJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCamIyNTBZV2x1WlhJZ1kyOXVkR0ZwYm1WeUlIUnZJSEpsYm1SbGNpQnBiblJ2WEc0Z0lDQXFJRUJ3WVhKaGJTQjdQMloxYm1OMGFXOXVmU0JqWVd4c1ltRmpheUJtZFc1amRHbHZiaUIwY21sbloyVnlaV1FnYjI0Z1kyOXRjR3hsZEdsdmJseHVJQ0FnS2k5Y2JpQWdYM1Z3WkdGMFpWSnZiM1JEYjIxd2IyNWxiblE2SUdaMWJtTjBhVzl1S0Z4dUlDQWdJQ0FnY0hKbGRrTnZiWEJ2Ym1WdWRDeGNiaUFnSUNBZ0lHNWxlSFJGYkdWdFpXNTBMRnh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlMRnh1SUNBZ0lDQWdZMkZzYkdKaFkyc3BJSHRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQlNaV0ZqZEVWc1pXMWxiblJXWVd4cFpHRjBiM0l1WTJobFkydEJibVJYWVhKdVJtOXlUWFYwWVhSbFpGQnliM0J6S0c1bGVIUkZiR1Z0Wlc1MEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCU1pXRmpkRTF2ZFc1MExuTmpjbTlzYkUxdmJtbDBiM0lvWTI5dWRHRnBibVZ5TENCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lGSmxZV04wVlhCa1lYUmxVWFZsZFdVdVpXNXhkV1YxWlVWc1pXMWxiblJKYm5SbGNtNWhiQ2h3Y21WMlEyOXRjRzl1Wlc1MExDQnVaWGgwUld4bGJXVnVkQ2s3WEc0Z0lDQWdJQ0JwWmlBb1kyRnNiR0poWTJzcElIdGNiaUFnSUNBZ0lDQWdVbVZoWTNSVmNHUmhkR1ZSZFdWMVpTNWxibkYxWlhWbFEyRnNiR0poWTJ0SmJuUmxjbTVoYkNod2NtVjJRMjl0Y0c5dVpXNTBMQ0JqWVd4c1ltRmpheWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU2s3WEc1Y2JpQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0F2THlCU1pXTnZjbVFnZEdobElISnZiM1FnWld4bGJXVnVkQ0JwYmlCallYTmxJR2wwSUd4aGRHVnlJR2RsZEhNZ2RISmhibk53YkdGdWRHVmtMbHh1SUNBZ0lDQWdjbTl2ZEVWc1pXMWxiblJ6UW5sU1pXRmpkRkp2YjNSSlJGdG5aWFJTWldGamRGSnZiM1JKUkNoamIyNTBZV2x1WlhJcFhTQTlYRzRnSUNBZ0lDQWdJR2RsZEZKbFlXTjBVbTl2ZEVWc1pXMWxiblJKYmtOdmJuUmhhVzVsY2loamIyNTBZV2x1WlhJcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJ3Y21WMlEyOXRjRzl1Wlc1ME8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWldkcGMzUmxjaUJoSUdOdmJYQnZibVZ1ZENCcGJuUnZJSFJvWlNCcGJuTjBZVzVqWlNCdFlYQWdZVzVrSUhOMFlYSjBjeUJ6WTNKdmJHd2dkbUZzZFdWY2JpQWdJQ29nYlc5dWFYUnZjbWx1WjF4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQnVaWGgwUTI5dGNHOXVaVzUwSUdOdmJYQnZibVZ1ZENCcGJuTjBZVzVqWlNCMGJ5QnlaVzVrWlhKY2JpQWdJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCamIyNTBZV2x1WlhJZ1kyOXVkR0ZwYm1WeUlIUnZJSEpsYm1SbGNpQnBiblJ2WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM04wY21sdVozMGdjbVZoWTNSU2IyOTBJRWxFSUhCeVpXWnBlRnh1SUNBZ0tpOWNiaUFnWDNKbFoybHpkR1Z5UTI5dGNHOXVaVzUwT2lCbWRXNWpkR2x2YmlodVpYaDBRMjl0Y0c5dVpXNTBMQ0JqYjI1MFlXbHVaWElwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlJQ1ltSUNoY2JpQWdJQ0FnSUNBZ0tHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQTlQVDBnUlV4RlRVVk9WRjlPVDBSRlgxUlpVRVVnZkh3Z1kyOXVkR0ZwYm1WeUxtNXZaR1ZVZVhCbElEMDlQU0JFVDBOZlRrOUVSVjlVV1ZCRktWeHVJQ0FnSUNBZ0tTeGNiaUFnSUNBZ0lDZGZjbVZuYVhOMFpYSkRiMjF3YjI1bGJuUW9MaTR1S1RvZ1ZHRnlaMlYwSUdOdmJuUmhhVzVsY2lCcGN5QnViM1FnWVNCRVQwMGdaV3hsYldWdWRDNG5YRzRnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hqYjI1MFlXbHVaWElnSmlZZ0tGeHVJQ0FnSUNBZ0tHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQTlQVDBnUlV4RlRVVk9WRjlPVDBSRlgxUlpVRVVnZkh3Z1kyOXVkR0ZwYm1WeUxtNXZaR1ZVZVhCbElEMDlQU0JFVDBOZlRrOUVSVjlVV1ZCRktWeHVJQ0FnSUNrcEtUdGNibHh1SUNBZ0lGSmxZV04wUW5KdmQzTmxja1YyWlc1MFJXMXBkSFJsY2k1bGJuTjFjbVZUWTNKdmJHeFdZV3gxWlUxdmJtbDBiM0pwYm1jb0tUdGNibHh1SUNBZ0lIWmhjaUJ5WldGamRGSnZiM1JKUkNBOUlGSmxZV04wVFc5MWJuUXVjbVZuYVhOMFpYSkRiMjUwWVdsdVpYSW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQnBibk4wWVc1alpYTkNlVkpsWVdOMFVtOXZkRWxFVzNKbFlXTjBVbTl2ZEVsRVhTQTlJRzVsZUhSRGIyMXdiMjVsYm5RN1hHNGdJQ0FnY21WMGRYSnVJSEpsWVdOMFVtOXZkRWxFTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaVzVrWlhJZ1lTQnVaWGNnWTI5dGNHOXVaVzUwSUdsdWRHOGdkR2hsSUVSUFRTNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRVZzWlcxbGJuUjlJRzVsZUhSRmJHVnRaVzUwSUdWc1pXMWxiblFnZEc4Z2NtVnVaR1Z5WEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWTI5dWRHRnBibVZ5SUdOdmJuUmhhVzVsY2lCMGJ5QnlaVzVrWlhJZ2FXNTBiMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlITm9iM1ZzWkZKbGRYTmxUV0Z5YTNWd0lHbG1JSGRsSUhOb2IzVnNaQ0J6YTJsd0lIUm9aU0J0WVhKcmRYQWdhVzV6WlhKMGFXOXVYRzRnSUNBcUlFQnlaWFIxY200Z2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCdVpYaDBRMjl0Y0c5dVpXNTBYRzRnSUNBcUwxeHVJQ0JmY21WdVpHVnlUbVYzVW05dmRFTnZiWEJ2Ym1WdWREb2dablZ1WTNScGIyNG9YRzRnSUNBZ2JtVjRkRVZzWlcxbGJuUXNYRzRnSUNBZ1kyOXVkR0ZwYm1WeUxGeHVJQ0FnSUhOb2IzVnNaRkpsZFhObFRXRnlhM1Z3WEc0Z0lDa2dlMXh1SUNBZ0lDOHZJRlpoY21sdmRYTWdjR0Z5ZEhNZ2IyWWdiM1Z5SUdOdlpHVWdLSE4xWTJnZ1lYTWdVbVZoWTNSRGIyMXdiM05wZEdWRGIyMXdiMjVsYm5RbmMxeHVJQ0FnSUM4dklGOXlaVzVrWlhKV1lXeHBaR0YwWldSRGIyMXdiMjVsYm5RcElHRnpjM1Z0WlNCMGFHRjBJR05oYkd4eklIUnZJSEpsYm1SbGNpQmhjbVZ1SjNRZ2JtVnpkR1ZrTzF4dUlDQWdJQzh2SUhabGNtbG1lU0IwYUdGMElIUm9ZWFFuY3lCMGFHVWdZMkZ6WlM1Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUxtTjFjbkpsYm5RZ1BUMGdiblZzYkN4Y2JpQWdJQ0FnSUNkZmNtVnVaR1Z5VG1WM1VtOXZkRU52YlhCdmJtVnVkQ2dwT2lCU1pXNWtaWElnYldWMGFHOWtjeUJ6YUc5MWJHUWdZbVVnWVNCd2RYSmxJR1oxYm1OMGFXOXVJQ2NnSzF4dUlDQWdJQ0FnSjI5bUlIQnliM0J6SUdGdVpDQnpkR0YwWlRzZ2RISnBaMmRsY21sdVp5QnVaWE4wWldRZ1kyOXRjRzl1Wlc1MElIVndaR0YwWlhNZ1puSnZiU0FuSUN0Y2JpQWdJQ0FnSUNkeVpXNWtaWElnYVhNZ2JtOTBJR0ZzYkc5M1pXUXVJRWxtSUc1bFkyVnpjMkZ5ZVN3Z2RISnBaMmRsY2lCdVpYTjBaV1FnZFhCa1lYUmxjeUJwYmlBbklDdGNiaUFnSUNBZ0lDZGpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVXVKMXh1SUNBZ0lDa2dPaUJ1ZFd4c0tUdGNibHh1SUNBZ0lIWmhjaUJqYjIxd2IyNWxiblJKYm5OMFlXNWpaU0E5SUdsdWMzUmhiblJwWVhSbFVtVmhZM1JEYjIxd2IyNWxiblFvYm1WNGRFVnNaVzFsYm5Rc0lHNTFiR3dwTzF4dUlDQWdJSFpoY2lCeVpXRmpkRkp2YjNSSlJDQTlJRkpsWVdOMFRXOTFiblF1WDNKbFoybHpkR1Z5UTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnWTI5dGNHOXVaVzUwU1c1emRHRnVZMlVzWEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWEpjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdMeThnVkdobElHbHVhWFJwWVd3Z2NtVnVaR1Z5SUdseklITjVibU5vY205dWIzVnpJR0oxZENCaGJua2dkWEJrWVhSbGN5QjBhR0YwSUdoaGNIQmxiaUJrZFhKcGJtZGNiaUFnSUNBdkx5QnlaVzVrWlhKcGJtY3NJR2x1SUdOdmJYQnZibVZ1ZEZkcGJHeE5iM1Z1ZENCdmNpQmpiMjF3YjI1bGJuUkVhV1JOYjNWdWRDd2dkMmxzYkNCaVpTQmlZWFJqYUdWa1hHNGdJQ0FnTHk4Z1lXTmpiM0prYVc1bklIUnZJSFJvWlNCamRYSnlaVzUwSUdKaGRHTm9hVzVuSUhOMGNtRjBaV2Q1TGx4dVhHNGdJQ0FnVW1WaFkzUlZjR1JoZEdWekxtSmhkR05vWldSVmNHUmhkR1Z6S0Z4dUlDQWdJQ0FnWW1GMFkyaGxaRTF2ZFc1MFEyOXRjRzl1Wlc1MFNXNTBiMDV2WkdVc1hHNGdJQ0FnSUNCamIyMXdiMjVsYm5SSmJuTjBZVzVqWlN4Y2JpQWdJQ0FnSUhKbFlXTjBVbTl2ZEVsRUxGeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxGeHVJQ0FnSUNBZ2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhCY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnTHk4Z1VtVmpiM0prSUhSb1pTQnliMjkwSUdWc1pXMWxiblFnYVc0Z1kyRnpaU0JwZENCc1lYUmxjaUJuWlhSeklIUnlZVzV6Y0d4aGJuUmxaQzVjYmlBZ0lDQWdJSEp2YjNSRmJHVnRaVzUwYzBKNVVtVmhZM1JTYjI5MFNVUmJjbVZoWTNSU2IyOTBTVVJkSUQxY2JpQWdJQ0FnSUNBZ1oyVjBVbVZoWTNSU2IyOTBSV3hsYldWdWRFbHVRMjl1ZEdGcGJtVnlLR052Ym5SaGFXNWxjaWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObE8xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlc1a1pYSnpJR0VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBJR2x1ZEc4Z2RHaGxJRVJQVFNCcGJpQjBhR1VnYzNWd2NHeHBaV1FnWUdOdmJuUmhhVzVsY21BdVhHNGdJQ0FxWEc0Z0lDQXFJRWxtSUhSb1pTQlNaV0ZqZENCamIyMXdiMjVsYm5RZ2QyRnpJSEJ5WlhacGIzVnpiSGtnY21WdVpHVnlaV1FnYVc1MGJ5QmdZMjl1ZEdGcGJtVnlZQ3dnZEdocGN5QjNhV3hzWEc0Z0lDQXFJSEJsY21admNtMGdZVzRnZFhCa1lYUmxJRzl1SUdsMElHRnVaQ0J2Ym14NUlHMTFkR0YwWlNCMGFHVWdSRTlOSUdGeklHNWxZMlZ6YzJGeWVTQjBieUJ5Wldac1pXTjBJSFJvWlZ4dUlDQWdLaUJzWVhSbGMzUWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ2JtVjRkRVZzWlcxbGJuUWdRMjl0Y0c5dVpXNTBJR1ZzWlcxbGJuUWdkRzhnY21WdVpHVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVZzWlcxbGJuUjlJR052Ym5SaGFXNWxjaUJFVDAwZ1pXeGxiV1Z1ZENCMGJ5QnlaVzVrWlhJZ2FXNTBieTVjYmlBZ0lDb2dRSEJoY21GdElIcy9ablZ1WTNScGIyNTlJR05oYkd4aVlXTnJJR1oxYm1OMGFXOXVJSFJ5YVdkblpYSmxaQ0J2YmlCamIyMXdiR1YwYVc5dVhHNGdJQ0FxSUVCeVpYUjFjbTRnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JEYjIxd2IyNWxiblFnYVc1emRHRnVZMlVnY21WdVpHVnlaV1FnYVc0Z1lHTnZiblJoYVc1bGNtQXVYRzRnSUNBcUwxeHVJQ0J5Wlc1a1pYSTZJR1oxYm1OMGFXOXVLRzVsZUhSRmJHVnRaVzUwTENCamIyNTBZV2x1WlhJc0lHTmhiR3hpWVdOcktTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUZKbFlXTjBSV3hsYldWdWRDNXBjMVpoYkdsa1JXeGxiV1Z1ZENodVpYaDBSV3hsYldWdWRDa3NYRzRnSUNBZ0lDQW5VbVZoWTNRdWNtVnVaR1Z5S0NrNklFbHVkbUZzYVdRZ1kyOXRjRzl1Wlc1MElHVnNaVzFsYm5RdUpYTW5MRnh1SUNBZ0lDQWdLRnh1SUNBZ0lDQWdJQ0IwZVhCbGIyWWdibVY0ZEVWc1pXMWxiblFnUFQwOUlDZHpkSEpwYm1jbklEOWNiaUFnSUNBZ0lDQWdJQ0FuSUVsdWMzUmxZV1FnYjJZZ2NHRnpjMmx1WnlCaGJpQmxiR1Z0Wlc1MElITjBjbWx1Wnl3Z2JXRnJaU0J6ZFhKbElIUnZJR2x1YzNSaGJuUnBZWFJsSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJQ2RwZENCaWVTQndZWE56YVc1bklHbDBJSFJ2SUZKbFlXTjBMbU55WldGMFpVVnNaVzFsYm5RdUp5QTZYRzRnSUNBZ0lDQWdJSFI1Y0dWdlppQnVaWGgwUld4bGJXVnVkQ0E5UFQwZ0oyWjFibU4wYVc5dUp5QS9YRzRnSUNBZ0lDQWdJQ0FnSnlCSmJuTjBaV0ZrSUc5bUlIQmhjM05wYm1jZ1lTQmpiMjF3YjI1bGJuUWdZMnhoYzNNc0lHMWhhMlVnYzNWeVpTQjBieUJwYm5OMFlXNTBhV0YwWlNBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuYVhRZ1lua2djR0Z6YzJsdVp5QnBkQ0IwYnlCU1pXRmpkQzVqY21WaGRHVkZiR1Z0Wlc1MExpY2dPbHh1SUNBZ0lDQWdJQ0F2THlCRGFHVmpheUJwWmlCcGRDQnhkV0ZqYTNNZ2JHbHJaU0JoYmlCbGJHVnRaVzUwWEc0Z0lDQWdJQ0FnSUc1bGVIUkZiR1Z0Wlc1MElDRTlJRzUxYkd3Z0ppWWdibVY0ZEVWc1pXMWxiblF1Y0hKdmNITWdJVDA5SUhWdVpHVm1hVzVsWkNBL1hHNGdJQ0FnSUNBZ0lDQWdKeUJVYUdseklHMWhlU0JpWlNCallYVnpaV1FnWW5rZ2RXNXBiblJsYm5ScGIyNWhiR3g1SUd4dllXUnBibWNnZEhkdklHbHVaR1Z3Wlc1a1pXNTBJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZGpiM0JwWlhNZ2IyWWdVbVZoWTNRdUp5QTZYRzRnSUNBZ0lDQWdJQ0FnSnlkY2JpQWdJQ0FnSUNsY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaHVaWGgwUld4bGJXVnVkQ2twS1R0Y2JseHVJQ0FnSUhaaGNpQndjbVYyUTI5dGNHOXVaVzUwSUQwZ2FXNXpkR0Z1WTJWelFubFNaV0ZqZEZKdmIzUkpSRnRuWlhSU1pXRmpkRkp2YjNSSlJDaGpiMjUwWVdsdVpYSXBYVHRjYmx4dUlDQWdJR2xtSUNod2NtVjJRMjl0Y0c5dVpXNTBLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2NISmxka1ZzWlcxbGJuUWdQU0J3Y21WMlEyOXRjRzl1Wlc1MExsOWpkWEp5Wlc1MFJXeGxiV1Z1ZER0Y2JpQWdJQ0FnSUdsbUlDaHphRzkxYkdSVmNHUmhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDaHdjbVYyUld4bGJXVnVkQ3dnYm1WNGRFVnNaVzFsYm5RcEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQlNaV0ZqZEUxdmRXNTBMbDkxY0dSaGRHVlNiMjkwUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnSUNBZ0lIQnlaWFpEYjIxd2IyNWxiblFzWEc0Z0lDQWdJQ0FnSUNBZ2JtVjRkRVZzWlcxbGJuUXNYRzRnSUNBZ0lDQWdJQ0FnWTI5dWRHRnBibVZ5TEZ4dUlDQWdJQ0FnSUNBZ0lHTmhiR3hpWVdOclhHNGdJQ0FnSUNBZ0lDa3VaMlYwVUhWaWJHbGpTVzV6ZEdGdVkyVW9LVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJRkpsWVdOMFRXOTFiblF1ZFc1dGIzVnVkRU52YlhCdmJtVnVkRUYwVG05a1pTaGpiMjUwWVdsdVpYSXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJ5WldGamRGSnZiM1JGYkdWdFpXNTBJRDBnWjJWMFVtVmhZM1JTYjI5MFJXeGxiV1Z1ZEVsdVEyOXVkR0ZwYm1WeUtHTnZiblJoYVc1bGNpazdYRzRnSUNBZ2RtRnlJR052Ym5SaGFXNWxja2hoYzFKbFlXTjBUV0Z5YTNWd0lEMWNiaUFnSUNBZ0lISmxZV04wVW05dmRFVnNaVzFsYm5RZ0ppWWdVbVZoWTNSTmIzVnVkQzVwYzFKbGJtUmxjbVZrUW5sU1pXRmpkQ2h5WldGamRGSnZiM1JGYkdWdFpXNTBLVHRjYmx4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJR2xtSUNnaFkyOXVkR0ZwYm1WeVNHRnpVbVZoWTNSTllYSnJkWEFnZkh3Z2NtVmhZM1JTYjI5MFJXeGxiV1Z1ZEM1dVpYaDBVMmxpYkdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2NtOXZkRVZzWlcxbGJuUlRhV0pzYVc1bklEMGdjbVZoWTNSU2IyOTBSV3hsYldWdWREdGNiaUFnSUNBZ0lDQWdkMmhwYkdVZ0tISnZiM1JGYkdWdFpXNTBVMmxpYkdsdVp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaFNaV0ZqZEUxdmRXNTBMbWx6VW1WdVpHVnlaV1JDZVZKbFlXTjBLSEp2YjNSRmJHVnRaVzUwVTJsaWJHbHVaeWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdKM0psYm1SbGNpZ3BPaUJVWVhKblpYUWdibTlrWlNCb1lYTWdiV0Z5YTNWd0lISmxibVJsY21Wa0lHSjVJRkpsWVdOMExDQmlkWFFnZEdobGNtVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ2RoY21VZ2RXNXlaV3hoZEdWa0lHNXZaR1Z6SUdGeklIZGxiR3d1SUZSb2FYTWdhWE1nYlc5emRDQmpiMjF0YjI1c2VTQmpZWFZ6WldRZ1lua2dKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ2QzYUdsMFpTMXpjR0ZqWlNCcGJuTmxjblJsWkNCaGNtOTFibVFnYzJWeWRtVnlMWEpsYm1SbGNtVmtJRzFoY210MWNDNG5YRzRnSUNBZ0lDQWdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQnliMjkwUld4bGJXVnVkRk5wWW14cGJtY2dQU0J5YjI5MFJXeGxiV1Z1ZEZOcFlteHBibWN1Ym1WNGRGTnBZbXhwYm1jN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdjMmh2ZFd4a1VtVjFjMlZOWVhKcmRYQWdQU0JqYjI1MFlXbHVaWEpJWVhOU1pXRmpkRTFoY210MWNDQW1KaUFoY0hKbGRrTnZiWEJ2Ym1WdWREdGNibHh1SUNBZ0lIWmhjaUJqYjIxd2IyNWxiblFnUFNCU1pXRmpkRTF2ZFc1MExsOXlaVzVrWlhKT1pYZFNiMjkwUTI5dGNHOXVaVzUwS0Z4dUlDQWdJQ0FnYm1WNGRFVnNaVzFsYm5Rc1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJc1hHNGdJQ0FnSUNCemFHOTFiR1JTWlhWelpVMWhjbXQxY0Z4dUlDQWdJQ2t1WjJWMFVIVmliR2xqU1c1emRHRnVZMlVvS1R0Y2JpQWdJQ0JwWmlBb1kyRnNiR0poWTJzcElIdGNiaUFnSUNBZ0lHTmhiR3hpWVdOckxtTmhiR3dvWTI5dGNHOXVaVzUwS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHTnZiWEJ2Ym1WdWREdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5dWMzUnlkV04wY3lCaElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTQnZaaUJnWTI5dWMzUnlkV04wYjNKZ0lIZHBkR2dnWUdsdWFYUnBZV3hRY205d2MyQWdZVzVrWEc0Z0lDQXFJSEpsYm1SbGNuTWdhWFFnYVc1MGJ5QjBhR1VnYzNWd2NHeHBaV1FnWUdOdmJuUmhhVzVsY21BdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNTlJR052Ym5OMGNuVmpkRzl5SUZKbFlXTjBJR052YlhCdmJtVnVkQ0JqYjI1emRISjFZM1J2Y2k1Y2JpQWdJQ29nUUhCaGNtRnRJSHMvYjJKcVpXTjBmU0J3Y205d2N5QkpibWwwYVdGc0lIQnliM0J6SUc5bUlIUm9aU0JqYjIxd2IyNWxiblFnYVc1emRHRnVZMlV1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdSRTlOUld4bGJXVnVkSDBnWTI5dWRHRnBibVZ5SUVSUFRTQmxiR1Z0Wlc1MElIUnZJSEpsYm1SbGNpQnBiblJ2TGx4dUlDQWdLaUJBY21WMGRYSnVJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdRMjl0Y0c5dVpXNTBJR2x1YzNSaGJtTmxJSEpsYm1SbGNtVmtJR2x1SUdCamIyNTBZV2x1WlhKZ0xseHVJQ0FnS2k5Y2JpQWdZMjl1YzNSeWRXTjBRVzVrVW1WdVpHVnlRMjl0Y0c5dVpXNTBPaUJtZFc1amRHbHZiaWhqYjI1emRISjFZM1J2Y2l3Z2NISnZjSE1zSUdOdmJuUmhhVzVsY2lrZ2UxeHVJQ0FnSUhaaGNpQmxiR1Z0Wlc1MElEMGdVbVZoWTNSRmJHVnRaVzUwTG1OeVpXRjBaVVZzWlcxbGJuUW9ZMjl1YzNSeWRXTjBiM0lzSUhCeWIzQnpLVHRjYmlBZ0lDQnlaWFIxY200Z1VtVmhZM1JOYjNWdWRDNXlaVzVrWlhJb1pXeGxiV1Z1ZEN3Z1kyOXVkR0ZwYm1WeUtUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUTI5dWMzUnlkV04wY3lCaElHTnZiWEJ2Ym1WdWRDQnBibk4wWVc1alpTQnZaaUJnWTI5dWMzUnlkV04wYjNKZ0lIZHBkR2dnWUdsdWFYUnBZV3hRY205d2MyQWdZVzVrWEc0Z0lDQXFJSEpsYm1SbGNuTWdhWFFnYVc1MGJ5QmhJR052Ym5SaGFXNWxjaUJ1YjJSbElHbGtaVzUwYVdacFpXUWdZbmtnYzNWd2NHeHBaV1FnWUdsa1lDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnWTI5dGNHOXVaVzUwUTI5dWMzUnlkV04wYjNJZ1VtVmhZM1FnWTI5dGNHOXVaVzUwSUdOdmJuTjBjblZqZEc5eVhHNGdJQ0FxSUVCd1lYSmhiU0I3UDI5aWFtVmpkSDBnY0hKdmNITWdTVzVwZEdsaGJDQndjbTl3Y3lCdlppQjBhR1VnWTI5dGNHOXVaVzUwSUdsdWMzUmhibU5sTGx4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhV1FnU1VRZ2IyWWdkR2hsSUVSUFRTQmxiR1Z0Wlc1MElIUnZJSEpsYm1SbGNpQnBiblJ2TGx4dUlDQWdLaUJBY21WMGRYSnVJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdRMjl0Y0c5dVpXNTBJR2x1YzNSaGJtTmxJSEpsYm1SbGNtVmtJR2x1SUhSb1pTQmpiMjUwWVdsdVpYSWdibTlrWlM1Y2JpQWdJQ292WEc0Z0lHTnZibk4wY25WamRFRnVaRkpsYm1SbGNrTnZiWEJ2Ym1WdWRFSjVTVVE2SUdaMWJtTjBhVzl1S0dOdmJuTjBjblZqZEc5eUxDQndjbTl3Y3l3Z2FXUXBJSHRjYmlBZ0lDQjJZWElnWkc5dFRtOWtaU0E5SUdSdlkzVnRaVzUwTG1kbGRFVnNaVzFsYm5SQ2VVbGtLR2xrS1R0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdaRzl0VG05a1pTeGNiaUFnSUNBZ0lDZFVjbWxsWkNCMGJ5Qm5aWFFnWld4bGJXVnVkQ0IzYVhSb0lHbGtJRzltSUZ3aUpYTmNJaUJpZFhRZ2FYUWdhWE1nYm05MElIQnlaWE5sYm5RZ2IyNGdkR2hsSUhCaFoyVXVKeXhjYmlBZ0lDQWdJR2xrWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoa2IyMU9iMlJsS1NrN1hHNGdJQ0FnY21WMGRYSnVJRkpsWVdOMFRXOTFiblF1WTI5dWMzUnlkV04wUVc1a1VtVnVaR1Z5UTI5dGNHOXVaVzUwS0dOdmJuTjBjblZqZEc5eUxDQndjbTl3Y3l3Z1pHOXRUbTlrWlNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsWjJsemRHVnljeUJoSUdOdmJuUmhhVzVsY2lCdWIyUmxJR2x1ZEc4Z2QyaHBZMmdnVW1WaFkzUWdZMjl0Y0c5dVpXNTBjeUIzYVd4c0lHSmxJSEpsYm1SbGNtVmtMbHh1SUNBZ0tpQlVhR2x6SUdGc2MyOGdZM0psWVhSbGN5QjBhR1VnWENKeVpXRmpkRkp2YjNSY0lpQkpSQ0IwYUdGMElIZHBiR3dnWW1VZ1lYTnphV2R1WldRZ2RHOGdkR2hsSUdWc1pXMWxiblJjYmlBZ0lDb2djbVZ1WkdWeVpXUWdkMmwwYUdsdUxseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMFJQVFVWc1pXMWxiblI5SUdOdmJuUmhhVzVsY2lCRVQwMGdaV3hsYldWdWRDQjBieUJ5WldkcGMzUmxjaUJoY3lCaElHTnZiblJoYVc1bGNpNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCVWFHVWdYQ0p5WldGamRGSnZiM1JjSWlCSlJDQnZaaUJsYkdWdFpXNTBjeUJ5Wlc1a1pYSmxaQ0IzYVhSb2FXNHVYRzRnSUNBcUwxeHVJQ0J5WldkcGMzUmxja052Ym5SaGFXNWxjam9nWm5WdVkzUnBiMjRvWTI5dWRHRnBibVZ5S1NCN1hHNGdJQ0FnZG1GeUlISmxZV04wVW05dmRFbEVJRDBnWjJWMFVtVmhZM1JTYjI5MFNVUW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQnBaaUFvY21WaFkzUlNiMjkwU1VRcElIdGNiaUFnSUNBZ0lDOHZJRWxtSUc5dVpTQmxlR2x6ZEhNc0lHMWhhMlVnYzNWeVpTQnBkQ0JwY3lCaElIWmhiR2xrSUZ3aWNtVmhZM1JTYjI5MFhDSWdTVVF1WEc0Z0lDQWdJQ0J5WldGamRGSnZiM1JKUkNBOUlGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpMbWRsZEZKbFlXTjBVbTl2ZEVsRVJuSnZiVTV2WkdWSlJDaHlaV0ZqZEZKdmIzUkpSQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2doY21WaFkzUlNiMjkwU1VRcElIdGNiaUFnSUNBZ0lDOHZJRTV2SUhaaGJHbGtJRndpY21WaFkzUlNiMjkwWENJZ1NVUWdabTkxYm1Rc0lHTnlaV0YwWlNCdmJtVXVYRzRnSUNBZ0lDQnlaV0ZqZEZKdmIzUkpSQ0E5SUZKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWekxtTnlaV0YwWlZKbFlXTjBVbTl2ZEVsRUtDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuUmhhVzVsY25OQ2VWSmxZV04wVW05dmRFbEVXM0psWVdOMFVtOXZkRWxFWFNBOUlHTnZiblJoYVc1bGNqdGNiaUFnSUNCeVpYUjFjbTRnY21WaFkzUlNiMjkwU1VRN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlZ1Ylc5MWJuUnpJR0Z1WkNCa1pYTjBjbTk1Y3lCMGFHVWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElISmxibVJsY21Wa0lHbHVJSFJvWlNCZ1kyOXVkR0ZwYm1WeVlDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRFVDAxRmJHVnRaVzUwZlNCamIyNTBZV2x1WlhJZ1JFOU5JR1ZzWlcxbGJuUWdZMjl1ZEdGcGJtbHVaeUJoSUZKbFlXTjBJR052YlhCdmJtVnVkQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdZbTl2YkdWaGJuMGdWSEoxWlNCcFppQmhJR052YlhCdmJtVnVkQ0IzWVhNZ1ptOTFibVFnYVc0Z1lXNWtJSFZ1Ylc5MWJuUmxaQ0JtY205dFhHNGdJQ0FxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdCamIyNTBZV2x1WlhKZ1hHNGdJQ0FxTDF4dUlDQjFibTF2ZFc1MFEyOXRjRzl1Wlc1MFFYUk9iMlJsT2lCbWRXNWpkR2x2YmloamIyNTBZV2x1WlhJcElIdGNiaUFnSUNBdkx5QldZWEpwYjNWeklIQmhjblJ6SUc5bUlHOTFjaUJqYjJSbElDaHpkV05vSUdGeklGSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSjNOY2JpQWdJQ0F2THlCZmNtVnVaR1Z5Vm1Gc2FXUmhkR1ZrUTI5dGNHOXVaVzUwS1NCaGMzTjFiV1VnZEdoaGRDQmpZV3hzY3lCMGJ5QnlaVzVrWlhJZ1lYSmxiaWQwSUc1bGMzUmxaRHRjYmlBZ0lDQXZMeUIyWlhKcFpua2dkR2hoZENCMGFHRjBKM01nZEdobElHTmhjMlV1SUNoVGRISnBZM1JzZVNCemNHVmhhMmx1Wnl3Z2RXNXRiM1Z1ZEdsdVp5QjNiMjRuZENCallYVnpaU0JoWEc0Z0lDQWdMeThnY21WdVpHVnlJR0oxZENCM1pTQnpkR2xzYkNCa2IyNG5kQ0JsZUhCbFkzUWdkRzhnWW1VZ2FXNGdZU0J5Wlc1a1pYSWdZMkZzYkNCb1pYSmxMaWxjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUZKbFlXTjBRM1Z5Y21WdWRFOTNibVZ5TG1OMWNuSmxiblFnUFQwZ2JuVnNiQ3hjYmlBZ0lDQWdJQ2QxYm0xdmRXNTBRMjl0Y0c5dVpXNTBRWFJPYjJSbEtDazZJRkpsYm1SbGNpQnRaWFJvYjJSeklITm9iM1ZzWkNCaVpTQmhJSEIxY21VZ1puVnVZM1JwYjI0Z2IyWWdKeUFyWEc0Z0lDQWdJQ0FuY0hKdmNITWdZVzVrSUhOMFlYUmxPeUIwY21sbloyVnlhVzVuSUc1bGMzUmxaQ0JqYjIxd2IyNWxiblFnZFhCa1lYUmxjeUJtY205dElISmxibVJsY2lCcGN5QW5JQ3RjYmlBZ0lDQWdJQ2R1YjNRZ1lXeHNiM2RsWkM0Z1NXWWdibVZqWlhOellYSjVMQ0IwY21sbloyVnlJRzVsYzNSbFpDQjFjR1JoZEdWeklHbHVJQ2NnSzF4dUlDQWdJQ0FnSjJOdmJYQnZibVZ1ZEVScFpGVndaR0YwWlM0blhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dVhHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaUFtSmlBb1hHNGdJQ0FnSUNBZ0lDaGpiMjUwWVdsdVpYSXVibTlrWlZSNWNHVWdQVDA5SUVWTVJVMUZUbFJmVGs5RVJWOVVXVkJGSUh4OElHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQTlQVDBnUkU5RFgwNVBSRVZmVkZsUVJTbGNiaUFnSUNBZ0lDa3NYRzRnSUNBZ0lDQW5kVzV0YjNWdWRFTnZiWEJ2Ym1WdWRFRjBUbTlrWlNndUxpNHBPaUJVWVhKblpYUWdZMjl1ZEdGcGJtVnlJR2x6SUc1dmRDQmhJRVJQVFNCbGJHVnRaVzUwTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHTnZiblJoYVc1bGNpQW1KaUFvWEc0Z0lDQWdJQ0FvWTI5dWRHRnBibVZ5TG01dlpHVlVlWEJsSUQwOVBTQkZURVZOUlU1VVgwNVBSRVZmVkZsUVJTQjhmQ0JqYjI1MFlXbHVaWEl1Ym05a1pWUjVjR1VnUFQwOUlFUlBRMTlPVDBSRlgxUlpVRVVwWEc0Z0lDQWdLU2twTzF4dVhHNGdJQ0FnZG1GeUlISmxZV04wVW05dmRFbEVJRDBnWjJWMFVtVmhZM1JTYjI5MFNVUW9ZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQjJZWElnWTI5dGNHOXVaVzUwSUQwZ2FXNXpkR0Z1WTJWelFubFNaV0ZqZEZKdmIzUkpSRnR5WldGamRGSnZiM1JKUkYwN1hHNGdJQ0FnYVdZZ0tDRmpiMjF3YjI1bGJuUXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0I5WEc0Z0lDQWdVbVZoWTNSTmIzVnVkQzUxYm0xdmRXNTBRMjl0Y0c5dVpXNTBSbkp2YlU1dlpHVW9ZMjl0Y0c5dVpXNTBMQ0JqYjI1MFlXbHVaWElwTzF4dUlDQWdJR1JsYkdWMFpTQnBibk4wWVc1alpYTkNlVkpsWVdOMFVtOXZkRWxFVzNKbFlXTjBVbTl2ZEVsRVhUdGNiaUFnSUNCa1pXeGxkR1VnWTI5dWRHRnBibVZ5YzBKNVVtVmhZM1JTYjI5MFNVUmJjbVZoWTNSU2IyOTBTVVJkTzF4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJR1JsYkdWMFpTQnliMjkwUld4bGJXVnVkSE5DZVZKbFlXTjBVbTl2ZEVsRVczSmxZV04wVW05dmRFbEVYVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZWdWJXOTFiblJ6SUdFZ1kyOXRjRzl1Wlc1MElHRnVaQ0J5WlcxdmRtVnpJR2wwSUdaeWIyMGdkR2hsSUVSUFRTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFTnZiWEJ2Ym1WdWRIMGdhVzV6ZEdGdVkyVWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MElHbHVjM1JoYm1ObExseHVJQ0FnS2lCQWNHRnlZVzBnZTBSUFRVVnNaVzFsYm5SOUlHTnZiblJoYVc1bGNpQkVUMDBnWld4bGJXVnVkQ0IwYnlCMWJtMXZkVzUwSUdaeWIyMHVYRzRnSUNBcUlFQm1hVzVoYkZ4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb2dRSE5sWlNCN1VtVmhZM1JOYjNWdWRDNTFibTF2ZFc1MFEyOXRjRzl1Wlc1MFFYUk9iMlJsZlZ4dUlDQWdLaTljYmlBZ2RXNXRiM1Z1ZEVOdmJYQnZibVZ1ZEVaeWIyMU9iMlJsT2lCbWRXNWpkR2x2YmlocGJuTjBZVzVqWlN3Z1kyOXVkR0ZwYm1WeUtTQjdYRzRnSUNBZ1VtVmhZM1JTWldOdmJtTnBiR1Z5TG5WdWJXOTFiblJEYjIxd2IyNWxiblFvYVc1emRHRnVZMlVwTzF4dVhHNGdJQ0FnYVdZZ0tHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQTlQVDBnUkU5RFgwNVBSRVZmVkZsUVJTa2dlMXh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlJRDBnWTI5dWRHRnBibVZ5TG1SdlkzVnRaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUJvZEhSd09pOHZhbk53WlhKbUxtTnZiUzlsYlhCMGVXbHVaeTFoTFc1dlpHVmNiaUFnSUNCM2FHbHNaU0FvWTI5dWRHRnBibVZ5TG14aGMzUkRhR2xzWkNrZ2UxeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxuSmxiVzkyWlVOb2FXeGtLR052Ym5SaGFXNWxjaTVzWVhOMFEyaHBiR1FwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1JtbHVaSE1nZEdobElHTnZiblJoYVc1bGNpQkVUMDBnWld4bGJXVnVkQ0IwYUdGMElHTnZiblJoYVc1eklGSmxZV04wSUdOdmJYQnZibVZ1ZENCMGJ5QjNhR2xqYUNCMGFHVmNiaUFnSUNvZ2MzVndjR3hwWldRZ1JFOU5JR0JwWkdBZ1ltVnNiMjVuY3k1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHbGtJRlJvWlNCSlJDQnZaaUJoYmlCbGJHVnRaVzUwSUhKbGJtUmxjbVZrSUdKNUlHRWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2lCQWNtVjBkWEp1SUhzL1JFOU5SV3hsYldWdWRIMGdSRTlOSUdWc1pXMWxiblFnZEdoaGRDQmpiMjUwWVdsdWN5QjBhR1VnWUdsa1lDNWNiaUFnSUNvdlhHNGdJR1pwYm1SU1pXRmpkRU52Ym5SaGFXNWxja1p2Y2tsRU9pQm1kVzVqZEdsdmJpaHBaQ2tnZTF4dUlDQWdJSFpoY2lCeVpXRmpkRkp2YjNSSlJDQTlJRkpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6TG1kbGRGSmxZV04wVW05dmRFbEVSbkp2YlU1dlpHVkpSQ2hwWkNrN1hHNGdJQ0FnZG1GeUlHTnZiblJoYVc1bGNpQTlJR052Ym5SaGFXNWxjbk5DZVZKbFlXTjBVbTl2ZEVsRVczSmxZV04wVW05dmRFbEVYVHRjYmx4dUlDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJSFpoY2lCeWIyOTBSV3hsYldWdWRDQTlJSEp2YjNSRmJHVnRaVzUwYzBKNVVtVmhZM1JTYjI5MFNVUmJjbVZoWTNSU2IyOTBTVVJkTzF4dUlDQWdJQ0FnYVdZZ0tISnZiM1JGYkdWdFpXNTBJQ1ltSUhKdmIzUkZiR1Z0Wlc1MExuQmhjbVZ1ZEU1dlpHVWdJVDA5SUdOdmJuUmhhVzVsY2lrZ2UxeHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQWdJQzh2SUVOaGJHd2dhVzUwWlhKdVlXeEhaWFJKUkNCb1pYSmxJR0psWTJGMWMyVWdaMlYwU1VRZ1kyRnNiSE1nYVhOV1lXeHBaQ0IzYUdsamFDQmpZV3hzYzF4dUlDQWdJQ0FnSUNBZ0lDOHZJR1pwYm1SU1pXRmpkRU52Ym5SaGFXNWxja1p2Y2tsRUlDaDBhR2x6SUdaMWJtTjBhVzl1S1M1Y2JpQWdJQ0FnSUNBZ0lDQnBiblJsY201aGJFZGxkRWxFS0hKdmIzUkZiR1Z0Wlc1MEtTQTlQVDBnY21WaFkzUlNiMjkwU1VRc1hHNGdJQ0FnSUNBZ0lDQWdKMUpsWVdOMFRXOTFiblE2SUZKdmIzUWdaV3hsYldWdWRDQkpSQ0JrYVdabVpYSmxaQ0JtY205dElISmxZV04wVW05dmRFbEVMaWRjYmlBZ0lDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDZ3ZMeUJEWVd4c0lHbHVkR1Z5Ym1Gc1IyVjBTVVFnYUdWeVpTQmlaV05oZFhObElHZGxkRWxFSUdOaGJHeHpJR2x6Vm1Gc2FXUWdkMmhwWTJnZ1kyRnNiSE5jYmlBZ0lDQWdJQ0FnTHk4Z1ptbHVaRkpsWVdOMFEyOXVkR0ZwYm1WeVJtOXlTVVFnS0hSb2FYTWdablZ1WTNScGIyNHBMbHh1SUNBZ0lDQWdJQ0JwYm5SbGNtNWhiRWRsZEVsRUtISnZiM1JGYkdWdFpXNTBLU0E5UFQwZ2NtVmhZM1JTYjI5MFNVUXBLVHRjYmx4dUlDQWdJQ0FnSUNCMllYSWdZMjl1ZEdGcGJtVnlRMmhwYkdRZ1BTQmpiMjUwWVdsdVpYSXVabWx5YzNSRGFHbHNaRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHTnZiblJoYVc1bGNrTm9hV3hrSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WldGamRGSnZiM1JKUkNBOVBUMGdhVzUwWlhKdVlXeEhaWFJKUkNoamIyNTBZV2x1WlhKRGFHbHNaQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJKWmlCMGFHVWdZMjl1ZEdGcGJtVnlJR2hoY3lCaElHNWxkeUJqYUdsc1pDQjNhWFJvSUhSb1pTQnpZVzFsSUVsRUlHRnpJSFJvWlNCdmJHUmNiaUFnSUNBZ0lDQWdJQ0F2THlCeWIyOTBJR1ZzWlcxbGJuUXNJSFJvWlc0Z2NtOXZkRVZzWlcxbGJuUnpRbmxTWldGamRGSnZiM1JKUkZ0eVpXRmpkRkp2YjNSSlJGMGdhWE5jYmlBZ0lDQWdJQ0FnSUNBdkx5QnFkWE4wSUhOMFlXeGxJR0Z1WkNCdVpXVmtjeUIwYnlCaVpTQjFjR1JoZEdWa0xpQlVhR1VnWTJGelpTQjBhR0YwSUdSbGMyVnlkbVZ6SUdGY2JpQWdJQ0FnSUNBZ0lDQXZMeUIzWVhKdWFXNW5JR2x6SUhkb1pXNGdkR2hsSUdOdmJuUmhhVzVsY2lCcGN5QmxiWEIwZVM1Y2JpQWdJQ0FnSUNBZ0lDQnliMjkwUld4bGJXVnVkSE5DZVZKbFlXTjBVbTl2ZEVsRVczSmxZV04wVW05dmRFbEVYU0E5SUdOdmJuUmhhVzVsY2tOb2FXeGtPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5VbVZoWTNSTmIzVnVkRG9nVW05dmRDQmxiR1Z0Wlc1MElHaGhjeUJpWldWdUlISmxiVzkyWldRZ1puSnZiU0JwZEhNZ2IzSnBaMmx1WVd3Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNBblkyOXVkR0ZwYm1WeUxpQk9aWGNnWTI5dWRHRnBibVZ5T2ljc0lISnZiM1JGYkdWdFpXNTBMbkJoY21WdWRFNXZaR1ZjYmlBZ0lDQWdJQ0FnSUNBcElEb2diblZzYkNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnWTI5dWRHRnBibVZ5TzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkdhVzVrY3lCaGJpQmxiR1Z0Wlc1MElISmxibVJsY21Wa0lHSjVJRkpsWVdOMElIZHBkR2dnZEdobElITjFjSEJzYVdWa0lFbEVMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYVdRZ1NVUWdiMllnWVNCRVQwMGdibTlrWlNCcGJpQjBhR1VnVW1WaFkzUWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVUMDFGYkdWdFpXNTBmU0JTYjI5MElFUlBUU0J1YjJSbElHOW1JSFJvWlNCU1pXRmpkQ0JqYjIxd2IyNWxiblF1WEc0Z0lDQXFMMXh1SUNCbWFXNWtVbVZoWTNST2IyUmxRbmxKUkRvZ1puVnVZM1JwYjI0b2FXUXBJSHRjYmlBZ0lDQjJZWElnY21WaFkzUlNiMjkwSUQwZ1VtVmhZM1JOYjNWdWRDNW1hVzVrVW1WaFkzUkRiMjUwWVdsdVpYSkdiM0pKUkNocFpDazdYRzRnSUNBZ2NtVjBkWEp1SUZKbFlXTjBUVzkxYm5RdVptbHVaRU52YlhCdmJtVnVkRkp2YjNRb2NtVmhZM1JTYjI5MExDQnBaQ2s3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGUnlkV1VnYVdZZ2RHaGxJSE4xY0hCc2FXVmtJR0J1YjJSbFlDQnBjeUJ5Wlc1a1pYSmxaQ0JpZVNCU1pXRmpkQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUhzcWZTQnViMlJsSUVSUFRTQkZiR1Z0Wlc1MElIUnZJR05vWldOckxseHVJQ0FnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlNCVWNuVmxJR2xtSUhSb1pTQkVUMDBnUld4bGJXVnVkQ0JoY0hCbFlYSnpJSFJ2SUdKbElISmxibVJsY21Wa0lHSjVJRkpsWVdOMExseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHbHpVbVZ1WkdWeVpXUkNlVkpsWVdOME9pQm1kVzVqZEdsdmJpaHViMlJsS1NCN1hHNGdJQ0FnYVdZZ0tHNXZaR1V1Ym05a1pWUjVjR1VnSVQwOUlERXBJSHRjYmlBZ0lDQWdJQzh2SUU1dmRDQmhJRVJQVFVWc1pXMWxiblFzSUhSb1pYSmxabTl5WlNCdWIzUWdZU0JTWldGamRDQmpiMjF3YjI1bGJuUmNiaUFnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR2xrSUQwZ1VtVmhZM1JOYjNWdWRDNW5aWFJKUkNodWIyUmxLVHRjYmlBZ0lDQnlaWFIxY200Z2FXUWdQeUJwWkM1amFHRnlRWFFvTUNrZ1BUMDlJRk5GVUVGU1FWUlBVaUE2SUdaaGJITmxPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVWNtRjJaWEp6WlhNZ2RYQWdkR2hsSUdGdVkyVnpkRzl5Y3lCdlppQjBhR1VnYzNWd2NHeHBaV1FnYm05a1pTQjBieUJtYVc1a0lHRWdibTlrWlNCMGFHRjBJR2x6SUdGY2JpQWdJQ29nUkU5TklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlHRWdVbVZoWTNRZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdleXA5SUc1dlpHVmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1AwUlBUVVYyWlc1MFZHRnlaMlYwZlZ4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUdkbGRFWnBjbk4wVW1WaFkzUkVUMDA2SUdaMWJtTjBhVzl1S0c1dlpHVXBJSHRjYmlBZ0lDQjJZWElnWTNWeWNtVnVkQ0E5SUc1dlpHVTdYRzRnSUNBZ2QyaHBiR1VnS0dOMWNuSmxiblFnSmlZZ1kzVnljbVZ1ZEM1d1lYSmxiblJPYjJSbElDRTlQU0JqZFhKeVpXNTBLU0I3WEc0Z0lDQWdJQ0JwWmlBb1VtVmhZM1JOYjNWdWRDNXBjMUpsYm1SbGNtVmtRbmxTWldGamRDaGpkWEp5Wlc1MEtTa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdZM1Z5Y21WdWREdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTjFjbkpsYm5RZ1BTQmpkWEp5Wlc1MExuQmhjbVZ1ZEU1dlpHVTdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJHYVc1a2N5QmhJRzV2WkdVZ2QybDBhQ0IwYUdVZ2MzVndjR3hwWldRZ1lIUmhjbWRsZEVsRVlDQnBibk5wWkdVZ2IyWWdkR2hsSUhOMWNIQnNhV1ZrWEc0Z0lDQXFJR0JoYm1ObGMzUnZjazV2WkdWZ0xpQWdSWGh3Ykc5cGRITWdkR2hsSUVsRUlHNWhiV2x1WnlCelkyaGxiV1VnZEc4Z2NHVnlabTl5YlNCMGFHVWdjMlZoY21Ob1hHNGdJQ0FxSUhGMWFXTnJiSGt1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1JFOU5SWFpsYm5SVVlYSm5aWFI5SUdGdVkyVnpkRzl5VG05a1pTQlRaV0Z5WTJnZ1puSnZiU0IwYUdseklISnZiM1F1WEc0Z0lDQXFJRUJ3WVhKaGNtMGdlM04wY21sdVozMGdkR0Z5WjJWMFNVUWdTVVFnYjJZZ2RHaGxJRVJQVFNCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCMGFHVWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdEVUMDFGZG1WdWRGUmhjbWRsZEgwZ1JFOU5JRzV2WkdVZ2QybDBhQ0IwYUdVZ2MzVndjR3hwWldRZ1lIUmhjbWRsZEVsRVlDNWNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQm1hVzVrUTI5dGNHOXVaVzUwVW05dmREb2dablZ1WTNScGIyNG9ZVzVqWlhOMGIzSk9iMlJsTENCMFlYSm5aWFJKUkNrZ2UxeHVJQ0FnSUhaaGNpQm1hWEp6ZEVOb2FXeGtjbVZ1SUQwZ1ptbHVaRU52YlhCdmJtVnVkRkp2YjNSU1pYVnpZV0pzWlVGeWNtRjVPMXh1SUNBZ0lIWmhjaUJqYUdsc1pFbHVaR1Y0SUQwZ01EdGNibHh1SUNBZ0lIWmhjaUJrWldWd1pYTjBRVzVqWlhOMGIzSWdQU0JtYVc1a1JHVmxjR1Z6ZEVOaFkyaGxaRUZ1WTJWemRHOXlLSFJoY21kbGRFbEVLU0I4ZkNCaGJtTmxjM1J2Y2s1dlpHVTdYRzVjYmlBZ0lDQm1hWEp6ZEVOb2FXeGtjbVZ1V3pCZElEMGdaR1ZsY0dWemRFRnVZMlZ6ZEc5eUxtWnBjbk4wUTJocGJHUTdYRzRnSUNBZ1ptbHljM1JEYUdsc1pISmxiaTVzWlc1bmRHZ2dQU0F4TzF4dVhHNGdJQ0FnZDJocGJHVWdLR05vYVd4a1NXNWtaWGdnUENCbWFYSnpkRU5vYVd4a2NtVnVMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdkbUZ5SUdOb2FXeGtJRDBnWm1seWMzUkRhR2xzWkhKbGJsdGphR2xzWkVsdVpHVjRLeXRkTzF4dUlDQWdJQ0FnZG1GeUlIUmhjbWRsZEVOb2FXeGtPMXh1WEc0Z0lDQWdJQ0IzYUdsc1pTQW9ZMmhwYkdRcElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUdOb2FXeGtTVVFnUFNCU1pXRmpkRTF2ZFc1MExtZGxkRWxFS0dOb2FXeGtLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHTm9hV3hrU1VRcElIdGNiaUFnSUNBZ0lDQWdJQ0F2THlCRmRtVnVJR2xtSUhkbElHWnBibVFnZEdobElHNXZaR1VnZDJVbmNtVWdiRzl2YTJsdVp5Qm1iM0lzSUhkbElHWnBibWx6YUNCc2IyOXdhVzVuWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkR2h5YjNWbmFDQnBkSE1nYzJsaWJHbHVaM01nZEc4Z1pXNXpkWEpsSUhSb1pYa25jbVVnWTJGamFHVmtJSE52SUhSb1lYUWdkMlVnWkc5dUozUWdhR0YyWlZ4dUlDQWdJQ0FnSUNBZ0lDOHZJSFJ2SUhKbGRtbHphWFFnZEdocGN5QnViMlJsSUdGbllXbHVMaUJQZEdobGNuZHBjMlVzSUhkbElHMWhhMlVnYmw0eUlHTmhiR3h6SUhSdklHZGxkRWxFWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkMmhsYmlCMmFYTnBkR2x1WnlCMGFHVWdiV0Z1ZVNCamFHbHNaSEpsYmlCdlppQmhJSE5wYm1kc1pTQnViMlJsSUdsdUlHOXlaR1Z5TGx4dVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSaGNtZGxkRWxFSUQwOVBTQmphR2xzWkVsRUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMFlYSm5aWFJEYUdsc1pDQTlJR05vYVd4a08xeHVJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvVW1WaFkzUkpibk4wWVc1alpVaGhibVJzWlhNdWFYTkJibU5sYzNSdmNrbEVUMllvWTJocGJHUkpSQ3dnZEdGeVoyVjBTVVFwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCSlppQjNaU0JtYVc1a0lHRWdZMmhwYkdRZ2QyaHZjMlVnU1VRZ2FYTWdZVzRnWVc1alpYTjBiM0lnYjJZZ2RHaGxJR2RwZG1WdUlFbEVMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdkR2hsYmlCM1pTQmpZVzRnWW1VZ2MzVnlaU0IwYUdGMElIZGxJRzl1YkhrZ2QyRnVkQ0IwYnlCelpXRnlZMmdnZEdobElITjFZblJ5WldWY2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUhKdmIzUmxaQ0JoZENCMGFHbHpJR05vYVd4a0xDQnpieUIzWlNCallXNGdkR2h5YjNjZ2IzVjBJSFJvWlNCeVpYTjBJRzltSUhSb1pWeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2MyVmhjbU5vSUhOMFlYUmxMbHh1SUNBZ0lDQWdJQ0FnSUNBZ1ptbHljM1JEYUdsc1pISmxiaTVzWlc1bmRHZ2dQU0JqYUdsc1pFbHVaR1Y0SUQwZ01EdGNiaUFnSUNBZ0lDQWdJQ0FnSUdacGNuTjBRMmhwYkdSeVpXNHVjSFZ6YUNoamFHbHNaQzVtYVhKemRFTm9hV3hrS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QkpaaUIwYUdseklHTm9hV3hrSUdoaFpDQnVieUJKUkN3Z2RHaGxiaUIwYUdWeVpTZHpJR0VnWTJoaGJtTmxJSFJvWVhRZ2FYUWdkMkZ6WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdhVzVxWldOMFpXUWdZWFYwYjIxaGRHbGpZV3hzZVNCaWVTQjBhR1VnWW5KdmQzTmxjaXdnWVhNZ2QyaGxiaUJoSUdBOGRHRmliR1UrWUZ4dUlDQWdJQ0FnSUNBZ0lDOHZJR1ZzWlcxbGJuUWdjM0J5YjNWMGN5QmhiaUJsZUhSeVlTQmdQSFJpYjJSNVBtQWdZMmhwYkdRZ1lYTWdZU0J6YVdSbElHVm1abVZqZENCdlpseHVJQ0FnSUNBZ0lDQWdJQzh2SUdBdWFXNXVaWEpJVkUxTVlDQndZWEp6YVc1bkxpQlBjSFJwYldsemRHbGpZV3hzZVNCamIyNTBhVzUxWlNCa2IzZHVJSFJvYVhOY2JpQWdJQ0FnSUNBZ0lDQXZMeUJpY21GdVkyZ3NJR0oxZENCdWIzUWdZbVZtYjNKbElHVjRZVzFwYm1sdVp5QjBhR1VnYjNSb1pYSWdjMmxpYkdsdVozTXVYRzRnSUNBZ0lDQWdJQ0FnWm1seWMzUkRhR2xzWkhKbGJpNXdkWE5vS0dOb2FXeGtMbVpwY25OMFEyaHBiR1FwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdZMmhwYkdRZ1BTQmphR2xzWkM1dVpYaDBVMmxpYkdsdVp6dGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdhV1lnS0hSaGNtZGxkRU5vYVd4a0tTQjdYRzRnSUNBZ0lDQWdJQzh2SUVWdGNIUjVhVzVuSUdacGNuTjBRMmhwYkdSeVpXNHZabWx1WkVOdmJYQnZibVZ1ZEZKdmIzUlNaWFZ6WVdKc1pVRnljbUY1SUdselhHNGdJQ0FnSUNBZ0lDOHZJRzV2ZENCdVpXTmxjM05oY25rZ1ptOXlJR052Y25KbFkzUnVaWE56TENCaWRYUWdhWFFnYUdWc2NITWdkR2hsSUVkRElISmxZMnhoYVcxY2JpQWdJQ0FnSUNBZ0x5OGdZVzU1SUc1dlpHVnpJSFJvWVhRZ2QyVnlaU0JzWldaMElHRjBJSFJvWlNCbGJtUWdiMllnZEdobElITmxZWEpqYUM1Y2JpQWdJQ0FnSUNBZ1ptbHljM1JEYUdsc1pISmxiaTVzWlc1bmRHZ2dQU0F3TzF4dVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMFlYSm5aWFJEYUdsc1pEdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCbWFYSnpkRU5vYVd4a2NtVnVMbXhsYm1kMGFDQTlJREE3WEc1Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBblptbHVaRU52YlhCdmJtVnVkRkp2YjNRb0xpNHVMQ0FsY3lrNklGVnVZV0pzWlNCMGJ5Qm1hVzVrSUdWc1pXMWxiblF1SUZSb2FYTWdjSEp2WW1GaWJIa2dKeUFyWEc0Z0lDQWdJQ0FuYldWaGJuTWdkR2hsSUVSUFRTQjNZWE1nZFc1bGVIQmxZM1JsWkd4NUlHMTFkR0YwWldRZ0tHVXVaeTRzSUdKNUlIUm9aU0JpY205M2MyVnlLU3dnSnlBclhHNGdJQ0FnSUNBbmRYTjFZV3hzZVNCa2RXVWdkRzhnWm05eVoyVjBkR2x1WnlCaElEeDBZbTlrZVQ0Z2QyaGxiaUIxYzJsdVp5QjBZV0pzWlhNc0lHNWxjM1JwYm1jZ2RHRm5jeUFuSUN0Y2JpQWdJQ0FnSUNkc2FXdGxJRHhtYjNKdFBpd2dQSEErTENCdmNpQThZVDRzSUc5eUlIVnphVzVuSUc1dmJpMVRWa2NnWld4bGJXVnVkSE1nYVc0Z1lXNGdQSE4yWno0Z0p5QXJYRzRnSUNBZ0lDQW5jR0Z5Wlc1MExpQW5JQ3RjYmlBZ0lDQWdJQ2RVY25rZ2FXNXpjR1ZqZEdsdVp5QjBhR1VnWTJocGJHUWdibTlrWlhNZ2IyWWdkR2hsSUdWc1pXMWxiblFnZDJsMGFDQlNaV0ZqZENCSlJDQmdKWE5nTGljc1hHNGdJQ0FnSUNCMFlYSm5aWFJKUkN4Y2JpQWdJQ0FnSUZKbFlXTjBUVzkxYm5RdVoyVjBTVVFvWVc1alpYTjBiM0pPYjJSbEtWeHVJQ0FnSUNrZ09pQnBiblpoY21saGJuUW9abUZzYzJVcEtUdGNiaUFnZlN4Y2JseHVJQ0JmYlc5MWJuUkpiV0ZuWlVsdWRHOU9iMlJsT2lCbWRXNWpkR2x2YmlodFlYSnJkWEFzSUdOdmJuUmhhVzVsY2l3Z2MyaHZkV3hrVW1WMWMyVk5ZWEpyZFhBcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnWTI5dWRHRnBibVZ5SUNZbUlDaGNiaUFnSUNBZ0lDQWdLR052Ym5SaGFXNWxjaTV1YjJSbFZIbHdaU0E5UFQwZ1JVeEZUVVZPVkY5T1QwUkZYMVJaVUVVZ2ZId2dZMjl1ZEdGcGJtVnlMbTV2WkdWVWVYQmxJRDA5UFNCRVQwTmZUazlFUlY5VVdWQkZLVnh1SUNBZ0lDQWdLU3hjYmlBZ0lDQWdJQ2R0YjNWdWRFTnZiWEJ2Ym1WdWRFbHVkRzlPYjJSbEtDNHVMaWs2SUZSaGNtZGxkQ0JqYjI1MFlXbHVaWElnYVhNZ2JtOTBJSFpoYkdsa0xpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLR052Ym5SaGFXNWxjaUFtSmlBb1hHNGdJQ0FnSUNBb1kyOXVkR0ZwYm1WeUxtNXZaR1ZVZVhCbElEMDlQU0JGVEVWTlJVNVVYMDVQUkVWZlZGbFFSU0I4ZkNCamIyNTBZV2x1WlhJdWJtOWtaVlI1Y0dVZ1BUMDlJRVJQUTE5T1QwUkZYMVJaVUVVcFhHNGdJQ0FnS1NrcE8xeHVYRzRnSUNBZ2FXWWdLSE5vYjNWc1pGSmxkWE5sVFdGeWEzVndLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2NtOXZkRVZzWlcxbGJuUWdQU0JuWlhSU1pXRmpkRkp2YjNSRmJHVnRaVzUwU1c1RGIyNTBZV2x1WlhJb1kyOXVkR0ZwYm1WeUtUdGNiaUFnSUNBZ0lHbG1JQ2hTWldGamRFMWhjbXQxY0VOb1pXTnJjM1Z0TG1OaGJsSmxkWE5sVFdGeWEzVndLRzFoY210MWNDd2djbTl2ZEVWc1pXMWxiblFwS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQmphR1ZqYTNOMWJTQTlJSEp2YjNSRmJHVnRaVzUwTG1kbGRFRjBkSEpwWW5WMFpTaGNiaUFnSUNBZ0lDQWdJQ0JTWldGamRFMWhjbXQxY0VOb1pXTnJjM1Z0TGtOSVJVTkxVMVZOWDBGVVZGSmZUa0ZOUlZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQnliMjkwUld4bGJXVnVkQzV5WlcxdmRtVkJkSFJ5YVdKMWRHVW9VbVZoWTNSTllYSnJkWEJEYUdWamEzTjFiUzVEU0VWRFMxTlZUVjlCVkZSU1gwNUJUVVVwTzF4dVhHNGdJQ0FnSUNBZ0lIWmhjaUJ5YjI5MFRXRnlhM1Z3SUQwZ2NtOXZkRVZzWlcxbGJuUXViM1YwWlhKSVZFMU1PMXh1SUNBZ0lDQWdJQ0J5YjI5MFJXeGxiV1Z1ZEM1elpYUkJkSFJ5YVdKMWRHVW9YRzRnSUNBZ0lDQWdJQ0FnVW1WaFkzUk5ZWEpyZFhCRGFHVmphM04xYlM1RFNFVkRTMU5WVFY5QlZGUlNYMDVCVFVVc1hHNGdJQ0FnSUNBZ0lDQWdZMmhsWTJ0emRXMWNiaUFnSUNBZ0lDQWdLVHRjYmx4dUlDQWdJQ0FnSUNCMllYSWdaR2xtWmtsdVpHVjRJRDBnWm1seWMzUkVhV1ptWlhKbGJtTmxTVzVrWlhnb2JXRnlhM1Z3TENCeWIyOTBUV0Z5YTNWd0tUdGNiaUFnSUNBZ0lDQWdkbUZ5SUdScFptWmxjbVZ1WTJVZ1BTQW5JQ2hqYkdsbGJuUXBJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lHMWhjbXQxY0M1emRXSnpkSEpwYm1jb1pHbG1aa2x1WkdWNElDMGdNakFzSUdScFptWkpibVJsZUNBcklESXdLU0FyWEc0Z0lDQWdJQ0FnSUNBZ0oxeGNiaUFvYzJWeWRtVnlLU0FuSUNzZ2NtOXZkRTFoY210MWNDNXpkV0p6ZEhKcGJtY29aR2xtWmtsdVpHVjRJQzBnTWpBc0lHUnBabVpKYm1SbGVDQXJJREl3S1R0Y2JseHVJQ0FnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQWdJR052Ym5SaGFXNWxjaTV1YjJSbFZIbHdaU0FoUFQwZ1JFOURYMDVQUkVWZlZGbFFSU3hjYmlBZ0lDQWdJQ0FnSUNBbldXOTFYRnduY21VZ2RISjVhVzVuSUhSdklISmxibVJsY2lCaElHTnZiWEJ2Ym1WdWRDQjBieUIwYUdVZ1pHOWpkVzFsYm5RZ2RYTnBibWNnSnlBclhHNGdJQ0FnSUNBZ0lDQWdKM05sY25abGNpQnlaVzVrWlhKcGJtY2dZblYwSUhSb1pTQmphR1ZqYTNOMWJTQjNZWE1nYVc1MllXeHBaQzRnVkdocGN5QjFjM1ZoYkd4NUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNkdFpXRnVjeUI1YjNVZ2NtVnVaR1Z5WldRZ1lTQmthV1ptWlhKbGJuUWdZMjl0Y0c5dVpXNTBJSFI1Y0dVZ2IzSWdjSEp2Y0hNZ2IyNGdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0ozUm9aU0JqYkdsbGJuUWdabkp2YlNCMGFHVWdiMjVsSUc5dUlIUm9aU0J6WlhKMlpYSXNJRzl5SUhsdmRYSWdjbVZ1WkdWeUtDa2dKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0oyMWxkR2h2WkhNZ1lYSmxJR2x0Y0hWeVpTNGdVbVZoWTNRZ1kyRnVibTkwSUdoaGJtUnNaU0IwYUdseklHTmhjMlVnWkhWbElIUnZJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDZGpjbTl6Y3kxaWNtOTNjMlZ5SUhGMWFYSnJjeUJpZVNCeVpXNWtaWEpwYm1jZ1lYUWdkR2hsSUdSdlkzVnRaVzUwSUhKdmIzUXVJRmx2ZFNBbklDdGNiaUFnSUNBZ0lDQWdJQ0FuYzJodmRXeGtJR3h2YjJzZ1ptOXlJR1Z1ZG1seWIyNXRaVzUwSUdSbGNHVnVaR1Z1ZENCamIyUmxJR2x1SUhsdmRYSWdZMjl0Y0c5dVpXNTBjeUFuSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5ZVzVrSUdWdWMzVnlaU0IwYUdVZ2NISnZjSE1nWVhKbElIUm9aU0J6WVcxbElHTnNhV1Z1ZENCaGJtUWdjMlZ5ZG1WeUlITnBaR1U2WEZ4dUpYTW5MRnh1SUNBZ0lDQWdJQ0FnSUdScFptWmxjbVZ1WTJWY2JpQWdJQ0FnSUNBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hqYjI1MFlXbHVaWEl1Ym05a1pWUjVjR1VnSVQwOUlFUlBRMTlPVDBSRlgxUlpVRVVwS1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJQ0FnSUNCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDZFNaV0ZqZENCaGRIUmxiWEIwWldRZ2RHOGdjbVYxYzJVZ2JXRnlhM1Z3SUdsdUlHRWdZMjl1ZEdGcGJtVnlJR0oxZENCMGFHVWdKeUFyWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5ZMmhsWTJ0emRXMGdkMkZ6SUdsdWRtRnNhV1F1SUZSb2FYTWdaMlZ1WlhKaGJHeDVJRzFsWVc1eklIUm9ZWFFnZVc5MUlHRnlaU0FuSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ2QxYzJsdVp5QnpaWEoyWlhJZ2NtVnVaR1Z5YVc1bklHRnVaQ0IwYUdVZ2JXRnlhM1Z3SUdkbGJtVnlZWFJsWkNCdmJpQjBhR1VnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FuYzJWeWRtVnlJSGRoY3lCdWIzUWdkMmhoZENCMGFHVWdZMnhwWlc1MElIZGhjeUJsZUhCbFkzUnBibWN1SUZKbFlXTjBJR2x1YW1WamRHVmtJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdKMjVsZHlCdFlYSnJkWEFnZEc4Z1kyOXRjR1Z1YzJGMFpTQjNhR2xqYUNCM2IzSnJjeUJpZFhRZ2VXOTFJR2hoZG1VZ2JHOXpkQ0J0WVc1NUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0oyOW1JSFJvWlNCaVpXNWxabWwwY3lCdlppQnpaWEoyWlhJZ2NtVnVaR1Z5YVc1bkxpQkpibk4wWldGa0xDQm1hV2QxY21VZ2IzVjBJQ2NnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdKM2RvZVNCMGFHVWdiV0Z5YTNWd0lHSmxhVzVuSUdkbGJtVnlZWFJsWkNCcGN5QmthV1ptWlhKbGJuUWdiMjRnZEdobElHTnNhV1Z1ZENBbklDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNkdmNpQnpaWEoyWlhJNlhGeHVKWE1uTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR2xtWm1WeVpXNWpaVnh1SUNBZ0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWEl1Ym05a1pWUjVjR1VnSVQwOUlFUlBRMTlPVDBSRlgxUlpVRVVzWEc0Z0lDQWdJQ0FuV1c5MVhGd25jbVVnZEhKNWFXNW5JSFJ2SUhKbGJtUmxjaUJoSUdOdmJYQnZibVZ1ZENCMGJ5QjBhR1VnWkc5amRXMWxiblFnWW5WMElDY2dLMXh1SUNBZ0lDQWdJQ0FuZVc5MUlHUnBaRzVjWENkMElIVnpaU0J6WlhKMlpYSWdjbVZ1WkdWeWFXNW5MaUJYWlNCallXNWNYQ2QwSUdSdklIUm9hWE1nSnlBclhHNGdJQ0FnSUNBZ0lDZDNhWFJvYjNWMElIVnphVzVuSUhObGNuWmxjaUJ5Wlc1a1pYSnBibWNnWkhWbElIUnZJR055YjNOekxXSnliM2R6WlhJZ2NYVnBjbXR6TGlBbklDdGNiaUFnSUNBZ0lDQWdKMU5sWlNCU1pXRmpkQzV5Wlc1a1pYSlViMU4wY21sdVp5Z3BJR1p2Y2lCelpYSjJaWElnY21WdVpHVnlhVzVuTGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHTnZiblJoYVc1bGNpNXViMlJsVkhsd1pTQWhQVDBnUkU5RFgwNVBSRVZmVkZsUVJTa3BPMXh1WEc0Z0lDQWdjMlYwU1c1dVpYSklWRTFNS0dOdmJuUmhhVzVsY2l3Z2JXRnlhM1Z3S1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVZoWTNRZ1NVUWdkWFJwYkdsMGFXVnpMbHh1SUNBZ0tpOWNibHh1SUNCblpYUlNaV0ZqZEZKdmIzUkpSRG9nWjJWMFVtVmhZM1JTYjI5MFNVUXNYRzVjYmlBZ1oyVjBTVVE2SUdkbGRFbEVMRnh1WEc0Z0lITmxkRWxFT2lCelpYUkpSQ3hjYmx4dUlDQm5aWFJPYjJSbE9pQm5aWFJPYjJSbExGeHVYRzRnSUdkbGRFNXZaR1ZHY205dFNXNXpkR0Z1WTJVNklHZGxkRTV2WkdWR2NtOXRTVzV6ZEdGdVkyVXNYRzVjYmlBZ2NIVnlaMlZKUkRvZ2NIVnlaMlZKUkZ4dWZUdGNibHh1VW1WaFkzUlFaWEptTG0xbFlYTjFjbVZOWlhSb2IyUnpLRkpsWVdOMFRXOTFiblFzSUNkU1pXRmpkRTF2ZFc1MEp5d2dlMXh1SUNCZmNtVnVaR1Z5VG1WM1VtOXZkRU52YlhCdmJtVnVkRG9nSjE5eVpXNWtaWEpPWlhkU2IyOTBRMjl0Y0c5dVpXNTBKeXhjYmlBZ1gyMXZkVzUwU1cxaFoyVkpiblJ2VG05a1pUb2dKMTl0YjNWdWRFbHRZV2RsU1c1MGIwNXZaR1VuWEc1OUtUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JTWldGamRFMXZkVzUwTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RNdWx0aUNoaWxkXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50XCIpO1xudmFyIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzID0gcmVxdWlyZShcIi4vUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXNcIik7XG5cbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdFJlY29uY2lsZXJcIik7XG52YXIgUmVhY3RDaGlsZFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdENoaWxkUmVjb25jaWxlclwiKTtcblxuLyoqXG4gKiBVcGRhdGluZyBjaGlsZHJlbiBvZiBhIGNvbXBvbmVudCBtYXkgdHJpZ2dlciByZWN1cnNpdmUgdXBkYXRlcy4gVGhlIGRlcHRoIGlzXG4gKiB1c2VkIHRvIGJhdGNoIHJlY3Vyc2l2ZSB1cGRhdGVzIHRvIHJlbmRlciBtYXJrdXAgbW9yZSBlZmZpY2llbnRseS5cbiAqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQHByaXZhdGVcbiAqL1xudmFyIHVwZGF0ZURlcHRoID0gMDtcblxuLyoqXG4gKiBRdWV1ZSBvZiB1cGRhdGUgY29uZmlndXJhdGlvbiBvYmplY3RzLlxuICpcbiAqIEVhY2ggb2JqZWN0IGhhcyBhIGB0eXBlYCBwcm9wZXJ0eSB0aGF0IGlzIGluIGBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlc2AuXG4gKlxuICogQHR5cGUge2FycmF5PG9iamVjdD59XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgdXBkYXRlUXVldWUgPSBbXTtcblxuLyoqXG4gKiBRdWV1ZSBvZiBtYXJrdXAgdG8gYmUgcmVuZGVyZWQuXG4gKlxuICogQHR5cGUge2FycmF5PHN0cmluZz59XG4gKiBAcHJpdmF0ZVxuICovXG52YXIgbWFya3VwUXVldWUgPSBbXTtcblxuLyoqXG4gKiBFbnF1ZXVlcyBtYXJrdXAgdG8gYmUgcmVuZGVyZWQgYW5kIGluc2VydGVkIGF0IGEgc3VwcGxpZWQgaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElEIElEIG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgdGhhdCByZW5kZXJzIGludG8gYW4gZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGluZGV4LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZU1hcmt1cChwYXJlbnRJRCwgbWFya3VwLCB0b0luZGV4KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgdXBkYXRlUXVldWUucHVzaCh7XG4gICAgcGFyZW50SUQ6IHBhcmVudElELFxuICAgIHBhcmVudE5vZGU6IG51bGwsXG4gICAgdHlwZTogUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuSU5TRVJUX01BUktVUCxcbiAgICBtYXJrdXBJbmRleDogbWFya3VwUXVldWUucHVzaChtYXJrdXApIC0gMSxcbiAgICB0ZXh0Q29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IG51bGwsXG4gICAgdG9JbmRleDogdG9JbmRleFxuICB9KTtcbn1cblxuLyoqXG4gKiBFbnF1ZXVlcyBtb3ZpbmcgYW4gZXhpc3RpbmcgZWxlbWVudCB0byBhbm90aGVyIGluZGV4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJRCBJRCBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggU291cmNlIGluZGV4IG9mIHRoZSBleGlzdGluZyBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRGVzdGluYXRpb24gaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbnF1ZXVlTW92ZShwYXJlbnRJRCwgZnJvbUluZGV4LCB0b0luZGV4KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgdXBkYXRlUXVldWUucHVzaCh7XG4gICAgcGFyZW50SUQ6IHBhcmVudElELFxuICAgIHBhcmVudE5vZGU6IG51bGwsXG4gICAgdHlwZTogUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMuTU9WRV9FWElTVElORyxcbiAgICBtYXJrdXBJbmRleDogbnVsbCxcbiAgICB0ZXh0Q29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IGZyb21JbmRleCxcbiAgICB0b0luZGV4OiB0b0luZGV4XG4gIH0pO1xufVxuXG4vKipcbiAqIEVucXVldWVzIHJlbW92aW5nIGFuIGVsZW1lbnQgYXQgYW4gaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudElEIElEIG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBJbmRleCBvZiB0aGUgZWxlbWVudCB0byByZW1vdmUuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbnF1ZXVlUmVtb3ZlKHBhcmVudElELCBmcm9tSW5kZXgpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICB1cGRhdGVRdWV1ZS5wdXNoKHtcbiAgICBwYXJlbnRJRDogcGFyZW50SUQsXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICB0eXBlOiBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5SRU1PVkVfTk9ERSxcbiAgICBtYXJrdXBJbmRleDogbnVsbCxcbiAgICB0ZXh0Q29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IGZyb21JbmRleCxcbiAgICB0b0luZGV4OiBudWxsXG4gIH0pO1xufVxuXG4vKipcbiAqIEVucXVldWVzIHNldHRpbmcgdGhlIHRleHQgY29udGVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50SUQgSUQgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dENvbnRlbnQgVGV4dCBjb250ZW50IHRvIHNldC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVucXVldWVUZXh0Q29udGVudChwYXJlbnRJRCwgdGV4dENvbnRlbnQpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICB1cGRhdGVRdWV1ZS5wdXNoKHtcbiAgICBwYXJlbnRJRDogcGFyZW50SUQsXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICB0eXBlOiBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcy5URVhUX0NPTlRFTlQsXG4gICAgbWFya3VwSW5kZXg6IG51bGwsXG4gICAgdGV4dENvbnRlbnQ6IHRleHRDb250ZW50LFxuICAgIGZyb21JbmRleDogbnVsbCxcbiAgICB0b0luZGV4OiBudWxsXG4gIH0pO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhbnkgZW5xdWV1ZWQgdXBkYXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwcm9jZXNzUXVldWUoKSB7XG4gIGlmICh1cGRhdGVRdWV1ZS5sZW5ndGgpIHtcbiAgICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXMoXG4gICAgICB1cGRhdGVRdWV1ZSxcbiAgICAgIG1hcmt1cFF1ZXVlXG4gICAgKTtcbiAgICBjbGVhclF1ZXVlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGVhcnMgYW55IGVucXVldWVkIHVwZGF0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJRdWV1ZSgpIHtcbiAgdXBkYXRlUXVldWUubGVuZ3RoID0gMDtcbiAgbWFya3VwUXVldWUubGVuZ3RoID0gMDtcbn1cblxuLyoqXG4gKiBSZWFjdE11bHRpQ2hpbGQgYXJlIGNhcGFibGUgb2YgcmVjb25jaWxpbmcgbXVsdGlwbGUgY2hpbGRyZW4uXG4gKlxuICogQGNsYXNzIFJlYWN0TXVsdGlDaGlsZFxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdE11bHRpQ2hpbGQgPSB7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBjb21wb25lbnRzIHRoYXQgbXVzdCByZWNvbmNpbGUgbXVsdGlwbGVcbiAgICogY2hpbGRyZW4uIFRoaXMgaXMgdXNlZCBieSBgUmVhY3RET01Db21wb25lbnRgIHRvIG1vdW50LCB1cGRhdGUsIGFuZFxuICAgKiB1bm1vdW50IGNoaWxkIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEBsZW5kcyB7UmVhY3RNdWx0aUNoaWxkLnByb3RvdHlwZX1cbiAgICovXG4gIE1peGluOiB7XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBcIm1vdW50IGltYWdlXCIgZm9yIGVhY2ggb2YgdGhlIHN1cHBsaWVkIGNoaWxkcmVuLiBJbiB0aGUgY2FzZVxuICAgICAqIG9mIGBSZWFjdERPTUNvbXBvbmVudGAsIGEgbW91bnQgaW1hZ2UgaXMgYSBzdHJpbmcgb2YgbWFya3VwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXN0ZWRDaGlsZHJlbiBOZXN0ZWQgY2hpbGQgbWFwcy5cbiAgICAgKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgb2YgbW91bnRlZCByZXByZXNlbnRhdGlvbnMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbW91bnRDaGlsZHJlbjogZnVuY3Rpb24obmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBSZWFjdENoaWxkUmVjb25jaWxlci5pbnN0YW50aWF0ZUNoaWxkcmVuKFxuICAgICAgICBuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHRcbiAgICAgICk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICB2YXIgbW91bnRJbWFnZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIGNoaWxkcmVuKSB7XG4gICAgICAgIGlmIChjaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW25hbWVdO1xuICAgICAgICAgIC8vIElubGluZWQgZm9yIHBlcmZvcm1hbmNlLCBzZWUgYFJlYWN0SW5zdGFuY2VIYW5kbGVzLmNyZWF0ZVJlYWN0SURgLlxuICAgICAgICAgIHZhciByb290SUQgPSB0aGlzLl9yb290Tm9kZUlEICsgbmFtZTtcbiAgICAgICAgICB2YXIgbW91bnRJbWFnZSA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChcbiAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgcm9vdElELFxuICAgICAgICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICAgICAgICBjb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBjaGlsZC5fbW91bnRJbmRleCA9IGluZGV4O1xuICAgICAgICAgIG1vdW50SW1hZ2VzLnB1c2gobW91bnRJbWFnZSk7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1vdW50SW1hZ2VzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyBhbnkgcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIHRleHQgY29udGVudCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV4dENvbnRlbnQgU3RyaW5nIG9mIGNvbnRlbnQuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdXBkYXRlVGV4dENvbnRlbnQ6IGZ1bmN0aW9uKG5leHRDb250ZW50KSB7XG4gICAgICB1cGRhdGVEZXB0aCsrO1xuICAgICAgdmFyIGVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuO1xuICAgICAgICAvLyBSZW1vdmUgYW55IHJlbmRlcmVkIGNoaWxkcmVuLlxuICAgICAgICBSZWFjdENoaWxkUmVjb25jaWxlci51bm1vdW50Q2hpbGRyZW4ocHJldkNoaWxkcmVuKTtcbiAgICAgICAgLy8gVE9ETzogVGhlIHNldFRleHRDb250ZW50IG9wZXJhdGlvbiBzaG91bGQgYmUgZW5vdWdoXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gcHJldkNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5fdW5tb3VudENoaWxkQnlOYW1lKHByZXZDaGlsZHJlbltuYW1lXSwgbmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNldCBuZXcgdGV4dCBjb250ZW50LlxuICAgICAgICB0aGlzLnNldFRleHRDb250ZW50KG5leHRDb250ZW50KTtcbiAgICAgICAgZXJyb3JUaHJvd24gPSBmYWxzZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHVwZGF0ZURlcHRoLS07XG4gICAgICAgIGlmICghdXBkYXRlRGVwdGgpIHtcbiAgICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIGNsZWFyUXVldWUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHJlbmRlcmVkIGNoaWxkcmVuIHdpdGggbmV3IGNoaWxkcmVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0TmVzdGVkQ2hpbGRyZW4gTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHVwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihuZXh0TmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICB1cGRhdGVEZXB0aCsrO1xuICAgICAgdmFyIGVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNoaWxkcmVuKG5leHROZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgICAgICBlcnJvclRocm93biA9IGZhbHNlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdXBkYXRlRGVwdGgtLTtcbiAgICAgICAgaWYgKCF1cGRhdGVEZXB0aCkge1xuICAgICAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgICAgY2xlYXJRdWV1ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzUXVldWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IGlzb2xhdGluZyB0aGlzIGhvdCBjb2RlIHBhdGggZnJvbSB0aGUgdHJ5L2NhdGNoXG4gICAgICogYmxvY2sgaW4gYHVwZGF0ZUNoaWxkcmVuYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dE5lc3RlZENoaWxkcmVuIE5lc3RlZCBjaGlsZCBtYXBzLlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAZmluYWxcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgX3VwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihuZXh0TmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtcbiAgICAgIHZhciBuZXh0Q2hpbGRyZW4gPSBSZWFjdENoaWxkUmVjb25jaWxlci51cGRhdGVDaGlsZHJlbihcbiAgICAgICAgcHJldkNoaWxkcmVuLCBuZXh0TmVzdGVkQ2hpbGRyZW4sIHRyYW5zYWN0aW9uLCBjb250ZXh0XG4gICAgICApO1xuICAgICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG5leHRDaGlsZHJlbjtcbiAgICAgIGlmICghbmV4dENoaWxkcmVuICYmICFwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG5hbWU7XG4gICAgICAvLyBgbmV4dEluZGV4YCB3aWxsIGluY3JlbWVudCBmb3IgZWFjaCBjaGlsZCBpbiBgbmV4dENoaWxkcmVuYCwgYnV0XG4gICAgICAvLyBgbGFzdEluZGV4YCB3aWxsIGJlIHRoZSBsYXN0IGluZGV4IHZpc2l0ZWQgaW4gYHByZXZDaGlsZHJlbmAuXG4gICAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBuZXh0SW5kZXggPSAwO1xuICAgICAgZm9yIChuYW1lIGluIG5leHRDaGlsZHJlbikge1xuICAgICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRyZW4gJiYgcHJldkNoaWxkcmVuW25hbWVdO1xuICAgICAgICB2YXIgbmV4dENoaWxkID0gbmV4dENoaWxkcmVuW25hbWVdO1xuICAgICAgICBpZiAocHJldkNoaWxkID09PSBuZXh0Q2hpbGQpIHtcbiAgICAgICAgICB0aGlzLm1vdmVDaGlsZChwcmV2Q2hpbGQsIG5leHRJbmRleCwgbGFzdEluZGV4KTtcbiAgICAgICAgICBsYXN0SW5kZXggPSBNYXRoLm1heChwcmV2Q2hpbGQuX21vdW50SW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgICAgcHJldkNoaWxkLl9tb3VudEluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcmV2Q2hpbGQpIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBgbGFzdEluZGV4YCBiZWZvcmUgYF9tb3VudEluZGV4YCBnZXRzIHVuc2V0IGJ5IHVubW91bnRpbmcuXG4gICAgICAgICAgICBsYXN0SW5kZXggPSBNYXRoLm1heChwcmV2Q2hpbGQuX21vdW50SW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgICAgICB0aGlzLl91bm1vdW50Q2hpbGRCeU5hbWUocHJldkNoaWxkLCBuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVGhlIGNoaWxkIG11c3QgYmUgaW5zdGFudGlhdGVkIGJlZm9yZSBpdCdzIG1vdW50ZWQuXG4gICAgICAgICAgdGhpcy5fbW91bnRDaGlsZEJ5TmFtZUF0SW5kZXgoXG4gICAgICAgICAgICBuZXh0Q2hpbGQsIG5hbWUsIG5leHRJbmRleCwgdHJhbnNhY3Rpb24sIGNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIG5leHRJbmRleCsrO1xuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIGNoaWxkcmVuIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50LlxuICAgICAgZm9yIChuYW1lIGluIHByZXZDaGlsZHJlbikge1xuICAgICAgICBpZiAocHJldkNoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgICAgICAhKG5leHRDaGlsZHJlbiAmJiBuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpKSB7XG4gICAgICAgICAgdGhpcy5fdW5tb3VudENoaWxkQnlOYW1lKHByZXZDaGlsZHJlbltuYW1lXSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5tb3VudHMgYWxsIHJlbmRlcmVkIGNoaWxkcmVuLiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuIHVwIGNoaWxkcmVuXG4gICAgICogd2hlbiB0aGlzIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB1bm1vdW50Q2hpbGRyZW46IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuO1xuICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudW5tb3VudENoaWxkcmVuKHJlbmRlcmVkQ2hpbGRyZW4pO1xuICAgICAgdGhpcy5fcmVuZGVyZWRDaGlsZHJlbiA9IG51bGw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1vdmVzIGEgY2hpbGQgY29tcG9uZW50IHRvIHRoZSBzdXBwbGllZCBpbmRleC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVudCB0byBtb3ZlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsYXN0SW5kZXggTGFzdCBpbmRleCB2aXNpdGVkIG9mIHRoZSBzaWJsaW5ncyBvZiBgY2hpbGRgLlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBtb3ZlQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkLCB0b0luZGV4LCBsYXN0SW5kZXgpIHtcbiAgICAgIC8vIElmIHRoZSBpbmRleCBvZiBgY2hpbGRgIGlzIGxlc3MgdGhhbiBgbGFzdEluZGV4YCwgdGhlbiBpdCBuZWVkcyB0b1xuICAgICAgLy8gYmUgbW92ZWQuIE90aGVyd2lzZSwgd2UgZG8gbm90IG5lZWQgdG8gbW92ZSBpdCBiZWNhdXNlIGEgY2hpbGQgd2lsbCBiZVxuICAgICAgLy8gaW5zZXJ0ZWQgb3IgbW92ZWQgYmVmb3JlIGBjaGlsZGAuXG4gICAgICBpZiAoY2hpbGQuX21vdW50SW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgZW5xdWV1ZU1vdmUodGhpcy5fcm9vdE5vZGVJRCwgY2hpbGQuX21vdW50SW5kZXgsIHRvSW5kZXgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIGNyZWF0ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW91bnRJbWFnZSBNYXJrdXAgdG8gaW5zZXJ0LlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBjcmVhdGVDaGlsZDogZnVuY3Rpb24oY2hpbGQsIG1vdW50SW1hZ2UpIHtcbiAgICAgIGVucXVldWVNYXJrdXAodGhpcy5fcm9vdE5vZGVJRCwgbW91bnRJbWFnZSwgY2hpbGQuX21vdW50SW5kZXgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ2hpbGQgdG8gcmVtb3ZlLlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICByZW1vdmVDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIGVucXVldWVSZW1vdmUodGhpcy5fcm9vdE5vZGVJRCwgY2hpbGQuX21vdW50SW5kZXgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoaXMgdGV4dCBjb250ZW50IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0Q29udGVudCBUZXh0IGNvbnRlbnQgdG8gc2V0LlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBzZXRUZXh0Q29udGVudDogZnVuY3Rpb24odGV4dENvbnRlbnQpIHtcbiAgICAgIGVucXVldWVUZXh0Q29udGVudCh0aGlzLl9yb290Tm9kZUlELCB0ZXh0Q29udGVudCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1vdW50cyBhIGNoaWxkIHdpdGggdGhlIHN1cHBsaWVkIG5hbWUuXG4gICAgICpcbiAgICAgKiBOT1RFOiBUaGlzIGlzIHBhcnQgb2YgYHVwZGF0ZUNoaWxkcmVuYCBhbmQgaXMgaGVyZSBmb3IgcmVhZGFiaWxpdHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDb21wb25lbnQgdG8gbW91bnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgY2hpbGQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IGF0IHdoaWNoIHRvIGluc2VydCB0aGUgY2hpbGQuXG4gICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX21vdW50Q2hpbGRCeU5hbWVBdEluZGV4OiBmdW5jdGlvbihcbiAgICAgIGNoaWxkLFxuICAgICAgbmFtZSxcbiAgICAgIGluZGV4LFxuICAgICAgdHJhbnNhY3Rpb24sXG4gICAgICBjb250ZXh0KSB7XG4gICAgICAvLyBJbmxpbmVkIGZvciBwZXJmb3JtYW5jZSwgc2VlIGBSZWFjdEluc3RhbmNlSGFuZGxlcy5jcmVhdGVSZWFjdElEYC5cbiAgICAgIHZhciByb290SUQgPSB0aGlzLl9yb290Tm9kZUlEICsgbmFtZTtcbiAgICAgIHZhciBtb3VudEltYWdlID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KFxuICAgICAgICBjaGlsZCxcbiAgICAgICAgcm9vdElELFxuICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICAgIGNoaWxkLl9tb3VudEluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLmNyZWF0ZUNoaWxkKGNoaWxkLCBtb3VudEltYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5tb3VudHMgYSByZW5kZXJlZCBjaGlsZCBieSBuYW1lLlxuICAgICAqXG4gICAgICogTk9URTogVGhpcyBpcyBwYXJ0IG9mIGB1cGRhdGVDaGlsZHJlbmAgYW5kIGlzIGhlcmUgZm9yIHJlYWRhYmlsaXR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIHVubW91bnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiB0aGUgY2hpbGQgaW4gYHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW5gLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3VubW91bnRDaGlsZEJ5TmFtZTogZnVuY3Rpb24oY2hpbGQsIG5hbWUpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgY2hpbGQuX21vdW50SW5kZXggPSBudWxsO1xuICAgIH1cblxuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNdWx0aUNoaWxkO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0TXVsdGlDaGlsZFVwZGF0ZVR5cGVzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5TWlycm9yID0gcmVxdWlyZShcIi4va2V5TWlycm9yXCIpO1xuXG4vKipcbiAqIFdoZW4gYSBjb21wb25lbnQncyBjaGlsZHJlbiBhcmUgdXBkYXRlZCwgYSBzZXJpZXMgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdHMgYXJlIGNyZWF0ZWQgaW4gb3JkZXIgdG8gYmF0Y2ggYW5kIHNlcmlhbGl6ZSB0aGUgcmVxdWlyZWQgY2hhbmdlcy5cbiAqXG4gKiBFbnVtZXJhdGVzIGFsbCB0aGUgcG9zc2libGUgdHlwZXMgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVhY3RNdWx0aUNoaWxkVXBkYXRlVHlwZXMgPSBrZXlNaXJyb3Ioe1xuICBJTlNFUlRfTUFSS1VQOiBudWxsLFxuICBNT1ZFX0VYSVNUSU5HOiBudWxsLFxuICBSRU1PVkVfTk9ERTogbnVsbCxcbiAgVEVYVF9DT05URU5UOiBudWxsXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE11bHRpQ2hpbGRVcGRhdGVUeXBlcztcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3ROYXRpdmVDb21wb25lbnRcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxudmFyIGF1dG9HZW5lcmF0ZVdyYXBwZXJDbGFzcyA9IG51bGw7XG52YXIgZ2VuZXJpY0NvbXBvbmVudENsYXNzID0gbnVsbDtcbi8vIFRoaXMgcmVnaXN0cnkga2VlcHMgdHJhY2sgb2Ygd3JhcHBlciBjbGFzc2VzIGFyb3VuZCBuYXRpdmUgdGFnc1xudmFyIHRhZ1RvQ29tcG9uZW50Q2xhc3MgPSB7fTtcbnZhciB0ZXh0Q29tcG9uZW50Q2xhc3MgPSBudWxsO1xuXG52YXIgUmVhY3ROYXRpdmVDb21wb25lbnRJbmplY3Rpb24gPSB7XG4gIC8vIFRoaXMgYWNjZXB0cyBhIGNsYXNzIHRoYXQgcmVjZWl2ZXMgdGhlIHRhZyBzdHJpbmcuIFRoaXMgaXMgYSBjYXRjaCBhbGxcbiAgLy8gdGhhdCBjYW4gcmVuZGVyIGFueSBraW5kIG9mIHRhZy5cbiAgaW5qZWN0R2VuZXJpY0NvbXBvbmVudENsYXNzOiBmdW5jdGlvbihjb21wb25lbnRDbGFzcykge1xuICAgIGdlbmVyaWNDb21wb25lbnRDbGFzcyA9IGNvbXBvbmVudENsYXNzO1xuICB9LFxuICAvLyBUaGlzIGFjY2VwdHMgYSB0ZXh0IGNvbXBvbmVudCBjbGFzcyB0aGF0IHRha2VzIHRoZSB0ZXh0IHN0cmluZyB0byBiZVxuICAvLyByZW5kZXJlZCBhcyBwcm9wcy5cbiAgaW5qZWN0VGV4dENvbXBvbmVudENsYXNzOiBmdW5jdGlvbihjb21wb25lbnRDbGFzcykge1xuICAgIHRleHRDb21wb25lbnRDbGFzcyA9IGNvbXBvbmVudENsYXNzO1xuICB9LFxuICAvLyBUaGlzIGFjY2VwdHMgYSBrZXllZCBvYmplY3Qgd2l0aCBjbGFzc2VzIGFzIHZhbHVlcy4gRWFjaCBrZXkgcmVwcmVzZW50cyBhXG4gIC8vIHRhZy4gVGhhdCBwYXJ0aWN1bGFyIHRhZyB3aWxsIHVzZSB0aGlzIGNsYXNzIGluc3RlYWQgb2YgdGhlIGdlbmVyaWMgb25lLlxuICBpbmplY3RDb21wb25lbnRDbGFzc2VzOiBmdW5jdGlvbihjb21wb25lbnRDbGFzc2VzKSB7XG4gICAgYXNzaWduKHRhZ1RvQ29tcG9uZW50Q2xhc3MsIGNvbXBvbmVudENsYXNzZXMpO1xuICB9LFxuICAvLyBUZW1wb3JhcnkgaGFjayBzaW5jZSB3ZSBleHBlY3QgRE9NIHJlZnMgdG8gYmVoYXZlIGxpa2UgY29tcG9zaXRlcyxcbiAgLy8gZm9yIHRoaXMgcmVsZWFzZS5cbiAgaW5qZWN0QXV0b1dyYXBwZXI6IGZ1bmN0aW9uKHdyYXBwZXJGYWN0b3J5KSB7XG4gICAgYXV0b0dlbmVyYXRlV3JhcHBlckNsYXNzID0gd3JhcHBlckZhY3Rvcnk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IGEgY29tcG9zaXRlIGNvbXBvbmVudCB3cmFwcGVyIGNsYXNzIGZvciBhIHNwZWNpZmljIHRhZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBUaGUgdGFnIGZvciB3aGljaCB0byBnZXQgdGhlIGNsYXNzLlxuICogQHJldHVybiB7ZnVuY3Rpb259IFRoZSBSZWFjdCBjbGFzcyBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50Q2xhc3NGb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZWxlbWVudC50eXBlO1xuICB9XG4gIHZhciB0YWcgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBjb21wb25lbnRDbGFzcyA9IHRhZ1RvQ29tcG9uZW50Q2xhc3NbdGFnXTtcbiAgaWYgKGNvbXBvbmVudENsYXNzID09IG51bGwpIHtcbiAgICB0YWdUb0NvbXBvbmVudENsYXNzW3RhZ10gPSBjb21wb25lbnRDbGFzcyA9IGF1dG9HZW5lcmF0ZVdyYXBwZXJDbGFzcyh0YWcpO1xuICB9XG4gIHJldHVybiBjb21wb25lbnRDbGFzcztcbn1cblxuLyoqXG4gKiBHZXQgYSBuYXRpdmUgaW50ZXJuYWwgY29tcG9uZW50IGNsYXNzIGZvciBhIHNwZWNpZmljIHRhZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGludGVybmFsIGNsYXNzIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnRlcm5hbENvbXBvbmVudChlbGVtZW50KSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgZ2VuZXJpY0NvbXBvbmVudENsYXNzLFxuICAgICdUaGVyZSBpcyBubyByZWdpc3RlcmVkIGNvbXBvbmVudCBmb3IgdGhlIHRhZyAlcycsXG4gICAgZWxlbWVudC50eXBlXG4gICkgOiBpbnZhcmlhbnQoZ2VuZXJpY0NvbXBvbmVudENsYXNzKSk7XG4gIHJldHVybiBuZXcgZ2VuZXJpY0NvbXBvbmVudENsYXNzKGVsZW1lbnQudHlwZSwgZWxlbWVudC5wcm9wcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdFRleHR9IHRleHRcbiAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZUZvclRleHQodGV4dCkge1xuICByZXR1cm4gbmV3IHRleHRDb21wb25lbnRDbGFzcyh0ZXh0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVGV4dENvbXBvbmVudChjb21wb25lbnQpIHtcbiAgcmV0dXJuIGNvbXBvbmVudCBpbnN0YW5jZW9mIHRleHRDb21wb25lbnRDbGFzcztcbn1cblxudmFyIFJlYWN0TmF0aXZlQ29tcG9uZW50ID0ge1xuICBnZXRDb21wb25lbnRDbGFzc0ZvckVsZW1lbnQ6IGdldENvbXBvbmVudENsYXNzRm9yRWxlbWVudCxcbiAgY3JlYXRlSW50ZXJuYWxDb21wb25lbnQ6IGNyZWF0ZUludGVybmFsQ29tcG9uZW50LFxuICBjcmVhdGVJbnN0YW5jZUZvclRleHQ6IGNyZWF0ZUluc3RhbmNlRm9yVGV4dCxcbiAgaXNUZXh0Q29tcG9uZW50OiBpc1RleHRDb21wb25lbnQsXG4gIGluamVjdGlvbjogUmVhY3ROYXRpdmVDb21wb25lbnRJbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3ROYXRpdmVDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNST1lYUnBkbVZEYjIxd2IyNWxiblF1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVFF0TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEZ4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlHRnpjMmxuYmlBOUlISmxjWFZwY21Vb1hDSXVMMDlpYW1WamRDNWhjM05wWjI1Y0lpazdYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzUyWVhJZ1lYVjBiMGRsYm1WeVlYUmxWM0poY0hCbGNrTnNZWE56SUQwZ2JuVnNiRHRjYm5aaGNpQm5aVzVsY21salEyOXRjRzl1Wlc1MFEyeGhjM01nUFNCdWRXeHNPMXh1THk4Z1ZHaHBjeUJ5WldkcGMzUnllU0JyWldWd2N5QjBjbUZqYXlCdlppQjNjbUZ3Y0dWeUlHTnNZWE56WlhNZ1lYSnZkVzVrSUc1aGRHbDJaU0IwWVdkelhHNTJZWElnZEdGblZHOURiMjF3YjI1bGJuUkRiR0Z6Y3lBOUlIdDlPMXh1ZG1GeUlIUmxlSFJEYjIxd2IyNWxiblJEYkdGemN5QTlJRzUxYkd3N1hHNWNiblpoY2lCU1pXRmpkRTVoZEdsMlpVTnZiWEJ2Ym1WdWRFbHVhbVZqZEdsdmJpQTlJSHRjYmlBZ0x5OGdWR2hwY3lCaFkyTmxjSFJ6SUdFZ1kyeGhjM01nZEdoaGRDQnlaV05sYVhabGN5QjBhR1VnZEdGbklITjBjbWx1Wnk0Z1ZHaHBjeUJwY3lCaElHTmhkR05vSUdGc2JGeHVJQ0F2THlCMGFHRjBJR05oYmlCeVpXNWtaWElnWVc1NUlHdHBibVFnYjJZZ2RHRm5MbHh1SUNCcGJtcGxZM1JIWlc1bGNtbGpRMjl0Y0c5dVpXNTBRMnhoYzNNNklHWjFibU4wYVc5dUtHTnZiWEJ2Ym1WdWRFTnNZWE56S1NCN1hHNGdJQ0FnWjJWdVpYSnBZME52YlhCdmJtVnVkRU5zWVhOeklEMGdZMjl0Y0c5dVpXNTBRMnhoYzNNN1hHNGdJSDBzWEc0Z0lDOHZJRlJvYVhNZ1lXTmpaWEIwY3lCaElIUmxlSFFnWTI5dGNHOXVaVzUwSUdOc1lYTnpJSFJvWVhRZ2RHRnJaWE1nZEdobElIUmxlSFFnYzNSeWFXNW5JSFJ2SUdKbFhHNGdJQzh2SUhKbGJtUmxjbVZrSUdGeklIQnliM0J6TGx4dUlDQnBibXBsWTNSVVpYaDBRMjl0Y0c5dVpXNTBRMnhoYzNNNklHWjFibU4wYVc5dUtHTnZiWEJ2Ym1WdWRFTnNZWE56S1NCN1hHNGdJQ0FnZEdWNGRFTnZiWEJ2Ym1WdWRFTnNZWE56SUQwZ1kyOXRjRzl1Wlc1MFEyeGhjM003WEc0Z0lIMHNYRzRnSUM4dklGUm9hWE1nWVdOalpYQjBjeUJoSUd0bGVXVmtJRzlpYW1WamRDQjNhWFJvSUdOc1lYTnpaWE1nWVhNZ2RtRnNkV1Z6TGlCRllXTm9JR3RsZVNCeVpYQnlaWE5sYm5SeklHRmNiaUFnTHk4Z2RHRm5MaUJVYUdGMElIQmhjblJwWTNWc1lYSWdkR0ZuSUhkcGJHd2dkWE5sSUhSb2FYTWdZMnhoYzNNZ2FXNXpkR1ZoWkNCdlppQjBhR1VnWjJWdVpYSnBZeUJ2Ym1VdVhHNGdJR2x1YW1WamRFTnZiWEJ2Ym1WdWRFTnNZWE56WlhNNklHWjFibU4wYVc5dUtHTnZiWEJ2Ym1WdWRFTnNZWE56WlhNcElIdGNiaUFnSUNCaGMzTnBaMjRvZEdGblZHOURiMjF3YjI1bGJuUkRiR0Z6Y3l3Z1kyOXRjRzl1Wlc1MFEyeGhjM05sY3lrN1hHNGdJSDBzWEc0Z0lDOHZJRlJsYlhCdmNtRnllU0JvWVdOcklITnBibU5sSUhkbElHVjRjR1ZqZENCRVQwMGdjbVZtY3lCMGJ5QmlaV2hoZG1VZ2JHbHJaU0JqYjIxd2IzTnBkR1Z6TEZ4dUlDQXZMeUJtYjNJZ2RHaHBjeUJ5Wld4bFlYTmxMbHh1SUNCcGJtcGxZM1JCZFhSdlYzSmhjSEJsY2pvZ1puVnVZM1JwYjI0b2QzSmhjSEJsY2taaFkzUnZjbmtwSUh0Y2JpQWdJQ0JoZFhSdlIyVnVaWEpoZEdWWGNtRndjR1Z5UTJ4aGMzTWdQU0IzY21Gd2NHVnlSbUZqZEc5eWVUdGNiaUFnZlZ4dWZUdGNibHh1THlvcVhHNGdLaUJIWlhRZ1lTQmpiMjF3YjNOcGRHVWdZMjl0Y0c5dVpXNTBJSGR5WVhCd1pYSWdZMnhoYzNNZ1ptOXlJR0VnYzNCbFkybG1hV01nZEdGbkxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1VtVmhZM1JGYkdWdFpXNTBmU0JsYkdWdFpXNTBJRlJvWlNCMFlXY2dabTl5SUhkb2FXTm9JSFJ2SUdkbGRDQjBhR1VnWTJ4aGMzTXVYRzRnS2lCQWNtVjBkWEp1SUh0bWRXNWpkR2x2Ym4wZ1ZHaGxJRkpsWVdOMElHTnNZWE56SUdOdmJuTjBjblZqZEc5eUlHWjFibU4wYVc5dUxseHVJQ292WEc1bWRXNWpkR2x2YmlCblpYUkRiMjF3YjI1bGJuUkRiR0Z6YzBadmNrVnNaVzFsYm5Rb1pXeGxiV1Z1ZENrZ2UxeHVJQ0JwWmlBb2RIbHdaVzltSUdWc1pXMWxiblF1ZEhsd1pTQTlQVDBnSjJaMWJtTjBhVzl1SnlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJsYkdWdFpXNTBMblI1Y0dVN1hHNGdJSDFjYmlBZ2RtRnlJSFJoWnlBOUlHVnNaVzFsYm5RdWRIbHdaVHRjYmlBZ2RtRnlJR052YlhCdmJtVnVkRU5zWVhOeklEMGdkR0ZuVkc5RGIyMXdiMjVsYm5SRGJHRnpjMXQwWVdkZE8xeHVJQ0JwWmlBb1kyOXRjRzl1Wlc1MFEyeGhjM01nUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJSFJoWjFSdlEyOXRjRzl1Wlc1MFEyeGhjM05iZEdGblhTQTlJR052YlhCdmJtVnVkRU5zWVhOeklEMGdZWFYwYjBkbGJtVnlZWFJsVjNKaGNIQmxja05zWVhOektIUmhaeWs3WEc0Z0lIMWNiaUFnY21WMGRYSnVJR052YlhCdmJtVnVkRU5zWVhOek8xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGRDQmhJRzVoZEdsMlpTQnBiblJsY201aGJDQmpiMjF3YjI1bGJuUWdZMnhoYzNNZ1ptOXlJR0VnYzNCbFkybG1hV01nZEdGbkxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1VtVmhZM1JGYkdWdFpXNTBmU0JsYkdWdFpXNTBJRlJvWlNCbGJHVnRaVzUwSUhSdklHTnlaV0YwWlM1Y2JpQXFJRUJ5WlhSMWNtNGdlMloxYm1OMGFXOXVmU0JVYUdVZ2FXNTBaWEp1WVd3Z1kyeGhjM01nWTI5dWMzUnlkV04wYjNJZ1puVnVZM1JwYjI0dVhHNGdLaTljYm1aMWJtTjBhVzl1SUdOeVpXRjBaVWx1ZEdWeWJtRnNRMjl0Y0c5dVpXNTBLR1ZzWlcxbGJuUXBJSHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0JuWlc1bGNtbGpRMjl0Y0c5dVpXNTBRMnhoYzNNc1hHNGdJQ0FnSjFSb1pYSmxJR2x6SUc1dklISmxaMmx6ZEdWeVpXUWdZMjl0Y0c5dVpXNTBJR1p2Y2lCMGFHVWdkR0ZuSUNWekp5eGNiaUFnSUNCbGJHVnRaVzUwTG5SNWNHVmNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaG5aVzVsY21salEyOXRjRzl1Wlc1MFEyeGhjM01wS1R0Y2JpQWdjbVYwZFhKdUlHNWxkeUJuWlc1bGNtbGpRMjl0Y0c5dVpXNTBRMnhoYzNNb1pXeGxiV1Z1ZEM1MGVYQmxMQ0JsYkdWdFpXNTBMbkJ5YjNCektUdGNibjFjYmx4dUx5b3FYRzRnS2lCQWNHRnlZVzBnZTFKbFlXTjBWR1Y0ZEgwZ2RHVjRkRnh1SUNvZ1FISmxkSFZ5YmlCN1VtVmhZM1JEYjIxd2IyNWxiblI5WEc0Z0tpOWNibVoxYm1OMGFXOXVJR055WldGMFpVbHVjM1JoYm1ObFJtOXlWR1Y0ZENoMFpYaDBLU0I3WEc0Z0lISmxkSFZ5YmlCdVpYY2dkR1Y0ZEVOdmJYQnZibVZ1ZEVOc1lYTnpLSFJsZUhRcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVCd1lYSmhiU0I3VW1WaFkzUkRiMjF3YjI1bGJuUjlJR052YlhCdmJtVnVkRnh1SUNvZ1FISmxkSFZ5YmlCN1ltOXZiR1ZoYm4xY2JpQXFMMXh1Wm5WdVkzUnBiMjRnYVhOVVpYaDBRMjl0Y0c5dVpXNTBLR052YlhCdmJtVnVkQ2tnZTF4dUlDQnlaWFIxY200Z1kyOXRjRzl1Wlc1MElHbHVjM1JoYm1ObGIyWWdkR1Y0ZEVOdmJYQnZibVZ1ZEVOc1lYTnpPMXh1ZlZ4dVhHNTJZWElnVW1WaFkzUk9ZWFJwZG1WRGIyMXdiMjVsYm5RZ1BTQjdYRzRnSUdkbGRFTnZiWEJ2Ym1WdWRFTnNZWE56Um05eVJXeGxiV1Z1ZERvZ1oyVjBRMjl0Y0c5dVpXNTBRMnhoYzNOR2IzSkZiR1Z0Wlc1MExGeHVJQ0JqY21WaGRHVkpiblJsY201aGJFTnZiWEJ2Ym1WdWREb2dZM0psWVhSbFNXNTBaWEp1WVd4RGIyMXdiMjVsYm5Rc1hHNGdJR055WldGMFpVbHVjM1JoYm1ObFJtOXlWR1Y0ZERvZ1kzSmxZWFJsU1c1emRHRnVZMlZHYjNKVVpYaDBMRnh1SUNCcGMxUmxlSFJEYjIxd2IyNWxiblE2SUdselZHVjRkRU52YlhCdmJtVnVkQ3hjYmlBZ2FXNXFaV04wYVc5dU9pQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkRWx1YW1WamRHbHZibHh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQlNaV0ZqZEU1aGRHbDJaVU52YlhCdmJtVnVkRHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0T3duZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogUmVhY3RPd25lcnMgYXJlIGNhcGFibGUgb2Ygc3RvcmluZyByZWZlcmVuY2VzIHRvIG93bmVkIGNvbXBvbmVudHMuXG4gKlxuICogQWxsIGNvbXBvbmVudHMgYXJlIGNhcGFibGUgb2YgLy9iZWluZy8vIHJlZmVyZW5jZWQgYnkgb3duZXIgY29tcG9uZW50cywgYnV0XG4gKiBvbmx5IFJlYWN0T3duZXIgY29tcG9uZW50cyBhcmUgY2FwYWJsZSBvZiAvL3JlZmVyZW5jaW5nLy8gb3duZWQgY29tcG9uZW50cy5cbiAqIFRoZSBuYW1lZCByZWZlcmVuY2UgaXMga25vd24gYXMgYSBcInJlZlwiLlxuICpcbiAqIFJlZnMgYXJlIGF2YWlsYWJsZSB3aGVuIG1vdW50ZWQgYW5kIHVwZGF0ZWQgZHVyaW5nIHJlY29uY2lsaWF0aW9uLlxuICpcbiAqICAgdmFyIE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gKiAgICAgICByZXR1cm4gKFxuICogICAgICAgICA8ZGl2IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9PlxuICogICAgICAgICAgIDxDdXN0b21Db21wb25lbnQgcmVmPVwiY3VzdG9tXCIgLz5cbiAqICAgICAgICAgPC9kaXY+XG4gKiAgICAgICApO1xuICogICAgIH0sXG4gKiAgICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKCkge1xuICogICAgICAgdGhpcy5yZWZzLmN1c3RvbS5oYW5kbGVDbGljaygpO1xuICogICAgIH0sXG4gKiAgICAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICogICAgICAgdGhpcy5yZWZzLmN1c3RvbS5pbml0aWFsaXplKCk7XG4gKiAgICAgfVxuICogICB9KTtcbiAqXG4gKiBSZWZzIHNob3VsZCByYXJlbHkgYmUgdXNlZC4gV2hlbiByZWZzIGFyZSB1c2VkLCB0aGV5IHNob3VsZCBvbmx5IGJlIGRvbmUgdG9cbiAqIGNvbnRyb2wgZGF0YSB0aGF0IGlzIG5vdCBoYW5kbGVkIGJ5IFJlYWN0J3MgZGF0YSBmbG93LlxuICpcbiAqIEBjbGFzcyBSZWFjdE93bmVyXG4gKi9cbnZhciBSZWFjdE93bmVyID0ge1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgb3duZXIuXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNWYWxpZE93bmVyOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gISEoXG4gICAgICAob2JqZWN0ICYmXG4gICAgICB0eXBlb2Ygb2JqZWN0LmF0dGFjaFJlZiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqZWN0LmRldGFjaFJlZiA9PT0gJ2Z1bmN0aW9uJylcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcG9uZW50IGJ5IHJlZiB0byBhbiBvd25lciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgYnkgd2hpY2ggdG8gcmVmZXIgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdG8gcmVjb3JkIHRoZSByZWYuXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFkZENvbXBvbmVudEFzUmVmVG86IGZ1bmN0aW9uKGNvbXBvbmVudCwgcmVmLCBvd25lcikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBSZWFjdE93bmVyLmlzVmFsaWRPd25lcihvd25lciksXG4gICAgICAnYWRkQ29tcG9uZW50QXNSZWZUbyguLi4pOiBPbmx5IGEgUmVhY3RPd25lciBjYW4gaGF2ZSByZWZzLiBUaGlzICcgK1xuICAgICAgJ3VzdWFsbHkgbWVhbnMgdGhhdCB5b3VcXCdyZSB0cnlpbmcgdG8gYWRkIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgJyArXG4gICAgICAnZG9lc25cXCd0IGhhdmUgYW4gb3duZXIgKHRoYXQgaXMsIHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgb2YgYW5vdGhlciAnICtcbiAgICAgICdjb21wb25lbnRcXCdzIGByZW5kZXJgIG1ldGhvZCkuIFRyeSByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgaW5zaWRlIG9mICcgK1xuICAgICAgJ2EgbmV3IHRvcC1sZXZlbCBjb21wb25lbnQgd2hpY2ggd2lsbCBob2xkIHRoZSByZWYuJ1xuICAgICkgOiBpbnZhcmlhbnQoUmVhY3RPd25lci5pc1ZhbGlkT3duZXIob3duZXIpKSk7XG4gICAgb3duZXIuYXR0YWNoUmVmKHJlZiwgY29tcG9uZW50KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNvbXBvbmVudCBieSByZWYgZnJvbSBhbiBvd25lciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gZGVyZWZlcmVuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWYgTmFtZSBvZiB0aGUgcmVmIHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdGhlIHJlZiBpcyByZWNvcmRlZC5cbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tOiBmdW5jdGlvbihjb21wb25lbnQsIHJlZiwgb3duZXIpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgUmVhY3RPd25lci5pc1ZhbGlkT3duZXIob3duZXIpLFxuICAgICAgJ3JlbW92ZUNvbXBvbmVudEFzUmVmRnJvbSguLi4pOiBPbmx5IGEgUmVhY3RPd25lciBjYW4gaGF2ZSByZWZzLiBUaGlzICcgK1xuICAgICAgJ3VzdWFsbHkgbWVhbnMgdGhhdCB5b3VcXCdyZSB0cnlpbmcgdG8gcmVtb3ZlIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgJyArXG4gICAgICAnZG9lc25cXCd0IGhhdmUgYW4gb3duZXIgKHRoYXQgaXMsIHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgb2YgYW5vdGhlciAnICtcbiAgICAgICdjb21wb25lbnRcXCdzIGByZW5kZXJgIG1ldGhvZCkuIFRyeSByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgaW5zaWRlIG9mICcgK1xuICAgICAgJ2EgbmV3IHRvcC1sZXZlbCBjb21wb25lbnQgd2hpY2ggd2lsbCBob2xkIHRoZSByZWYuJ1xuICAgICkgOiBpbnZhcmlhbnQoUmVhY3RPd25lci5pc1ZhbGlkT3duZXIob3duZXIpKSk7XG4gICAgLy8gQ2hlY2sgdGhhdCBgY29tcG9uZW50YCBpcyBzdGlsbCB0aGUgY3VycmVudCByZWYgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0b1xuICAgIC8vIGRldGFjaCB0aGUgcmVmIGlmIGFub3RoZXIgY29tcG9uZW50IHN0b2xlIGl0LlxuICAgIGlmIChvd25lci5nZXRQdWJsaWNJbnN0YW5jZSgpLnJlZnNbcmVmXSA9PT0gY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCkpIHtcbiAgICAgIG93bmVyLmRldGFjaFJlZihyZWYpO1xuICAgIH1cbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0T3duZXI7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSUGQyNWxjaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQlNaV0ZqZEU5M2JtVnlYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnYVc1MllYSnBZVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZhVzUyWVhKcFlXNTBYQ0lwTzF4dVhHNHZLaXBjYmlBcUlGSmxZV04wVDNkdVpYSnpJR0Z5WlNCallYQmhZbXhsSUc5bUlITjBiM0pwYm1jZ2NtVm1aWEpsYm1ObGN5QjBieUJ2ZDI1bFpDQmpiMjF3YjI1bGJuUnpMbHh1SUNwY2JpQXFJRUZzYkNCamIyMXdiMjVsYm5SeklHRnlaU0JqWVhCaFlteGxJRzltSUM4dlltVnBibWN2THlCeVpXWmxjbVZ1WTJWa0lHSjVJRzkzYm1WeUlHTnZiWEJ2Ym1WdWRITXNJR0oxZEZ4dUlDb2diMjVzZVNCU1pXRmpkRTkzYm1WeUlHTnZiWEJ2Ym1WdWRITWdZWEpsSUdOaGNHRmliR1VnYjJZZ0x5OXlaV1psY21WdVkybHVaeTh2SUc5M2JtVmtJR052YlhCdmJtVnVkSE11WEc0Z0tpQlVhR1VnYm1GdFpXUWdjbVZtWlhKbGJtTmxJR2x6SUd0dWIzZHVJR0Z6SUdFZ1hDSnlaV1pjSWk1Y2JpQXFYRzRnS2lCU1pXWnpJR0Z5WlNCaGRtRnBiR0ZpYkdVZ2QyaGxiaUJ0YjNWdWRHVmtJR0Z1WkNCMWNHUmhkR1ZrSUdSMWNtbHVaeUJ5WldOdmJtTnBiR2xoZEdsdmJpNWNiaUFxWEc0Z0tpQWdJSFpoY2lCTmVVTnZiWEJ2Ym1WdWRDQTlJRkpsWVdOMExtTnlaV0YwWlVOc1lYTnpLSHRjYmlBcUlDQWdJQ0J5Wlc1a1pYSTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDb2dJQ0FnSUNBZ2NtVjBkWEp1SUNoY2JpQXFJQ0FnSUNBZ0lDQWdQR1JwZGlCdmJrTnNhV05yUFh0MGFHbHpMbWhoYm1Sc1pVTnNhV05yZlQ1Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0E4UTNWemRHOXRRMjl0Y0c5dVpXNTBJSEpsWmoxY0ltTjFjM1J2YlZ3aUlDOCtYRzRnS2lBZ0lDQWdJQ0FnSUR3dlpHbDJQbHh1SUNvZ0lDQWdJQ0FnS1R0Y2JpQXFJQ0FnSUNCOUxGeHVJQ29nSUNBZ0lHaGhibVJzWlVOc2FXTnJPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQXFJQ0FnSUNBZ0lIUm9hWE11Y21WbWN5NWpkWE4wYjIwdWFHRnVaR3hsUTJ4cFkyc29LVHRjYmlBcUlDQWdJQ0I5TEZ4dUlDb2dJQ0FnSUdOdmJYQnZibVZ1ZEVScFpFMXZkVzUwT2lCbWRXNWpkR2x2YmlncElIdGNiaUFxSUNBZ0lDQWdJSFJvYVhNdWNtVm1jeTVqZFhOMGIyMHVhVzVwZEdsaGJHbDZaU2dwTzF4dUlDb2dJQ0FnSUgxY2JpQXFJQ0FnZlNrN1hHNGdLbHh1SUNvZ1VtVm1jeUJ6YUc5MWJHUWdjbUZ5Wld4NUlHSmxJSFZ6WldRdUlGZG9aVzRnY21WbWN5QmhjbVVnZFhObFpDd2dkR2hsZVNCemFHOTFiR1FnYjI1c2VTQmlaU0JrYjI1bElIUnZYRzRnS2lCamIyNTBjbTlzSUdSaGRHRWdkR2hoZENCcGN5QnViM1FnYUdGdVpHeGxaQ0JpZVNCU1pXRmpkQ2R6SUdSaGRHRWdabXh2ZHk1Y2JpQXFYRzRnS2lCQVkyeGhjM01nVW1WaFkzUlBkMjVsY2x4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JQZDI1bGNpQTlJSHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQnZZbXBsWTNSY2JpQWdJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUJnYjJKcVpXTjBZQ0JwY3lCaElIWmhiR2xrSUc5M2JtVnlMbHh1SUNBZ0tpQkFabWx1WVd4Y2JpQWdJQ292WEc0Z0lHbHpWbUZzYVdSUGQyNWxjam9nWm5WdVkzUnBiMjRvYjJKcVpXTjBLU0I3WEc0Z0lDQWdjbVYwZFhKdUlDRWhLRnh1SUNBZ0lDQWdLRzlpYW1WamRDQW1KbHh1SUNBZ0lDQWdkSGx3Wlc5bUlHOWlhbVZqZEM1aGRIUmhZMmhTWldZZ1BUMDlJQ2RtZFc1amRHbHZiaWNnSmlZZ2RIbHdaVzltSUc5aWFtVmpkQzVrWlhSaFkyaFNaV1lnUFQwOUlDZG1kVzVqZEdsdmJpY3BYRzRnSUNBZ0tUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nUVdSa2N5QmhJR052YlhCdmJtVnVkQ0JpZVNCeVpXWWdkRzhnWVc0Z2IzZHVaWElnWTI5dGNHOXVaVzUwTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCamIyMXdiMjVsYm5RZ1EyOXRjRzl1Wlc1MElIUnZJSEpsWm1WeVpXNWpaUzVjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlISmxaaUJPWVcxbElHSjVJSGRvYVdOb0lIUnZJSEpsWm1WeUlIUnZJSFJvWlNCamIyMXdiMjVsYm5RdVhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlBkMjVsY24wZ2IzZHVaWElnUTI5dGNHOXVaVzUwSUc5dUlIZG9hV05vSUhSdklISmxZMjl5WkNCMGFHVWdjbVZtTGx4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQmhaR1JEYjIxd2IyNWxiblJCYzFKbFpsUnZPaUJtZFc1amRHbHZiaWhqYjIxd2IyNWxiblFzSUhKbFppd2diM2R1WlhJcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnVW1WaFkzUlBkMjVsY2k1cGMxWmhiR2xrVDNkdVpYSW9iM2R1WlhJcExGeHVJQ0FnSUNBZ0oyRmtaRU52YlhCdmJtVnVkRUZ6VW1WbVZHOG9MaTR1S1RvZ1QyNXNlU0JoSUZKbFlXTjBUM2R1WlhJZ1kyRnVJR2hoZG1VZ2NtVm1jeTRnVkdocGN5QW5JQ3RjYmlBZ0lDQWdJQ2QxYzNWaGJHeDVJRzFsWVc1eklIUm9ZWFFnZVc5MVhGd25jbVVnZEhKNWFXNW5JSFJ2SUdGa1pDQmhJSEpsWmlCMGJ5QmhJR052YlhCdmJtVnVkQ0IwYUdGMElDY2dLMXh1SUNBZ0lDQWdKMlJ2WlhOdVhGd25kQ0JvWVhabElHRnVJRzkzYm1WeUlDaDBhR0YwSUdsekxDQjNZWE1nYm05MElHTnlaV0YwWldRZ2FXNXphV1JsSUc5bUlHRnViM1JvWlhJZ0p5QXJYRzRnSUNBZ0lDQW5ZMjl0Y0c5dVpXNTBYRnduY3lCZ2NtVnVaR1Z5WUNCdFpYUm9iMlFwTGlCVWNua2djbVZ1WkdWeWFXNW5JSFJvYVhNZ1kyOXRjRzl1Wlc1MElHbHVjMmxrWlNCdlppQW5JQ3RjYmlBZ0lDQWdJQ2RoSUc1bGR5QjBiM0F0YkdWMlpXd2dZMjl0Y0c5dVpXNTBJSGRvYVdOb0lIZHBiR3dnYUc5c1pDQjBhR1VnY21WbUxpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRkpsWVdOMFQzZHVaWEl1YVhOV1lXeHBaRTkzYm1WeUtHOTNibVZ5S1NrcE8xeHVJQ0FnSUc5M2JtVnlMbUYwZEdGamFGSmxaaWh5WldZc0lHTnZiWEJ2Ym1WdWRDazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGJXOTJaWE1nWVNCamIyMXdiMjVsYm5RZ1lua2djbVZtSUdaeWIyMGdZVzRnYjNkdVpYSWdZMjl0Y0c5dVpXNTBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFKbFlXTjBRMjl0Y0c5dVpXNTBmU0JqYjIxd2IyNWxiblFnUTI5dGNHOXVaVzUwSUhSdklHUmxjbVZtWlhKbGJtTmxMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NtVm1JRTVoYldVZ2IyWWdkR2hsSUhKbFppQjBieUJ5WlcxdmRtVXVYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JQZDI1bGNuMGdiM2R1WlhJZ1EyOXRjRzl1Wlc1MElHOXVJSGRvYVdOb0lIUm9aU0J5WldZZ2FYTWdjbVZqYjNKa1pXUXVYRzRnSUNBcUlFQm1hVzVoYkZ4dUlDQWdLaUJBYVc1MFpYSnVZV3hjYmlBZ0lDb3ZYRzRnSUhKbGJXOTJaVU52YlhCdmJtVnVkRUZ6VW1WbVJuSnZiVG9nWm5WdVkzUnBiMjRvWTI5dGNHOXVaVzUwTENCeVpXWXNJRzkzYm1WeUtTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUZKbFlXTjBUM2R1WlhJdWFYTldZV3hwWkU5M2JtVnlLRzkzYm1WeUtTeGNiaUFnSUNBZ0lDZHlaVzF2ZG1WRGIyMXdiMjVsYm5SQmMxSmxaa1p5YjIwb0xpNHVLVG9nVDI1c2VTQmhJRkpsWVdOMFQzZHVaWElnWTJGdUlHaGhkbVVnY21WbWN5NGdWR2hwY3lBbklDdGNiaUFnSUNBZ0lDZDFjM1ZoYkd4NUlHMWxZVzV6SUhSb1lYUWdlVzkxWEZ3bmNtVWdkSEo1YVc1bklIUnZJSEpsYlc5MlpTQmhJSEpsWmlCMGJ5QmhJR052YlhCdmJtVnVkQ0IwYUdGMElDY2dLMXh1SUNBZ0lDQWdKMlJ2WlhOdVhGd25kQ0JvWVhabElHRnVJRzkzYm1WeUlDaDBhR0YwSUdsekxDQjNZWE1nYm05MElHTnlaV0YwWldRZ2FXNXphV1JsSUc5bUlHRnViM1JvWlhJZ0p5QXJYRzRnSUNBZ0lDQW5ZMjl0Y0c5dVpXNTBYRnduY3lCZ2NtVnVaR1Z5WUNCdFpYUm9iMlFwTGlCVWNua2djbVZ1WkdWeWFXNW5JSFJvYVhNZ1kyOXRjRzl1Wlc1MElHbHVjMmxrWlNCdlppQW5JQ3RjYmlBZ0lDQWdJQ2RoSUc1bGR5QjBiM0F0YkdWMlpXd2dZMjl0Y0c5dVpXNTBJSGRvYVdOb0lIZHBiR3dnYUc5c1pDQjBhR1VnY21WbUxpZGNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRkpsWVdOMFQzZHVaWEl1YVhOV1lXeHBaRTkzYm1WeUtHOTNibVZ5S1NrcE8xeHVJQ0FnSUM4dklFTm9aV05ySUhSb1lYUWdZR052YlhCdmJtVnVkR0FnYVhNZ2MzUnBiR3dnZEdobElHTjFjbkpsYm5RZ2NtVm1JR0psWTJGMWMyVWdkMlVnWkc4Z2JtOTBJSGRoYm5RZ2RHOWNiaUFnSUNBdkx5QmtaWFJoWTJnZ2RHaGxJSEpsWmlCcFppQmhibTkwYUdWeUlHTnZiWEJ2Ym1WdWRDQnpkRzlzWlNCcGRDNWNiaUFnSUNCcFppQW9iM2R1WlhJdVoyVjBVSFZpYkdsalNXNXpkR0Z1WTJVb0tTNXlaV1p6VzNKbFpsMGdQVDA5SUdOdmJYQnZibVZ1ZEM1blpYUlFkV0pzYVdOSmJuTjBZVzVqWlNncEtTQjdYRzRnSUNBZ0lDQnZkMjVsY2k1a1pYUmhZMmhTWldZb2NtVm1LVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCU1pXRmpkRTkzYm1WeU8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFBlcmZcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlYWN0UGVyZiBpcyBhIGdlbmVyYWwgQU9QIHN5c3RlbSBkZXNpZ25lZCB0byBtZWFzdXJlIHBlcmZvcm1hbmNlLiBUaGlzXG4gKiBtb2R1bGUgb25seSBoYXMgdGhlIGhvb2tzOiBzZWUgUmVhY3REZWZhdWx0UGVyZiBmb3IgdGhlIGFuYWx5c2lzIHRvb2wuXG4gKi9cbnZhciBSZWFjdFBlcmYgPSB7XG4gIC8qKlxuICAgKiBCb29sZWFuIHRvIGVuYWJsZS9kaXNhYmxlIG1lYXN1cmVtZW50LiBTZXQgdG8gZmFsc2UgYnkgZGVmYXVsdCB0byBwcmV2ZW50XG4gICAqIGFjY2lkZW50YWwgbG9nZ2luZyBhbmQgcGVyZiBsb3NzLlxuICAgKi9cbiAgZW5hYmxlTWVhc3VyZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEhvbGRzIG9udG8gdGhlIG1lYXN1cmUgZnVuY3Rpb24gaW4gdXNlLiBCeSBkZWZhdWx0LCBkb24ndCBtZWFzdXJlXG4gICAqIGFueXRoaW5nLCBidXQgd2UnbGwgb3ZlcnJpZGUgdGhpcyBpZiB3ZSBpbmplY3QgYSBtZWFzdXJlIGZ1bmN0aW9uLlxuICAgKi9cbiAgc3RvcmVkTWVhc3VyZTogX25vTWVhc3VyZSxcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0TmFtZVxuICAgKiBAcGFyYW0ge29iamVjdDxzdHJpbmc+fSBtZXRob2ROYW1lc1xuICAgKi9cbiAgbWVhc3VyZU1ldGhvZHM6IGZ1bmN0aW9uKG9iamVjdCwgb2JqZWN0TmFtZSwgbWV0aG9kTmFtZXMpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kTmFtZXMpIHtcbiAgICAgICAgaWYgKCFtZXRob2ROYW1lcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0W2tleV0gPSBSZWFjdFBlcmYubWVhc3VyZShcbiAgICAgICAgICBvYmplY3ROYW1lLFxuICAgICAgICAgIG1ldGhvZE5hbWVzW2tleV0sXG4gICAgICAgICAgb2JqZWN0W2tleV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHRvIHdyYXAgbWV0aG9kcyB5b3Ugd2FudCB0byBtZWFzdXJlLiBaZXJvIG92ZXJoZWFkIGluIHByb2R1Y3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmpOYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbk5hbWVcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuY1xuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAgICovXG4gIG1lYXN1cmU6IGZ1bmN0aW9uKG9iak5hbWUsIGZuTmFtZSwgZnVuYykge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIHZhciBtZWFzdXJlZEZ1bmMgPSBudWxsO1xuICAgICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKFJlYWN0UGVyZi5lbmFibGVNZWFzdXJlKSB7XG4gICAgICAgICAgaWYgKCFtZWFzdXJlZEZ1bmMpIHtcbiAgICAgICAgICAgIG1lYXN1cmVkRnVuYyA9IFJlYWN0UGVyZi5zdG9yZWRNZWFzdXJlKG9iak5hbWUsIGZuTmFtZSwgZnVuYyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtZWFzdXJlZEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIHdyYXBwZXIuZGlzcGxheU5hbWUgPSBvYmpOYW1lICsgJ18nICsgZm5OYW1lO1xuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuICAgIHJldHVybiBmdW5jO1xuICB9LFxuXG4gIGluamVjdGlvbjoge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1lYXN1cmVcbiAgICAgKi9cbiAgICBpbmplY3RNZWFzdXJlOiBmdW5jdGlvbihtZWFzdXJlKSB7XG4gICAgICBSZWFjdFBlcmYuc3RvcmVkTWVhc3VyZSA9IG1lYXN1cmU7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFNpbXBseSBwYXNzZXMgdGhyb3VnaCB0aGUgbWVhc3VyZWQgZnVuY3Rpb24sIHdpdGhvdXQgbWVhc3VyaW5nIGl0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvYmpOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gZm5OYW1lXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gX25vTWVhc3VyZShvYmpOYW1lLCBmbk5hbWUsIGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQZXJmO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUlFaWEptTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JRWlhKbVhHNGdLaUJBZEhsd1pXTm9aV05yY3lCemRHRjBhV010YjI1c2VWeHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dUx5b3FYRzRnS2lCU1pXRmpkRkJsY21ZZ2FYTWdZU0JuWlc1bGNtRnNJRUZQVUNCemVYTjBaVzBnWkdWemFXZHVaV1FnZEc4Z2JXVmhjM1Z5WlNCd1pYSm1iM0p0WVc1alpTNGdWR2hwYzF4dUlDb2diVzlrZFd4bElHOXViSGtnYUdGeklIUm9aU0JvYjI5cmN6b2djMlZsSUZKbFlXTjBSR1ZtWVhWc2RGQmxjbVlnWm05eUlIUm9aU0JoYm1Gc2VYTnBjeUIwYjI5c0xseHVJQ292WEc1MllYSWdVbVZoWTNSUVpYSm1JRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dRbTl2YkdWaGJpQjBieUJsYm1GaWJHVXZaR2x6WVdKc1pTQnRaV0Z6ZFhKbGJXVnVkQzRnVTJWMElIUnZJR1poYkhObElHSjVJR1JsWm1GMWJIUWdkRzhnY0hKbGRtVnVkRnh1SUNBZ0tpQmhZMk5wWkdWdWRHRnNJR3h2WjJkcGJtY2dZVzVrSUhCbGNtWWdiRzl6Y3k1Y2JpQWdJQ292WEc0Z0lHVnVZV0pzWlUxbFlYTjFjbVU2SUdaaGJITmxMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkliMnhrY3lCdmJuUnZJSFJvWlNCdFpXRnpkWEpsSUdaMWJtTjBhVzl1SUdsdUlIVnpaUzRnUW5rZ1pHVm1ZWFZzZEN3Z1pHOXVKM1FnYldWaGMzVnlaVnh1SUNBZ0tpQmhibmwwYUdsdVp5d2dZblYwSUhkbEoyeHNJRzkyWlhKeWFXUmxJSFJvYVhNZ2FXWWdkMlVnYVc1cVpXTjBJR0VnYldWaGMzVnlaU0JtZFc1amRHbHZiaTVjYmlBZ0lDb3ZYRzRnSUhOMGIzSmxaRTFsWVhOMWNtVTZJRjl1YjAxbFlYTjFjbVVzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3WVhKaGJTQjdiMkpxWldOMGZTQnZZbXBsWTNSY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzlpYW1WamRFNWhiV1ZjYmlBZ0lDb2dRSEJoY21GdElIdHZZbXBsWTNROGMzUnlhVzVuUG4wZ2JXVjBhRzlrVG1GdFpYTmNiaUFnSUNvdlhHNGdJRzFsWVhOMWNtVk5aWFJvYjJSek9pQm1kVzVqZEdsdmJpaHZZbXBsWTNRc0lHOWlhbVZqZEU1aGJXVXNJRzFsZEdodlpFNWhiV1Z6S1NCN1hHNGdJQ0FnYVdZZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaWtnZTF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYTJWNUlHbHVJRzFsZEdodlpFNWhiV1Z6S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2doYldWMGFHOWtUbUZ0WlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYTJWNUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHOWlhbVZqZEZ0clpYbGRJRDBnVW1WaFkzUlFaWEptTG0xbFlYTjFjbVVvWEc0Z0lDQWdJQ0FnSUNBZ2IySnFaV04wVG1GdFpTeGNiaUFnSUNBZ0lDQWdJQ0J0WlhSb2IyUk9ZVzFsYzF0clpYbGRMRnh1SUNBZ0lDQWdJQ0FnSUc5aWFtVmpkRnRyWlhsZFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJWYzJVZ2RHaHBjeUIwYnlCM2NtRndJRzFsZEdodlpITWdlVzkxSUhkaGJuUWdkRzhnYldWaGMzVnlaUzRnV21WeWJ5QnZkbVZ5YUdWaFpDQnBiaUJ3Y205a2RXTjBhVzl1TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2IySnFUbUZ0WlZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdabTVPWVcxbFhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjU5SUdaMWJtTmNiaUFnSUNvZ1FISmxkSFZ5YmlCN1puVnVZM1JwYjI1OVhHNGdJQ0FxTDF4dUlDQnRaV0Z6ZFhKbE9pQm1kVzVqZEdsdmJpaHZZbXBPWVcxbExDQm1iazVoYldVc0lHWjFibU1wSUh0Y2JpQWdJQ0JwWmlBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdLU0I3WEc0Z0lDQWdJQ0IyWVhJZ2JXVmhjM1Z5WldSR2RXNWpJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lIWmhjaUIzY21Gd2NHVnlJRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hTWldGamRGQmxjbVl1Wlc1aFlteGxUV1ZoYzNWeVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ2hiV1ZoYzNWeVpXUkdkVzVqS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J0WldGemRYSmxaRVoxYm1NZ1BTQlNaV0ZqZEZCbGNtWXVjM1J2Y21Wa1RXVmhjM1Z5WlNodlltcE9ZVzFsTENCbWJrNWhiV1VzSUdaMWJtTXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2JXVmhjM1Z5WldSR2RXNWpMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWjFibU11WVhCd2JIa29kR2hwY3l3Z1lYSm5kVzFsYm5SektUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ0lDQjNjbUZ3Y0dWeUxtUnBjM0JzWVhsT1lXMWxJRDBnYjJKcVRtRnRaU0FySUNkZkp5QXJJR1p1VG1GdFpUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCM2NtRndjR1Z5TzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1puVnVZenRjYmlBZ2ZTeGNibHh1SUNCcGJtcGxZM1JwYjI0NklIdGNiaUFnSUNBdktpcGNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQnRaV0Z6ZFhKbFhHNGdJQ0FnSUNvdlhHNGdJQ0FnYVc1cVpXTjBUV1ZoYzNWeVpUb2dablZ1WTNScGIyNG9iV1ZoYzNWeVpTa2dlMXh1SUNBZ0lDQWdVbVZoWTNSUVpYSm1Mbk4wYjNKbFpFMWxZWE4xY21VZ1BTQnRaV0Z6ZFhKbE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlR0Y2JseHVMeW9xWEc0Z0tpQlRhVzF3YkhrZ2NHRnpjMlZ6SUhSb2NtOTFaMmdnZEdobElHMWxZWE4xY21Wa0lHWjFibU4wYVc5dUxDQjNhWFJvYjNWMElHMWxZWE4xY21sdVp5QnBkQzVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiMkpxVG1GdFpWeHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR1p1VG1GdFpWeHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnWm5WdVkxeHVJQ29nUUhKbGRIVnliaUI3Wm5WdVkzUnBiMjU5WEc0Z0tpOWNibVoxYm1OMGFXOXVJRjl1YjAxbFlYTjFjbVVvYjJKcVRtRnRaU3dnWm01T1lXMWxMQ0JtZFc1aktTQjdYRzRnSUhKbGRIVnliaUJtZFc1ak8xeHVmVnh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUZKbFlXTjBVR1Z5Wmp0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UHJvcFRyYW5zZmVyZXJcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xudmFyIGpvaW5DbGFzc2VzID0gcmVxdWlyZShcIi4vam9pbkNsYXNzZXNcIik7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRyYW5zZmVyIHN0cmF0ZWd5IHRoYXQgd2lsbCBtZXJnZSBwcm9wIHZhbHVlcyB1c2luZyB0aGUgc3VwcGxpZWRcbiAqIGBtZXJnZVN0cmF0ZWd5YC4gSWYgYSBwcm9wIHdhcyBwcmV2aW91c2x5IHVuc2V0LCB0aGlzIGp1c3Qgc2V0cyBpdC5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXJnZVN0cmF0ZWd5XG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVHJhbnNmZXJTdHJhdGVneShtZXJnZVN0cmF0ZWd5KSB7XG4gIHJldHVybiBmdW5jdGlvbihwcm9wcywga2V5LCB2YWx1ZSkge1xuICAgIGlmICghcHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgcHJvcHNba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wc1trZXldID0gbWVyZ2VTdHJhdGVneShwcm9wc1trZXldLCB2YWx1ZSk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgdHJhbnNmZXJTdHJhdGVneU1lcmdlID0gY3JlYXRlVHJhbnNmZXJTdHJhdGVneShmdW5jdGlvbihhLCBiKSB7XG4gIC8vIGBtZXJnZWAgb3ZlcnJpZGVzIHRoZSBmaXJzdCBvYmplY3QncyAoYHByb3BzW2tleV1gIGFib3ZlKSBrZXlzIHVzaW5nIHRoZVxuICAvLyBzZWNvbmQgb2JqZWN0J3MgKGB2YWx1ZWApIGtleXMuIEFuIG9iamVjdCdzIHN0eWxlJ3MgZXhpc3RpbmcgYHByb3BBYCB3b3VsZFxuICAvLyBnZXQgb3ZlcnJpZGRlbi4gRmxpcCB0aGUgb3JkZXIgaGVyZS5cbiAgcmV0dXJuIGFzc2lnbih7fSwgYiwgYSk7XG59KTtcblxuLyoqXG4gKiBUcmFuc2ZlciBzdHJhdGVnaWVzIGRpY3RhdGUgaG93IHByb3BzIGFyZSB0cmFuc2ZlcnJlZCBieSBgdHJhbnNmZXJQcm9wc1RvYC5cbiAqIE5PVEU6IGlmIHlvdSBhZGQgYW55IG1vcmUgZXhjZXB0aW9ucyB0byB0aGlzIGxpc3QgeW91IHNob3VsZCBiZSBzdXJlIHRvXG4gKiB1cGRhdGUgYGNsb25lV2l0aFByb3BzKClgIGFjY29yZGluZ2x5LlxuICovXG52YXIgVHJhbnNmZXJTdHJhdGVnaWVzID0ge1xuICAvKipcbiAgICogTmV2ZXIgdHJhbnNmZXIgYGNoaWxkcmVuYC5cbiAgICovXG4gIGNoaWxkcmVuOiBlbXB0eUZ1bmN0aW9uLFxuICAvKipcbiAgICogVHJhbnNmZXIgdGhlIGBjbGFzc05hbWVgIHByb3AgYnkgbWVyZ2luZyB0aGVtLlxuICAgKi9cbiAgY2xhc3NOYW1lOiBjcmVhdGVUcmFuc2ZlclN0cmF0ZWd5KGpvaW5DbGFzc2VzKSxcbiAgLyoqXG4gICAqIFRyYW5zZmVyIHRoZSBgc3R5bGVgIHByb3AgKHdoaWNoIGlzIGFuIG9iamVjdCkgYnkgbWVyZ2luZyB0aGVtLlxuICAgKi9cbiAgc3R5bGU6IHRyYW5zZmVyU3RyYXRlZ3lNZXJnZVxufTtcblxuLyoqXG4gKiBNdXRhdGVzIHRoZSBmaXJzdCBhcmd1bWVudCBieSB0cmFuc2ZlcnJpbmcgdGhlIHByb3BlcnRpZXMgZnJvbSB0aGUgc2Vjb25kXG4gKiBhcmd1bWVudC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXdQcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiB0cmFuc2ZlckludG8ocHJvcHMsIG5ld1Byb3BzKSB7XG4gIGZvciAodmFyIHRoaXNLZXkgaW4gbmV3UHJvcHMpIHtcbiAgICBpZiAoIW5ld1Byb3BzLmhhc093blByb3BlcnR5KHRoaXNLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgdHJhbnNmZXJTdHJhdGVneSA9IFRyYW5zZmVyU3RyYXRlZ2llc1t0aGlzS2V5XTtcblxuICAgIGlmICh0cmFuc2ZlclN0cmF0ZWd5ICYmIFRyYW5zZmVyU3RyYXRlZ2llcy5oYXNPd25Qcm9wZXJ0eSh0aGlzS2V5KSkge1xuICAgICAgdHJhbnNmZXJTdHJhdGVneShwcm9wcywgdGhpc0tleSwgbmV3UHJvcHNbdGhpc0tleV0pO1xuICAgIH0gZWxzZSBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KHRoaXNLZXkpKSB7XG4gICAgICBwcm9wc1t0aGlzS2V5XSA9IG5ld1Byb3BzW3RoaXNLZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJvcHM7XG59XG5cbi8qKlxuICogUmVhY3RQcm9wVHJhbnNmZXJlciBhcmUgY2FwYWJsZSBvZiB0cmFuc2ZlcnJpbmcgcHJvcHMgdG8gYW5vdGhlciBjb21wb25lbnRcbiAqIHVzaW5nIGEgYHRyYW5zZmVyUHJvcHNUb2AgbWV0aG9kLlxuICpcbiAqIEBjbGFzcyBSZWFjdFByb3BUcmFuc2ZlcmVyXG4gKi9cbnZhciBSZWFjdFByb3BUcmFuc2ZlcmVyID0ge1xuXG4gIC8qKlxuICAgKiBNZXJnZSB0d28gcHJvcHMgb2JqZWN0cyB1c2luZyBUcmFuc2ZlclN0cmF0ZWdpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvbGRQcm9wcyBvcmlnaW5hbCBwcm9wcyAodGhleSB0YWtlIHByZWNlZGVuY2UpXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdQcm9wcyBuZXcgcHJvcHMgdG8gbWVyZ2UgaW5cbiAgICogQHJldHVybiB7b2JqZWN0fSBhIG5ldyBvYmplY3QgY29udGFpbmluZyBib3RoIHNldHMgb2YgcHJvcHMgbWVyZ2VkLlxuICAgKi9cbiAgbWVyZ2VQcm9wczogZnVuY3Rpb24ob2xkUHJvcHMsIG5ld1Byb3BzKSB7XG4gICAgcmV0dXJuIHRyYW5zZmVySW50byhhc3NpZ24oe30sIG9sZFByb3BzKSwgbmV3UHJvcHMpO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHJhbnNmZXJlcjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHt9O1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge1xuICAgIHByb3A6ICdwcm9wJyxcbiAgICBjb250ZXh0OiAnY29udGV4dCcsXG4gICAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29udGV4dCdcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVUbUZ0WlhNdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1VtVmhZM1JRY205d1ZIbHdaVXh2WTJGMGFXOXVUbUZ0WlhOY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGN5QTlJSHQ5TzF4dVhHNXBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUZKbFlXTjBVSEp2Y0ZSNWNHVk1iMk5oZEdsdmJrNWhiV1Z6SUQwZ2UxeHVJQ0FnSUhCeWIzQTZJQ2R3Y205d0p5eGNiaUFnSUNCamIyNTBaWGgwT2lBblkyOXVkR1Y0ZENjc1hHNGdJQ0FnWTJocGJHUkRiMjUwWlhoME9pQW5ZMmhwYkdRZ1kyOXVkR1Y0ZENkY2JpQWdmVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQlNaV0ZqZEZCeWIzQlVlWEJsVEc5allYUnBiMjVPWVcxbGN6dGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFByb3BUeXBlTG9jYXRpb25zXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5TWlycm9yID0gcmVxdWlyZShcIi4va2V5TWlycm9yXCIpO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9ucyA9IGtleU1pcnJvcih7XG4gIHByb3A6IG51bGwsXG4gIGNvbnRleHQ6IG51bGwsXG4gIGNoaWxkQ29udGV4dDogbnVsbFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9ucztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFByb3BUeXBlc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEZyYWdtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RGcmFnbWVudFwiKTtcbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzXCIpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2VtcHR5RnVuY3Rpb25cIik7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6XG4gKlxuICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICogICB2YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICogICAgIHByb3BUeXBlczoge1xuICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcbiAqXG4gKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXG4gKlxuICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2YoRGlhbG9nKS5pc1JlcXVpcmVkXG4gKiAgICAgfSxcbiAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICogICB9KTtcbiAqXG4gKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gKlxuICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAqXG4gKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gKlxuICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICBwcm9wVHlwZXM6IHtcbiAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVkIFwiaHJlZlwiLlxuICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXG4gKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAqICAgICAgICAgICk7XG4gKiAgICAgICAgfVxuICogICAgICB9XG4gKiAgICB9LFxuICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XG4gKiAgfSk7XG4gKlxuICogQGludGVybmFsXG4gKi9cblxudmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxudmFyIGVsZW1lbnRUeXBlQ2hlY2tlciA9IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpO1xudmFyIG5vZGVUeXBlQ2hlY2tlciA9IGNyZWF0ZU5vZGVDaGVja2VyKCk7XG5cbnZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcbiAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcblxuICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgZWxlbWVudDogZWxlbWVudFR5cGVDaGVja2VyLFxuICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICBub2RlOiBub2RlVHlwZUNoZWNrZXIsXG4gIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAgIChcIlJlcXVpcmVkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgd2FzIG5vdCBzcGVjaWZpZWQgaW4gXCIpICtcbiAgICAgICAgICAoXCJgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLlwiKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBvZiB0eXBlIGBcIiArIHByZWNpc2VUeXBlICsgXCJgIFwiKSArXG4gICAgICAgIChcInN1cHBsaWVkIHRvIGBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGBcIiArIGV4cGVjdGVkVHlwZSArIFwiYC5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJucyhudWxsKSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgb2YgdHlwZSBcIikgK1xuICAgICAgICAoXCJgXCIgKyBwcm9wVHlwZSArIFwiYCBzdXBwbGllZCB0byBgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBhbiBhcnJheS5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKTtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgaWYgKCFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBzdXBwbGllZCB0byBcIikgK1xuICAgICAgICAoXCJgXCIgKyBjb21wb25lbnROYW1lICsgXCJgLCBleHBlY3RlZCBhIFJlYWN0RWxlbWVudC5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIHN1cHBsaWVkIHRvIFwiKSArXG4gICAgICAgIChcImBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGluc3RhbmNlIG9mIGBcIiArIGV4cGVjdGVkQ2xhc3NOYW1lICsgXCJgLlwiKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgPT09IGV4cGVjdGVkVmFsdWVzW2ldKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcbiAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIG9mIHZhbHVlIGBcIiArIHByb3BWYWx1ZSArIFwiYCBcIikgK1xuICAgICAgKFwic3VwcGxpZWQgdG8gYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgb25lIG9mIFwiICsgdmFsdWVzU3RyaW5nICsgXCIuXCIpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAgIChcIkludmFsaWQgXCIgKyBsb2NhdGlvbk5hbWUgKyBcIiBgXCIgKyBwcm9wTmFtZSArIFwiYCBvZiB0eXBlIFwiKSArXG4gICAgICAgIChcImBcIiArIHByb3BUeXBlICsgXCJgIHN1cHBsaWVkIHRvIGBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAsIGV4cGVjdGVkIGFuIG9iamVjdC5cIilcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgc3VwcGxpZWQgdG8gXCIpICtcbiAgICAgIChcImBcIiArIGNvbXBvbmVudE5hbWUgKyBcImAuXCIpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl07XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgICAgICAoXCJJbnZhbGlkIFwiICsgbG9jYXRpb25OYW1lICsgXCIgYFwiICsgcHJvcE5hbWUgKyBcImAgc3VwcGxpZWQgdG8gXCIpICtcbiAgICAgICAgKFwiYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuXCIpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dO1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgKFwiSW52YWxpZCBcIiArIGxvY2F0aW9uTmFtZSArIFwiIGBcIiArIHByb3BOYW1lICsgXCJgIG9mIHR5cGUgYFwiICsgcHJvcFR5cGUgKyBcImAgXCIpICtcbiAgICAgICAgKFwic3VwcGxpZWQgdG8gYFwiICsgY29tcG9uZW50TmFtZSArIFwiYCwgZXhwZWN0ZWQgYG9iamVjdGAuXCIpXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICBpZiAoIWNoZWNrZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbik7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcHJvcFZhbHVlID0gUmVhY3RGcmFnbWVudC5leHRyYWN0SWZGcmFnbWVudChwcm9wVmFsdWUpO1xuICAgICAgZm9yICh2YXIgayBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc05vZGUocHJvcFZhbHVlW2tdKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG5mdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG4gIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgcmV0dXJuICdvYmplY3QnO1xuICB9XG4gIHJldHVybiBwcm9wVHlwZTtcbn1cblxuLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG5mdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gJ2RhdGUnO1xuICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9wVHlwZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFB1dExpc3RlbmVyUXVldWVcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoXCIuL1Bvb2xlZENsYXNzXCIpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCIuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlclwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG5cbmZ1bmN0aW9uIFJlYWN0UHV0TGlzdGVuZXJRdWV1ZSgpIHtcbiAgdGhpcy5saXN0ZW5lcnNUb1B1dCA9IFtdO1xufVxuXG5hc3NpZ24oUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLnByb3RvdHlwZSwge1xuICBlbnF1ZXVlUHV0TGlzdGVuZXI6IGZ1bmN0aW9uKHJvb3ROb2RlSUQsIHByb3BLZXksIHByb3BWYWx1ZSkge1xuICAgIHRoaXMubGlzdGVuZXJzVG9QdXQucHVzaCh7XG4gICAgICByb290Tm9kZUlEOiByb290Tm9kZUlELFxuICAgICAgcHJvcEtleTogcHJvcEtleSxcbiAgICAgIHByb3BWYWx1ZTogcHJvcFZhbHVlXG4gICAgfSk7XG4gIH0sXG5cbiAgcHV0TGlzdGVuZXJzOiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlzdGVuZXJzVG9QdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaXN0ZW5lclRvUHV0ID0gdGhpcy5saXN0ZW5lcnNUb1B1dFtpXTtcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5wdXRMaXN0ZW5lcihcbiAgICAgICAgbGlzdGVuZXJUb1B1dC5yb290Tm9kZUlELFxuICAgICAgICBsaXN0ZW5lclRvUHV0LnByb3BLZXksXG4gICAgICAgIGxpc3RlbmVyVG9QdXQucHJvcFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfSxcblxuICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5saXN0ZW5lcnNUb1B1dC5sZW5ndGggPSAwO1xuICB9LFxuXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhSZWFjdFB1dExpc3RlbmVyUXVldWUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHV0TGlzdGVuZXJRdWV1ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENhbGxiYWNrUXVldWUgPSByZXF1aXJlKFwiLi9DYWxsYmFja1F1ZXVlXCIpO1xudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcIi4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyXCIpO1xudmFyIFJlYWN0SW5wdXRTZWxlY3Rpb24gPSByZXF1aXJlKFwiLi9SZWFjdElucHV0U2VsZWN0aW9uXCIpO1xudmFyIFJlYWN0UHV0TGlzdGVuZXJRdWV1ZSA9IHJlcXVpcmUoXCIuL1JlYWN0UHV0TGlzdGVuZXJRdWV1ZVwiKTtcbnZhciBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoXCIuL1RyYW5zYWN0aW9uXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQsIHdoZW4gcG9zc2libGUsIHRoZSBzZWxlY3Rpb24gcmFuZ2UgKGN1cnJlbnRseSBzZWxlY3RlZCB0ZXh0XG4gKiBpbnB1dCkgaXMgbm90IGRpc3R1cmJlZCBieSBwZXJmb3JtaW5nIHRoZSB0cmFuc2FjdGlvbi5cbiAqL1xudmFyIFNFTEVDVElPTl9SRVNUT1JBVElPTiA9IHtcbiAgLyoqXG4gICAqIEByZXR1cm4ge1NlbGVjdGlvbn0gU2VsZWN0aW9uIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvcm1hdGlvbixcbiAgLyoqXG4gICAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWwgU2VsZWN0aW9uIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gYGluaXRpYWxpemVgLlxuICAgKi9cbiAgY2xvc2U6IFJlYWN0SW5wdXRTZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvblxufTtcblxuLyoqXG4gKiBTdXBwcmVzc2VzIGV2ZW50cyAoYmx1ci9mb2N1cykgdGhhdCBjb3VsZCBiZSBpbmFkdmVydGVudGx5IGRpc3BhdGNoZWQgZHVlIHRvXG4gKiBoaWdoIGxldmVsIERPTSBtYW5pcHVsYXRpb25zIChsaWtlIHRlbXBvcmFyaWx5IHJlbW92aW5nIGEgdGV4dCBpbnB1dCBmcm9tIHRoZVxuICogRE9NKS5cbiAqL1xudmFyIEVWRU5UX1NVUFBSRVNTSU9OID0ge1xuICAvKipcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVGhlIGVuYWJsZWQgc3RhdHVzIG9mIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGJlZm9yZVxuICAgKiB0aGUgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY3VycmVudGx5RW5hYmxlZCA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5pc0VuYWJsZWQoKTtcbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuc2V0RW5hYmxlZChmYWxzZSk7XG4gICAgcmV0dXJuIGN1cnJlbnRseUVuYWJsZWQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJldmlvdXNseUVuYWJsZWQgRW5hYmxlZCBzdGF0dXMgb2ZcbiAgICogICBgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyYCBiZWZvcmUgdGhlIHJlY29uY2lsaWF0aW9uIG9jY3VyZWQuIGBjbG9zZWBcbiAgICogICByZXN0b3JlcyB0aGUgcHJldmlvdXMgdmFsdWUuXG4gICAqL1xuICBjbG9zZTogZnVuY3Rpb24ocHJldmlvdXNseUVuYWJsZWQpIHtcbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuc2V0RW5hYmxlZChwcmV2aW91c2x5RW5hYmxlZCk7XG4gIH1cbn07XG5cbi8qKlxuICogUHJvdmlkZXMgYSBxdWV1ZSBmb3IgY29sbGVjdGluZyBgY29tcG9uZW50RGlkTW91bnRgIGFuZFxuICogYGNvbXBvbmVudERpZFVwZGF0ZWAgY2FsbGJhY2tzIGR1cmluZyB0aGUgdGhlIHRyYW5zYWN0aW9uLlxuICovXG52YXIgT05fRE9NX1JFQURZX1FVRVVFSU5HID0ge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIGBvbkRPTVJlYWR5YCBxdWV1ZS5cbiAgICovXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5LnJlc2V0KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFmdGVyIERPTSBpcyBmbHVzaGVkLCBpbnZva2UgYWxsIHJlZ2lzdGVyZWQgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcy5cbiAgICovXG4gIGNsb3NlOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlYWN0TW91bnRSZWFkeS5ub3RpZnlBbGwoKTtcbiAgfVxufTtcblxudmFyIFBVVF9MSVNURU5FUl9RVUVVRUlORyA9IHtcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlLnJlc2V0KCk7XG4gIH0sXG5cbiAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHV0TGlzdGVuZXJRdWV1ZS5wdXRMaXN0ZW5lcnMoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFeGVjdXRlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBgVHJhbnNhY3Rpb25gIGluc3RhbmNlLiBDb25zaWRlciB0aGVzZSBhc1xuICogYmVpbmcgbWVtYmVyIG1ldGhvZHMsIGJ1dCB3aXRoIGFuIGltcGxpZWQgb3JkZXJpbmcgd2hpbGUgYmVpbmcgaXNvbGF0ZWQgZnJvbVxuICogZWFjaCBvdGhlci5cbiAqL1xudmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW1xuICBQVVRfTElTVEVORVJfUVVFVUVJTkcsXG4gIFNFTEVDVElPTl9SRVNUT1JBVElPTixcbiAgRVZFTlRfU1VQUFJFU1NJT04sXG4gIE9OX0RPTV9SRUFEWV9RVUVVRUlOR1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHk6XG4gKiAtIFRoZSBvcmRlciB0aGF0IHRoZXNlIGFyZSBsaXN0ZWQgaW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNyaXRpY2FsOlxuICogLSBTdXBwcmVzc2VzIGV2ZW50cy5cbiAqIC0gUmVzdG9yZXMgc2VsZWN0aW9uIHJhbmdlLlxuICpcbiAqIEZ1dHVyZTpcbiAqIC0gUmVzdG9yZSBkb2N1bWVudC9vdmVyZmxvdyBzY3JvbGwgcG9zaXRpb25zIHRoYXQgd2VyZSB1bmludGVudGlvbmFsbHlcbiAqICAgbW9kaWZpZWQgdmlhIERPTSBpbnNlcnRpb25zIGFib3ZlIHRoZSB0b3Agdmlld3BvcnQgYm91bmRhcnkuXG4gKiAtIEltcGxlbWVudC9pbnRlZ3JhdGUgd2l0aCBjdXN0b21pemVkIGNvbnN0cmFpbnQgYmFzZWQgbGF5b3V0IHN5c3RlbSBhbmQga2VlcFxuICogICB0cmFjayBvZiB3aGljaCBkaW1lbnNpb25zIG11c3QgYmUgcmVtZWFzdXJlZC5cbiAqXG4gKiBAY2xhc3MgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvblxuICovXG5mdW5jdGlvbiBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uKCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG4gIC8vIE9ubHkgc2VydmVyLXNpZGUgcmVuZGVyaW5nIHJlYWxseSBuZWVkcyB0aGlzIG9wdGlvbiAoc2VlXG4gIC8vIGBSZWFjdFNlcnZlclJlbmRlcmluZ2ApLCBidXQgc2VydmVyLXNpZGUgdXNlc1xuICAvLyBgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbmAgaW5zdGVhZC4gVGhpcyBvcHRpb24gaXMgaGVyZSBzbyB0aGF0IGl0J3NcbiAgLy8gYWNjZXNzaWJsZSBhbmQgZGVmYXVsdHMgdG8gZmFsc2Ugd2hlbiBgUmVhY3RET01Db21wb25lbnRgIGFuZFxuICAvLyBgUmVhY3RUZXh0Q29tcG9uZW50YCBjaGVja3MgaXQgaW4gYG1vdW50Q29tcG9uZW50YC5gXG4gIHRoaXMucmVuZGVyVG9TdGF0aWNNYXJrdXAgPSBmYWxzZTtcbiAgdGhpcy5yZWFjdE1vdW50UmVhZHkgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZChudWxsKTtcbiAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlID0gUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLmdldFBvb2xlZCgpO1xufVxuXG52YXIgTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBAc2VlIFRyYW5zYWN0aW9uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAZmluYWxcbiAgICogQHJldHVybiB7YXJyYXk8b2JqZWN0Pn0gTGlzdCBvZiBvcGVyYXRpb24gd3JhcCBwcm9jZWVkdXJlcy5cbiAgICogICBUT0RPOiBjb252ZXJ0IHRvIGFycmF5PFRyYW5zYWN0aW9uV3JhcHBlcj5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfSxcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUgdG8gY29sbGVjdCBgb25ET01SZWFkeWAgY2FsbGJhY2tzIHdpdGguXG4gICAqL1xuICBnZXRSZWFjdE1vdW50UmVhZHk6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeTtcbiAgfSxcblxuICBnZXRQdXRMaXN0ZW5lclF1ZXVlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wdXRMaXN0ZW5lclF1ZXVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBgUG9vbGVkQ2xhc3NgIGxvb2tzIGZvciB0aGlzLCBhbmQgd2lsbCBpbnZva2UgdGhpcyBiZWZvcmUgYWxsb3dpbmcgdGhpc1xuICAgKiBpbnN0YW5jZSB0byBiZSByZXN1c2VkLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgQ2FsbGJhY2tRdWV1ZS5yZWxlYXNlKHRoaXMucmVhY3RNb3VudFJlYWR5KTtcbiAgICB0aGlzLnJlYWN0TW91bnRSZWFkeSA9IG51bGw7XG5cbiAgICBSZWFjdFB1dExpc3RlbmVyUXVldWUucmVsZWFzZSh0aGlzLnB1dExpc3RlbmVyUXVldWUpO1xuICAgIHRoaXMucHV0TGlzdGVuZXJRdWV1ZSA9IG51bGw7XG4gIH1cbn07XG5cblxuYXNzaWduKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucHJvdG90eXBlLCBUcmFuc2FjdGlvbi5NaXhpbiwgTWl4aW4pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbik7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RSZWNvbmNpbGVyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RSZWYgPSByZXF1aXJlKFwiLi9SZWFjdFJlZlwiKTtcbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3JcIik7XG5cbi8qKlxuICogSGVscGVyIHRvIGNhbGwgUmVhY3RSZWYuYXR0YWNoUmVmcyB3aXRoIHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCwgc3BsaXQgb3V0XG4gKiB0byBhdm9pZCBhbGxvY2F0aW9ucyBpbiB0aGUgdHJhbnNhY3Rpb24gbW91bnQtcmVhZHkgcXVldWUuXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlZnMoKSB7XG4gIFJlYWN0UmVmLmF0dGFjaFJlZnModGhpcywgdGhpcy5fY3VycmVudEVsZW1lbnQpO1xufVxuXG52YXIgUmVhY3RSZWNvbmNpbGVyID0ge1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LCByZW5kZXJzIG1hcmt1cCwgYW5kIHJlZ2lzdGVycyBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGludGVybmFsSW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJvb3RJRCBET00gSUQgb2YgdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IFJlbmRlcmVkIG1hcmt1cCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbihpbnRlcm5hbEluc3RhbmNlLCByb290SUQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIG1hcmt1cCA9IGludGVybmFsSW5zdGFuY2UubW91bnRDb21wb25lbnQocm9vdElELCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNoZWNrQW5kV2FybkZvck11dGF0ZWRQcm9wcyhcbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnRcbiAgICAgICk7XG4gICAgfVxuICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYXR0YWNoUmVmcywgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfSxcblxuICAvKipcbiAgICogUmVsZWFzZXMgYW55IHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgYG1vdW50Q29tcG9uZW50YC5cbiAgICpcbiAgICogQGZpbmFsXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24oaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIFJlYWN0UmVmLmRldGFjaFJlZnMoaW50ZXJuYWxJbnN0YW5jZSwgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQpO1xuICAgIGludGVybmFsSW5zdGFuY2UudW5tb3VudENvbXBvbmVudCgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBjb21wb25lbnQgdXNpbmcgYSBuZXcgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnRcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uKFxuICAgIGludGVybmFsSW5zdGFuY2UsIG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dFxuICApIHtcbiAgICB2YXIgcHJldkVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcblxuICAgIGlmIChuZXh0RWxlbWVudCA9PT0gcHJldkVsZW1lbnQgJiYgbmV4dEVsZW1lbnQuX293bmVyICE9IG51bGwpIHtcbiAgICAgIC8vIFNpbmNlIGVsZW1lbnRzIGFyZSBpbW11dGFibGUgYWZ0ZXIgdGhlIG93bmVyIGlzIHJlbmRlcmVkLFxuICAgICAgLy8gd2UgY2FuIGRvIGEgY2hlYXAgaWRlbnRpdHkgY29tcGFyZSBoZXJlIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGFcbiAgICAgIC8vIHN1cGVyZmx1b3VzIHJlY29uY2lsZS4gSXQncyBwb3NzaWJsZSBmb3Igc3RhdGUgdG8gYmUgbXV0YWJsZSBidXQgc3VjaFxuICAgICAgLy8gY2hhbmdlIHNob3VsZCB0cmlnZ2VyIGFuIHVwZGF0ZSBvZiB0aGUgb3duZXIgd2hpY2ggd291bGQgcmVjcmVhdGVcbiAgICAgIC8vIHRoZSBlbGVtZW50LiBXZSBleHBsaWNpdGx5IGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIGFuIG93bmVyIHNpbmNlXG4gICAgICAvLyBpdCdzIHBvc3NpYmxlIGZvciBhbiBlbGVtZW50IGNyZWF0ZWQgb3V0c2lkZSBhIGNvbXBvc2l0ZSB0byBiZVxuICAgICAgLy8gZGVlcGx5IG11dGF0ZWQgYW5kIHJldXNlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgICBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFByb3BzKG5leHRFbGVtZW50KTtcbiAgICB9XG5cbiAgICB2YXIgcmVmc0NoYW5nZWQgPSBSZWFjdFJlZi5zaG91bGRVcGRhdGVSZWZzKFxuICAgICAgcHJldkVsZW1lbnQsXG4gICAgICBuZXh0RWxlbWVudFxuICAgICk7XG5cbiAgICBpZiAocmVmc0NoYW5nZWQpIHtcbiAgICAgIFJlYWN0UmVmLmRldGFjaFJlZnMoaW50ZXJuYWxJbnN0YW5jZSwgcHJldkVsZW1lbnQpO1xuICAgIH1cblxuICAgIGludGVybmFsSW5zdGFuY2UucmVjZWl2ZUNvbXBvbmVudChuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlZnNDaGFuZ2VkKSB7XG4gICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGF0dGFjaFJlZnMsIGludGVybmFsSW5zdGFuY2UpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRmx1c2ggYW55IGRpcnR5IGNoYW5nZXMgaW4gYSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGludGVybmFsSW5zdGFuY2VcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTogZnVuY3Rpb24oXG4gICAgaW50ZXJuYWxJbnN0YW5jZSxcbiAgICB0cmFuc2FjdGlvblxuICApIHtcbiAgICBpbnRlcm5hbEluc3RhbmNlLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSh0cmFuc2FjdGlvbik7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFJlY29uY2lsZXI7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSU1pXTnZibU5wYkdWeUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRkpsWVdOMFVtVmpiMjVqYVd4bGNseHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRkpsWVdOMFVtVm1JRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JTWldaY0lpazdYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBWbUZzYVdSaGRHOXlYQ0lwTzF4dVhHNHZLaXBjYmlBcUlFaGxiSEJsY2lCMGJ5QmpZV3hzSUZKbFlXTjBVbVZtTG1GMGRHRmphRkpsWm5NZ2QybDBhQ0IwYUdseklHTnZiWEJ2YzJsMFpTQmpiMjF3YjI1bGJuUXNJSE53YkdsMElHOTFkRnh1SUNvZ2RHOGdZWFp2YVdRZ1lXeHNiMk5oZEdsdmJuTWdhVzRnZEdobElIUnlZVzV6WVdOMGFXOXVJRzF2ZFc1MExYSmxZV1I1SUhGMVpYVmxMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQmhkSFJoWTJoU1pXWnpLQ2tnZTF4dUlDQlNaV0ZqZEZKbFppNWhkSFJoWTJoU1pXWnpLSFJvYVhNc0lIUm9hWE11WDJOMWNuSmxiblJGYkdWdFpXNTBLVHRjYm4xY2JseHVkbUZ5SUZKbFlXTjBVbVZqYjI1amFXeGxjaUE5SUh0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nU1c1cGRHbGhiR2w2WlhNZ2RHaGxJR052YlhCdmJtVnVkQ3dnY21WdVpHVnljeUJ0WVhKcmRYQXNJR0Z1WkNCeVpXZHBjM1JsY25NZ1pYWmxiblFnYkdsemRHVnVaWEp6TGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCcGJuUmxjbTVoYkVsdWMzUmhibU5sWEc0Z0lDQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQnliMjkwU1VRZ1JFOU5JRWxFSUc5bUlIUm9aU0J5YjI5MElHNXZaR1V1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJueFNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1ZlNCMGNtRnVjMkZqZEdsdmJseHVJQ0FnS2lCQWNtVjBkWEp1SUhzL2MzUnlhVzVuZlNCU1pXNWtaWEpsWkNCdFlYSnJkWEFnZEc4Z1ltVWdhVzV6WlhKMFpXUWdhVzUwYnlCMGFHVWdSRTlOTGx4dUlDQWdLaUJBWm1sdVlXeGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQnRiM1Z1ZEVOdmJYQnZibVZ1ZERvZ1puVnVZM1JwYjI0b2FXNTBaWEp1WVd4SmJuTjBZVzVqWlN3Z2NtOXZkRWxFTENCMGNtRnVjMkZqZEdsdmJpd2dZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lIWmhjaUJ0WVhKcmRYQWdQU0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbTF2ZFc1MFEyOXRjRzl1Wlc1MEtISnZiM1JKUkN3Z2RISmhibk5oWTNScGIyNHNJR052Ym5SbGVIUXBPMXh1SUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lGSmxZV04wUld4bGJXVnVkRlpoYkdsa1lYUnZjaTVqYUdWamEwRnVaRmRoY201R2IzSk5kWFJoZEdWa1VISnZjSE1vWEc0Z0lDQWdJQ0FnSUdsdWRHVnlibUZzU1c1emRHRnVZMlV1WDJOMWNuSmxiblJGYkdWdFpXNTBYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNiaUFnSUNCMGNtRnVjMkZqZEdsdmJpNW5aWFJTWldGamRFMXZkVzUwVW1WaFpIa29LUzVsYm5GMVpYVmxLR0YwZEdGamFGSmxabk1zSUdsdWRHVnlibUZzU1c1emRHRnVZMlVwTzF4dUlDQWdJSEpsZEhWeWJpQnRZWEpyZFhBN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRkpsYkdWaGMyVnpJR0Z1ZVNCeVpYTnZkWEpqWlhNZ1lXeHNiMk5oZEdWa0lHSjVJR0J0YjNWdWRFTnZiWEJ2Ym1WdWRHQXVYRzRnSUNBcVhHNGdJQ0FxSUVCbWFXNWhiRnh1SUNBZ0tpQkFhVzUwWlhKdVlXeGNiaUFnSUNvdlhHNGdJSFZ1Ylc5MWJuUkRiMjF3YjI1bGJuUTZJR1oxYm1OMGFXOXVLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQlNaV0ZqZEZKbFppNWtaWFJoWTJoU1pXWnpLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXNJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYMk4xY25KbGJuUkZiR1Z0Wlc1MEtUdGNiaUFnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTG5WdWJXOTFiblJEYjIxd2IyNWxiblFvS1R0Y2JpQWdmU3hjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWWEJrWVhSbElHRWdZMjl0Y0c5dVpXNTBJSFZ6YVc1bklHRWdibVYzSUdWc1pXMWxiblF1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JEYjIxd2IyNWxiblI5SUdsdWRHVnlibUZzU1c1emRHRnVZMlZjYmlBZ0lDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUc1bGVIUkZiR1Z0Wlc1MFhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJR052Ym5SbGVIUmNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQnlaV05sYVhabFEyOXRjRzl1Wlc1ME9pQm1kVzVqZEdsdmJpaGNiaUFnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTENCdVpYaDBSV3hsYldWdWRDd2dkSEpoYm5OaFkzUnBiMjRzSUdOdmJuUmxlSFJjYmlBZ0tTQjdYRzRnSUNBZ2RtRnlJSEJ5WlhaRmJHVnRaVzUwSUQwZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZlkzVnljbVZ1ZEVWc1pXMWxiblE3WEc1Y2JpQWdJQ0JwWmlBb2JtVjRkRVZzWlcxbGJuUWdQVDA5SUhCeVpYWkZiR1Z0Wlc1MElDWW1JRzVsZUhSRmJHVnRaVzUwTGw5dmQyNWxjaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0F2THlCVGFXNWpaU0JsYkdWdFpXNTBjeUJoY21VZ2FXMXRkWFJoWW14bElHRm1kR1Z5SUhSb1pTQnZkMjVsY2lCcGN5QnlaVzVrWlhKbFpDeGNiaUFnSUNBZ0lDOHZJSGRsSUdOaGJpQmtieUJoSUdOb1pXRndJR2xrWlc1MGFYUjVJR052YlhCaGNtVWdhR1Z5WlNCMGJ5QmtaWFJsY20xcGJtVWdhV1lnZEdocGN5QnBjeUJoWEc0Z0lDQWdJQ0F2THlCemRYQmxjbVpzZFc5MWN5QnlaV052Ym1OcGJHVXVJRWwwSjNNZ2NHOXpjMmxpYkdVZ1ptOXlJSE4wWVhSbElIUnZJR0psSUcxMWRHRmliR1VnWW5WMElITjFZMmhjYmlBZ0lDQWdJQzh2SUdOb1lXNW5aU0J6YUc5MWJHUWdkSEpwWjJkbGNpQmhiaUIxY0dSaGRHVWdiMllnZEdobElHOTNibVZ5SUhkb2FXTm9JSGR2ZFd4a0lISmxZM0psWVhSbFhHNGdJQ0FnSUNBdkx5QjBhR1VnWld4bGJXVnVkQzRnVjJVZ1pYaHdiR2xqYVhSc2VTQmphR1ZqYXlCbWIzSWdkR2hsSUdWNGFYTjBaVzVqWlNCdlppQmhiaUJ2ZDI1bGNpQnphVzVqWlZ4dUlDQWdJQ0FnTHk4Z2FYUW5jeUJ3YjNOemFXSnNaU0JtYjNJZ1lXNGdaV3hsYldWdWRDQmpjbVZoZEdWa0lHOTFkSE5wWkdVZ1lTQmpiMjF3YjNOcGRHVWdkRzhnWW1WY2JpQWdJQ0FnSUM4dklHUmxaWEJzZVNCdGRYUmhkR1ZrSUdGdVpDQnlaWFZ6WldRdVhHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDQWdVbVZoWTNSRmJHVnRaVzUwVm1Gc2FXUmhkRzl5TG1Ob1pXTnJRVzVrVjJGeWJrWnZjazExZEdGMFpXUlFjbTl3Y3lodVpYaDBSV3hsYldWdWRDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJSEpsWm5ORGFHRnVaMlZrSUQwZ1VtVmhZM1JTWldZdWMyaHZkV3hrVlhCa1lYUmxVbVZtY3loY2JpQWdJQ0FnSUhCeVpYWkZiR1Z0Wlc1MExGeHVJQ0FnSUNBZ2JtVjRkRVZzWlcxbGJuUmNiaUFnSUNBcE8xeHVYRzRnSUNBZ2FXWWdLSEpsWm5ORGFHRnVaMlZrS1NCN1hHNGdJQ0FnSUNCU1pXRmpkRkpsWmk1a1pYUmhZMmhTWldaektHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVc0lIQnlaWFpGYkdWdFpXNTBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExuSmxZMlZwZG1WRGIyMXdiMjVsYm5Rb2JtVjRkRVZzWlcxbGJuUXNJSFJ5WVc1ellXTjBhVzl1TENCamIyNTBaWGgwS1R0Y2JseHVJQ0FnSUdsbUlDaHlaV1p6UTJoaGJtZGxaQ2tnZTF4dUlDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0dVoyVjBVbVZoWTNSTmIzVnVkRkpsWVdSNUtDa3VaVzV4ZFdWMVpTaGhkSFJoWTJoU1pXWnpMQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxLVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVac2RYTm9JR0Z1ZVNCa2FYSjBlU0JqYUdGdVoyVnpJR2x1SUdFZ1kyOXRjRzl1Wlc1MExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdlMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQnBiblJsY201aGJFbHVjM1JoYm1ObFhHNGdJQ0FxSUVCd1lYSmhiU0I3VW1WaFkzUlNaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZibjBnZEhKaGJuTmhZM1JwYjI1Y2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCd1pYSm1iM0p0VlhCa1lYUmxTV1pPWldObGMzTmhjbms2SUdaMWJtTjBhVzl1S0Z4dUlDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXNYRzRnSUNBZ2RISmhibk5oWTNScGIyNWNiaUFnS1NCN1hHNGdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzV3WlhKbWIzSnRWWEJrWVhSbFNXWk9aV05sYzNOaGNua29kSEpoYm5OaFkzUnBiMjRwTzF4dUlDQjlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdVbVZoWTNSU1pXTnZibU5wYkdWeU8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0UmVmXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0T3duZXJcIik7XG5cbnZhciBSZWFjdFJlZiA9IHt9O1xuXG5mdW5jdGlvbiBhdHRhY2hSZWYocmVmLCBjb21wb25lbnQsIG93bmVyKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5hZGRDb21wb25lbnRBc1JlZlRvKGNvbXBvbmVudCwgcmVmLCBvd25lcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoUmVmKHJlZiwgY29tcG9uZW50LCBvd25lcikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZihudWxsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5yZW1vdmVDb21wb25lbnRBc1JlZkZyb20oY29tcG9uZW50LCByZWYsIG93bmVyKTtcbiAgfVxufVxuXG5SZWFjdFJlZi5hdHRhY2hSZWZzID0gZnVuY3Rpb24oaW5zdGFuY2UsIGVsZW1lbnQpIHtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuICBpZiAocmVmICE9IG51bGwpIHtcbiAgICBhdHRhY2hSZWYocmVmLCBpbnN0YW5jZSwgZWxlbWVudC5fb3duZXIpO1xuICB9XG59O1xuXG5SZWFjdFJlZi5zaG91bGRVcGRhdGVSZWZzID0gZnVuY3Rpb24ocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KSB7XG4gIC8vIElmIGVpdGhlciB0aGUgb3duZXIgb3IgYSBgcmVmYCBoYXMgY2hhbmdlZCwgbWFrZSBzdXJlIHRoZSBuZXdlc3Qgb3duZXJcbiAgLy8gaGFzIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBgdGhpc2AsIGFuZCB0aGUgcHJldmlvdXMgb3duZXIgKGlmIGRpZmZlcmVudClcbiAgLy8gaGFzIGZvcmdvdHRlbiB0aGUgcmVmZXJlbmNlIHRvIGB0aGlzYC4gV2UgdXNlIHRoZSBlbGVtZW50IGluc3RlYWRcbiAgLy8gb2YgdGhlIHB1YmxpYyB0aGlzLnByb3BzIGJlY2F1c2UgdGhlIHBvc3QgcHJvY2Vzc2luZyBjYW5ub3QgZGV0ZXJtaW5lXG4gIC8vIGEgcmVmLiBUaGUgcmVmIGNvbmNlcHR1YWxseSBsaXZlcyBvbiB0aGUgZWxlbWVudC5cblxuICAvLyBUT0RPOiBTaG91bGQgdGhpcyBldmVuIGJlIHBvc3NpYmxlPyBUaGUgb3duZXIgY2Fubm90IGNoYW5nZSBiZWNhdXNlXG4gIC8vIGl0J3MgZm9yYmlkZGVuIGJ5IHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LiBUaGUgcmVmIGNhbiBjaGFuZ2VcbiAgLy8gaWYgeW91IHN3YXAgdGhlIGtleXMgb2YgYnV0IG5vdCB0aGUgcmVmcy4gUmVjb25zaWRlciB3aGVyZSB0aGlzIGNoZWNrXG4gIC8vIGlzIG1hZGUuIEl0IHByb2JhYmx5IGJlbG9uZ3Mgd2hlcmUgdGhlIGtleSBjaGVja2luZyBhbmRcbiAgLy8gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCBpcyBkb25lLlxuXG4gIHJldHVybiAoXG4gICAgbmV4dEVsZW1lbnQuX293bmVyICE9PSBwcmV2RWxlbWVudC5fb3duZXIgfHxcbiAgICBuZXh0RWxlbWVudC5yZWYgIT09IHByZXZFbGVtZW50LnJlZlxuICApO1xufTtcblxuUmVhY3RSZWYuZGV0YWNoUmVmcyA9IGZ1bmN0aW9uKGluc3RhbmNlLCBlbGVtZW50KSB7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjtcbiAgaWYgKHJlZiAhPSBudWxsKSB7XG4gICAgZGV0YWNoUmVmKHJlZiwgaW5zdGFuY2UsIGVsZW1lbnQuX293bmVyKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFJlZjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFJvb3RJbmRleFxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFJvb3RJbmRleEluamVjdGlvbiA9IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IF9jcmVhdGVSZWFjdFJvb3RJbmRleFxuICAgKi9cbiAgaW5qZWN0Q3JlYXRlUmVhY3RSb290SW5kZXg6IGZ1bmN0aW9uKF9jcmVhdGVSZWFjdFJvb3RJbmRleCkge1xuICAgIFJlYWN0Um9vdEluZGV4LmNyZWF0ZVJlYWN0Um9vdEluZGV4ID0gX2NyZWF0ZVJlYWN0Um9vdEluZGV4O1xuICB9XG59O1xuXG52YXIgUmVhY3RSb290SW5kZXggPSB7XG4gIGNyZWF0ZVJlYWN0Um9vdEluZGV4OiBudWxsLFxuICBpbmplY3Rpb246IFJlYWN0Um9vdEluZGV4SW5qZWN0aW9uXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Um9vdEluZGV4O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0SW5zdGFuY2VIYW5kbGVzID0gcmVxdWlyZShcIi4vUmVhY3RJbnN0YW5jZUhhbmRsZXNcIik7XG52YXIgUmVhY3RNYXJrdXBDaGVja3N1bSA9IHJlcXVpcmUoXCIuL1JlYWN0TWFya3VwQ2hlY2tzdW1cIik7XG52YXIgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbiA9XG4gIHJlcXVpcmUoXCIuL1JlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb25cIik7XG5cbnZhciBlbXB0eU9iamVjdCA9IHJlcXVpcmUoXCIuL2VtcHR5T2JqZWN0XCIpO1xudmFyIGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKFwiLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50XCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgSFRNTCBtYXJrdXBcbiAqL1xuZnVuY3Rpb24gcmVuZGVyVG9TdHJpbmcoZWxlbWVudCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSxcbiAgICAncmVuZGVyVG9TdHJpbmcoKTogWW91IG11c3QgcGFzcyBhIHZhbGlkIFJlYWN0RWxlbWVudC4nXG4gICkgOiBpbnZhcmlhbnQoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSk7XG5cbiAgdmFyIHRyYW5zYWN0aW9uO1xuICB0cnkge1xuICAgIHZhciBpZCA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmNyZWF0ZVJlYWN0Um9vdElEKCk7XG4gICAgdHJhbnNhY3Rpb24gPSBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLmdldFBvb2xlZChmYWxzZSk7XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ucGVyZm9ybShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQoZWxlbWVudCwgbnVsbCk7XG4gICAgICB2YXIgbWFya3VwID1cbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UubW91bnRDb21wb25lbnQoaWQsIHRyYW5zYWN0aW9uLCBlbXB0eU9iamVjdCk7XG4gICAgICByZXR1cm4gUmVhY3RNYXJrdXBDaGVja3N1bS5hZGRDaGVja3N1bVRvTWFya3VwKG1hcmt1cCk7XG4gICAgfSwgbnVsbCk7XG4gIH0gZmluYWxseSB7XG4gICAgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBIVE1MIG1hcmt1cCwgd2l0aG91dCB0aGUgZXh0cmEgUmVhY3QgSUQgYW5kIGNoZWNrc3VtXG4gKiAoZm9yIGdlbmVyYXRpbmcgc3RhdGljIHBhZ2VzKVxuICovXG5mdW5jdGlvbiByZW5kZXJUb1N0YXRpY01hcmt1cChlbGVtZW50KSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpLFxuICAgICdyZW5kZXJUb1N0YXRpY01hcmt1cCgpOiBZb3UgbXVzdCBwYXNzIGEgdmFsaWQgUmVhY3RFbGVtZW50LidcbiAgKSA6IGludmFyaWFudChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpKTtcblxuICB2YXIgdHJhbnNhY3Rpb247XG4gIHRyeSB7XG4gICAgdmFyIGlkID0gUmVhY3RJbnN0YW5jZUhhbmRsZXMuY3JlYXRlUmVhY3RSb290SUQoKTtcbiAgICB0cmFuc2FjdGlvbiA9IFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKHRydWUpO1xuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLnBlcmZvcm0oZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KGVsZW1lbnQsIG51bGwpO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudEluc3RhbmNlLm1vdW50Q29tcG9uZW50KGlkLCB0cmFuc2FjdGlvbiwgZW1wdHlPYmplY3QpO1xuICAgIH0sIG51bGwpO1xuICB9IGZpbmFsbHkge1xuICAgIFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlbmRlclRvU3RyaW5nOiByZW5kZXJUb1N0cmluZyxcbiAgcmVuZGVyVG9TdGF0aWNNYXJrdXA6IHJlbmRlclRvU3RhdGljTWFya3VwXG59O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VW1WaFkzUlRaWEoyWlhKU1pXNWtaWEpwYm1jdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFkSGx3WldOb1pXTnJjeUJ6ZEdGMGFXTXRiMjVzZVZ4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElGSmxZV04wVTJWeWRtVnlVbVZ1WkdWeWFXNW5YRzRnS2k5Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBTVzV6ZEdGdVkyVklZVzVrYkdWelhDSXBPMXh1ZG1GeUlGSmxZV04wVFdGeWEzVndRMmhsWTJ0emRXMGdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRTFoY210MWNFTm9aV05yYzNWdFhDSXBPMXh1ZG1GeUlGSmxZV04wVTJWeWRtVnlVbVZ1WkdWeWFXNW5WSEpoYm5OaFkzUnBiMjRnUFZ4dUlDQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1WjFSeVlXNXpZV04wYVc5dVhDSXBPMXh1WEc1MllYSWdaVzF3ZEhsUFltcGxZM1FnUFNCeVpYRjFhWEpsS0Z3aUxpOWxiWEIwZVU5aWFtVmpkRndpS1R0Y2JuWmhjaUJwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNXpkR0Z1ZEdsaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZEZ3aUtUdGNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNWNiaThxS2x4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVWc1pXMWxiblI5SUdWc1pXMWxiblJjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ2RHaGxJRWhVVFV3Z2JXRnlhM1Z3WEc0Z0tpOWNibVoxYm1OMGFXOXVJSEpsYm1SbGNsUnZVM1J5YVc1bktHVnNaVzFsYm5RcElIdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQlNaV0ZqZEVWc1pXMWxiblF1YVhOV1lXeHBaRVZzWlcxbGJuUW9aV3hsYldWdWRDa3NYRzRnSUNBZ0ozSmxibVJsY2xSdlUzUnlhVzVuS0NrNklGbHZkU0J0ZFhOMElIQmhjM01nWVNCMllXeHBaQ0JTWldGamRFVnNaVzFsYm5RdUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZV04wUld4bGJXVnVkQzVwYzFaaGJHbGtSV3hsYldWdWRDaGxiR1Z0Wlc1MEtTa3BPMXh1WEc0Z0lIWmhjaUIwY21GdWMyRmpkR2x2Ymp0Y2JpQWdkSEo1SUh0Y2JpQWdJQ0IyWVhJZ2FXUWdQU0JTWldGamRFbHVjM1JoYm1ObFNHRnVaR3hsY3k1amNtVmhkR1ZTWldGamRGSnZiM1JKUkNncE8xeHVJQ0FnSUhSeVlXNXpZV04wYVc5dUlEMGdVbVZoWTNSVFpYSjJaWEpTWlc1a1pYSnBibWRVY21GdWMyRmpkR2x2Ymk1blpYUlFiMjlzWldRb1ptRnNjMlVwTzF4dVhHNGdJQ0FnY21WMGRYSnVJSFJ5WVc1ellXTjBhVzl1TG5CbGNtWnZjbTBvWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNCMllYSWdZMjl0Y0c5dVpXNTBTVzV6ZEdGdVkyVWdQU0JwYm5OMFlXNTBhV0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBLR1ZzWlcxbGJuUXNJRzUxYkd3cE8xeHVJQ0FnSUNBZ2RtRnlJRzFoY210MWNDQTlYRzRnSUNBZ0lDQWdJR052YlhCdmJtVnVkRWx1YzNSaGJtTmxMbTF2ZFc1MFEyOXRjRzl1Wlc1MEtHbGtMQ0IwY21GdWMyRmpkR2x2Yml3Z1pXMXdkSGxQWW1wbFkzUXBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlGSmxZV04wVFdGeWEzVndRMmhsWTJ0emRXMHVZV1JrUTJobFkydHpkVzFVYjAxaGNtdDFjQ2h0WVhKcmRYQXBPMXh1SUNBZ0lIMHNJRzUxYkd3cE8xeHVJQ0I5SUdacGJtRnNiSGtnZTF4dUlDQWdJRkpsWVdOMFUyVnlkbVZ5VW1WdVpHVnlhVzVuVkhKaGJuTmhZM1JwYjI0dWNtVnNaV0Z6WlNoMGNtRnVjMkZqZEdsdmJpazdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlMUpsWVdOMFJXeGxiV1Z1ZEgwZ1pXeGxiV1Z1ZEZ4dUlDb2dRSEpsZEhWeWJpQjdjM1J5YVc1bmZTQjBhR1VnU0ZSTlRDQnRZWEpyZFhBc0lIZHBkR2h2ZFhRZ2RHaGxJR1Y0ZEhKaElGSmxZV04wSUVsRUlHRnVaQ0JqYUdWamEzTjFiVnh1SUNvZ0tHWnZjaUJuWlc1bGNtRjBhVzVuSUhOMFlYUnBZeUJ3WVdkbGN5bGNiaUFxTDF4dVpuVnVZM1JwYjI0Z2NtVnVaR1Z5Vkc5VGRHRjBhV05OWVhKcmRYQW9aV3hsYldWdWRDa2dlMXh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJRkpsWVdOMFJXeGxiV1Z1ZEM1cGMxWmhiR2xrUld4bGJXVnVkQ2hsYkdWdFpXNTBLU3hjYmlBZ0lDQW5jbVZ1WkdWeVZHOVRkR0YwYVdOTllYSnJkWEFvS1RvZ1dXOTFJRzExYzNRZ2NHRnpjeUJoSUhaaGJHbGtJRkpsWVdOMFJXeGxiV1Z1ZEM0blhHNGdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtHVnNaVzFsYm5RcEtTazdYRzVjYmlBZ2RtRnlJSFJ5WVc1ellXTjBhVzl1TzF4dUlDQjBjbmtnZTF4dUlDQWdJSFpoY2lCcFpDQTlJRkpsWVdOMFNXNXpkR0Z1WTJWSVlXNWtiR1Z6TG1OeVpXRjBaVkpsWVdOMFVtOXZkRWxFS0NrN1hHNGdJQ0FnZEhKaGJuTmhZM1JwYjI0Z1BTQlNaV0ZqZEZObGNuWmxjbEpsYm1SbGNtbHVaMVJ5WVc1ellXTjBhVzl1TG1kbGRGQnZiMnhsWkNoMGNuVmxLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQjBjbUZ1YzJGamRHbHZiaTV3WlhKbWIzSnRLR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnZG1GeUlHTnZiWEJ2Ym1WdWRFbHVjM1JoYm1ObElEMGdhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDaGxiR1Z0Wlc1MExDQnVkV3hzS1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqYjIxd2IyNWxiblJKYm5OMFlXNWpaUzV0YjNWdWRFTnZiWEJ2Ym1WdWRDaHBaQ3dnZEhKaGJuTmhZM1JwYjI0c0lHVnRjSFI1VDJKcVpXTjBLVHRjYmlBZ0lDQjlMQ0J1ZFd4c0tUdGNiaUFnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0JTWldGamRGTmxjblpsY2xKbGJtUmxjbWx1WjFSeVlXNXpZV04wYVc5dUxuSmxiR1ZoYzJVb2RISmhibk5oWTNScGIyNHBPMXh1SUNCOVhHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnZTF4dUlDQnlaVzVrWlhKVWIxTjBjbWx1WnpvZ2NtVnVaR1Z5Vkc5VGRISnBibWNzWEc0Z0lISmxibVJsY2xSdlUzUmhkR2xqVFdGeWEzVndPaUJ5Wlc1a1pYSlViMU4wWVhScFkwMWhjbXQxY0Z4dWZUdGNiaUpkZlE9PSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG52YXIgQ2FsbGJhY2tRdWV1ZSA9IHJlcXVpcmUoXCIuL0NhbGxiYWNrUXVldWVcIik7XG52YXIgUmVhY3RQdXRMaXN0ZW5lclF1ZXVlID0gcmVxdWlyZShcIi4vUmVhY3RQdXRMaXN0ZW5lclF1ZXVlXCIpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZShcIi4vVHJhbnNhY3Rpb25cIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xuXG4vKipcbiAqIFByb3ZpZGVzIGEgYENhbGxiYWNrUXVldWVgIHF1ZXVlIGZvciBjb2xsZWN0aW5nIGBvbkRPTVJlYWR5YCBjYWxsYmFja3NcbiAqIGR1cmluZyB0aGUgcGVyZm9ybWluZyBvZiB0aGUgdHJhbnNhY3Rpb24uXG4gKi9cbnZhciBPTl9ET01fUkVBRFlfUVVFVUVJTkcgPSB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgYG9uRE9NUmVhZHlgIHF1ZXVlLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkucmVzZXQoKTtcbiAgfSxcblxuICBjbG9zZTogZW1wdHlGdW5jdGlvblxufTtcblxudmFyIFBVVF9MSVNURU5FUl9RVUVVRUlORyA9IHtcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlLnJlc2V0KCk7XG4gIH0sXG5cbiAgY2xvc2U6IGVtcHR5RnVuY3Rpb25cbn07XG5cbi8qKlxuICogRXhlY3V0ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgYFRyYW5zYWN0aW9uYCBpbnN0YW5jZS4gQ29uc2lkZXIgdGhlc2UgYXNcbiAqIGJlaW5nIG1lbWJlciBtZXRob2RzLCBidXQgd2l0aCBhbiBpbXBsaWVkIG9yZGVyaW5nIHdoaWxlIGJlaW5nIGlzb2xhdGVkIGZyb21cbiAqIGVhY2ggb3RoZXIuXG4gKi9cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtcbiAgUFVUX0xJU1RFTkVSX1FVRVVFSU5HLFxuICBPTl9ET01fUkVBRFlfUVVFVUVJTkdcbl07XG5cbi8qKlxuICogQGNsYXNzIFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVuZGVyVG9TdGF0aWNNYXJrdXBcbiAqL1xuZnVuY3Rpb24gUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbihyZW5kZXJUb1N0YXRpY01hcmt1cCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG4gIHRoaXMucmVuZGVyVG9TdGF0aWNNYXJrdXAgPSByZW5kZXJUb1N0YXRpY01hcmt1cDtcbiAgdGhpcy5yZWFjdE1vdW50UmVhZHkgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZChudWxsKTtcbiAgdGhpcy5wdXRMaXN0ZW5lclF1ZXVlID0gUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLmdldFBvb2xlZCgpO1xufVxuXG52YXIgTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBAc2VlIFRyYW5zYWN0aW9uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAZmluYWxcbiAgICogQHJldHVybiB7YXJyYXl9IEVtcHR5IGxpc3Qgb2Ygb3BlcmF0aW9uIHdyYXAgcHJvY2VlZHVyZXMuXG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gVFJBTlNBQ1RJT05fV1JBUFBFUlM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge29iamVjdH0gVGhlIHF1ZXVlIHRvIGNvbGxlY3QgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcyB3aXRoLlxuICAgKi9cbiAgZ2V0UmVhY3RNb3VudFJlYWR5OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFjdE1vdW50UmVhZHk7XG4gIH0sXG5cbiAgZ2V0UHV0TGlzdGVuZXJRdWV1ZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucHV0TGlzdGVuZXJRdWV1ZTtcbiAgfSxcblxuICAvKipcbiAgICogYFBvb2xlZENsYXNzYCBsb29rcyBmb3IgdGhpcywgYW5kIHdpbGwgaW52b2tlIHRoaXMgYmVmb3JlIGFsbG93aW5nIHRoaXNcbiAgICogaW5zdGFuY2UgdG8gYmUgcmVzdXNlZC5cbiAgICovXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uKCkge1xuICAgIENhbGxiYWNrUXVldWUucmVsZWFzZSh0aGlzLnJlYWN0TW91bnRSZWFkeSk7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkgPSBudWxsO1xuXG4gICAgUmVhY3RQdXRMaXN0ZW5lclF1ZXVlLnJlbGVhc2UodGhpcy5wdXRMaXN0ZW5lclF1ZXVlKTtcbiAgICB0aGlzLnB1dExpc3RlbmVyUXVldWUgPSBudWxsO1xuICB9XG59O1xuXG5cbmFzc2lnbihcbiAgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbi5wcm90b3R5cGUsXG4gIFRyYW5zYWN0aW9uLk1peGluLFxuICBNaXhpblxuKTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb247XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RTdGF0ZVNldHRlcnNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFN0YXRlU2V0dGVycyA9IHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiwgYW5kIHVzZXMgdGhlIHJlc3VsdFxuICAgKiBvZiB0aGF0IHRvIHNldCB0aGUgY29tcG9uZW50J3Mgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb3NpdGVDb21wb25lbnR9IGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jUmV0dXJuaW5nU3RhdGUgUmV0dXJuZWQgY2FsbGJhY2sgdXNlcyB0aGlzIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgaG93IHRvIHVwZGF0ZSBzdGF0ZS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IGNhbGxiYWNrIHRoYXQgd2hlbiBpbnZva2VkIHVzZXMgZnVuY1JldHVybmluZ1N0YXRlIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVkIHRoZSBvYmplY3QgbGl0ZXJhbCB0byBzZXRTdGF0ZS5cbiAgICovXG4gIGNyZWF0ZVN0YXRlU2V0dGVyOiBmdW5jdGlvbihjb21wb25lbnQsIGZ1bmNSZXR1cm5pbmdTdGF0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICB2YXIgcGFydGlhbFN0YXRlID0gZnVuY1JldHVybmluZ1N0YXRlLmNhbGwoY29tcG9uZW50LCBhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgIGlmIChwYXJ0aWFsU3RhdGUpIHtcbiAgICAgICAgY29tcG9uZW50LnNldFN0YXRlKHBhcnRpYWxTdGF0ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhIHNpbmdsZS1hcmd1bWVudCBjYWxsYmFjayB0aGF0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSBhIHNpbmdsZVxuICAgKiBrZXkgaW4gdGhlIGNvbXBvbmVudCdzIHN0YXRlLlxuICAgKlxuICAgKiBOb3RlOiB0aGlzIGlzIG1lbW9pemVkIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBpdCBpbmV4cGVuc2l2ZSB0byBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50fSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGluIHRoZSBzdGF0ZSB0aGF0IHlvdSBzaG91bGQgdXBkYXRlLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gY2FsbGJhY2sgb2YgMSBhcmd1bWVudCB3aGljaCBjYWxscyBzZXRTdGF0ZSgpIHdpdGhcbiAgICogICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBrZXlOYW1lIGFuZCBjYWxsYmFjayBhcmd1bWVudC5cbiAgICovXG4gIGNyZWF0ZVN0YXRlS2V5U2V0dGVyOiBmdW5jdGlvbihjb21wb25lbnQsIGtleSkge1xuICAgIC8vIE1lbW9pemUgdGhlIHNldHRlcnMuXG4gICAgdmFyIGNhY2hlID0gY29tcG9uZW50Ll9fa2V5U2V0dGVycyB8fCAoY29tcG9uZW50Ll9fa2V5U2V0dGVycyA9IHt9KTtcbiAgICByZXR1cm4gY2FjaGVba2V5XSB8fCAoY2FjaGVba2V5XSA9IGNyZWF0ZVN0YXRlS2V5U2V0dGVyKGNvbXBvbmVudCwga2V5KSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlS2V5U2V0dGVyKGNvbXBvbmVudCwga2V5KSB7XG4gIC8vIFBhcnRpYWwgc3RhdGUgaXMgYWxsb2NhdGVkIG91dHNpZGUgb2YgdGhlIGZ1bmN0aW9uIGNsb3N1cmUgc28gaXQgY2FuIGJlXG4gIC8vIHJldXNlZCB3aXRoIGV2ZXJ5IGNhbGwsIGF2b2lkaW5nIG1lbW9yeSBhbGxvY2F0aW9uIHdoZW4gdGhpcyBmdW5jdGlvblxuICAvLyBpcyBjYWxsZWQuXG4gIHZhciBwYXJ0aWFsU3RhdGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0YXRlS2V5U2V0dGVyKHZhbHVlKSB7XG4gICAgcGFydGlhbFN0YXRlW2tleV0gPSB2YWx1ZTtcbiAgICBjb21wb25lbnQuc2V0U3RhdGUocGFydGlhbFN0YXRlKTtcbiAgfTtcbn1cblxuUmVhY3RTdGF0ZVNldHRlcnMuTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24sIGFuZCB1c2VzIHRoZSByZXN1bHRcbiAgICogb2YgdGhhdCB0byBzZXQgdGhlIGNvbXBvbmVudCdzIHN0YXRlLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgdGhlc2Ugc3RhdGVtZW50cyBhcmUgZXF1aXZhbGVudDpcbiAgICpcbiAgICogICB0aGlzLnNldFN0YXRlKHt4OiAxfSk7XG4gICAqICAgdGhpcy5jcmVhdGVTdGF0ZVNldHRlcihmdW5jdGlvbih4VmFsdWUpIHtcbiAgICogICAgIHJldHVybiB7eDogeFZhbHVlfTtcbiAgICogICB9KSgxKTtcbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuY1JldHVybmluZ1N0YXRlIFJldHVybmVkIGNhbGxiYWNrIHVzZXMgdGhpcyB0b1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIGhvdyB0byB1cGRhdGUgc3RhdGUuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBjYWxsYmFjayB0aGF0IHdoZW4gaW52b2tlZCB1c2VzIGZ1bmNSZXR1cm5pbmdTdGF0ZSB0b1xuICAgKiAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lZCB0aGUgb2JqZWN0IGxpdGVyYWwgdG8gc2V0U3RhdGUuXG4gICAqL1xuICBjcmVhdGVTdGF0ZVNldHRlcjogZnVuY3Rpb24oZnVuY1JldHVybmluZ1N0YXRlKSB7XG4gICAgcmV0dXJuIFJlYWN0U3RhdGVTZXR0ZXJzLmNyZWF0ZVN0YXRlU2V0dGVyKHRoaXMsIGZ1bmNSZXR1cm5pbmdTdGF0ZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzaW5nbGUtYXJndW1lbnQgY2FsbGJhY2sgdGhhdCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgYSBzaW5nbGVcbiAgICoga2V5IGluIHRoZSBjb21wb25lbnQncyBzdGF0ZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHRoZXNlIHN0YXRlbWVudHMgYXJlIGVxdWl2YWxlbnQ6XG4gICAqXG4gICAqICAgdGhpcy5zZXRTdGF0ZSh7eDogMX0pO1xuICAgKiAgIHRoaXMuY3JlYXRlU3RhdGVLZXlTZXR0ZXIoJ3gnKSgxKTtcbiAgICpcbiAgICogTm90ZTogdGhpcyBpcyBtZW1vaXplZCBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgaXQgaW5leHBlbnNpdmUgdG8gY2FsbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGluIHRoZSBzdGF0ZSB0aGF0IHlvdSBzaG91bGQgdXBkYXRlLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gY2FsbGJhY2sgb2YgMSBhcmd1bWVudCB3aGljaCBjYWxscyBzZXRTdGF0ZSgpIHdpdGhcbiAgICogICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aWRlZCBrZXlOYW1lIGFuZCBjYWxsYmFjayBhcmd1bWVudC5cbiAgICovXG4gIGNyZWF0ZVN0YXRlS2V5U2V0dGVyOiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gUmVhY3RTdGF0ZVNldHRlcnMuY3JlYXRlU3RhdGVLZXlTZXR0ZXIodGhpcywga2V5KTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFN0YXRlU2V0dGVycztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFRlc3RVdGlsc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKFwiLi9FdmVudFBsdWdpbkh1YlwiKTtcbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZShcIi4vRXZlbnRQcm9wYWdhdG9yc1wiKTtcbnZhciBSZWFjdCA9IHJlcXVpcmUoXCIuL1JlYWN0XCIpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RWxlbWVudFwiKTtcbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbXB0eUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJcIik7XG52YXIgUmVhY3RDb21wb3NpdGVDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudFwiKTtcbnZhciBSZWFjdEluc3RhbmNlSGFuZGxlcyA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VIYW5kbGVzXCIpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlTWFwXCIpO1xudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKFwiLi9SZWFjdE1vdW50XCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBlbXB0eU9iamVjdCA9IHJlcXVpcmUoXCIuL2VtcHR5T2JqZWN0XCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbmZ1bmN0aW9uIEV2ZW50KHN1ZmZpeCkge31cblxuLyoqXG4gKiBAY2xhc3MgUmVhY3RUZXN0VXRpbHNcbiAqL1xuXG4vKipcbiAqIFRvZG86IFN1cHBvcnQgdGhlIGVudGlyZSBET00uc2NyeSBxdWVyeSBzeW50YXguIEZvciBub3csIHRoZXNlIHNpbXBsZVxuICogdXRpbGl0aWVzIHdpbGwgc3VmZmljZSBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqIEBsZW5kcyBSZWFjdFRlc3RVdGlsc1xuICovXG52YXIgUmVhY3RUZXN0VXRpbHMgPSB7XG4gIHJlbmRlckludG9Eb2N1bWVudDogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgLy8gTm9uZSBvZiBvdXIgdGVzdHMgYWN0dWFsbHkgcmVxdWlyZSBhdHRhY2hpbmcgdGhlIGNvbnRhaW5lciB0byB0aGVcbiAgICAvLyBET00sIGFuZCBkb2luZyBzbyBjcmVhdGVzIGEgbWVzcyB0aGF0IHdlIHJlbHkgb24gdGVzdCBpc29sYXRpb24gdG9cbiAgICAvLyBjbGVhbiB1cCwgc28gd2UncmUgZ29pbmcgdG8gc3RvcCBob25vcmluZyB0aGUgbmFtZSBvZiB0aGlzIG1ldGhvZFxuICAgIC8vIChhbmQgcHJvYmFibHkgcmVuYW1lIGl0IGV2ZW50dWFsbHkpIGlmIG5vIHByb2JsZW1zIGFyaXNlLlxuICAgIC8vIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChkaXYpO1xuICAgIHJldHVybiBSZWFjdC5yZW5kZXIoaW5zdGFuY2UsIGRpdik7XG4gIH0sXG5cbiAgaXNFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KTtcbiAgfSxcblxuICBpc0VsZW1lbnRPZlR5cGU6IGZ1bmN0aW9uKGluc3QsIGNvbnZlbmllbmNlQ29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gKFxuICAgICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGluc3QpICYmXG4gICAgICBpbnN0LnR5cGUgPT09IGNvbnZlbmllbmNlQ29uc3RydWN0b3JcbiAgICApO1xuICB9LFxuXG4gIGlzRE9NQ29tcG9uZW50OiBmdW5jdGlvbihpbnN0KSB7XG4gICAgLy8gVE9ETzogRml4IHRoaXMgaGV1cmlzdGljLiBJdCdzIGp1c3QgaGVyZSBiZWNhdXNlIGNvbXBvc2l0ZXMgY2FuIGN1cnJlbnRseVxuICAgIC8vIHByZXRlbmQgdG8gYmUgRE9NIGNvbXBvbmVudHMuXG4gICAgcmV0dXJuICEhKGluc3QgJiYgaW5zdC50YWdOYW1lICYmIGluc3QuZ2V0RE9NTm9kZSk7XG4gIH0sXG5cbiAgaXNET01Db21wb25lbnRFbGVtZW50OiBmdW5jdGlvbihpbnN0KSB7XG4gICAgcmV0dXJuICEhKGluc3QgJiZcbiAgICAgICAgICAgICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGluc3QpICYmXG4gICAgICAgICAgICAgICEhaW5zdC50YWdOYW1lKTtcbiAgfSxcblxuICBpc0NvbXBvc2l0ZUNvbXBvbmVudDogZnVuY3Rpb24oaW5zdCkge1xuICAgIHJldHVybiB0eXBlb2YgaW5zdC5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgdHlwZW9mIGluc3Quc2V0U3RhdGUgPT09ICdmdW5jdGlvbic7XG4gIH0sXG5cbiAgaXNDb21wb3NpdGVDb21wb25lbnRXaXRoVHlwZTogZnVuY3Rpb24oaW5zdCwgdHlwZSkge1xuICAgIHJldHVybiAhIShSZWFjdFRlc3RVdGlscy5pc0NvbXBvc2l0ZUNvbXBvbmVudChpbnN0KSAmJlxuICAgICAgICAgICAgIChpbnN0LmNvbnN0cnVjdG9yID09PSB0eXBlKSk7XG4gIH0sXG5cbiAgaXNDb21wb3NpdGVDb21wb25lbnRFbGVtZW50OiBmdW5jdGlvbihpbnN0KSB7XG4gICAgaWYgKCFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoaW5zdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gV2UgY2hlY2sgdGhlIHByb3RvdHlwZSBvZiB0aGUgdHlwZSB0aGF0IHdpbGwgZ2V0IG1vdW50ZWQsIG5vdCB0aGVcbiAgICAvLyBpbnN0YW5jZSBpdHNlbGYuIFRoaXMgaXMgYSBmdXR1cmUgcHJvb2Ygd2F5IG9mIGR1Y2sgdHlwaW5nLlxuICAgIHZhciBwcm90b3R5cGUgPSBpbnN0LnR5cGUucHJvdG90eXBlO1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgcHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIHByb3RvdHlwZS5zZXRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICk7XG4gIH0sXG5cbiAgaXNDb21wb3NpdGVDb21wb25lbnRFbGVtZW50V2l0aFR5cGU6IGZ1bmN0aW9uKGluc3QsIHR5cGUpIHtcbiAgICByZXR1cm4gISEoUmVhY3RUZXN0VXRpbHMuaXNDb21wb3NpdGVDb21wb25lbnRFbGVtZW50KGluc3QpICYmXG4gICAgICAgICAgICAgKGluc3QuY29uc3RydWN0b3IgPT09IHR5cGUpKTtcbiAgfSxcblxuICBnZXRSZW5kZXJlZENoaWxkT2ZDb21wb3NpdGVDb21wb25lbnQ6IGZ1bmN0aW9uKGluc3QpIHtcbiAgICBpZiAoIVJlYWN0VGVzdFV0aWxzLmlzQ29tcG9zaXRlQ29tcG9uZW50KGluc3QpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldChpbnN0KTtcbiAgICByZXR1cm4gaW50ZXJuYWxJbnN0YW5jZS5fcmVuZGVyZWRDb21wb25lbnQuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgfSxcblxuICBmaW5kQWxsSW5SZW5kZXJlZFRyZWU6IGZ1bmN0aW9uKGluc3QsIHRlc3QpIHtcbiAgICBpZiAoIWluc3QpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdmFyIHJldCA9IHRlc3QoaW5zdCkgPyBbaW5zdF0gOiBbXTtcbiAgICBpZiAoUmVhY3RUZXN0VXRpbHMuaXNET01Db21wb25lbnQoaW5zdCkpIHtcbiAgICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQoaW5zdCk7XG4gICAgICB2YXIgcmVuZGVyZWRDaGlsZHJlbiA9IGludGVybmFsSW5zdGFuY2VcbiAgICAgICAgLl9yZW5kZXJlZENvbXBvbmVudFxuICAgICAgICAuX3JlbmRlcmVkQ2hpbGRyZW47XG4gICAgICB2YXIga2V5O1xuICAgICAgZm9yIChrZXkgaW4gcmVuZGVyZWRDaGlsZHJlbikge1xuICAgICAgICBpZiAoIXJlbmRlcmVkQ2hpbGRyZW4uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVuZGVyZWRDaGlsZHJlbltrZXldLmdldFB1YmxpY0luc3RhbmNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0ID0gcmV0LmNvbmNhdChcbiAgICAgICAgICBSZWFjdFRlc3RVdGlscy5maW5kQWxsSW5SZW5kZXJlZFRyZWUoXG4gICAgICAgICAgICByZW5kZXJlZENoaWxkcmVuW2tleV0uZ2V0UHVibGljSW5zdGFuY2UoKSxcbiAgICAgICAgICAgIHRlc3RcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChSZWFjdFRlc3RVdGlscy5pc0NvbXBvc2l0ZUNvbXBvbmVudChpbnN0KSkge1xuICAgICAgcmV0ID0gcmV0LmNvbmNhdChcbiAgICAgICAgUmVhY3RUZXN0VXRpbHMuZmluZEFsbEluUmVuZGVyZWRUcmVlKFxuICAgICAgICAgIFJlYWN0VGVzdFV0aWxzLmdldFJlbmRlcmVkQ2hpbGRPZkNvbXBvc2l0ZUNvbXBvbmVudChpbnN0KSxcbiAgICAgICAgICB0ZXN0XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZpbmRzIGFsbCBpbnN0YW5jZSBvZiBjb21wb25lbnRzIGluIHRoZSByZW5kZXJlZCB0cmVlIHRoYXQgYXJlIERPTVxuICAgKiBjb21wb25lbnRzIHdpdGggdGhlIGNsYXNzIG5hbWUgbWF0Y2hpbmcgYGNsYXNzTmFtZWAuXG4gICAqIEByZXR1cm4gYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzLlxuICAgKi9cbiAgc2NyeVJlbmRlcmVkRE9NQ29tcG9uZW50c1dpdGhDbGFzczogZnVuY3Rpb24ocm9vdCwgY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIFJlYWN0VGVzdFV0aWxzLmZpbmRBbGxJblJlbmRlcmVkVHJlZShyb290LCBmdW5jdGlvbihpbnN0KSB7XG4gICAgICB2YXIgaW5zdENsYXNzTmFtZSA9IGluc3QucHJvcHMuY2xhc3NOYW1lO1xuICAgICAgcmV0dXJuIFJlYWN0VGVzdFV0aWxzLmlzRE9NQ29tcG9uZW50KGluc3QpICYmIChcbiAgICAgICAgKGluc3RDbGFzc05hbWUgJiYgKCcgJyArIGluc3RDbGFzc05hbWUgKyAnICcpLmluZGV4T2YoJyAnICsgY2xhc3NOYW1lICsgJyAnKSAhPT0gLTEpXG4gICAgICApO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMaWtlIHNjcnlSZW5kZXJlZERPTUNvbXBvbmVudHNXaXRoQ2xhc3MgYnV0IGV4cGVjdHMgdGhlcmUgdG8gYmUgb25lIHJlc3VsdCxcbiAgICogYW5kIHJldHVybnMgdGhhdCBvbmUgcmVzdWx0LCBvciB0aHJvd3MgZXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFueSBvdGhlclxuICAgKiBudW1iZXIgb2YgbWF0Y2hlcyBiZXNpZGVzIG9uZS5cbiAgICogQHJldHVybiB7IVJlYWN0RE9NQ29tcG9uZW50fSBUaGUgb25lIG1hdGNoLlxuICAgKi9cbiAgZmluZFJlbmRlcmVkRE9NQ29tcG9uZW50V2l0aENsYXNzOiBmdW5jdGlvbihyb290LCBjbGFzc05hbWUpIHtcbiAgICB2YXIgYWxsID1cbiAgICAgIFJlYWN0VGVzdFV0aWxzLnNjcnlSZW5kZXJlZERPTUNvbXBvbmVudHNXaXRoQ2xhc3Mocm9vdCwgY2xhc3NOYW1lKTtcbiAgICBpZiAoYWxsLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IGZpbmQgZXhhY3RseSBvbmUgbWF0Y2ggJyArXG4gICAgICAgICcoZm91bmQ6ICcgKyBhbGwubGVuZ3RoICsgJykgZm9yIGNsYXNzOicgKyBjbGFzc05hbWVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhbGxbMF07XG4gIH0sXG5cblxuICAvKipcbiAgICogRmluZHMgYWxsIGluc3RhbmNlIG9mIGNvbXBvbmVudHMgaW4gdGhlIHJlbmRlcmVkIHRyZWUgdGhhdCBhcmUgRE9NXG4gICAqIGNvbXBvbmVudHMgd2l0aCB0aGUgdGFnIG5hbWUgbWF0Y2hpbmcgYHRhZ05hbWVgLlxuICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlcy5cbiAgICovXG4gIHNjcnlSZW5kZXJlZERPTUNvbXBvbmVudHNXaXRoVGFnOiBmdW5jdGlvbihyb290LCB0YWdOYW1lKSB7XG4gICAgcmV0dXJuIFJlYWN0VGVzdFV0aWxzLmZpbmRBbGxJblJlbmRlcmVkVHJlZShyb290LCBmdW5jdGlvbihpbnN0KSB7XG4gICAgICByZXR1cm4gUmVhY3RUZXN0VXRpbHMuaXNET01Db21wb25lbnQoaW5zdCkgJiZcbiAgICAgICAgICAgIGluc3QudGFnTmFtZSA9PT0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMaWtlIHNjcnlSZW5kZXJlZERPTUNvbXBvbmVudHNXaXRoVGFnIGJ1dCBleHBlY3RzIHRoZXJlIHRvIGJlIG9uZSByZXN1bHQsXG4gICAqIGFuZCByZXR1cm5zIHRoYXQgb25lIHJlc3VsdCwgb3IgdGhyb3dzIGV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhbnkgb3RoZXJcbiAgICogbnVtYmVyIG9mIG1hdGNoZXMgYmVzaWRlcyBvbmUuXG4gICAqIEByZXR1cm4geyFSZWFjdERPTUNvbXBvbmVudH0gVGhlIG9uZSBtYXRjaC5cbiAgICovXG4gIGZpbmRSZW5kZXJlZERPTUNvbXBvbmVudFdpdGhUYWc6IGZ1bmN0aW9uKHJvb3QsIHRhZ05hbWUpIHtcbiAgICB2YXIgYWxsID0gUmVhY3RUZXN0VXRpbHMuc2NyeVJlbmRlcmVkRE9NQ29tcG9uZW50c1dpdGhUYWcocm9vdCwgdGFnTmFtZSk7XG4gICAgaWYgKGFsbC5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBmaW5kIGV4YWN0bHkgb25lIG1hdGNoIGZvciB0YWc6JyArIHRhZ05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsWzBdO1xuICB9LFxuXG5cbiAgLyoqXG4gICAqIEZpbmRzIGFsbCBpbnN0YW5jZXMgb2YgY29tcG9uZW50cyB3aXRoIHR5cGUgZXF1YWwgdG8gYGNvbXBvbmVudFR5cGVgLlxuICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlcy5cbiAgICovXG4gIHNjcnlSZW5kZXJlZENvbXBvbmVudHNXaXRoVHlwZTogZnVuY3Rpb24ocm9vdCwgY29tcG9uZW50VHlwZSkge1xuICAgIHJldHVybiBSZWFjdFRlc3RVdGlscy5maW5kQWxsSW5SZW5kZXJlZFRyZWUocm9vdCwgZnVuY3Rpb24oaW5zdCkge1xuICAgICAgcmV0dXJuIFJlYWN0VGVzdFV0aWxzLmlzQ29tcG9zaXRlQ29tcG9uZW50V2l0aFR5cGUoXG4gICAgICAgIGluc3QsXG4gICAgICAgIGNvbXBvbmVudFR5cGVcbiAgICAgICk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNhbWUgYXMgYHNjcnlSZW5kZXJlZENvbXBvbmVudHNXaXRoVHlwZWAgYnV0IGV4cGVjdHMgdGhlcmUgdG8gYmUgb25lIHJlc3VsdFxuICAgKiBhbmQgcmV0dXJucyB0aGF0IG9uZSByZXN1bHQsIG9yIHRocm93cyBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW55IG90aGVyXG4gICAqIG51bWJlciBvZiBtYXRjaGVzIGJlc2lkZXMgb25lLlxuICAgKiBAcmV0dXJuIHshUmVhY3RDb21wb25lbnR9IFRoZSBvbmUgbWF0Y2guXG4gICAqL1xuICBmaW5kUmVuZGVyZWRDb21wb25lbnRXaXRoVHlwZTogZnVuY3Rpb24ocm9vdCwgY29tcG9uZW50VHlwZSkge1xuICAgIHZhciBhbGwgPSBSZWFjdFRlc3RVdGlscy5zY3J5UmVuZGVyZWRDb21wb25lbnRzV2l0aFR5cGUoXG4gICAgICByb290LFxuICAgICAgY29tcG9uZW50VHlwZVxuICAgICk7XG4gICAgaWYgKGFsbC5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0RpZCBub3QgZmluZCBleGFjdGx5IG9uZSBtYXRjaCBmb3IgY29tcG9uZW50VHlwZTonICsgY29tcG9uZW50VHlwZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbFswXTtcbiAgfSxcblxuICAvKipcbiAgICogUGFzcyBhIG1vY2tlZCBjb21wb25lbnQgbW9kdWxlIHRvIHRoaXMgbWV0aG9kIHRvIGF1Z21lbnQgaXQgd2l0aFxuICAgKiB1c2VmdWwgbWV0aG9kcyB0aGF0IGFsbG93IGl0IHRvIGJlIHVzZWQgYXMgYSBkdW1teSBSZWFjdCBjb21wb25lbnQuXG4gICAqIEluc3RlYWQgb2YgcmVuZGVyaW5nIGFzIHVzdWFsLCB0aGUgY29tcG9uZW50IHdpbGwgYmVjb21lIGEgc2ltcGxlXG4gICAqIDxkaXY+IGNvbnRhaW5pbmcgYW55IHByb3ZpZGVkIGNoaWxkcmVuLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlIHRoZSBtb2NrIGZ1bmN0aW9uIG9iamVjdCBleHBvcnRlZCBmcm9tIGFcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgdGhhdCBkZWZpbmVzIHRoZSBjb21wb25lbnQgdG8gYmUgbW9ja2VkXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gbW9ja1RhZ05hbWUgb3B0aW9uYWwgZHVtbXkgcm9vdCB0YWcgbmFtZSB0byByZXR1cm5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHJlbmRlciBtZXRob2QgKG92ZXJyaWRlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5tb2NrVGFnTmFtZSBpZiBwcm92aWRlZClcbiAgICogQHJldHVybiB7b2JqZWN0fSB0aGUgUmVhY3RUZXN0VXRpbHMgb2JqZWN0IChmb3IgY2hhaW5pbmcpXG4gICAqL1xuICBtb2NrQ29tcG9uZW50OiBmdW5jdGlvbihtb2R1bGUsIG1vY2tUYWdOYW1lKSB7XG4gICAgbW9ja1RhZ05hbWUgPSBtb2NrVGFnTmFtZSB8fCBtb2R1bGUubW9ja1RhZ05hbWUgfHwgXCJkaXZcIjtcblxuICAgIG1vZHVsZS5wcm90b3R5cGUucmVuZGVyLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBtb2NrVGFnTmFtZSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTaW11bGF0ZXMgYSB0b3AgbGV2ZWwgZXZlbnQgYmVpbmcgZGlzcGF0Y2hlZCBmcm9tIGEgcmF3IGV2ZW50IHRoYXQgb2NjdXJlZFxuICAgKiBvbiBhbiBgRWxlbWVudGAgbm9kZS5cbiAgICogQHBhcmFtIHRvcExldmVsVHlwZSB7T2JqZWN0fSBBIHR5cGUgZnJvbSBgRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlc2BcbiAgICogQHBhcmFtIHshRWxlbWVudH0gbm9kZSBUaGUgZG9tIHRvIHNpbXVsYXRlIGFuIGV2ZW50IG9jY3VycmluZyBvbi5cbiAgICogQHBhcmFtIHs/RXZlbnR9IGZha2VOYXRpdmVFdmVudCBGYWtlIG5hdGl2ZSBldmVudCB0byB1c2UgaW4gU3ludGhldGljRXZlbnQuXG4gICAqL1xuICBzaW11bGF0ZU5hdGl2ZUV2ZW50T25Ob2RlOiBmdW5jdGlvbih0b3BMZXZlbFR5cGUsIG5vZGUsIGZha2VOYXRpdmVFdmVudCkge1xuICAgIGZha2VOYXRpdmVFdmVudC50YXJnZXQgPSBub2RlO1xuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIuZGlzcGF0Y2hFdmVudChcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIGZha2VOYXRpdmVFdmVudFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNpbXVsYXRlcyBhIHRvcCBsZXZlbCBldmVudCBiZWluZyBkaXNwYXRjaGVkIGZyb20gYSByYXcgZXZlbnQgdGhhdCBvY2N1cmVkXG4gICAqIG9uIHRoZSBgUmVhY3RET01Db21wb25lbnRgIGBjb21wYC5cbiAgICogQHBhcmFtIHRvcExldmVsVHlwZSB7T2JqZWN0fSBBIHR5cGUgZnJvbSBgRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlc2AuXG4gICAqIEBwYXJhbSBjb21wIHshUmVhY3RET01Db21wb25lbnR9XG4gICAqIEBwYXJhbSB7P0V2ZW50fSBmYWtlTmF0aXZlRXZlbnQgRmFrZSBuYXRpdmUgZXZlbnQgdG8gdXNlIGluIFN5bnRoZXRpY0V2ZW50LlxuICAgKi9cbiAgc2ltdWxhdGVOYXRpdmVFdmVudE9uRE9NQ29tcG9uZW50OiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIGNvbXAsXG4gICAgICBmYWtlTmF0aXZlRXZlbnQpIHtcbiAgICBSZWFjdFRlc3RVdGlscy5zaW11bGF0ZU5hdGl2ZUV2ZW50T25Ob2RlKFxuICAgICAgdG9wTGV2ZWxUeXBlLFxuICAgICAgY29tcC5nZXRET01Ob2RlKCksXG4gICAgICBmYWtlTmF0aXZlRXZlbnRcbiAgICApO1xuICB9LFxuXG4gIG5hdGl2ZVRvdWNoRGF0YTogZnVuY3Rpb24oeCwgeSkge1xuICAgIHJldHVybiB7XG4gICAgICB0b3VjaGVzOiBbXG4gICAgICAgIHtwYWdlWDogeCwgcGFnZVk6IHl9XG4gICAgICBdXG4gICAgfTtcbiAgfSxcblxuICBjcmVhdGVSZW5kZXJlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFjdFNoYWxsb3dSZW5kZXJlcigpO1xuICB9LFxuXG4gIFNpbXVsYXRlOiBudWxsLFxuICBTaW11bGF0ZU5hdGl2ZToge31cbn07XG5cbi8qKlxuICogQGNsYXNzIFJlYWN0U2hhbGxvd1JlbmRlcmVyXG4gKi9cbnZhciBSZWFjdFNoYWxsb3dSZW5kZXJlciA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9pbnN0YW5jZSA9IG51bGw7XG59O1xuXG5SZWFjdFNoYWxsb3dSZW5kZXJlci5wcm90b3R5cGUuZ2V0UmVuZGVyT3V0cHV0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAoXG4gICAgKHRoaXMuX2luc3RhbmNlICYmIHRoaXMuX2luc3RhbmNlLl9yZW5kZXJlZENvbXBvbmVudCAmJlxuICAgICB0aGlzLl9pbnN0YW5jZS5fcmVuZGVyZWRDb21wb25lbnQuX3JlbmRlcmVkT3V0cHV0KVxuICAgIHx8IG51bGxcbiAgKTtcbn07XG5cbnZhciBOb29wSW50ZXJuYWxDb21wb25lbnQgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gIHRoaXMuX3JlbmRlcmVkT3V0cHV0ID0gZWxlbWVudDtcbiAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IGZhbHNlID9cbiAgICBSZWFjdEVtcHR5Q29tcG9uZW50LmVtcHR5RWxlbWVudCA6XG4gICAgZWxlbWVudDtcbn07XG5cbk5vb3BJbnRlcm5hbENvbXBvbmVudC5wcm90b3R5cGUgPSB7XG5cbiAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uKCkge1xuICB9LFxuXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICB0aGlzLl9yZW5kZXJlZE91dHB1dCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IGZhbHNlID9cbiAgICAgIFJlYWN0RW1wdHlDb21wb25lbnQuZW1wdHlFbGVtZW50IDpcbiAgICAgIGVsZW1lbnQ7XG4gIH0sXG5cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24oKSB7XG4gIH1cblxufTtcblxudmFyIFNoYWxsb3dDb21wb25lbnRXcmFwcGVyID0gZnVuY3Rpb24oKSB7IH07XG5hc3NpZ24oXG4gIFNoYWxsb3dDb21wb25lbnRXcmFwcGVyLnByb3RvdHlwZSxcbiAgUmVhY3RDb21wb3NpdGVDb21wb25lbnQuTWl4aW4sIHtcbiAgICBfaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG5ldyBOb29wSW50ZXJuYWxDb21wb25lbnQoZWxlbWVudCk7XG4gICAgfSxcbiAgICBfcmVwbGFjZU5vZGVXaXRoTWFya3VwQnlJRDogZnVuY3Rpb24oKSB7fSxcbiAgICBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50OlxuICAgICAgUmVhY3RDb21wb3NpdGVDb21wb25lbnQuTWl4aW4uXG4gICAgICAgIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHRcbiAgfVxuKTtcblxuUmVhY3RTaGFsbG93UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRleHQpIHtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgY29udGV4dCA9IGVtcHR5T2JqZWN0O1xuICB9XG4gIHZhciB0cmFuc2FjdGlvbiA9IFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZCgpO1xuICB0aGlzLl9yZW5kZXIoZWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbn07XG5cblJlYWN0U2hhbGxvd1JlbmRlcmVyLnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9pbnN0YW5jZSkge1xuICAgIHRoaXMuX2luc3RhbmNlLnVubW91bnRDb21wb25lbnQoKTtcbiAgfVxufTtcblxuUmVhY3RTaGFsbG93UmVuZGVyZXIucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbihlbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICBpZiAoIXRoaXMuX2luc3RhbmNlKSB7XG4gICAgdmFyIHJvb3RJRCA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLmNyZWF0ZVJlYWN0Um9vdElEKCk7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IFNoYWxsb3dDb21wb25lbnRXcmFwcGVyKGVsZW1lbnQudHlwZSk7XG4gICAgaW5zdGFuY2UuY29uc3RydWN0KGVsZW1lbnQpO1xuXG4gICAgaW5zdGFuY2UubW91bnRDb21wb25lbnQocm9vdElELCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG5cbiAgICB0aGlzLl9pbnN0YW5jZSA9IGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2luc3RhbmNlLnJlY2VpdmVDb21wb25lbnQoZWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4cG9ydHM6XG4gKlxuICogLSBgUmVhY3RUZXN0VXRpbHMuU2ltdWxhdGUuY2xpY2soRWxlbWVudC9SZWFjdERPTUNvbXBvbmVudClgXG4gKiAtIGBSZWFjdFRlc3RVdGlscy5TaW11bGF0ZS5tb3VzZU1vdmUoRWxlbWVudC9SZWFjdERPTUNvbXBvbmVudClgXG4gKiAtIGBSZWFjdFRlc3RVdGlscy5TaW11bGF0ZS5jaGFuZ2UoRWxlbWVudC9SZWFjdERPTUNvbXBvbmVudClgXG4gKiAtIC4uLiAoQWxsIGtleXMgZnJvbSBldmVudCBwbHVnaW4gYGV2ZW50VHlwZXNgIG9iamVjdHMpXG4gKi9cbmZ1bmN0aW9uIG1ha2VTaW11bGF0b3IoZXZlbnRUeXBlKSB7XG4gIHJldHVybiBmdW5jdGlvbihkb21Db21wb25lbnRPck5vZGUsIGV2ZW50RGF0YSkge1xuICAgIHZhciBub2RlO1xuICAgIGlmIChSZWFjdFRlc3RVdGlscy5pc0RPTUNvbXBvbmVudChkb21Db21wb25lbnRPck5vZGUpKSB7XG4gICAgICBub2RlID0gZG9tQ29tcG9uZW50T3JOb2RlLmdldERPTU5vZGUoKTtcbiAgICB9IGVsc2UgaWYgKGRvbUNvbXBvbmVudE9yTm9kZS50YWdOYW1lKSB7XG4gICAgICBub2RlID0gZG9tQ29tcG9uZW50T3JOb2RlO1xuICAgIH1cblxuICAgIHZhciBmYWtlTmF0aXZlRXZlbnQgPSBuZXcgRXZlbnQoKTtcbiAgICBmYWtlTmF0aXZlRXZlbnQudGFyZ2V0ID0gbm9kZTtcbiAgICAvLyBXZSBkb24ndCB1c2UgU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkIGluIG9yZGVyIHRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0XG4gICAgLy8gcHJvcGVybHkgZGVzdHJveWluZyBhbnkgcHJvcGVydGllcyBhc3NpZ25lZCBmcm9tIGBldmVudERhdGFgIHVwb24gcmVsZWFzZVxuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudChcbiAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3NbZXZlbnRUeXBlXSxcbiAgICAgIFJlYWN0TW91bnQuZ2V0SUQobm9kZSksXG4gICAgICBmYWtlTmF0aXZlRXZlbnRcbiAgICApO1xuICAgIGFzc2lnbihldmVudCwgZXZlbnREYXRhKTtcbiAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuXG4gICAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uKCkge1xuICAgICAgRXZlbnRQbHVnaW5IdWIuZW5xdWV1ZUV2ZW50cyhldmVudCk7XG4gICAgICBFdmVudFBsdWdpbkh1Yi5wcm9jZXNzRXZlbnRRdWV1ZSgpO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFNpbXVsYXRvcnMoKSB7XG4gIFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlID0ge307XG5cbiAgdmFyIGV2ZW50VHlwZTtcbiAgZm9yIChldmVudFR5cGUgaW4gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncykge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7IUVsZW1lbnQgfHwgUmVhY3RET01Db21wb25lbnR9IGRvbUNvbXBvbmVudE9yTm9kZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gZXZlbnREYXRhIEZha2UgZXZlbnQgZGF0YSB0byB1c2UgaW4gU3ludGhldGljRXZlbnQuXG4gICAgICovXG4gICAgUmVhY3RUZXN0VXRpbHMuU2ltdWxhdGVbZXZlbnRUeXBlXSA9IG1ha2VTaW11bGF0b3IoZXZlbnRUeXBlKTtcbiAgfVxufVxuXG4vLyBSZWJ1aWxkIFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlIHdoZW5ldmVyIGV2ZW50IHBsdWdpbnMgYXJlIGluamVjdGVkXG52YXIgb2xkSW5qZWN0RXZlbnRQbHVnaW5PcmRlciA9IEV2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbk9yZGVyO1xuRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luT3JkZXIgPSBmdW5jdGlvbigpIHtcbiAgb2xkSW5qZWN0RXZlbnRQbHVnaW5PcmRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBidWlsZFNpbXVsYXRvcnMoKTtcbn07XG52YXIgb2xkSW5qZWN0RXZlbnRQbHVnaW5zID0gRXZlbnRQbHVnaW5IdWIuaW5qZWN0aW9uLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZTtcbkV2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgb2xkSW5qZWN0RXZlbnRQbHVnaW5zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGJ1aWxkU2ltdWxhdG9ycygpO1xufTtcblxuYnVpbGRTaW11bGF0b3JzKCk7XG5cbi8qKlxuICogRXhwb3J0czpcbiAqXG4gKiAtIGBSZWFjdFRlc3RVdGlscy5TaW11bGF0ZU5hdGl2ZS5jbGljayhFbGVtZW50L1JlYWN0RE9NQ29tcG9uZW50KWBcbiAqIC0gYFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlTmF0aXZlLm1vdXNlTW92ZShFbGVtZW50L1JlYWN0RE9NQ29tcG9uZW50KWBcbiAqIC0gYFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlTmF0aXZlLm1vdXNlSW4vUmVhY3RET01Db21wb25lbnQpYFxuICogLSBgUmVhY3RUZXN0VXRpbHMuU2ltdWxhdGVOYXRpdmUubW91c2VPdXQoRWxlbWVudC9SZWFjdERPTUNvbXBvbmVudClgXG4gKiAtIC4uLiAoQWxsIGtleXMgZnJvbSBgRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlc2ApXG4gKlxuICogTm90ZTogVG9wIGxldmVsIGV2ZW50IHR5cGVzIGFyZSBhIHN1YnNldCBvZiB0aGUgZW50aXJlIHNldCBvZiBoYW5kbGVyIHR5cGVzXG4gKiAod2hpY2ggaW5jbHVkZSBhIGJyb2FkZXIgc2V0IG9mIFwic3ludGhldGljXCIgZXZlbnRzKS4gRm9yIGV4YW1wbGUsIG9uRHJhZ0RvbmVcbiAqIGlzIGEgc3ludGhldGljIGV2ZW50LiBFeGNlcHQgd2hlbiB0ZXN0aW5nIGFuIGV2ZW50IHBsdWdpbiBvciBSZWFjdCdzIGV2ZW50XG4gKiBoYW5kbGluZyBjb2RlIHNwZWNpZmljYWxseSwgeW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlXG4gKiB0byBkaXNwYXRjaCBzeW50aGV0aWMgZXZlbnRzLlxuICovXG5cbmZ1bmN0aW9uIG1ha2VOYXRpdmVTaW11bGF0b3IoZXZlbnRUeXBlKSB7XG4gIHJldHVybiBmdW5jdGlvbihkb21Db21wb25lbnRPck5vZGUsIG5hdGl2ZUV2ZW50RGF0YSkge1xuICAgIHZhciBmYWtlTmF0aXZlRXZlbnQgPSBuZXcgRXZlbnQoZXZlbnRUeXBlKTtcbiAgICBhc3NpZ24oZmFrZU5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudERhdGEpO1xuICAgIGlmIChSZWFjdFRlc3RVdGlscy5pc0RPTUNvbXBvbmVudChkb21Db21wb25lbnRPck5vZGUpKSB7XG4gICAgICBSZWFjdFRlc3RVdGlscy5zaW11bGF0ZU5hdGl2ZUV2ZW50T25ET01Db21wb25lbnQoXG4gICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgZG9tQ29tcG9uZW50T3JOb2RlLFxuICAgICAgICBmYWtlTmF0aXZlRXZlbnRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghIWRvbUNvbXBvbmVudE9yTm9kZS50YWdOYW1lKSB7XG4gICAgICAvLyBXaWxsIGFsbG93IG9uIGFjdHVhbCBkb20gbm9kZXMuXG4gICAgICBSZWFjdFRlc3RVdGlscy5zaW11bGF0ZU5hdGl2ZUV2ZW50T25Ob2RlKFxuICAgICAgICBldmVudFR5cGUsXG4gICAgICAgIGRvbUNvbXBvbmVudE9yTm9kZSxcbiAgICAgICAgZmFrZU5hdGl2ZUV2ZW50XG4gICAgICApO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIGV2ZW50VHlwZTtcbmZvciAoZXZlbnRUeXBlIGluIHRvcExldmVsVHlwZXMpIHtcbiAgLy8gRXZlbnQgdHlwZSBpcyBzdG9yZWQgYXMgJ3RvcENsaWNrJyAtIHdlIHRyYW5zZm9ybSB0aGF0IHRvICdjbGljaydcbiAgdmFyIGNvbnZlbmllbmNlTmFtZSA9IGV2ZW50VHlwZS5pbmRleE9mKCd0b3AnKSA9PT0gMCA/XG4gICAgZXZlbnRUeXBlLmNoYXJBdCgzKS50b0xvd2VyQ2FzZSgpICsgZXZlbnRUeXBlLnN1YnN0cig0KSA6IGV2ZW50VHlwZTtcbiAgLyoqXG4gICAqIEBwYXJhbSB7IUVsZW1lbnQgfHwgUmVhY3RET01Db21wb25lbnR9IGRvbUNvbXBvbmVudE9yTm9kZVxuICAgKiBAcGFyYW0gez9FdmVudH0gbmF0aXZlRXZlbnREYXRhIEZha2UgbmF0aXZlIGV2ZW50IHRvIHVzZSBpbiBTeW50aGV0aWNFdmVudC5cbiAgICovXG4gIFJlYWN0VGVzdFV0aWxzLlNpbXVsYXRlTmF0aXZlW2NvbnZlbmllbmNlTmFtZV0gPVxuICAgIG1ha2VOYXRpdmVTaW11bGF0b3IoZXZlbnRUeXBlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFRlc3RVdGlscztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDaGlsZHJlbiA9IHJlcXVpcmUoXCIuL1JlYWN0Q2hpbGRyZW5cIik7XG52YXIgUmVhY3RGcmFnbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RnJhZ21lbnRcIik7XG5cbnZhciBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcgPSB7XG4gIC8qKlxuICAgKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuIEp1c3RcbiAgICogc2ltcGxlIHN5bnRhY3RpYyBzdWdhciBhcm91bmQgUmVhY3RDaGlsZHJlbi5tYXAoKS5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAgICogQHJldHVybiB7b2JqZWN0fSBNYXBwaW5nIG9mIGtleSB0byBjaGlsZFxuICAgKi9cbiAgZ2V0Q2hpbGRNYXBwaW5nOiBmdW5jdGlvbihjaGlsZHJlbikge1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0RnJhZ21lbnQuZXh0cmFjdChSZWFjdENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9KSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyBjaGlsZHJlbiBzb21lIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGluIHRoZVxuICAgKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAgICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAgICogYW5kIGEgbmV3IHNldCBvZiBrZXlzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBjb3JyZWN0XG4gICAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gICAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gICAqIGRpcmVjdGx5IGhhdmUgdGhpcyBjb25jZXB0IG9mIHRoZSB1bmlvbiBvZiBwcmV2Q2hpbGRyZW4gYW5kIG5leHRDaGlsZHJlblxuICAgKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHByZXYgcHJldiBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gICAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAgICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gICAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICAgKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICAgKi9cbiAgbWVyZ2VDaGlsZE1hcHBpbmdzOiBmdW5jdGlvbihwcmV2LCBuZXh0KSB7XG4gICAgcHJldiA9IHByZXYgfHwge307XG4gICAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgICBmdW5jdGlvbiBnZXRWYWx1ZUZvcktleShrZXkpIHtcbiAgICAgIGlmIChuZXh0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIG5leHRba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwcmV2W2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9yIGVhY2gga2V5IG9mIGBuZXh0YCwgdGhlIGxpc3Qgb2Yga2V5cyB0byBpbnNlcnQgYmVmb3JlIHRoYXQga2V5IGluXG4gICAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcbiAgICB2YXIgbmV4dEtleXNQZW5kaW5nID0ge307XG5cbiAgICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICAgIGlmIChuZXh0Lmhhc093blByb3BlcnR5KHByZXZLZXkpKSB7XG4gICAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICBuZXh0S2V5c1BlbmRpbmdbcHJldktleV0gPSBwZW5kaW5nS2V5cztcbiAgICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpO1xuICAgIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcbiAgICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChuZXh0S2V5c1BlbmRpbmcuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldXSA9IGdldFZhbHVlRm9yS2V5KFxuICAgICAgICAgICAgcGVuZGluZ05leHRLZXlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleV0gPSBnZXRWYWx1ZUZvcktleShuZXh0S2V5KTtcbiAgICB9XG5cbiAgICAvLyBGaW5hbGx5LCBhZGQgdGhlIGtleXMgd2hpY2ggZGlkbid0IGFwcGVhciBiZWZvcmUgYW55IGtleSBpbiBgbmV4dGBcbiAgICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkTWFwcGluZ1twZW5kaW5nS2V5c1tpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nS2V5c1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkTWFwcGluZztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmc7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RUcmFuc2l0aW9uRXZlbnRzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxuLyoqXG4gKiBFVkVOVF9OQU1FX01BUCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBldmVudCBmaXJlZCB3aGVuIGFcbiAqIHRyYW5zaXRpb24vYW5pbWF0aW9uIGVuZHMsIGJhc2VkIG9uIHRoZSBzdHlsZSBwcm9wZXJ0eSB1c2VkIHRvXG4gKiBkZWZpbmUgdGhhdCBldmVudC5cbiAqL1xudmFyIEVWRU5UX05BTUVfTUFQID0ge1xuICB0cmFuc2l0aW9uZW5kOiB7XG4gICAgJ3RyYW5zaXRpb24nOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgJ1dlYmtpdFRyYW5zaXRpb24nOiAnd2Via2l0VHJhbnNpdGlvbkVuZCcsXG4gICAgJ01velRyYW5zaXRpb24nOiAnbW96VHJhbnNpdGlvbkVuZCcsXG4gICAgJ09UcmFuc2l0aW9uJzogJ29UcmFuc2l0aW9uRW5kJyxcbiAgICAnbXNUcmFuc2l0aW9uJzogJ01TVHJhbnNpdGlvbkVuZCdcbiAgfSxcblxuICBhbmltYXRpb25lbmQ6IHtcbiAgICAnYW5pbWF0aW9uJzogJ2FuaW1hdGlvbmVuZCcsXG4gICAgJ1dlYmtpdEFuaW1hdGlvbic6ICd3ZWJraXRBbmltYXRpb25FbmQnLFxuICAgICdNb3pBbmltYXRpb24nOiAnbW96QW5pbWF0aW9uRW5kJyxcbiAgICAnT0FuaW1hdGlvbic6ICdvQW5pbWF0aW9uRW5kJyxcbiAgICAnbXNBbmltYXRpb24nOiAnTVNBbmltYXRpb25FbmQnXG4gIH1cbn07XG5cbnZhciBlbmRFdmVudHMgPSBbXTtcblxuZnVuY3Rpb24gZGV0ZWN0RXZlbnRzKCkge1xuICB2YXIgdGVzdEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHZhciBzdHlsZSA9IHRlc3RFbC5zdHlsZTtcblxuICAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxhciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LFxuICAvLyB0aGUgdW4tcHJlZml4ZWQgXCJhbmltYXRpb25cIiBhbmQgXCJ0cmFuc2l0aW9uXCIgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGVcbiAgLy8gc3R5bGUgb2JqZWN0IGJ1dCB0aGUgZXZlbnRzIHRoYXQgZmlyZSB3aWxsIHN0aWxsIGJlIHByZWZpeGVkLCBzbyB3ZSBuZWVkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZSB1bi1wcmVmaXhlZCBldmVudHMgYXJlIHVzZWFibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW1cbiAgLy8gZnJvbSB0aGUgbWFwXG4gIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSBFVkVOVF9OQU1FX01BUC5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICB9XG5cbiAgaWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSBFVkVOVF9OQU1FX01BUC50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gIH1cblxuICBmb3IgKHZhciBiYXNlRXZlbnROYW1lIGluIEVWRU5UX05BTUVfTUFQKSB7XG4gICAgdmFyIGJhc2VFdmVudHMgPSBFVkVOVF9OQU1FX01BUFtiYXNlRXZlbnROYW1lXTtcbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gYmFzZUV2ZW50cykge1xuICAgICAgaWYgKHN0eWxlTmFtZSBpbiBzdHlsZSkge1xuICAgICAgICBlbmRFdmVudHMucHVzaChiYXNlRXZlbnRzW3N0eWxlTmFtZV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICBkZXRlY3RFdmVudHMoKTtcbn1cblxuLy8gV2UgdXNlIHRoZSByYXcge2FkZHxyZW1vdmV9RXZlbnRMaXN0ZW5lcigpIGNhbGwgYmVjYXVzZSBFdmVudExpc3RlbmVyXG4vLyBkb2VzIG5vdCBrbm93IGhvdyB0byByZW1vdmUgZXZlbnQgbGlzdGVuZXJzIGFuZCB3ZSByZWFsbHkgc2hvdWxkXG4vLyBjbGVhbiB1cC4gQWxzbywgdGhlc2UgZXZlbnRzIGFyZSBub3QgdHJpZ2dlcmVkIGluIG9sZGVyIGJyb3dzZXJzXG4vLyBzbyB3ZSBzaG91bGQgYmUgQS1PSyBoZXJlLlxuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lcikge1xuICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBldmVudExpc3RlbmVyKSB7XG4gIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbn1cblxudmFyIFJlYWN0VHJhbnNpdGlvbkV2ZW50cyA9IHtcbiAgYWRkRW5kRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24obm9kZSwgZXZlbnRMaXN0ZW5lcikge1xuICAgIGlmIChlbmRFdmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBJZiBDU1MgdHJhbnNpdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRyaWdnZXIgYW4gXCJlbmQgYW5pbWF0aW9uXCJcbiAgICAgIC8vIGV2ZW50IGltbWVkaWF0ZWx5LlxuICAgICAgd2luZG93LnNldFRpbWVvdXQoZXZlbnRMaXN0ZW5lciwgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVuZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVuZEV2ZW50KSB7XG4gICAgICBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGVuZEV2ZW50LCBldmVudExpc3RlbmVyKTtcbiAgICB9KTtcbiAgfSxcblxuICByZW1vdmVFbmRFdmVudExpc3RlbmVyOiBmdW5jdGlvbihub2RlLCBldmVudExpc3RlbmVyKSB7XG4gICAgaWYgKGVuZEV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW5kRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZW5kRXZlbnQpIHtcbiAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIobm9kZSwgZW5kRXZlbnQsIGV2ZW50TGlzdGVuZXIpO1xuICAgIH0pO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VHJhbnNpdGlvbkV2ZW50cztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBSZWFjdFRyYW5zaXRpb25Hcm91cFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIi4vUmVhY3RcIik7XG52YXIgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nID0gcmVxdWlyZShcIi4vUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nXCIpO1xuXG52YXIgYXNzaWduID0gcmVxdWlyZShcIi4vT2JqZWN0LmFzc2lnblwiKTtcbnZhciBjbG9uZVdpdGhQcm9wcyA9IHJlcXVpcmUoXCIuL2Nsb25lV2l0aFByb3BzXCIpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xuXG52YXIgUmVhY3RUcmFuc2l0aW9uR3JvdXAgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIGRpc3BsYXlOYW1lOiAnUmVhY3RUcmFuc2l0aW9uR3JvdXAnLFxuXG4gIHByb3BUeXBlczoge1xuICAgIGNvbXBvbmVudDogUmVhY3QuUHJvcFR5cGVzLmFueSxcbiAgICBjaGlsZEZhY3Rvcnk6IFJlYWN0LlByb3BUeXBlcy5mdW5jXG4gIH0sXG5cbiAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcG9uZW50OiAnc3BhbicsXG4gICAgICBjaGlsZEZhY3Rvcnk6IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudFxuICAgIH07XG4gIH0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbilcbiAgICB9O1xuICB9LFxuXG4gIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5cyA9IHt9O1xuICAgIHRoaXMua2V5c1RvRW50ZXIgPSBbXTtcbiAgICB0aGlzLmtleXNUb0xlYXZlID0gW107XG4gIH0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbml0aWFsQ2hpbGRNYXBwaW5nID0gdGhpcy5zdGF0ZS5jaGlsZHJlbjtcbiAgICBmb3IgKHZhciBrZXkgaW4gaW5pdGlhbENoaWxkTWFwcGluZykge1xuICAgICAgaWYgKGluaXRpYWxDaGlsZE1hcHBpbmdba2V5XSkge1xuICAgICAgICB0aGlzLnBlcmZvcm1BcHBlYXIoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24obmV4dFByb3BzKSB7XG4gICAgdmFyIG5leHRDaGlsZE1hcHBpbmcgPSBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKFxuICAgICAgbmV4dFByb3BzLmNoaWxkcmVuXG4gICAgKTtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IHRoaXMuc3RhdGUuY2hpbGRyZW47XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcubWVyZ2VDaGlsZE1hcHBpbmdzKFxuICAgICAgICBwcmV2Q2hpbGRNYXBwaW5nLFxuICAgICAgICBuZXh0Q2hpbGRNYXBwaW5nXG4gICAgICApXG4gICAgfSk7XG5cbiAgICB2YXIga2V5O1xuXG4gICAgZm9yIChrZXkgaW4gbmV4dENoaWxkTWFwcGluZykge1xuICAgICAgdmFyIGhhc1ByZXYgPSBwcmV2Q2hpbGRNYXBwaW5nICYmIHByZXZDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KTtcbiAgICAgIGlmIChuZXh0Q2hpbGRNYXBwaW5nW2tleV0gJiYgIWhhc1ByZXYgJiZcbiAgICAgICAgICAhdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldKSB7XG4gICAgICAgIHRoaXMua2V5c1RvRW50ZXIucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoa2V5IGluIHByZXZDaGlsZE1hcHBpbmcpIHtcbiAgICAgIHZhciBoYXNOZXh0ID0gbmV4dENoaWxkTWFwcGluZyAmJiBuZXh0Q2hpbGRNYXBwaW5nLmhhc093blByb3BlcnR5KGtleSk7XG4gICAgICBpZiAocHJldkNoaWxkTWFwcGluZ1trZXldICYmICFoYXNOZXh0ICYmXG4gICAgICAgICAgIXRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XSkge1xuICAgICAgICB0aGlzLmtleXNUb0xlYXZlLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSB3YW50IHRvIHNvbWVkYXkgY2hlY2sgZm9yIHJlb3JkZXJpbmcsIHdlIGNvdWxkIGRvIGl0IGhlcmUuXG4gIH0sXG5cbiAgY29tcG9uZW50RGlkVXBkYXRlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIga2V5c1RvRW50ZXIgPSB0aGlzLmtleXNUb0VudGVyO1xuICAgIHRoaXMua2V5c1RvRW50ZXIgPSBbXTtcbiAgICBrZXlzVG9FbnRlci5mb3JFYWNoKHRoaXMucGVyZm9ybUVudGVyKTtcblxuICAgIHZhciBrZXlzVG9MZWF2ZSA9IHRoaXMua2V5c1RvTGVhdmU7XG4gICAgdGhpcy5rZXlzVG9MZWF2ZSA9IFtdO1xuICAgIGtleXNUb0xlYXZlLmZvckVhY2godGhpcy5wZXJmb3JtTGVhdmUpO1xuICB9LFxuXG4gIHBlcmZvcm1BcHBlYXI6IGZ1bmN0aW9uKGtleSkge1xuICAgIHRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XSA9IHRydWU7XG5cbiAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5yZWZzW2tleV07XG5cbiAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudFdpbGxBcHBlYXIpIHtcbiAgICAgIGNvbXBvbmVudC5jb21wb25lbnRXaWxsQXBwZWFyKFxuICAgICAgICB0aGlzLl9oYW5kbGVEb25lQXBwZWFyaW5nLmJpbmQodGhpcywga2V5KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGFuZGxlRG9uZUFwcGVhcmluZyhrZXkpO1xuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlRG9uZUFwcGVhcmluZzogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IHRoaXMucmVmc1trZXldO1xuICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50RGlkQXBwZWFyKSB7XG4gICAgICBjb21wb25lbnQuY29tcG9uZW50RGlkQXBwZWFyKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XTtcblxuICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZyhcbiAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgICApO1xuXG4gICAgaWYgKCFjdXJyZW50Q2hpbGRNYXBwaW5nIHx8ICFjdXJyZW50Q2hpbGRNYXBwaW5nLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIC8vIFRoaXMgd2FzIHJlbW92ZWQgYmVmb3JlIGl0IGhhZCBmdWxseSBhcHBlYXJlZC4gUmVtb3ZlIGl0LlxuICAgICAgdGhpcy5wZXJmb3JtTGVhdmUoa2V5KTtcbiAgICB9XG4gIH0sXG5cbiAgcGVyZm9ybUVudGVyOiBmdW5jdGlvbihrZXkpIHtcbiAgICB0aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdLZXlzW2tleV0gPSB0cnVlO1xuXG4gICAgdmFyIGNvbXBvbmVudCA9IHRoaXMucmVmc1trZXldO1xuXG4gICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsRW50ZXIpIHtcbiAgICAgIGNvbXBvbmVudC5jb21wb25lbnRXaWxsRW50ZXIoXG4gICAgICAgIHRoaXMuX2hhbmRsZURvbmVFbnRlcmluZy5iaW5kKHRoaXMsIGtleSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hhbmRsZURvbmVFbnRlcmluZyhrZXkpO1xuICAgIH1cbiAgfSxcblxuICBfaGFuZGxlRG9uZUVudGVyaW5nOiBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5yZWZzW2tleV07XG4gICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnREaWRFbnRlcikge1xuICAgICAgY29tcG9uZW50LmNvbXBvbmVudERpZEVudGVyKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XTtcblxuICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZyhcbiAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgICApO1xuXG4gICAgaWYgKCFjdXJyZW50Q2hpbGRNYXBwaW5nIHx8ICFjdXJyZW50Q2hpbGRNYXBwaW5nLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIC8vIFRoaXMgd2FzIHJlbW92ZWQgYmVmb3JlIGl0IGhhZCBmdWxseSBlbnRlcmVkLiBSZW1vdmUgaXQuXG4gICAgICB0aGlzLnBlcmZvcm1MZWF2ZShrZXkpO1xuICAgIH1cbiAgfSxcblxuICBwZXJmb3JtTGVhdmU6IGZ1bmN0aW9uKGtleSkge1xuICAgIHRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XSA9IHRydWU7XG5cbiAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5yZWZzW2tleV07XG4gICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsTGVhdmUpIHtcbiAgICAgIGNvbXBvbmVudC5jb21wb25lbnRXaWxsTGVhdmUodGhpcy5faGFuZGxlRG9uZUxlYXZpbmcuYmluZCh0aGlzLCBrZXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgc29tZXdoYXQgZGFuZ2Vyb3VzIGIvYyBpdCBjYWxscyBzZXRTdGF0ZSgpXG4gICAgICAvLyBhZ2FpbiwgZWZmZWN0aXZlbHkgbXV0YXRpbmcgdGhlIGNvbXBvbmVudCBiZWZvcmUgYWxsIHRoZSB3b3JrXG4gICAgICAvLyBpcyBkb25lLlxuICAgICAgdGhpcy5faGFuZGxlRG9uZUxlYXZpbmcoa2V5KTtcbiAgICB9XG4gIH0sXG5cbiAgX2hhbmRsZURvbmVMZWF2aW5nOiBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgY29tcG9uZW50ID0gdGhpcy5yZWZzW2tleV07XG5cbiAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZExlYXZlKSB7XG4gICAgICBjb21wb25lbnQuY29tcG9uZW50RGlkTGVhdmUoKTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldO1xuXG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKFxuICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICk7XG5cbiAgICBpZiAoY3VycmVudENoaWxkTWFwcGluZyAmJiBjdXJyZW50Q2hpbGRNYXBwaW5nLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIC8vIFRoaXMgZW50ZXJlZCBhZ2FpbiBiZWZvcmUgaXQgZnVsbHkgbGVmdC4gQWRkIGl0IGFnYWluLlxuICAgICAgdGhpcy5wZXJmb3JtRW50ZXIoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5ld0NoaWxkcmVuID0gYXNzaWduKHt9LCB0aGlzLnN0YXRlLmNoaWxkcmVuKTtcbiAgICAgIGRlbGV0ZSBuZXdDaGlsZHJlbltrZXldO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hpbGRyZW46IG5ld0NoaWxkcmVufSk7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgLy8gVE9ETzogd2UgY291bGQgZ2V0IHJpZCBvZiB0aGUgbmVlZCBmb3IgdGhlIHdyYXBwZXIgbm9kZVxuICAgIC8vIGJ5IGNsb25pbmcgYSBzaW5nbGUgY2hpbGRcbiAgICB2YXIgY2hpbGRyZW5Ub1JlbmRlciA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN0YXRlLmNoaWxkcmVuKSB7XG4gICAgICB2YXIgY2hpbGQgPSB0aGlzLnN0YXRlLmNoaWxkcmVuW2tleV07XG4gICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgLy8gWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBsZWF2aW5nLlxuICAgICAgICAvLyBUaGUgbm9ybWFsIFJlYWN0IHdheSB0byBkbyBpdCB3b24ndCB3b3JrIHNpbmNlIHRoZSBjaGlsZCB3aWxsIGhhdmVcbiAgICAgICAgLy8gYWxyZWFkeSBiZWVuIHJlbW92ZWQuIEluIGNhc2UgeW91IG5lZWQgdGhpcyBiZWhhdmlvciB5b3UgY2FuIHByb3ZpZGVcbiAgICAgICAgLy8gYSBjaGlsZEZhY3RvcnkgZnVuY3Rpb24gdG8gd3JhcCBldmVyeSBjaGlsZCwgZXZlbiB0aGUgb25lcyB0aGF0IGFyZVxuICAgICAgICAvLyBsZWF2aW5nLlxuICAgICAgICBjaGlsZHJlblRvUmVuZGVyLnB1c2goY2xvbmVXaXRoUHJvcHMoXG4gICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZEZhY3RvcnkoY2hpbGQpLFxuICAgICAgICAgIHtyZWY6IGtleSwga2V5OiBrZXl9XG4gICAgICAgICkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50LFxuICAgICAgdGhpcy5wcm9wcyxcbiAgICAgIGNoaWxkcmVuVG9SZW5kZXJcbiAgICApO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFRyYW5zaXRpb25Hcm91cDtcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFJlYWN0VXBkYXRlUXVldWVcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdExpZmVDeWNsZSA9IHJlcXVpcmUoXCIuL1JlYWN0TGlmZUN5Y2xlXCIpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlTWFwXCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpIHtcbiAgaWYgKGludGVybmFsSW5zdGFuY2UgIT09IFJlYWN0TGlmZUN5Y2xlLmN1cnJlbnRseU1vdW50aW5nSW5zdGFuY2UpIHtcbiAgICAvLyBJZiB3ZSdyZSBpbiBhIGNvbXBvbmVudFdpbGxNb3VudCBoYW5kbGVyLCBkb24ndCBlbnF1ZXVlIGEgcmVyZW5kZXJcbiAgICAvLyBiZWNhdXNlIFJlYWN0VXBkYXRlcyBhc3N1bWVzIHdlJ3JlIGluIGEgYnJvd3NlciBjb250ZXh0ICh3aGljaCBpc1xuICAgIC8vIHdyb25nIGZvciBzZXJ2ZXIgcmVuZGVyaW5nKSBhbmQgd2UncmUgYWJvdXQgdG8gZG8gYSByZW5kZXIgYW55d2F5LlxuICAgIC8vIFNlZSBidWcgaW4gIzE3NDAuXG4gICAgUmVhY3RVcGRhdGVzLmVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsLFxuICAgICclcyguLi4pOiBDYW5ub3QgdXBkYXRlIGR1cmluZyBhbiBleGlzdGluZyBzdGF0ZSB0cmFuc2l0aW9uICcgK1xuICAgICcoc3VjaCBhcyB3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uICcgK1xuICAgICdvZiBwcm9wcyBhbmQgc3RhdGUuJyxcbiAgICBjYWxsZXJOYW1lXG4gICkgOiBpbnZhcmlhbnQoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsKSk7XG5cbiAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBSZWFjdEluc3RhbmNlTWFwLmdldChwdWJsaWNJbnN0YW5jZSk7XG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIE9ubHkgd2FybiB3aGVuIHdlIGhhdmUgYSBjYWxsZXJOYW1lLiBPdGhlcndpc2Ugd2Ugc2hvdWxkIGJlIHNpbGVudC5cbiAgICAgIC8vIFdlJ3JlIHByb2JhYmx5IGNhbGxpbmcgZnJvbSBlbnF1ZXVlQ2FsbGJhY2suIFdlIGRvbid0IHdhbnQgdG8gd2FyblxuICAgICAgLy8gdGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbGlmZWN5Y2xlIG1ldGhvZC5cbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAhY2FsbGVyTmFtZSxcbiAgICAgICAgJyVzKC4uLik6IENhbiBvbmx5IHVwZGF0ZSBhIG1vdW50ZWQgb3IgbW91bnRpbmcgY29tcG9uZW50LiAnICtcbiAgICAgICAgJ1RoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVkICVzKCkgb24gYW4gdW5tb3VudGVkICcgK1xuICAgICAgICAnY29tcG9uZW50LiBUaGlzIGlzIGEgbm8tb3AuJyxcbiAgICAgICAgY2FsbGVyTmFtZSxcbiAgICAgICAgY2FsbGVyTmFtZVxuICAgICAgKSA6IG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChpbnRlcm5hbEluc3RhbmNlID09PSBSZWFjdExpZmVDeWNsZS5jdXJyZW50bHlVbm1vdW50aW5nSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBpbnRlcm5hbEluc3RhbmNlO1xufVxuXG4vKipcbiAqIFJlYWN0VXBkYXRlUXVldWUgYWxsb3dzIGZvciBzdGF0ZSB1cGRhdGVzIHRvIGJlIHNjaGVkdWxlZCBpbnRvIGEgbGF0ZXJcbiAqIHJlY29uY2lsaWF0aW9uIHN0ZXAuXG4gKi9cbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0ge1xuXG4gIC8qKlxuICAgKiBFbnF1ZXVlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgcGVuZGluZyB1cGRhdGVzXG4gICAqIGhhdmUgcHJvY2Vzc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0byB1c2UgYXMgYHRoaXNgIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlQ2FsbGJhY2s6IGZ1bmN0aW9uKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaykge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicsXG4gICAgICAnZW5xdWV1ZUNhbGxiYWNrKC4uLik6IFlvdSBjYWxsZWQgYHNldFByb3BzYCwgYHJlcGxhY2VQcm9wc2AsICcgK1xuICAgICAgJ2BzZXRTdGF0ZWAsIGByZXBsYWNlU3RhdGVgLCBvciBgZm9yY2VVcGRhdGVgIHdpdGggYSBjYWxsYmFjayB0aGF0ICcgK1xuICAgICAgJ2lzblxcJ3QgY2FsbGFibGUuJ1xuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSk7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UpO1xuXG4gICAgLy8gUHJldmlvdXNseSB3ZSB3b3VsZCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBkaWRuJ3QgaGF2ZSBhbiBpbnRlcm5hbFxuICAgIC8vIGluc3RhbmNlLiBTaW5jZSB3ZSB3YW50IHRvIG1ha2UgaXQgYSBuby1vcCBpbnN0ZWFkLCB3ZSBtaXJyb3IgdGhlIHNhbWVcbiAgICAvLyBiZWhhdmlvciB3ZSBoYXZlIGluIG90aGVyIGVucXVldWUqIG1ldGhvZHMuXG4gICAgLy8gV2UgYWxzbyBuZWVkIHRvIGlnbm9yZSBjYWxsYmFja3MgaW4gY29tcG9uZW50V2lsbE1vdW50LiBTZWVcbiAgICAvLyBlbnF1ZXVlVXBkYXRlcy5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UgfHxcbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA9PT0gUmVhY3RMaWZlQ3ljbGUuY3VycmVudGx5TW91bnRpbmdJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgICAvLyBUT0RPOiBUaGUgY2FsbGJhY2sgaGVyZSBpcyBpZ25vcmVkIHdoZW4gc2V0U3RhdGUgaXMgY2FsbGVkIGZyb21cbiAgICAvLyBjb21wb25lbnRXaWxsTW91bnQuIEVpdGhlciBmaXggaXQgb3IgZGlzYWxsb3cgZG9pbmcgc28gY29tcGxldGVseSBpblxuICAgIC8vIGZhdm9yIG9mIGdldEluaXRpYWxTdGF0ZS4gQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGRpc2FsbG93XG4gICAgLy8gY29tcG9uZW50V2lsbE1vdW50IGR1cmluZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICBlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbDogZnVuY3Rpb24oaW50ZXJuYWxJbnN0YW5jZSwgY2FsbGJhY2spIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ2VucXVldWVDYWxsYmFjayguLi4pOiBZb3UgY2FsbGVkIGBzZXRQcm9wc2AsIGByZXBsYWNlUHJvcHNgLCAnICtcbiAgICAgICdgc2V0U3RhdGVgLCBgcmVwbGFjZVN0YXRlYCwgb3IgYGZvcmNlVXBkYXRlYCB3aXRoIGEgY2FsbGJhY2sgdGhhdCAnICtcbiAgICAgICdpc25cXCd0IGNhbGxhYmxlLidcbiAgICApIDogaW52YXJpYW50KHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykpO1xuICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzKSB7XG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzID0gW2NhbGxiYWNrXTtcbiAgICB9XG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZFVwZGF0ZUNvbXBvbmVudGAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUoXG4gICAgICBwdWJsaWNJbnN0YW5jZSxcbiAgICAgICdmb3JjZVVwZGF0ZSdcbiAgICApO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gdHJ1ZTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbihwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSkge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKFxuICAgICAgcHVibGljSW5zdGFuY2UsXG4gICAgICAncmVwbGFjZVN0YXRlJ1xuICAgICk7XG5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IFtjb21wbGV0ZVN0YXRlXTtcbiAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nUmVwbGFjZVN0YXRlID0gdHJ1ZTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShcbiAgICAgIHB1YmxpY0luc3RhbmNlLFxuICAgICAgJ3NldFN0YXRlJ1xuICAgICk7XG5cbiAgICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcXVldWUgPVxuICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ1N0YXRlUXVldWUgfHxcbiAgICAgIChpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IFtdKTtcbiAgICBxdWV1ZS5wdXNoKHBhcnRpYWxTdGF0ZSk7XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBwcm9wcy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsUHJvcHMgU3Vic2V0IG9mIHRoZSBuZXh0IHByb3BzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRQcm9wczogZnVuY3Rpb24ocHVibGljSW5zdGFuY2UsIHBhcnRpYWxQcm9wcykge1xuICAgIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKFxuICAgICAgcHVibGljSW5zdGFuY2UsXG4gICAgICAnc2V0UHJvcHMnXG4gICAgKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9pc1RvcExldmVsLFxuICAgICAgJ3NldFByb3BzKC4uLik6IFlvdSBjYWxsZWQgYHNldFByb3BzYCBvbiBhICcgK1xuICAgICAgJ2NvbXBvbmVudCB3aXRoIGEgcGFyZW50LiBUaGlzIGlzIGFuIGFudGktcGF0dGVybiBzaW5jZSBwcm9wcyB3aWxsICcgK1xuICAgICAgJ2dldCByZWFjdGl2ZWx5IHVwZGF0ZWQgd2hlbiByZW5kZXJlZC4gSW5zdGVhZCwgY2hhbmdlIHRoZSBvd25lclxcJ3MgJyArXG4gICAgICAnYHJlbmRlcmAgbWV0aG9kIHRvIHBhc3MgdGhlIGNvcnJlY3QgdmFsdWUgYXMgcHJvcHMgdG8gdGhlIGNvbXBvbmVudCAnICtcbiAgICAgICd3aGVyZSBpdCBpcyBjcmVhdGVkLidcbiAgICApIDogaW52YXJpYW50KGludGVybmFsSW5zdGFuY2UuX2lzVG9wTGV2ZWwpKTtcblxuICAgIC8vIE1lcmdlIHdpdGggdGhlIHBlbmRpbmcgZWxlbWVudCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB3aXRoIGV4aXN0aW5nXG4gICAgLy8gZWxlbWVudCBwcm9wcy5cbiAgICB2YXIgZWxlbWVudCA9IGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50IHx8XG4gICAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcbiAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIGVsZW1lbnQucHJvcHMsIHBhcnRpYWxQcm9wcyk7XG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlUHJvcHMoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHNcbiAgICApO1xuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBwcm9wcy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBOZXcgcHJvcHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVJlcGxhY2VQcm9wczogZnVuY3Rpb24ocHVibGljSW5zdGFuY2UsIHByb3BzKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUoXG4gICAgICBwdWJsaWNJbnN0YW5jZSxcbiAgICAgICdyZXBsYWNlUHJvcHMnXG4gICAgKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBpbnRlcm5hbEluc3RhbmNlLl9pc1RvcExldmVsLFxuICAgICAgJ3JlcGxhY2VQcm9wcyguLi4pOiBZb3UgY2FsbGVkIGByZXBsYWNlUHJvcHNgIG9uIGEgJyArXG4gICAgICAnY29tcG9uZW50IHdpdGggYSBwYXJlbnQuIFRoaXMgaXMgYW4gYW50aS1wYXR0ZXJuIHNpbmNlIHByb3BzIHdpbGwgJyArXG4gICAgICAnZ2V0IHJlYWN0aXZlbHkgdXBkYXRlZCB3aGVuIHJlbmRlcmVkLiBJbnN0ZWFkLCBjaGFuZ2UgdGhlIG93bmVyXFwncyAnICtcbiAgICAgICdgcmVuZGVyYCBtZXRob2QgdG8gcGFzcyB0aGUgY29ycmVjdCB2YWx1ZSBhcyBwcm9wcyB0byB0aGUgY29tcG9uZW50ICcgK1xuICAgICAgJ3doZXJlIGl0IGlzIGNyZWF0ZWQuJ1xuICAgICkgOiBpbnZhcmlhbnQoaW50ZXJuYWxJbnN0YW5jZS5faXNUb3BMZXZlbCkpO1xuXG4gICAgLy8gTWVyZ2Ugd2l0aCB0aGUgcGVuZGluZyBlbGVtZW50IGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHdpdGggZXhpc3RpbmdcbiAgICAvLyBlbGVtZW50IHByb3BzLlxuICAgIHZhciBlbGVtZW50ID0gaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0VsZW1lbnQgfHxcbiAgICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50O1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZVByb3BzKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHByb3BzXG4gICAgKTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbDogZnVuY3Rpb24oaW50ZXJuYWxJbnN0YW5jZSwgbmV3RWxlbWVudCkge1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50ID0gbmV3RWxlbWVudDtcbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RVcGRhdGVRdWV1ZTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JWY0dSaGRHVlJkV1YxWlM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCU1pXRmpkRlZ3WkdGMFpWRjFaWFZsWEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1VtVmhZM1JNYVdabFEzbGpiR1VnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEV4cFptVkRlV05zWlZ3aUtUdGNiblpoY2lCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFEzVnljbVZ1ZEU5M2JtVnlYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZ3aUtUdGNiblpoY2lCU1pXRmpkRWx1YzNSaGJtTmxUV0Z3SUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSSmJuTjBZVzVqWlUxaGNGd2lLVHRjYm5aaGNpQlNaV0ZqZEZWd1pHRjBaWE1nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEZWd1pHRjBaWE5jSWlrN1hHNWNiblpoY2lCaGMzTnBaMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOVBZbXBsWTNRdVlYTnphV2R1WENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUIzWVhKdWFXNW5JRDBnY21WeGRXbHlaU2hjSWk0dmQyRnlibWx1WjF3aUtUdGNibHh1Wm5WdVkzUnBiMjRnWlc1eGRXVjFaVlZ3WkdGMFpTaHBiblJsY201aGJFbHVjM1JoYm1ObEtTQjdYRzRnSUdsbUlDaHBiblJsY201aGJFbHVjM1JoYm1ObElDRTlQU0JTWldGamRFeHBabVZEZVdOc1pTNWpkWEp5Wlc1MGJIbE5iM1Z1ZEdsdVowbHVjM1JoYm1ObEtTQjdYRzRnSUNBZ0x5OGdTV1lnZDJVbmNtVWdhVzRnWVNCamIyMXdiMjVsYm5SWGFXeHNUVzkxYm5RZ2FHRnVaR3hsY2l3Z1pHOXVKM1FnWlc1eGRXVjFaU0JoSUhKbGNtVnVaR1Z5WEc0Z0lDQWdMeThnWW1WallYVnpaU0JTWldGamRGVndaR0YwWlhNZ1lYTnpkVzFsY3lCM1pTZHlaU0JwYmlCaElHSnliM2R6WlhJZ1kyOXVkR1Y0ZENBb2QyaHBZMmdnYVhOY2JpQWdJQ0F2THlCM2NtOXVaeUJtYjNJZ2MyVnlkbVZ5SUhKbGJtUmxjbWx1WnlrZ1lXNWtJSGRsSjNKbElHRmliM1YwSUhSdklHUnZJR0VnY21WdVpHVnlJR0Z1ZVhkaGVTNWNiaUFnSUNBdkx5QlRaV1VnWW5WbklHbHVJQ014TnpRd0xseHVJQ0FnSUZKbFlXTjBWWEJrWVhSbGN5NWxibkYxWlhWbFZYQmtZWFJsS0dsdWRHVnlibUZzU1c1emRHRnVZMlVwTzF4dUlDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlHZGxkRWx1ZEdWeWJtRnNTVzV6ZEdGdVkyVlNaV0ZrZVVadmNsVndaR0YwWlNod2RXSnNhV05KYm5OMFlXNWpaU3dnWTJGc2JHVnlUbUZ0WlNrZ2UxeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUxtTjFjbkpsYm5RZ1BUMGdiblZzYkN4Y2JpQWdJQ0FuSlhNb0xpNHVLVG9nUTJGdWJtOTBJSFZ3WkdGMFpTQmtkWEpwYm1jZ1lXNGdaWGhwYzNScGJtY2djM1JoZEdVZ2RISmhibk5wZEdsdmJpQW5JQ3RjYmlBZ0lDQW5LSE4xWTJnZ1lYTWdkMmwwYUdsdUlHQnlaVzVrWlhKZ0tTNGdVbVZ1WkdWeUlHMWxkR2h2WkhNZ2MyaHZkV3hrSUdKbElHRWdjSFZ5WlNCbWRXNWpkR2x2YmlBbklDdGNiaUFnSUNBbmIyWWdjSEp2Y0hNZ1lXNWtJSE4wWVhSbExpY3NYRzRnSUNBZ1kyRnNiR1Z5VG1GdFpWeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUxtTjFjbkpsYm5RZ1BUMGdiblZzYkNrcE8xeHVYRzRnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdVbVZoWTNSSmJuTjBZVzVqWlUxaGNDNW5aWFFvY0hWaWJHbGpTVzV6ZEdGdVkyVXBPMXh1SUNCcFppQW9JV2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQXZMeUJQYm14NUlIZGhjbTRnZDJobGJpQjNaU0JvWVhabElHRWdZMkZzYkdWeVRtRnRaUzRnVDNSb1pYSjNhWE5sSUhkbElITm9iM1ZzWkNCaVpTQnphV3hsYm5RdVhHNGdJQ0FnSUNBdkx5QlhaU2R5WlNCd2NtOWlZV0pzZVNCallXeHNhVzVuSUdaeWIyMGdaVzV4ZFdWMVpVTmhiR3hpWVdOckxpQlhaU0JrYjI0bmRDQjNZVzUwSUhSdklIZGhjbTVjYmlBZ0lDQWdJQzh2SUhSb1pYSmxJR0psWTJGMWMyVWdkMlVnWVd4eVpXRmtlU0IzWVhKdVpXUWdabTl5SUhSb1pTQmpiM0p5WlhOd2IyNWthVzVuSUd4cFptVmplV05zWlNCdFpYUm9iMlF1WEc0Z0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdJV05oYkd4bGNrNWhiV1VzWEc0Z0lDQWdJQ0FnSUNjbGN5Z3VMaTRwT2lCRFlXNGdiMjVzZVNCMWNHUmhkR1VnWVNCdGIzVnVkR1ZrSUc5eUlHMXZkVzUwYVc1bklHTnZiWEJ2Ym1WdWRDNGdKeUFyWEc0Z0lDQWdJQ0FnSUNkVWFHbHpJSFZ6ZFdGc2JIa2diV1ZoYm5NZ2VXOTFJR05oYkd4bFpDQWxjeWdwSUc5dUlHRnVJSFZ1Ylc5MWJuUmxaQ0FuSUN0Y2JpQWdJQ0FnSUNBZ0oyTnZiWEJ2Ym1WdWRDNGdWR2hwY3lCcGN5QmhJRzV2TFc5d0xpY3NYRzRnSUNBZ0lDQWdJR05oYkd4bGNrNWhiV1VzWEc0Z0lDQWdJQ0FnSUdOaGJHeGxjazVoYldWY2JpQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lIMWNibHh1SUNCcFppQW9hVzUwWlhKdVlXeEpibk4wWVc1alpTQTlQVDBnVW1WaFkzUk1hV1psUTNsamJHVXVZM1Z5Y21WdWRHeDVWVzV0YjNWdWRHbHVaMGx1YzNSaGJtTmxLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYVc1MFpYSnVZV3hKYm5OMFlXNWpaVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlNaV0ZqZEZWd1pHRjBaVkYxWlhWbElHRnNiRzkzY3lCbWIzSWdjM1JoZEdVZ2RYQmtZWFJsY3lCMGJ5QmlaU0J6WTJobFpIVnNaV1FnYVc1MGJ5QmhJR3hoZEdWeVhHNGdLaUJ5WldOdmJtTnBiR2xoZEdsdmJpQnpkR1Z3TGx4dUlDb3ZYRzUyWVhJZ1VtVmhZM1JWY0dSaGRHVlJkV1YxWlNBOUlIdGNibHh1SUNBdktpcGNiaUFnSUNvZ1JXNXhkV1YxWlNCaElHTmhiR3hpWVdOcklIUm9ZWFFnZDJsc2JDQmlaU0JsZUdWamRYUmxaQ0JoWm5SbGNpQmhiR3dnZEdobElIQmxibVJwYm1jZ2RYQmtZWFJsYzF4dUlDQWdLaUJvWVhabElIQnliMk5sYzNObFpDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFTnNZWE56ZlNCd2RXSnNhV05KYm5OMFlXNWpaU0JVYUdVZ2FXNXpkR0Z1WTJVZ2RHOGdkWE5sSUdGeklHQjBhR2x6WUNCamIyNTBaWGgwTGx4dUlDQWdLaUJBY0dGeVlXMGdlejltZFc1amRHbHZibjBnWTJGc2JHSmhZMnNnUTJGc2JHVmtJR0ZtZEdWeUlITjBZWFJsSUdseklIVndaR0YwWldRdVhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1pXNXhkV1YxWlVOaGJHeGlZV05yT2lCbWRXNWpkR2x2Ymlod2RXSnNhV05KYm5OMFlXNWpaU3dnWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdkSGx3Wlc5bUlHTmhiR3hpWVdOcklEMDlQU0FuWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ0FnSjJWdWNYVmxkV1ZEWVd4c1ltRmpheWd1TGk0cE9pQlpiM1VnWTJGc2JHVmtJR0J6WlhSUWNtOXdjMkFzSUdCeVpYQnNZV05sVUhKdmNITmdMQ0FuSUN0Y2JpQWdJQ0FnSUNkZ2MyVjBVM1JoZEdWZ0xDQmdjbVZ3YkdGalpWTjBZWFJsWUN3Z2IzSWdZR1p2Y21ObFZYQmtZWFJsWUNCM2FYUm9JR0VnWTJGc2JHSmhZMnNnZEdoaGRDQW5JQ3RjYmlBZ0lDQWdJQ2RwYzI1Y1hDZDBJR05oYkd4aFlteGxMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hSNWNHVnZaaUJqWVd4c1ltRmpheUE5UFQwZ0oyWjFibU4wYVc5dUp5a3BPMXh1SUNBZ0lIWmhjaUJwYm5SbGNtNWhiRWx1YzNSaGJtTmxJRDBnWjJWMFNXNTBaWEp1WVd4SmJuTjBZVzVqWlZKbFlXUjVSbTl5VlhCa1lYUmxLSEIxWW14cFkwbHVjM1JoYm1ObEtUdGNibHh1SUNBZ0lDOHZJRkJ5WlhacGIzVnpiSGtnZDJVZ2QyOTFiR1FnZEdoeWIzY2dZVzRnWlhKeWIzSWdhV1lnZDJVZ1pHbGtiaWQwSUdoaGRtVWdZVzRnYVc1MFpYSnVZV3hjYmlBZ0lDQXZMeUJwYm5OMFlXNWpaUzRnVTJsdVkyVWdkMlVnZDJGdWRDQjBieUJ0WVd0bElHbDBJR0VnYm04dGIzQWdhVzV6ZEdWaFpDd2dkMlVnYldseWNtOXlJSFJvWlNCellXMWxYRzRnSUNBZ0x5OGdZbVZvWVhacGIzSWdkMlVnYUdGMlpTQnBiaUJ2ZEdobGNpQmxibkYxWlhWbEtpQnRaWFJvYjJSekxseHVJQ0FnSUM4dklGZGxJR0ZzYzI4Z2JtVmxaQ0IwYnlCcFoyNXZjbVVnWTJGc2JHSmhZMnR6SUdsdUlHTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWRDNGdVMlZsWEc0Z0lDQWdMeThnWlc1eGRXVjFaVlZ3WkdGMFpYTXVYRzRnSUNBZ2FXWWdLQ0ZwYm5SbGNtNWhiRWx1YzNSaGJtTmxJSHg4WEc0Z0lDQWdJQ0FnSUdsdWRHVnlibUZzU1c1emRHRnVZMlVnUFQwOUlGSmxZV04wVEdsbVpVTjVZMnhsTG1OMWNuSmxiblJzZVUxdmRXNTBhVzVuU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1ZFd4c08xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blEyRnNiR0poWTJ0ektTQjdYRzRnSUNBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blEyRnNiR0poWTJ0ekxuQjFjMmdvWTJGc2JHSmhZMnNwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blEyRnNiR0poWTJ0eklEMGdXMk5oYkd4aVlXTnJYVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5OGdWRTlFVHpvZ1ZHaGxJR05oYkd4aVlXTnJJR2hsY21VZ2FYTWdhV2R1YjNKbFpDQjNhR1Z1SUhObGRGTjBZWFJsSUdseklHTmhiR3hsWkNCbWNtOXRYRzRnSUNBZ0x5OGdZMjl0Y0c5dVpXNTBWMmxzYkUxdmRXNTBMaUJGYVhSb1pYSWdabWw0SUdsMElHOXlJR1JwYzJGc2JHOTNJR1J2YVc1bklITnZJR052YlhCc1pYUmxiSGtnYVc1Y2JpQWdJQ0F2THlCbVlYWnZjaUJ2WmlCblpYUkpibWwwYVdGc1UzUmhkR1V1SUVGc2RHVnlibUYwYVhabGJIa3NJSGRsSUdOaGJpQmthWE5oYkd4dmQxeHVJQ0FnSUM4dklHTnZiWEJ2Ym1WdWRGZHBiR3hOYjNWdWRDQmtkWEpwYm1jZ2MyVnlkbVZ5TFhOcFpHVWdjbVZ1WkdWeWFXNW5MbHh1SUNBZ0lHVnVjWFZsZFdWVmNHUmhkR1VvYVc1MFpYSnVZV3hKYm5OMFlXNWpaU2s3WEc0Z0lIMHNYRzVjYmlBZ1pXNXhkV1YxWlVOaGJHeGlZV05yU1c1MFpYSnVZV3c2SUdaMWJtTjBhVzl1S0dsdWRHVnlibUZzU1c1emRHRnVZMlVzSUdOaGJHeGlZV05yS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJSFI1Y0dWdlppQmpZV3hzWW1GamF5QTlQVDBnSjJaMWJtTjBhVzl1Snl4Y2JpQWdJQ0FnSUNkbGJuRjFaWFZsUTJGc2JHSmhZMnNvTGk0dUtUb2dXVzkxSUdOaGJHeGxaQ0JnYzJWMFVISnZjSE5nTENCZ2NtVndiR0ZqWlZCeWIzQnpZQ3dnSnlBclhHNGdJQ0FnSUNBbllITmxkRk4wWVhSbFlDd2dZSEpsY0d4aFkyVlRkR0YwWldBc0lHOXlJR0JtYjNKalpWVndaR0YwWldBZ2QybDBhQ0JoSUdOaGJHeGlZV05ySUhSb1lYUWdKeUFyWEc0Z0lDQWdJQ0FuYVhOdVhGd25kQ0JqWVd4c1lXSnNaUzRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENoMGVYQmxiMllnWTJGc2JHSmhZMnNnUFQwOUlDZG1kVzVqZEdsdmJpY3BLVHRjYmlBZ0lDQnBaaUFvYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaME5oYkd4aVlXTnJjeWtnZTF4dUlDQWdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaME5oYkd4aVlXTnJjeTV3ZFhOb0tHTmhiR3hpWVdOcktUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaME5oYkd4aVlXTnJjeUE5SUZ0allXeHNZbUZqYTEwN1hHNGdJQ0FnZlZ4dUlDQWdJR1Z1Y1hWbGRXVlZjR1JoZEdVb2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNrN1hHNGdJSDBzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVp2Y21ObGN5QmhiaUIxY0dSaGRHVXVJRlJvYVhNZ2MyaHZkV3hrSUc5dWJIa2dZbVVnYVc1MmIydGxaQ0IzYUdWdUlHbDBJR2x6SUd0dWIzZHVJSGRwZEdoY2JpQWdJQ29nWTJWeWRHRnBiblI1SUhSb1lYUWdkMlVnWVhKbElDb3FibTkwS2lvZ2FXNGdZU0JFVDAwZ2RISmhibk5oWTNScGIyNHVYRzRnSUNBcVhHNGdJQ0FxSUZsdmRTQnRZWGtnZDJGdWRDQjBieUJqWVd4c0lIUm9hWE1nZDJobGJpQjViM1VnYTI1dmR5QjBhR0YwSUhOdmJXVWdaR1ZsY0dWeUlHRnpjR1ZqZENCdlppQjBhR1ZjYmlBZ0lDb2dZMjl0Y0c5dVpXNTBKM01nYzNSaGRHVWdhR0Z6SUdOb1lXNW5aV1FnWW5WMElHQnpaWFJUZEdGMFpXQWdkMkZ6SUc1dmRDQmpZV3hzWldRdVhHNGdJQ0FxWEc0Z0lDQXFJRlJvYVhNZ2QybHNiQ0J1YjNRZ2FXNTJiMnRsSUdCemFHOTFiR1JWY0dSaGRHVkRiMjF3YjI1bGJuUmdMQ0JpZFhRZ2FYUWdkMmxzYkNCcGJuWnZhMlZjYmlBZ0lDb2dZR052YlhCdmJtVnVkRmRwYkd4VmNHUmhkR1ZnSUdGdVpDQmdZMjl0Y0c5dVpXNTBSR2xrVlhCa1lYUmxZQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0U1pXRmpkRU5zWVhOemZTQndkV0pzYVdOSmJuTjBZVzVqWlNCVWFHVWdhVzV6ZEdGdVkyVWdkR2hoZENCemFHOTFiR1FnY21WeVpXNWtaWEl1WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWlc1eGRXVjFaVVp2Y21ObFZYQmtZWFJsT2lCbWRXNWpkR2x2Ymlod2RXSnNhV05KYm5OMFlXNWpaU2tnZTF4dUlDQWdJSFpoY2lCcGJuUmxjbTVoYkVsdWMzUmhibU5sSUQwZ1oyVjBTVzUwWlhKdVlXeEpibk4wWVc1alpWSmxZV1I1Um05eVZYQmtZWFJsS0Z4dUlDQWdJQ0FnY0hWaWJHbGpTVzV6ZEdGdVkyVXNYRzRnSUNBZ0lDQW5abTl5WTJWVmNHUmhkR1VuWEc0Z0lDQWdLVHRjYmx4dUlDQWdJR2xtSUNnaGFXNTBaWEp1WVd4SmJuTjBZVzVqWlNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmx4dUlDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYM0JsYm1ScGJtZEdiM0pqWlZWd1pHRjBaU0E5SUhSeWRXVTdYRzVjYmlBZ0lDQmxibkYxWlhWbFZYQmtZWFJsS0dsdWRHVnlibUZzU1c1emRHRnVZMlVwTzF4dUlDQjlMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWEJzWVdObGN5QmhiR3dnYjJZZ2RHaGxJSE4wWVhSbExpQkJiSGRoZVhNZ2RYTmxJSFJvYVhNZ2IzSWdZSE5sZEZOMFlYUmxZQ0IwYnlCdGRYUmhkR1VnYzNSaGRHVXVYRzRnSUNBcUlGbHZkU0J6YUc5MWJHUWdkSEpsWVhRZ1lIUm9hWE11YzNSaGRHVmdJR0Z6SUdsdGJYVjBZV0pzWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dWR2hsY21VZ2FYTWdibThnWjNWaGNtRnVkR1ZsSUhSb1lYUWdZSFJvYVhNdWMzUmhkR1ZnSUhkcGJHd2dZbVVnYVcxdFpXUnBZWFJsYkhrZ2RYQmtZWFJsWkN3Z2MyOWNiaUFnSUNvZ1lXTmpaWE56YVc1bklHQjBhR2x6TG5OMFlYUmxZQ0JoWm5SbGNpQmpZV3hzYVc1bklIUm9hWE1nYldWMGFHOWtJRzFoZVNCeVpYUjFjbTRnZEdobElHOXNaQ0IyWVd4MVpTNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRTWldGamRFTnNZWE56ZlNCd2RXSnNhV05KYm5OMFlXNWpaU0JVYUdVZ2FXNXpkR0Z1WTJVZ2RHaGhkQ0J6YUc5MWJHUWdjbVZ5Wlc1a1pYSXVYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCamIyMXdiR1YwWlZOMFlYUmxJRTVsZUhRZ2MzUmhkR1V1WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWlc1eGRXVjFaVkpsY0d4aFkyVlRkR0YwWlRvZ1puVnVZM1JwYjI0b2NIVmliR2xqU1c1emRHRnVZMlVzSUdOdmJYQnNaWFJsVTNSaGRHVXBJSHRjYmlBZ0lDQjJZWElnYVc1MFpYSnVZV3hKYm5OMFlXNWpaU0E5SUdkbGRFbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJWU1pXRmtlVVp2Y2xWd1pHRjBaU2hjYmlBZ0lDQWdJSEIxWW14cFkwbHVjM1JoYm1ObExGeHVJQ0FnSUNBZ0ozSmxjR3hoWTJWVGRHRjBaU2RjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdhV1lnS0NGcGJuUmxjbTVoYkVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNWZjR1Z1WkdsdVoxTjBZWFJsVVhWbGRXVWdQU0JiWTI5dGNHeGxkR1ZUZEdGMFpWMDdYRzRnSUNBZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmNHVnVaR2x1WjFKbGNHeGhZMlZUZEdGMFpTQTlJSFJ5ZFdVN1hHNWNiaUFnSUNCbGJuRjFaWFZsVlhCa1lYUmxLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBPMXh1SUNCOUxGeHVYRzRnSUM4cUtseHVJQ0FnS2lCVFpYUnpJR0VnYzNWaWMyVjBJRzltSUhSb1pTQnpkR0YwWlM0Z1ZHaHBjeUJ2Ym14NUlHVjRhWE4wY3lCaVpXTmhkWE5sSUY5d1pXNWthVzVuVTNSaGRHVWdhWE5jYmlBZ0lDb2dhVzUwWlhKdVlXd3VJRlJvYVhNZ2NISnZkbWxrWlhNZ1lTQnRaWEpuYVc1bklITjBjbUYwWldkNUlIUm9ZWFFnYVhNZ2JtOTBJR0YyWVdsc1lXSnNaU0IwYnlCa1pXVndYRzRnSUNBcUlIQnliM0JsY25ScFpYTWdkMmhwWTJnZ2FYTWdZMjl1Wm5WemFXNW5MaUJVVDBSUE9pQkZlSEJ2YzJVZ2NHVnVaR2x1WjFOMFlYUmxJRzl5SUdSdmJpZDBJSFZ6WlNCcGRGeHVJQ0FnS2lCa2RYSnBibWNnZEdobElHMWxjbWRsTGx4dUlDQWdLbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTJ4aGMzTjlJSEIxWW14cFkwbHVjM1JoYm1ObElGUm9aU0JwYm5OMFlXNWpaU0IwYUdGMElITm9iM1ZzWkNCeVpYSmxibVJsY2k1Y2JpQWdJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJSEJoY25ScFlXeFRkR0YwWlNCT1pYaDBJSEJoY25ScFlXd2djM1JoZEdVZ2RHOGdZbVVnYldWeVoyVmtJSGRwZEdnZ2MzUmhkR1V1WEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWlc1eGRXVjFaVk5sZEZOMFlYUmxPaUJtZFc1amRHbHZiaWh3ZFdKc2FXTkpibk4wWVc1alpTd2djR0Z5ZEdsaGJGTjBZWFJsS1NCN1hHNGdJQ0FnZG1GeUlHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVZ1BTQm5aWFJKYm5SbGNtNWhiRWx1YzNSaGJtTmxVbVZoWkhsR2IzSlZjR1JoZEdVb1hHNGdJQ0FnSUNCd2RXSnNhV05KYm5OMFlXNWpaU3hjYmlBZ0lDQWdJQ2R6WlhSVGRHRjBaU2RjYmlBZ0lDQXBPMXh1WEc0Z0lDQWdhV1lnS0NGcGJuUmxjbTVoYkVsdWMzUmhibU5sS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkbUZ5SUhGMVpYVmxJRDFjYmlBZ0lDQWdJR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXVYM0JsYm1ScGJtZFRkR0YwWlZGMVpYVmxJSHg4WEc0Z0lDQWdJQ0FvYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmY0dWdVpHbHVaMU4wWVhSbFVYVmxkV1VnUFNCYlhTazdYRzRnSUNBZ2NYVmxkV1V1Y0hWemFDaHdZWEowYVdGc1UzUmhkR1VwTzF4dVhHNGdJQ0FnWlc1eGRXVjFaVlZ3WkdGMFpTaHBiblJsY201aGJFbHVjM1JoYm1ObEtUdGNiaUFnZlN4Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVTJWMGN5QmhJSE4xWW5ObGRDQnZaaUIwYUdVZ2NISnZjSE11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JEYkdGemMzMGdjSFZpYkdsalNXNXpkR0Z1WTJVZ1ZHaGxJR2x1YzNSaGJtTmxJSFJvWVhRZ2MyaHZkV3hrSUhKbGNtVnVaR1Z5TGx4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdjR0Z5ZEdsaGJGQnliM0J6SUZOMVluTmxkQ0J2WmlCMGFHVWdibVY0ZENCd2NtOXdjeTVjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JsYm5GMVpYVmxVMlYwVUhKdmNITTZJR1oxYm1OMGFXOXVLSEIxWW14cFkwbHVjM1JoYm1ObExDQndZWEowYVdGc1VISnZjSE1wSUh0Y2JpQWdJQ0IyWVhJZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlNBOUlHZGxkRWx1ZEdWeWJtRnNTVzV6ZEdGdVkyVlNaV0ZrZVVadmNsVndaR0YwWlNoY2JpQWdJQ0FnSUhCMVlteHBZMGx1YzNSaGJtTmxMRnh1SUNBZ0lDQWdKM05sZEZCeWIzQnpKMXh1SUNBZ0lDazdYRzVjYmlBZ0lDQnBaaUFvSVdsdWRHVnlibUZzU1c1emRHRnVZMlVwSUh0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzVjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2FXNTBaWEp1WVd4SmJuTjBZVzVqWlM1ZmFYTlViM0JNWlhabGJDeGNiaUFnSUNBZ0lDZHpaWFJRY205d2N5Z3VMaTRwT2lCWmIzVWdZMkZzYkdWa0lHQnpaWFJRY205d2MyQWdiMjRnWVNBbklDdGNiaUFnSUNBZ0lDZGpiMjF3YjI1bGJuUWdkMmwwYUNCaElIQmhjbVZ1ZEM0Z1ZHaHBjeUJwY3lCaGJpQmhiblJwTFhCaGRIUmxjbTRnYzJsdVkyVWdjSEp2Y0hNZ2QybHNiQ0FuSUN0Y2JpQWdJQ0FnSUNkblpYUWdjbVZoWTNScGRtVnNlU0IxY0dSaGRHVmtJSGRvWlc0Z2NtVnVaR1Z5WldRdUlFbHVjM1JsWVdRc0lHTm9ZVzVuWlNCMGFHVWdiM2R1WlhKY1hDZHpJQ2NnSzF4dUlDQWdJQ0FnSjJCeVpXNWtaWEpnSUcxbGRHaHZaQ0IwYnlCd1lYTnpJSFJvWlNCamIzSnlaV04wSUhaaGJIVmxJR0Z6SUhCeWIzQnpJSFJ2SUhSb1pTQmpiMjF3YjI1bGJuUWdKeUFyWEc0Z0lDQWdJQ0FuZDJobGNtVWdhWFFnYVhNZ1kzSmxZWFJsWkM0blhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaHBiblJsY201aGJFbHVjM1JoYm1ObExsOXBjMVJ2Y0V4bGRtVnNLU2s3WEc1Y2JpQWdJQ0F2THlCTlpYSm5aU0IzYVhSb0lIUm9aU0J3Wlc1a2FXNW5JR1ZzWlcxbGJuUWdhV1lnYVhRZ1pYaHBjM1J6TENCdmRHaGxjbmRwYzJVZ2QybDBhQ0JsZUdsemRHbHVaMXh1SUNBZ0lDOHZJR1ZzWlcxbGJuUWdjSEp2Y0hNdVhHNGdJQ0FnZG1GeUlHVnNaVzFsYm5RZ1BTQnBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blJXeGxiV1Z1ZENCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhVzUwWlhKdVlXeEpibk4wWVc1alpTNWZZM1Z5Y21WdWRFVnNaVzFsYm5RN1hHNGdJQ0FnZG1GeUlIQnliM0J6SUQwZ1lYTnphV2R1S0h0OUxDQmxiR1Z0Wlc1MExuQnliM0J6TENCd1lYSjBhV0ZzVUhKdmNITXBPMXh1SUNBZ0lHbHVkR1Z5Ym1Gc1NXNXpkR0Z1WTJVdVgzQmxibVJwYm1kRmJHVnRaVzUwSUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU5zYjI1bFFXNWtVbVZ3YkdGalpWQnliM0J6S0Z4dUlDQWdJQ0FnWld4bGJXVnVkQ3hjYmlBZ0lDQWdJSEJ5YjNCelhHNGdJQ0FnS1R0Y2JseHVJQ0FnSUdWdWNYVmxkV1ZWY0dSaGRHVW9hVzUwWlhKdVlXeEpibk4wWVc1alpTazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGNHeGhZMlZ6SUdGc2JDQnZaaUIwYUdVZ2NISnZjSE11WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCN1VtVmhZM1JEYkdGemMzMGdjSFZpYkdsalNXNXpkR0Z1WTJVZ1ZHaGxJR2x1YzNSaGJtTmxJSFJvWVhRZ2MyaHZkV3hrSUhKbGNtVnVaR1Z5TGx4dUlDQWdLaUJBY0dGeVlXMGdlMjlpYW1WamRIMGdjSEp2Y0hNZ1RtVjNJSEJ5YjNCekxseHVJQ0FnS2lCQWFXNTBaWEp1WVd4Y2JpQWdJQ292WEc0Z0lHVnVjWFZsZFdWU1pYQnNZV05sVUhKdmNITTZJR1oxYm1OMGFXOXVLSEIxWW14cFkwbHVjM1JoYm1ObExDQndjbTl3Y3lrZ2UxeHVJQ0FnSUhaaGNpQnBiblJsY201aGJFbHVjM1JoYm1ObElEMGdaMlYwU1c1MFpYSnVZV3hKYm5OMFlXNWpaVkpsWVdSNVJtOXlWWEJrWVhSbEtGeHVJQ0FnSUNBZ2NIVmliR2xqU1c1emRHRnVZMlVzWEc0Z0lDQWdJQ0FuY21Wd2JHRmpaVkJ5YjNCekoxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCcFppQW9JV2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNWNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnYVc1MFpYSnVZV3hKYm5OMFlXNWpaUzVmYVhOVWIzQk1aWFpsYkN4Y2JpQWdJQ0FnSUNkeVpYQnNZV05sVUhKdmNITW9MaTR1S1RvZ1dXOTFJR05oYkd4bFpDQmdjbVZ3YkdGalpWQnliM0J6WUNCdmJpQmhJQ2NnSzF4dUlDQWdJQ0FnSjJOdmJYQnZibVZ1ZENCM2FYUm9JR0VnY0dGeVpXNTBMaUJVYUdseklHbHpJR0Z1SUdGdWRHa3RjR0YwZEdWeWJpQnphVzVqWlNCd2NtOXdjeUIzYVd4c0lDY2dLMXh1SUNBZ0lDQWdKMmRsZENCeVpXRmpkR2wyWld4NUlIVndaR0YwWldRZ2QyaGxiaUJ5Wlc1a1pYSmxaQzRnU1c1emRHVmhaQ3dnWTJoaGJtZGxJSFJvWlNCdmQyNWxjbHhjSjNNZ0p5QXJYRzRnSUNBZ0lDQW5ZSEpsYm1SbGNtQWdiV1YwYUc5a0lIUnZJSEJoYzNNZ2RHaGxJR052Y25KbFkzUWdkbUZzZFdVZ1lYTWdjSEp2Y0hNZ2RHOGdkR2hsSUdOdmJYQnZibVZ1ZENBbklDdGNiaUFnSUNBZ0lDZDNhR1Z5WlNCcGRDQnBjeUJqY21WaGRHVmtMaWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0dsdWRHVnlibUZzU1c1emRHRnVZMlV1WDJselZHOXdUR1YyWld3cEtUdGNibHh1SUNBZ0lDOHZJRTFsY21kbElIZHBkR2dnZEdobElIQmxibVJwYm1jZ1pXeGxiV1Z1ZENCcFppQnBkQ0JsZUdsemRITXNJRzkwYUdWeWQybHpaU0IzYVhSb0lHVjRhWE4wYVc1blhHNGdJQ0FnTHk4Z1pXeGxiV1Z1ZENCd2NtOXdjeTVjYmlBZ0lDQjJZWElnWld4bGJXVnVkQ0E5SUdsdWRHVnlibUZzU1c1emRHRnVZMlV1WDNCbGJtUnBibWRGYkdWdFpXNTBJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJuUmxjbTVoYkVsdWMzUmhibU5sTGw5amRYSnlaVzUwUld4bGJXVnVkRHRjYmlBZ0lDQnBiblJsY201aGJFbHVjM1JoYm1ObExsOXdaVzVrYVc1blJXeGxiV1Z1ZENBOUlGSmxZV04wUld4bGJXVnVkQzVqYkc5dVpVRnVaRkpsY0d4aFkyVlFjbTl3Y3loY2JpQWdJQ0FnSUdWc1pXMWxiblFzWEc0Z0lDQWdJQ0J3Y205d2MxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCbGJuRjFaWFZsVlhCa1lYUmxLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXBPMXh1SUNCOUxGeHVYRzRnSUdWdWNYVmxkV1ZGYkdWdFpXNTBTVzUwWlhKdVlXdzZJR1oxYm1OMGFXOXVLR2x1ZEdWeWJtRnNTVzV6ZEdGdVkyVXNJRzVsZDBWc1pXMWxiblFwSUh0Y2JpQWdJQ0JwYm5SbGNtNWhiRWx1YzNSaGJtTmxMbDl3Wlc1a2FXNW5SV3hsYldWdWRDQTlJRzVsZDBWc1pXMWxiblE3WEc0Z0lDQWdaVzV4ZFdWMVpWVndaR0YwWlNocGJuUmxjbTVoYkVsdWMzUmhibU5sS1R0Y2JpQWdmVnh1WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJRkpsWVdOMFZYQmtZWFJsVVhWbGRXVTdYRzRpWFgwPSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RVcGRhdGVzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FsbGJhY2tRdWV1ZSA9IHJlcXVpcmUoXCIuL0NhbGxiYWNrUXVldWVcIik7XG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKFwiLi9Qb29sZWRDbGFzc1wiKTtcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoXCIuL1JlYWN0Q3VycmVudE93bmVyXCIpO1xudmFyIFJlYWN0UGVyZiA9IHJlcXVpcmUoXCIuL1JlYWN0UGVyZlwiKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKFwiLi9SZWFjdFJlY29uY2lsZXJcIik7XG52YXIgVHJhbnNhY3Rpb24gPSByZXF1aXJlKFwiLi9UcmFuc2FjdGlvblwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgZGlydHlDb21wb25lbnRzID0gW107XG52YXIgYXNhcENhbGxiYWNrUXVldWUgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpO1xudmFyIGFzYXBFbnF1ZXVlZCA9IGZhbHNlO1xuXG52YXIgYmF0Y2hpbmdTdHJhdGVneSA9IG51bGw7XG5cbmZ1bmN0aW9uIGVuc3VyZUluamVjdGVkKCkge1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uICYmIGJhdGNoaW5nU3RyYXRlZ3ksXG4gICAgJ1JlYWN0VXBkYXRlczogbXVzdCBpbmplY3QgYSByZWNvbmNpbGUgdHJhbnNhY3Rpb24gY2xhc3MgYW5kIGJhdGNoaW5nICcgK1xuICAgICdzdHJhdGVneSdcbiAgKSA6IGludmFyaWFudChSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiAmJiBiYXRjaGluZ1N0cmF0ZWd5KSk7XG59XG5cbnZhciBORVNURURfVVBEQVRFUyA9IHtcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggPSBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoO1xuICB9LFxuICBjbG9zZTogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoICE9PSBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBBZGRpdGlvbmFsIHVwZGF0ZXMgd2VyZSBlbnF1ZXVlZCBieSBjb21wb25lbnREaWRVcGRhdGUgaGFuZGxlcnMgb3JcbiAgICAgIC8vIHNpbWlsYXI7IGJlZm9yZSBvdXIgb3duIFVQREFURV9RVUVVRUlORyB3cmFwcGVyIGNsb3Nlcywgd2Ugd2FudCB0byBydW5cbiAgICAgIC8vIHRoZXNlIG5ldyB1cGRhdGVzIHNvIHRoYXQgaWYgQSdzIGNvbXBvbmVudERpZFVwZGF0ZSBjYWxscyBzZXRTdGF0ZSBvblxuICAgICAgLy8gQiwgQiB3aWxsIHVwZGF0ZSBiZWZvcmUgdGhlIGNhbGxiYWNrIEEncyB1cGRhdGVyIHByb3ZpZGVkIHdoZW4gY2FsbGluZ1xuICAgICAgLy8gc2V0U3RhdGUuXG4gICAgICBkaXJ0eUNvbXBvbmVudHMuc3BsaWNlKDAsIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoKTtcbiAgICAgIGZsdXNoQmF0Y2hlZFVwZGF0ZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlydHlDb21wb25lbnRzLmxlbmd0aCA9IDA7XG4gICAgfVxuICB9XG59O1xuXG52YXIgVVBEQVRFX1FVRVVFSU5HID0ge1xuICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNhbGxiYWNrUXVldWUucmVzZXQoKTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2FsbGJhY2tRdWV1ZS5ub3RpZnlBbGwoKTtcbiAgfVxufTtcblxudmFyIFRSQU5TQUNUSU9OX1dSQVBQRVJTID0gW05FU1RFRF9VUERBVEVTLCBVUERBVEVfUVVFVUVJTkddO1xuXG5mdW5jdGlvbiBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uKCkge1xuICB0aGlzLnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG4gIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoID0gbnVsbDtcbiAgdGhpcy5jYWxsYmFja1F1ZXVlID0gQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQoKTtcbiAgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbiA9XG4gICAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7XG59XG5cbmFzc2lnbihcbiAgUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbi5wcm90b3R5cGUsXG4gIFRyYW5zYWN0aW9uLk1peGluLCB7XG4gIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfSxcblxuICBkZXN0cnVjdG9yOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCA9IG51bGw7XG4gICAgQ2FsbGJhY2tRdWV1ZS5yZWxlYXNlKHRoaXMuY2FsbGJhY2tRdWV1ZSk7XG4gICAgdGhpcy5jYWxsYmFja1F1ZXVlID0gbnVsbDtcbiAgICBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5yZWxlYXNlKHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24pO1xuICAgIHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24gPSBudWxsO1xuICB9LFxuXG4gIHBlcmZvcm06IGZ1bmN0aW9uKG1ldGhvZCwgc2NvcGUsIGEpIHtcbiAgICAvLyBFc3NlbnRpYWxseSBjYWxscyBgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbi5wZXJmb3JtKG1ldGhvZCwgc2NvcGUsIGEpYFxuICAgIC8vIHdpdGggdGhpcyB0cmFuc2FjdGlvbidzIHdyYXBwZXJzIGFyb3VuZCBpdC5cbiAgICByZXR1cm4gVHJhbnNhY3Rpb24uTWl4aW4ucGVyZm9ybS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24ucGVyZm9ybSxcbiAgICAgIHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24sXG4gICAgICBtZXRob2QsXG4gICAgICBzY29wZSxcbiAgICAgIGFcbiAgICApO1xuICB9XG59KTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24pO1xuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyhjYWxsYmFjaywgYSwgYiwgYywgZCkge1xuICBlbnN1cmVJbmplY3RlZCgpO1xuICBiYXRjaGluZ1N0cmF0ZWd5LmJhdGNoZWRVcGRhdGVzKGNhbGxiYWNrLCBhLCBiLCBjLCBkKTtcbn1cblxuLyoqXG4gKiBBcnJheSBjb21wYXJhdG9yIGZvciBSZWFjdENvbXBvbmVudHMgYnkgbW91bnQgb3JkZXJpbmcuXG4gKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gYzEgZmlyc3QgY29tcG9uZW50IHlvdSdyZSBjb21wYXJpbmdcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGMyIHNlY29uZCBjb21wb25lbnQgeW91J3JlIGNvbXBhcmluZ1xuICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm4gdmFsdWUgdXNhYmxlIGJ5IEFycmF5LnByb3RvdHlwZS5zb3J0KCkuXG4gKi9cbmZ1bmN0aW9uIG1vdW50T3JkZXJDb21wYXJhdG9yKGMxLCBjMikge1xuICByZXR1cm4gYzEuX21vdW50T3JkZXIgLSBjMi5fbW91bnRPcmRlcjtcbn1cblxuZnVuY3Rpb24gcnVuQmF0Y2hlZFVwZGF0ZXModHJhbnNhY3Rpb24pIHtcbiAgdmFyIGxlbiA9IHRyYW5zYWN0aW9uLmRpcnR5Q29tcG9uZW50c0xlbmd0aDtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBsZW4gPT09IGRpcnR5Q29tcG9uZW50cy5sZW5ndGgsXG4gICAgJ0V4cGVjdGVkIGZsdXNoIHRyYW5zYWN0aW9uXFwncyBzdG9yZWQgZGlydHktY29tcG9uZW50cyBsZW5ndGggKCVzKSB0byAnICtcbiAgICAnbWF0Y2ggZGlydHktY29tcG9uZW50cyBhcnJheSBsZW5ndGggKCVzKS4nLFxuICAgIGxlbixcbiAgICBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoXG4gICkgOiBpbnZhcmlhbnQobGVuID09PSBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoKSk7XG5cbiAgLy8gU2luY2UgcmVjb25jaWxpbmcgYSBjb21wb25lbnQgaGlnaGVyIGluIHRoZSBvd25lciBoaWVyYXJjaHkgdXN1YWxseSAobm90XG4gIC8vIGFsd2F5cyAtLSBzZWUgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkpIHdpbGwgcmVjb25jaWxlIGNoaWxkcmVuLCByZWNvbmNpbGVcbiAgLy8gdGhlbSBiZWZvcmUgdGhlaXIgY2hpbGRyZW4gYnkgc29ydGluZyB0aGUgYXJyYXkuXG4gIGRpcnR5Q29tcG9uZW50cy5zb3J0KG1vdW50T3JkZXJDb21wYXJhdG9yKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgLy8gSWYgYSBjb21wb25lbnQgaXMgdW5tb3VudGVkIGJlZm9yZSBwZW5kaW5nIGNoYW5nZXMgYXBwbHksIGl0IHdpbGwgc3RpbGxcbiAgICAvLyBiZSBoZXJlLCBidXQgd2UgYXNzdW1lIHRoYXQgaXQgaGFzIGNsZWFyZWQgaXRzIF9wZW5kaW5nQ2FsbGJhY2tzIGFuZFxuICAgIC8vIHRoYXQgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5IGlzIGEgbm9vcC5cbiAgICB2YXIgY29tcG9uZW50ID0gZGlydHlDb21wb25lbnRzW2ldO1xuXG4gICAgLy8gSWYgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5IGhhcHBlbnMgdG8gZW5xdWV1ZSBhbnkgbmV3IHVwZGF0ZXMsIHdlXG4gICAgLy8gc2hvdWxkbid0IGV4ZWN1dGUgdGhlIGNhbGxiYWNrcyB1bnRpbCB0aGUgbmV4dCByZW5kZXIgaGFwcGVucywgc29cbiAgICAvLyBzdGFzaCB0aGUgY2FsbGJhY2tzIGZpcnN0XG4gICAgdmFyIGNhbGxiYWNrcyA9IGNvbXBvbmVudC5fcGVuZGluZ0NhbGxiYWNrcztcbiAgICBjb21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsO1xuXG4gICAgUmVhY3RSZWNvbmNpbGVyLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeShcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIHRyYW5zYWN0aW9uLnJlY29uY2lsZVRyYW5zYWN0aW9uXG4gICAgKTtcblxuICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2FsbGJhY2tzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLmNhbGxiYWNrUXVldWUuZW5xdWV1ZShcbiAgICAgICAgICBjYWxsYmFja3Nbal0sXG4gICAgICAgICAgY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGZsdXNoQmF0Y2hlZFVwZGF0ZXMgPSBmdW5jdGlvbigpIHtcbiAgLy8gUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbidzIHdyYXBwZXJzIHdpbGwgY2xlYXIgdGhlIGRpcnR5Q29tcG9uZW50c1xuICAvLyBhcnJheSBhbmQgcGVyZm9ybSBhbnkgdXBkYXRlcyBlbnF1ZXVlZCBieSBtb3VudC1yZWFkeSBoYW5kbGVycyAoaS5lLixcbiAgLy8gY29tcG9uZW50RGlkVXBkYXRlKSBidXQgd2UgbmVlZCB0byBjaGVjayBoZXJlIHRvbyBpbiBvcmRlciB0byBjYXRjaFxuICAvLyB1cGRhdGVzIGVucXVldWVkIGJ5IHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgYXNhcCBjYWxscy5cbiAgd2hpbGUgKGRpcnR5Q29tcG9uZW50cy5sZW5ndGggfHwgYXNhcEVucXVldWVkKSB7XG4gICAgaWYgKGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgIHZhciB0cmFuc2FjdGlvbiA9IFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24uZ2V0UG9vbGVkKCk7XG4gICAgICB0cmFuc2FjdGlvbi5wZXJmb3JtKHJ1bkJhdGNoZWRVcGRhdGVzLCBudWxsLCB0cmFuc2FjdGlvbik7XG4gICAgICBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLnJlbGVhc2UodHJhbnNhY3Rpb24pO1xuICAgIH1cblxuICAgIGlmIChhc2FwRW5xdWV1ZWQpIHtcbiAgICAgIGFzYXBFbnF1ZXVlZCA9IGZhbHNlO1xuICAgICAgdmFyIHF1ZXVlID0gYXNhcENhbGxiYWNrUXVldWU7XG4gICAgICBhc2FwQ2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKCk7XG4gICAgICBxdWV1ZS5ub3RpZnlBbGwoKTtcbiAgICAgIENhbGxiYWNrUXVldWUucmVsZWFzZShxdWV1ZSk7XG4gICAgfVxuICB9XG59O1xuZmx1c2hCYXRjaGVkVXBkYXRlcyA9IFJlYWN0UGVyZi5tZWFzdXJlKFxuICAnUmVhY3RVcGRhdGVzJyxcbiAgJ2ZsdXNoQmF0Y2hlZFVwZGF0ZXMnLFxuICBmbHVzaEJhdGNoZWRVcGRhdGVzXG4pO1xuXG4vKipcbiAqIE1hcmsgYSBjb21wb25lbnQgYXMgbmVlZGluZyBhIHJlcmVuZGVyLCBhZGRpbmcgYW4gb3B0aW9uYWwgY2FsbGJhY2sgdG8gYVxuICogbGlzdCBvZiBmdW5jdGlvbnMgd2hpY2ggd2lsbCBiZSBleGVjdXRlZCBvbmNlIHRoZSByZXJlbmRlciBvY2N1cnMuXG4gKi9cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoY29tcG9uZW50KSB7XG4gIGVuc3VyZUluamVjdGVkKCk7XG5cbiAgLy8gVmFyaW91cyBwYXJ0cyBvZiBvdXIgY29kZSAoc3VjaCBhcyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdzXG4gIC8vIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQpIGFzc3VtZSB0aGF0IGNhbGxzIHRvIHJlbmRlciBhcmVuJ3QgbmVzdGVkO1xuICAvLyB2ZXJpZnkgdGhhdCB0aGF0J3MgdGhlIGNhc2UuIChUaGlzIGlzIGNhbGxlZCBieSBlYWNoIHRvcC1sZXZlbCB1cGRhdGVcbiAgLy8gZnVuY3Rpb24sIGxpa2Ugc2V0UHJvcHMsIHNldFN0YXRlLCBmb3JjZVVwZGF0ZSwgZXRjLjsgY3JlYXRpb24gYW5kXG4gIC8vIGRlc3RydWN0aW9uIG9mIHRvcC1sZXZlbCBjb21wb25lbnRzIGlzIGd1YXJkZWQgaW4gUmVhY3RNb3VudC4pXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCxcbiAgICAnZW5xdWV1ZVVwZGF0ZSgpOiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzICcgK1xuICAgICdhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCAnICtcbiAgICAnYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluICcgK1xuICAgICdjb21wb25lbnREaWRVcGRhdGUuJ1xuICApIDogbnVsbCk7XG5cbiAgaWYgKCFiYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzKSB7XG4gICAgYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyhlbnF1ZXVlVXBkYXRlLCBjb21wb25lbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRpcnR5Q29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRvIGJlIHJ1biBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJhdGNoaW5nIGN5Y2xlLiBUaHJvd3NcbiAqIGlmIG5vIHVwZGF0ZXMgYXJlIGN1cnJlbnRseSBiZWluZyBwZXJmb3JtZWQuXG4gKi9cbmZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBiYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzLFxuICAgICdSZWFjdFVwZGF0ZXMuYXNhcDogQ2FuXFwndCBlbnF1ZXVlIGFuIGFzYXAgY2FsbGJhY2sgaW4gYSBjb250ZXh0IHdoZXJlJyArXG4gICAgJ3VwZGF0ZXMgYXJlIG5vdCBiZWluZyBiYXRjaGVkLidcbiAgKSA6IGludmFyaWFudChiYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzKSk7XG4gIGFzYXBDYWxsYmFja1F1ZXVlLmVucXVldWUoY2FsbGJhY2ssIGNvbnRleHQpO1xuICBhc2FwRW5xdWV1ZWQgPSB0cnVlO1xufVxuXG52YXIgUmVhY3RVcGRhdGVzSW5qZWN0aW9uID0ge1xuICBpbmplY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjogZnVuY3Rpb24oUmVjb25jaWxlVHJhbnNhY3Rpb24pIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgUmVjb25jaWxlVHJhbnNhY3Rpb24sXG4gICAgICAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYSByZWNvbmNpbGUgdHJhbnNhY3Rpb24gY2xhc3MnXG4gICAgKSA6IGludmFyaWFudChSZWNvbmNpbGVUcmFuc2FjdGlvbikpO1xuICAgIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0gUmVjb25jaWxlVHJhbnNhY3Rpb247XG4gIH0sXG5cbiAgaW5qZWN0QmF0Y2hpbmdTdHJhdGVneTogZnVuY3Rpb24oX2JhdGNoaW5nU3RyYXRlZ3kpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgX2JhdGNoaW5nU3RyYXRlZ3ksXG4gICAgICAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYSBiYXRjaGluZyBzdHJhdGVneSdcbiAgICApIDogaW52YXJpYW50KF9iYXRjaGluZ1N0cmF0ZWd5KSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIHR5cGVvZiBfYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICdSZWFjdFVwZGF0ZXM6IG11c3QgcHJvdmlkZSBhIGJhdGNoZWRVcGRhdGVzKCkgZnVuY3Rpb24nXG4gICAgKSA6IGludmFyaWFudCh0eXBlb2YgX2JhdGNoaW5nU3RyYXRlZ3kuYmF0Y2hlZFVwZGF0ZXMgPT09ICdmdW5jdGlvbicpKTtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIF9iYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID09PSAnYm9vbGVhbicsXG4gICAgICAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYW4gaXNCYXRjaGluZ1VwZGF0ZXMgYm9vbGVhbiBhdHRyaWJ1dGUnXG4gICAgKSA6IGludmFyaWFudCh0eXBlb2YgX2JhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPT09ICdib29sZWFuJykpO1xuICAgIGJhdGNoaW5nU3RyYXRlZ3kgPSBfYmF0Y2hpbmdTdHJhdGVneTtcbiAgfVxufTtcblxudmFyIFJlYWN0VXBkYXRlcyA9IHtcbiAgLyoqXG4gICAqIFJlYWN0IHJlZmVyZW5jZXMgYFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb25gIHVzaW5nIHRoaXMgcHJvcGVydHkgaW4gb3JkZXJcbiAgICogdG8gYWxsb3cgZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjogbnVsbCxcblxuICBiYXRjaGVkVXBkYXRlczogYmF0Y2hlZFVwZGF0ZXMsXG4gIGVucXVldWVVcGRhdGU6IGVucXVldWVVcGRhdGUsXG4gIGZsdXNoQmF0Y2hlZFVwZGF0ZXM6IGZsdXNoQmF0Y2hlZFVwZGF0ZXMsXG4gIGluamVjdGlvbjogUmVhY3RVcGRhdGVzSW5qZWN0aW9uLFxuICBhc2FwOiBhc2FwXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VXBkYXRlcztcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlVtVmhZM1JWY0dSaGRHVnpMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JTWldGamRGVndaR0YwWlhOY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQkRZV3hzWW1GamExRjFaWFZsSUQwZ2NtVnhkV2x5WlNoY0lpNHZRMkZzYkdKaFkydFJkV1YxWlZ3aUtUdGNiblpoY2lCUWIyOXNaV1JEYkdGemN5QTlJSEpsY1hWcGNtVW9YQ0l1TDFCdmIyeGxaRU5zWVhOelhDSXBPMXh1ZG1GeUlGSmxZV04wUTNWeWNtVnVkRTkzYm1WeUlEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkRkWEp5Wlc1MFQzZHVaWEpjSWlrN1hHNTJZWElnVW1WaFkzUlFaWEptSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSUVpYSm1YQ0lwTzF4dWRtRnlJRkpsWVdOMFVtVmpiMjVqYVd4bGNpQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBVbVZqYjI1amFXeGxjbHdpS1R0Y2JuWmhjaUJVY21GdWMyRmpkR2x2YmlBOUlISmxjWFZwY21Vb1hDSXVMMVJ5WVc1ellXTjBhVzl1WENJcE8xeHVYRzUyWVhJZ1lYTnphV2R1SUQwZ2NtVnhkV2x5WlNoY0lpNHZUMkpxWldOMExtRnpjMmxuYmx3aUtUdGNiblpoY2lCcGJuWmhjbWxoYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlwYm5aaGNtbGhiblJjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQmthWEowZVVOdmJYQnZibVZ1ZEhNZ1BTQmJYVHRjYm5aaGNpQmhjMkZ3UTJGc2JHSmhZMnRSZFdWMVpTQTlJRU5oYkd4aVlXTnJVWFZsZFdVdVoyVjBVRzl2YkdWa0tDazdYRzUyWVhJZ1lYTmhjRVZ1Y1hWbGRXVmtJRDBnWm1Gc2MyVTdYRzVjYm5aaGNpQmlZWFJqYUdsdVoxTjBjbUYwWldkNUlEMGdiblZzYkR0Y2JseHVablZ1WTNScGIyNGdaVzV6ZFhKbFNXNXFaV04wWldRb0tTQjdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdVbVZoWTNSVmNHUmhkR1Z6TGxKbFlXTjBVbVZqYjI1amFXeGxWSEpoYm5OaFkzUnBiMjRnSmlZZ1ltRjBZMmhwYm1kVGRISmhkR1ZuZVN4Y2JpQWdJQ0FuVW1WaFkzUlZjR1JoZEdWek9pQnRkWE4wSUdsdWFtVmpkQ0JoSUhKbFkyOXVZMmxzWlNCMGNtRnVjMkZqZEdsdmJpQmpiR0Z6Y3lCaGJtUWdZbUYwWTJocGJtY2dKeUFyWEc0Z0lDQWdKM04wY21GMFpXZDVKMXh1SUNBcElEb2dhVzUyWVhKcFlXNTBLRkpsWVdOMFZYQmtZWFJsY3k1U1pXRmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1SUNZbUlHSmhkR05vYVc1blUzUnlZWFJsWjNrcEtUdGNibjFjYmx4dWRtRnlJRTVGVTFSRlJGOVZVRVJCVkVWVElEMGdlMXh1SUNCcGJtbDBhV0ZzYVhwbE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjBhR2x6TG1ScGNuUjVRMjl0Y0c5dVpXNTBjMHhsYm1kMGFDQTlJR1JwY25SNVEyOXRjRzl1Wlc1MGN5NXNaVzVuZEdnN1hHNGdJSDBzWEc0Z0lHTnNiM05sT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCcFppQW9kR2hwY3k1a2FYSjBlVU52YlhCdmJtVnVkSE5NWlc1bmRHZ2dJVDA5SUdScGNuUjVRMjl0Y0c5dVpXNTBjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQzh2SUVGa1pHbDBhVzl1WVd3Z2RYQmtZWFJsY3lCM1pYSmxJR1Z1Y1hWbGRXVmtJR0o1SUdOdmJYQnZibVZ1ZEVScFpGVndaR0YwWlNCb1lXNWtiR1Z5Y3lCdmNseHVJQ0FnSUNBZ0x5OGdjMmx0YVd4aGNqc2dZbVZtYjNKbElHOTFjaUJ2ZDI0Z1ZWQkVRVlJGWDFGVlJWVkZTVTVISUhkeVlYQndaWElnWTJ4dmMyVnpMQ0IzWlNCM1lXNTBJSFJ2SUhKMWJseHVJQ0FnSUNBZ0x5OGdkR2hsYzJVZ2JtVjNJSFZ3WkdGMFpYTWdjMjhnZEdoaGRDQnBaaUJCSjNNZ1kyOXRjRzl1Wlc1MFJHbGtWWEJrWVhSbElHTmhiR3h6SUhObGRGTjBZWFJsSUc5dVhHNGdJQ0FnSUNBdkx5QkNMQ0JDSUhkcGJHd2dkWEJrWVhSbElHSmxabTl5WlNCMGFHVWdZMkZzYkdKaFkyc2dRU2R6SUhWd1pHRjBaWElnY0hKdmRtbGtaV1FnZDJobGJpQmpZV3hzYVc1blhHNGdJQ0FnSUNBdkx5QnpaWFJUZEdGMFpTNWNiaUFnSUNBZ0lHUnBjblI1UTI5dGNHOXVaVzUwY3k1emNHeHBZMlVvTUN3Z2RHaHBjeTVrYVhKMGVVTnZiWEJ2Ym1WdWRITk1aVzVuZEdncE8xeHVJQ0FnSUNBZ1pteDFjMmhDWVhSamFHVmtWWEJrWVhSbGN5Z3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCa2FYSjBlVU52YlhCdmJtVnVkSE11YkdWdVozUm9JRDBnTUR0Y2JpQWdJQ0I5WEc0Z0lIMWNibjA3WEc1Y2JuWmhjaUJWVUVSQlZFVmZVVlZGVlVWSlRrY2dQU0I3WEc0Z0lHbHVhWFJwWVd4cGVtVTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSFJvYVhNdVkyRnNiR0poWTJ0UmRXVjFaUzV5WlhObGRDZ3BPMXh1SUNCOUxGeHVJQ0JqYkc5elpUb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1allXeHNZbUZqYTFGMVpYVmxMbTV2ZEdsbWVVRnNiQ2dwTzF4dUlDQjlYRzU5TzF4dVhHNTJZWElnVkZKQlRsTkJRMVJKVDA1ZlYxSkJVRkJGVWxNZ1BTQmJUa1ZUVkVWRVgxVlFSRUZVUlZNc0lGVlFSRUZVUlY5UlZVVlZSVWxPUjEwN1hHNWNibVoxYm1OMGFXOXVJRkpsWVdOMFZYQmtZWFJsYzBac2RYTm9WSEpoYm5OaFkzUnBiMjRvS1NCN1hHNGdJSFJvYVhNdWNtVnBibWwwYVdGc2FYcGxWSEpoYm5OaFkzUnBiMjRvS1R0Y2JpQWdkR2hwY3k1a2FYSjBlVU52YlhCdmJtVnVkSE5NWlc1bmRHZ2dQU0J1ZFd4c08xeHVJQ0IwYUdsekxtTmhiR3hpWVdOclVYVmxkV1VnUFNCRFlXeHNZbUZqYTFGMVpYVmxMbWRsZEZCdmIyeGxaQ2dwTzF4dUlDQjBhR2x6TG5KbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUlEMWNiaUFnSUNCU1pXRmpkRlZ3WkdGMFpYTXVVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpNW5aWFJRYjI5c1pXUW9LVHRjYm4xY2JseHVZWE56YVdkdUtGeHVJQ0JTWldGamRGVndaR0YwWlhOR2JIVnphRlJ5WVc1ellXTjBhVzl1TG5CeWIzUnZkSGx3WlN4Y2JpQWdWSEpoYm5OaFkzUnBiMjR1VFdsNGFXNHNJSHRjYmlBZ1oyVjBWSEpoYm5OaFkzUnBiMjVYY21Gd2NHVnljem9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRlJTUVU1VFFVTlVTVTlPWDFkU1FWQlFSVkpUTzF4dUlDQjlMRnh1WEc0Z0lHUmxjM1J5ZFdOMGIzSTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSFJvYVhNdVpHbHlkSGxEYjIxd2IyNWxiblJ6VEdWdVozUm9JRDBnYm5Wc2JEdGNiaUFnSUNCRFlXeHNZbUZqYTFGMVpYVmxMbkpsYkdWaGMyVW9kR2hwY3k1allXeHNZbUZqYTFGMVpYVmxLVHRjYmlBZ0lDQjBhR2x6TG1OaGJHeGlZV05yVVhWbGRXVWdQU0J1ZFd4c08xeHVJQ0FnSUZKbFlXTjBWWEJrWVhSbGN5NVNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUxuSmxiR1ZoYzJVb2RHaHBjeTV5WldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2YmlrN1hHNGdJQ0FnZEdocGN5NXlaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZiaUE5SUc1MWJHdzdYRzRnSUgwc1hHNWNiaUFnY0dWeVptOXliVG9nWm5WdVkzUnBiMjRvYldWMGFHOWtMQ0J6WTI5d1pTd2dZU2tnZTF4dUlDQWdJQzh2SUVWemMyVnVkR2xoYkd4NUlHTmhiR3h6SUdCMGFHbHpMbkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1TG5CbGNtWnZjbTBvYldWMGFHOWtMQ0J6WTI5d1pTd2dZU2xnWEc0Z0lDQWdMeThnZDJsMGFDQjBhR2x6SUhSeVlXNXpZV04wYVc5dUozTWdkM0poY0hCbGNuTWdZWEp2ZFc1a0lHbDBMbHh1SUNBZ0lISmxkSFZ5YmlCVWNtRnVjMkZqZEdsdmJpNU5hWGhwYmk1d1pYSm1iM0p0TG1OaGJHd29YRzRnSUNBZ0lDQjBhR2x6TEZ4dUlDQWdJQ0FnZEdocGN5NXlaV052Ym1OcGJHVlVjbUZ1YzJGamRHbHZiaTV3WlhKbWIzSnRMRnh1SUNBZ0lDQWdkR2hwY3k1eVpXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpeGNiaUFnSUNBZ0lHMWxkR2h2WkN4Y2JpQWdJQ0FnSUhOamIzQmxMRnh1SUNBZ0lDQWdZVnh1SUNBZ0lDazdYRzRnSUgxY2JuMHBPMXh1WEc1UWIyOXNaV1JEYkdGemN5NWhaR1JRYjI5c2FXNW5WRzhvVW1WaFkzUlZjR1JoZEdWelJteDFjMmhVY21GdWMyRmpkR2x2YmlrN1hHNWNibVoxYm1OMGFXOXVJR0poZEdOb1pXUlZjR1JoZEdWektHTmhiR3hpWVdOckxDQmhMQ0JpTENCakxDQmtLU0I3WEc0Z0lHVnVjM1Z5WlVsdWFtVmpkR1ZrS0NrN1hHNGdJR0poZEdOb2FXNW5VM1J5WVhSbFoza3VZbUYwWTJobFpGVndaR0YwWlhNb1kyRnNiR0poWTJzc0lHRXNJR0lzSUdNc0lHUXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFRnljbUY1SUdOdmJYQmhjbUYwYjNJZ1ptOXlJRkpsWVdOMFEyOXRjRzl1Wlc1MGN5QmllU0J0YjNWdWRDQnZjbVJsY21sdVp5NWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UxSmxZV04wUTI5dGNHOXVaVzUwZlNCak1TQm1hWEp6ZENCamIyMXdiMjVsYm5RZ2VXOTFKM0psSUdOdmJYQmhjbWx1WjF4dUlDb2dRSEJoY21GdElIdFNaV0ZqZEVOdmJYQnZibVZ1ZEgwZ1l6SWdjMlZqYjI1a0lHTnZiWEJ2Ym1WdWRDQjViM1VuY21VZ1kyOXRjR0Z5YVc1blhHNGdLaUJBY21WMGRYSnVJSHR1ZFcxaVpYSjlJRkpsZEhWeWJpQjJZV3gxWlNCMWMyRmliR1VnWW5rZ1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5OdmNuUW9LUzVjYmlBcUwxeHVablZ1WTNScGIyNGdiVzkxYm5SUGNtUmxja052YlhCaGNtRjBiM0lvWXpFc0lHTXlLU0I3WEc0Z0lISmxkSFZ5YmlCak1TNWZiVzkxYm5SUGNtUmxjaUF0SUdNeUxsOXRiM1Z1ZEU5eVpHVnlPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnlkVzVDWVhSamFHVmtWWEJrWVhSbGN5aDBjbUZ1YzJGamRHbHZiaWtnZTF4dUlDQjJZWElnYkdWdUlEMGdkSEpoYm5OaFkzUnBiMjR1WkdseWRIbERiMjF3YjI1bGJuUnpUR1Z1WjNSb08xeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lHeGxiaUE5UFQwZ1pHbHlkSGxEYjIxd2IyNWxiblJ6TG14bGJtZDBhQ3hjYmlBZ0lDQW5SWGh3WldOMFpXUWdabXgxYzJnZ2RISmhibk5oWTNScGIyNWNYQ2R6SUhOMGIzSmxaQ0JrYVhKMGVTMWpiMjF3YjI1bGJuUnpJR3hsYm1kMGFDQW9KWE1wSUhSdklDY2dLMXh1SUNBZ0lDZHRZWFJqYUNCa2FYSjBlUzFqYjIxd2IyNWxiblJ6SUdGeWNtRjVJR3hsYm1kMGFDQW9KWE1wTGljc1hHNGdJQ0FnYkdWdUxGeHVJQ0FnSUdScGNuUjVRMjl0Y0c5dVpXNTBjeTVzWlc1bmRHaGNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaHNaVzRnUFQwOUlHUnBjblI1UTI5dGNHOXVaVzUwY3k1c1pXNW5kR2dwS1R0Y2JseHVJQ0F2THlCVGFXNWpaU0J5WldOdmJtTnBiR2x1WnlCaElHTnZiWEJ2Ym1WdWRDQm9hV2RvWlhJZ2FXNGdkR2hsSUc5M2JtVnlJR2hwWlhKaGNtTm9lU0IxYzNWaGJHeDVJQ2h1YjNSY2JpQWdMeThnWVd4M1lYbHpJQzB0SUhObFpTQnphRzkxYkdSRGIyMXdiMjVsYm5SVmNHUmhkR1VvS1NrZ2QybHNiQ0J5WldOdmJtTnBiR1VnWTJocGJHUnlaVzRzSUhKbFkyOXVZMmxzWlZ4dUlDQXZMeUIwYUdWdElHSmxabTl5WlNCMGFHVnBjaUJqYUdsc1pISmxiaUJpZVNCemIzSjBhVzVuSUhSb1pTQmhjbkpoZVM1Y2JpQWdaR2x5ZEhsRGIyMXdiMjVsYm5SekxuTnZjblFvYlc5MWJuUlBjbVJsY2tOdmJYQmhjbUYwYjNJcE8xeHVYRzRnSUdadmNpQW9kbUZ5SUdrZ1BTQXdPeUJwSUR3Z2JHVnVPeUJwS3lzcElIdGNiaUFnSUNBdkx5QkpaaUJoSUdOdmJYQnZibVZ1ZENCcGN5QjFibTF2ZFc1MFpXUWdZbVZtYjNKbElIQmxibVJwYm1jZ1kyaGhibWRsY3lCaGNIQnNlU3dnYVhRZ2QybHNiQ0J6ZEdsc2JGeHVJQ0FnSUM4dklHSmxJR2hsY21Vc0lHSjFkQ0IzWlNCaGMzTjFiV1VnZEdoaGRDQnBkQ0JvWVhNZ1kyeGxZWEpsWkNCcGRITWdYM0JsYm1ScGJtZERZV3hzWW1GamEzTWdZVzVrWEc0Z0lDQWdMeThnZEdoaGRDQndaWEptYjNKdFZYQmtZWFJsU1daT1pXTmxjM05oY25rZ2FYTWdZU0J1YjI5d0xseHVJQ0FnSUhaaGNpQmpiMjF3YjI1bGJuUWdQU0JrYVhKMGVVTnZiWEJ2Ym1WdWRITmJhVjA3WEc1Y2JpQWdJQ0F2THlCSlppQndaWEptYjNKdFZYQmtZWFJsU1daT1pXTmxjM05oY25rZ2FHRndjR1Z1Y3lCMGJ5QmxibkYxWlhWbElHRnVlU0J1WlhjZ2RYQmtZWFJsY3l3Z2QyVmNiaUFnSUNBdkx5QnphRzkxYkdSdUozUWdaWGhsWTNWMFpTQjBhR1VnWTJGc2JHSmhZMnR6SUhWdWRHbHNJSFJvWlNCdVpYaDBJSEpsYm1SbGNpQm9ZWEJ3Wlc1ekxDQnpiMXh1SUNBZ0lDOHZJSE4wWVhOb0lIUm9aU0JqWVd4c1ltRmphM01nWm1seWMzUmNiaUFnSUNCMllYSWdZMkZzYkdKaFkydHpJRDBnWTI5dGNHOXVaVzUwTGw5d1pXNWthVzVuUTJGc2JHSmhZMnR6TzF4dUlDQWdJR052YlhCdmJtVnVkQzVmY0dWdVpHbHVaME5oYkd4aVlXTnJjeUE5SUc1MWJHdzdYRzVjYmlBZ0lDQlNaV0ZqZEZKbFkyOXVZMmxzWlhJdWNHVnlabTl5YlZWd1pHRjBaVWxtVG1WalpYTnpZWEo1S0Z4dUlDQWdJQ0FnWTI5dGNHOXVaVzUwTEZ4dUlDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0dWNtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNWNiaUFnSUNBcE8xeHVYRzRnSUNBZ2FXWWdLR05oYkd4aVlXTnJjeWtnZTF4dUlDQWdJQ0FnWm05eUlDaDJZWElnYWlBOUlEQTdJR29nUENCallXeHNZbUZqYTNNdWJHVnVaM1JvT3lCcUt5c3BJSHRjYmlBZ0lDQWdJQ0FnZEhKaGJuTmhZM1JwYjI0dVkyRnNiR0poWTJ0UmRXVjFaUzVsYm5GMVpYVmxLRnh1SUNBZ0lDQWdJQ0FnSUdOaGJHeGlZV05yYzF0cVhTeGNiaUFnSUNBZ0lDQWdJQ0JqYjIxd2IyNWxiblF1WjJWMFVIVmliR2xqU1c1emRHRnVZMlVvS1Z4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dVhHNTJZWElnWm14MWMyaENZWFJqYUdWa1ZYQmtZWFJsY3lBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNBdkx5QlNaV0ZqZEZWd1pHRjBaWE5HYkhWemFGUnlZVzV6WVdOMGFXOXVKM01nZDNKaGNIQmxjbk1nZDJsc2JDQmpiR1ZoY2lCMGFHVWdaR2x5ZEhsRGIyMXdiMjVsYm5SelhHNGdJQzh2SUdGeWNtRjVJR0Z1WkNCd1pYSm1iM0p0SUdGdWVTQjFjR1JoZEdWeklHVnVjWFZsZFdWa0lHSjVJRzF2ZFc1MExYSmxZV1I1SUdoaGJtUnNaWEp6SUNocExtVXVMRnh1SUNBdkx5QmpiMjF3YjI1bGJuUkVhV1JWY0dSaGRHVXBJR0oxZENCM1pTQnVaV1ZrSUhSdklHTm9aV05ySUdobGNtVWdkRzl2SUdsdUlHOXlaR1Z5SUhSdklHTmhkR05vWEc0Z0lDOHZJSFZ3WkdGMFpYTWdaVzV4ZFdWMVpXUWdZbmtnYzJWMFUzUmhkR1VnWTJGc2JHSmhZMnR6SUdGdVpDQmhjMkZ3SUdOaGJHeHpMbHh1SUNCM2FHbHNaU0FvWkdseWRIbERiMjF3YjI1bGJuUnpMbXhsYm1kMGFDQjhmQ0JoYzJGd1JXNXhkV1YxWldRcElIdGNiaUFnSUNCcFppQW9aR2x5ZEhsRGIyMXdiMjVsYm5SekxteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ2RtRnlJSFJ5WVc1ellXTjBhVzl1SUQwZ1VtVmhZM1JWY0dSaGRHVnpSbXgxYzJoVWNtRnVjMkZqZEdsdmJpNW5aWFJRYjI5c1pXUW9LVHRjYmlBZ0lDQWdJSFJ5WVc1ellXTjBhVzl1TG5CbGNtWnZjbTBvY25WdVFtRjBZMmhsWkZWd1pHRjBaWE1zSUc1MWJHd3NJSFJ5WVc1ellXTjBhVzl1S1R0Y2JpQWdJQ0FnSUZKbFlXTjBWWEJrWVhSbGMwWnNkWE5vVkhKaGJuTmhZM1JwYjI0dWNtVnNaV0Z6WlNoMGNtRnVjMkZqZEdsdmJpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLR0Z6WVhCRmJuRjFaWFZsWkNrZ2UxeHVJQ0FnSUNBZ1lYTmhjRVZ1Y1hWbGRXVmtJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQjJZWElnY1hWbGRXVWdQU0JoYzJGd1EyRnNiR0poWTJ0UmRXVjFaVHRjYmlBZ0lDQWdJR0Z6WVhCRFlXeHNZbUZqYTFGMVpYVmxJRDBnUTJGc2JHSmhZMnRSZFdWMVpTNW5aWFJRYjI5c1pXUW9LVHRjYmlBZ0lDQWdJSEYxWlhWbExtNXZkR2xtZVVGc2JDZ3BPMXh1SUNBZ0lDQWdRMkZzYkdKaFkydFJkV1YxWlM1eVpXeGxZWE5sS0hGMVpYVmxLVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMDdYRzVtYkhWemFFSmhkR05vWldSVmNHUmhkR1Z6SUQwZ1VtVmhZM1JRWlhKbUxtMWxZWE4xY21Vb1hHNGdJQ2RTWldGamRGVndaR0YwWlhNbkxGeHVJQ0FuWm14MWMyaENZWFJqYUdWa1ZYQmtZWFJsY3ljc1hHNGdJR1pzZFhOb1FtRjBZMmhsWkZWd1pHRjBaWE5jYmlrN1hHNWNiaThxS2x4dUlDb2dUV0Z5YXlCaElHTnZiWEJ2Ym1WdWRDQmhjeUJ1WldWa2FXNW5JR0VnY21WeVpXNWtaWElzSUdGa1pHbHVaeUJoYmlCdmNIUnBiMjVoYkNCallXeHNZbUZqYXlCMGJ5QmhYRzRnS2lCc2FYTjBJRzltSUdaMWJtTjBhVzl1Y3lCM2FHbGphQ0IzYVd4c0lHSmxJR1Y0WldOMWRHVmtJRzl1WTJVZ2RHaGxJSEpsY21WdVpHVnlJRzlqWTNWeWN5NWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1pXNXhkV1YxWlZWd1pHRjBaU2hqYjIxd2IyNWxiblFwSUh0Y2JpQWdaVzV6ZFhKbFNXNXFaV04wWldRb0tUdGNibHh1SUNBdkx5QldZWEpwYjNWeklIQmhjblJ6SUc5bUlHOTFjaUJqYjJSbElDaHpkV05vSUdGeklGSmxZV04wUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSjNOY2JpQWdMeThnWDNKbGJtUmxjbFpoYkdsa1lYUmxaRU52YlhCdmJtVnVkQ2tnWVhOemRXMWxJSFJvWVhRZ1kyRnNiSE1nZEc4Z2NtVnVaR1Z5SUdGeVpXNG5kQ0J1WlhOMFpXUTdYRzRnSUM4dklIWmxjbWxtZVNCMGFHRjBJSFJvWVhRbmN5QjBhR1VnWTJGelpTNGdLRlJvYVhNZ2FYTWdZMkZzYkdWa0lHSjVJR1ZoWTJnZ2RHOXdMV3hsZG1Wc0lIVndaR0YwWlZ4dUlDQXZMeUJtZFc1amRHbHZiaXdnYkdsclpTQnpaWFJRY205d2N5d2djMlYwVTNSaGRHVXNJR1p2Y21ObFZYQmtZWFJsTENCbGRHTXVPeUJqY21WaGRHbHZiaUJoYm1SY2JpQWdMeThnWkdWemRISjFZM1JwYjI0Z2IyWWdkRzl3TFd4bGRtVnNJR052YlhCdmJtVnVkSE1nYVhNZ1ozVmhjbVJsWkNCcGJpQlNaV0ZqZEUxdmRXNTBMaWxjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdVbVZoWTNSRGRYSnlaVzUwVDNkdVpYSXVZM1Z5Y21WdWRDQTlQU0J1ZFd4c0xGeHVJQ0FnSUNkbGJuRjFaWFZsVlhCa1lYUmxLQ2s2SUZKbGJtUmxjaUJ0WlhSb2IyUnpJSE5vYjNWc1pDQmlaU0JoSUhCMWNtVWdablZ1WTNScGIyNGdiMllnY0hKdmNITWdKeUFyWEc0Z0lDQWdKMkZ1WkNCemRHRjBaVHNnZEhKcFoyZGxjbWx1WnlCdVpYTjBaV1FnWTI5dGNHOXVaVzUwSUhWd1pHRjBaWE1nWm5KdmJTQnlaVzVrWlhJZ2FYTWdibTkwSUNjZ0sxeHVJQ0FnSUNkaGJHeHZkMlZrTGlCSlppQnVaV05sYzNOaGNua3NJSFJ5YVdkblpYSWdibVZ6ZEdWa0lIVndaR0YwWlhNZ2FXNGdKeUFyWEc0Z0lDQWdKMk52YlhCdmJtVnVkRVJwWkZWd1pHRjBaUzRuWEc0Z0lDa2dPaUJ1ZFd4c0tUdGNibHh1SUNCcFppQW9JV0poZEdOb2FXNW5VM1J5WVhSbFoza3VhWE5DWVhSamFHbHVaMVZ3WkdGMFpYTXBJSHRjYmlBZ0lDQmlZWFJqYUdsdVoxTjBjbUYwWldkNUxtSmhkR05vWldSVmNHUmhkR1Z6S0dWdWNYVmxkV1ZWY0dSaGRHVXNJR052YlhCdmJtVnVkQ2s3WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc1Y2JpQWdaR2x5ZEhsRGIyMXdiMjVsYm5SekxuQjFjMmdvWTI5dGNHOXVaVzUwS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJGYm5GMVpYVmxJR0VnWTJGc2JHSmhZMnNnZEc4Z1ltVWdjblZ1SUdGMElIUm9aU0JsYm1RZ2IyWWdkR2hsSUdOMWNuSmxiblFnWW1GMFkyaHBibWNnWTNsamJHVXVJRlJvY205M2MxeHVJQ29nYVdZZ2JtOGdkWEJrWVhSbGN5QmhjbVVnWTNWeWNtVnVkR3g1SUdKbGFXNW5JSEJsY21admNtMWxaQzVjYmlBcUwxeHVablZ1WTNScGIyNGdZWE5oY0NoallXeHNZbUZqYXl3Z1kyOXVkR1Y0ZENrZ2UxeHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lHSmhkR05vYVc1blUzUnlZWFJsWjNrdWFYTkNZWFJqYUdsdVoxVndaR0YwWlhNc1hHNGdJQ0FnSjFKbFlXTjBWWEJrWVhSbGN5NWhjMkZ3T2lCRFlXNWNYQ2QwSUdWdWNYVmxkV1VnWVc0Z1lYTmhjQ0JqWVd4c1ltRmpheUJwYmlCaElHTnZiblJsZUhRZ2QyaGxjbVVuSUN0Y2JpQWdJQ0FuZFhCa1lYUmxjeUJoY21VZ2JtOTBJR0psYVc1bklHSmhkR05vWldRdUoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHSmhkR05vYVc1blUzUnlZWFJsWjNrdWFYTkNZWFJqYUdsdVoxVndaR0YwWlhNcEtUdGNiaUFnWVhOaGNFTmhiR3hpWVdOclVYVmxkV1V1Wlc1eGRXVjFaU2hqWVd4c1ltRmpheXdnWTI5dWRHVjRkQ2s3WEc0Z0lHRnpZWEJGYm5GMVpYVmxaQ0E5SUhSeWRXVTdYRzU5WEc1Y2JuWmhjaUJTWldGamRGVndaR0YwWlhOSmJtcGxZM1JwYjI0Z1BTQjdYRzRnSUdsdWFtVmpkRkpsWTI5dVkybHNaVlJ5WVc1ellXTjBhVzl1T2lCbWRXNWpkR2x2YmloU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJpeGNiaUFnSUNBZ0lDZFNaV0ZqZEZWd1pHRjBaWE02SUcxMWMzUWdjSEp2ZG1sa1pTQmhJSEpsWTI5dVkybHNaU0IwY21GdWMyRmpkR2x2YmlCamJHRnpjeWRjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0ZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dUtTazdYRzRnSUNBZ1VtVmhZM1JWY0dSaGRHVnpMbEpsWVdOMFVtVmpiMjVqYVd4bFZISmhibk5oWTNScGIyNGdQU0JTWldOdmJtTnBiR1ZVY21GdWMyRmpkR2x2Ymp0Y2JpQWdmU3hjYmx4dUlDQnBibXBsWTNSQ1lYUmphR2x1WjFOMGNtRjBaV2Q1T2lCbWRXNWpkR2x2YmloZlltRjBZMmhwYm1kVGRISmhkR1ZuZVNrZ2UxeHVJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0JmWW1GMFkyaHBibWRUZEhKaGRHVm5lU3hjYmlBZ0lDQWdJQ2RTWldGamRGVndaR0YwWlhNNklHMTFjM1FnY0hKdmRtbGtaU0JoSUdKaGRHTm9hVzVuSUhOMGNtRjBaV2Q1SjF4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1gySmhkR05vYVc1blUzUnlZWFJsWjNrcEtUdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnZEhsd1pXOW1JRjlpWVhSamFHbHVaMU4wY21GMFpXZDVMbUpoZEdOb1pXUlZjR1JoZEdWeklEMDlQU0FuWm5WdVkzUnBiMjRuTEZ4dUlDQWdJQ0FnSjFKbFlXTjBWWEJrWVhSbGN6b2diWFZ6ZENCd2NtOTJhV1JsSUdFZ1ltRjBZMmhsWkZWd1pHRjBaWE1vS1NCbWRXNWpkR2x2YmlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUjVjR1Z2WmlCZlltRjBZMmhwYm1kVGRISmhkR1ZuZVM1aVlYUmphR1ZrVlhCa1lYUmxjeUE5UFQwZ0oyWjFibU4wYVc5dUp5a3BPMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCMGVYQmxiMllnWDJKaGRHTm9hVzVuVTNSeVlYUmxaM2t1YVhOQ1lYUmphR2x1WjFWd1pHRjBaWE1nUFQwOUlDZGliMjlzWldGdUp5eGNiaUFnSUNBZ0lDZFNaV0ZqZEZWd1pHRjBaWE02SUcxMWMzUWdjSEp2ZG1sa1pTQmhiaUJwYzBKaGRHTm9hVzVuVlhCa1lYUmxjeUJpYjI5c1pXRnVJR0YwZEhKcFluVjBaU2RjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0hSNWNHVnZaaUJmWW1GMFkyaHBibWRUZEhKaGRHVm5lUzVwYzBKaGRHTm9hVzVuVlhCa1lYUmxjeUE5UFQwZ0oySnZiMnhsWVc0bktTazdYRzRnSUNBZ1ltRjBZMmhwYm1kVGRISmhkR1ZuZVNBOUlGOWlZWFJqYUdsdVoxTjBjbUYwWldkNU8xeHVJQ0I5WEc1OU8xeHVYRzUyWVhJZ1VtVmhZM1JWY0dSaGRHVnpJRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dVbVZoWTNRZ2NtVm1aWEpsYm1ObGN5QmdVbVZoWTNSU1pXTnZibU5wYkdWVWNtRnVjMkZqZEdsdmJtQWdkWE5wYm1jZ2RHaHBjeUJ3Y205d1pYSjBlU0JwYmlCdmNtUmxjbHh1SUNBZ0tpQjBieUJoYkd4dmR5QmtaWEJsYm1SbGJtTjVJR2x1YW1WamRHbHZiaTVjYmlBZ0lDcGNiaUFnSUNvZ1FHbHVkR1Z5Ym1Gc1hHNGdJQ0FxTDF4dUlDQlNaV0ZqZEZKbFkyOXVZMmxzWlZSeVlXNXpZV04wYVc5dU9pQnVkV3hzTEZ4dVhHNGdJR0poZEdOb1pXUlZjR1JoZEdWek9pQmlZWFJqYUdWa1ZYQmtZWFJsY3l4Y2JpQWdaVzV4ZFdWMVpWVndaR0YwWlRvZ1pXNXhkV1YxWlZWd1pHRjBaU3hjYmlBZ1pteDFjMmhDWVhSamFHVmtWWEJrWVhSbGN6b2dabXgxYzJoQ1lYUmphR1ZrVlhCa1lYUmxjeXhjYmlBZ2FXNXFaV04wYVc5dU9pQlNaV0ZqZEZWd1pHRjBaWE5KYm1wbFkzUnBiMjRzWEc0Z0lHRnpZWEE2SUdGellYQmNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1VtVmhZM1JWY0dSaGRHVnpPMXh1SWwxOSIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgUmVhY3RXaXRoQWRkb25zXG4gKi9cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBleGlzdHMgcHVyZWx5IGluIHRoZSBvcGVuIHNvdXJjZSBwcm9qZWN0LCBhbmQgaXMgbWVhbnQgYXMgYSB3YXlcbiAqIHRvIGNyZWF0ZSBhIHNlcGFyYXRlIHN0YW5kYWxvbmUgYnVpbGQgb2YgUmVhY3QuIFRoaXMgYnVpbGQgaGFzIFwiYWRkb25zXCIsIG9yXG4gKiBmdW5jdGlvbmFsaXR5IHdlJ3ZlIGJ1aWx0IGFuZCB0aGluayBtaWdodCBiZSB1c2VmdWwgYnV0IGRvZXNuJ3QgaGF2ZSBhIGdvb2RcbiAqIHBsYWNlIHRvIGxpdmUgaW5zaWRlIFJlYWN0IGNvcmUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgTGlua2VkU3RhdGVNaXhpbiA9IHJlcXVpcmUoXCIuL0xpbmtlZFN0YXRlTWl4aW5cIik7XG52YXIgUmVhY3QgPSByZXF1aXJlKFwiLi9SZWFjdFwiKTtcbnZhciBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4gPVxuICByZXF1aXJlKFwiLi9SZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW5cIik7XG52YXIgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXAgPSByZXF1aXJlKFwiLi9SZWFjdENTU1RyYW5zaXRpb25Hcm91cFwiKTtcbnZhciBSZWFjdEZyYWdtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RGcmFnbWVudFwiKTtcbnZhciBSZWFjdFRyYW5zaXRpb25Hcm91cCA9IHJlcXVpcmUoXCIuL1JlYWN0VHJhbnNpdGlvbkdyb3VwXCIpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoXCIuL1JlYWN0VXBkYXRlc1wiKTtcblxudmFyIGN4ID0gcmVxdWlyZShcIi4vY3hcIik7XG52YXIgY2xvbmVXaXRoUHJvcHMgPSByZXF1aXJlKFwiLi9jbG9uZVdpdGhQcm9wc1wiKTtcbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiLi91cGRhdGVcIik7XG5cblJlYWN0LmFkZG9ucyA9IHtcbiAgQ1NTVHJhbnNpdGlvbkdyb3VwOiBSZWFjdENTU1RyYW5zaXRpb25Hcm91cCxcbiAgTGlua2VkU3RhdGVNaXhpbjogTGlua2VkU3RhdGVNaXhpbixcbiAgUHVyZVJlbmRlck1peGluOiBSZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4sXG4gIFRyYW5zaXRpb25Hcm91cDogUmVhY3RUcmFuc2l0aW9uR3JvdXAsXG5cbiAgYmF0Y2hlZFVwZGF0ZXM6IFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyxcbiAgY2xhc3NTZXQ6IGN4LFxuICBjbG9uZVdpdGhQcm9wczogY2xvbmVXaXRoUHJvcHMsXG4gIGNyZWF0ZUZyYWdtZW50OiBSZWFjdEZyYWdtZW50LmNyZWF0ZSxcbiAgdXBkYXRlOiB1cGRhdGVcbn07XG5cbmlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgUmVhY3QuYWRkb25zLlBlcmYgPSByZXF1aXJlKFwiLi9SZWFjdERlZmF1bHRQZXJmXCIpO1xuICBSZWFjdC5hZGRvbnMuVGVzdFV0aWxzID0gcmVxdWlyZShcIi4vUmVhY3RUZXN0VXRpbHNcIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZVbVZoWTNSWGFYUm9RV1JrYjI1ekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVW1WaFkzUlhhWFJvUVdSa2IyNXpYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQlVhR2x6SUcxdlpIVnNaU0JsZUdsemRITWdjSFZ5Wld4NUlHbHVJSFJvWlNCdmNHVnVJSE52ZFhKalpTQndjbTlxWldOMExDQmhibVFnYVhNZ2JXVmhiblFnWVhNZ1lTQjNZWGxjYmlBcUlIUnZJR055WldGMFpTQmhJSE5sY0dGeVlYUmxJSE4wWVc1a1lXeHZibVVnWW5WcGJHUWdiMllnVW1WaFkzUXVJRlJvYVhNZ1luVnBiR1FnYUdGeklGd2lZV1JrYjI1elhDSXNJRzl5WEc0Z0tpQm1kVzVqZEdsdmJtRnNhWFI1SUhkbEozWmxJR0oxYVd4MElHRnVaQ0IwYUdsdWF5QnRhV2RvZENCaVpTQjFjMlZtZFd3Z1luVjBJR1J2WlhOdUozUWdhR0YyWlNCaElHZHZiMlJjYmlBcUlIQnNZV05sSUhSdklHeHBkbVVnYVc1emFXUmxJRkpsWVdOMElHTnZjbVV1WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1RHbHVhMlZrVTNSaGRHVk5hWGhwYmlBOUlISmxjWFZwY21Vb1hDSXVMMHhwYm10bFpGTjBZWFJsVFdsNGFXNWNJaWs3WEc1MllYSWdVbVZoWTNRZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRGd2lLVHRjYm5aaGNpQlNaV0ZqZEVOdmJYQnZibVZ1ZEZkcGRHaFFkWEpsVW1WdVpHVnlUV2w0YVc0Z1BWeHVJQ0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU52YlhCdmJtVnVkRmRwZEdoUWRYSmxVbVZ1WkdWeVRXbDRhVzVjSWlrN1hHNTJZWElnVW1WaFkzUkRVMU5VY21GdWMybDBhVzl1UjNKdmRYQWdQU0J5WlhGMWFYSmxLRndpTGk5U1pXRmpkRU5UVTFSeVlXNXphWFJwYjI1SGNtOTFjRndpS1R0Y2JuWmhjaUJTWldGamRFWnlZV2R0Wlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkdjbUZuYldWdWRGd2lLVHRjYm5aaGNpQlNaV0ZqZEZSeVlXNXphWFJwYjI1SGNtOTFjQ0E5SUhKbGNYVnBjbVVvWENJdUwxSmxZV04wVkhKaGJuTnBkR2x2YmtkeWIzVndYQ0lwTzF4dWRtRnlJRkpsWVdOMFZYQmtZWFJsY3lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFZYQmtZWFJsYzF3aUtUdGNibHh1ZG1GeUlHTjRJRDBnY21WeGRXbHlaU2hjSWk0dlkzaGNJaWs3WEc1MllYSWdZMnh2Ym1WWGFYUm9VSEp2Y0hNZ1BTQnlaWEYxYVhKbEtGd2lMaTlqYkc5dVpWZHBkR2hRY205d2Mxd2lLVHRjYm5aaGNpQjFjR1JoZEdVZ1BTQnlaWEYxYVhKbEtGd2lMaTkxY0dSaGRHVmNJaWs3WEc1Y2JsSmxZV04wTG1Ga1pHOXVjeUE5SUh0Y2JpQWdRMU5UVkhKaGJuTnBkR2x2YmtkeWIzVndPaUJTWldGamRFTlRVMVJ5WVc1emFYUnBiMjVIY205MWNDeGNiaUFnVEdsdWEyVmtVM1JoZEdWTmFYaHBiam9nVEdsdWEyVmtVM1JoZEdWTmFYaHBiaXhjYmlBZ1VIVnlaVkpsYm1SbGNrMXBlR2x1T2lCU1pXRmpkRU52YlhCdmJtVnVkRmRwZEdoUWRYSmxVbVZ1WkdWeVRXbDRhVzRzWEc0Z0lGUnlZVzV6YVhScGIyNUhjbTkxY0RvZ1VtVmhZM1JVY21GdWMybDBhVzl1UjNKdmRYQXNYRzVjYmlBZ1ltRjBZMmhsWkZWd1pHRjBaWE02SUZKbFlXTjBWWEJrWVhSbGN5NWlZWFJqYUdWa1ZYQmtZWFJsY3l4Y2JpQWdZMnhoYzNOVFpYUTZJR040TEZ4dUlDQmpiRzl1WlZkcGRHaFFjbTl3Y3pvZ1kyeHZibVZYYVhSb1VISnZjSE1zWEc0Z0lHTnlaV0YwWlVaeVlXZHRaVzUwT2lCU1pXRmpkRVp5WVdkdFpXNTBMbU55WldGMFpTeGNiaUFnZFhCa1lYUmxPaUIxY0dSaGRHVmNibjA3WEc1Y2JtbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnVW1WaFkzUXVZV1JrYjI1ekxsQmxjbVlnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVSbFptRjFiSFJRWlhKbVhDSXBPMXh1SUNCU1pXRmpkQzVoWkdSdmJuTXVWR1Z6ZEZWMGFXeHpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JVWlhOMFZYUnBiSE5jSWlrN1hHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnVW1WaFkzUTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTVkdET01Qcm9wZXJ0eUNvbmZpZ1xuICovXG5cbi8qanNsaW50IGJpdHdpc2U6IHRydWUqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL0RPTVByb3BlcnR5XCIpO1xuXG52YXIgTVVTVF9VU0VfQVRUUklCVVRFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLk1VU1RfVVNFX0FUVFJJQlVURTtcblxudmFyIFNWR0RPTVByb3BlcnR5Q29uZmlnID0ge1xuICBQcm9wZXJ0aWVzOiB7XG4gICAgY2xpcFBhdGg6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBjeDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGN5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGR4OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZHk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmaWxsOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZmlsbE9wYWNpdHk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmb250RmFtaWx5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZm9udFNpemU6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBmeDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIGZ5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgZ3JhZGllbnRUcmFuc2Zvcm06IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBncmFkaWVudFVuaXRzOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWFya2VyRW5kOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWFya2VyTWlkOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgbWFya2VyU3RhcnQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBvZmZzZXQ6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBvcGFjaXR5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcGF0dGVybkNvbnRlbnRVbml0czogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHBhdHRlcm5Vbml0czogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHBvaW50czogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHByZXNlcnZlQXNwZWN0UmF0aW86IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICByOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgcng6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICByeTogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHNwcmVhZE1ldGhvZDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0b3BDb2xvcjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0b3BPcGFjaXR5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3Ryb2tlOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3Ryb2tlRGFzaGFycmF5OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgc3Ryb2tlTGluZWNhcDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHN0cm9rZU9wYWNpdHk6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICBzdHJva2VXaWR0aDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHRleHRBbmNob3I6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB0cmFuc2Zvcm06IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB2ZXJzaW9uOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgdmlld0JveDogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHgxOiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgeDI6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB4OiBNVVNUX1VTRV9BVFRSSUJVVEUsXG4gICAgeTE6IE1VU1RfVVNFX0FUVFJJQlVURSxcbiAgICB5MjogTVVTVF9VU0VfQVRUUklCVVRFLFxuICAgIHk6IE1VU1RfVVNFX0FUVFJJQlVURVxuICB9LFxuICBET01BdHRyaWJ1dGVOYW1lczoge1xuICAgIGNsaXBQYXRoOiAnY2xpcC1wYXRoJyxcbiAgICBmaWxsT3BhY2l0eTogJ2ZpbGwtb3BhY2l0eScsXG4gICAgZm9udEZhbWlseTogJ2ZvbnQtZmFtaWx5JyxcbiAgICBmb250U2l6ZTogJ2ZvbnQtc2l6ZScsXG4gICAgZ3JhZGllbnRUcmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gICAgZ3JhZGllbnRVbml0czogJ2dyYWRpZW50VW5pdHMnLFxuICAgIG1hcmtlckVuZDogJ21hcmtlci1lbmQnLFxuICAgIG1hcmtlck1pZDogJ21hcmtlci1taWQnLFxuICAgIG1hcmtlclN0YXJ0OiAnbWFya2VyLXN0YXJ0JyxcbiAgICBwYXR0ZXJuQ29udGVudFVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gICAgcGF0dGVyblVuaXRzOiAncGF0dGVyblVuaXRzJyxcbiAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gICAgc3ByZWFkTWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgICBzdG9wQ29sb3I6ICdzdG9wLWNvbG9yJyxcbiAgICBzdG9wT3BhY2l0eTogJ3N0b3Atb3BhY2l0eScsXG4gICAgc3Ryb2tlRGFzaGFycmF5OiAnc3Ryb2tlLWRhc2hhcnJheScsXG4gICAgc3Ryb2tlTGluZWNhcDogJ3N0cm9rZS1saW5lY2FwJyxcbiAgICBzdHJva2VPcGFjaXR5OiAnc3Ryb2tlLW9wYWNpdHknLFxuICAgIHN0cm9rZVdpZHRoOiAnc3Ryb2tlLXdpZHRoJyxcbiAgICB0ZXh0QW5jaG9yOiAndGV4dC1hbmNob3InLFxuICAgIHZpZXdCb3g6ICd2aWV3Qm94J1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNWR0RPTVByb3BlcnR5Q29uZmlnO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFNlbGVjdEV2ZW50UGx1Z2luXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRDb25zdGFudHMgPSByZXF1aXJlKFwiLi9FdmVudENvbnN0YW50c1wiKTtcbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZShcIi4vRXZlbnRQcm9wYWdhdG9yc1wiKTtcbnZhciBSZWFjdElucHV0U2VsZWN0aW9uID0gcmVxdWlyZShcIi4vUmVhY3RJbnB1dFNlbGVjdGlvblwiKTtcbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xuXG52YXIgZ2V0QWN0aXZlRWxlbWVudCA9IHJlcXVpcmUoXCIuL2dldEFjdGl2ZUVsZW1lbnRcIik7XG52YXIgaXNUZXh0SW5wdXRFbGVtZW50ID0gcmVxdWlyZShcIi4vaXNUZXh0SW5wdXRFbGVtZW50XCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG52YXIgc2hhbGxvd0VxdWFsID0gcmVxdWlyZShcIi4vc2hhbGxvd0VxdWFsXCIpO1xuXG52YXIgdG9wTGV2ZWxUeXBlcyA9IEV2ZW50Q29uc3RhbnRzLnRvcExldmVsVHlwZXM7XG5cbnZhciBldmVudFR5cGVzID0ge1xuICBzZWxlY3Q6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uU2VsZWN0OiBudWxsfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uU2VsZWN0Q2FwdHVyZTogbnVsbH0pXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQmx1cixcbiAgICAgIHRvcExldmVsVHlwZXMudG9wQ29udGV4dE1lbnUsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcEZvY3VzLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BLZXlEb3duLFxuICAgICAgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd24sXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlVXAsXG4gICAgICB0b3BMZXZlbFR5cGVzLnRvcFNlbGVjdGlvbkNoYW5nZVxuICAgIF1cbiAgfVxufTtcblxudmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJRCA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG5cbi8qKlxuICogR2V0IGFuIG9iamVjdCB3aGljaCBpcyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zcyBub2RlcyBvciBicm93c2VycywgYnV0XG4gKiB0d28gaWRlbnRpY2FsIHNlbGVjdGlvbnMgb24gdGhlIHNhbWUgbm9kZSB3aWxsIHJldHVybiBpZGVudGljYWwgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24obm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmXG4gICAgICBSZWFjdElucHV0U2VsZWN0aW9uLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhub2RlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2UgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBhbmNob3JOb2RlOiBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldDogc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZTogc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0OiBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICB9O1xuICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikge1xuICAgIHZhciByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnRFbGVtZW50OiByYW5nZS5wYXJlbnRFbGVtZW50KCksXG4gICAgICB0ZXh0OiByYW5nZS50ZXh0LFxuICAgICAgdG9wOiByYW5nZS5ib3VuZGluZ1RvcCxcbiAgICAgIGxlZnQ6IHJhbmdlLmJvdW5kaW5nTGVmdFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQb2xsIHNlbGVjdGlvbiB0byBzZWUgd2hldGhlciBpdCdzIGNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/U3ludGhldGljRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIGlmIChtb3VzZURvd24gfHxcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPT0gbnVsbCB8fFxuICAgICAgYWN0aXZlRWxlbWVudCAhPT0gZ2V0QWN0aXZlRWxlbWVudCgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG4gIHZhciBjdXJyZW50U2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGFjdGl2ZUVsZW1lbnQpO1xuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuXG4gICAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gU3ludGhldGljRXZlbnQuZ2V0UG9vbGVkKFxuICAgICAgZXZlbnRUeXBlcy5zZWxlY3QsXG4gICAgICBhY3RpdmVFbGVtZW50SUQsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICk7XG5cbiAgICBzeW50aGV0aWNFdmVudC50eXBlID0gJ3NlbGVjdCc7XG4gICAgc3ludGhldGljRXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudDtcblxuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhzeW50aGV0aWNFdmVudCk7XG5cbiAgICByZXR1cm4gc3ludGhldGljRXZlbnQ7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG52YXIgU2VsZWN0RXZlbnRQbHVnaW4gPSB7XG5cbiAgZXZlbnRUeXBlczogZXZlbnRUeXBlcyxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG5cbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRm9jdXM6XG4gICAgICAgIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodG9wTGV2ZWxUYXJnZXQpIHx8XG4gICAgICAgICAgICB0b3BMZXZlbFRhcmdldC5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJykge1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPSB0b3BMZXZlbFRhcmdldDtcbiAgICAgICAgICBhY3RpdmVFbGVtZW50SUQgPSB0b3BMZXZlbFRhcmdldElEO1xuICAgICAgICAgIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEJsdXI6XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50SUQgPSBudWxsO1xuICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gICAgICAvLyBzZW1hbnRpY3Mgb2YgdGhlIG5hdGl2ZSBzZWxlY3QgZXZlbnQuXG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VEb3duOlxuICAgICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb250ZXh0TWVudTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZVVwOlxuICAgICAgICBtb3VzZURvd24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFNlbGVjdEV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAgIC8vIHNvbWV0aW1lcyB3aGVuIGl0IGhhc24ndCkuXG4gICAgICAvLyBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBzZWxlY3Rpb25jaGFuZ2UsIHNvIGNoZWNrIHNlbGVjdGlvbiBzdGF0dXNcbiAgICAgIC8vIGFmdGVyIGVhY2gga2V5IGVudHJ5LiBUaGUgc2VsZWN0aW9uIGNoYW5nZXMgYWZ0ZXIga2V5ZG93biBhbmQgYmVmb3JlXG4gICAgICAvLyBrZXl1cCwgYnV0IHdlIGNoZWNrIG9uIGtleWRvd24gYXMgd2VsbCBpbiB0aGUgY2FzZSBvZiBob2xkaW5nIGRvd24gYVxuICAgICAgLy8ga2V5LCB3aGVuIG11bHRpcGxlIGtleWRvd24gZXZlbnRzIGFyZSBmaXJlZCBidXQgb25seSBvbmUga2V5dXAgaXMuXG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wU2VsZWN0aW9uQ2hhbmdlOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleURvd246XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5VXA6XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdEV2ZW50UGx1Z2luO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFNlcnZlclJlYWN0Um9vdEluZGV4XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTaXplIG9mIHRoZSByZWFjdFJvb3QgSUQgc3BhY2UuIFdlIGdlbmVyYXRlIHJhbmRvbSBudW1iZXJzIGZvciBSZWFjdCByb290XG4gKiBJRHMgYW5kIGlmIHRoZXJlJ3MgYSBjb2xsaXNpb24gdGhlIGV2ZW50cyBhbmQgRE9NIHVwZGF0ZSBzeXN0ZW0gd2lsbFxuICogZ2V0IGNvbmZ1c2VkLiBJbiB0aGUgZnV0dXJlIHdlIG5lZWQgYSB3YXkgdG8gZ2VuZXJhdGUgR1VJRHMgYnV0IGZvclxuICogbm93IHRoaXMgd2lsbCB3b3JrIG9uIGEgc21hbGxlciBzY2FsZS5cbiAqL1xudmFyIEdMT0JBTF9NT1VOVF9QT0lOVF9NQVggPSBNYXRoLnBvdygyLCA1Myk7XG5cbnZhciBTZXJ2ZXJSZWFjdFJvb3RJbmRleCA9IHtcbiAgY3JlYXRlUmVhY3RSb290SW5kZXg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIEdMT0JBTF9NT1VOVF9QT0lOVF9NQVgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlcnZlclJlYWN0Um9vdEluZGV4O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTaW1wbGVFdmVudFBsdWdpblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50Q29uc3RhbnRzID0gcmVxdWlyZShcIi4vRXZlbnRDb25zdGFudHNcIik7XG52YXIgRXZlbnRQbHVnaW5VdGlscyA9IHJlcXVpcmUoXCIuL0V2ZW50UGx1Z2luVXRpbHNcIik7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoXCIuL0V2ZW50UHJvcGFnYXRvcnNcIik7XG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNDbGlwYm9hcmRFdmVudFwiKTtcbnZhciBTeW50aGV0aWNFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0V2ZW50XCIpO1xudmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNGb2N1c0V2ZW50XCIpO1xudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNLZXlib2FyZEV2ZW50XCIpO1xudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNNb3VzZUV2ZW50XCIpO1xudmFyIFN5bnRoZXRpY0RyYWdFdmVudCA9IHJlcXVpcmUoXCIuL1N5bnRoZXRpY0RyYWdFdmVudFwiKTtcbnZhciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljVG91Y2hFdmVudFwiKTtcbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljVUlFdmVudFwiKTtcbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljV2hlZWxFdmVudFwiKTtcblxudmFyIGdldEV2ZW50Q2hhckNvZGUgPSByZXF1aXJlKFwiLi9nZXRFdmVudENoYXJDb2RlXCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoXCIuL3dhcm5pbmdcIik7XG5cbnZhciB0b3BMZXZlbFR5cGVzID0gRXZlbnRDb25zdGFudHMudG9wTGV2ZWxUeXBlcztcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIGJsdXI6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQmx1cjogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkJsdXJDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGNsaWNrOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNsaWNrOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ2xpY2tDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGNvbnRleHRNZW51OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkNvbnRleHRNZW51OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uQ29udGV4dE1lbnVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGNvcHk6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uQ29weTogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkNvcHlDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGN1dDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25DdXQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25DdXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRvdWJsZUNsaWNrOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRvdWJsZUNsaWNrOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRG91YmxlQ2xpY2tDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWc6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZzogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdFbmQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJhZ0VuZDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyYWdFbmRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdFbnRlcjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnRW50ZXI6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnRW50ZXJDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdFeGl0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdFeGl0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ0V4aXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdMZWF2ZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnTGVhdmU6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnTGVhdmVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdPdmVyOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkRyYWdPdmVyOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRHJhZ092ZXJDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyYWdTdGFydDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25EcmFnU3RhcnQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25EcmFnU3RhcnRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGRyb3A6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uRHJvcDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkRyb3BDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGZvY3VzOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkZvY3VzOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRm9jdXNDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGlucHV0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbklucHV0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uSW5wdXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGtleURvd246IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uS2V5RG93bjogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbktleURvd25DYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGtleVByZXNzOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbktleVByZXNzOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uS2V5UHJlc3NDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGtleVVwOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbktleVVwOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uS2V5VXBDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGxvYWQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uTG9hZDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbkxvYWRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIGVycm9yOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbkVycm9yOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uRXJyb3JDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIC8vIE5vdGU6IFdlIGRvIG5vdCBhbGxvdyBsaXN0ZW5pbmcgdG8gbW91c2VPdmVyIGV2ZW50cy4gSW5zdGVhZCwgdXNlIHRoZVxuICAvLyBvbk1vdXNlRW50ZXIvb25Nb3VzZUxlYXZlIGNyZWF0ZWQgYnkgYEVudGVyTGVhdmVFdmVudFBsdWdpbmAuXG4gIG1vdXNlRG93bjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZURvd246IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZURvd25DYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIG1vdXNlTW92ZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZU1vdmU6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZU1vdmVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIG1vdXNlT3V0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbk1vdXNlT3V0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uTW91c2VPdXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIG1vdXNlT3Zlcjoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Nb3VzZU92ZXI6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Nb3VzZU92ZXJDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIG1vdXNlVXA6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uTW91c2VVcDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvbk1vdXNlVXBDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHBhc3RlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblBhc3RlOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uUGFzdGVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHJlc2V0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblJlc2V0OiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uUmVzZXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHNjcm9sbDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25TY3JvbGw6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25TY3JvbGxDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHN1Ym1pdDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25TdWJtaXQ6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25TdWJtaXRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHRvdWNoQ2FuY2VsOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblRvdWNoQ2FuY2VsOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uVG91Y2hDYW5jZWxDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHRvdWNoRW5kOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvblRvdWNoRW5kOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uVG91Y2hFbmRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHRvdWNoTW92ZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiBrZXlPZih7b25Ub3VjaE1vdmU6IHRydWV9KSxcbiAgICAgIGNhcHR1cmVkOiBrZXlPZih7b25Ub3VjaE1vdmVDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHRvdWNoU3RhcnQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDoga2V5T2Yoe29uVG91Y2hTdGFydDogdHJ1ZX0pLFxuICAgICAgY2FwdHVyZWQ6IGtleU9mKHtvblRvdWNoU3RhcnRDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH0sXG4gIHdoZWVsOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6IGtleU9mKHtvbldoZWVsOiB0cnVlfSksXG4gICAgICBjYXB0dXJlZDoga2V5T2Yoe29uV2hlZWxDYXB0dXJlOiB0cnVlfSlcbiAgICB9XG4gIH1cbn07XG5cbnZhciB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWcgPSB7XG4gIHRvcEJsdXI6ICAgICAgICBldmVudFR5cGVzLmJsdXIsXG4gIHRvcENsaWNrOiAgICAgICBldmVudFR5cGVzLmNsaWNrLFxuICB0b3BDb250ZXh0TWVudTogZXZlbnRUeXBlcy5jb250ZXh0TWVudSxcbiAgdG9wQ29weTogICAgICAgIGV2ZW50VHlwZXMuY29weSxcbiAgdG9wQ3V0OiAgICAgICAgIGV2ZW50VHlwZXMuY3V0LFxuICB0b3BEb3VibGVDbGljazogZXZlbnRUeXBlcy5kb3VibGVDbGljayxcbiAgdG9wRHJhZzogICAgICAgIGV2ZW50VHlwZXMuZHJhZyxcbiAgdG9wRHJhZ0VuZDogICAgIGV2ZW50VHlwZXMuZHJhZ0VuZCxcbiAgdG9wRHJhZ0VudGVyOiAgIGV2ZW50VHlwZXMuZHJhZ0VudGVyLFxuICB0b3BEcmFnRXhpdDogICAgZXZlbnRUeXBlcy5kcmFnRXhpdCxcbiAgdG9wRHJhZ0xlYXZlOiAgIGV2ZW50VHlwZXMuZHJhZ0xlYXZlLFxuICB0b3BEcmFnT3ZlcjogICAgZXZlbnRUeXBlcy5kcmFnT3ZlcixcbiAgdG9wRHJhZ1N0YXJ0OiAgIGV2ZW50VHlwZXMuZHJhZ1N0YXJ0LFxuICB0b3BEcm9wOiAgICAgICAgZXZlbnRUeXBlcy5kcm9wLFxuICB0b3BFcnJvcjogICAgICAgZXZlbnRUeXBlcy5lcnJvcixcbiAgdG9wRm9jdXM6ICAgICAgIGV2ZW50VHlwZXMuZm9jdXMsXG4gIHRvcElucHV0OiAgICAgICBldmVudFR5cGVzLmlucHV0LFxuICB0b3BLZXlEb3duOiAgICAgZXZlbnRUeXBlcy5rZXlEb3duLFxuICB0b3BLZXlQcmVzczogICAgZXZlbnRUeXBlcy5rZXlQcmVzcyxcbiAgdG9wS2V5VXA6ICAgICAgIGV2ZW50VHlwZXMua2V5VXAsXG4gIHRvcExvYWQ6ICAgICAgICBldmVudFR5cGVzLmxvYWQsXG4gIHRvcE1vdXNlRG93bjogICBldmVudFR5cGVzLm1vdXNlRG93bixcbiAgdG9wTW91c2VNb3ZlOiAgIGV2ZW50VHlwZXMubW91c2VNb3ZlLFxuICB0b3BNb3VzZU91dDogICAgZXZlbnRUeXBlcy5tb3VzZU91dCxcbiAgdG9wTW91c2VPdmVyOiAgIGV2ZW50VHlwZXMubW91c2VPdmVyLFxuICB0b3BNb3VzZVVwOiAgICAgZXZlbnRUeXBlcy5tb3VzZVVwLFxuICB0b3BQYXN0ZTogICAgICAgZXZlbnRUeXBlcy5wYXN0ZSxcbiAgdG9wUmVzZXQ6ICAgICAgIGV2ZW50VHlwZXMucmVzZXQsXG4gIHRvcFNjcm9sbDogICAgICBldmVudFR5cGVzLnNjcm9sbCxcbiAgdG9wU3VibWl0OiAgICAgIGV2ZW50VHlwZXMuc3VibWl0LFxuICB0b3BUb3VjaENhbmNlbDogZXZlbnRUeXBlcy50b3VjaENhbmNlbCxcbiAgdG9wVG91Y2hFbmQ6ICAgIGV2ZW50VHlwZXMudG91Y2hFbmQsXG4gIHRvcFRvdWNoTW92ZTogICBldmVudFR5cGVzLnRvdWNoTW92ZSxcbiAgdG9wVG91Y2hTdGFydDogIGV2ZW50VHlwZXMudG91Y2hTdGFydCxcbiAgdG9wV2hlZWw6ICAgICAgIGV2ZW50VHlwZXMud2hlZWxcbn07XG5cbmZvciAodmFyIHR5cGUgaW4gdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnKSB7XG4gIHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZ1t0eXBlXS5kZXBlbmRlbmNpZXMgPSBbdHlwZV07XG59XG5cbnZhciBTaW1wbGVFdmVudFBsdWdpbiA9IHtcblxuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIC8qKlxuICAgKiBTYW1lIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLCBleGNlcHQgY2FuY2VscyB0aGUgZXZlbnQgd2hlbiByZXR1cm5cbiAgICogdmFsdWUgaXMgZmFsc2UuIFRoaXMgYmVoYXZpb3Igd2lsbCBiZSBkaXNhYmxlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gRXZlbnQgdG8gYmUgZGlzcGF0Y2hlZC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gQXBwbGljYXRpb24tbGV2ZWwgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkb21JRCBET00gSUQgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2suXG4gICAqL1xuICBleGVjdXRlRGlzcGF0Y2g6IGZ1bmN0aW9uKGV2ZW50LCBsaXN0ZW5lciwgZG9tSUQpIHtcbiAgICB2YXIgcmV0dXJuVmFsdWUgPSBFdmVudFBsdWdpblV0aWxzLmV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGRvbUlEKTtcblxuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgdHlwZW9mIHJldHVyblZhbHVlICE9PSAnYm9vbGVhbicsXG4gICAgICAnUmV0dXJuaW5nIGBmYWxzZWAgZnJvbSBhbiBldmVudCBoYW5kbGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgJyArXG4gICAgICAnaWdub3JlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLiBJbnN0ZWFkLCBtYW51YWxseSBjYWxsICcgK1xuICAgICAgJ2Uuc3RvcFByb3BhZ2F0aW9uKCkgb3IgZS5wcmV2ZW50RGVmYXVsdCgpLCBhcyBhcHByb3ByaWF0ZS4nXG4gICAgKSA6IG51bGwpO1xuXG4gICAgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZSBSZWNvcmQgZnJvbSBgRXZlbnRDb25zdGFudHNgLlxuICAgKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSB0b3BMZXZlbFRhcmdldCBUaGUgbGlzdGVuaW5nIGNvbXBvbmVudCByb290IG5vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFRhcmdldElEIElEIG9mIGB0b3BMZXZlbFRhcmdldGAuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAgICogQHJldHVybiB7Kn0gQW4gYWNjdW11bGF0aW9uIG9mIHN5bnRoZXRpYyBldmVudHMuXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmV4dHJhY3RFdmVudHN9XG4gICAqL1xuICBleHRyYWN0RXZlbnRzOiBmdW5jdGlvbihcbiAgICAgIHRvcExldmVsVHlwZSxcbiAgICAgIHRvcExldmVsVGFyZ2V0LFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50KSB7XG4gICAgdmFyIGRpc3BhdGNoQ29uZmlnID0gdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnW3RvcExldmVsVHlwZV07XG4gICAgaWYgKCFkaXNwYXRjaENvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBFdmVudENvbnN0cnVjdG9yO1xuICAgIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wSW5wdXQ6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTG9hZDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BFcnJvcjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BSZXNldDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BTdWJtaXQ6XG4gICAgICAgIC8vIEhUTUwgRXZlbnRzXG4gICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvaW5kZXguaHRtbCNldmVudHMtMFxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEtleVByZXNzOlxuICAgICAgICAvLyBGaXJlRm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgICAvLyB0aGUgdW53YW50ZWQga2V5cHJlc3MgZXZlbnRzLiBFbnRlciBpcyBob3dldmVyIGJvdGggcHJpbnRhYmxlIGFuZFxuICAgICAgICAvLyBub24tcHJpbnRhYmxlLiBPbmUgd291bGQgZXhwZWN0IFRhYiB0byBiZSBhcyB3ZWxsIChidXQgaXQgaXNuJ3QpLlxuICAgICAgICBpZiAoZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkgPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wS2V5RG93bjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BLZXlVcDpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEJsdXI6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRm9jdXM6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDbGljazpcbiAgICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb250ZXh0TWVudTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEb3VibGVDbGljazpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZURvd246XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wTW91c2VNb3ZlOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3V0OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcE1vdXNlT3ZlcjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BNb3VzZVVwOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZzpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnRW5kOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyYWdFbnRlcjpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnRXhpdDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BEcmFnTGVhdmU6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ092ZXI6XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wRHJhZ1N0YXJ0OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcERyb3A6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoQ2FuY2VsOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoRW5kOlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcFRvdWNoTW92ZTpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BUb3VjaFN0YXJ0OlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVG91Y2hFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wU2Nyb2xsOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRvcExldmVsVHlwZXMudG9wV2hlZWw6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BDb3B5OlxuICAgICAgY2FzZSB0b3BMZXZlbFR5cGVzLnRvcEN1dDpcbiAgICAgIGNhc2UgdG9wTGV2ZWxUeXBlcy50b3BQYXN0ZTpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIEV2ZW50Q29uc3RydWN0b3IsXG4gICAgICAnU2ltcGxlRXZlbnRQbHVnaW46IFVuaGFuZGxlZCBldmVudCB0eXBlLCBgJXNgLicsXG4gICAgICB0b3BMZXZlbFR5cGVcbiAgICApIDogaW52YXJpYW50KEV2ZW50Q29uc3RydWN0b3IpKTtcbiAgICB2YXIgZXZlbnQgPSBFdmVudENvbnN0cnVjdG9yLmdldFBvb2xlZChcbiAgICAgIGRpc3BhdGNoQ29uZmlnLFxuICAgICAgdG9wTGV2ZWxUYXJnZXRJRCxcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKTtcbiAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoZXZlbnQpO1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNpbXBsZUV2ZW50UGx1Z2luO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2VTJsdGNHeGxSWFpsYm5SUWJIVm5hVzR1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCVGFXMXdiR1ZGZG1WdWRGQnNkV2RwYmx4dUlDb3ZYRzVjYmlkMWMyVWdjM1J5YVdOMEp6dGNibHh1ZG1GeUlFVjJaVzUwUTI5dWMzUmhiblJ6SUQwZ2NtVnhkV2x5WlNoY0lpNHZSWFpsYm5SRGIyNXpkR0Z1ZEhOY0lpazdYRzUyWVhJZ1JYWmxiblJRYkhWbmFXNVZkR2xzY3lBOUlISmxjWFZwY21Vb1hDSXVMMFYyWlc1MFVHeDFaMmx1VlhScGJITmNJaWs3WEc1MllYSWdSWFpsYm5SUWNtOXdZV2RoZEc5eWN5QTlJSEpsY1hWcGNtVW9YQ0l1TDBWMlpXNTBVSEp2Y0dGbllYUnZjbk5jSWlrN1hHNTJZWElnVTNsdWRHaGxkR2xqUTJ4cGNHSnZZWEprUlhabGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5VGVXNTBhR1YwYVdORGJHbHdZbTloY21SRmRtVnVkRndpS1R0Y2JuWmhjaUJUZVc1MGFHVjBhV05GZG1WdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFONWJuUm9aWFJwWTBWMlpXNTBYQ0lwTzF4dWRtRnlJRk41Ym5Sb1pYUnBZMFp2WTNWelJYWmxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVRlVzUwYUdWMGFXTkdiMk4xYzBWMlpXNTBYQ0lwTzF4dWRtRnlJRk41Ym5Sb1pYUnBZMHRsZVdKdllYSmtSWFpsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlUZVc1MGFHVjBhV05MWlhsaWIyRnlaRVYyWlc1MFhDSXBPMXh1ZG1GeUlGTjViblJvWlhScFkwMXZkWE5sUlhabGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5VGVXNTBhR1YwYVdOTmIzVnpaVVYyWlc1MFhDSXBPMXh1ZG1GeUlGTjViblJvWlhScFkwUnlZV2RGZG1WdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFONWJuUm9aWFJwWTBSeVlXZEZkbVZ1ZEZ3aUtUdGNiblpoY2lCVGVXNTBhR1YwYVdOVWIzVmphRVYyWlc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2VTNsdWRHaGxkR2xqVkc5MVkyaEZkbVZ1ZEZ3aUtUdGNiblpoY2lCVGVXNTBhR1YwYVdOVlNVVjJaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVM2x1ZEdobGRHbGpWVWxGZG1WdWRGd2lLVHRjYm5aaGNpQlRlVzUwYUdWMGFXTlhhR1ZsYkVWMlpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlUzbHVkR2hsZEdsalYyaGxaV3hGZG1WdWRGd2lLVHRjYmx4dWRtRnlJR2RsZEVWMlpXNTBRMmhoY2tOdlpHVWdQU0J5WlhGMWFYSmxLRndpTGk5blpYUkZkbVZ1ZEVOb1lYSkRiMlJsWENJcE8xeHVYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVkbUZ5SUd0bGVVOW1JRDBnY21WeGRXbHlaU2hjSWk0dmEyVjVUMlpjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYm5aaGNpQjBiM0JNWlhabGJGUjVjR1Z6SUQwZ1JYWmxiblJEYjI1emRHRnVkSE11ZEc5d1RHVjJaV3hVZVhCbGN6dGNibHh1ZG1GeUlHVjJaVzUwVkhsd1pYTWdQU0I3WEc0Z0lHSnNkWEk2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVRbXgxY2pvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmtKc2RYSkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdOc2FXTnJPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrTnNhV05yT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1UTJ4cFkydERZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdOdmJuUmxlSFJOWlc1MU9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtOdmJuUmxlSFJOWlc1MU9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVEyOXVkR1Y0ZEUxbGJuVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdOdmNIazZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVEyOXdlVG9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZia052Y0hsRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR04xZERvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVEZFhRNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1RGRYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSdmRXSnNaVU5zYVdOck9pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2YmtSdmRXSnNaVU5zYVdOck9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVJHOTFZbXhsUTJ4cFkydERZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXYzZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVJISmhaem9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZia1J5WVdkRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdkRmJtUTZJSHRjYmlBZ0lDQndhR0Z6WldSU1pXZHBjM1J5WVhScGIyNU9ZVzFsY3pvZ2UxeHVJQ0FnSUNBZ1luVmlZbXhsWkRvZ2EyVjVUMllvZTI5dVJISmhaMFZ1WkRvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmtSeVlXZEZibVJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnlZV2RGYm5SbGNqb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1RWNtRm5SVzUwWlhJNklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1RWNtRm5SVzUwWlhKRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdkRmVHbDBPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrUnlZV2RGZUdsME9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVJISmhaMFY0YVhSRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR1J5WVdkTVpXRjJaVG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNUVjbUZuVEdWaGRtVTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNUVjbUZuVEdWaGRtVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXZFBkbVZ5T2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia1J5WVdkUGRtVnlPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVSSEpoWjA5MlpYSkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdSeVlXZFRkR0Z5ZERvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVFY21GblUzUmhjblE2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVFY21GblUzUmhjblJEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHUnliM0E2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVSSEp2Y0RvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmtSeWIzQkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdadlkzVnpPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrWnZZM1Z6T2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1Um05amRYTkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUdsdWNIVjBPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrbHVjSFYwT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1U1c1d2RYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUd0bGVVUnZkMjQ2SUh0Y2JpQWdJQ0J3YUdGelpXUlNaV2RwYzNSeVlYUnBiMjVPWVcxbGN6b2dlMXh1SUNBZ0lDQWdZblZpWW14bFpEb2dhMlY1VDJZb2UyOXVTMlY1Ukc5M2Jqb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJrdGxlVVJ2ZDI1RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR3RsZVZCeVpYTnpPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJrdGxlVkJ5WlhOek9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVMyVjVVSEpsYzNORFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR3RsZVZWd09pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2Ymt0bGVWVndPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVTMlY1VlhCRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJR3h2WVdRNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1VEc5aFpEb2dkSEoxWlgwcExGeHVJQ0FnSUNBZ1kyRndkSFZ5WldRNklHdGxlVTltS0h0dmJreHZZV1JEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHVnljbTl5T2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZia1Z5Y205eU9pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVJYSnliM0pEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lDOHZJRTV2ZEdVNklGZGxJR1J2SUc1dmRDQmhiR3h2ZHlCc2FYTjBaVzVwYm1jZ2RHOGdiVzkxYzJWUGRtVnlJR1YyWlc1MGN5NGdTVzV6ZEdWaFpDd2dkWE5sSUhSb1pWeHVJQ0F2THlCdmJrMXZkWE5sUlc1MFpYSXZiMjVOYjNWelpVeGxZWFpsSUdOeVpXRjBaV1FnWW5rZ1lFVnVkR1Z5VEdWaGRtVkZkbVZ1ZEZCc2RXZHBibUF1WEc0Z0lHMXZkWE5sUkc5M2Jqb2dlMXh1SUNBZ0lIQm9ZWE5sWkZKbFoybHpkSEpoZEdsdmJrNWhiV1Z6T2lCN1hHNGdJQ0FnSUNCaWRXSmliR1ZrT2lCclpYbFBaaWg3YjI1TmIzVnpaVVJ2ZDI0NklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1TmIzVnpaVVJ2ZDI1RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJRzF2ZFhObFRXOTJaVG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNU5iM1Z6WlUxdmRtVTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNU5iM1Z6WlUxdmRtVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUcxdmRYTmxUM1YwT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZiazF2ZFhObFQzVjBPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVUVzkxYzJWUGRYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUcxdmRYTmxUM1psY2pvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVOYjNWelpVOTJaWEk2SUhSeWRXVjlLU3hjYmlBZ0lDQWdJR05oY0hSMWNtVmtPaUJyWlhsUFppaDdiMjVOYjNWelpVOTJaWEpEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHMXZkWE5sVlhBNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1VFc5MWMyVlZjRG9nZEhKMVpYMHBMRnh1SUNBZ0lDQWdZMkZ3ZEhWeVpXUTZJR3RsZVU5bUtIdHZiazF2ZFhObFZYQkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhCaGMzUmxPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJsQmhjM1JsT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1VUdGemRHVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhKbGMyVjBPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJsSmxjMlYwT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1VW1WelpYUkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhOamNtOXNiRG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNVRZM0p2Ykd3NklIUnlkV1Y5S1N4Y2JpQWdJQ0FnSUdOaGNIUjFjbVZrT2lCclpYbFBaaWg3YjI1VFkzSnZiR3hEWVhCMGRYSmxPaUIwY25WbGZTbGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lITjFZbTFwZERvZ2UxeHVJQ0FnSUhCb1lYTmxaRkpsWjJsemRISmhkR2x2Yms1aGJXVnpPaUI3WEc0Z0lDQWdJQ0JpZFdKaWJHVmtPaUJyWlhsUFppaDdiMjVUZFdKdGFYUTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNVRkV0p0YVhSRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSFJ2ZFdOb1EyRnVZMlZzT2lCN1hHNGdJQ0FnY0doaGMyVmtVbVZuYVhOMGNtRjBhVzl1VG1GdFpYTTZJSHRjYmlBZ0lDQWdJR0oxWW1Kc1pXUTZJR3RsZVU5bUtIdHZibFJ2ZFdOb1EyRnVZMlZzT2lCMGNuVmxmU2tzWEc0Z0lDQWdJQ0JqWVhCMGRYSmxaRG9nYTJWNVQyWW9lMjl1Vkc5MVkyaERZVzVqWld4RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSFJ2ZFdOb1JXNWtPaUI3WEc0Z0lDQWdjR2hoYzJWa1VtVm5hWE4wY21GMGFXOXVUbUZ0WlhNNklIdGNiaUFnSUNBZ0lHSjFZbUpzWldRNklHdGxlVTltS0h0dmJsUnZkV05vUlc1a09pQjBjblZsZlNrc1hHNGdJQ0FnSUNCallYQjBkWEpsWkRvZ2EyVjVUMllvZTI5dVZHOTFZMmhGYm1SRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSFJ2ZFdOb1RXOTJaVG9nZTF4dUlDQWdJSEJvWVhObFpGSmxaMmx6ZEhKaGRHbHZiazVoYldWek9pQjdYRzRnSUNBZ0lDQmlkV0ppYkdWa09pQnJaWGxQWmloN2IyNVViM1ZqYUUxdmRtVTZJSFJ5ZFdWOUtTeGNiaUFnSUNBZ0lHTmhjSFIxY21Wa09pQnJaWGxQWmloN2IyNVViM1ZqYUUxdmRtVkRZWEIwZFhKbE9pQjBjblZsZlNsY2JpQWdJQ0I5WEc0Z0lIMHNYRzRnSUhSdmRXTm9VM1JoY25RNklIdGNiaUFnSUNCd2FHRnpaV1JTWldkcGMzUnlZWFJwYjI1T1lXMWxjem9nZTF4dUlDQWdJQ0FnWW5WaVlteGxaRG9nYTJWNVQyWW9lMjl1Vkc5MVkyaFRkR0Z5ZERvZ2RISjFaWDBwTEZ4dUlDQWdJQ0FnWTJGd2RIVnlaV1E2SUd0bGVVOW1LSHR2YmxSdmRXTm9VM1JoY25SRFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSGRvWldWc09pQjdYRzRnSUNBZ2NHaGhjMlZrVW1WbmFYTjBjbUYwYVc5dVRtRnRaWE02SUh0Y2JpQWdJQ0FnSUdKMVltSnNaV1E2SUd0bGVVOW1LSHR2Ymxkb1pXVnNPaUIwY25WbGZTa3NYRzRnSUNBZ0lDQmpZWEIwZFhKbFpEb2dhMlY1VDJZb2UyOXVWMmhsWld4RFlYQjBkWEpsT2lCMGNuVmxmU2xjYmlBZ0lDQjlYRzRnSUgxY2JuMDdYRzVjYm5aaGNpQjBiM0JNWlhabGJFVjJaVzUwYzFSdlJHbHpjR0YwWTJoRGIyNW1hV2NnUFNCN1hHNGdJSFJ2Y0VKc2RYSTZJQ0FnSUNBZ0lDQmxkbVZ1ZEZSNWNHVnpMbUpzZFhJc1hHNGdJSFJ2Y0VOc2FXTnJPaUFnSUNBZ0lDQmxkbVZ1ZEZSNWNHVnpMbU5zYVdOckxGeHVJQ0IwYjNCRGIyNTBaWGgwVFdWdWRUb2daWFpsYm5SVWVYQmxjeTVqYjI1MFpYaDBUV1Z1ZFN4Y2JpQWdkRzl3UTI5d2VUb2dJQ0FnSUNBZ0lHVjJaVzUwVkhsd1pYTXVZMjl3ZVN4Y2JpQWdkRzl3UTNWME9pQWdJQ0FnSUNBZ0lHVjJaVzUwVkhsd1pYTXVZM1YwTEZ4dUlDQjBiM0JFYjNWaWJHVkRiR2xqYXpvZ1pYWmxiblJVZVhCbGN5NWtiM1ZpYkdWRGJHbGpheXhjYmlBZ2RHOXdSSEpoWnpvZ0lDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdVpISmhaeXhjYmlBZ2RHOXdSSEpoWjBWdVpEb2dJQ0FnSUdWMlpXNTBWSGx3WlhNdVpISmhaMFZ1WkN4Y2JpQWdkRzl3UkhKaFowVnVkR1Z5T2lBZ0lHVjJaVzUwVkhsd1pYTXVaSEpoWjBWdWRHVnlMRnh1SUNCMGIzQkVjbUZuUlhocGREb2dJQ0FnWlhabGJuUlVlWEJsY3k1a2NtRm5SWGhwZEN4Y2JpQWdkRzl3UkhKaFoweGxZWFpsT2lBZ0lHVjJaVzUwVkhsd1pYTXVaSEpoWjB4bFlYWmxMRnh1SUNCMGIzQkVjbUZuVDNabGNqb2dJQ0FnWlhabGJuUlVlWEJsY3k1a2NtRm5UM1psY2l4Y2JpQWdkRzl3UkhKaFoxTjBZWEowT2lBZ0lHVjJaVzUwVkhsd1pYTXVaSEpoWjFOMFlYSjBMRnh1SUNCMGIzQkVjbTl3T2lBZ0lDQWdJQ0FnWlhabGJuUlVlWEJsY3k1a2NtOXdMRnh1SUNCMGIzQkZjbkp2Y2pvZ0lDQWdJQ0FnWlhabGJuUlVlWEJsY3k1bGNuSnZjaXhjYmlBZ2RHOXdSbTlqZFhNNklDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdVptOWpkWE1zWEc0Z0lIUnZjRWx1Y0hWME9pQWdJQ0FnSUNCbGRtVnVkRlI1Y0dWekxtbHVjSFYwTEZ4dUlDQjBiM0JMWlhsRWIzZHVPaUFnSUNBZ1pYWmxiblJVZVhCbGN5NXJaWGxFYjNkdUxGeHVJQ0IwYjNCTFpYbFFjbVZ6Y3pvZ0lDQWdaWFpsYm5SVWVYQmxjeTVyWlhsUWNtVnpjeXhjYmlBZ2RHOXdTMlY1VlhBNklDQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdWEyVjVWWEFzWEc0Z0lIUnZjRXh2WVdRNklDQWdJQ0FnSUNCbGRtVnVkRlI1Y0dWekxteHZZV1FzWEc0Z0lIUnZjRTF2ZFhObFJHOTNiam9nSUNCbGRtVnVkRlI1Y0dWekxtMXZkWE5sUkc5M2JpeGNiaUFnZEc5d1RXOTFjMlZOYjNabE9pQWdJR1YyWlc1MFZIbHdaWE11Ylc5MWMyVk5iM1psTEZ4dUlDQjBiM0JOYjNWelpVOTFkRG9nSUNBZ1pYWmxiblJVZVhCbGN5NXRiM1Z6WlU5MWRDeGNiaUFnZEc5d1RXOTFjMlZQZG1WeU9pQWdJR1YyWlc1MFZIbHdaWE11Ylc5MWMyVlBkbVZ5TEZ4dUlDQjBiM0JOYjNWelpWVndPaUFnSUNBZ1pYWmxiblJVZVhCbGN5NXRiM1Z6WlZWd0xGeHVJQ0IwYjNCUVlYTjBaVG9nSUNBZ0lDQWdaWFpsYm5SVWVYQmxjeTV3WVhOMFpTeGNiaUFnZEc5d1VtVnpaWFE2SUNBZ0lDQWdJR1YyWlc1MFZIbHdaWE11Y21WelpYUXNYRzRnSUhSdmNGTmpjbTlzYkRvZ0lDQWdJQ0JsZG1WdWRGUjVjR1Z6TG5OamNtOXNiQ3hjYmlBZ2RHOXdVM1ZpYldsME9pQWdJQ0FnSUdWMlpXNTBWSGx3WlhNdWMzVmliV2wwTEZ4dUlDQjBiM0JVYjNWamFFTmhibU5sYkRvZ1pYWmxiblJVZVhCbGN5NTBiM1ZqYUVOaGJtTmxiQ3hjYmlBZ2RHOXdWRzkxWTJoRmJtUTZJQ0FnSUdWMlpXNTBWSGx3WlhNdWRHOTFZMmhGYm1Rc1hHNGdJSFJ2Y0ZSdmRXTm9UVzkyWlRvZ0lDQmxkbVZ1ZEZSNWNHVnpMblJ2ZFdOb1RXOTJaU3hjYmlBZ2RHOXdWRzkxWTJoVGRHRnlkRG9nSUdWMlpXNTBWSGx3WlhNdWRHOTFZMmhUZEdGeWRDeGNiaUFnZEc5d1YyaGxaV3c2SUNBZ0lDQWdJR1YyWlc1MFZIbHdaWE11ZDJobFpXeGNibjA3WEc1Y2JtWnZjaUFvZG1GeUlIUjVjR1VnYVc0Z2RHOXdUR1YyWld4RmRtVnVkSE5VYjBScGMzQmhkR05vUTI5dVptbG5LU0I3WEc0Z0lIUnZjRXhsZG1Wc1JYWmxiblJ6Vkc5RWFYTndZWFJqYUVOdmJtWnBaMXQwZVhCbFhTNWtaWEJsYm1SbGJtTnBaWE1nUFNCYmRIbHdaVjA3WEc1OVhHNWNiblpoY2lCVGFXMXdiR1ZGZG1WdWRGQnNkV2RwYmlBOUlIdGNibHh1SUNCbGRtVnVkRlI1Y0dWek9pQmxkbVZ1ZEZSNWNHVnpMRnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRZVzFsSUdGeklIUm9aU0JrWldaaGRXeDBJR2x0Y0d4bGJXVnVkR0YwYVc5dUxDQmxlR05sY0hRZ1kyRnVZMlZzY3lCMGFHVWdaWFpsYm5RZ2QyaGxiaUJ5WlhSMWNtNWNiaUFnSUNvZ2RtRnNkV1VnYVhNZ1ptRnNjMlV1SUZSb2FYTWdZbVZvWVhacGIzSWdkMmxzYkNCaVpTQmthWE5oWW14bFpDQnBiaUJoSUdaMWRIVnlaU0J5Wld4bFlYTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTI5aWFtVmpkSDBnUlhabGJuUWdkRzhnWW1VZ1pHbHpjR0YwWTJobFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0bWRXNWpkR2x2Ym4wZ1FYQndiR2xqWVhScGIyNHRiR1YyWld3Z1kyRnNiR0poWTJzdVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JrYjIxSlJDQkVUMDBnU1VRZ2RHOGdjR0Z6Y3lCMGJ5QjBhR1VnWTJGc2JHSmhZMnN1WEc0Z0lDQXFMMXh1SUNCbGVHVmpkWFJsUkdsemNHRjBZMmc2SUdaMWJtTjBhVzl1S0dWMlpXNTBMQ0JzYVhOMFpXNWxjaXdnWkc5dFNVUXBJSHRjYmlBZ0lDQjJZWElnY21WMGRYSnVWbUZzZFdVZ1BTQkZkbVZ1ZEZCc2RXZHBibFYwYVd4ekxtVjRaV04xZEdWRWFYTndZWFJqYUNobGRtVnVkQ3dnYkdsemRHVnVaWElzSUdSdmJVbEVLVHRjYmx4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QjNZWEp1YVc1bktGeHVJQ0FnSUNBZ2RIbHdaVzltSUhKbGRIVnlibFpoYkhWbElDRTlQU0FuWW05dmJHVmhiaWNzWEc0Z0lDQWdJQ0FuVW1WMGRYSnVhVzVuSUdCbVlXeHpaV0FnWm5KdmJTQmhiaUJsZG1WdWRDQm9ZVzVrYkdWeUlHbHpJR1JsY0hKbFkyRjBaV1FnWVc1a0lIZHBiR3dnWW1VZ0p5QXJYRzRnSUNBZ0lDQW5hV2R1YjNKbFpDQnBiaUJoSUdaMWRIVnlaU0J5Wld4bFlYTmxMaUJKYm5OMFpXRmtMQ0J0WVc1MVlXeHNlU0JqWVd4c0lDY2dLMXh1SUNBZ0lDQWdKMlV1YzNSdmNGQnliM0JoWjJGMGFXOXVLQ2tnYjNJZ1pTNXdjbVYyWlc1MFJHVm1ZWFZzZENncExDQmhjeUJoY0hCeWIzQnlhV0YwWlM0blhHNGdJQ0FnS1NBNklHNTFiR3dwTzF4dVhHNGdJQ0FnYVdZZ0tISmxkSFZ5YmxaaGJIVmxJRDA5UFNCbVlXeHpaU2tnZTF4dUlDQWdJQ0FnWlhabGJuUXVjM1J2Y0ZCeWIzQmhaMkYwYVc5dUtDazdYRzRnSUNBZ0lDQmxkbVZ1ZEM1d2NtVjJaVzUwUkdWbVlYVnNkQ2dwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNBdktpcGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhSdmNFeGxkbVZzVkhsd1pTQlNaV052Y21RZ1puSnZiU0JnUlhabGJuUkRiMjV6ZEdGdWRITmdMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UwUlBUVVYyWlc1MFZHRnlaMlYwZlNCMGIzQk1aWFpsYkZSaGNtZGxkQ0JVYUdVZ2JHbHpkR1Z1YVc1bklHTnZiWEJ2Ym1WdWRDQnliMjkwSUc1dlpHVXVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMGIzQk1aWFpsYkZSaGNtZGxkRWxFSUVsRUlHOW1JR0IwYjNCTVpYWmxiRlJoY21kbGRHQXVYRzRnSUNBcUlFQndZWEpoYlNCN2IySnFaV04wZlNCdVlYUnBkbVZGZG1WdWRDQk9ZWFJwZG1VZ1luSnZkM05sY2lCbGRtVnVkQzVjYmlBZ0lDb2dRSEpsZEhWeWJpQjdLbjBnUVc0Z1lXTmpkVzExYkdGMGFXOXVJRzltSUhONWJuUm9aWFJwWXlCbGRtVnVkSE11WEc0Z0lDQXFJRUJ6WldVZ2UwVjJaVzUwVUd4MVoybHVTSFZpTG1WNGRISmhZM1JGZG1WdWRITjlYRzRnSUNBcUwxeHVJQ0JsZUhSeVlXTjBSWFpsYm5Sek9pQm1kVzVqZEdsdmJpaGNiaUFnSUNBZ0lIUnZjRXhsZG1Wc1ZIbHdaU3hjYmlBZ0lDQWdJSFJ2Y0V4bGRtVnNWR0Z5WjJWMExGeHVJQ0FnSUNBZ2RHOXdUR1YyWld4VVlYSm5aWFJKUkN4Y2JpQWdJQ0FnSUc1aGRHbDJaVVYyWlc1MEtTQjdYRzRnSUNBZ2RtRnlJR1JwYzNCaGRHTm9RMjl1Wm1sbklEMGdkRzl3VEdWMlpXeEZkbVZ1ZEhOVWIwUnBjM0JoZEdOb1EyOXVabWxuVzNSdmNFeGxkbVZzVkhsd1pWMDdYRzRnSUNBZ2FXWWdLQ0ZrYVhOd1lYUmphRU52Ym1acFp5a2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNTFiR3c3WEc0Z0lDQWdmVnh1SUNBZ0lIWmhjaUJGZG1WdWRFTnZibk4wY25WamRHOXlPMXh1SUNBZ0lITjNhWFJqYUNBb2RHOXdUR1YyWld4VWVYQmxLU0I3WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1NXNXdkWFE2WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1RHOWhaRHBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRmNuSnZjanBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCU1pYTmxkRHBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCVGRXSnRhWFE2WEc0Z0lDQWdJQ0FnSUM4dklFaFVUVXdnUlhabGJuUnpYRzRnSUNBZ0lDQWdJQzh2SUVCelpXVWdhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZWRkl2YUhSdGJEVXZhVzVrWlhndWFIUnRiQ05sZG1WdWRITXRNRnh1SUNBZ0lDQWdJQ0JGZG1WdWRFTnZibk4wY25WamRHOXlJRDBnVTNsdWRHaGxkR2xqUlhabGJuUTdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRXRsZVZCeVpYTnpPbHh1SUNBZ0lDQWdJQ0F2THlCR2FYSmxSbTk0SUdOeVpXRjBaWE1nWVNCclpYbHdjbVZ6Y3lCbGRtVnVkQ0JtYjNJZ1puVnVZM1JwYjI0Z2EyVjVjeUIwYjI4dUlGUm9hWE1nY21WdGIzWmxjMXh1SUNBZ0lDQWdJQ0F2THlCMGFHVWdkVzUzWVc1MFpXUWdhMlY1Y0hKbGMzTWdaWFpsYm5SekxpQkZiblJsY2lCcGN5Qm9iM2RsZG1WeUlHSnZkR2dnY0hKcGJuUmhZbXhsSUdGdVpGeHVJQ0FnSUNBZ0lDQXZMeUJ1YjI0dGNISnBiblJoWW14bExpQlBibVVnZDI5MWJHUWdaWGh3WldOMElGUmhZaUIwYnlCaVpTQmhjeUIzWld4c0lDaGlkWFFnYVhRZ2FYTnVKM1FwTGx4dUlDQWdJQ0FnSUNCcFppQW9aMlYwUlhabGJuUkRhR0Z5UTI5a1pTaHVZWFJwZG1WRmRtVnVkQ2tnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0F2S2lCbVlXeHNjeUIwYUhKdmRXZG9JQ292WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1MyVjVSRzkzYmpwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkxaWGxWY0RwY2JpQWdJQ0FnSUNBZ1JYWmxiblJEYjI1emRISjFZM1J2Y2lBOUlGTjViblJvWlhScFkwdGxlV0p2WVhKa1JYWmxiblE3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0VKc2RYSTZYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3Um05amRYTTZYRzRnSUNBZ0lDQWdJRVYyWlc1MFEyOXVjM1J5ZFdOMGIzSWdQU0JUZVc1MGFHVjBhV05HYjJOMWMwVjJaVzUwTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRGJHbGphenBjYmlBZ0lDQWdJQ0FnTHk4Z1JtbHlaV1p2ZUNCamNtVmhkR1Z6SUdFZ1kyeHBZMnNnWlhabGJuUWdiMjRnY21sbmFIUWdiVzkxYzJVZ1kyeHBZMnR6TGlCVWFHbHpJSEpsYlc5MlpYTWdkR2hsWEc0Z0lDQWdJQ0FnSUM4dklIVnVkMkZ1ZEdWa0lHTnNhV05ySUdWMlpXNTBjeTVjYmlBZ0lDQWdJQ0FnYVdZZ0tHNWhkR2wyWlVWMlpXNTBMbUoxZEhSdmJpQTlQVDBnTWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVkV3hzTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDOHFJR1poYkd4eklIUm9jbTkxWjJnZ0tpOWNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JEYjI1MFpYaDBUV1Z1ZFRwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQkViM1ZpYkdWRGJHbGphenBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCTmIzVnpaVVJ2ZDI0NlhHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdUVzkxYzJWTmIzWmxPbHh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0UxdmRYTmxUM1YwT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFMXZkWE5sVDNabGNqcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JOYjNWelpWVndPbHh1SUNBZ0lDQWdJQ0JGZG1WdWRFTnZibk4wY25WamRHOXlJRDBnVTNsdWRHaGxkR2xqVFc5MWMyVkZkbVZ1ZER0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElIUnZjRXhsZG1Wc1ZIbHdaWE11ZEc5d1JISmhaenBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRWNtRm5SVzVrT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFUnlZV2RGYm5SbGNqcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JFY21GblJYaHBkRHBjYmlBZ0lDQWdJR05oYzJVZ2RHOXdUR1YyWld4VWVYQmxjeTUwYjNCRWNtRm5UR1ZoZG1VNlhHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdSSEpoWjA5MlpYSTZYRzRnSUNBZ0lDQmpZWE5sSUhSdmNFeGxkbVZzVkhsd1pYTXVkRzl3UkhKaFoxTjBZWEowT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNFUnliM0E2WEc0Z0lDQWdJQ0FnSUVWMlpXNTBRMjl1YzNSeWRXTjBiM0lnUFNCVGVXNTBhR1YwYVdORWNtRm5SWFpsYm5RN1hHNGdJQ0FnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNGUnZkV05vUTJGdVkyVnNPbHh1SUNBZ0lDQWdZMkZ6WlNCMGIzQk1aWFpsYkZSNWNHVnpMblJ2Y0ZSdmRXTm9SVzVrT2x4dUlDQWdJQ0FnWTJGelpTQjBiM0JNWlhabGJGUjVjR1Z6TG5SdmNGUnZkV05vVFc5MlpUcGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JVYjNWamFGTjBZWEowT2x4dUlDQWdJQ0FnSUNCRmRtVnVkRU52Ym5OMGNuVmpkRzl5SUQwZ1UzbHVkR2hsZEdsalZHOTFZMmhGZG1WdWREdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdVMk55YjJ4c09seHVJQ0FnSUNBZ0lDQkZkbVZ1ZEVOdmJuTjBjblZqZEc5eUlEMGdVM2x1ZEdobGRHbGpWVWxGZG1WdWREdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJSFJ2Y0V4bGRtVnNWSGx3WlhNdWRHOXdWMmhsWld3NlhHNGdJQ0FnSUNBZ0lFVjJaVzUwUTI5dWMzUnlkV04wYjNJZ1BTQlRlVzUwYUdWMGFXTlhhR1ZsYkVWMlpXNTBPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lHTmhjMlVnZEc5d1RHVjJaV3hVZVhCbGN5NTBiM0JEYjNCNU9seHVJQ0FnSUNBZ1kyRnpaU0IwYjNCTVpYWmxiRlI1Y0dWekxuUnZjRU4xZERwY2JpQWdJQ0FnSUdOaGMyVWdkRzl3VEdWMlpXeFVlWEJsY3k1MGIzQlFZWE4wWlRwY2JpQWdJQ0FnSUNBZ1JYWmxiblJEYjI1emRISjFZM1J2Y2lBOUlGTjViblJvWlhScFkwTnNhWEJpYjJGeVpFVjJaVzUwTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQjlYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0FnSUVWMlpXNTBRMjl1YzNSeWRXTjBiM0lzWEc0Z0lDQWdJQ0FuVTJsdGNHeGxSWFpsYm5SUWJIVm5hVzQ2SUZWdWFHRnVaR3hsWkNCbGRtVnVkQ0IwZVhCbExDQmdKWE5nTGljc1hHNGdJQ0FnSUNCMGIzQk1aWFpsYkZSNWNHVmNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRVYyWlc1MFEyOXVjM1J5ZFdOMGIzSXBLVHRjYmlBZ0lDQjJZWElnWlhabGJuUWdQU0JGZG1WdWRFTnZibk4wY25WamRHOXlMbWRsZEZCdmIyeGxaQ2hjYmlBZ0lDQWdJR1JwYzNCaGRHTm9RMjl1Wm1sbkxGeHVJQ0FnSUNBZ2RHOXdUR1YyWld4VVlYSm5aWFJKUkN4Y2JpQWdJQ0FnSUc1aGRHbDJaVVYyWlc1MFhHNGdJQ0FnS1R0Y2JpQWdJQ0JGZG1WdWRGQnliM0JoWjJGMGIzSnpMbUZqWTNWdGRXeGhkR1ZVZDI5UWFHRnpaVVJwYzNCaGRHTm9aWE1vWlhabGJuUXBPMXh1SUNBZ0lISmxkSFZ5YmlCbGRtVnVkRHRjYmlBZ2ZWeHVYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlGTnBiWEJzWlVWMlpXNTBVR3gxWjJsdU8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xudmFyIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0ge1xuICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiAoXG4gICAgICAnY2xpcGJvYXJkRGF0YScgaW4gZXZlbnQgP1xuICAgICAgICBldmVudC5jbGlwYm9hcmREYXRhIDpcbiAgICAgICAgd2luZG93LmNsaXBib2FyZERhdGFcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNDbGlwYm9hcmRFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNDbGlwYm9hcmRFdmVudCwgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWNvbXBvc2l0aW9uZXZlbnRzXG4gKi9cbnZhciBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlID0ge1xuICBkYXRhOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50KFxuICBkaXNwYXRjaENvbmZpZyxcbiAgZGlzcGF0Y2hNYXJrZXIsXG4gIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhcbiAgU3ludGhldGljQ29tcG9zaXRpb25FdmVudCxcbiAgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZVxuKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0RyYWdFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljTW91c2VFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIERyYWdFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGRhdGFUcmFuc2ZlcjogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRHJhZ0V2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljTW91c2VFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNEcmFnRXZlbnQsIERyYWdFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRHJhZ0V2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY0V2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZShcIi4vUG9vbGVkQ2xhc3NcIik7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKFwiLi9lbXB0eUZ1bmN0aW9uXCIpO1xudmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRUYXJnZXRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBFdmVudEludGVyZmFjZSA9IHtcbiAgdHlwZTogbnVsbCxcbiAgdGFyZ2V0OiBnZXRFdmVudFRhcmdldCxcbiAgLy8gY3VycmVudFRhcmdldCBpcyBzZXQgd2hlbiBkaXNwYXRjaGluZzsgbm8gdXNlIGluIGNvcHlpbmcgaXQgaGVyZVxuICBjdXJyZW50VGFyZ2V0OiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCxcbiAgZXZlbnRQaGFzZTogbnVsbCxcbiAgYnViYmxlczogbnVsbCxcbiAgY2FuY2VsYWJsZTogbnVsbCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVmYXVsdFByZXZlbnRlZDogbnVsbCxcbiAgaXNUcnVzdGVkOiBudWxsXG59O1xuXG4vKipcbiAqIFN5bnRoZXRpYyBldmVudHMgYXJlIGRpc3BhdGNoZWQgYnkgZXZlbnQgcGx1Z2lucywgdHlwaWNhbGx5IGluIHJlc3BvbnNlIHRvIGFcbiAqIHRvcC1sZXZlbCBldmVudCBkZWxlZ2F0aW9uIGhhbmRsZXIuXG4gKlxuICogVGhlc2Ugc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5IHVzZSBwb29saW5nIHRvIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGdhcmJhZ2VcbiAqIGNvbGxlY3Rpb24uIFRoZSBzeXN0ZW0gc2hvdWxkIGNoZWNrIGBpc1BlcnNpc3RlbnRgIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZVxuICogZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWZ0ZXIgYmVpbmcgZGlzcGF0Y2hlZC4gVXNlcnMgdGhhdFxuICogbmVlZCBhIHBlcnNpc3RlZCBldmVudCBzaG91bGQgaW52b2tlIGBwZXJzaXN0YC5cbiAqXG4gKiBTeW50aGV0aWMgZXZlbnRzIChhbmQgc3ViY2xhc3NlcykgaW1wbGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5XG4gKiBub3JtYWxpemluZyBicm93c2VyIHF1aXJrcy4gU3ViY2xhc3NlcyBkbyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBpbXBsZW1lbnQgYVxuICogRE9NIGludGVyZmFjZTsgY3VzdG9tIGFwcGxpY2F0aW9uLXNwZWNpZmljIGV2ZW50cyBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCkge1xuICB0aGlzLmRpc3BhdGNoQ29uZmlnID0gZGlzcGF0Y2hDb25maWc7XG4gIHRoaXMuZGlzcGF0Y2hNYXJrZXIgPSBkaXNwYXRjaE1hcmtlcjtcbiAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuXG4gIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcbiAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgaWYgKCFJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtwcm9wTmFtZV07XG4gICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W3Byb3BOYW1lXTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/XG4gICAgbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6XG4gICAgbmF0aXZlRXZlbnQucmV0dXJuVmFsdWUgPT09IGZhbHNlO1xuICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWU7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2U7XG4gIH1cbiAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZTtcbn1cblxuYXNzaWduKFN5bnRoZXRpY0V2ZW50LnByb3RvdHlwZSwge1xuXG4gIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAqIHRoZW0gYmFjayBpbnRvIHRoZSBwb29sLiBUaGlzIGFsbG93cyBhIHdheSB0byBob2xkIG9udG8gYSByZWZlcmVuY2UgdGhhdFxuICAgKiB3b24ndCBiZSBhZGRlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAqL1xuICBwZXJzaXN0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzUGVyc2lzdGVudCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNQZXJzaXN0ZW50OiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UsXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIGBkZXN0cnVjdG9yYCBvbiBlYWNoIGluc3RhbmNlIGl0IHJlbGVhc2VzLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIEludGVyZmFjZSA9IHRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO1xuICAgIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmRpc3BhdGNoQ29uZmlnID0gbnVsbDtcbiAgICB0aGlzLmRpc3BhdGNoTWFya2VyID0gbnVsbDtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbnVsbDtcbiAgfVxuXG59KTtcblxuU3ludGhldGljRXZlbnQuSW50ZXJmYWNlID0gRXZlbnRJbnRlcmZhY2U7XG5cbi8qKlxuICogSGVscGVyIHRvIHJlZHVjZSBib2lsZXJwbGF0ZSB3aGVuIGNyZWF0aW5nIHN1YmNsYXNzZXMuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gQ2xhc3NcbiAqIEBwYXJhbSB7P29iamVjdH0gSW50ZXJmYWNlXG4gKi9cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyA9IGZ1bmN0aW9uKENsYXNzLCBJbnRlcmZhY2UpIHtcbiAgdmFyIFN1cGVyID0gdGhpcztcblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICBhc3NpZ24ocHJvdG90eXBlLCBDbGFzcy5wcm90b3R5cGUpO1xuICBDbGFzcy5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENsYXNzO1xuXG4gIENsYXNzLkludGVyZmFjZSA9IGFzc2lnbih7fSwgU3VwZXIuSW50ZXJmYWNlLCBJbnRlcmZhY2UpO1xuICBDbGFzcy5hdWdtZW50Q2xhc3MgPSBTdXBlci5hdWdtZW50Q2xhc3M7XG5cbiAgUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKENsYXNzLCBQb29sZWRDbGFzcy50aHJlZUFyZ3VtZW50UG9vbGVyKTtcbn07XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhTeW50aGV0aWNFdmVudCwgUG9vbGVkQ2xhc3MudGhyZWVBcmd1bWVudFBvb2xlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljRm9jdXNFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljVUlFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEZvY3VzRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgRm9jdXNFdmVudEludGVyZmFjZSA9IHtcbiAgcmVsYXRlZFRhcmdldDogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRm9jdXNFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljRm9jdXNFdmVudCwgRm9jdXNFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRm9jdXNFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNJbnB1dEV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljRXZlbnRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG52YXIgSW5wdXRFdmVudEludGVyZmFjZSA9IHtcbiAgZGF0YTogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljSW5wdXRFdmVudChcbiAgZGlzcGF0Y2hDb25maWcsXG4gIGRpc3BhdGNoTWFya2VyLFxuICBuYXRpdmVFdmVudCkge1xuICBTeW50aGV0aWNFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoXG4gIFN5bnRoZXRpY0lucHV0RXZlbnQsXG4gIElucHV0RXZlbnRJbnRlcmZhY2Vcbik7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljSW5wdXRFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNLZXlib2FyZEV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNVSUV2ZW50XCIpO1xuXG52YXIgZ2V0RXZlbnRDaGFyQ29kZSA9IHJlcXVpcmUoXCIuL2dldEV2ZW50Q2hhckNvZGVcIik7XG52YXIgZ2V0RXZlbnRLZXkgPSByZXF1aXJlKFwiLi9nZXRFdmVudEtleVwiKTtcbnZhciBnZXRFdmVudE1vZGlmaWVyU3RhdGUgPSByZXF1aXJlKFwiLi9nZXRFdmVudE1vZGlmaWVyU3RhdGVcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGxvY2F0aW9uOiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxuICByZXBlYXQ6IG51bGwsXG4gIGxvY2FsZTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2RlOiBmdW5jdGlvbihldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cblxuICAgIC8vIEtleVByZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBhbmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbihldmVudCkge1xuICAgIC8vIGBrZXlDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5RG93bi9VcCBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyBwaHlzaWNhbCBrZXlib2FyZCBrZXkuXG5cbiAgICAvLyBUaGUgYWN0dWFsIG1lYW5pbmcgb2YgdGhlIHZhbHVlIGRlcGVuZHMgb24gdGhlIHVzZXJzJyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyB3aGljaCBjYW5ub3QgYmUgZGV0ZWN0ZWQuIEFzc3VtaW5nIHRoYXQgaXQgaXMgYSBVUyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyBwcm92aWRlcyBhIHN1cnByaXNpbmdseSBhY2N1cmF0ZSBtYXBwaW5nIGZvciBVUyBhbmQgRXVyb3BlYW4gdXNlcnMuXG4gICAgLy8gRHVlIHRvIHRoaXMsIGl0IGlzIGxlZnQgdG8gdGhlIHVzZXIgdG8gaW1wbGVtZW50IGF0IHRoaXMgdGltZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgd2hpY2g6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBrZXlDb2RlYCBvciBgY2hhckNvZGVgIGRlcGVuZGluZyBvbiB0aGVcbiAgICAvLyB0eXBlIG9mIHRoZSBldmVudC5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljS2V5Ym9hcmRFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljS2V5Ym9hcmRFdmVudCwgS2V5Ym9hcmRFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNNb3VzZUV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNVSUV2ZW50XCIpO1xudmFyIFZpZXdwb3J0TWV0cmljcyA9IHJlcXVpcmUoXCIuL1ZpZXdwb3J0TWV0cmljc1wiKTtcblxudmFyIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSA9IHJlcXVpcmUoXCIuL2dldEV2ZW50TW9kaWZpZXJTdGF0ZVwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIE1vdXNlRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgTW91c2VFdmVudEludGVyZmFjZSA9IHtcbiAgc2NyZWVuWDogbnVsbCxcbiAgc2NyZWVuWTogbnVsbCxcbiAgY2xpZW50WDogbnVsbCxcbiAgY2xpZW50WTogbnVsbCxcbiAgY3RybEtleTogbnVsbCxcbiAgc2hpZnRLZXk6IG51bGwsXG4gIGFsdEtleTogbnVsbCxcbiAgbWV0YUtleTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICBidXR0b246IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgLy8gV2Via2l0LCBGaXJlZm94LCBJRTkrXG4gICAgLy8gd2hpY2g6ICAxIDIgM1xuICAgIC8vIGJ1dHRvbjogMCAxIDIgKHN0YW5kYXJkKVxuICAgIHZhciBidXR0b24gPSBldmVudC5idXR0b247XG4gICAgaWYgKCd3aGljaCcgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBidXR0b247XG4gICAgfVxuICAgIC8vIElFPDlcbiAgICAvLyB3aGljaDogIHVuZGVmaW5lZFxuICAgIC8vIGJ1dHRvbjogMCAwIDBcbiAgICAvLyBidXR0b246IDEgNCAyIChvbm1vdXNldXApXG4gICAgcmV0dXJuIGJ1dHRvbiA9PT0gMiA/IDIgOiBidXR0b24gPT09IDQgPyAxIDogMDtcbiAgfSxcbiAgYnV0dG9uczogbnVsbCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoXG4gICAgICAoKGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQpKVxuICAgICk7XG4gIH0sXG4gIC8vIFwiUHJvcHJpZXRhcnlcIiBJbnRlcmZhY2UuXG4gIHBhZ2VYOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiAncGFnZVgnIGluIGV2ZW50ID9cbiAgICAgIGV2ZW50LnBhZ2VYIDpcbiAgICAgIGV2ZW50LmNsaWVudFggKyBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbExlZnQ7XG4gIH0sXG4gIHBhZ2VZOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiAncGFnZVknIGluIGV2ZW50ID9cbiAgICAgIGV2ZW50LnBhZ2VZIDpcbiAgICAgIGV2ZW50LmNsaWVudFkgKyBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbFRvcDtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljTW91c2VFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljVUlFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljTW91c2VFdmVudCwgTW91c2VFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljTW91c2VFdmVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBTeW50aGV0aWNUb3VjaEV2ZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNVSUV2ZW50XCIpO1xuXG52YXIgZ2V0RXZlbnRNb2RpZmllclN0YXRlID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRNb2RpZmllclN0YXRlXCIpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgVG91Y2hFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi90b3VjaC1ldmVudHMvXG4gKi9cbnZhciBUb3VjaEV2ZW50SW50ZXJmYWNlID0ge1xuICB0b3VjaGVzOiBudWxsLFxuICB0YXJnZXRUb3VjaGVzOiBudWxsLFxuICBjaGFuZ2VkVG91Y2hlczogbnVsbCxcbiAgYWx0S2V5OiBudWxsLFxuICBtZXRhS2V5OiBudWxsLFxuICBjdHJsS2V5OiBudWxsLFxuICBzaGlmdEtleTogbnVsbCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNUb3VjaEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljVUlFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNUb3VjaEV2ZW50LCBUb3VjaEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIFN5bnRoZXRpY1VJRXZlbnRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKFwiLi9TeW50aGV0aWNFdmVudFwiKTtcblxudmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWlyZShcIi4vZ2V0RXZlbnRUYXJnZXRcIik7XG5cbi8qKlxuICogQGludGVyZmFjZSBVSUV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIFVJRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHZpZXc6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnZpZXcpIHtcbiAgICAgIHJldHVybiBldmVudC52aWV3O1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgaWYgKHRhcmdldCAhPSBudWxsICYmIHRhcmdldC53aW5kb3cgPT09IHRhcmdldCkge1xuICAgICAgLy8gdGFyZ2V0IGlzIGEgd2luZG93IG9iamVjdFxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICB2YXIgZG9jID0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgIGlmIChkb2MpIHtcbiAgICAgIHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gIH0sXG4gIGRldGFpbDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQuZGV0YWlsIHx8IDA7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY0V2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNVSUV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY1VJRXZlbnQsIFVJRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgU3ludGhldGljV2hlZWxFdmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZShcIi4vU3ludGhldGljTW91c2VFdmVudFwiKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IHtcbiAgZGVsdGFYOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiAoXG4gICAgICAnZGVsdGFYJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWCA6XG4gICAgICAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICAgJ3doZWVsRGVsdGFYJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWCA6IDBcbiAgICApO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICdkZWx0YVknIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFZIDpcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAgICd3aGVlbERlbHRhWScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVkgOlxuICAgICAgLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGEgOiAwXG4gICAgKTtcbiAgfSxcbiAgZGVsdGFaOiBudWxsLFxuXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNNb3VzZUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNXaGVlbEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpIHtcbiAgU3ludGhldGljTW91c2VFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNXaGVlbEV2ZW50LCBXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBUcmFuc2FjdGlvblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBgVHJhbnNhY3Rpb25gIGNyZWF0ZXMgYSBibGFjayBib3ggdGhhdCBpcyBhYmxlIHRvIHdyYXAgYW55IG1ldGhvZCBzdWNoIHRoYXRcbiAqIGNlcnRhaW4gaW52YXJpYW50cyBhcmUgbWFpbnRhaW5lZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBtZXRob2QgaXMgaW52b2tlZFxuICogKEV2ZW4gaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGlsZSBpbnZva2luZyB0aGUgd3JhcHBlZCBtZXRob2QpLiBXaG9ldmVyXG4gKiBpbnN0YW50aWF0ZXMgYSB0cmFuc2FjdGlvbiBjYW4gcHJvdmlkZSBlbmZvcmNlcnMgb2YgdGhlIGludmFyaWFudHMgYXRcbiAqIGNyZWF0aW9uIHRpbWUuIFRoZSBgVHJhbnNhY3Rpb25gIGNsYXNzIGl0c2VsZiB3aWxsIHN1cHBseSBvbmUgYWRkaXRpb25hbFxuICogYXV0b21hdGljIGludmFyaWFudCBmb3IgeW91IC0gdGhlIGludmFyaWFudCB0aGF0IGFueSB0cmFuc2FjdGlvbiBpbnN0YW5jZVxuICogc2hvdWxkIG5vdCBiZSBydW4gd2hpbGUgaXQgaXMgYWxyZWFkeSBiZWluZyBydW4uIFlvdSB3b3VsZCB0eXBpY2FsbHkgY3JlYXRlIGFcbiAqIHNpbmdsZSBpbnN0YW5jZSBvZiBhIGBUcmFuc2FjdGlvbmAgZm9yIHJldXNlIG11bHRpcGxlIHRpbWVzLCB0aGF0IHBvdGVudGlhbGx5XG4gKiBpcyB1c2VkIHRvIHdyYXAgc2V2ZXJhbCBkaWZmZXJlbnQgbWV0aG9kcy4gV3JhcHBlcnMgYXJlIGV4dHJlbWVseSBzaW1wbGUgLVxuICogdGhleSBvbmx5IHJlcXVpcmUgaW1wbGVtZW50aW5nIHR3byBtZXRob2RzLlxuICpcbiAqIDxwcmU+XG4gKiAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlcnMgKGluamVjdGVkIGF0IGNyZWF0aW9uIHRpbWUpXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgICAgICAgK1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgdiAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgKy0tfCAgICB3cmFwcGVyMSAgIHwtLS18LS0tLSsgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICstLS0tLS0tLS0tLS0tLS0rICAgdiAgICB8ICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICAgICAgICstLS0tLS0tLS0tLS0tKyAgfCAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgKy0tLS18ICAgd3JhcHBlcjIgIHwtLS0tLS0tLSsgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgIHwgICAgKy0tLS0tLS0tLS0tLS0rICB8ICAgICB8ICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgdiAgICAgdiAgICAgICAgICAgICAgICAgICAgIHYgICAgIHYgICB8IHdyYXBwZXJcbiAqICAgICAgICAgICAgICAgICAgICB8ICstLS0rICstLS0rICAgKy0tLS0tLS0tLSsgICArLS0tKyArLS0tKyB8IGludmFyaWFudHNcbiAqIHBlcmZvcm0oYW55TWV0aG9kKSB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8IG1haW50YWluZWRcbiAqICstLS0tLS0tLS0tLS0tLS0tLT58LXwtLS18LXwtLS18LS0+fGFueU1ldGhvZHwtLS18LS0tfC18LS0tfC18LS0tLS0tLS0+XG4gKiAgICAgICAgICAgICAgICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfFxuICogICAgICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8IHwgICB8IHxcbiAqICAgICAgICAgICAgICAgICAgICB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCArLS0tKyArLS0tKyAgICstLS0tLS0tLS0rICAgKy0tLSsgKy0tLSsgfFxuICogICAgICAgICAgICAgICAgICAgIHwgIGluaXRpYWxpemUgICAgICAgICAgICAgICAgICAgIGNsb3NlICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gKiA8L3ByZT5cbiAqXG4gKiBVc2UgY2FzZXM6XG4gKiAtIFByZXNlcnZpbmcgdGhlIGlucHV0IHNlbGVjdGlvbiByYW5nZXMgYmVmb3JlL2FmdGVyIHJlY29uY2lsaWF0aW9uLlxuICogICBSZXN0b3Jpbmcgc2VsZWN0aW9uIGV2ZW4gaW4gdGhlIGV2ZW50IG9mIGFuIHVuZXhwZWN0ZWQgZXJyb3IuXG4gKiAtIERlYWN0aXZhdGluZyBldmVudHMgd2hpbGUgcmVhcnJhbmdpbmcgdGhlIERPTSwgcHJldmVudGluZyBibHVycy9mb2N1c2VzLFxuICogICB3aGlsZSBndWFyYW50ZWVpbmcgdGhhdCBhZnRlcndhcmRzLCB0aGUgZXZlbnQgc3lzdGVtIGlzIHJlYWN0aXZhdGVkLlxuICogLSBGbHVzaGluZyBhIHF1ZXVlIG9mIGNvbGxlY3RlZCBET00gbXV0YXRpb25zIHRvIHRoZSBtYWluIFVJIHRocmVhZCBhZnRlciBhXG4gKiAgIHJlY29uY2lsaWF0aW9uIHRha2VzIHBsYWNlIGluIGEgd29ya2VyIHRocmVhZC5cbiAqIC0gSW52b2tpbmcgYW55IGNvbGxlY3RlZCBgY29tcG9uZW50RGlkVXBkYXRlYCBjYWxsYmFja3MgYWZ0ZXIgcmVuZGVyaW5nIG5ld1xuICogICBjb250ZW50LlxuICogLSAoRnV0dXJlIHVzZSBjYXNlKTogV3JhcHBpbmcgcGFydGljdWxhciBmbHVzaGVzIG9mIHRoZSBgUmVhY3RXb3JrZXJgIHF1ZXVlXG4gKiAgIHRvIHByZXNlcnZlIHRoZSBgc2Nyb2xsVG9wYCAoYW4gYXV0b21hdGljIHNjcm9sbCBhd2FyZSBET00pLlxuICogLSAoRnV0dXJlIHVzZSBjYXNlKTogTGF5b3V0IGNhbGN1bGF0aW9ucyBiZWZvcmUgYW5kIGFmdGVyIERPTSB1cGRhdGVzLlxuICpcbiAqIFRyYW5zYWN0aW9uYWwgcGx1Z2luIEFQSTpcbiAqIC0gQSBtb2R1bGUgdGhhdCBoYXMgYW4gYGluaXRpYWxpemVgIG1ldGhvZCB0aGF0IHJldHVybnMgYW55IHByZWNvbXB1dGF0aW9uLlxuICogLSBhbmQgYSBgY2xvc2VgIG1ldGhvZCB0aGF0IGFjY2VwdHMgdGhlIHByZWNvbXB1dGF0aW9uLiBgY2xvc2VgIGlzIGludm9rZWRcbiAqICAgd2hlbiB0aGUgd3JhcHBlZCBwcm9jZXNzIGlzIGNvbXBsZXRlZCwgb3IgaGFzIGZhaWxlZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFRyYW5zYWN0aW9uYWxXcmFwcGVyPn0gdHJhbnNhY3Rpb25XcmFwcGVyIFdyYXBwZXIgbW9kdWxlc1xuICogdGhhdCBpbXBsZW1lbnQgYGluaXRpYWxpemVgIGFuZCBgY2xvc2VgLlxuICogQHJldHVybiB7VHJhbnNhY3Rpb259IFNpbmdsZSB0cmFuc2FjdGlvbiBmb3IgcmV1c2UgaW4gdGhyZWFkLlxuICpcbiAqIEBjbGFzcyBUcmFuc2FjdGlvblxuICovXG52YXIgTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoaXMgaW5zdGFuY2Ugc28gdGhhdCBpdCBpcyBwcmVwYXJlZCBmb3IgY29sbGVjdGluZyBtZXRyaWNzLiBEb2VzXG4gICAqIHNvIHN1Y2ggdGhhdCB0aGlzIHNldHVwIG1ldGhvZCBtYXkgYmUgdXNlZCBvbiBhbiBpbnN0YW5jZSB0aGF0IGlzIGFscmVhZHlcbiAgICogaW5pdGlhbGl6ZWQsIGluIGEgd2F5IHRoYXQgZG9lcyBub3QgY29uc3VtZSBhZGRpdGlvbmFsIG1lbW9yeSB1cG9uIHJldXNlLlxuICAgKiBUaGF0IGNhbiBiZSB1c2VmdWwgaWYgeW91IGRlY2lkZSB0byBtYWtlIHlvdXIgc3ViY2xhc3Mgb2YgdGhpcyBtaXhpbiBhXG4gICAqIFwiUG9vbGVkQ2xhc3NcIi5cbiAgICovXG4gIHJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMgPSB0aGlzLmdldFRyYW5zYWN0aW9uV3JhcHBlcnMoKTtcbiAgICBpZiAoIXRoaXMud3JhcHBlckluaXREYXRhKSB7XG4gICAgICB0aGlzLndyYXBwZXJJbml0RGF0YSA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyYXBwZXJJbml0RGF0YS5sZW5ndGggPSAwO1xuICAgIH1cbiAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgfSxcblxuICBfaXNJblRyYW5zYWN0aW9uOiBmYWxzZSxcblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm4ge0FycmF5PFRyYW5zYWN0aW9uV3JhcHBlcj59IEFycmF5IG9mIHRyYW5zYWN0aW9uIHdyYXBwZXJzLlxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogbnVsbCxcblxuICBpc0luVHJhbnNhY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2lzSW5UcmFuc2FjdGlvbjtcbiAgfSxcblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGZ1bmN0aW9uIHdpdGhpbiBhIHNhZmV0eSB3aW5kb3cuIFVzZSB0aGlzIGZvciB0aGUgdG9wIGxldmVsXG4gICAqIG1ldGhvZHMgdGhhdCByZXN1bHQgaW4gbGFyZ2UgYW1vdW50cyBvZiBjb21wdXRhdGlvbi9tdXRhdGlvbnMgdGhhdCB3b3VsZFxuICAgKiBuZWVkIHRvIGJlIHNhZmV0eSBjaGVja2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2QgTWVtYmVyIG9mIHNjb3BlIHRvIGNhbGwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBTY29wZSB0byBpbnZva2UgZnJvbS5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gYXJncy4uLiBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgbWV0aG9kIChvcHRpb25hbCkuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVscHMgcHJldmVudCBuZWVkIHRvIGJpbmQgaW4gbWFueSBjYXNlcy5cbiAgICogQHJldHVybiBSZXR1cm4gdmFsdWUgZnJvbSBgbWV0aG9kYC5cbiAgICovXG4gIHBlcmZvcm06IGZ1bmN0aW9uKG1ldGhvZCwgc2NvcGUsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgIXRoaXMuaXNJblRyYW5zYWN0aW9uKCksXG4gICAgICAnVHJhbnNhY3Rpb24ucGVyZm9ybSguLi4pOiBDYW5ub3QgaW5pdGlhbGl6ZSBhIHRyYW5zYWN0aW9uIHdoZW4gdGhlcmUgJyArXG4gICAgICAnaXMgYWxyZWFkeSBhbiBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbi4nXG4gICAgKSA6IGludmFyaWFudCghdGhpcy5pc0luVHJhbnNhY3Rpb24oKSkpO1xuICAgIHZhciBlcnJvclRocm93bjtcbiAgICB2YXIgcmV0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSB0cnVlO1xuICAgICAgLy8gQ2F0Y2hpbmcgZXJyb3JzIG1ha2VzIGRlYnVnZ2luZyBtb3JlIGRpZmZpY3VsdCwgc28gd2Ugc3RhcnQgd2l0aFxuICAgICAgLy8gZXJyb3JUaHJvd24gc2V0IHRvIHRydWUgYmVmb3JlIHNldHRpbmcgaXQgdG8gZmFsc2UgYWZ0ZXIgY2FsbGluZ1xuICAgICAgLy8gY2xvc2UgLS0gaWYgaXQncyBzdGlsbCBzZXQgdG8gdHJ1ZSBpbiB0aGUgZmluYWxseSBibG9jaywgaXQgbWVhbnNcbiAgICAgIC8vIG9uZSBvZiB0aGVzZSBjYWxscyB0aHJldy5cbiAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUFsbCgwKTtcbiAgICAgIHJldCA9IG1ldGhvZC5jYWxsKHNjb3BlLCBhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgIGVycm9yVGhyb3duID0gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlcnJvclRocm93bikge1xuICAgICAgICAgIC8vIElmIGBtZXRob2RgIHRocm93cywgcHJlZmVyIHRvIHNob3cgdGhhdCBzdGFjayB0cmFjZSBvdmVyIGFueSB0aHJvd25cbiAgICAgICAgICAvLyBieSBpbnZva2luZyBgY2xvc2VBbGxgLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQWxsKDApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaW5jZSBgbWV0aG9kYCBkaWRuJ3QgdGhyb3csIHdlIGRvbid0IHdhbnQgdG8gc2lsZW5jZSB0aGUgZXhjZXB0aW9uXG4gICAgICAgICAgLy8gaGVyZS5cbiAgICAgICAgICB0aGlzLmNsb3NlQWxsKDApO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9pc0luVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBpbml0aWFsaXplQWxsOiBmdW5jdGlvbihzdGFydEluZGV4KSB7XG4gICAgdmFyIHRyYW5zYWN0aW9uV3JhcHBlcnMgPSB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnM7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0cmFuc2FjdGlvbldyYXBwZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgd3JhcHBlciA9IHRyYW5zYWN0aW9uV3JhcHBlcnNbaV07XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDYXRjaGluZyBlcnJvcnMgbWFrZXMgZGVidWdnaW5nIG1vcmUgZGlmZmljdWx0LCBzbyB3ZSBzdGFydCB3aXRoIHRoZVxuICAgICAgICAvLyBPQlNFUlZFRF9FUlJPUiBzdGF0ZSBiZWZvcmUgb3ZlcndyaXRpbmcgaXQgd2l0aCB0aGUgcmVhbCByZXR1cm4gdmFsdWVcbiAgICAgICAgLy8gb2YgaW5pdGlhbGl6ZSAtLSBpZiBpdCdzIHN0aWxsIHNldCB0byBPQlNFUlZFRF9FUlJPUiBpbiB0aGUgZmluYWxseVxuICAgICAgICAvLyBibG9jaywgaXQgbWVhbnMgd3JhcHBlci5pbml0aWFsaXplIHRocmV3LlxuICAgICAgICB0aGlzLndyYXBwZXJJbml0RGF0YVtpXSA9IFRyYW5zYWN0aW9uLk9CU0VSVkVEX0VSUk9SO1xuICAgICAgICB0aGlzLndyYXBwZXJJbml0RGF0YVtpXSA9IHdyYXBwZXIuaW5pdGlhbGl6ZSA/XG4gICAgICAgICAgd3JhcHBlci5pbml0aWFsaXplLmNhbGwodGhpcykgOlxuICAgICAgICAgIG51bGw7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGhpcy53cmFwcGVySW5pdERhdGFbaV0gPT09IFRyYW5zYWN0aW9uLk9CU0VSVkVEX0VSUk9SKSB7XG4gICAgICAgICAgLy8gVGhlIGluaXRpYWxpemVyIGZvciB3cmFwcGVyIGkgdGhyZXcgYW4gZXJyb3I7IGluaXRpYWxpemUgdGhlXG4gICAgICAgICAgLy8gcmVtYWluaW5nIHdyYXBwZXJzIGJ1dCBzaWxlbmNlIGFueSBleGNlcHRpb25zIGZyb20gdGhlbSB0byBlbnN1cmVcbiAgICAgICAgICAvLyB0aGF0IHRoZSBmaXJzdCBlcnJvciBpcyB0aGUgb25lIHRvIGJ1YmJsZSB1cC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQWxsKGkgKyAxKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEludm9rZXMgZWFjaCBvZiBgdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLmNsb3NlW2ldYCBmdW5jdGlvbnMsIHBhc3NpbmcgaW50b1xuICAgKiB0aGVtIHRoZSByZXNwZWN0aXZlIHJldHVybiB2YWx1ZXMgb2YgYHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycy5pbml0W2ldYFxuICAgKiAoYGNsb3NlYHJzIHRoYXQgY29ycmVzcG9uZCB0byBpbml0aWFsaXplcnMgdGhhdCBmYWlsZWQgd2lsbCBub3QgYmVcbiAgICogaW52b2tlZCkuXG4gICAqL1xuICBjbG9zZUFsbDogZnVuY3Rpb24oc3RhcnRJbmRleCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICB0aGlzLmlzSW5UcmFuc2FjdGlvbigpLFxuICAgICAgJ1RyYW5zYWN0aW9uLmNsb3NlQWxsKCk6IENhbm5vdCBjbG9zZSB0cmFuc2FjdGlvbiB3aGVuIG5vbmUgYXJlIG9wZW4uJ1xuICAgICkgOiBpbnZhcmlhbnQodGhpcy5pc0luVHJhbnNhY3Rpb24oKSkpO1xuICAgIHZhciB0cmFuc2FjdGlvbldyYXBwZXJzID0gdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdHJhbnNhY3Rpb25XcmFwcGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHdyYXBwZXIgPSB0cmFuc2FjdGlvbldyYXBwZXJzW2ldO1xuICAgICAgdmFyIGluaXREYXRhID0gdGhpcy53cmFwcGVySW5pdERhdGFbaV07XG4gICAgICB2YXIgZXJyb3JUaHJvd247XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDYXRjaGluZyBlcnJvcnMgbWFrZXMgZGVidWdnaW5nIG1vcmUgZGlmZmljdWx0LCBzbyB3ZSBzdGFydCB3aXRoXG4gICAgICAgIC8vIGVycm9yVGhyb3duIHNldCB0byB0cnVlIGJlZm9yZSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFmdGVyIGNhbGxpbmdcbiAgICAgICAgLy8gY2xvc2UgLS0gaWYgaXQncyBzdGlsbCBzZXQgdG8gdHJ1ZSBpbiB0aGUgZmluYWxseSBibG9jaywgaXQgbWVhbnNcbiAgICAgICAgLy8gd3JhcHBlci5jbG9zZSB0aHJldy5cbiAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgICBpZiAoaW5pdERhdGEgIT09IFRyYW5zYWN0aW9uLk9CU0VSVkVEX0VSUk9SICYmIHdyYXBwZXIuY2xvc2UpIHtcbiAgICAgICAgICB3cmFwcGVyLmNsb3NlLmNhbGwodGhpcywgaW5pdERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yVGhyb3duID0gZmFsc2U7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAvLyBUaGUgY2xvc2VyIGZvciB3cmFwcGVyIGkgdGhyZXcgYW4gZXJyb3I7IGNsb3NlIHRoZSByZW1haW5pbmdcbiAgICAgICAgICAvLyB3cmFwcGVycyBidXQgc2lsZW5jZSBhbnkgZXhjZXB0aW9ucyBmcm9tIHRoZW0gdG8gZW5zdXJlIHRoYXQgdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZXJyb3IgaXMgdGhlIG9uZSB0byBidWJibGUgdXAuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBbGwoaSArIDEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy53cmFwcGVySW5pdERhdGEubGVuZ3RoID0gMDtcbiAgfVxufTtcblxudmFyIFRyYW5zYWN0aW9uID0ge1xuXG4gIE1peGluOiBNaXhpbixcblxuICAvKipcbiAgICogVG9rZW4gdG8gbG9vayBmb3IgdG8gZGV0ZXJtaW5lIGlmIGFuIGVycm9yIG9jY3VyZWQuXG4gICAqL1xuICBPQlNFUlZFRF9FUlJPUjoge31cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2FjdGlvbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlZISmhibk5oWTNScGIyNHVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREV6TFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnVkhKaGJuTmhZM1JwYjI1Y2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYmk4cUtseHVJQ29nWUZSeVlXNXpZV04wYVc5dVlDQmpjbVZoZEdWeklHRWdZbXhoWTJzZ1ltOTRJSFJvWVhRZ2FYTWdZV0pzWlNCMGJ5QjNjbUZ3SUdGdWVTQnRaWFJvYjJRZ2MzVmphQ0IwYUdGMFhHNGdLaUJqWlhKMFlXbHVJR2x1ZG1GeWFXRnVkSE1nWVhKbElHMWhhVzUwWVdsdVpXUWdZbVZtYjNKbElHRnVaQ0JoWm5SbGNpQjBhR1VnYldWMGFHOWtJR2x6SUdsdWRtOXJaV1JjYmlBcUlDaEZkbVZ1SUdsbUlHRnVJR1Y0WTJWd2RHbHZiaUJwY3lCMGFISnZkMjRnZDJocGJHVWdhVzUyYjJ0cGJtY2dkR2hsSUhkeVlYQndaV1FnYldWMGFHOWtLUzRnVjJodlpYWmxjbHh1SUNvZ2FXNXpkR0Z1ZEdsaGRHVnpJR0VnZEhKaGJuTmhZM1JwYjI0Z1kyRnVJSEJ5YjNacFpHVWdaVzVtYjNKalpYSnpJRzltSUhSb1pTQnBiblpoY21saGJuUnpJR0YwWEc0Z0tpQmpjbVZoZEdsdmJpQjBhVzFsTGlCVWFHVWdZRlJ5WVc1ellXTjBhVzl1WUNCamJHRnpjeUJwZEhObGJHWWdkMmxzYkNCemRYQndiSGtnYjI1bElHRmtaR2wwYVc5dVlXeGNiaUFxSUdGMWRHOXRZWFJwWXlCcGJuWmhjbWxoYm5RZ1ptOXlJSGx2ZFNBdElIUm9aU0JwYm5aaGNtbGhiblFnZEdoaGRDQmhibmtnZEhKaGJuTmhZM1JwYjI0Z2FXNXpkR0Z1WTJWY2JpQXFJSE5vYjNWc1pDQnViM1FnWW1VZ2NuVnVJSGRvYVd4bElHbDBJR2x6SUdGc2NtVmhaSGtnWW1WcGJtY2djblZ1TGlCWmIzVWdkMjkxYkdRZ2RIbHdhV05oYkd4NUlHTnlaV0YwWlNCaFhHNGdLaUJ6YVc1bmJHVWdhVzV6ZEdGdVkyVWdiMllnWVNCZ1ZISmhibk5oWTNScGIyNWdJR1p2Y2lCeVpYVnpaU0J0ZFd4MGFYQnNaU0IwYVcxbGN5d2dkR2hoZENCd2IzUmxiblJwWVd4c2VWeHVJQ29nYVhNZ2RYTmxaQ0IwYnlCM2NtRndJSE5sZG1WeVlXd2daR2xtWm1WeVpXNTBJRzFsZEdodlpITXVJRmR5WVhCd1pYSnpJR0Z5WlNCbGVIUnlaVzFsYkhrZ2MybHRjR3hsSUMxY2JpQXFJSFJvWlhrZ2IyNXNlU0J5WlhGMWFYSmxJR2x0Y0d4bGJXVnVkR2x1WnlCMGQyOGdiV1YwYUc5a2N5NWNiaUFxWEc0Z0tpQThjSEpsUGx4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhkeVlYQndaWEp6SUNocGJtcGxZM1JsWkNCaGRDQmpjbVZoZEdsdmJpQjBhVzFsS1Z4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ3NnSUNBZ0lDQWdJQ3RjYmlBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjhJQ0FnSUNBZ0lDQjhYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0t5MHRMUzB0TFMwdExTMHRMUzB0TFMwdGZDMHRMUzB0TFMwdGZDMHRMUzB0TFMwdExTMHRMUzB0SzF4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHdnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFlnSUNBZ0lDQWdJSHdnSUNBZ0lDQWdJQ0FnSUNBZ0lIeGNiaUFxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOElDQWdJQ0FnS3kwdExTMHRMUzB0TFMwdExTMHRMU3NnSUNCOElDQWdJQ0FnSUNBZ0lDQWdJQ0I4WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmQ0FnSUNzdExYd2dJQ0FnZDNKaGNIQmxjakVnSUNCOExTMHRmQzB0TFMwcklDQWdJQ0FnSUNBZ2ZGeHVJQ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh3Z0lDQjhJQ0FyTFMwdExTMHRMUzB0TFMwdExTMHRLeUFnSUhZZ0lDQWdmQ0FnSUNBZ0lDQWdJSHhjYmlBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjhJQ0FnZkNBZ0lDQWdJQ0FnSUNBckxTMHRMUzB0TFMwdExTMHRMU3NnSUh3Z0lDQWdJQ0FnSUNCOFhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZkNBZ0lId2dJQ0FnSUNzdExTMHRmQ0FnSUhkeVlYQndaWEl5SUNCOExTMHRMUzB0TFMwcklDQWdmRnh1SUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lId2dJQ0I4SUNBZ0lDQjhJQ0FnSUNzdExTMHRMUzB0TFMwdExTMHRLeUFnZkNBZ0lDQWdmQ0FnSUh4Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I4SUNBZ2ZDQWdJQ0FnZkNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lId2dJQ0FnSUh3Z0lDQjhYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZDQWdJSFlnSUNBZ0lIWWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IySUNBZ0lDQjJJQ0FnZkNCM2NtRndjR1Z5WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmQ0FyTFMwdEt5QXJMUzB0S3lBZ0lDc3RMUzB0TFMwdExTMHJJQ0FnS3kwdExTc2dLeTB0TFNzZ2ZDQnBiblpoY21saGJuUnpYRzRnS2lCd1pYSm1iM0p0S0dGdWVVMWxkR2h2WkNrZ2ZDQjhJQ0FnZkNCOElDQWdmQ0FnSUh3Z0lDQWdJQ0FnSUNCOElDQWdmQ0FnSUh3Z2ZDQWdJSHdnZkNCdFlXbHVkR0ZwYm1Wa1hHNGdLaUFyTFMwdExTMHRMUzB0TFMwdExTMHRMUzArZkMxOExTMHRmQzE4TFMwdGZDMHRQbnhoYm5sTlpYUm9iMlI4TFMwdGZDMHRMWHd0ZkMwdExYd3RmQzB0TFMwdExTMHRQbHh1SUNvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lId2dmQ0FnSUh3Z2ZDQWdJSHdnSUNCOElDQWdJQ0FnSUNBZ2ZDQWdJSHdnSUNCOElId2dJQ0I4SUh4Y2JpQXFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I4SUh3Z0lDQjhJSHdnSUNCOElDQWdmQ0FnSUNBZ0lDQWdJSHdnSUNCOElDQWdmQ0I4SUNBZ2ZDQjhYRzRnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZDQjhJQ0FnZkNCOElDQWdmQ0FnSUh3Z0lDQWdJQ0FnSUNCOElDQWdmQ0FnSUh3Z2ZDQWdJSHdnZkZ4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHdnS3kwdExTc2dLeTB0TFNzZ0lDQXJMUzB0TFMwdExTMHRLeUFnSUNzdExTMHJJQ3N0TFMwcklIeGNiaUFxSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOElDQnBibWwwYVdGc2FYcGxJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYkc5elpTQWdJQ0I4WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdLeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdEsxeHVJQ29nUEM5d2NtVStYRzRnS2x4dUlDb2dWWE5sSUdOaGMyVnpPbHh1SUNvZ0xTQlFjbVZ6WlhKMmFXNW5JSFJvWlNCcGJuQjFkQ0J6Wld4bFkzUnBiMjRnY21GdVoyVnpJR0psWm05eVpTOWhablJsY2lCeVpXTnZibU5wYkdsaGRHbHZiaTVjYmlBcUlDQWdVbVZ6ZEc5eWFXNW5JSE5sYkdWamRHbHZiaUJsZG1WdUlHbHVJSFJvWlNCbGRtVnVkQ0J2WmlCaGJpQjFibVY0Y0dWamRHVmtJR1Z5Y205eUxseHVJQ29nTFNCRVpXRmpkR2wyWVhScGJtY2daWFpsYm5SeklIZG9hV3hsSUhKbFlYSnlZVzVuYVc1bklIUm9aU0JFVDAwc0lIQnlaWFpsYm5ScGJtY2dZbXgxY25NdlptOWpkWE5sY3l4Y2JpQXFJQ0FnZDJocGJHVWdaM1ZoY21GdWRHVmxhVzVuSUhSb1lYUWdZV1owWlhKM1lYSmtjeXdnZEdobElHVjJaVzUwSUhONWMzUmxiU0JwY3lCeVpXRmpkR2wyWVhSbFpDNWNiaUFxSUMwZ1JteDFjMmhwYm1jZ1lTQnhkV1YxWlNCdlppQmpiMnhzWldOMFpXUWdSRTlOSUcxMWRHRjBhVzl1Y3lCMGJ5QjBhR1VnYldGcGJpQlZTU0IwYUhKbFlXUWdZV1owWlhJZ1lWeHVJQ29nSUNCeVpXTnZibU5wYkdsaGRHbHZiaUIwWVd0bGN5QndiR0ZqWlNCcGJpQmhJSGR2Y210bGNpQjBhSEpsWVdRdVhHNGdLaUF0SUVsdWRtOXJhVzVuSUdGdWVTQmpiMnhzWldOMFpXUWdZR052YlhCdmJtVnVkRVJwWkZWd1pHRjBaV0FnWTJGc2JHSmhZMnR6SUdGbWRHVnlJSEpsYm1SbGNtbHVaeUJ1WlhkY2JpQXFJQ0FnWTI5dWRHVnVkQzVjYmlBcUlDMGdLRVoxZEhWeVpTQjFjMlVnWTJGelpTazZJRmR5WVhCd2FXNW5JSEJoY25ScFkzVnNZWElnWm14MWMyaGxjeUJ2WmlCMGFHVWdZRkpsWVdOMFYyOXlhMlZ5WUNCeGRXVjFaVnh1SUNvZ0lDQjBieUJ3Y21WelpYSjJaU0IwYUdVZ1lITmpjbTlzYkZSdmNHQWdLR0Z1SUdGMWRHOXRZWFJwWXlCelkzSnZiR3dnWVhkaGNtVWdSRTlOS1M1Y2JpQXFJQzBnS0VaMWRIVnlaU0IxYzJVZ1kyRnpaU2s2SUV4aGVXOTFkQ0JqWVd4amRXeGhkR2x2Ym5NZ1ltVm1iM0psSUdGdVpDQmhablJsY2lCRVQwMGdkWEJrWVhSbGN5NWNiaUFxWEc0Z0tpQlVjbUZ1YzJGamRHbHZibUZzSUhCc2RXZHBiaUJCVUVrNlhHNGdLaUF0SUVFZ2JXOWtkV3hsSUhSb1lYUWdhR0Z6SUdGdUlHQnBibWwwYVdGc2FYcGxZQ0J0WlhSb2IyUWdkR2hoZENCeVpYUjFjbTV6SUdGdWVTQndjbVZqYjIxd2RYUmhkR2x2Ymk1Y2JpQXFJQzBnWVc1a0lHRWdZR05zYjNObFlDQnRaWFJvYjJRZ2RHaGhkQ0JoWTJObGNIUnpJSFJvWlNCd2NtVmpiMjF3ZFhSaGRHbHZiaTRnWUdOc2IzTmxZQ0JwY3lCcGJuWnZhMlZrWEc0Z0tpQWdJSGRvWlc0Z2RHaGxJSGR5WVhCd1pXUWdjSEp2WTJWemN5QnBjeUJqYjIxd2JHVjBaV1FzSUc5eUlHaGhjeUJtWVdsc1pXUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdEJjbkpoZVR4VWNtRnVjMkZqZEdsdmJtRnNWM0poY0hCbGNqNTlJSFJ5WVc1ellXTjBhVzl1VjNKaGNIQmxjaUJYY21Gd2NHVnlJRzF2WkhWc1pYTmNiaUFxSUhSb1lYUWdhVzF3YkdWdFpXNTBJR0JwYm1sMGFXRnNhWHBsWUNCaGJtUWdZR05zYjNObFlDNWNiaUFxSUVCeVpYUjFjbTRnZTFSeVlXNXpZV04wYVc5dWZTQlRhVzVuYkdVZ2RISmhibk5oWTNScGIyNGdabTl5SUhKbGRYTmxJR2x1SUhSb2NtVmhaQzVjYmlBcVhHNGdLaUJBWTJ4aGMzTWdWSEpoYm5OaFkzUnBiMjVjYmlBcUwxeHVkbUZ5SUUxcGVHbHVJRDBnZTF4dUlDQXZLaXBjYmlBZ0lDb2dVMlYwY3lCMWNDQjBhR2x6SUdsdWMzUmhibU5sSUhOdklIUm9ZWFFnYVhRZ2FYTWdjSEpsY0dGeVpXUWdabTl5SUdOdmJHeGxZM1JwYm1jZ2JXVjBjbWxqY3k0Z1JHOWxjMXh1SUNBZ0tpQnpieUJ6ZFdOb0lIUm9ZWFFnZEdocGN5QnpaWFIxY0NCdFpYUm9iMlFnYldGNUlHSmxJSFZ6WldRZ2IyNGdZVzRnYVc1emRHRnVZMlVnZEdoaGRDQnBjeUJoYkhKbFlXUjVYRzRnSUNBcUlHbHVhWFJwWVd4cGVtVmtMQ0JwYmlCaElIZGhlU0IwYUdGMElHUnZaWE1nYm05MElHTnZibk4xYldVZ1lXUmthWFJwYjI1aGJDQnRaVzF2Y25rZ2RYQnZiaUJ5WlhWelpTNWNiaUFnSUNvZ1ZHaGhkQ0JqWVc0Z1ltVWdkWE5sWm5Wc0lHbG1JSGx2ZFNCa1pXTnBaR1VnZEc4Z2JXRnJaU0I1YjNWeUlITjFZbU5zWVhOeklHOW1JSFJvYVhNZ2JXbDRhVzRnWVZ4dUlDQWdLaUJjSWxCdmIyeGxaRU5zWVhOelhDSXVYRzRnSUNBcUwxeHVJQ0J5WldsdWFYUnBZV3hwZW1WVWNtRnVjMkZqZEdsdmJqb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1MGNtRnVjMkZqZEdsdmJsZHlZWEJ3WlhKeklEMGdkR2hwY3k1blpYUlVjbUZ1YzJGamRHbHZibGR5WVhCd1pYSnpLQ2s3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbmR5WVhCd1pYSkpibWwwUkdGMFlTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1M2NtRndjR1Z5U1c1cGRFUmhkR0VnUFNCYlhUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NTNjbUZ3Y0dWeVNXNXBkRVJoZEdFdWJHVnVaM1JvSUQwZ01EdGNiaUFnSUNCOVhHNGdJQ0FnZEdocGN5NWZhWE5KYmxSeVlXNXpZV04wYVc5dUlEMGdabUZzYzJVN1hHNGdJSDBzWEc1Y2JpQWdYMmx6U1c1VWNtRnVjMkZqZEdsdmJqb2dabUZzYzJVc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCaFluTjBjbUZqZEZ4dUlDQWdLaUJBY21WMGRYSnVJSHRCY25KaGVUeFVjbUZ1YzJGamRHbHZibGR5WVhCd1pYSStmU0JCY25KaGVTQnZaaUIwY21GdWMyRmpkR2x2YmlCM2NtRndjR1Z5Y3k1Y2JpQWdJQ292WEc0Z0lHZGxkRlJ5WVc1ellXTjBhVzl1VjNKaGNIQmxjbk02SUc1MWJHd3NYRzVjYmlBZ2FYTkpibFJ5WVc1ellXTjBhVzl1T2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCeVpYUjFjbTRnSVNGMGFHbHpMbDlwYzBsdVZISmhibk5oWTNScGIyNDdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVWNFpXTjFkR1Z6SUhSb1pTQm1kVzVqZEdsdmJpQjNhWFJvYVc0Z1lTQnpZV1psZEhrZ2QybHVaRzkzTGlCVmMyVWdkR2hwY3lCbWIzSWdkR2hsSUhSdmNDQnNaWFpsYkZ4dUlDQWdLaUJ0WlhSb2IyUnpJSFJvWVhRZ2NtVnpkV3gwSUdsdUlHeGhjbWRsSUdGdGIzVnVkSE1nYjJZZ1kyOXRjSFYwWVhScGIyNHZiWFYwWVhScGIyNXpJSFJvWVhRZ2QyOTFiR1JjYmlBZ0lDb2dibVZsWkNCMGJ5QmlaU0J6WVdabGRIa2dZMmhsWTJ0bFpDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnYldWMGFHOWtJRTFsYldKbGNpQnZaaUJ6WTI5d1pTQjBieUJqWVd4c0xseHVJQ0FnS2lCQWNHRnlZVzBnZTA5aWFtVmpkSDBnYzJOdmNHVWdVMk52Y0dVZ2RHOGdhVzUyYjJ0bElHWnliMjB1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdUMkpxWldOMFB6MTlJR0Z5WjNNdUxpNGdRWEpuZFcxbGJuUnpJSFJ2SUhCaGMzTWdkRzhnZEdobElHMWxkR2h2WkNBb2IzQjBhVzl1WVd3cExseHVJQ0FnS2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVobGJIQnpJSEJ5WlhabGJuUWdibVZsWkNCMGJ5QmlhVzVrSUdsdUlHMWhibmtnWTJGelpYTXVYRzRnSUNBcUlFQnlaWFIxY200Z1VtVjBkWEp1SUhaaGJIVmxJR1p5YjIwZ1lHMWxkR2h2WkdBdVhHNGdJQ0FxTDF4dUlDQndaWEptYjNKdE9pQm1kVzVqZEdsdmJpaHRaWFJvYjJRc0lITmpiM0JsTENCaExDQmlMQ0JqTENCa0xDQmxMQ0JtS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJQ0YwYUdsekxtbHpTVzVVY21GdWMyRmpkR2x2YmlncExGeHVJQ0FnSUNBZ0oxUnlZVzV6WVdOMGFXOXVMbkJsY21admNtMG9MaTR1S1RvZ1EyRnVibTkwSUdsdWFYUnBZV3hwZW1VZ1lTQjBjbUZ1YzJGamRHbHZiaUIzYUdWdUlIUm9aWEpsSUNjZ0sxeHVJQ0FnSUNBZ0oybHpJR0ZzY21WaFpIa2dZVzRnYjNWMGMzUmhibVJwYm1jZ2RISmhibk5oWTNScGIyNHVKMXh1SUNBZ0lDa2dPaUJwYm5aaGNtbGhiblFvSVhSb2FYTXVhWE5KYmxSeVlXNXpZV04wYVc5dUtDa3BLVHRjYmlBZ0lDQjJZWElnWlhKeWIzSlVhSEp2ZDI0N1hHNGdJQ0FnZG1GeUlISmxkRHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnZEdocGN5NWZhWE5KYmxSeVlXNXpZV04wYVc5dUlEMGdkSEoxWlR0Y2JpQWdJQ0FnSUM4dklFTmhkR05vYVc1bklHVnljbTl5Y3lCdFlXdGxjeUJrWldKMVoyZHBibWNnYlc5eVpTQmthV1ptYVdOMWJIUXNJSE52SUhkbElITjBZWEowSUhkcGRHaGNiaUFnSUNBZ0lDOHZJR1Z5Y205eVZHaHliM2R1SUhObGRDQjBieUIwY25WbElHSmxabTl5WlNCelpYUjBhVzVuSUdsMElIUnZJR1poYkhObElHRm1kR1Z5SUdOaGJHeHBibWRjYmlBZ0lDQWdJQzh2SUdOc2IzTmxJQzB0SUdsbUlHbDBKM01nYzNScGJHd2djMlYwSUhSdklIUnlkV1VnYVc0Z2RHaGxJR1pwYm1Gc2JIa2dZbXh2WTJzc0lHbDBJRzFsWVc1elhHNGdJQ0FnSUNBdkx5QnZibVVnYjJZZ2RHaGxjMlVnWTJGc2JITWdkR2h5WlhjdVhHNGdJQ0FnSUNCbGNuSnZjbFJvY205M2JpQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCMGFHbHpMbWx1YVhScFlXeHBlbVZCYkd3b01DazdYRzRnSUNBZ0lDQnlaWFFnUFNCdFpYUm9iMlF1WTJGc2JDaHpZMjl3WlN3Z1lTd2dZaXdnWXl3Z1pDd2daU3dnWmlrN1hHNGdJQ0FnSUNCbGNuSnZjbFJvY205M2JpQTlJR1poYkhObE8xeHVJQ0FnSUgwZ1ptbHVZV3hzZVNCN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb1pYSnliM0pVYUhKdmQyNHBJSHRjYmlBZ0lDQWdJQ0FnSUNBdkx5QkpaaUJnYldWMGFHOWtZQ0IwYUhKdmQzTXNJSEJ5WldabGNpQjBieUJ6YUc5M0lIUm9ZWFFnYzNSaFkyc2dkSEpoWTJVZ2IzWmxjaUJoYm5rZ2RHaHliM2R1WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdZbmtnYVc1MmIydHBibWNnWUdOc2IzTmxRV3hzWUM1Y2JpQWdJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amJHOXpaVUZzYkNnd0tUdGNiaUFnSUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsY25JcElIdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdVMmx1WTJVZ1lHMWxkR2h2WkdBZ1pHbGtiaWQwSUhSb2NtOTNMQ0IzWlNCa2IyNG5kQ0IzWVc1MElIUnZJSE5wYkdWdVkyVWdkR2hsSUdWNFkyVndkR2x2Ymx4dUlDQWdJQ0FnSUNBZ0lDOHZJR2hsY21VdVhHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1amJHOXpaVUZzYkNnd0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWZhWE5KYmxSeVlXNXpZV04wYVc5dUlEMGdabUZzYzJVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnlaWFE3WEc0Z0lIMHNYRzVjYmlBZ2FXNXBkR2xoYkdsNlpVRnNiRG9nWm5WdVkzUnBiMjRvYzNSaGNuUkpibVJsZUNrZ2UxeHVJQ0FnSUhaaGNpQjBjbUZ1YzJGamRHbHZibGR5WVhCd1pYSnpJRDBnZEdocGN5NTBjbUZ1YzJGamRHbHZibGR5WVhCd1pYSnpPMXh1SUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0J6ZEdGeWRFbHVaR1Y0T3lCcElEd2dkSEpoYm5OaFkzUnBiMjVYY21Gd2NHVnljeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2RtRnlJSGR5WVhCd1pYSWdQU0IwY21GdWMyRmpkR2x2YmxkeVlYQndaWEp6VzJsZE8xeHVJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1EyRjBZMmhwYm1jZ1pYSnliM0p6SUcxaGEyVnpJR1JsWW5WbloybHVaeUJ0YjNKbElHUnBabVpwWTNWc2RDd2djMjhnZDJVZ2MzUmhjblFnZDJsMGFDQjBhR1ZjYmlBZ0lDQWdJQ0FnTHk4Z1QwSlRSVkpXUlVSZlJWSlNUMUlnYzNSaGRHVWdZbVZtYjNKbElHOTJaWEozY21sMGFXNW5JR2wwSUhkcGRHZ2dkR2hsSUhKbFlXd2djbVYwZFhKdUlIWmhiSFZsWEc0Z0lDQWdJQ0FnSUM4dklHOW1JR2x1YVhScFlXeHBlbVVnTFMwZ2FXWWdhWFFuY3lCemRHbHNiQ0J6WlhRZ2RHOGdUMEpUUlZKV1JVUmZSVkpTVDFJZ2FXNGdkR2hsSUdacGJtRnNiSGxjYmlBZ0lDQWdJQ0FnTHk4Z1lteHZZMnNzSUdsMElHMWxZVzV6SUhkeVlYQndaWEl1YVc1cGRHbGhiR2w2WlNCMGFISmxkeTVjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbUZ3Y0dWeVNXNXBkRVJoZEdGYmFWMGdQU0JVY21GdWMyRmpkR2x2Ymk1UFFsTkZVbFpGUkY5RlVsSlBVanRjYmlBZ0lDQWdJQ0FnZEdocGN5NTNjbUZ3Y0dWeVNXNXBkRVJoZEdGYmFWMGdQU0IzY21Gd2NHVnlMbWx1YVhScFlXeHBlbVVnUDF4dUlDQWdJQ0FnSUNBZ0lIZHlZWEJ3WlhJdWFXNXBkR2xoYkdsNlpTNWpZV3hzS0hSb2FYTXBJRHBjYmlBZ0lDQWdJQ0FnSUNCdWRXeHNPMXh1SUNBZ0lDQWdmU0JtYVc1aGJHeDVJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11ZDNKaGNIQmxja2x1YVhSRVlYUmhXMmxkSUQwOVBTQlVjbUZ1YzJGamRHbHZiaTVQUWxORlVsWkZSRjlGVWxKUFVpa2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dklGUm9aU0JwYm1sMGFXRnNhWHBsY2lCbWIzSWdkM0poY0hCbGNpQnBJSFJvY21WM0lHRnVJR1Z5Y205eU95QnBibWwwYVdGc2FYcGxJSFJvWlZ4dUlDQWdJQ0FnSUNBZ0lDOHZJSEpsYldGcGJtbHVaeUIzY21Gd2NHVnljeUJpZFhRZ2MybHNaVzVqWlNCaGJua2daWGhqWlhCMGFXOXVjeUJtY205dElIUm9aVzBnZEc4Z1pXNXpkWEpsWEc0Z0lDQWdJQ0FnSUNBZ0x5OGdkR2hoZENCMGFHVWdabWx5YzNRZ1pYSnliM0lnYVhNZ2RHaGxJRzl1WlNCMGJ5QmlkV0ppYkdVZ2RYQXVYRzRnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVhVzVwZEdsaGJHbDZaVUZzYkNocElDc2dNU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pYSnlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm5admEyVnpJR1ZoWTJnZ2IyWWdZSFJvYVhNdWRISmhibk5oWTNScGIyNVhjbUZ3Y0dWeWN5NWpiRzl6WlZ0cFhXQWdablZ1WTNScGIyNXpMQ0J3WVhOemFXNW5JR2x1ZEc5Y2JpQWdJQ29nZEdobGJTQjBhR1VnY21WemNHVmpkR2wyWlNCeVpYUjFjbTRnZG1Gc2RXVnpJRzltSUdCMGFHbHpMblJ5WVc1ellXTjBhVzl1VjNKaGNIQmxjbk11YVc1cGRGdHBYV0JjYmlBZ0lDb2dLR0JqYkc5elpXQnljeUIwYUdGMElHTnZjbkpsYzNCdmJtUWdkRzhnYVc1cGRHbGhiR2w2WlhKeklIUm9ZWFFnWm1GcGJHVmtJSGRwYkd3Z2JtOTBJR0psWEc0Z0lDQXFJR2x1ZG05clpXUXBMbHh1SUNBZ0tpOWNiaUFnWTJ4dmMyVkJiR3c2SUdaMWJtTjBhVzl1S0hOMFlYSjBTVzVrWlhncElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJQ0FnZEdocGN5NXBjMGx1VkhKaGJuTmhZM1JwYjI0b0tTeGNiaUFnSUNBZ0lDZFVjbUZ1YzJGamRHbHZiaTVqYkc5elpVRnNiQ2dwT2lCRFlXNXViM1FnWTJ4dmMyVWdkSEpoYm5OaFkzUnBiMjRnZDJobGJpQnViMjVsSUdGeVpTQnZjR1Z1TGlkY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUm9hWE11YVhOSmJsUnlZVzV6WVdOMGFXOXVLQ2twS1R0Y2JpQWdJQ0IyWVhJZ2RISmhibk5oWTNScGIyNVhjbUZ3Y0dWeWN5QTlJSFJvYVhNdWRISmhibk5oWTNScGIyNVhjbUZ3Y0dWeWN6dGNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdjM1JoY25SSmJtUmxlRHNnYVNBOElIUnlZVzV6WVdOMGFXOXVWM0poY0hCbGNuTXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUhaaGNpQjNjbUZ3Y0dWeUlEMGdkSEpoYm5OaFkzUnBiMjVYY21Gd2NHVnljMXRwWFR0Y2JpQWdJQ0FnSUhaaGNpQnBibWwwUkdGMFlTQTlJSFJvYVhNdWQzSmhjSEJsY2tsdWFYUkVZWFJoVzJsZE8xeHVJQ0FnSUNBZ2RtRnlJR1Z5Y205eVZHaHliM2R1TzF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdMeThnUTJGMFkyaHBibWNnWlhKeWIzSnpJRzFoYTJWeklHUmxZblZuWjJsdVp5QnRiM0psSUdScFptWnBZM1ZzZEN3Z2MyOGdkMlVnYzNSaGNuUWdkMmwwYUZ4dUlDQWdJQ0FnSUNBdkx5Qmxjbkp2Y2xSb2NtOTNiaUJ6WlhRZ2RHOGdkSEoxWlNCaVpXWnZjbVVnYzJWMGRHbHVaeUJwZENCMGJ5Qm1ZV3h6WlNCaFpuUmxjaUJqWVd4c2FXNW5YRzRnSUNBZ0lDQWdJQzh2SUdOc2IzTmxJQzB0SUdsbUlHbDBKM01nYzNScGJHd2djMlYwSUhSdklIUnlkV1VnYVc0Z2RHaGxJR1pwYm1Gc2JIa2dZbXh2WTJzc0lHbDBJRzFsWVc1elhHNGdJQ0FnSUNBZ0lDOHZJSGR5WVhCd1pYSXVZMnh2YzJVZ2RHaHlaWGN1WEc0Z0lDQWdJQ0FnSUdWeWNtOXlWR2h5YjNkdUlEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2FXWWdLR2x1YVhSRVlYUmhJQ0U5UFNCVWNtRnVjMkZqZEdsdmJpNVBRbE5GVWxaRlJGOUZVbEpQVWlBbUppQjNjbUZ3Y0dWeUxtTnNiM05sS1NCN1hHNGdJQ0FnSUNBZ0lDQWdkM0poY0hCbGNpNWpiRzl6WlM1allXeHNLSFJvYVhNc0lHbHVhWFJFWVhSaEtUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JsY25KdmNsUm9jbTkzYmlBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnZlNCbWFXNWhiR3g1SUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1Z5Y205eVZHaHliM2R1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVkdobElHTnNiM05sY2lCbWIzSWdkM0poY0hCbGNpQnBJSFJvY21WM0lHRnVJR1Z5Y205eU95QmpiRzl6WlNCMGFHVWdjbVZ0WVdsdWFXNW5YRzRnSUNBZ0lDQWdJQ0FnTHk4Z2QzSmhjSEJsY25NZ1luVjBJSE5wYkdWdVkyVWdZVzU1SUdWNFkyVndkR2x2Ym5NZ1puSnZiU0IwYUdWdElIUnZJR1Z1YzNWeVpTQjBhR0YwSUhSb1pWeHVJQ0FnSUNBZ0lDQWdJQzh2SUdacGNuTjBJR1Z5Y205eUlHbHpJSFJvWlNCdmJtVWdkRzhnWW5WaVlteGxJSFZ3TGx4dUlDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1Oc2IzTmxRV3hzS0drZ0t5QXhLVHRjYmlBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWQzSmhjSEJsY2tsdWFYUkVZWFJoTG14bGJtZDBhQ0E5SURBN1hHNGdJSDFjYm4wN1hHNWNiblpoY2lCVWNtRnVjMkZqZEdsdmJpQTlJSHRjYmx4dUlDQk5hWGhwYmpvZ1RXbDRhVzRzWEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJ2YTJWdUlIUnZJR3h2YjJzZ1ptOXlJSFJ2SUdSbGRHVnliV2x1WlNCcFppQmhiaUJsY25KdmNpQnZZMk4xY21Wa0xseHVJQ0FnS2k5Y2JpQWdUMEpUUlZKV1JVUmZSVkpTVDFJNklIdDlYRzVjYm4wN1hHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdWSEpoYm5OaFkzUnBiMjQ3WEc0aVhYMD0iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgVmlld3BvcnRNZXRyaWNzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgVmlld3BvcnRNZXRyaWNzID0ge1xuXG4gIGN1cnJlbnRTY3JvbGxMZWZ0OiAwLFxuXG4gIGN1cnJlbnRTY3JvbGxUb3A6IDAsXG5cbiAgcmVmcmVzaFNjcm9sbFZhbHVlczogZnVuY3Rpb24oc2Nyb2xsUG9zaXRpb24pIHtcbiAgICBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbExlZnQgPSBzY3JvbGxQb3NpdGlvbi54O1xuICAgIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsVG9wID0gc2Nyb2xsUG9zaXRpb24ueTtcbiAgfVxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXdwb3J0TWV0cmljcztcbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4vKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgYWNjdW11bGF0ZUludG9cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICpcbiAqIEFjY3VtdWxhdGVzIGl0ZW1zIHRoYXQgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQgaW50byB0aGUgZmlyc3Qgb25lLiBUaGlzXG4gKiBpcyB1c2VkIHRvIGNvbnNlcnZlIG1lbW9yeSBieSBhdm9pZGluZyBhcnJheSBhbGxvY2F0aW9ucywgYW5kIHRodXMgc2FjcmlmaWNlc1xuICogQVBJIGNsZWFubmVzcy4gU2luY2UgYGN1cnJlbnRgIGNhbiBiZSBudWxsIGJlZm9yZSBiZWluZyBwYXNzZWQgaW4gYW5kIG5vdFxuICogbnVsbCBhZnRlciB0aGlzIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gYXNzaWduIGl0IGJhY2sgdG8gYGN1cnJlbnRgOlxuICpcbiAqIGBhID0gYWNjdW11bGF0ZUludG8oYSwgYik7YFxuICpcbiAqIFRoaXMgQVBJIHNob3VsZCBiZSBzcGFyaW5nbHkgdXNlZC4gVHJ5IGBhY2N1bXVsYXRlYCBmb3Igc29tZXRoaW5nIGNsZWFuZXIuXG4gKlxuICogQHJldHVybiB7KnxhcnJheTwqPn0gQW4gYWNjdW11bGF0aW9uIG9mIGl0ZW1zLlxuICovXG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVJbnRvKGN1cnJlbnQsIG5leHQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBuZXh0ICE9IG51bGwsXG4gICAgJ2FjY3VtdWxhdGVJbnRvKC4uLik6IEFjY3VtdWxhdGVkIGl0ZW1zIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLidcbiAgKSA6IGludmFyaWFudChuZXh0ICE9IG51bGwpKTtcbiAgaWYgKGN1cnJlbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgLy8gQm90aCBhcmUgbm90IGVtcHR5LiBXYXJuaW5nOiBOZXZlciBjYWxsIHguY29uY2F0KHkpIHdoZW4geW91IGFyZSBub3RcbiAgLy8gY2VydGFpbiB0aGF0IHggaXMgYW4gQXJyYXkgKHggY291bGQgYmUgYSBzdHJpbmcgd2l0aCBjb25jYXQgbWV0aG9kKS5cbiAgdmFyIGN1cnJlbnRJc0FycmF5ID0gQXJyYXkuaXNBcnJheShjdXJyZW50KTtcbiAgdmFyIG5leHRJc0FycmF5ID0gQXJyYXkuaXNBcnJheShuZXh0KTtcblxuICBpZiAoY3VycmVudElzQXJyYXkgJiYgbmV4dElzQXJyYXkpIHtcbiAgICBjdXJyZW50LnB1c2guYXBwbHkoY3VycmVudCwgbmV4dCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBpZiAoY3VycmVudElzQXJyYXkpIHtcbiAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBpZiAobmV4dElzQXJyYXkpIHtcbiAgICAvLyBBIGJpdCB0b28gZGFuZ2Vyb3VzIHRvIG11dGF0ZSBgbmV4dGAuXG4gICAgcmV0dXJuIFtjdXJyZW50XS5jb25jYXQobmV4dCk7XG4gIH1cblxuICByZXR1cm4gW2N1cnJlbnQsIG5leHRdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFjY3VtdWxhdGVJbnRvO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2WVdOamRXMTFiR0YwWlVsdWRHOHVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhOQzB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJR0ZqWTNWdGRXeGhkR1ZKYm5SdlhHNGdLaTljYmx4dUozVnpaU0J6ZEhKcFkzUW5PMXh1WEc1MllYSWdhVzUyWVhKcFlXNTBJRDBnY21WeGRXbHlaU2hjSWk0dmFXNTJZWEpwWVc1MFhDSXBPMXh1WEc0dktpcGNiaUFxWEc0Z0tpQkJZMk4xYlhWc1lYUmxjeUJwZEdWdGN5QjBhR0YwSUcxMWMzUWdibTkwSUdKbElHNTFiR3dnYjNJZ2RXNWtaV1pwYm1Wa0lHbHVkRzhnZEdobElHWnBjbk4wSUc5dVpTNGdWR2hwYzF4dUlDb2dhWE1nZFhObFpDQjBieUJqYjI1elpYSjJaU0J0WlcxdmNua2dZbmtnWVhadmFXUnBibWNnWVhKeVlYa2dZV3hzYjJOaGRHbHZibk1zSUdGdVpDQjBhSFZ6SUhOaFkzSnBabWxqWlhOY2JpQXFJRUZRU1NCamJHVmhibTVsYzNNdUlGTnBibU5sSUdCamRYSnlaVzUwWUNCallXNGdZbVVnYm5Wc2JDQmlaV1p2Y21VZ1ltVnBibWNnY0dGemMyVmtJR2x1SUdGdVpDQnViM1JjYmlBcUlHNTFiR3dnWVdaMFpYSWdkR2hwY3lCbWRXNWpkR2x2Yml3Z2JXRnJaU0J6ZFhKbElIUnZJR0Z6YzJsbmJpQnBkQ0JpWVdOcklIUnZJR0JqZFhKeVpXNTBZRHBjYmlBcVhHNGdLaUJnWVNBOUlHRmpZM1Z0ZFd4aGRHVkpiblJ2S0dFc0lHSXBPMkJjYmlBcVhHNGdLaUJVYUdseklFRlFTU0J6YUc5MWJHUWdZbVVnYzNCaGNtbHVaMng1SUhWelpXUXVJRlJ5ZVNCZ1lXTmpkVzExYkdGMFpXQWdabTl5SUhOdmJXVjBhR2x1WnlCamJHVmhibVZ5TGx4dUlDcGNiaUFxSUVCeVpYUjFjbTRnZXlwOFlYSnlZWGs4S2o1OUlFRnVJR0ZqWTNWdGRXeGhkR2x2YmlCdlppQnBkR1Z0Y3k1Y2JpQXFMMXh1WEc1bWRXNWpkR2x2YmlCaFkyTjFiWFZzWVhSbFNXNTBieWhqZFhKeVpXNTBMQ0J1WlhoMEtTQjdYRzRnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdibVY0ZENBaFBTQnVkV3hzTEZ4dUlDQWdJQ2RoWTJOMWJYVnNZWFJsU1c1MGJ5Z3VMaTRwT2lCQlkyTjFiWFZzWVhSbFpDQnBkR1Z0Y3lCdGRYTjBJRzV2ZENCaVpTQnVkV3hzSUc5eUlIVnVaR1ZtYVc1bFpDNG5YRzRnSUNrZ09pQnBiblpoY21saGJuUW9ibVY0ZENBaFBTQnVkV3hzS1NrN1hHNGdJR2xtSUNoamRYSnlaVzUwSUQwOUlHNTFiR3dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdibVY0ZER0Y2JpQWdmVnh1WEc0Z0lDOHZJRUp2ZEdnZ1lYSmxJRzV2ZENCbGJYQjBlUzRnVjJGeWJtbHVaem9nVG1WMlpYSWdZMkZzYkNCNExtTnZibU5oZENoNUtTQjNhR1Z1SUhsdmRTQmhjbVVnYm05MFhHNGdJQzh2SUdObGNuUmhhVzRnZEdoaGRDQjRJR2x6SUdGdUlFRnljbUY1SUNoNElHTnZkV3hrSUdKbElHRWdjM1J5YVc1bklIZHBkR2dnWTI5dVkyRjBJRzFsZEdodlpDa3VYRzRnSUhaaGNpQmpkWEp5Wlc1MFNYTkJjbkpoZVNBOUlFRnljbUY1TG1selFYSnlZWGtvWTNWeWNtVnVkQ2s3WEc0Z0lIWmhjaUJ1WlhoMFNYTkJjbkpoZVNBOUlFRnljbUY1TG1selFYSnlZWGtvYm1WNGRDazdYRzVjYmlBZ2FXWWdLR04xY25KbGJuUkpjMEZ5Y21GNUlDWW1JRzVsZUhSSmMwRnljbUY1S1NCN1hHNGdJQ0FnWTNWeWNtVnVkQzV3ZFhOb0xtRndjR3g1S0dOMWNuSmxiblFzSUc1bGVIUXBPMXh1SUNBZ0lISmxkSFZ5YmlCamRYSnlaVzUwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR04xY25KbGJuUkpjMEZ5Y21GNUtTQjdYRzRnSUNBZ1kzVnljbVZ1ZEM1d2RYTm9LRzVsZUhRcE8xeHVJQ0FnSUhKbGRIVnliaUJqZFhKeVpXNTBPMXh1SUNCOVhHNWNiaUFnYVdZZ0tHNWxlSFJKYzBGeWNtRjVLU0I3WEc0Z0lDQWdMeThnUVNCaWFYUWdkRzl2SUdSaGJtZGxjbTkxY3lCMGJ5QnRkWFJoZEdVZ1lHNWxlSFJnTGx4dUlDQWdJSEpsZEhWeWJpQmJZM1Z5Y21WdWRGMHVZMjl1WTJGMEtHNWxlSFFwTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUZ0amRYSnlaVzUwTENCdVpYaDBYVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQmhZMk4xYlhWc1lYUmxTVzUwYnp0Y2JpSmRmUT09IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGFkbGVyMzJcbiAqL1xuXG4vKiBqc2xpbnQgYml0d2lzZTp0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIE1PRCA9IDY1NTIxO1xuXG4vLyBUaGlzIGlzIGEgY2xlYW4tcm9vbSBpbXBsZW1lbnRhdGlvbiBvZiBhZGxlcjMyIGRlc2lnbmVkIGZvciBkZXRlY3Rpbmdcbi8vIGlmIG1hcmt1cCBpcyBub3Qgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUuIEl0IGRvZXMgbm90IG5lZWQgdG8gYmVcbi8vIGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZywgb25seSByZWFzb25hYmx5IGdvb2QgYXQgZGV0ZWN0aW5nIGlmIG1hcmt1cFxuLy8gZ2VuZXJhdGVkIG9uIHRoZSBzZXJ2ZXIgaXMgZGlmZmVyZW50IHRoYW4gdGhhdCBvbiB0aGUgY2xpZW50LlxuZnVuY3Rpb24gYWRsZXIzMihkYXRhKSB7XG4gIHZhciBhID0gMTtcbiAgdmFyIGIgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBhID0gKGEgKyBkYXRhLmNoYXJDb2RlQXQoaSkpICUgTU9EO1xuICAgIGIgPSAoYiArIGEpICUgTU9EO1xuICB9XG4gIHJldHVybiBhIHwgKGIgPDwgMTYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFkbGVyMzI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgY2FtZWxpemVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIF9oeXBoZW5QYXR0ZXJuID0gLy0oLikvZztcblxuLyoqXG4gKiBDYW1lbGNhc2VzIGEgaHlwaGVuYXRlZCBzdHJpbmcsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBjYW1lbGl6ZSgnYmFja2dyb3VuZC1jb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY2FtZWxpemUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShfaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24oXywgY2hhcmFjdGVyKSB7XG4gICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYW1lbGl6ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBjYW1lbGl6ZVN0eWxlTmFtZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGNhbWVsaXplID0gcmVxdWlyZShcIi4vY2FtZWxpemVcIik7XG5cbnZhciBtc1BhdHRlcm4gPSAvXi1tcy0vO1xuXG4vKipcbiAqIENhbWVsY2FzZXMgYSBoeXBoZW5hdGVkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gY2FtZWxpemVTdHlsZU5hbWUoJ2JhY2tncm91bmQtY29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAqICAgPiBjYW1lbGl6ZVN0eWxlTmFtZSgnLW1vei10cmFuc2l0aW9uJylcbiAqICAgPCBcIk1velRyYW5zaXRpb25cIlxuICogICA+IGNhbWVsaXplU3R5bGVOYW1lKCctbXMtdHJhbnNpdGlvbicpXG4gKiAgIDwgXCJtc1RyYW5zaXRpb25cIlxuICpcbiAqIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAqIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNhbWVsaXplU3R5bGVOYW1lKHN0cmluZykge1xuICByZXR1cm4gY2FtZWxpemUoc3RyaW5nLnJlcGxhY2UobXNQYXR0ZXJuLCAnbXMtJykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbWVsaXplU3R5bGVOYW1lO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKiBAcHJvdmlkZXNNb2R1bGUgY2xvbmVXaXRoUHJvcHNcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RQcm9wVHJhbnNmZXJlciA9IHJlcXVpcmUoXCIuL1JlYWN0UHJvcFRyYW5zZmVyZXJcIik7XG5cbnZhciBrZXlPZiA9IHJlcXVpcmUoXCIuL2tleU9mXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgQ0hJTERSRU5fUFJPUCA9IGtleU9mKHtjaGlsZHJlbjogbnVsbH0pO1xuXG4vKipcbiAqIFNvbWV0aW1lcyB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHByb3BzIG9mIGEgY2hpbGQgcGFzc2VkIHRvIHlvdS4gVXN1YWxseVxuICogdGhpcyBpcyB0byBhZGQgYSBDU1MgY2xhc3MuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGNoaWxkIGNoaWxkIGVsZW1lbnQgeW91J2QgbGlrZSB0byBjbG9uZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzIHByb3BzIHlvdSdkIGxpa2UgdG8gbW9kaWZ5LiBjbGFzc05hbWUgYW5kIHN0eWxlIHdpbGwgYmVcbiAqIG1lcmdlZCBhdXRvbWF0aWNhbGx5LlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBhIGNsb25lIG9mIGNoaWxkIHdpdGggcHJvcHMgbWVyZ2VkIGluLlxuICovXG5mdW5jdGlvbiBjbG9uZVdpdGhQcm9wcyhjaGlsZCwgcHJvcHMpIHtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgIWNoaWxkLnJlZixcbiAgICAgICdZb3UgYXJlIGNhbGxpbmcgY2xvbmVXaXRoUHJvcHMoKSBvbiBhIGNoaWxkIHdpdGggYSByZWYuIFRoaXMgaXMgJyArXG4gICAgICAnZGFuZ2Vyb3VzIGJlY2F1c2UgeW91XFwncmUgY3JlYXRpbmcgYSBuZXcgY2hpbGQgd2hpY2ggd2lsbCBub3QgYmUgJyArXG4gICAgICAnYWRkZWQgYXMgYSByZWYgdG8gaXRzIHBhcmVudC4nXG4gICAgKSA6IG51bGwpO1xuICB9XG5cbiAgdmFyIG5ld1Byb3BzID0gUmVhY3RQcm9wVHJhbnNmZXJlci5tZXJnZVByb3BzKHByb3BzLCBjaGlsZC5wcm9wcyk7XG5cbiAgLy8gVXNlIGBjaGlsZC5wcm9wcy5jaGlsZHJlbmAgaWYgaXQgaXMgcHJvdmlkZWQuXG4gIGlmICghbmV3UHJvcHMuaGFzT3duUHJvcGVydHkoQ0hJTERSRU5fUFJPUCkgJiZcbiAgICAgIGNoaWxkLnByb3BzLmhhc093blByb3BlcnR5KENISUxEUkVOX1BST1ApKSB7XG4gICAgbmV3UHJvcHMuY2hpbGRyZW4gPSBjaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgfVxuXG4gIC8vIFRoZSBjdXJyZW50IEFQSSBkb2Vzbid0IHJldGFpbiBfb3duZXIgYW5kIF9jb250ZXh0LCB3aGljaCBpcyB3aHkgdGhpc1xuICAvLyBkb2Vzbid0IHVzZSBSZWFjdEVsZW1lbnQuY2xvbmVBbmRSZXBsYWNlUHJvcHMuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudChjaGlsZC50eXBlLCBuZXdQcm9wcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVXaXRoUHJvcHM7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZZMnh2Ym1WWGFYUm9VSEp2Y0hNdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUIwZVhCbFkyaGxZMnR6SUhOMFlYUnBZeTF2Ym14NVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdZMnh2Ym1WWGFYUm9VSEp2Y0hOY2JpQXFMMXh1WEc0bmRYTmxJSE4wY21samRDYzdYRzVjYm5aaGNpQlNaV0ZqZEVWc1pXMWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWc1pXMWxiblJjSWlrN1hHNTJZWElnVW1WaFkzUlFjbTl3VkhKaGJuTm1aWEpsY2lBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFVISnZjRlJ5WVc1elptVnlaWEpjSWlrN1hHNWNiblpoY2lCclpYbFBaaUE5SUhKbGNYVnBjbVVvWENJdUwydGxlVTltWENJcE8xeHVkbUZ5SUhkaGNtNXBibWNnUFNCeVpYRjFhWEpsS0Z3aUxpOTNZWEp1YVc1blhDSXBPMXh1WEc1MllYSWdRMGhKVEVSU1JVNWZVRkpQVUNBOUlHdGxlVTltS0h0amFHbHNaSEpsYmpvZ2JuVnNiSDBwTzF4dVhHNHZLaXBjYmlBcUlGTnZiV1YwYVcxbGN5QjViM1VnZDJGdWRDQjBieUJqYUdGdVoyVWdkR2hsSUhCeWIzQnpJRzltSUdFZ1kyaHBiR1FnY0dGemMyVmtJSFJ2SUhsdmRTNGdWWE4xWVd4c2VWeHVJQ29nZEdocGN5QnBjeUIwYnlCaFpHUWdZU0JEVTFNZ1kyeGhjM011WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFVnNaVzFsYm5SOUlHTm9hV3hrSUdOb2FXeGtJR1ZzWlcxbGJuUWdlVzkxSjJRZ2JHbHJaU0IwYnlCamJHOXVaVnh1SUNvZ1FIQmhjbUZ0SUh0dlltcGxZM1I5SUhCeWIzQnpJSEJ5YjNCeklIbHZkU2RrSUd4cGEyVWdkRzhnYlc5a2FXWjVMaUJqYkdGemMwNWhiV1VnWVc1a0lITjBlV3hsSUhkcGJHd2dZbVZjYmlBcUlHMWxjbWRsWkNCaGRYUnZiV0YwYVdOaGJHeDVMbHh1SUNvZ1FISmxkSFZ5YmlCN1VtVmhZM1JGYkdWdFpXNTBmU0JoSUdOc2IyNWxJRzltSUdOb2FXeGtJSGRwZEdnZ2NISnZjSE1nYldWeVoyVmtJR2x1TGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJqYkc5dVpWZHBkR2hRY205d2N5aGphR2xzWkN3Z2NISnZjSE1wSUh0Y2JpQWdhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCM1lYSnVhVzVuS0Z4dUlDQWdJQ0FnSVdOb2FXeGtMbkpsWml4Y2JpQWdJQ0FnSUNkWmIzVWdZWEpsSUdOaGJHeHBibWNnWTJ4dmJtVlhhWFJvVUhKdmNITW9LU0J2YmlCaElHTm9hV3hrSUhkcGRHZ2dZU0J5WldZdUlGUm9hWE1nYVhNZ0p5QXJYRzRnSUNBZ0lDQW5aR0Z1WjJWeWIzVnpJR0psWTJGMWMyVWdlVzkxWEZ3bmNtVWdZM0psWVhScGJtY2dZU0J1WlhjZ1kyaHBiR1FnZDJocFkyZ2dkMmxzYkNCdWIzUWdZbVVnSnlBclhHNGdJQ0FnSUNBbllXUmtaV1FnWVhNZ1lTQnlaV1lnZEc4Z2FYUnpJSEJoY21WdWRDNG5YRzRnSUNBZ0tTQTZJRzUxYkd3cE8xeHVJQ0I5WEc1Y2JpQWdkbUZ5SUc1bGQxQnliM0J6SUQwZ1VtVmhZM1JRY205d1ZISmhibk5tWlhKbGNpNXRaWEpuWlZCeWIzQnpLSEJ5YjNCekxDQmphR2xzWkM1d2NtOXdjeWs3WEc1Y2JpQWdMeThnVlhObElHQmphR2xzWkM1d2NtOXdjeTVqYUdsc1pISmxibUFnYVdZZ2FYUWdhWE1nY0hKdmRtbGtaV1F1WEc0Z0lHbG1JQ2doYm1WM1VISnZjSE11YUdGelQzZHVVSEp2Y0dWeWRIa29RMGhKVEVSU1JVNWZVRkpQVUNrZ0ppWmNiaUFnSUNBZ0lHTm9hV3hrTG5CeWIzQnpMbWhoYzA5M2JsQnliM0JsY25SNUtFTklTVXhFVWtWT1gxQlNUMUFwS1NCN1hHNGdJQ0FnYm1WM1VISnZjSE11WTJocGJHUnlaVzRnUFNCamFHbHNaQzV3Y205d2N5NWphR2xzWkhKbGJqdGNiaUFnZlZ4dVhHNGdJQzh2SUZSb1pTQmpkWEp5Wlc1MElFRlFTU0JrYjJWemJpZDBJSEpsZEdGcGJpQmZiM2R1WlhJZ1lXNWtJRjlqYjI1MFpYaDBMQ0IzYUdsamFDQnBjeUIzYUhrZ2RHaHBjMXh1SUNBdkx5QmtiMlZ6YmlkMElIVnpaU0JTWldGamRFVnNaVzFsYm5RdVkyeHZibVZCYm1SU1pYQnNZV05sVUhKdmNITXVYRzRnSUhKbGRIVnliaUJTWldGamRFVnNaVzFsYm5RdVkzSmxZWFJsUld4bGJXVnVkQ2hqYUdsc1pDNTBlWEJsTENCdVpYZFFjbTl3Y3lrN1hHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnWTJ4dmJtVlhhWFJvVUhKdmNITTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBjb250YWluc05vZGVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIGlzVGV4dE5vZGUgPSByZXF1aXJlKFwiLi9pc1RleHROb2RlXCIpO1xuXG4vKmpzbGludCBiaXR3aXNlOnRydWUgKi9cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBET00gbm9kZSBjb250YWlucyBvciBpcyBhbm90aGVyIERPTSBub2RlLlxuICpcbiAqIEBwYXJhbSB7P0RPTU5vZGV9IG91dGVyTm9kZSBPdXRlciBET00gbm9kZS5cbiAqIEBwYXJhbSB7P0RPTU5vZGV9IGlubmVyTm9kZSBJbm5lciBET00gbm9kZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG91dGVyTm9kZWAgY29udGFpbnMgb3IgaXMgYGlubmVyTm9kZWAuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICBpZiAoIW91dGVyTm9kZSB8fCAhaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShvdXRlck5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUoaW5uZXJOb2RlKSkge1xuICAgIHJldHVybiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUucGFyZW50Tm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbnRhaW5zKSB7XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb250YWluc05vZGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgY3JlYXRlQXJyYXlGcm9tTWl4ZWRcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIHRvQXJyYXkgPSByZXF1aXJlKFwiLi90b0FycmF5XCIpO1xuXG4vKipcbiAqIFBlcmZvcm0gYSBoZXVyaXN0aWMgdGVzdCB0byBkZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIFwiYXJyYXktbGlrZVwiLlxuICpcbiAqICAgQSBtb25rIGFza2VkIEpvc2h1LCBhIFplbiBtYXN0ZXIsIFwiSGFzIGEgZG9nIEJ1ZGRoYSBuYXR1cmU/XCJcbiAqICAgSm9zaHUgcmVwbGllZDogXCJNdS5cIlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBpdHMgYXJndW1lbnQgaGFzIFwiYXJyYXkgbmF0dXJlXCI6IGl0IHJldHVybnNcbiAqIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFjdHVhbCBhcnJheSwgYW4gYGFyZ3VtZW50cycgb2JqZWN0LCBvciBhblxuICogSFRNTENvbGxlY3Rpb24gKGUuZy4gbm9kZS5jaGlsZE5vZGVzIG9yIG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSkuXG4gKlxuICogSXQgd2lsbCByZXR1cm4gZmFsc2UgZm9yIG90aGVyIGFycmF5LWxpa2Ugb2JqZWN0cyBsaWtlIEZpbGVsaXN0LlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNBcnJheU5hdHVyZShvYmopIHtcbiAgcmV0dXJuIChcbiAgICAvLyBub3QgbnVsbC9mYWxzZVxuICAgICEhb2JqICYmXG4gICAgLy8gYXJyYXlzIGFyZSBvYmplY3RzLCBOb2RlTGlzdHMgYXJlIGZ1bmN0aW9ucyBpbiBTYWZhcmlcbiAgICAodHlwZW9mIG9iaiA9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicpICYmXG4gICAgLy8gcXVhY2tzIGxpa2UgYW4gYXJyYXlcbiAgICAoJ2xlbmd0aCcgaW4gb2JqKSAmJlxuICAgIC8vIG5vdCB3aW5kb3dcbiAgICAhKCdzZXRJbnRlcnZhbCcgaW4gb2JqKSAmJlxuICAgIC8vIG5vIERPTSBub2RlIHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGFycmF5LWxpa2VcbiAgICAvLyBhICdzZWxlY3QnIGVsZW1lbnQgaGFzICdsZW5ndGgnIGFuZCAnaXRlbScgcHJvcGVydGllcyBvbiBJRThcbiAgICAodHlwZW9mIG9iai5ub2RlVHlwZSAhPSAnbnVtYmVyJykgJiZcbiAgICAoXG4gICAgICAvLyBhIHJlYWwgYXJyYXlcbiAgICAgICgvLyBIVE1MQ29sbGVjdGlvbi9Ob2RlTGlzdFxuICAgICAgKEFycmF5LmlzQXJyYXkob2JqKSB8fFxuICAgICAgLy8gYXJndW1lbnRzXG4gICAgICAoJ2NhbGxlZScgaW4gb2JqKSB8fCAnaXRlbScgaW4gb2JqKSlcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5IGJ5IHdyYXBwaW5nIGl0IGluIGFuIGFycmF5IGlmIGl0IGlzIG5vdC5cbiAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoZSBhcmd1bWVudCBpZiBpdCBpcyBhbHJlYWR5IGFuIGFycmF5LlxuICpcbiAqIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5OlxuICpcbiAqICAgdmFyIGNyZWF0ZUFycmF5RnJvbU1peGVkID0gcmVxdWlyZSgnY3JlYXRlQXJyYXlGcm9tTWl4ZWQnKTtcbiAqXG4gKiAgIGZ1bmN0aW9uIHRha2VzT25lT3JNb3JlVGhpbmdzKHRoaW5ncykge1xuICogICAgIHRoaW5ncyA9IGNyZWF0ZUFycmF5RnJvbU1peGVkKHRoaW5ncyk7XG4gKiAgICAgLi4uXG4gKiAgIH1cbiAqXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gdHJlYXQgYHRoaW5ncycgYXMgYW4gYXJyYXksIGJ1dCBhY2NlcHQgc2NhbGFycyBpbiB0aGUgQVBJLlxuICpcbiAqIElmIHlvdSBuZWVkIHRvIGNvbnZlcnQgYW4gYXJyYXktbGlrZSBvYmplY3QsIGxpa2UgYGFyZ3VtZW50c2AsIGludG8gYW4gYXJyYXlcbiAqIHVzZSB0b0FycmF5IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm4ge2FycmF5fVxuICovXG5mdW5jdGlvbiBjcmVhdGVBcnJheUZyb21NaXhlZChvYmopIHtcbiAgaWYgKCFoYXNBcnJheU5hdHVyZShvYmopKSB7XG4gICAgcmV0dXJuIFtvYmpdO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmouc2xpY2UoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdG9BcnJheShvYmopO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQXJyYXlGcm9tTWl4ZWQ7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gRGVmZWF0IGNpcmN1bGFyIHJlZmVyZW5jZXMgYnkgcmVxdWlyaW5nIHRoaXMgZGlyZWN0bHkuXG52YXIgUmVhY3RDbGFzcyA9IHJlcXVpcmUoXCIuL1JlYWN0Q2xhc3NcIik7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZShcIi4vUmVhY3RFbGVtZW50XCIpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbXBvbmVudCB0aGF0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gdW5tb3VudGVkLlxuICpcbiAqIENvbXBvbmVudHMgbGlrZSA8aHRtbD4gPGhlYWQ+IGFuZCA8Ym9keT4gY2FuJ3QgYmUgcmVtb3ZlZCBvciBhZGRlZFxuICogZWFzaWx5IGluIGEgY3Jvc3MtYnJvd3NlciB3YXksIGhvd2V2ZXIgaXQncyB2YWx1YWJsZSB0byBiZSBhYmxlIHRvXG4gKiB0YWtlIGFkdmFudGFnZSBvZiBSZWFjdCdzIHJlY29uY2lsaWF0aW9uIGZvciBzdHlsaW5nIGFuZCA8dGl0bGU+XG4gKiBtYW5hZ2VtZW50LiBTbyB3ZSBqdXN0IGRvY3VtZW50IGl0IGFuZCB0aHJvdyBpbiBkYW5nZXJvdXMgY2FzZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgdGFnIHRvIHdyYXBcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBjb252ZW5pZW5jZSBjb25zdHJ1Y3RvciBvZiBuZXcgY29tcG9uZW50XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50KHRhZykge1xuICB2YXIgZWxlbWVudEZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeSh0YWcpO1xuXG4gIHZhciBGdWxsUGFnZUNvbXBvbmVudCA9IFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3Moe1xuICAgIHRhZ05hbWU6IHRhZy50b1VwcGVyQ2FzZSgpLFxuICAgIGRpc3BsYXlOYW1lOiAnUmVhY3RGdWxsUGFnZUNvbXBvbmVudCcgKyB0YWcsXG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudDogZnVuY3Rpb24oKSB7XG4gICAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJyVzIHRyaWVkIHRvIHVubW91bnQuIEJlY2F1c2Ugb2YgY3Jvc3MtYnJvd3NlciBxdWlya3MgaXQgaXMgJyArXG4gICAgICAgICdpbXBvc3NpYmxlIHRvIHVubW91bnQgc29tZSB0b3AtbGV2ZWwgY29tcG9uZW50cyAoZWcgPGh0bWw+LCA8aGVhZD4sICcgK1xuICAgICAgICAnYW5kIDxib2R5PikgcmVsaWFibHkgYW5kIGVmZmljaWVudGx5LiBUbyBmaXggdGhpcywgaGF2ZSBhIHNpbmdsZSAnICtcbiAgICAgICAgJ3RvcC1sZXZlbCBjb21wb25lbnQgdGhhdCBuZXZlciB1bm1vdW50cyByZW5kZXIgdGhlc2UgZWxlbWVudHMuJyxcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZVxuICAgICAgKSA6IGludmFyaWFudChmYWxzZSkpO1xuICAgIH0sXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRGYWN0b3J5KHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIEZ1bGxQYWdlQ29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUZ1bGxQYWdlQ29tcG9uZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2WTNKbFlYUmxSblZzYkZCaFoyVkRiMjF3YjI1bGJuUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQmpjbVZoZEdWR2RXeHNVR0ZuWlVOdmJYQnZibVZ1ZEZ4dUlDb2dRSFI1Y0dWamFHVmphM05jYmlBcUwxeHVYRzRuZFhObElITjBjbWxqZENjN1hHNWNiaTh2SUVSbFptVmhkQ0JqYVhKamRXeGhjaUJ5WldabGNtVnVZMlZ6SUdKNUlISmxjWFZwY21sdVp5QjBhR2x6SUdScGNtVmpkR3g1TGx4dWRtRnlJRkpsWVdOMFEyeGhjM01nUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOc1lYTnpYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXeGxiV1Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMUpsWVdOMFJXeGxiV1Z1ZEZ3aUtUdGNibHh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1THlvcVhHNGdLaUJEY21WaGRHVWdZU0JqYjIxd2IyNWxiblFnZEdoaGRDQjNhV3hzSUhSb2NtOTNJR0Z1SUdWNFkyVndkR2x2YmlCM2FHVnVJSFZ1Ylc5MWJuUmxaQzVjYmlBcVhHNGdLaUJEYjIxd2IyNWxiblJ6SUd4cGEyVWdQR2gwYld3K0lEeG9aV0ZrUGlCaGJtUWdQR0p2WkhrK0lHTmhiaWQwSUdKbElISmxiVzkyWldRZ2IzSWdZV1JrWldSY2JpQXFJR1ZoYzJsc2VTQnBiaUJoSUdOeWIzTnpMV0p5YjNkelpYSWdkMkY1TENCb2IzZGxkbVZ5SUdsMEozTWdkbUZzZFdGaWJHVWdkRzhnWW1VZ1lXSnNaU0IwYjF4dUlDb2dkR0ZyWlNCaFpIWmhiblJoWjJVZ2IyWWdVbVZoWTNRbmN5QnlaV052Ym1OcGJHbGhkR2x2YmlCbWIzSWdjM1I1YkdsdVp5QmhibVFnUEhScGRHeGxQbHh1SUNvZ2JXRnVZV2RsYldWdWRDNGdVMjhnZDJVZ2FuVnpkQ0JrYjJOMWJXVnVkQ0JwZENCaGJtUWdkR2h5YjNjZ2FXNGdaR0Z1WjJWeWIzVnpJR05oYzJWekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCMFlXY2dWR2hsSUhSaFp5QjBieUIzY21Gd1hHNGdLaUJBY21WMGRYSnVJSHRtZFc1amRHbHZibjBnWTI5dWRtVnVhV1Z1WTJVZ1kyOXVjM1J5ZFdOMGIzSWdiMllnYm1WM0lHTnZiWEJ2Ym1WdWRGeHVJQ292WEc1bWRXNWpkR2x2YmlCamNtVmhkR1ZHZFd4c1VHRm5aVU52YlhCdmJtVnVkQ2gwWVdjcElIdGNiaUFnZG1GeUlHVnNaVzFsYm5SR1lXTjBiM0o1SUQwZ1VtVmhZM1JGYkdWdFpXNTBMbU55WldGMFpVWmhZM1J2Y25rb2RHRm5LVHRjYmx4dUlDQjJZWElnUm5Wc2JGQmhaMlZEYjIxd2IyNWxiblFnUFNCU1pXRmpkRU5zWVhOekxtTnlaV0YwWlVOc1lYTnpLSHRjYmlBZ0lDQjBZV2RPWVcxbE9pQjBZV2N1ZEc5VmNIQmxja05oYzJVb0tTeGNiaUFnSUNCa2FYTndiR0Y1VG1GdFpUb2dKMUpsWVdOMFJuVnNiRkJoWjJWRGIyMXdiMjVsYm5RbklDc2dkR0ZuTEZ4dVhHNGdJQ0FnWTI5dGNHOXVaVzUwVjJsc2JGVnViVzkxYm5RNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDaGNiaUFnSUNBZ0lDQWdabUZzYzJVc1hHNGdJQ0FnSUNBZ0lDY2xjeUIwY21sbFpDQjBieUIxYm0xdmRXNTBMaUJDWldOaGRYTmxJRzltSUdOeWIzTnpMV0p5YjNkelpYSWdjWFZwY210eklHbDBJR2x6SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5hVzF3YjNOemFXSnNaU0IwYnlCMWJtMXZkVzUwSUhOdmJXVWdkRzl3TFd4bGRtVnNJR052YlhCdmJtVnVkSE1nS0dWbklEeG9kRzFzUGl3Z1BHaGxZV1ErTENBbklDdGNiaUFnSUNBZ0lDQWdKMkZ1WkNBOFltOWtlVDRwSUhKbGJHbGhZbXg1SUdGdVpDQmxabVpwWTJsbGJuUnNlUzRnVkc4Z1ptbDRJSFJvYVhNc0lHaGhkbVVnWVNCemFXNW5iR1VnSnlBclhHNGdJQ0FnSUNBZ0lDZDBiM0F0YkdWMlpXd2dZMjl0Y0c5dVpXNTBJSFJvWVhRZ2JtVjJaWElnZFc1dGIzVnVkSE1nY21WdVpHVnlJSFJvWlhObElHVnNaVzFsYm5SekxpY3NYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyOXVjM1J5ZFdOMGIzSXVaR2x6Y0d4aGVVNWhiV1ZjYmlBZ0lDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1ptRnNjMlVwS1R0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnY21WdVpHVnlPaUJtZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJsYkdWdFpXNTBSbUZqZEc5eWVTaDBhR2x6TG5CeWIzQnpLVHRjYmlBZ0lDQjlYRzRnSUgwcE8xeHVYRzRnSUhKbGRIVnliaUJHZFd4c1VHRm5aVU52YlhCdmJtVnVkRHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQmpjbVZoZEdWR2RXeHNVR0ZuWlVOdmJYQnZibVZ1ZER0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXBcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSwgc3ViOiB0cnVlICovXG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgY3JlYXRlQXJyYXlGcm9tTWl4ZWQgPSByZXF1aXJlKFwiLi9jcmVhdGVBcnJheUZyb21NaXhlZFwiKTtcbnZhciBnZXRNYXJrdXBXcmFwID0gcmVxdWlyZShcIi4vZ2V0TWFya3VwV3JhcFwiKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogRHVtbXkgY29udGFpbmVyIHVzZWQgdG8gcmVuZGVyIGFsbCBtYXJrdXAuXG4gKi9cbnZhciBkdW1teU5vZGUgPVxuICBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSA6IG51bGw7XG5cbi8qKlxuICogUGF0dGVybiB1c2VkIGJ5IGBnZXROb2RlTmFtZWAuXG4gKi9cbnZhciBub2RlTmFtZVBhdHRlcm4gPSAvXlxccyo8KFxcdyspLztcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYG5vZGVOYW1lYCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiBhIHN0cmluZyBvZiBtYXJrdXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBTdHJpbmcgb2YgbWFya3VwLlxuICogQHJldHVybiB7P3N0cmluZ30gTm9kZSBuYW1lIG9mIHRoZSBzdXBwbGllZCBtYXJrdXAuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG1hcmt1cCkge1xuICB2YXIgbm9kZU5hbWVNYXRjaCA9IG1hcmt1cC5tYXRjaChub2RlTmFtZVBhdHRlcm4pO1xuICByZXR1cm4gbm9kZU5hbWVNYXRjaCAmJiBub2RlTmFtZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBub2RlcyByZW5kZXJlZCBmcm9tIHRoZSBzdXBwbGllZCBtYXJrdXAuIFRoZVxuICogb3B0aW9uYWxseSBzdXBwbGllZCBgaGFuZGxlU2NyaXB0YCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25jZSBmb3IgZWFjaFxuICogPHNjcmlwdD4gZWxlbWVudCB0aGF0IGlzIHJlbmRlcmVkLiBJZiBubyBgaGFuZGxlU2NyaXB0YCBmdW5jdGlvbiBpcyBzdXBwbGllZCxcbiAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgYW55IDxzY3JpcHQ+IGVsZW1lbnRzIGFyZSByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIEEgc3RyaW5nIG9mIHZhbGlkIEhUTUwgbWFya3VwLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGhhbmRsZVNjcmlwdCBJbnZva2VkIG9uY2UgZm9yIGVhY2ggcmVuZGVyZWQgPHNjcmlwdD4uXG4gKiBAcmV0dXJuIHthcnJheTxET01FbGVtZW50fERPTVRleHROb2RlPn0gQW4gYXJyYXkgb2YgcmVuZGVyZWQgbm9kZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVzRnJvbU1hcmt1cChtYXJrdXAsIGhhbmRsZVNjcmlwdCkge1xuICB2YXIgbm9kZSA9IGR1bW15Tm9kZTtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudCghIWR1bW15Tm9kZSwgJ2NyZWF0ZU5vZGVzRnJvbU1hcmt1cCBkdW1teSBub3QgaW5pdGlhbGl6ZWQnKSA6IGludmFyaWFudCghIWR1bW15Tm9kZSkpO1xuICB2YXIgbm9kZU5hbWUgPSBnZXROb2RlTmFtZShtYXJrdXApO1xuXG4gIHZhciB3cmFwID0gbm9kZU5hbWUgJiYgZ2V0TWFya3VwV3JhcChub2RlTmFtZSk7XG4gIGlmICh3cmFwKSB7XG4gICAgbm9kZS5pbm5lckhUTUwgPSB3cmFwWzFdICsgbWFya3VwICsgd3JhcFsyXTtcblxuICAgIHZhciB3cmFwRGVwdGggPSB3cmFwWzBdO1xuICAgIHdoaWxlICh3cmFwRGVwdGgtLSkge1xuICAgICAgbm9kZSA9IG5vZGUubGFzdENoaWxkO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlLmlubmVySFRNTCA9IG1hcmt1cDtcbiAgfVxuXG4gIHZhciBzY3JpcHRzID0gbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gIGlmIChzY3JpcHRzLmxlbmd0aCkge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBoYW5kbGVTY3JpcHQsXG4gICAgICAnY3JlYXRlTm9kZXNGcm9tTWFya3VwKC4uLik6IFVuZXhwZWN0ZWQgPHNjcmlwdD4gZWxlbWVudCByZW5kZXJlZC4nXG4gICAgKSA6IGludmFyaWFudChoYW5kbGVTY3JpcHQpKTtcbiAgICBjcmVhdGVBcnJheUZyb21NaXhlZChzY3JpcHRzKS5mb3JFYWNoKGhhbmRsZVNjcmlwdCk7XG4gIH1cblxuICB2YXIgbm9kZXMgPSBjcmVhdGVBcnJheUZyb21NaXhlZChub2RlLmNoaWxkTm9kZXMpO1xuICB3aGlsZSAobm9kZS5sYXN0Q2hpbGQpIHtcbiAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUubGFzdENoaWxkKTtcbiAgfVxuICByZXR1cm4gbm9kZXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlTm9kZXNGcm9tTWFya3VwO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2WTNKbFlYUmxUbTlrWlhOR2NtOXRUV0Z5YTNWd0xtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JqY21WaGRHVk9iMlJsYzBaeWIyMU5ZWEpyZFhCY2JpQXFJRUIwZVhCbFkyaGxZMnR6WEc0Z0tpOWNibHh1THlwcWMyeHBiblFnWlhacGJEb2dkSEoxWlN3Z2MzVmlPaUIwY25WbElDb3ZYRzVjYm5aaGNpQkZlR1ZqZFhScGIyNUZiblpwY205dWJXVnVkQ0E5SUhKbGNYVnBjbVVvWENJdUwwVjRaV04xZEdsdmJrVnVkbWx5YjI1dFpXNTBYQ0lwTzF4dVhHNTJZWElnWTNKbFlYUmxRWEp5WVhsR2NtOXRUV2w0WldRZ1BTQnlaWEYxYVhKbEtGd2lMaTlqY21WaGRHVkJjbkpoZVVaeWIyMU5hWGhsWkZ3aUtUdGNiblpoY2lCblpYUk5ZWEpyZFhCWGNtRndJRDBnY21WeGRXbHlaU2hjSWk0dloyVjBUV0Z5YTNWd1YzSmhjRndpS1R0Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1JIVnRiWGtnWTI5dWRHRnBibVZ5SUhWelpXUWdkRzhnY21WdVpHVnlJR0ZzYkNCdFlYSnJkWEF1WEc0Z0tpOWNiblpoY2lCa2RXMXRlVTV2WkdVZ1BWeHVJQ0JGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEM1allXNVZjMlZFVDAwZ1B5QmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0Nka2FYWW5LU0E2SUc1MWJHdzdYRzVjYmk4cUtseHVJQ29nVUdGMGRHVnliaUIxYzJWa0lHSjVJR0JuWlhST2IyUmxUbUZ0WldBdVhHNGdLaTljYm5aaGNpQnViMlJsVG1GdFpWQmhkSFJsY200Z1BTQXZYbHhjY3lvOEtGeGNkeXNwTHp0Y2JseHVMeW9xWEc0Z0tpQkZlSFJ5WVdOMGN5QjBhR1VnWUc1dlpHVk9ZVzFsWUNCdlppQjBhR1VnWm1seWMzUWdaV3hsYldWdWRDQnBiaUJoSUhOMGNtbHVaeUJ2WmlCdFlYSnJkWEF1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRzFoY210MWNDQlRkSEpwYm1jZ2IyWWdiV0Z5YTNWd0xseHVJQ29nUUhKbGRIVnliaUI3UDNOMGNtbHVaMzBnVG05a1pTQnVZVzFsSUc5bUlIUm9aU0J6ZFhCd2JHbGxaQ0J0WVhKcmRYQXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHZGxkRTV2WkdWT1lXMWxLRzFoY210MWNDa2dlMXh1SUNCMllYSWdibTlrWlU1aGJXVk5ZWFJqYUNBOUlHMWhjbXQxY0M1dFlYUmphQ2h1YjJSbFRtRnRaVkJoZEhSbGNtNHBPMXh1SUNCeVpYUjFjbTRnYm05a1pVNWhiV1ZOWVhSamFDQW1KaUJ1YjJSbFRtRnRaVTFoZEdOb1d6RmRMblJ2VEc5M1pYSkRZWE5sS0NrN1hHNTlYRzVjYmk4cUtseHVJQ29nUTNKbFlYUmxjeUJoYmlCaGNuSmhlU0JqYjI1MFlXbHVhVzVuSUhSb1pTQnViMlJsY3lCeVpXNWtaWEpsWkNCbWNtOXRJSFJvWlNCemRYQndiR2xsWkNCdFlYSnJkWEF1SUZSb1pWeHVJQ29nYjNCMGFXOXVZV3hzZVNCemRYQndiR2xsWkNCZ2FHRnVaR3hsVTJOeWFYQjBZQ0JtZFc1amRHbHZiaUIzYVd4c0lHSmxJR2x1ZG05clpXUWdiMjVqWlNCbWIzSWdaV0ZqYUZ4dUlDb2dQSE5qY21sd2RENGdaV3hsYldWdWRDQjBhR0YwSUdseklISmxibVJsY21Wa0xpQkpaaUJ1YnlCZ2FHRnVaR3hsVTJOeWFYQjBZQ0JtZFc1amRHbHZiaUJwY3lCemRYQndiR2xsWkN4Y2JpQXFJR0Z1SUdWNFkyVndkR2x2YmlCcGN5QjBhSEp2ZDI0Z2FXWWdZVzU1SUR4elkzSnBjSFErSUdWc1pXMWxiblJ6SUdGeVpTQnlaVzVrWlhKbFpDNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2JXRnlhM1Z3SUVFZ2MzUnlhVzVuSUc5bUlIWmhiR2xrSUVoVVRVd2diV0Z5YTNWd0xseHVJQ29nUUhCaGNtRnRJSHMvWm5WdVkzUnBiMjU5SUdoaGJtUnNaVk5qY21sd2RDQkpiblp2YTJWa0lHOXVZMlVnWm05eUlHVmhZMmdnY21WdVpHVnlaV1FnUEhOamNtbHdkRDR1WEc0Z0tpQkFjbVYwZFhKdUlIdGhjbkpoZVR4RVQwMUZiR1Z0Wlc1MGZFUlBUVlJsZUhST2IyUmxQbjBnUVc0Z1lYSnlZWGtnYjJZZ2NtVnVaR1Z5WldRZ2JtOWtaWE11WEc0Z0tpOWNibVoxYm1OMGFXOXVJR055WldGMFpVNXZaR1Z6Um5KdmJVMWhjbXQxY0NodFlYSnJkWEFzSUdoaGJtUnNaVk5qY21sd2RDa2dlMXh1SUNCMllYSWdibTlrWlNBOUlHUjFiVzE1VG05a1pUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2doSVdSMWJXMTVUbTlrWlN3Z0oyTnlaV0YwWlU1dlpHVnpSbkp2YlUxaGNtdDFjQ0JrZFcxdGVTQnViM1FnYVc1cGRHbGhiR2w2WldRbktTQTZJR2x1ZG1GeWFXRnVkQ2doSVdSMWJXMTVUbTlrWlNrcE8xeHVJQ0IyWVhJZ2JtOWtaVTVoYldVZ1BTQm5aWFJPYjJSbFRtRnRaU2h0WVhKcmRYQXBPMXh1WEc0Z0lIWmhjaUIzY21Gd0lEMGdibTlrWlU1aGJXVWdKaVlnWjJWMFRXRnlhM1Z3VjNKaGNDaHViMlJsVG1GdFpTazdYRzRnSUdsbUlDaDNjbUZ3S1NCN1hHNGdJQ0FnYm05a1pTNXBibTVsY2toVVRVd2dQU0IzY21Gd1d6RmRJQ3NnYldGeWEzVndJQ3NnZDNKaGNGc3lYVHRjYmx4dUlDQWdJSFpoY2lCM2NtRndSR1Z3ZEdnZ1BTQjNjbUZ3V3pCZE8xeHVJQ0FnSUhkb2FXeGxJQ2gzY21Gd1JHVndkR2d0TFNrZ2UxeHVJQ0FnSUNBZ2JtOWtaU0E5SUc1dlpHVXViR0Z6ZEVOb2FXeGtPMXh1SUNBZ0lIMWNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnViMlJsTG1sdWJtVnlTRlJOVENBOUlHMWhjbXQxY0R0Y2JpQWdmVnh1WEc0Z0lIWmhjaUJ6WTNKcGNIUnpJRDBnYm05a1pTNW5aWFJGYkdWdFpXNTBjMEo1VkdGblRtRnRaU2duYzJOeWFYQjBKeWs3WEc0Z0lHbG1JQ2h6WTNKcGNIUnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCb1lXNWtiR1ZUWTNKcGNIUXNYRzRnSUNBZ0lDQW5ZM0psWVhSbFRtOWtaWE5HY205dFRXRnlhM1Z3S0M0dUxpazZJRlZ1Wlhod1pXTjBaV1FnUEhOamNtbHdkRDRnWld4bGJXVnVkQ0J5Wlc1a1pYSmxaQzRuWEc0Z0lDQWdLU0E2SUdsdWRtRnlhV0Z1ZENob1lXNWtiR1ZUWTNKcGNIUXBLVHRjYmlBZ0lDQmpjbVZoZEdWQmNuSmhlVVp5YjIxTmFYaGxaQ2h6WTNKcGNIUnpLUzVtYjNKRllXTm9LR2hoYm1Sc1pWTmpjbWx3ZENrN1hHNGdJSDFjYmx4dUlDQjJZWElnYm05a1pYTWdQU0JqY21WaGRHVkJjbkpoZVVaeWIyMU5hWGhsWkNodWIyUmxMbU5vYVd4a1RtOWtaWE1wTzF4dUlDQjNhR2xzWlNBb2JtOWtaUzVzWVhOMFEyaHBiR1FwSUh0Y2JpQWdJQ0J1YjJSbExuSmxiVzkyWlVOb2FXeGtLRzV2WkdVdWJHRnpkRU5vYVd4a0tUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2JtOWtaWE03WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdZM0psWVhSbFRtOWtaWE5HY205dFRXRnlhM1Z3TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGN4XG4gKi9cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFyayBzdHJpbmcgbGl0ZXJhbHMgcmVwcmVzZW50aW5nIENTUyBjbGFzcyBuYW1lc1xuICogc28gdGhhdCB0aGV5IGNhbiBiZSB0cmFuc2Zvcm1lZCBzdGF0aWNhbGx5LiBUaGlzIGFsbG93cyBmb3IgbW9kdWxhcml6YXRpb25cbiAqIGFuZCBtaW5pZmljYXRpb24gb2YgQ1NTIGNsYXNzIG5hbWVzLlxuICpcbiAqIEluIHN0YXRpY191cHN0cmVhbSwgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCwgYnV0IGl0IHNob3VsZFxuICogZXZlbnR1YWxseSBiZSByZXBsYWNlZCB3aXRoIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlLCBhbmQgdGhlIHRyYW5zZm9ybVxuICogdGhhdCBpcyB1c2VkIGluIHRoZSBtYWluIHN0YWNrIHNob3VsZCBiZSBwb3J0ZWQgZm9yIHVzZSBlbHNld2hlcmUuXG4gKlxuICogQHBhcmFtIHN0cmluZ3xvYmplY3QgY2xhc3NOYW1lIHRvIG1vZHVsYXJpemUsIG9yIGFuIG9iamVjdCBvZiBrZXkvdmFsdWVzLlxuICogICAgICAgICAgICAgICAgICAgICAgSW4gdGhlIG9iamVjdCBjYXNlLCB0aGUgdmFsdWVzIGFyZSBjb25kaXRpb25zIHRoYXRcbiAqICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSBpZiB0aGUgY2xhc3NOYW1lIGtleXMgc2hvdWxkIGJlIGluY2x1ZGVkLlxuICogQHBhcmFtIFtzdHJpbmcgLi4uXSAgVmFyaWFibGUgbGlzdCBvZiBjbGFzc05hbWVzIGluIHRoZSBzdHJpbmcgY2FzZS5cbiAqIEByZXR1cm4gc3RyaW5nICAgICAgIFJlbmRlcmFibGUgc3BhY2Utc2VwYXJhdGVkIENTUyBjbGFzc05hbWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG52YXIgd2FybmVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGN4KGNsYXNzTmFtZXMpIHtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgd2FybmVkLFxuICAgICAgJ1JlYWN0LmFkZG9ucy5jbGFzc1NldCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gU2VlICcgK1xuICAgICAgJ2h0dHA6Ly9mYi5tZS9yZWFjdC1hZGRvbnMtY2xhc3NzZXQnXG4gICAgKSA6IG51bGwpO1xuICAgIHdhcm5lZCA9IHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGNsYXNzTmFtZXMgPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2xhc3NOYW1lcykuZmlsdGVyKGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xuICAgICAgcmV0dXJuIGNsYXNzTmFtZXNbY2xhc3NOYW1lXTtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCAnICcpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3g7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZZM2d1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQmplRnh1SUNvdlhHNWNiaThxS2x4dUlDb2dWR2hwY3lCbWRXNWpkR2x2YmlCcGN5QjFjMlZrSUhSdklHMWhjbXNnYzNSeWFXNW5JR3hwZEdWeVlXeHpJSEpsY0hKbGMyVnVkR2x1WnlCRFUxTWdZMnhoYzNNZ2JtRnRaWE5jYmlBcUlITnZJSFJvWVhRZ2RHaGxlU0JqWVc0Z1ltVWdkSEpoYm5ObWIzSnRaV1FnYzNSaGRHbGpZV3hzZVM0Z1ZHaHBjeUJoYkd4dmQzTWdabTl5SUcxdlpIVnNZWEpwZW1GMGFXOXVYRzRnS2lCaGJtUWdiV2x1YVdacFkyRjBhVzl1SUc5bUlFTlRVeUJqYkdGemN5QnVZVzFsY3k1Y2JpQXFYRzRnS2lCSmJpQnpkR0YwYVdOZmRYQnpkSEpsWVcwc0lIUm9hWE1nWm5WdVkzUnBiMjRnYVhNZ1lXTjBkV0ZzYkhrZ2FXMXdiR1Z0Wlc1MFpXUXNJR0oxZENCcGRDQnphRzkxYkdSY2JpQXFJR1YyWlc1MGRXRnNiSGtnWW1VZ2NtVndiR0ZqWldRZ2QybDBhQ0J6YjIxbGRHaHBibWNnYlc5eVpTQmtaWE5qY21sd2RHbDJaU3dnWVc1a0lIUm9aU0IwY21GdWMyWnZjbTFjYmlBcUlIUm9ZWFFnYVhNZ2RYTmxaQ0JwYmlCMGFHVWdiV0ZwYmlCemRHRmpheUJ6YUc5MWJHUWdZbVVnY0c5eWRHVmtJR1p2Y2lCMWMyVWdaV3h6Wlhkb1pYSmxMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQnpkSEpwYm1kOGIySnFaV04wSUdOc1lYTnpUbUZ0WlNCMGJ5QnRiMlIxYkdGeWFYcGxMQ0J2Y2lCaGJpQnZZbXBsWTNRZ2IyWWdhMlY1TDNaaGJIVmxjeTVjYmlBcUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRWx1SUhSb1pTQnZZbXBsWTNRZ1kyRnpaU3dnZEdobElIWmhiSFZsY3lCaGNtVWdZMjl1WkdsMGFXOXVjeUIwYUdGMFhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1pYUmxjbTFwYm1VZ2FXWWdkR2hsSUdOc1lYTnpUbUZ0WlNCclpYbHpJSE5vYjNWc1pDQmlaU0JwYm1Oc2RXUmxaQzVjYmlBcUlFQndZWEpoYlNCYmMzUnlhVzVuSUM0dUxsMGdJRlpoY21saFlteGxJR3hwYzNRZ2IyWWdZMnhoYzNOT1lXMWxjeUJwYmlCMGFHVWdjM1J5YVc1bklHTmhjMlV1WEc0Z0tpQkFjbVYwZFhKdUlITjBjbWx1WnlBZ0lDQWdJQ0JTWlc1a1pYSmhZbXhsSUhOd1lXTmxMWE5sY0dGeVlYUmxaQ0JEVTFNZ1kyeGhjM05PWVcxbExseHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYm5aaGNpQjNZWEp1YVc1bklEMGdjbVZ4ZFdseVpTaGNJaTR2ZDJGeWJtbHVaMXdpS1R0Y2JseHVkbUZ5SUhkaGNtNWxaQ0E5SUdaaGJITmxPMXh1WEc1bWRXNWpkR2x2YmlCamVDaGpiR0Z6YzA1aGJXVnpLU0I3WEc0Z0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnZDJGeWJtbHVaeWhjYmlBZ0lDQWdJSGRoY201bFpDeGNiaUFnSUNBZ0lDZFNaV0ZqZEM1aFpHUnZibk11WTJ4aGMzTlRaWFFnZDJsc2JDQmlaU0JrWlhCeVpXTmhkR1ZrSUdsdUlHRWdablYwZFhKbElIWmxjbk5wYjI0dUlGTmxaU0FuSUN0Y2JpQWdJQ0FnSUNkb2RIUndPaTh2Wm1JdWJXVXZjbVZoWTNRdFlXUmtiMjV6TFdOc1lYTnpjMlYwSjF4dUlDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQjNZWEp1WldRZ1BTQjBjblZsTzF4dUlDQjlYRzVjYmlBZ2FXWWdLSFI1Y0dWdlppQmpiR0Z6YzA1aGJXVnpJRDA5SUNkdlltcGxZM1FuS1NCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0dOc1lYTnpUbUZ0WlhNcExtWnBiSFJsY2lobWRXNWpkR2x2YmloamJHRnpjMDVoYldVcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCamJHRnpjMDVoYldWelcyTnNZWE56VG1GdFpWMDdYRzRnSUNBZ2ZTa3VhbTlwYmlnbklDY3BPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdWFtOXBiaTVqWVd4c0tHRnlaM1Z0Wlc1MGN5d2dKeUFuS1R0Y2JpQWdmVnh1ZlZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlHTjRPMXh1SWwxOSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBkYW5nZXJvdXNTdHlsZVZhbHVlXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENTU1Byb3BlcnR5ID0gcmVxdWlyZShcIi4vQ1NTUHJvcGVydHlcIik7XG5cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0gQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcjtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgcHJvcGVyIGNzcyB3cml0YWJsZSB2YWx1ZS4gVGhlIHN0eWxlIG5hbWUgYG5hbWVgXG4gKiBzaG91bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZFxuICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBwcm9wZXJ0eSBuYW1lIHN1Y2ggYXMgYHRvcE1hcmdpbmAuXG4gKiBAcGFyYW0geyp9IHZhbHVlIENTUyBwcm9wZXJ0eSB2YWx1ZSBzdWNoIGFzIGAxMHB4YC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBzdHlsZSB2YWx1ZSB3aXRoIGRpbWVuc2lvbnMgYXBwbGllZC5cbiAqL1xuZnVuY3Rpb24gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShuYW1lLCB2YWx1ZSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGlzTm9uTnVtZXJpYyA9IGlzTmFOKHZhbHVlKTtcbiAgaWYgKGlzTm9uTnVtZXJpYyB8fCB2YWx1ZSA9PT0gMCB8fFxuICAgICAgaXNVbml0bGVzc051bWJlci5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBpc1VuaXRsZXNzTnVtYmVyW25hbWVdKSB7XG4gICAgcmV0dXJuICcnICsgdmFsdWU7IC8vIGNhc3QgdG8gc3RyaW5nXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICB9XG4gIHJldHVybiB2YWx1ZSArICdweCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBlbXB0eUZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYXJnO1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhbmQgZGlzY2FyZHMgaW5wdXRzOyBpdCBoYXMgbm8gc2lkZSBlZmZlY3RzLiBUaGlzIGlzXG4gKiBwcmltYXJpbHkgdXNlZnVsIGlkaW9tYXRpY2FsbHkgZm9yIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGVuZHBvaW50cyB3aGljaFxuICogYWx3YXlzIG5lZWQgdG8gYmUgY2FsbGFibGUsIHNpbmNlIEpTIGxhY2tzIGEgbnVsbC1jYWxsIGlkaW9tIGFsYSBDb2NvYS5cbiAqL1xuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XG5cbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnMgPSBtYWtlRW1wdHlGdW5jdGlvbjtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlID0gbWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCA9IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RoaXMgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH07XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQgPSBmdW5jdGlvbihhcmcpIHsgcmV0dXJuIGFyZzsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbXB0eUZ1bmN0aW9uO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBlbXB0eU9iamVjdFxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZW1wdHlPYmplY3QgPSB7fTtcblxuaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlbXB0eU9iamVjdDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlpXMXdkSGxQWW1wbFkzUXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElHVnRjSFI1VDJKcVpXTjBYRzRnS2k5Y2JseHVYQ0oxYzJVZ2MzUnlhV04wWENJN1hHNWNiblpoY2lCbGJYQjBlVTlpYW1WamRDQTlJSHQ5TzF4dVhHNXBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUU5aWFtVmpkQzVtY21WbGVtVW9aVzF3ZEhsUFltcGxZM1FwTzF4dWZWeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJR1Z0Y0hSNVQySnFaV04wTzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRVNDQVBFX0xPT0tVUCA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJzwnOiAnJmx0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICAnXFwnJzogJyYjeDI3Oydcbn07XG5cbnZhciBFU0NBUEVfUkVHRVggPSAvWyY+PFwiJ10vZztcblxuZnVuY3Rpb24gZXNjYXBlcihtYXRjaCkge1xuICByZXR1cm4gRVNDQVBFX0xPT0tVUFttYXRjaF07XG59XG5cbi8qKlxuICogRXNjYXBlcyB0ZXh0IHRvIHByZXZlbnQgc2NyaXB0aW5nIGF0dGFja3MuXG4gKlxuICogQHBhcmFtIHsqfSB0ZXh0IFRleHQgdmFsdWUgdG8gZXNjYXBlLlxuICogQHJldHVybiB7c3RyaW5nfSBBbiBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHRleHQpIHtcbiAgcmV0dXJuICgnJyArIHRleHQpLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCBlc2NhcGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXI7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGZpbmRET01Ob2RlXG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZShcIi4vUmVhY3RDdXJyZW50T3duZXJcIik7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoXCIuL1JlYWN0SW5zdGFuY2VNYXBcIik7XG52YXIgUmVhY3RNb3VudCA9IHJlcXVpcmUoXCIuL1JlYWN0TW91bnRcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG52YXIgaXNOb2RlID0gcmVxdWlyZShcIi4vaXNOb2RlXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIERPTSBub2RlIHJlbmRlcmVkIGJ5IHRoaXMgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fERPTUVsZW1lbnR9IGNvbXBvbmVudE9yRWxlbWVudFxuICogQHJldHVybiB7RE9NRWxlbWVudH0gVGhlIHJvb3Qgbm9kZSBvZiB0aGlzIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICBpZiAob3duZXIgIT09IG51bGwpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIsXG4gICAgICAgICclcyBpcyBhY2Nlc3NpbmcgZ2V0RE9NTm9kZSBvciBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigpLiAnICtcbiAgICAgICAgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArXG4gICAgICAgICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICtcbiAgICAgICAgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgK1xuICAgICAgICAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJyxcbiAgICAgICAgb3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCdcbiAgICAgICkgOiBudWxsKTtcbiAgICAgIG93bmVyLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChpc05vZGUoY29tcG9uZW50T3JFbGVtZW50KSkge1xuICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cbiAgaWYgKFJlYWN0SW5zdGFuY2VNYXAuaGFzKGNvbXBvbmVudE9yRWxlbWVudCkpIHtcbiAgICByZXR1cm4gUmVhY3RNb3VudC5nZXROb2RlRnJvbUluc3RhbmNlKGNvbXBvbmVudE9yRWxlbWVudCk7XG4gIH1cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBjb21wb25lbnRPckVsZW1lbnQucmVuZGVyID09IG51bGwgfHxcbiAgICB0eXBlb2YgY29tcG9uZW50T3JFbGVtZW50LnJlbmRlciAhPT0gJ2Z1bmN0aW9uJyxcbiAgICAnQ29tcG9uZW50ICh3aXRoIGtleXM6ICVzKSBjb250YWlucyBgcmVuZGVyYCBtZXRob2QgJyArXG4gICAgJ2J1dCBpcyBub3QgbW91bnRlZCBpbiB0aGUgRE9NJyxcbiAgICBPYmplY3Qua2V5cyhjb21wb25lbnRPckVsZW1lbnQpXG4gICkgOiBpbnZhcmlhbnQoY29tcG9uZW50T3JFbGVtZW50LnJlbmRlciA9PSBudWxsIHx8XG4gIHR5cGVvZiBjb21wb25lbnRPckVsZW1lbnQucmVuZGVyICE9PSAnZnVuY3Rpb24nKSk7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgZmFsc2UsXG4gICAgJ0VsZW1lbnQgYXBwZWFycyB0byBiZSBuZWl0aGVyIFJlYWN0Q29tcG9uZW50IG5vciBET01Ob2RlIChrZXlzOiAlcyknLFxuICAgIE9iamVjdC5rZXlzKGNvbXBvbmVudE9yRWxlbWVudClcbiAgKSA6IGludmFyaWFudChmYWxzZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRET01Ob2RlO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2Wm1sdVpFUlBUVTV2WkdVdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFekxUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ1ptbHVaRVJQVFU1dlpHVmNiaUFxSUVCMGVYQmxZMmhsWTJ0eklITjBZWFJwWXkxdmJteDVYRzRnS2k5Y2JseHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNTJZWElnVW1WaFkzUkRkWEp5Wlc1MFQzZHVaWElnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVOMWNuSmxiblJQZDI1bGNsd2lLVHRjYm5aaGNpQlNaV0ZqZEVsdWMzUmhibU5sVFdGd0lEMGdjbVZ4ZFdseVpTaGNJaTR2VW1WaFkzUkpibk4wWVc1alpVMWhjRndpS1R0Y2JuWmhjaUJTWldGamRFMXZkVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNSTmIzVnVkRndpS1R0Y2JseHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUJwYzA1dlpHVWdQU0J5WlhGMWFYSmxLRndpTGk5cGMwNXZaR1ZjSWlrN1hHNTJZWElnZDJGeWJtbHVaeUE5SUhKbGNYVnBjbVVvWENJdUwzZGhjbTVwYm1kY0lpazdYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIwYUdVZ1JFOU5JRzV2WkdVZ2NtVnVaR1Z5WldRZ1lua2dkR2hwY3lCbGJHVnRaVzUwTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3VW1WaFkzUkRiMjF3YjI1bGJuUjhSRTlOUld4bGJXVnVkSDBnWTI5dGNHOXVaVzUwVDNKRmJHVnRaVzUwWEc0Z0tpQkFjbVYwZFhKdUlIdEVUMDFGYkdWdFpXNTBmU0JVYUdVZ2NtOXZkQ0J1YjJSbElHOW1JSFJvYVhNZ1pXeGxiV1Z1ZEM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnWm1sdVpFUlBUVTV2WkdVb1kyOXRjRzl1Wlc1MFQzSkZiR1Z0Wlc1MEtTQjdYRzRnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0IyWVhJZ2IzZHVaWElnUFNCU1pXRmpkRU4xY25KbGJuUlBkMjVsY2k1amRYSnlaVzUwTzF4dUlDQWdJR2xtSUNodmQyNWxjaUFoUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQWdJRzkzYm1WeUxsOTNZWEp1WldSQlltOTFkRkpsWm5OSmJsSmxibVJsY2l4Y2JpQWdJQ0FnSUNBZ0p5VnpJR2x6SUdGalkyVnpjMmx1WnlCblpYUkVUMDFPYjJSbElHOXlJR1pwYm1SRVQwMU9iMlJsSUdsdWMybGtaU0JwZEhNZ2NtVnVaR1Z5S0NrdUlDY2dLMXh1SUNBZ0lDQWdJQ0FuY21WdVpHVnlLQ2tnYzJodmRXeGtJR0psSUdFZ2NIVnlaU0JtZFc1amRHbHZiaUJ2WmlCd2NtOXdjeUJoYm1RZ2MzUmhkR1V1SUVsMElITm9iM1ZzWkNBbklDdGNiaUFnSUNBZ0lDQWdKMjVsZG1WeUlHRmpZMlZ6Y3lCemIyMWxkR2hwYm1jZ2RHaGhkQ0J5WlhGMWFYSmxjeUJ6ZEdGc1pTQmtZWFJoSUdaeWIyMGdkR2hsSUhCeVpYWnBiM1Z6SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5jbVZ1WkdWeUxDQnpkV05vSUdGeklISmxabk11SUUxdmRtVWdkR2hwY3lCc2IyZHBZeUIwYnlCamIyMXdiMjVsYm5SRWFXUk5iM1Z1ZENCaGJtUWdKeUFyWEc0Z0lDQWdJQ0FnSUNkamIyMXdiMjVsYm5SRWFXUlZjR1JoZEdVZ2FXNXpkR1ZoWkM0bkxGeHVJQ0FnSUNBZ0lDQnZkMjVsY2k1blpYUk9ZVzFsS0NrZ2ZId2dKMEVnWTI5dGNHOXVaVzUwSjF4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJQ0FnYjNkdVpYSXVYM2RoY201bFpFRmliM1YwVW1WbWMwbHVVbVZ1WkdWeUlEMGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnYVdZZ0tHTnZiWEJ2Ym1WdWRFOXlSV3hsYldWdWRDQTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgxY2JpQWdhV1lnS0dselRtOWtaU2hqYjIxd2IyNWxiblJQY2tWc1pXMWxiblFwS1NCN1hHNGdJQ0FnY21WMGRYSnVJR052YlhCdmJtVnVkRTl5Uld4bGJXVnVkRHRjYmlBZ2ZWeHVJQ0JwWmlBb1VtVmhZM1JKYm5OMFlXNWpaVTFoY0M1b1lYTW9ZMjl0Y0c5dVpXNTBUM0pGYkdWdFpXNTBLU2tnZTF4dUlDQWdJSEpsZEhWeWJpQlNaV0ZqZEUxdmRXNTBMbWRsZEU1dlpHVkdjbTl0U1c1emRHRnVZMlVvWTI5dGNHOXVaVzUwVDNKRmJHVnRaVzUwS1R0Y2JpQWdmVnh1SUNBb1hDSndjbTlrZFdOMGFXOXVYQ0lnSVQwOUlIQnliMk5sYzNNdVpXNTJMazVQUkVWZlJVNVdJRDhnYVc1MllYSnBZVzUwS0Z4dUlDQWdJR052YlhCdmJtVnVkRTl5Uld4bGJXVnVkQzV5Wlc1a1pYSWdQVDBnYm5Wc2JDQjhmRnh1SUNBZ0lIUjVjR1Z2WmlCamIyMXdiMjVsYm5SUGNrVnNaVzFsYm5RdWNtVnVaR1Z5SUNFOVBTQW5ablZ1WTNScGIyNG5MRnh1SUNBZ0lDZERiMjF3YjI1bGJuUWdLSGRwZEdnZ2EyVjVjem9nSlhNcElHTnZiblJoYVc1eklHQnlaVzVrWlhKZ0lHMWxkR2h2WkNBbklDdGNiaUFnSUNBblluVjBJR2x6SUc1dmRDQnRiM1Z1ZEdWa0lHbHVJSFJvWlNCRVQwMG5MRnh1SUNBZ0lFOWlhbVZqZEM1clpYbHpLR052YlhCdmJtVnVkRTl5Uld4bGJXVnVkQ2xjYmlBZ0tTQTZJR2x1ZG1GeWFXRnVkQ2hqYjIxd2IyNWxiblJQY2tWc1pXMWxiblF1Y21WdVpHVnlJRDA5SUc1MWJHd2dmSHhjYmlBZ2RIbHdaVzltSUdOdmJYQnZibVZ1ZEU5eVJXeGxiV1Z1ZEM1eVpXNWtaWElnSVQwOUlDZG1kVzVqZEdsdmJpY3BLVHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0JtWVd4elpTeGNiaUFnSUNBblJXeGxiV1Z1ZENCaGNIQmxZWEp6SUhSdklHSmxJRzVsYVhSb1pYSWdVbVZoWTNSRGIyMXdiMjVsYm5RZ2JtOXlJRVJQVFU1dlpHVWdLR3RsZVhNNklDVnpLU2NzWEc0Z0lDQWdUMkpxWldOMExtdGxlWE1vWTI5dGNHOXVaVzUwVDNKRmJHVnRaVzUwS1Z4dUlDQXBJRG9nYVc1MllYSnBZVzUwS0daaGJITmxLU2s3WEc1OVhHNWNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdabWx1WkVSUFRVNXZaR1U3WEc0aVhYMD0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGZsYXR0ZW5DaGlsZHJlblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHRyYXZlcnNlQWxsQ2hpbGRyZW4gPSByZXF1aXJlKFwiLi90cmF2ZXJzZUFsbENoaWxkcmVuXCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHRyYXZlcnNlQ29udGV4dCBDb250ZXh0IHBhc3NlZCB0aHJvdWdoIHRyYXZlcnNhbC5cbiAqIEBwYXJhbSB7P1JlYWN0Q29tcG9uZW50fSBjaGlsZCBSZWFjdCBjaGlsZCBjb21wb25lbnQuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWUgU3RyaW5nIG5hbWUgb2Yga2V5IHBhdGggdG8gY2hpbGQuXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5TaW5nbGVDaGlsZEludG9Db250ZXh0KHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUpIHtcbiAgLy8gV2UgZm91bmQgYSBjb21wb25lbnQgaW5zdGFuY2UuXG4gIHZhciByZXN1bHQgPSB0cmF2ZXJzZUNvbnRleHQ7XG4gIHZhciBrZXlVbmlxdWUgPSAhcmVzdWx0Lmhhc093blByb3BlcnR5KG5hbWUpO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IHdhcm5pbmcoXG4gICAgICBrZXlVbmlxdWUsXG4gICAgICAnZmxhdHRlbkNoaWxkcmVuKC4uLik6IEVuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgJyArXG4gICAgICAnYCVzYC4gQ2hpbGQga2V5cyBtdXN0IGJlIHVuaXF1ZTsgd2hlbiB0d28gY2hpbGRyZW4gc2hhcmUgYSBrZXksIG9ubHkgJyArXG4gICAgICAndGhlIGZpcnN0IGNoaWxkIHdpbGwgYmUgdXNlZC4nLFxuICAgICAgbmFtZVxuICAgICkgOiBudWxsKTtcbiAgfVxuICBpZiAoa2V5VW5pcXVlICYmIGNoaWxkICE9IG51bGwpIHtcbiAgICByZXN1bHRbbmFtZV0gPSBjaGlsZDtcbiAgfVxufVxuXG4vKipcbiAqIEZsYXR0ZW5zIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC4gQW55IG51bGxcbiAqIGNoaWxkcmVuIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgb2JqZWN0LlxuICogQHJldHVybiB7IW9iamVjdH0gZmxhdHRlbmVkIGNoaWxkcmVuIGtleWVkIGJ5IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICB2YXIgcmVzdWx0ID0ge307XG4gIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZsYXR0ZW5TaW5nbGVDaGlsZEludG9Db250ZXh0LCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5DaGlsZHJlbjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdlpteGhkSFJsYmtOb2FXeGtjbVZ1TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJR1pzWVhSMFpXNURhR2xzWkhKbGJseHVJQ292WEc1Y2JpZDFjMlVnYzNSeWFXTjBKenRjYmx4dWRtRnlJSFJ5WVhabGNuTmxRV3hzUTJocGJHUnlaVzRnUFNCeVpYRjFhWEpsS0Z3aUxpOTBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVYQ0lwTzF4dWRtRnlJSGRoY201cGJtY2dQU0J5WlhGMWFYSmxLRndpTGk5M1lYSnVhVzVuWENJcE8xeHVYRzR2S2lwY2JpQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNTlJSFJ5WVhabGNuTmxRMjl1ZEdWNGRDQkRiMjUwWlhoMElIQmhjM05sWkNCMGFISnZkV2RvSUhSeVlYWmxjbk5oYkM1Y2JpQXFJRUJ3WVhKaGJTQjdQMUpsWVdOMFEyOXRjRzl1Wlc1MGZTQmphR2xzWkNCU1pXRmpkQ0JqYUdsc1pDQmpiMjF3YjI1bGJuUXVYRzRnS2lCQWNHRnlZVzBnZXlGemRISnBibWQ5SUc1aGJXVWdVM1J5YVc1bklHNWhiV1VnYjJZZ2EyVjVJSEJoZEdnZ2RHOGdZMmhwYkdRdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdac1lYUjBaVzVUYVc1bmJHVkRhR2xzWkVsdWRHOURiMjUwWlhoMEtIUnlZWFpsY25ObFEyOXVkR1Y0ZEN3Z1kyaHBiR1FzSUc1aGJXVXBJSHRjYmlBZ0x5OGdWMlVnWm05MWJtUWdZU0JqYjIxd2IyNWxiblFnYVc1emRHRnVZMlV1WEc0Z0lIWmhjaUJ5WlhOMWJIUWdQU0IwY21GMlpYSnpaVU52Ym5SbGVIUTdYRzRnSUhaaGNpQnJaWGxWYm1seGRXVWdQU0FoY21WemRXeDBMbWhoYzA5M2JsQnliM0JsY25SNUtHNWhiV1VwTzF4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUhkaGNtNXBibWNvWEc0Z0lDQWdJQ0JyWlhsVmJtbHhkV1VzWEc0Z0lDQWdJQ0FuWm14aGRIUmxia05vYVd4a2NtVnVLQzR1TGlrNklFVnVZMjkxYm5SbGNtVmtJSFIzYnlCamFHbHNaSEpsYmlCM2FYUm9JSFJvWlNCellXMWxJR3RsZVN3Z0p5QXJYRzRnSUNBZ0lDQW5ZQ1Z6WUM0Z1EyaHBiR1FnYTJWNWN5QnRkWE4wSUdKbElIVnVhWEYxWlRzZ2QyaGxiaUIwZDI4Z1kyaHBiR1J5Wlc0Z2MyaGhjbVVnWVNCclpYa3NJRzl1YkhrZ0p5QXJYRzRnSUNBZ0lDQW5kR2hsSUdacGNuTjBJR05vYVd4a0lIZHBiR3dnWW1VZ2RYTmxaQzRuTEZ4dUlDQWdJQ0FnYm1GdFpWeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdmVnh1SUNCcFppQW9hMlY1Vlc1cGNYVmxJQ1ltSUdOb2FXeGtJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQnlaWE4xYkhSYmJtRnRaVjBnUFNCamFHbHNaRHRjYmlBZ2ZWeHVmVnh1WEc0dktpcGNiaUFxSUVac1lYUjBaVzV6SUdOb2FXeGtjbVZ1SUhSb1lYUWdZWEpsSUhSNWNHbGpZV3hzZVNCemNHVmphV1pwWldRZ1lYTWdZSEJ5YjNCekxtTm9hV3hrY21WdVlDNGdRVzU1SUc1MWJHeGNiaUFxSUdOb2FXeGtjbVZ1SUhkcGJHd2dibTkwSUdKbElHbHVZMngxWkdWa0lHbHVJSFJvWlNCeVpYTjFiSFJwYm1jZ2IySnFaV04wTGx4dUlDb2dRSEpsZEhWeWJpQjdJVzlpYW1WamRIMGdabXhoZEhSbGJtVmtJR05vYVd4a2NtVnVJR3RsZVdWa0lHSjVJRzVoYldVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdac1lYUjBaVzVEYUdsc1pISmxiaWhqYUdsc1pISmxiaWtnZTF4dUlDQnBaaUFvWTJocGJHUnlaVzRnUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQmphR2xzWkhKbGJqdGNiaUFnZlZ4dUlDQjJZWElnY21WemRXeDBJRDBnZTMwN1hHNGdJSFJ5WVhabGNuTmxRV3hzUTJocGJHUnlaVzRvWTJocGJHUnlaVzRzSUdac1lYUjBaVzVUYVc1bmJHVkRhR2xzWkVsdWRHOURiMjUwWlhoMExDQnlaWE4xYkhRcE8xeHVJQ0J5WlhSMWNtNGdjbVZ6ZFd4ME8xeHVmVnh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUdac1lYUjBaVzVEYUdsc1pISmxianRjYmlKZGZRPT0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZm9jdXNOb2RlXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIGlucHV0L3RleHRhcmVhIHRvIGZvY3VzXG4gKi9cbmZ1bmN0aW9uIGZvY3VzTm9kZShub2RlKSB7XG4gIC8vIElFOCBjYW4gdGhyb3cgXCJDYW4ndCBtb3ZlIGZvY3VzIHRvIHRoZSBjb250cm9sIGJlY2F1c2UgaXQgaXMgaW52aXNpYmxlLFxuICAvLyBub3QgZW5hYmxlZCwgb3Igb2YgYSB0eXBlIHRoYXQgZG9lcyBub3QgYWNjZXB0IHRoZSBmb2N1cy5cIiBmb3IgYWxsIGtpbmRzIG9mXG4gIC8vIHJlYXNvbnMgdGhhdCBhcmUgdG9vIGV4cGVuc2l2ZSBhbmQgZnJhZ2lsZSB0byB0ZXN0LlxuICB0cnkge1xuICAgIG5vZGUuZm9jdXMoKTtcbiAgfSBjYXRjaChlKSB7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb2N1c05vZGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZm9yRWFjaEFjY3VtdWxhdGVkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7YXJyYXl9IGFuIFwiYWNjdW11bGF0aW9uXCIgb2YgaXRlbXMgd2hpY2ggaXMgZWl0aGVyIGFuIEFycmF5IG9yXG4gKiBhIHNpbmdsZSBpdGVtLiBVc2VmdWwgd2hlbiBwYWlyZWQgd2l0aCB0aGUgYGFjY3VtdWxhdGVgIG1vZHVsZS4gVGhpcyBpcyBhXG4gKiBzaW1wbGUgdXRpbGl0eSB0aGF0IGFsbG93cyB1cyB0byByZWFzb24gYWJvdXQgYSBjb2xsZWN0aW9uIG9mIGl0ZW1zLCBidXRcbiAqIGhhbmRsaW5nIHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgZXhhY3RseSBvbmUgaXRlbSAoYW5kIHdlIGRvIG5vdCBuZWVkIHRvXG4gKiBhbGxvY2F0ZSBhbiBhcnJheSkuXG4gKi9cbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSBmdW5jdGlvbihhcnIsIGNiLCBzY29wZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgYXJyLmZvckVhY2goY2IsIHNjb3BlKTtcbiAgfSBlbHNlIGlmIChhcnIpIHtcbiAgICBjYi5jYWxsKHNjb3BlLCBhcnIpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZvckVhY2hBY2N1bXVsYXRlZDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBnZXRBY3RpdmVFbGVtZW50XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbi8qKlxuICogU2FtZSBhcyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGJ1dCB3cmFwcyBpbiBhIHRyeS1jYXRjaCBibG9jay4gSW4gSUUgaXQgaXNcbiAqIG5vdCBzYWZlIHRvIGNhbGwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpZiB0aGVyZSBpcyBub3RoaW5nIGZvY3VzZWQuXG4gKlxuICogVGhlIGFjdGl2ZUVsZW1lbnQgd2lsbCBiZSBudWxsIG9ubHkgaWYgdGhlIGRvY3VtZW50IGJvZHkgaXMgbm90IHlldCBkZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KCkgLyo/RE9NRWxlbWVudCovIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBY3RpdmVFbGVtZW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldEV2ZW50Q2hhckNvZGVcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIGBjaGFyQ29kZWAgcmVwcmVzZW50cyB0aGUgYWN0dWFsIFwiY2hhcmFjdGVyIGNvZGVcIiBhbmQgaXMgc2FmZSB0byB1c2Ugd2l0aFxuICogYFN0cmluZy5mcm9tQ2hhckNvZGVgLiBBcyBzdWNoLCBvbmx5IGtleXMgdGhhdCBjb3JyZXNwb25kIHRvIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBwcm9kdWNlIGEgdmFsaWQgYGNoYXJDb2RlYCwgdGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgRW50ZXIuXG4gKiBUaGUgVGFiLWtleSBpcyBjb25zaWRlcmVkIG5vbi1wcmludGFibGUgYW5kIGRvZXMgbm90IGhhdmUgYSBgY2hhckNvZGVgLFxuICogcHJlc3VtYWJseSBiZWNhdXNlIGl0IGRvZXMgbm90IHByb2R1Y2UgYSB0YWItY2hhcmFjdGVyIGluIGJyb3dzZXJzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBgY2hhckNvZGVgIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBjaGFyQ29kZTtcbiAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuXG4gIGlmICgnY2hhckNvZGUnIGluIG5hdGl2ZUV2ZW50KSB7XG4gICAgY2hhckNvZGUgPSBuYXRpdmVFdmVudC5jaGFyQ29kZTtcblxuICAgIC8vIEZGIGRvZXMgbm90IHNldCBgY2hhckNvZGVgIGZvciB0aGUgRW50ZXIta2V5LCBjaGVjayBhZ2FpbnN0IGBrZXlDb2RlYC5cbiAgICBpZiAoY2hhckNvZGUgPT09IDAgJiYga2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIGNoYXJDb2RlID0gMTM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgYGNoYXJDb2RlYCwgYnV0IGBrZXlDb2RlYCBoYXMgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAgY2hhckNvZGUgPSBrZXlDb2RlO1xuICB9XG5cbiAgLy8gU29tZSBub24tcHJpbnRhYmxlIGtleXMgYXJlIHJlcG9ydGVkIGluIGBjaGFyQ29kZWAvYGtleUNvZGVgLCBkaXNjYXJkIHRoZW0uXG4gIC8vIE11c3Qgbm90IGRpc2NhcmQgdGhlIChub24tKXByaW50YWJsZSBFbnRlci1rZXkuXG4gIGlmIChjaGFyQ29kZSA+PSAzMiB8fCBjaGFyQ29kZSA9PT0gMTMpIHtcbiAgICByZXR1cm4gY2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRFdmVudENoYXJDb2RlO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldEV2ZW50S2V5XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGdldEV2ZW50Q2hhckNvZGUgPSByZXF1aXJlKFwiLi9nZXRFdmVudENoYXJDb2RlXCIpO1xuXG4vKipcbiAqIE5vcm1hbGl6YXRpb24gb2YgZGVwcmVjYXRlZCBIVE1MNSBga2V5YCB2YWx1ZXNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gICdFc2MnOiAnRXNjYXBlJyxcbiAgJ1NwYWNlYmFyJzogJyAnLFxuICAnTGVmdCc6ICdBcnJvd0xlZnQnLFxuICAnVXAnOiAnQXJyb3dVcCcsXG4gICdSaWdodCc6ICdBcnJvd1JpZ2h0JyxcbiAgJ0Rvd24nOiAnQXJyb3dEb3duJyxcbiAgJ0RlbCc6ICdEZWxldGUnLFxuICAnV2luJzogJ09TJyxcbiAgJ01lbnUnOiAnQ29udGV4dE1lbnUnLFxuICAnQXBwcyc6ICdDb250ZXh0TWVudScsXG4gICdTY3JvbGwnOiAnU2Nyb2xsTG9jaycsXG4gICdNb3pQcmludGFibGVLZXknOiAnVW5pZGVudGlmaWVkJ1xufTtcblxuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIGxlZ2FjeSBga2V5Q29kZWAgdG8gSFRNTDUgYGtleWBcbiAqIE9ubHkgc3BlY2lhbCBrZXlzIHN1cHBvcnRlZCwgYWxsIG90aGVycyBkZXBlbmQgb24ga2V5Ym9hcmQgbGF5b3V0IG9yIGJyb3dzZXJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgODogJ0JhY2tzcGFjZScsXG4gIDk6ICdUYWInLFxuICAxMjogJ0NsZWFyJyxcbiAgMTM6ICdFbnRlcicsXG4gIDE2OiAnU2hpZnQnLFxuICAxNzogJ0NvbnRyb2wnLFxuICAxODogJ0FsdCcsXG4gIDE5OiAnUGF1c2UnLFxuICAyMDogJ0NhcHNMb2NrJyxcbiAgMjc6ICdFc2NhcGUnLFxuICAzMjogJyAnLFxuICAzMzogJ1BhZ2VVcCcsXG4gIDM0OiAnUGFnZURvd24nLFxuICAzNTogJ0VuZCcsXG4gIDM2OiAnSG9tZScsXG4gIDM3OiAnQXJyb3dMZWZ0JyxcbiAgMzg6ICdBcnJvd1VwJyxcbiAgMzk6ICdBcnJvd1JpZ2h0JyxcbiAgNDA6ICdBcnJvd0Rvd24nLFxuICA0NTogJ0luc2VydCcsXG4gIDQ2OiAnRGVsZXRlJyxcbiAgMTEyOiAnRjEnLCAxMTM6ICdGMicsIDExNDogJ0YzJywgMTE1OiAnRjQnLCAxMTY6ICdGNScsIDExNzogJ0Y2JyxcbiAgMTE4OiAnRjcnLCAxMTk6ICdGOCcsIDEyMDogJ0Y5JywgMTIxOiAnRjEwJywgMTIyOiAnRjExJywgMTIzOiAnRjEyJyxcbiAgMTQ0OiAnTnVtTG9jaycsXG4gIDE0NTogJ1Njcm9sbExvY2snLFxuICAyMjQ6ICdNZXRhJ1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgYGtleWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG5cbiAgICAvLyBGaXJlRm94IGltcGxlbWVudHMgYGtleWAgYnV0IHJldHVybnMgYE1velByaW50YWJsZUtleWAgZm9yIGFsbFxuICAgIC8vIHByaW50YWJsZSBjaGFyYWN0ZXJzIChub3JtYWxpemVkIHRvIGBVbmlkZW50aWZpZWRgKSwgaWdub3JlIGl0LlxuICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXlbbmF0aXZlRXZlbnQua2V5XSB8fCBuYXRpdmVFdmVudC5rZXk7XG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG5cbiAgLy8gQnJvd3NlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGtleWAsIHBvbHlmaWxsIGFzIG11Y2ggb2YgaXQgYXMgd2UgY2FuLlxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgIHZhciBjaGFyQ29kZSA9IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpO1xuXG4gICAgLy8gVGhlIGVudGVyLWtleSBpcyB0ZWNobmljYWxseSBib3RoIHByaW50YWJsZSBhbmQgbm9uLXByaW50YWJsZSBhbmQgY2FuXG4gICAgLy8gdGh1cyBiZSBjYXB0dXJlZCBieSBga2V5cHJlc3NgLCBubyBvdGhlciBub24tcHJpbnRhYmxlIGtleSBzaG91bGQuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAvLyBXaGlsZSB1c2VyIGtleWJvYXJkIGxheW91dCBkZXRlcm1pbmVzIHRoZSBhY3R1YWwgbWVhbmluZyBvZiBlYWNoXG4gICAgLy8gYGtleUNvZGVgIHZhbHVlLCBhbG1vc3QgYWxsIGZ1bmN0aW9uIGtleXMgaGF2ZSBhIHVuaXZlcnNhbCB2YWx1ZS5cbiAgICByZXR1cm4gdHJhbnNsYXRlVG9LZXlbbmF0aXZlRXZlbnQua2V5Q29kZV0gfHwgJ1VuaWRlbnRpZmllZCc7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEV2ZW50S2V5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICAnQWx0JzogJ2FsdEtleScsXG4gICdDb250cm9sJzogJ2N0cmxLZXknLFxuICAnTWV0YSc6ICdtZXRhS2V5JyxcbiAgJ1NoaWZ0JzogJ3NoaWZ0S2V5J1xufTtcblxuLy8gSUU4IGRvZXMgbm90IGltcGxlbWVudCBnZXRNb2RpZmllclN0YXRlIHNvIHdlIHNpbXBseSBtYXAgaXQgdG8gdGhlIG9ubHlcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQgaXRzZWxmLCBkb2VzIG5vdCBzdXBwb3J0IExvY2sta2V5cy5cbi8vIEN1cnJlbnRseSwgYWxsIG1ham9yIGJyb3dzZXJzIGV4Y2VwdCBDaHJvbWUgc2VlbXMgdG8gc3VwcG9ydCBMb2NrLWtleXMuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcbiAgaWYgKG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUpIHtcbiAgICByZXR1cm4gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpO1xuICB9XG4gIHZhciBrZXlQcm9wID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXTtcbiAgcmV0dXJuIGtleVByb3AgPyAhIW5hdGl2ZUV2ZW50W2tleVByb3BdIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRFdmVudE1vZGlmaWVyU3RhdGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0RXZlbnRUYXJnZXRcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93O1xuICAvLyBTYWZhcmkgbWF5IGZpcmUgZXZlbnRzIG9uIHRleHQgbm9kZXMgKE5vZGUuVEVYVF9OT0RFIGlzIDMpLlxuICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxuICByZXR1cm4gdGFyZ2V0Lm5vZGVUeXBlID09PSAzID8gdGFyZ2V0LnBhcmVudE5vZGUgOiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRUYXJnZXQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0SXRlcmF0b3JGblxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbnZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAqXG4gKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAqXG4gKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gKiAgICAgICAuLi5cbiAqICAgICB9XG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKFxuICAgIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKVxuICApO1xuICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yRm47XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldE1hcmt1cFdyYXBcbiAqL1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcblxuLyoqXG4gKiBEdW1teSBjb250YWluZXIgdXNlZCB0byBkZXRlY3Qgd2hpY2ggd3JhcHMgYXJlIG5lY2Vzc2FyeS5cbiAqL1xudmFyIGR1bW15Tm9kZSA9XG4gIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIDogbnVsbDtcblxuLyoqXG4gKiBTb21lIGJyb3dzZXJzIGNhbm5vdCB1c2UgYGlubmVySFRNTGAgdG8gcmVuZGVyIGNlcnRhaW4gZWxlbWVudHMgc3RhbmRhbG9uZSxcbiAqIHNvIHdlIHdyYXAgdGhlbSwgcmVuZGVyIHRoZSB3cmFwcGVkIG5vZGVzLCB0aGVuIGV4dHJhY3QgdGhlIGRlc2lyZWQgbm9kZS5cbiAqXG4gKiBJbiBJRTgsIGNlcnRhaW4gZWxlbWVudHMgY2Fubm90IHJlbmRlciBhbG9uZSwgc28gd3JhcCBhbGwgZWxlbWVudHMgKCcqJykuXG4gKi9cbnZhciBzaG91bGRXcmFwID0ge1xuICAvLyBGb3JjZSB3cmFwcGluZyBmb3IgU1ZHIGVsZW1lbnRzIGJlY2F1c2UgaWYgdGhleSBnZXQgY3JlYXRlZCBpbnNpZGUgYSA8ZGl2PixcbiAgLy8gdGhleSB3aWxsIGJlIGluaXRpYWxpemVkIGluIHRoZSB3cm9uZyBuYW1lc3BhY2UgKGFuZCB3aWxsIG5vdCBkaXNwbGF5KS5cbiAgJ2NpcmNsZSc6IHRydWUsXG4gICdjbGlwUGF0aCc6IHRydWUsXG4gICdkZWZzJzogdHJ1ZSxcbiAgJ2VsbGlwc2UnOiB0cnVlLFxuICAnZyc6IHRydWUsXG4gICdsaW5lJzogdHJ1ZSxcbiAgJ2xpbmVhckdyYWRpZW50JzogdHJ1ZSxcbiAgJ3BhdGgnOiB0cnVlLFxuICAncG9seWdvbic6IHRydWUsXG4gICdwb2x5bGluZSc6IHRydWUsXG4gICdyYWRpYWxHcmFkaWVudCc6IHRydWUsXG4gICdyZWN0JzogdHJ1ZSxcbiAgJ3N0b3AnOiB0cnVlLFxuICAndGV4dCc6IHRydWVcbn07XG5cbnZhciBzZWxlY3RXcmFwID0gWzEsICc8c2VsZWN0IG11bHRpcGxlPVwidHJ1ZVwiPicsICc8L3NlbGVjdD4nXTtcbnZhciB0YWJsZVdyYXAgPSBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXTtcbnZhciB0cldyYXAgPSBbMywgJzx0YWJsZT48dGJvZHk+PHRyPicsICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nXTtcblxudmFyIHN2Z1dyYXAgPSBbMSwgJzxzdmc+JywgJzwvc3ZnPiddO1xuXG52YXIgbWFya3VwV3JhcCA9IHtcbiAgJyonOiBbMSwgJz88ZGl2PicsICc8L2Rpdj4nXSxcblxuICAnYXJlYSc6IFsxLCAnPG1hcD4nLCAnPC9tYXA+J10sXG4gICdjb2wnOiBbMiwgJzx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+JywgJzwvY29sZ3JvdXA+PC90YWJsZT4nXSxcbiAgJ2xlZ2VuZCc6IFsxLCAnPGZpZWxkc2V0PicsICc8L2ZpZWxkc2V0PiddLFxuICAncGFyYW0nOiBbMSwgJzxvYmplY3Q+JywgJzwvb2JqZWN0PiddLFxuICAndHInOiBbMiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblxuICAnb3B0Z3JvdXAnOiBzZWxlY3RXcmFwLFxuICAnb3B0aW9uJzogc2VsZWN0V3JhcCxcblxuICAnY2FwdGlvbic6IHRhYmxlV3JhcCxcbiAgJ2NvbGdyb3VwJzogdGFibGVXcmFwLFxuICAndGJvZHknOiB0YWJsZVdyYXAsXG4gICd0Zm9vdCc6IHRhYmxlV3JhcCxcbiAgJ3RoZWFkJzogdGFibGVXcmFwLFxuXG4gICd0ZCc6IHRyV3JhcCxcbiAgJ3RoJzogdHJXcmFwLFxuXG4gICdjaXJjbGUnOiBzdmdXcmFwLFxuICAnY2xpcFBhdGgnOiBzdmdXcmFwLFxuICAnZGVmcyc6IHN2Z1dyYXAsXG4gICdlbGxpcHNlJzogc3ZnV3JhcCxcbiAgJ2cnOiBzdmdXcmFwLFxuICAnbGluZSc6IHN2Z1dyYXAsXG4gICdsaW5lYXJHcmFkaWVudCc6IHN2Z1dyYXAsXG4gICdwYXRoJzogc3ZnV3JhcCxcbiAgJ3BvbHlnb24nOiBzdmdXcmFwLFxuICAncG9seWxpbmUnOiBzdmdXcmFwLFxuICAncmFkaWFsR3JhZGllbnQnOiBzdmdXcmFwLFxuICAncmVjdCc6IHN2Z1dyYXAsXG4gICdzdG9wJzogc3ZnV3JhcCxcbiAgJ3RleHQnOiBzdmdXcmFwXG59O1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcmt1cCB3cmFwIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdXBwbGllZCBgbm9kZU5hbWVgLlxuICpcbiAqIE5PVEU6IFRoaXMgbGF6aWx5IGRldGVjdHMgd2hpY2ggd3JhcHMgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlIGN1cnJlbnQgYnJvd3Nlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9kZU5hbWUgTG93ZXJjYXNlIGBub2RlTmFtZWAuXG4gKiBAcmV0dXJuIHs/YXJyYXl9IE1hcmt1cCB3cmFwIGNvbmZpZ3VyYXRpb24sIGlmIGFwcGxpY2FibGUuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcmt1cFdyYXAobm9kZU5hbWUpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudCghIWR1bW15Tm9kZSwgJ01hcmt1cCB3cmFwcGluZyBub2RlIG5vdCBpbml0aWFsaXplZCcpIDogaW52YXJpYW50KCEhZHVtbXlOb2RlKSk7XG4gIGlmICghbWFya3VwV3JhcC5oYXNPd25Qcm9wZXJ0eShub2RlTmFtZSkpIHtcbiAgICBub2RlTmFtZSA9ICcqJztcbiAgfVxuICBpZiAoIXNob3VsZFdyYXAuaGFzT3duUHJvcGVydHkobm9kZU5hbWUpKSB7XG4gICAgaWYgKG5vZGVOYW1lID09PSAnKicpIHtcbiAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSAnPGxpbmsgLz4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdW1teU5vZGUuaW5uZXJIVE1MID0gJzwnICsgbm9kZU5hbWUgKyAnPjwvJyArIG5vZGVOYW1lICsgJz4nO1xuICAgIH1cbiAgICBzaG91bGRXcmFwW25vZGVOYW1lXSA9ICFkdW1teU5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuICByZXR1cm4gc2hvdWxkV3JhcFtub2RlTmFtZV0gPyBtYXJrdXBXcmFwW25vZGVOYW1lXSA6IG51bGw7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXJrdXBXcmFwO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2WjJWMFRXRnlhM1Z3VjNKaGNDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkRiM0I1Y21sbmFIUWdNakF4TXkweU1ERTFMQ0JHWVdObFltOXZheXdnU1c1akxseHVJQ29nUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM1Y2JpQXFYRzRnS2lCVWFHbHpJSE52ZFhKalpTQmpiMlJsSUdseklHeHBZMlZ1YzJWa0lIVnVaR1Z5SUhSb1pTQkNVMFF0YzNSNWJHVWdiR2xqWlc1elpTQm1iM1Z1WkNCcGJpQjBhR1ZjYmlBcUlFeEpRMFZPVTBVZ1ptbHNaU0JwYmlCMGFHVWdjbTl2ZENCa2FYSmxZM1J2Y25rZ2IyWWdkR2hwY3lCemIzVnlZMlVnZEhKbFpTNGdRVzRnWVdSa2FYUnBiMjVoYkNCbmNtRnVkRnh1SUNvZ2IyWWdjR0YwWlc1MElISnBaMmgwY3lCallXNGdZbVVnWm05MWJtUWdhVzRnZEdobElGQkJWRVZPVkZNZ1ptbHNaU0JwYmlCMGFHVWdjMkZ0WlNCa2FYSmxZM1J2Y25rdVhHNGdLbHh1SUNvZ1FIQnliM1pwWkdWelRXOWtkV3hsSUdkbGRFMWhjbXQxY0ZkeVlYQmNiaUFxTDF4dVhHNTJZWElnUlhobFkzVjBhVzl1Ulc1MmFYSnZibTFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlGZUdWamRYUnBiMjVGYm5acGNtOXViV1Z1ZEZ3aUtUdGNibHh1ZG1GeUlHbHVkbUZ5YVdGdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDJsdWRtRnlhV0Z1ZEZ3aUtUdGNibHh1THlvcVhHNGdLaUJFZFcxdGVTQmpiMjUwWVdsdVpYSWdkWE5sWkNCMGJ5QmtaWFJsWTNRZ2QyaHBZMmdnZDNKaGNITWdZWEpsSUc1bFkyVnpjMkZ5ZVM1Y2JpQXFMMXh1ZG1GeUlHUjFiVzE1VG05a1pTQTlYRzRnSUVWNFpXTjFkR2x2YmtWdWRtbHliMjV0Wlc1MExtTmhibFZ6WlVSUFRTQS9JR1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb0oyUnBkaWNwSURvZ2JuVnNiRHRjYmx4dUx5b3FYRzRnS2lCVGIyMWxJR0p5YjNkelpYSnpJR05oYm01dmRDQjFjMlVnWUdsdWJtVnlTRlJOVEdBZ2RHOGdjbVZ1WkdWeUlHTmxjblJoYVc0Z1pXeGxiV1Z1ZEhNZ2MzUmhibVJoYkc5dVpTeGNiaUFxSUhOdklIZGxJSGR5WVhBZ2RHaGxiU3dnY21WdVpHVnlJSFJvWlNCM2NtRndjR1ZrSUc1dlpHVnpMQ0IwYUdWdUlHVjRkSEpoWTNRZ2RHaGxJR1JsYzJseVpXUWdibTlrWlM1Y2JpQXFYRzRnS2lCSmJpQkpSVGdzSUdObGNuUmhhVzRnWld4bGJXVnVkSE1nWTJGdWJtOTBJSEpsYm1SbGNpQmhiRzl1WlN3Z2MyOGdkM0poY0NCaGJHd2daV3hsYldWdWRITWdLQ2NxSnlrdVhHNGdLaTljYm5aaGNpQnphRzkxYkdSWGNtRndJRDBnZTF4dUlDQXZMeUJHYjNKalpTQjNjbUZ3Y0dsdVp5Qm1iM0lnVTFaSElHVnNaVzFsYm5SeklHSmxZMkYxYzJVZ2FXWWdkR2hsZVNCblpYUWdZM0psWVhSbFpDQnBibk5wWkdVZ1lTQThaR2wyUGl4Y2JpQWdMeThnZEdobGVTQjNhV3hzSUdKbElHbHVhWFJwWVd4cGVtVmtJR2x1SUhSb1pTQjNjbTl1WnlCdVlXMWxjM0JoWTJVZ0tHRnVaQ0IzYVd4c0lHNXZkQ0JrYVhOd2JHRjVLUzVjYmlBZ0oyTnBjbU5zWlNjNklIUnlkV1VzWEc0Z0lDZGpiR2x3VUdGMGFDYzZJSFJ5ZFdVc1hHNGdJQ2RrWldaekp6b2dkSEoxWlN4Y2JpQWdKMlZzYkdsd2MyVW5PaUIwY25WbExGeHVJQ0FuWnljNklIUnlkV1VzWEc0Z0lDZHNhVzVsSnpvZ2RISjFaU3hjYmlBZ0oyeHBibVZoY2tkeVlXUnBaVzUwSnpvZ2RISjFaU3hjYmlBZ0ozQmhkR2duT2lCMGNuVmxMRnh1SUNBbmNHOXNlV2R2YmljNklIUnlkV1VzWEc0Z0lDZHdiMng1YkdsdVpTYzZJSFJ5ZFdVc1hHNGdJQ2R5WVdScFlXeEhjbUZrYVdWdWRDYzZJSFJ5ZFdVc1hHNGdJQ2R5WldOMEp6b2dkSEoxWlN4Y2JpQWdKM04wYjNBbk9pQjBjblZsTEZ4dUlDQW5kR1Y0ZENjNklIUnlkV1ZjYm4wN1hHNWNiblpoY2lCelpXeGxZM1JYY21Gd0lEMGdXekVzSUNjOGMyVnNaV04wSUcxMWJIUnBjR3hsUFZ3aWRISjFaVndpUGljc0lDYzhMM05sYkdWamRENG5YVHRjYm5aaGNpQjBZV0pzWlZkeVlYQWdQU0JiTVN3Z0p6eDBZV0pzWlQ0bkxDQW5QQzkwWVdKc1pUNG5YVHRjYm5aaGNpQjBjbGR5WVhBZ1BTQmJNeXdnSnp4MFlXSnNaVDQ4ZEdKdlpIaytQSFJ5UGljc0lDYzhMM1J5UGp3dmRHSnZaSGsrUEM5MFlXSnNaVDRuWFR0Y2JseHVkbUZ5SUhOMloxZHlZWEFnUFNCYk1Td2dKenh6ZG1jK0p5d2dKend2YzNablBpZGRPMXh1WEc1MllYSWdiV0Z5YTNWd1YzSmhjQ0E5SUh0Y2JpQWdKeW9uT2lCYk1Td2dKejg4WkdsMlBpY3NJQ2M4TDJScGRqNG5YU3hjYmx4dUlDQW5ZWEpsWVNjNklGc3hMQ0FuUEcxaGNENG5MQ0FuUEM5dFlYQStKMTBzWEc0Z0lDZGpiMnduT2lCYk1pd2dKengwWVdKc1pUNDhkR0p2WkhrK1BDOTBZbTlrZVQ0OFkyOXNaM0p2ZFhBK0p5d2dKend2WTI5c1ozSnZkWEErUEM5MFlXSnNaVDRuWFN4Y2JpQWdKMnhsWjJWdVpDYzZJRnN4TENBblBHWnBaV3hrYzJWMFBpY3NJQ2M4TDJacFpXeGtjMlYwUGlkZExGeHVJQ0FuY0dGeVlXMG5PaUJiTVN3Z0p6eHZZbXBsWTNRK0p5d2dKend2YjJKcVpXTjBQaWRkTEZ4dUlDQW5kSEluT2lCYk1pd2dKengwWVdKc1pUNDhkR0p2WkhrK0p5d2dKend2ZEdKdlpIaytQQzkwWVdKc1pUNG5YU3hjYmx4dUlDQW5iM0IwWjNKdmRYQW5PaUJ6Wld4bFkzUlhjbUZ3TEZ4dUlDQW5iM0IwYVc5dUp6b2djMlZzWldOMFYzSmhjQ3hjYmx4dUlDQW5ZMkZ3ZEdsdmJpYzZJSFJoWW14bFYzSmhjQ3hjYmlBZ0oyTnZiR2R5YjNWd0p6b2dkR0ZpYkdWWGNtRndMRnh1SUNBbmRHSnZaSGtuT2lCMFlXSnNaVmR5WVhBc1hHNGdJQ2QwWm05dmRDYzZJSFJoWW14bFYzSmhjQ3hjYmlBZ0ozUm9aV0ZrSnpvZ2RHRmliR1ZYY21Gd0xGeHVYRzRnSUNkMFpDYzZJSFJ5VjNKaGNDeGNiaUFnSjNSb0p6b2dkSEpYY21Gd0xGeHVYRzRnSUNkamFYSmpiR1VuT2lCemRtZFhjbUZ3TEZ4dUlDQW5ZMnhwY0ZCaGRHZ25PaUJ6ZG1kWGNtRndMRnh1SUNBblpHVm1jeWM2SUhOMloxZHlZWEFzWEc0Z0lDZGxiR3hwY0hObEp6b2djM1puVjNKaGNDeGNiaUFnSjJjbk9pQnpkbWRYY21Gd0xGeHVJQ0FuYkdsdVpTYzZJSE4yWjFkeVlYQXNYRzRnSUNkc2FXNWxZWEpIY21Ga2FXVnVkQ2M2SUhOMloxZHlZWEFzWEc0Z0lDZHdZWFJvSnpvZ2MzWm5WM0poY0N4Y2JpQWdKM0J2YkhsbmIyNG5PaUJ6ZG1kWGNtRndMRnh1SUNBbmNHOXNlV3hwYm1Vbk9pQnpkbWRYY21Gd0xGeHVJQ0FuY21Ga2FXRnNSM0poWkdsbGJuUW5PaUJ6ZG1kWGNtRndMRnh1SUNBbmNtVmpkQ2M2SUhOMloxZHlZWEFzWEc0Z0lDZHpkRzl3SnpvZ2MzWm5WM0poY0N4Y2JpQWdKM1JsZUhRbk9pQnpkbWRYY21Gd1hHNTlPMXh1WEc0dktpcGNiaUFxSUVkbGRITWdkR2hsSUcxaGNtdDFjQ0IzY21Gd0lHTnZibVpwWjNWeVlYUnBiMjRnWm05eUlIUm9aU0J6ZFhCd2JHbGxaQ0JnYm05a1pVNWhiV1ZnTGx4dUlDcGNiaUFxSUU1UFZFVTZJRlJvYVhNZ2JHRjZhV3g1SUdSbGRHVmpkSE1nZDJocFkyZ2dkM0poY0hNZ1lYSmxJRzVsWTJWemMyRnllU0JtYjNJZ2RHaGxJR04xY25KbGJuUWdZbkp2ZDNObGNpNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2JtOWtaVTVoYldVZ1RHOTNaWEpqWVhObElHQnViMlJsVG1GdFpXQXVYRzRnS2lCQWNtVjBkWEp1SUhzL1lYSnlZWGw5SUUxaGNtdDFjQ0IzY21Gd0lHTnZibVpwWjNWeVlYUnBiMjRzSUdsbUlHRndjR3hwWTJGaWJHVXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlHZGxkRTFoY210MWNGZHlZWEFvYm05a1pVNWhiV1VwSUh0Y2JpQWdLRndpY0hKdlpIVmpkR2x2Ymx3aUlDRTlQU0J3Y205alpYTnpMbVZ1ZGk1T1QwUkZYMFZPVmlBL0lHbHVkbUZ5YVdGdWRDZ2hJV1IxYlcxNVRtOWtaU3dnSjAxaGNtdDFjQ0IzY21Gd2NHbHVaeUJ1YjJSbElHNXZkQ0JwYm1sMGFXRnNhWHBsWkNjcElEb2dhVzUyWVhKcFlXNTBLQ0VoWkhWdGJYbE9iMlJsS1NrN1hHNGdJR2xtSUNnaGJXRnlhM1Z3VjNKaGNDNW9ZWE5QZDI1UWNtOXdaWEowZVNodWIyUmxUbUZ0WlNrcElIdGNiaUFnSUNCdWIyUmxUbUZ0WlNBOUlDY3FKenRjYmlBZ2ZWeHVJQ0JwWmlBb0lYTm9iM1ZzWkZkeVlYQXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2JtOWtaVTVoYldVcEtTQjdYRzRnSUNBZ2FXWWdLRzV2WkdWT1lXMWxJRDA5UFNBbktpY3BJSHRjYmlBZ0lDQWdJR1IxYlcxNVRtOWtaUzVwYm01bGNraFVUVXdnUFNBblBHeHBibXNnTHo0bk8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JrZFcxdGVVNXZaR1V1YVc1dVpYSklWRTFNSUQwZ0p6d25JQ3NnYm05a1pVNWhiV1VnS3lBblBqd3ZKeUFySUc1dlpHVk9ZVzFsSUNzZ0p6NG5PMXh1SUNBZ0lIMWNiaUFnSUNCemFHOTFiR1JYY21Gd1cyNXZaR1ZPWVcxbFhTQTlJQ0ZrZFcxdGVVNXZaR1V1Wm1seWMzUkRhR2xzWkR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYzJodmRXeGtWM0poY0Z0dWIyUmxUbUZ0WlYwZ1B5QnRZWEpyZFhCWGNtRndXMjV2WkdWT1lXMWxYU0E2SUc1MWJHdzdYRzU5WEc1Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQm5aWFJOWVhKcmRYQlhjbUZ3TzF4dUlsMTkiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBHaXZlbiBhbnkgbm9kZSByZXR1cm4gdGhlIGZpcnN0IGxlYWYgbm9kZSB3aXRob3V0IGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHJldHVybiB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICBub2RlID0gbm9kZS5maXJzdENoaWxkO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbmV4dCBzaWJsaW5nIHdpdGhpbiBhIGNvbnRhaW5lci4gVGhpcyB3aWxsIHdhbGsgdXAgdGhlXG4gKiBET00gaWYgYSBub2RlJ3Mgc2libGluZ3MgaGF2ZSBiZWVuIGV4aGF1c3RlZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5mdW5jdGlvbiBnZXRTaWJsaW5nTm9kZShub2RlKSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG59XG5cbi8qKlxuICogR2V0IG9iamVjdCBkZXNjcmliaW5nIHRoZSBub2RlcyB3aGljaCBjb250YWluIGNoYXJhY3RlcnMgYXQgb2Zmc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gcm9vdFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICBub2RlRW5kID0gbm9kZVN0YXJ0ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG5cbiAgICAgIGlmIChub2RlU3RhcnQgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldCAtIG5vZGVTdGFydFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBub2RlU3RhcnQgPSBub2RlRW5kO1xuICAgIH1cblxuICAgIG5vZGUgPSBnZXRMZWFmTm9kZShnZXRTaWJsaW5nTm9kZShub2RlKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lclxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPQ19OT0RFX1RZUEUgPSA5O1xuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01Eb2N1bWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRoYXQgbWF5IGNvbnRhaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgUmVhY3QgY29tcG9uZW50XG4gKiBAcmV0dXJuIHs/Kn0gRE9NIGVsZW1lbnQgdGhhdCBtYXkgaGF2ZSB0aGUgcmVhY3RSb290IElELCBvciBudWxsLlxuICovXG5mdW5jdGlvbiBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5kb2N1bWVudEVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5maXJzdENoaWxkO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGdldFRleHRDb250ZW50QWNjZXNzb3JcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoXCIuL0V4ZWN1dGlvbkVudmlyb25tZW50XCIpO1xuXG52YXIgY29udGVudEtleSA9IG51bGw7XG5cbi8qKlxuICogR2V0cyB0aGUga2V5IHVzZWQgdG8gYWNjZXNzIHRleHQgY29udGVudCBvbiBhIERPTSBub2RlLlxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IEtleSB1c2VkIHRvIGFjY2VzcyB0ZXh0IGNvbnRlbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcigpIHtcbiAgaWYgKCFjb250ZW50S2V5ICYmIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAgIC8vIFByZWZlciB0ZXh0Q29udGVudCB0byBpbm5lclRleHQgYmVjYXVzZSBtYW55IGJyb3dzZXJzIHN1cHBvcnQgYm90aCBidXRcbiAgICAvLyBTVkcgPHRleHQ+IGVsZW1lbnRzIGRvbid0IHN1cHBvcnQgaW5uZXJUZXh0IGV2ZW4gd2hlbiA8ZGl2PiBkb2VzLlxuICAgIGNvbnRlbnRLZXkgPSAndGV4dENvbnRlbnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/XG4gICAgICAndGV4dENvbnRlbnQnIDpcbiAgICAgICdpbm5lclRleHQnO1xuICB9XG4gIHJldHVybiBjb250ZW50S2V5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRleHRDb250ZW50QWNjZXNzb3I7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb25cbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogR2V0cyB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBzdXBwbGllZCBlbGVtZW50IG9yIHdpbmRvdy5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlcyBhcmUgdW5ib3VuZGVkLCB1bmxpa2UgYGdldFNjcm9sbFBvc2l0aW9uYC4gVGhpcyBtZWFucyB0aGV5XG4gKiBtYXkgYmUgbmVnYXRpdmUgb3IgZXhjZWVkIHRoZSBlbGVtZW50IGJvdW5kYXJpZXMgKHdoaWNoIGlzIHBvc3NpYmxlIHVzaW5nXG4gKiBpbmVydGlhbCBzY3JvbGxpbmcpLlxuICpcbiAqIEBwYXJhbSB7RE9NV2luZG93fERPTUVsZW1lbnR9IHNjcm9sbGFibGVcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwIHdpdGggYHhgIGFuZCBgeWAga2V5cy5cbiAqL1xuZnVuY3Rpb24gZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsYWJsZSkge1xuICBpZiAoc2Nyb2xsYWJsZSA9PT0gd2luZG93KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHk6IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHNjcm9sbGFibGUuc2Nyb2xsTGVmdCxcbiAgICB5OiBzY3JvbGxhYmxlLnNjcm9sbFRvcFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGh5cGhlbmF0ZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgX3VwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nO1xuXG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIHN0cmluZywgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGh5cGhlbmF0ZSgnYmFja2dyb3VuZENvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmQtY29sb3JcIlxuICpcbiAqIEZvciBDU1Mgc3R5bGUgbmFtZXMsIHVzZSBgaHlwaGVuYXRlU3R5bGVOYW1lYCBpbnN0ZWFkIHdoaWNoIHdvcmtzIHByb3Blcmx5XG4gKiB3aXRoIGFsbCB2ZW5kb3IgcHJlZml4ZXMsIGluY2x1ZGluZyBgbXNgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaHlwaGVuYXRlKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoX3VwcGVyY2FzZVBhdHRlcm4sICctJDEnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGh5cGhlbmF0ZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBoeXBoZW5hdGVTdHlsZU5hbWVcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBoeXBoZW5hdGUgPSByZXF1aXJlKFwiLi9oeXBoZW5hdGVcIik7XG5cbnZhciBtc1BhdHRlcm4gPSAvXm1zLS87XG5cbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8vbW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gYC1tcy1gLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVOYW1lKHN0cmluZykge1xuICByZXR1cm4gaHlwaGVuYXRlKHN0cmluZykucmVwbGFjZShtc1BhdHRlcm4sICctbXMtJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaHlwaGVuYXRlU3R5bGVOYW1lO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50ID0gcmVxdWlyZShcIi4vUmVhY3RDb21wb3NpdGVDb21wb25lbnRcIik7XG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RW1wdHlDb21wb25lbnRcIik7XG52YXIgUmVhY3ROYXRpdmVDb21wb25lbnQgPSByZXF1aXJlKFwiLi9SZWFjdE5hdGl2ZUNvbXBvbmVudFwiKTtcblxudmFyIGFzc2lnbiA9IHJlcXVpcmUoXCIuL09iamVjdC5hc3NpZ25cIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKFwiLi93YXJuaW5nXCIpO1xuXG4vLyBUbyBhdm9pZCBhIGN5Y2xpYyBkZXBlbmRlbmN5LCB3ZSBjcmVhdGUgdGhlIGZpbmFsIGNsYXNzIGluIHRoaXMgbW9kdWxlXG52YXIgUmVhY3RDb21wb3NpdGVDb21wb25lbnRXcmFwcGVyID0gZnVuY3Rpb24oKSB7IH07XG5hc3NpZ24oXG4gIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlci5wcm90b3R5cGUsXG4gIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Lk1peGluLFxuICB7XG4gICAgX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnRcbiAgfVxuKTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgYSBrbm93biBpbnRlcm5hbCB0eXBlLiBJLmUuIG5vdCBhIHVzZXJcbiAqIHByb3ZpZGVkIGNvbXBvc2l0ZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgdmFsaWQgaW50ZXJuYWwgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNJbnRlcm5hbENvbXBvbmVudFR5cGUodHlwZSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIHR5cGUucHJvdG90eXBlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiB0eXBlLnByb3RvdHlwZS5tb3VudENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB0eXBlLnByb3RvdHlwZS5yZWNlaXZlQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBSZWFjdE5vZGUsIGNyZWF0ZSBhbiBpbnN0YW5jZSB0aGF0IHdpbGwgYWN0dWFsbHkgYmUgbW91bnRlZC5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHsqfSBwYXJlbnRDb21wb3NpdGVUeXBlIFRoZSBjb21wb3NpdGUgdHlwZSB0aGF0IHJlc29sdmVkIHRoaXMuXG4gKiBAcmV0dXJuIHtvYmplY3R9IEEgbmV3IGluc3RhbmNlIG9mIHRoZSBlbGVtZW50J3MgY29uc3RydWN0b3IuXG4gKiBAcHJvdGVjdGVkXG4gKi9cbmZ1bmN0aW9uIGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQobm9kZSwgcGFyZW50Q29tcG9zaXRlVHlwZSkge1xuICB2YXIgaW5zdGFuY2U7XG5cbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gZmFsc2UpIHtcbiAgICBub2RlID0gUmVhY3RFbXB0eUNvbXBvbmVudC5lbXB0eUVsZW1lbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG5vZGUgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBub2RlO1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICBlbGVtZW50ICYmICh0eXBlb2YgZWxlbWVudC50eXBlID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSxcbiAgICAgICAgJ09ubHkgZnVuY3Rpb25zIG9yIHN0cmluZ3MgY2FuIGJlIG1vdW50ZWQgYXMgUmVhY3QgY29tcG9uZW50cy4nXG4gICAgICApIDogbnVsbCk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHN0cmluZyB2YWx1ZXNcbiAgICBpZiAocGFyZW50Q29tcG9zaXRlVHlwZSA9PT0gZWxlbWVudC50eXBlICYmXG4gICAgICAgIHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBBdm9pZCByZWN1cnNpb24gaWYgdGhlIHdyYXBwZXIgcmVuZGVycyBpdHNlbGYuXG4gICAgICBpbnN0YW5jZSA9IFJlYWN0TmF0aXZlQ29tcG9uZW50LmNyZWF0ZUludGVybmFsQ29tcG9uZW50KGVsZW1lbnQpO1xuICAgICAgLy8gQWxsIG5hdGl2ZSBjb21wb25lbnRzIGFyZSBjdXJyZW50bHkgd3JhcHBlZCBpbiBhIGNvbXBvc2l0ZSBzbyB3ZSdyZVxuICAgICAgLy8gc2FmZSB0byBhc3N1bWUgdGhhdCB0aGlzIGlzIHdoYXQgd2Ugc2hvdWxkIGluc3RhbnRpYXRlLlxuICAgIH0gZWxzZSBpZiAoaXNJbnRlcm5hbENvbXBvbmVudFR5cGUoZWxlbWVudC50eXBlKSkge1xuICAgICAgLy8gVGhpcyBpcyB0ZW1wb3JhcmlseSBhdmFpbGFibGUgZm9yIGN1c3RvbSBjb21wb25lbnRzIHRoYXQgYXJlIG5vdCBzdHJpbmdcbiAgICAgIC8vIHJlcHJlc2VuYXRpb25zLiBJLmUuIEFSVC4gT25jZSB0aG9zZSBhcmUgdXBkYXRlZCB0byB1c2UgdGhlIHN0cmluZ1xuICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHdlIGNhbiBkcm9wIHRoaXMgY29kZSBwYXRoLlxuICAgICAgaW5zdGFuY2UgPSBuZXcgZWxlbWVudC50eXBlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZSA9IG5ldyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudFdyYXBwZXIoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBub2RlID09PSAnbnVtYmVyJykge1xuICAgIGluc3RhbmNlID0gUmVhY3ROYXRpdmVDb21wb25lbnQuY3JlYXRlSW5zdGFuY2VGb3JUZXh0KG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBmYWxzZSxcbiAgICAgICdFbmNvdW50ZXJlZCBpbnZhbGlkIFJlYWN0IG5vZGUgb2YgdHlwZSAlcycsXG4gICAgICB0eXBlb2Ygbm9kZVxuICAgICkgOiBpbnZhcmlhbnQoZmFsc2UpKTtcbiAgfVxuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gd2FybmluZyhcbiAgICAgIHR5cGVvZiBpbnN0YW5jZS5jb25zdHJ1Y3QgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBpbnN0YW5jZS5tb3VudENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIGluc3RhbmNlLnJlY2VpdmVDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBpbnN0YW5jZS51bm1vdW50Q29tcG9uZW50ID09PSAnZnVuY3Rpb24nLFxuICAgICAgJ09ubHkgUmVhY3QgQ29tcG9uZW50cyBjYW4gYmUgbW91bnRlZC4nXG4gICAgKSA6IG51bGwpO1xuICB9XG5cbiAgLy8gU2V0cyB1cCB0aGUgaW5zdGFuY2UuIFRoaXMgY2FuIHByb2JhYmx5IGp1c3QgbW92ZSBpbnRvIHRoZSBjb25zdHJ1Y3RvciBub3cuXG4gIGluc3RhbmNlLmNvbnN0cnVjdChub2RlKTtcblxuICAvLyBUaGVzZSB0d28gZmllbGRzIGFyZSB1c2VkIGJ5IHRoZSBET00gYW5kIEFSVCBkaWZmaW5nIGFsZ29yaXRobXNcbiAgLy8gcmVzcGVjdGl2ZWx5LiBJbnN0ZWFkIG9mIHVzaW5nIGV4cGFuZG9zIG9uIGNvbXBvbmVudHMsIHdlIHNob3VsZCBiZVxuICAvLyBzdG9yaW5nIHRoZSBzdGF0ZSBuZWVkZWQgYnkgdGhlIGRpZmZpbmcgYWxnb3JpdGhtcyBlbHNld2hlcmUuXG4gIGluc3RhbmNlLl9tb3VudEluZGV4ID0gMDtcbiAgaW5zdGFuY2UuX21vdW50SW1hZ2UgPSBudWxsO1xuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICBpbnN0YW5jZS5faXNPd25lck5lY2Vzc2FyeSA9IGZhbHNlO1xuICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IGZhbHNlO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaW5zdGFuY2VzIHNob3VsZCBmdWxseSBjb25zdHJ1Y3RlZCBhdCB0aGlzIHBvaW50LCBzbyB0aGV5IHNob3VsZFxuICAvLyBub3QgZ2V0IGFueSBuZXcgZmllbGRzIGFkZGVkIHRvIHRoZW0gYXQgdGhpcyBwb2ludC5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgIGlmIChPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHtcbiAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVOdmNIbHlhV2RvZENBeU1ERXpMVEl3TVRVc0lFWmhZMlZpYjI5ckxDQkpibU11WEc0Z0tpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNwY2JpQXFJRlJvYVhNZ2MyOTFjbU5sSUdOdlpHVWdhWE1nYkdsalpXNXpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDMXpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR2x1SUhSb1pWeHVJQ29nVEVsRFJVNVRSU0JtYVd4bElHbHVJSFJvWlNCeWIyOTBJR1JwY21WamRHOXllU0J2WmlCMGFHbHpJSE52ZFhKalpTQjBjbVZsTGlCQmJpQmhaR1JwZEdsdmJtRnNJR2R5WVc1MFhHNGdLaUJ2WmlCd1lYUmxiblFnY21sbmFIUnpJR05oYmlCaVpTQm1iM1Z1WkNCcGJpQjBhR1VnVUVGVVJVNVVVeUJtYVd4bElHbHVJSFJvWlNCellXMWxJR1JwY21WamRHOXllUzVjYmlBcVhHNGdLaUJBY0hKdmRtbGtaWE5OYjJSMWJHVWdhVzV6ZEdGdWRHbGhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRGeHVJQ29nUUhSNWNHVmphR1ZqYTNNZ2MzUmhkR2xqTFc5dWJIbGNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRFTnZiWEJ2YzJsMFpVTnZiWEJ2Ym1WdWRDQTlJSEpsY1hWcGNtVW9YQ0l1TDFKbFlXTjBRMjl0Y0c5emFYUmxRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOVNaV0ZqZEVWdGNIUjVRMjl0Y0c5dVpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFRtRjBhWFpsUTI5dGNHOXVaVzUwSUQwZ2NtVnhkV2x5WlNoY0lpNHZVbVZoWTNST1lYUnBkbVZEYjIxd2IyNWxiblJjSWlrN1hHNWNiblpoY2lCaGMzTnBaMjRnUFNCeVpYRjFhWEpsS0Z3aUxpOVBZbXBsWTNRdVlYTnphV2R1WENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUIzWVhKdWFXNW5JRDBnY21WeGRXbHlaU2hjSWk0dmQyRnlibWx1WjF3aUtUdGNibHh1THk4Z1ZHOGdZWFp2YVdRZ1lTQmplV05zYVdNZ1pHVndaVzVrWlc1amVTd2dkMlVnWTNKbFlYUmxJSFJvWlNCbWFXNWhiQ0JqYkdGemN5QnBiaUIwYUdseklHMXZaSFZzWlZ4dWRtRnlJRkpsWVdOMFEyOXRjRzl6YVhSbFEyOXRjRzl1Wlc1MFYzSmhjSEJsY2lBOUlHWjFibU4wYVc5dUtDa2dleUI5TzF4dVlYTnphV2R1S0Z4dUlDQlNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZEZkeVlYQndaWEl1Y0hKdmRHOTBlWEJsTEZ4dUlDQlNaV0ZqZEVOdmJYQnZjMmwwWlVOdmJYQnZibVZ1ZEM1TmFYaHBiaXhjYmlBZ2UxeHVJQ0FnSUY5cGJuTjBZVzUwYVdGMFpWSmxZV04wUTI5dGNHOXVaVzUwT2lCcGJuTjBZVzUwYVdGMFpWSmxZV04wUTI5dGNHOXVaVzUwWEc0Z0lIMWNiaWs3WEc1Y2JpOHFLbHh1SUNvZ1EyaGxZMnNnYVdZZ2RHaGxJSFI1Y0dVZ2NtVm1aWEpsYm1ObElHbHpJR0VnYTI1dmQyNGdhVzUwWlhKdVlXd2dkSGx3WlM0Z1NTNWxMaUJ1YjNRZ1lTQjFjMlZ5WEc0Z0tpQndjbTkyYVdSbFpDQmpiMjF3YjNOcGRHVWdkSGx3WlM1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTJaMWJtTjBhVzl1ZlNCMGVYQmxYRzRnS2lCQWNtVjBkWEp1SUh0aWIyOXNaV0Z1ZlNCU1pYUjFjbTV6SUhSeWRXVWdhV1lnZEdocGN5QnBjeUJoSUhaaGJHbGtJR2x1ZEdWeWJtRnNJSFI1Y0dVdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdselNXNTBaWEp1WVd4RGIyMXdiMjVsYm5SVWVYQmxLSFI1Y0dVcElIdGNiaUFnY21WMGRYSnVJQ2hjYmlBZ0lDQjBlWEJsYjJZZ2RIbHdaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QW1KbHh1SUNBZ0lIUjVjR1Z2WmlCMGVYQmxMbkJ5YjNSdmRIbHdaU0FoUFQwZ0ozVnVaR1ZtYVc1bFpDY2dKaVpjYmlBZ0lDQjBlWEJsYjJZZ2RIbHdaUzV3Y205MGIzUjVjR1V1Ylc5MWJuUkRiMjF3YjI1bGJuUWdQVDA5SUNkbWRXNWpkR2x2YmljZ0ppWmNiaUFnSUNCMGVYQmxiMllnZEhsd1pTNXdjbTkwYjNSNWNHVXVjbVZqWldsMlpVTnZiWEJ2Ym1WdWRDQTlQVDBnSjJaMWJtTjBhVzl1SjF4dUlDQXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFZHBkbVZ1SUdFZ1VtVmhZM1JPYjJSbExDQmpjbVZoZEdVZ1lXNGdhVzV6ZEdGdVkyVWdkR2hoZENCM2FXeHNJR0ZqZEhWaGJHeDVJR0psSUcxdmRXNTBaV1F1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHRTWldGamRFNXZaR1Y5SUc1dlpHVmNiaUFxSUVCd1lYSmhiU0I3S24wZ2NHRnlaVzUwUTI5dGNHOXphWFJsVkhsd1pTQlVhR1VnWTI5dGNHOXphWFJsSUhSNWNHVWdkR2hoZENCeVpYTnZiSFpsWkNCMGFHbHpMbHh1SUNvZ1FISmxkSFZ5YmlCN2IySnFaV04wZlNCQklHNWxkeUJwYm5OMFlXNWpaU0J2WmlCMGFHVWdaV3hsYldWdWRDZHpJR052Ym5OMGNuVmpkRzl5TGx4dUlDb2dRSEJ5YjNSbFkzUmxaRnh1SUNvdlhHNW1kVzVqZEdsdmJpQnBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1MEtHNXZaR1VzSUhCaGNtVnVkRU52YlhCdmMybDBaVlI1Y0dVcElIdGNiaUFnZG1GeUlHbHVjM1JoYm1ObE8xeHVYRzRnSUdsbUlDaHViMlJsSUQwOVBTQnVkV3hzSUh4OElHNXZaR1VnUFQwOUlHWmhiSE5sS1NCN1hHNGdJQ0FnYm05a1pTQTlJRkpsWVdOMFJXMXdkSGxEYjIxd2IyNWxiblF1Wlcxd2RIbEZiR1Z0Wlc1ME8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0hSNWNHVnZaaUJ1YjJSbElEMDlQU0FuYjJKcVpXTjBKeWtnZTF4dUlDQWdJSFpoY2lCbGJHVnRaVzUwSUQwZ2JtOWtaVHRjYmlBZ0lDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2QyRnlibWx1WnloY2JpQWdJQ0FnSUNBZ1pXeGxiV1Z1ZENBbUppQW9kSGx3Wlc5bUlHVnNaVzFsYm5RdWRIbHdaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGVYQmxiMllnWld4bGJXVnVkQzUwZVhCbElEMDlQU0FuYzNSeWFXNW5KeWtzWEc0Z0lDQWdJQ0FnSUNkUGJteDVJR1oxYm1OMGFXOXVjeUJ2Y2lCemRISnBibWR6SUdOaGJpQmlaU0J0YjNWdWRHVmtJR0Z6SUZKbFlXTjBJR052YlhCdmJtVnVkSE11SjF4dUlDQWdJQ0FnS1NBNklHNTFiR3dwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUZOd1pXTnBZV3dnWTJGelpTQnpkSEpwYm1jZ2RtRnNkV1Z6WEc0Z0lDQWdhV1lnS0hCaGNtVnVkRU52YlhCdmMybDBaVlI1Y0dVZ1BUMDlJR1ZzWlcxbGJuUXVkSGx3WlNBbUpseHVJQ0FnSUNBZ0lDQjBlWEJsYjJZZ1pXeGxiV1Z1ZEM1MGVYQmxJRDA5UFNBbmMzUnlhVzVuSnlrZ2UxeHVJQ0FnSUNBZ0x5OGdRWFp2YVdRZ2NtVmpkWEp6YVc5dUlHbG1JSFJvWlNCM2NtRndjR1Z5SUhKbGJtUmxjbk1nYVhSelpXeG1MbHh1SUNBZ0lDQWdhVzV6ZEdGdVkyVWdQU0JTWldGamRFNWhkR2wyWlVOdmJYQnZibVZ1ZEM1amNtVmhkR1ZKYm5SbGNtNWhiRU52YlhCdmJtVnVkQ2hsYkdWdFpXNTBLVHRjYmlBZ0lDQWdJQzh2SUVGc2JDQnVZWFJwZG1VZ1kyOXRjRzl1Wlc1MGN5QmhjbVVnWTNWeWNtVnVkR3g1SUhkeVlYQndaV1FnYVc0Z1lTQmpiMjF3YjNOcGRHVWdjMjhnZDJVbmNtVmNiaUFnSUNBZ0lDOHZJSE5oWm1VZ2RHOGdZWE56ZFcxbElIUm9ZWFFnZEdocGN5QnBjeUIzYUdGMElIZGxJSE5vYjNWc1pDQnBibk4wWVc1MGFXRjBaUzVjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR2x6U1c1MFpYSnVZV3hEYjIxd2IyNWxiblJVZVhCbEtHVnNaVzFsYm5RdWRIbHdaU2twSUh0Y2JpQWdJQ0FnSUM4dklGUm9hWE1nYVhNZ2RHVnRjRzl5WVhKcGJIa2dZWFpoYVd4aFlteGxJR1p2Y2lCamRYTjBiMjBnWTI5dGNHOXVaVzUwY3lCMGFHRjBJR0Z5WlNCdWIzUWdjM1J5YVc1blhHNGdJQ0FnSUNBdkx5QnlaWEJ5WlhObGJtRjBhVzl1Y3k0Z1NTNWxMaUJCVWxRdUlFOXVZMlVnZEdodmMyVWdZWEpsSUhWd1pHRjBaV1FnZEc4Z2RYTmxJSFJvWlNCemRISnBibWRjYmlBZ0lDQWdJQzh2SUhKbGNISmxjMlZ1ZEdGMGFXOXVMQ0IzWlNCallXNGdaSEp2Y0NCMGFHbHpJR052WkdVZ2NHRjBhQzVjYmlBZ0lDQWdJR2x1YzNSaGJtTmxJRDBnYm1WM0lHVnNaVzFsYm5RdWRIbHdaU2hsYkdWdFpXNTBLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2FXNXpkR0Z1WTJVZ1BTQnVaWGNnVW1WaFkzUkRiMjF3YjNOcGRHVkRiMjF3YjI1bGJuUlhjbUZ3Y0dWeUtDazdYRzRnSUNBZ2ZWeHVJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJ1YjJSbElEMDlQU0FuYzNSeWFXNW5KeUI4ZkNCMGVYQmxiMllnYm05a1pTQTlQVDBnSjI1MWJXSmxjaWNwSUh0Y2JpQWdJQ0JwYm5OMFlXNWpaU0E5SUZKbFlXTjBUbUYwYVhabFEyOXRjRzl1Wlc1MExtTnlaV0YwWlVsdWMzUmhibU5sUm05eVZHVjRkQ2h1YjJSbEtUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ1ptRnNjMlVzWEc0Z0lDQWdJQ0FuUlc1amIzVnVkR1Z5WldRZ2FXNTJZV3hwWkNCU1pXRmpkQ0J1YjJSbElHOW1JSFI1Y0dVZ0pYTW5MRnh1SUNBZ0lDQWdkSGx3Wlc5bUlHNXZaR1ZjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0daaGJITmxLU2s3WEc0Z0lIMWNibHh1SUNCcFppQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JSGRoY201cGJtY29YRzRnSUNBZ0lDQjBlWEJsYjJZZ2FXNXpkR0Z1WTJVdVkyOXVjM1J5ZFdOMElEMDlQU0FuWm5WdVkzUnBiMjRuSUNZbVhHNGdJQ0FnSUNCMGVYQmxiMllnYVc1emRHRnVZMlV1Ylc5MWJuUkRiMjF3YjI1bGJuUWdQVDA5SUNkbWRXNWpkR2x2YmljZ0ppWmNiaUFnSUNBZ0lIUjVjR1Z2WmlCcGJuTjBZVzVqWlM1eVpXTmxhWFpsUTI5dGNHOXVaVzUwSUQwOVBTQW5ablZ1WTNScGIyNG5JQ1ltWEc0Z0lDQWdJQ0IwZVhCbGIyWWdhVzV6ZEdGdVkyVXVkVzV0YjNWdWRFTnZiWEJ2Ym1WdWRDQTlQVDBnSjJaMWJtTjBhVzl1Snl4Y2JpQWdJQ0FnSUNkUGJteDVJRkpsWVdOMElFTnZiWEJ2Ym1WdWRITWdZMkZ1SUdKbElHMXZkVzUwWldRdUoxeHVJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdmVnh1WEc0Z0lDOHZJRk5sZEhNZ2RYQWdkR2hsSUdsdWMzUmhibU5sTGlCVWFHbHpJR05oYmlCd2NtOWlZV0pzZVNCcWRYTjBJRzF2ZG1VZ2FXNTBieUIwYUdVZ1kyOXVjM1J5ZFdOMGIzSWdibTkzTGx4dUlDQnBibk4wWVc1alpTNWpiMjV6ZEhKMVkzUW9ibTlrWlNrN1hHNWNiaUFnTHk4Z1ZHaGxjMlVnZEhkdklHWnBaV3hrY3lCaGNtVWdkWE5sWkNCaWVTQjBhR1VnUkU5TklHRnVaQ0JCVWxRZ1pHbG1abWx1WnlCaGJHZHZjbWwwYUcxelhHNGdJQzh2SUhKbGMzQmxZM1JwZG1Wc2VTNGdTVzV6ZEdWaFpDQnZaaUIxYzJsdVp5QmxlSEJoYm1SdmN5QnZiaUJqYjIxd2IyNWxiblJ6TENCM1pTQnphRzkxYkdRZ1ltVmNiaUFnTHk4Z2MzUnZjbWx1WnlCMGFHVWdjM1JoZEdVZ2JtVmxaR1ZrSUdKNUlIUm9aU0JrYVdabWFXNW5JR0ZzWjI5eWFYUm9iWE1nWld4elpYZG9aWEpsTGx4dUlDQnBibk4wWVc1alpTNWZiVzkxYm5SSmJtUmxlQ0E5SURBN1hHNGdJR2x1YzNSaGJtTmxMbDl0YjNWdWRFbHRZV2RsSUQwZ2JuVnNiRHRjYmx4dUlDQnBaaUFvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0tTQjdYRzRnSUNBZ2FXNXpkR0Z1WTJVdVgybHpUM2R1WlhKT1pXTmxjM05oY25rZ1BTQm1ZV3h6WlR0Y2JpQWdJQ0JwYm5OMFlXNWpaUzVmZDJGeWJtVmtRV0p2ZFhSU1pXWnpTVzVTWlc1a1pYSWdQU0JtWVd4elpUdGNiaUFnZlZ4dVhHNGdJQzh2SUVsdWRHVnlibUZzSUdsdWMzUmhibU5sY3lCemFHOTFiR1FnWm5Wc2JIa2dZMjl1YzNSeWRXTjBaV1FnWVhRZ2RHaHBjeUJ3YjJsdWRDd2djMjhnZEdobGVTQnphRzkxYkdSY2JpQWdMeThnYm05MElHZGxkQ0JoYm5rZ2JtVjNJR1pwWld4a2N5QmhaR1JsWkNCMGJ5QjBhR1Z0SUdGMElIUm9hWE1nY0c5cGJuUXVYRzRnSUdsbUlDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlwSUh0Y2JpQWdJQ0JwWmlBb1QySnFaV04wTG5CeVpYWmxiblJGZUhSbGJuTnBiMjV6S1NCN1hHNGdJQ0FnSUNCUFltcGxZM1F1Y0hKbGRtVnVkRVY0ZEdWdWMybHZibk1vYVc1emRHRnVZMlVwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUJwYm5OMFlXNWpaVHRjYm4xY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQnBibk4wWVc1MGFXRjBaVkpsWVdOMFEyOXRjRzl1Wlc1ME8xeHVJbDE5IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpbnZhcmlhbnRcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXG4gICAgICAgICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLidcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAnSW52YXJpYW50IFZpb2xhdGlvbjogJyArXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZhVzUyWVhKcFlXNTBMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0JwYm5aaGNtbGhiblJjYmlBcUwxeHVYRzVjSW5WelpTQnpkSEpwWTNSY0lqdGNibHh1THlvcVhHNGdLaUJWYzJVZ2FXNTJZWEpwWVc1MEtDa2dkRzhnWVhOelpYSjBJSE4wWVhSbElIZG9hV05vSUhsdmRYSWdjSEp2WjNKaGJTQmhjM04xYldWeklIUnZJR0psSUhSeWRXVXVYRzRnS2x4dUlDb2dVSEp2ZG1sa1pTQnpjSEpwYm5SbUxYTjBlV3hsSUdadmNtMWhkQ0FvYjI1c2VTQWxjeUJwY3lCemRYQndiM0owWldRcElHRnVaQ0JoY21kMWJXVnVkSE5jYmlBcUlIUnZJSEJ5YjNacFpHVWdhVzVtYjNKdFlYUnBiMjRnWVdKdmRYUWdkMmhoZENCaWNtOXJaU0JoYm1RZ2QyaGhkQ0I1YjNVZ2QyVnlaVnh1SUNvZ1pYaHdaV04wYVc1bkxseHVJQ3BjYmlBcUlGUm9aU0JwYm5aaGNtbGhiblFnYldWemMyRm5aU0IzYVd4c0lHSmxJSE4wY21sd2NHVmtJR2x1SUhCeWIyUjFZM1JwYjI0c0lHSjFkQ0IwYUdVZ2FXNTJZWEpwWVc1MFhHNGdLaUIzYVd4c0lISmxiV0ZwYmlCMGJ5Qmxibk4xY21VZ2JHOW5hV01nWkc5bGN5QnViM1FnWkdsbVptVnlJR2x1SUhCeWIyUjFZM1JwYjI0dVhHNGdLaTljYmx4dWRtRnlJR2x1ZG1GeWFXRnVkQ0E5SUdaMWJtTjBhVzl1S0dOdmJtUnBkR2x2Yml3Z1ptOXliV0YwTENCaExDQmlMQ0JqTENCa0xDQmxMQ0JtS1NCN1hHNGdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQnBaaUFvWm05eWJXRjBJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmFXNTJZWEpwWVc1MElISmxjWFZwY21WeklHRnVJR1Z5Y205eUlHMWxjM05oWjJVZ1lYSm5kVzFsYm5RbktUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnBaaUFvSVdOdmJtUnBkR2x2YmlrZ2UxeHVJQ0FnSUhaaGNpQmxjbkp2Y2p0Y2JpQWdJQ0JwWmlBb1ptOXliV0YwSUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJR1Z5Y205eUlEMGdibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0FuVFdsdWFXWnBaV1FnWlhoalpYQjBhVzl1SUc5alkzVnljbVZrT3lCMWMyVWdkR2hsSUc1dmJpMXRhVzVwWm1sbFpDQmtaWFlnWlc1MmFYSnZibTFsYm5RZ0p5QXJYRzRnSUNBZ0lDQWdJQ2RtYjNJZ2RHaGxJR1oxYkd3Z1pYSnliM0lnYldWemMyRm5aU0JoYm1RZ1lXUmthWFJwYjI1aGJDQm9aV3h3Wm5Wc0lIZGhjbTVwYm1kekxpZGNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhaaGNpQmhjbWR6SUQwZ1cyRXNJR0lzSUdNc0lHUXNJR1VzSUdaZE8xeHVJQ0FnSUNBZ2RtRnlJR0Z5WjBsdVpHVjRJRDBnTUR0Y2JpQWdJQ0FnSUdWeWNtOXlJRDBnYm1WM0lFVnljbTl5S0Z4dUlDQWdJQ0FnSUNBblNXNTJZWEpwWVc1MElGWnBiMnhoZEdsdmJqb2dKeUFyWEc0Z0lDQWdJQ0FnSUdadmNtMWhkQzV5WlhCc1lXTmxLQzhsY3k5bkxDQm1kVzVqZEdsdmJpZ3BJSHNnY21WMGRYSnVJR0Z5WjNOYllYSm5TVzVrWlhncksxMDdJSDBwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1Z5Y205eUxtWnlZVzFsYzFSdlVHOXdJRDBnTVRzZ0x5OGdkMlVnWkc5dUozUWdZMkZ5WlNCaFltOTFkQ0JwYm5aaGNtbGhiblFuY3lCdmQyNGdabkpoYldWY2JpQWdJQ0IwYUhKdmR5Qmxjbkp2Y2p0Y2JpQWdmVnh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQnBiblpoY21saGJuUTdYRzRpWFgwPSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpc0V2ZW50U3VwcG9ydGVkXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIHVzZUhhc0ZlYXR1cmU7XG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIHVzZUhhc0ZlYXR1cmUgPVxuICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uICYmXG4gICAgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJlxuICAgIC8vIGFsd2F5cyByZXR1cm5zIHRydWUgaW4gbmV3ZXIgYnJvd3NlcnMgYXMgcGVyIHRoZSBzdGFuZGFyZC5cbiAgICAvLyBAc2VlIGh0dHA6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9taW1wbGVtZW50YXRpb24taGFzZmVhdHVyZVxuICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGNhcHR1cmUgQ2hlY2sgaWYgdGhlIGNhcHR1cmUgcGhhc2UgaXMgc3VwcG9ydGVkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgsIGNhcHR1cmUpIHtcbiAgaWYgKCFFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gfHxcbiAgICAgIGNhcHR1cmUgJiYgISgnYWRkRXZlbnRMaXN0ZW5lcicgaW4gZG9jdW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFtZSBpbiBkb2N1bWVudDtcblxuICBpZiAoIWlzU3VwcG9ydGVkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdyZXR1cm47Jyk7XG4gICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgZWxlbWVudFtldmVudE5hbWVdID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCAmJiB1c2VIYXNGZWF0dXJlICYmIGV2ZW50TmFtZVN1ZmZpeCA9PT0gJ3doZWVsJykge1xuICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIHRlc3Qgc3VwcG9ydCBmb3IgdGhlIGB3aGVlbGAgZXZlbnQgaW4gSUU5Ky5cbiAgICBpc1N1cHBvcnRlZCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJ0V2ZW50cy53aGVlbCcsICczLjAnKTtcbiAgfVxuXG4gIHJldHVybiBpc1N1cHBvcnRlZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0V2ZW50U3VwcG9ydGVkO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGlzTm9kZVxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGlzIGEgRE9NIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGlzTm9kZShvYmplY3QpIHtcbiAgcmV0dXJuICEhKG9iamVjdCAmJiAoXG4gICAgKCh0eXBlb2YgTm9kZSA9PT0gJ2Z1bmN0aW9uJyA/IG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgOiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3Qubm9kZVR5cGUgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIG9iamVjdC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpKVxuICApKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc05vZGU7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgaXNUZXh0SW5wdXRFbGVtZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWlucHV0LWVsZW1lbnQuaHRtbCNpbnB1dC10eXBlLWF0dHItc3VtbWFyeVxuICovXG52YXIgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgJ2NvbG9yJzogdHJ1ZSxcbiAgJ2RhdGUnOiB0cnVlLFxuICAnZGF0ZXRpbWUnOiB0cnVlLFxuICAnZGF0ZXRpbWUtbG9jYWwnOiB0cnVlLFxuICAnZW1haWwnOiB0cnVlLFxuICAnbW9udGgnOiB0cnVlLFxuICAnbnVtYmVyJzogdHJ1ZSxcbiAgJ3Bhc3N3b3JkJzogdHJ1ZSxcbiAgJ3JhbmdlJzogdHJ1ZSxcbiAgJ3NlYXJjaCc6IHRydWUsXG4gICd0ZWwnOiB0cnVlLFxuICAndGV4dCc6IHRydWUsXG4gICd0aW1lJzogdHJ1ZSxcbiAgJ3VybCc6IHRydWUsXG4gICd3ZWVrJzogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsZW0pIHtcbiAgcmV0dXJuIGVsZW0gJiYgKFxuICAgIChlbGVtLm5vZGVOYW1lID09PSAnSU5QVVQnICYmIHN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXSB8fCBlbGVtLm5vZGVOYW1lID09PSAnVEVYVEFSRUEnKVxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVGV4dElucHV0RWxlbWVudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBpc1RleHROb2RlXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBpc05vZGUgPSByZXF1aXJlKFwiLi9pc05vZGVcIik7XG5cbi8qKlxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIG9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaXMgYSBET00gdGV4dCBub2RlLlxuICovXG5mdW5jdGlvbiBpc1RleHROb2RlKG9iamVjdCkge1xuICByZXR1cm4gaXNOb2RlKG9iamVjdCkgJiYgb2JqZWN0Lm5vZGVUeXBlID09IDM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUZXh0Tm9kZTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBqb2luQ2xhc3Nlc1xuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgY2xhc3NOYW1lIHN0cmluZ3MgaW50byBvbmUuXG4gKiBodHRwOi8vanNwZXJmLmNvbS9qb2luY2xhc3Nlcy1hcmdzLXZzLWFycmF5XG4gKlxuICogQHBhcmFtIHsuLi4/c3RyaW5nfSBjbGFzc2VzXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGpvaW5DbGFzc2VzKGNsYXNzTmFtZS8qLCAuLi4gKi8pIHtcbiAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICBjbGFzc05hbWUgPSAnJztcbiAgfVxuICB2YXIgbmV4dENsYXNzO1xuICB2YXIgYXJnTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgaWYgKGFyZ0xlbmd0aCA+IDEpIHtcbiAgICBmb3IgKHZhciBpaSA9IDE7IGlpIDwgYXJnTGVuZ3RoOyBpaSsrKSB7XG4gICAgICBuZXh0Q2xhc3MgPSBhcmd1bWVudHNbaWldO1xuICAgICAgaWYgKG5leHRDbGFzcykge1xuICAgICAgICBjbGFzc05hbWUgPSAoY2xhc3NOYW1lID8gY2xhc3NOYW1lICsgJyAnIDogJycpICsgbmV4dENsYXNzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGpvaW5DbGFzc2VzO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBrZXlNaXJyb3JcbiAqIEB0eXBlY2hlY2tzIHN0YXRpYy1vbmx5XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYW4gZW51bWVyYXRpb24gd2l0aCBrZXlzIGVxdWFsIHRvIHRoZWlyIHZhbHVlLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICpcbiAqICAgdmFyIENPTE9SUyA9IGtleU1pcnJvcih7Ymx1ZTogbnVsbCwgcmVkOiBudWxsfSk7XG4gKiAgIHZhciBteUNvbG9yID0gQ09MT1JTLmJsdWU7XG4gKiAgIHZhciBpc0NvbG9yVmFsaWQgPSAhIUNPTE9SU1tteUNvbG9yXTtcbiAqXG4gKiBUaGUgbGFzdCBsaW5lIGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQgaWYgdGhlIHZhbHVlcyBvZiB0aGUgZ2VuZXJhdGVkIGVudW0gd2VyZVxuICogbm90IGVxdWFsIHRvIHRoZWlyIGtleXMuXG4gKlxuICogICBJbnB1dDogIHtrZXkxOiB2YWwxLCBrZXkyOiB2YWwyfVxuICogICBPdXRwdXQ6IHtrZXkxOiBrZXkxLCBrZXkyOiBrZXkyfVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xudmFyIGtleU1pcnJvciA9IGZ1bmN0aW9uKG9iaikge1xuICB2YXIgcmV0ID0ge307XG4gIHZhciBrZXk7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgb2JqIGluc3RhbmNlb2YgT2JqZWN0ICYmICFBcnJheS5pc0FycmF5KG9iaiksXG4gICAgJ2tleU1pcnJvciguLi4pOiBBcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4nXG4gICkgOiBpbnZhcmlhbnQob2JqIGluc3RhbmNlb2YgT2JqZWN0ICYmICFBcnJheS5pc0FycmF5KG9iaikpKTtcbiAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJldFtrZXldID0ga2V5O1xuICB9XG4gIHJldHVybiByZXQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGtleU1pcnJvcjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdmEyVjVUV2x5Y205eUxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJEYjNCNWNtbG5hSFFnTWpBeE15MHlNREUxTENCR1lXTmxZbTl2YXl3Z1NXNWpMbHh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxWEc0Z0tpQlVhR2x6SUhOdmRYSmpaU0JqYjJSbElHbHpJR3hwWTJWdWMyVmtJSFZ1WkdWeUlIUm9aU0JDVTBRdGMzUjViR1VnYkdsalpXNXpaU0JtYjNWdVpDQnBiaUIwYUdWY2JpQXFJRXhKUTBWT1UwVWdabWxzWlNCcGJpQjBhR1VnY205dmRDQmthWEpsWTNSdmNua2diMllnZEdocGN5QnpiM1Z5WTJVZ2RISmxaUzRnUVc0Z1lXUmthWFJwYjI1aGJDQm5jbUZ1ZEZ4dUlDb2diMllnY0dGMFpXNTBJSEpwWjJoMGN5QmpZVzRnWW1VZ1ptOTFibVFnYVc0Z2RHaGxJRkJCVkVWT1ZGTWdabWxzWlNCcGJpQjBhR1VnYzJGdFpTQmthWEpsWTNSdmNua3VYRzRnS2x4dUlDb2dRSEJ5YjNacFpHVnpUVzlrZFd4bElHdGxlVTFwY25KdmNseHVJQ29nUUhSNWNHVmphR1ZqYTNNZ2MzUmhkR2xqTFc5dWJIbGNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJwYm5aaGNtbGhiblFnUFNCeVpYRjFhWEpsS0Z3aUxpOXBiblpoY21saGJuUmNJaWs3WEc1Y2JpOHFLbHh1SUNvZ1EyOXVjM1J5ZFdOMGN5QmhiaUJsYm5WdFpYSmhkR2x2YmlCM2FYUm9JR3RsZVhNZ1pYRjFZV3dnZEc4Z2RHaGxhWElnZG1Gc2RXVXVYRzRnS2x4dUlDb2dSbTl5SUdWNFlXMXdiR1U2WEc0Z0tseHVJQ29nSUNCMllYSWdRMDlNVDFKVElEMGdhMlY1VFdseWNtOXlLSHRpYkhWbE9pQnVkV3hzTENCeVpXUTZJRzUxYkd4OUtUdGNiaUFxSUNBZ2RtRnlJRzE1UTI5c2IzSWdQU0JEVDB4UFVsTXVZbXgxWlR0Y2JpQXFJQ0FnZG1GeUlHbHpRMjlzYjNKV1lXeHBaQ0E5SUNFaFEwOU1UMUpUVzIxNVEyOXNiM0pkTzF4dUlDcGNiaUFxSUZSb1pTQnNZWE4wSUd4cGJtVWdZMjkxYkdRZ2JtOTBJR0psSUhCbGNtWnZjbTFsWkNCcFppQjBhR1VnZG1Gc2RXVnpJRzltSUhSb1pTQm5aVzVsY21GMFpXUWdaVzUxYlNCM1pYSmxYRzRnS2lCdWIzUWdaWEYxWVd3Z2RHOGdkR2hsYVhJZ2EyVjVjeTVjYmlBcVhHNGdLaUFnSUVsdWNIVjBPaUFnZTJ0bGVURTZJSFpoYkRFc0lHdGxlVEk2SUhaaGJESjlYRzRnS2lBZ0lFOTFkSEIxZERvZ2UydGxlVEU2SUd0bGVURXNJR3RsZVRJNklHdGxlVEo5WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHR2WW1wbFkzUjlJRzlpYWx4dUlDb2dRSEpsZEhWeWJpQjdiMkpxWldOMGZWeHVJQ292WEc1MllYSWdhMlY1VFdseWNtOXlJRDBnWm5WdVkzUnBiMjRvYjJKcUtTQjdYRzRnSUhaaGNpQnlaWFFnUFNCN2ZUdGNiaUFnZG1GeUlHdGxlVHRjYmlBZ0tGd2ljSEp2WkhWamRHbHZibHdpSUNFOVBTQndjbTlqWlhOekxtVnVkaTVPVDBSRlgwVk9WaUEvSUdsdWRtRnlhV0Z1ZENoY2JpQWdJQ0J2WW1vZ2FXNXpkR0Z1WTJWdlppQlBZbXBsWTNRZ0ppWWdJVUZ5Y21GNUxtbHpRWEp5WVhrb2IySnFLU3hjYmlBZ0lDQW5hMlY1VFdseWNtOXlLQzR1TGlrNklFRnlaM1Z0Wlc1MElHMTFjM1FnWW1VZ1lXNGdiMkpxWldOMExpZGNiaUFnS1NBNklHbHVkbUZ5YVdGdWRDaHZZbW9nYVc1emRHRnVZMlZ2WmlCUFltcGxZM1FnSmlZZ0lVRnljbUY1TG1selFYSnlZWGtvYjJKcUtTa3BPMXh1SUNCbWIzSWdLR3RsZVNCcGJpQnZZbW9wSUh0Y2JpQWdJQ0JwWmlBb0lXOWlhaTVvWVhOUGQyNVFjbTl3WlhKMGVTaHJaWGtwS1NCN1hHNGdJQ0FnSUNCamIyNTBhVzUxWlR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwVzJ0bGVWMGdQU0JyWlhrN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUhKbGREdGNibjA3WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ2EyVjVUV2x5Y205eU8xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIGtleU9mXG4gKi9cblxuLyoqXG4gKiBBbGxvd3MgZXh0cmFjdGlvbiBvZiBhIG1pbmlmaWVkIGtleS4gTGV0J3MgdGhlIGJ1aWxkIHN5c3RlbSBtaW5pZnkga2V5c1xuICogd2l0aG91dCBsb29zaW5nIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHVzZSBrZXkgc3RyaW5ncyBhcyB2YWx1ZXNcbiAqIHRoZW1zZWx2ZXMuIFBhc3MgaW4gYW4gb2JqZWN0IHdpdGggYSBzaW5nbGUga2V5L3ZhbCBwYWlyIGFuZCBpdCB3aWxsIHJldHVyblxuICogeW91IHRoZSBzdHJpbmcga2V5IG9mIHRoYXQgc2luZ2xlIHJlY29yZC4gU3VwcG9zZSB5b3Ugd2FudCB0byBncmFiIHRoZVxuICogdmFsdWUgZm9yIGEga2V5ICdjbGFzc05hbWUnIGluc2lkZSBvZiBhbiBvYmplY3QuIEtleS92YWwgbWluaWZpY2F0aW9uIG1heVxuICogaGF2ZSBhbGlhc2VkIHRoYXQga2V5IHRvIGJlICd4YTEyJy4ga2V5T2Yoe2NsYXNzTmFtZTogbnVsbH0pIHdpbGwgcmV0dXJuXG4gKiAneGExMicgaW4gdGhhdCBjYXNlLiBSZXNvbHZlIGtleXMgeW91IHdhbnQgdG8gdXNlIG9uY2UgYXQgc3RhcnR1cCB0aW1lLCB0aGVuXG4gKiByZXVzZSB0aG9zZSByZXNvbHV0aW9ucy5cbiAqL1xudmFyIGtleU9mID0gZnVuY3Rpb24ob25lS2V5T2JqKSB7XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIG9uZUtleU9iaikge1xuICAgIGlmICghb25lS2V5T2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleU9mO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIG1hcE9iamVjdFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgcHJvdmlkZWQgYGNhbGxiYWNrYCBvbmNlIGZvciBlYWNoIGVudW1lcmFibGUgb3duIHByb3BlcnR5IGluIHRoZVxuICogb2JqZWN0IGFuZCBjb25zdHJ1Y3RzIGEgbmV3IG9iamVjdCBmcm9tIHRoZSByZXN1bHRzLiBUaGUgYGNhbGxiYWNrYCBpc1xuICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAqXG4gKiAgLSB0aGUgcHJvcGVydHkgdmFsdWVcbiAqICAtIHRoZSBwcm9wZXJ0eSBuYW1lXG4gKiAgLSB0aGUgb2JqZWN0IGJlaW5nIHRyYXZlcnNlZFxuICpcbiAqIFByb3BlcnRpZXMgdGhhdCBhcmUgYWRkZWQgYWZ0ZXIgdGhlIGNhbGwgdG8gYG1hcE9iamVjdGAgd2lsbCBub3QgYmUgdmlzaXRlZFxuICogYnkgYGNhbGxiYWNrYC4gSWYgdGhlIHZhbHVlcyBvZiBleGlzdGluZyBwcm9wZXJ0aWVzIGFyZSBjaGFuZ2VkLCB0aGUgdmFsdWVcbiAqIHBhc3NlZCB0byBgY2FsbGJhY2tgIHdpbGwgYmUgdGhlIHZhbHVlIGF0IHRoZSB0aW1lIGBtYXBPYmplY3RgIHZpc2l0cyB0aGVtLlxuICogUHJvcGVydGllcyB0aGF0IGFyZSBkZWxldGVkIGJlZm9yZSBiZWluZyB2aXNpdGVkIGFyZSBub3QgdmlzaXRlZC5cbiAqXG4gKiBAZ3JlcCBmdW5jdGlvbiBvYmplY3RNYXAoKVxuICogQGdyZXAgZnVuY3Rpb24gb2JqTWFwKClcbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gY29udGV4dFxuICogQHJldHVybiB7P29iamVjdH1cbiAqL1xuZnVuY3Rpb24gbWFwT2JqZWN0KG9iamVjdCwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgcmVzdWx0ID0ge307XG4gIGZvciAodmFyIG5hbWUgaW4gb2JqZWN0KSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBuYW1lKSkge1xuICAgICAgcmVzdWx0W25hbWVdID0gY2FsbGJhY2suY2FsbChjb250ZXh0LCBvYmplY3RbbmFtZV0sIG5hbWUsIG9iamVjdCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwT2JqZWN0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIG1lbW9pemVTdHJpbmdPbmx5XG4gKiBAdHlwZWNoZWNrcyBzdGF0aWMtb25seVxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNZW1vaXplcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIG9uZSBzdHJpbmcgYXJndW1lbnQuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBtZW1vaXplU3RyaW5nT25seShjYWxsYmFjaykge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgIGlmICghY2FjaGUuaGFzT3duUHJvcGVydHkoc3RyaW5nKSkge1xuICAgICAgY2FjaGVbc3RyaW5nXSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW3N0cmluZ107XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZVN0cmluZ09ubHk7XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIG9ubHlDaGlsZFxuICovXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgaW4gYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuIGFuZCB2ZXJpZmllcyB0aGF0IHRoZXJlXG4gKiBpcyBvbmx5IG9uZSBjaGlsZCBpbiB0aGUgY29sbGVjdGlvbi4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhpc1xuICogZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHMgcGFzc2VkIHdpdGhvdXQgYSB3cmFwcGVyLCBidXQgdGhlXG4gKiBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvIGFic3RyYWN0IGF3YXkgdGhlIHBhcnRpY3VsYXIgc3RydWN0dXJlXG4gKiBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IFRoZSBmaXJzdCBhbmQgb25seSBgUmVhY3RDb21wb25lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSxcbiAgICAnb25seUNoaWxkIG11c3QgYmUgcGFzc2VkIGEgY2hpbGRyZW4gd2l0aCBleGFjdGx5IG9uZSBjaGlsZC4nXG4gICkgOiBpbnZhcmlhbnQoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkpO1xuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb25seUNoaWxkO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2YjI1c2VVTm9hV3hrTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCRGIzQjVjbWxuYUhRZ01qQXhNeTB5TURFMUxDQkdZV05sWW05dmF5d2dTVzVqTGx4dUlDb2dRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzVjYmlBcVhHNGdLaUJVYUdseklITnZkWEpqWlNCamIyUmxJR2x6SUd4cFkyVnVjMlZrSUhWdVpHVnlJSFJvWlNCQ1UwUXRjM1I1YkdVZ2JHbGpaVzV6WlNCbWIzVnVaQ0JwYmlCMGFHVmNiaUFxSUV4SlEwVk9VMFVnWm1sc1pTQnBiaUIwYUdVZ2NtOXZkQ0JrYVhKbFkzUnZjbmtnYjJZZ2RHaHBjeUJ6YjNWeVkyVWdkSEpsWlM0Z1FXNGdZV1JrYVhScGIyNWhiQ0JuY21GdWRGeHVJQ29nYjJZZ2NHRjBaVzUwSUhKcFoyaDBjeUJqWVc0Z1ltVWdabTkxYm1RZ2FXNGdkR2hsSUZCQlZFVk9WRk1nWm1sc1pTQnBiaUIwYUdVZ2MyRnRaU0JrYVhKbFkzUnZjbmt1WEc0Z0tseHVJQ29nUUhCeWIzWnBaR1Z6VFc5a2RXeGxJRzl1YkhsRGFHbHNaRnh1SUNvdlhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUJTWldGamRFVnNaVzFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFVnNaVzFsYm5SY0lpazdYRzVjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUIwYUdVZ1ptbHljM1FnWTJocGJHUWdhVzRnWVNCamIyeHNaV04wYVc5dUlHOW1JR05vYVd4a2NtVnVJR0Z1WkNCMlpYSnBabWxsY3lCMGFHRjBJSFJvWlhKbFhHNGdLaUJwY3lCdmJteDVJRzl1WlNCamFHbHNaQ0JwYmlCMGFHVWdZMjlzYkdWamRHbHZiaTRnVkdobElHTjFjbkpsYm5RZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRnYjJZZ2RHaHBjMXh1SUNvZ1puVnVZM1JwYjI0Z1lYTnpkVzFsY3lCMGFHRjBJR0VnYzJsdVoyeGxJR05vYVd4a0lHZGxkSE1nY0dGemMyVmtJSGRwZEdodmRYUWdZU0IzY21Gd2NHVnlMQ0JpZFhRZ2RHaGxYRzRnS2lCd2RYSndiM05sSUc5bUlIUm9hWE1nYUdWc2NHVnlJR1oxYm1OMGFXOXVJR2x6SUhSdklHRmljM1J5WVdOMElHRjNZWGtnZEdobElIQmhjblJwWTNWc1lYSWdjM1J5ZFdOMGRYSmxYRzRnS2lCdlppQmphR2xzWkhKbGJpNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2V6OXZZbXBsWTNSOUlHTm9hV3hrY21WdUlFTm9hV3hrSUdOdmJHeGxZM1JwYjI0Z2MzUnlkV04wZFhKbExseHVJQ29nUUhKbGRIVnliaUI3VW1WaFkzUkRiMjF3YjI1bGJuUjlJRlJvWlNCbWFYSnpkQ0JoYm1RZ2IyNXNlU0JnVW1WaFkzUkRiMjF3YjI1bGJuUmdJR052Ym5SaGFXNWxaQ0JwYmlCMGFHVmNiaUFxSUhOMGNuVmpkSFZ5WlM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYjI1c2VVTm9hV3hrS0dOb2FXeGtjbVZ1S1NCN1hHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ1VtVmhZM1JGYkdWdFpXNTBMbWx6Vm1Gc2FXUkZiR1Z0Wlc1MEtHTm9hV3hrY21WdUtTeGNiaUFnSUNBbmIyNXNlVU5vYVd4a0lHMTFjM1FnWW1VZ2NHRnpjMlZrSUdFZ1kyaHBiR1J5Wlc0Z2QybDBhQ0JsZUdGamRHeDVJRzl1WlNCamFHbHNaQzRuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvVW1WaFkzUkZiR1Z0Wlc1MExtbHpWbUZzYVdSRmJHVnRaVzUwS0dOb2FXeGtjbVZ1S1NrcE8xeHVJQ0J5WlhSMWNtNGdZMmhwYkdSeVpXNDdYRzU5WEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ2IyNXNlVU5vYVd4a08xeHVJbDE5IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHBlcmZvcm1hbmNlXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcblxudmFyIHBlcmZvcm1hbmNlO1xuXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIHBlcmZvcm1hbmNlID1cbiAgICB3aW5kb3cucGVyZm9ybWFuY2UgfHxcbiAgICB3aW5kb3cubXNQZXJmb3JtYW5jZSB8fFxuICAgIHdpbmRvdy53ZWJraXRQZXJmb3JtYW5jZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwZXJmb3JtYW5jZSB8fCB7fTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBwZXJmb3JtYW5jZU5vd1xuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgcGVyZm9ybWFuY2UgPSByZXF1aXJlKFwiLi9wZXJmb3JtYW5jZVwiKTtcblxuLyoqXG4gKiBEZXRlY3QgaWYgd2UgY2FuIHVzZSBgd2luZG93LnBlcmZvcm1hbmNlLm5vdygpYCBhbmQgZ3JhY2VmdWxseSBmYWxsYmFjayB0b1xuICogYERhdGUubm93KClgIGlmIGl0IGRvZXNuJ3QgZXhpc3QuIFdlIG5lZWQgdG8gc3VwcG9ydCBGaXJlZm94IDwgMTUgZm9yIG5vd1xuICogYmVjYXVzZSBvZiBGYWNlYm9vaydzIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuXG4gKi9cbmlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykge1xuICBwZXJmb3JtYW5jZSA9IERhdGU7XG59XG5cbnZhciBwZXJmb3JtYW5jZU5vdyA9IHBlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwZXJmb3JtYW5jZU5vdztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlclxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlciA9IHJlcXVpcmUoXCIuL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlclwiKTtcblxuLyoqXG4gKiBFc2NhcGVzIGF0dHJpYnV0ZSB2YWx1ZSB0byBwcmV2ZW50IHNjcmlwdGluZyBhdHRhY2tzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gZXNjYXBlLlxuICogQHJldHVybiB7c3RyaW5nfSBBbiBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIodmFsdWUpIHtcbiAgcmV0dXJuICdcIicgKyBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIodmFsdWUpICsgJ1wiJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBzZXRJbm5lckhUTUxcbiAqL1xuXG4vKiBnbG9iYWxzIE1TQXBwICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZShcIi4vRXhlY3V0aW9uRW52aXJvbm1lbnRcIik7XG5cbnZhciBXSElURVNQQUNFX1RFU1QgPSAvXlsgXFxyXFxuXFx0XFxmXS87XG52YXIgTk9OVklTSUJMRV9URVNUID0gLzwoIS0tfGxpbmt8bm9zY3JpcHR8bWV0YXxzY3JpcHR8c3R5bGUpWyBcXHJcXG5cXHRcXGZcXC8+XS87XG5cbi8qKlxuICogU2V0IHRoZSBpbm5lckhUTUwgcHJvcGVydHkgb2YgYSBub2RlLCBlbnN1cmluZyB0aGF0IHdoaXRlc3BhY2UgaXMgcHJlc2VydmVkXG4gKiBldmVuIGluIElFOC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIHNldElubmVySFRNTCA9IGZ1bmN0aW9uKG5vZGUsIGh0bWwpIHtcbiAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xufTtcblxuLy8gV2luOCBhcHBzOiBBbGxvdyBhbGwgaHRtbCB0byBiZSBpbnNlcnRlZFxuaWYgKHR5cGVvZiBNU0FwcCAhPT0gJ3VuZGVmaW5lZCcgJiYgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24pIHtcbiAgc2V0SW5uZXJIVE1MID0gZnVuY3Rpb24obm9kZSwgaHRtbCkge1xuICAgIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xuICAgIH0pO1xuICB9O1xufVxuXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIC8vIElFODogV2hlbiB1cGRhdGluZyBhIGp1c3QgY3JlYXRlZCBub2RlIHdpdGggaW5uZXJIVE1MIG9ubHkgbGVhZGluZ1xuICAvLyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQuIFdoZW4gdXBkYXRpbmcgYW4gZXhpc3Rpbmcgbm9kZSB3aXRoIGlubmVySFRNTFxuICAvLyB3aGl0ZXNwYWNlIGluIHJvb3QgVGV4dE5vZGVzIGlzIGFsc28gY29sbGFwc2VkLlxuICAvLyBAc2VlIHF1aXJrc21vZGUub3JnL2J1Z3JlcG9ydHMvYXJjaGl2ZXMvMjAwNC8xMS9pbm5lcmh0bWxfYW5kX3QuaHRtbFxuXG4gIC8vIEZlYXR1cmUgZGV0ZWN0aW9uOyBvbmx5IElFOCBpcyBrbm93biB0byBiZWhhdmUgaW1wcm9wZXJseSBsaWtlIHRoaXMuXG4gIHZhciB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSAnICc7XG4gIGlmICh0ZXN0RWxlbWVudC5pbm5lckhUTUwgPT09ICcnKSB7XG4gICAgc2V0SW5uZXJIVE1MID0gZnVuY3Rpb24obm9kZSwgaHRtbCkge1xuICAgICAgLy8gTWFnaWMgdGhlb3J5OiBJRTggc3VwcG9zZWRseSBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIGFkZGVkIGFuZCB1cGRhdGVkXG4gICAgICAvLyBub2RlcyB3aGVuIHByb2Nlc3NpbmcgaW5uZXJIVE1MLCBpbm5lckhUTUwgb24gdXBkYXRlZCBub2RlcyBzdWZmZXJzXG4gICAgICAvLyBmcm9tIHdvcnNlIHdoaXRlc3BhY2UgYmVoYXZpb3IuIFJlLWFkZGluZyBhIG5vZGUgbGlrZSB0aGlzIHRyaWdnZXJzXG4gICAgICAvLyB0aGUgaW5pdGlhbCBhbmQgbW9yZSBmYXZvcmFibGUgd2hpdGVzcGFjZSBiZWhhdmlvci5cbiAgICAgIC8vIFRPRE86IFdoYXQgdG8gZG8gb24gYSBkZXRhY2hlZCBub2RlP1xuICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5vZGUsIG5vZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBhbHNvIGltcGxlbWVudCBhIHdvcmthcm91bmQgZm9yIG5vbi12aXNpYmxlIHRhZ3MgZGlzYXBwZWFyaW5nIGludG9cbiAgICAgIC8vIHRoaW4gYWlyIG9uIElFOCwgdGhpcyBvbmx5IGhhcHBlbnMgaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSB0ZXh0XG4gICAgICAvLyBpbi1mcm9udCBvZiB0aGUgbm9uLXZpc2libGUgdGFncy4gUGlnZ3liYWNrIG9uIHRoZSB3aGl0ZXNwYWNlIGZpeFxuICAgICAgLy8gYW5kIHNpbXBseSBjaGVjayBpZiBhbnkgbm9uLXZpc2libGUgdGFncyBhcHBlYXIgaW4gdGhlIHNvdXJjZS5cbiAgICAgIGlmIChXSElURVNQQUNFX1RFU1QudGVzdChodG1sKSB8fFxuICAgICAgICAgIGh0bWxbMF0gPT09ICc8JyAmJiBOT05WSVNJQkxFX1RFU1QudGVzdChodG1sKSkge1xuICAgICAgICAvLyBSZWNvdmVyIGxlYWRpbmcgd2hpdGVzcGFjZSBieSB0ZW1wb3JhcmlseSBwcmVwZW5kaW5nIGFueSBjaGFyYWN0ZXIuXG4gICAgICAgIC8vIFxcdUZFRkYgaGFzIHRoZSBwb3RlbnRpYWwgYWR2YW50YWdlIG9mIGJlaW5nIHplcm8td2lkdGgvaW52aXNpYmxlLlxuICAgICAgICBub2RlLmlubmVySFRNTCA9ICdcXHVGRUZGJyArIGh0bWw7XG5cbiAgICAgICAgLy8gZGVsZXRlRGF0YSBsZWF2ZXMgYW4gZW1wdHkgYFRleHROb2RlYCB3aGljaCBvZmZzZXRzIHRoZSBpbmRleCBvZiBhbGxcbiAgICAgICAgLy8gY2hpbGRyZW4uIERlZmluaXRlbHkgd2FudCB0byBhdm9pZCB0aGlzLlxuICAgICAgICB2YXIgdGV4dE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmICh0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQodGV4dE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHROb2RlLmRlbGV0ZURhdGEoMCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0SW5uZXJIVE1MO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHNldFRleHRDb250ZW50XG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKFwiLi9FeGVjdXRpb25FbnZpcm9ubWVudFwiKTtcbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJlKFwiLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXJcIik7XG52YXIgc2V0SW5uZXJIVE1MID0gcmVxdWlyZShcIi4vc2V0SW5uZXJIVE1MXCIpO1xuXG4vKipcbiAqIFNldCB0aGUgdGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLCBlbnN1cmluZyB0aGF0IHdoaXRlc3BhY2UgaXMgcHJlc2VydmVkXG4gKiBldmVuIGluIElFOC4gaW5uZXJUZXh0IGlzIGEgcG9vciBzdWJzdGl0dXRlIGZvciB0ZXh0Q29udGVudCBhbmQsIGFtb25nIG1hbnlcbiAqIGlzc3VlcywgaW5zZXJ0cyA8YnI+IGluc3RlYWQgb2YgdGhlIGxpdGVyYWwgbmV3bGluZSBjaGFycy4gaW5uZXJIVE1MIGJlaGF2ZXNcbiAqIGFzIGl0IHNob3VsZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24obm9kZSwgdGV4dCkge1xuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn07XG5cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgaWYgKCEoJ3RleHRDb250ZW50JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbihub2RlLCB0ZXh0KSB7XG4gICAgICBzZXRJbm5lckhUTUwobm9kZSwgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHRleHQpKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VGV4dENvbnRlbnQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAcHJvdmlkZXNNb2R1bGUgc2hhbGxvd0VxdWFsXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmdcbiAqIGZhbHNlIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlblxuICogb2JqQSBhbmQgb2JqQi4gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKG9iakEgPT09IG9iakIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIga2V5O1xuICAvLyBUZXN0IGZvciBBJ3Mga2V5cyBkaWZmZXJlbnQgZnJvbSBCLlxuICBmb3IgKGtleSBpbiBvYmpBKSB7XG4gICAgaWYgKG9iakEuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAoIW9iakIuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBvYmpBW2tleV0gIT09IG9iakJba2V5XSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gVGVzdCBmb3IgQidzIGtleXMgbWlzc2luZyBmcm9tIEEuXG4gIGZvciAoa2V5IGluIG9iakIpIHtcbiAgICBpZiAob2JqQi5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFvYmpBLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hhbGxvd0VxdWFsO1xuIiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxuLyoqXG4gKiBHaXZlbiBhIGBwcmV2RWxlbWVudGAgYW5kIGBuZXh0RWxlbWVudGAsIGRldGVybWluZXMgaWYgdGhlIGV4aXN0aW5nXG4gKiBpbnN0YW5jZSBzaG91bGQgYmUgdXBkYXRlZCBhcyBvcHBvc2VkIHRvIGJlaW5nIGRlc3Ryb3llZCBvciByZXBsYWNlZCBieSBhIG5ld1xuICogaW5zdGFuY2UuIEJvdGggYXJndW1lbnRzIGFyZSBlbGVtZW50cy4gVGhpcyBlbnN1cmVzIHRoYXQgdGhpcyBsb2dpYyBjYW5cbiAqIG9wZXJhdGUgb24gc3RhdGVsZXNzIHRyZWVzIHdpdGhvdXQgYW55IGJhY2tpbmcgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2RWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0RWxlbWVudFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXhpc3RpbmcgaW5zdGFuY2Ugc2hvdWxkIGJlIHVwZGF0ZWQuXG4gKiBAcHJvdGVjdGVkXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCkge1xuICBpZiAocHJldkVsZW1lbnQgIT0gbnVsbCAmJiBuZXh0RWxlbWVudCAhPSBudWxsKSB7XG4gICAgdmFyIHByZXZUeXBlID0gdHlwZW9mIHByZXZFbGVtZW50O1xuICAgIHZhciBuZXh0VHlwZSA9IHR5cGVvZiBuZXh0RWxlbWVudDtcbiAgICBpZiAocHJldlR5cGUgPT09ICdzdHJpbmcnIHx8IHByZXZUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIChuZXh0VHlwZSA9PT0gJ3N0cmluZycgfHwgbmV4dFR5cGUgPT09ICdudW1iZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5leHRUeXBlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgIHByZXZFbGVtZW50LnR5cGUgPT09IG5leHRFbGVtZW50LnR5cGUgJiZcbiAgICAgICAgICBwcmV2RWxlbWVudC5rZXkgPT09IG5leHRFbGVtZW50LmtleSkge1xuICAgICAgICB2YXIgb3duZXJzTWF0Y2ggPSBwcmV2RWxlbWVudC5fb3duZXIgPT09IG5leHRFbGVtZW50Ll9vd25lcjtcbiAgICAgICAgdmFyIHByZXZOYW1lID0gbnVsbDtcbiAgICAgICAgdmFyIG5leHROYW1lID0gbnVsbDtcbiAgICAgICAgdmFyIG5leHREaXNwbGF5TmFtZSA9IG51bGw7XG4gICAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgICAgICBpZiAoIW93bmVyc01hdGNoKSB7XG4gICAgICAgICAgICBpZiAocHJldkVsZW1lbnQuX293bmVyICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBwcmV2RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKSAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgcHJldkVsZW1lbnQuX293bmVyLmdldFB1YmxpY0luc3RhbmNlKCkuY29uc3RydWN0b3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBwcmV2TmFtZSA9XG4gICAgICAgICAgICAgICAgcHJldkVsZW1lbnQuX293bmVyLmdldFB1YmxpY0luc3RhbmNlKCkuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQuX293bmVyICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5fb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKSAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuX293bmVyLmdldFB1YmxpY0luc3RhbmNlKCkuY29uc3RydWN0b3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBuZXh0TmFtZSA9XG4gICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuX293bmVyLmdldFB1YmxpY0luc3RhbmNlKCkuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQudHlwZSAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQudHlwZS5kaXNwbGF5TmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG5leHREaXNwbGF5TmFtZSA9IG5leHRFbGVtZW50LnR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQudHlwZSAhPSBudWxsICYmIHR5cGVvZiBuZXh0RWxlbWVudC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBuZXh0RGlzcGxheU5hbWUgPSBuZXh0RWxlbWVudC50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXh0RWxlbWVudC50eXBlICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgICAgIG5leHRFbGVtZW50LnR5cGUgPT09ICdpbnB1dCcgfHxcbiAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC50eXBlID09PSAndGV4dGFyZWEnKSB7XG4gICAgICAgICAgICAgIGlmICgocHJldkVsZW1lbnQuX293bmVyICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIHByZXZFbGVtZW50Ll9vd25lci5faXNPd25lck5lY2Vzc2FyeSA9PT0gZmFsc2UpIHx8XG4gICAgICAgICAgICAgICAgICAobmV4dEVsZW1lbnQuX293bmVyICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgIG5leHRFbGVtZW50Ll9vd25lci5faXNPd25lck5lY2Vzc2FyeSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZFbGVtZW50Ll9vd25lciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBwcmV2RWxlbWVudC5fb3duZXIuX2lzT3duZXJOZWNlc3NhcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQuX293bmVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIG5leHRFbGVtZW50Ll9vd25lci5faXNPd25lck5lY2Vzc2FyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAnPCVzIC8+IGlzIGJlaW5nIHJlbmRlcmVkIGJ5IGJvdGggJXMgYW5kICVzIHVzaW5nIHRoZSBzYW1lICcgK1xuICAgICAgICAgICAgICAgICAgJ2tleSAoJXMpIGluIHRoZSBzYW1lIHBsYWNlLiBDdXJyZW50bHksIHRoaXMgbWVhbnMgdGhhdCAnICtcbiAgICAgICAgICAgICAgICAgICd0aGV5IGRvblxcJ3QgcHJlc2VydmUgc3RhdGUuIFRoaXMgYmVoYXZpb3Igc2hvdWxkIGJlIHZlcnkgJyArXG4gICAgICAgICAgICAgICAgICAncmFyZSBzbyB3ZVxcJ3JlIGNvbnNpZGVyaW5nIGRlcHJlY2F0aW5nIGl0LiBQbGVhc2UgY29udGFjdCAnICtcbiAgICAgICAgICAgICAgICAgICd0aGUgUmVhY3QgdGVhbSBhbmQgZXhwbGFpbiB5b3VyIHVzZSBjYXNlIHNvIHRoYXQgd2UgY2FuICcgK1xuICAgICAgICAgICAgICAgICAgJ3Rha2UgdGhhdCBpbnRvIGNvbnNpZGVyYXRpb24uJyxcbiAgICAgICAgICAgICAgICAgIG5leHREaXNwbGF5TmFtZSB8fCAnVW5rbm93biBDb21wb25lbnQnLFxuICAgICAgICAgICAgICAgICAgcHJldk5hbWUgfHwgJ1tVbmtub3duXScsXG4gICAgICAgICAgICAgICAgICBuZXh0TmFtZSB8fCAnW1Vua25vd25dJyxcbiAgICAgICAgICAgICAgICAgIHByZXZFbGVtZW50LmtleVxuICAgICAgICAgICAgICAgICkgOiBudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3duZXJzTWF0Y2g7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudDtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5eVpXRmpkQzlzYVdJdmMyaHZkV3hrVlhCa1lYUmxVbVZoWTNSRGIyMXdiMjVsYm5RdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUTI5d2VYSnBaMmgwSURJd01UTXRNakF4TlN3Z1JtRmpaV0p2YjJzc0lFbHVZeTVjYmlBcUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVYRzRnS2x4dUlDb2dWR2hwY3lCemIzVnlZMlVnWTI5a1pTQnBjeUJzYVdObGJuTmxaQ0IxYm1SbGNpQjBhR1VnUWxORUxYTjBlV3hsSUd4cFkyVnVjMlVnWm05MWJtUWdhVzRnZEdobFhHNGdLaUJNU1VORlRsTkZJR1pwYkdVZ2FXNGdkR2hsSUhKdmIzUWdaR2x5WldOMGIzSjVJRzltSUhSb2FYTWdjMjkxY21ObElIUnlaV1V1SUVGdUlHRmtaR2wwYVc5dVlXd2daM0poYm5SY2JpQXFJRzltSUhCaGRHVnVkQ0J5YVdkb2RITWdZMkZ1SUdKbElHWnZkVzVrSUdsdUlIUm9aU0JRUVZSRlRsUlRJR1pwYkdVZ2FXNGdkR2hsSUhOaGJXVWdaR2x5WldOMGIzSjVMbHh1SUNwY2JpQXFJRUJ3Y205MmFXUmxjMDF2WkhWc1pTQnphRzkxYkdSVmNHUmhkR1ZTWldGamRFTnZiWEJ2Ym1WdWRGeHVJQ29nUUhSNWNHVmphR1ZqYTNNZ2MzUmhkR2xqTFc5dWJIbGNiaUFxTDF4dVhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc1Y2JuWmhjaUIzWVhKdWFXNW5JRDBnY21WeGRXbHlaU2hjSWk0dmQyRnlibWx1WjF3aUtUdGNibHh1THlvcVhHNGdLaUJIYVhabGJpQmhJR0J3Y21WMlJXeGxiV1Z1ZEdBZ1lXNWtJR0J1WlhoMFJXeGxiV1Z1ZEdBc0lHUmxkR1Z5YldsdVpYTWdhV1lnZEdobElHVjRhWE4wYVc1blhHNGdLaUJwYm5OMFlXNWpaU0J6YUc5MWJHUWdZbVVnZFhCa1lYUmxaQ0JoY3lCdmNIQnZjMlZrSUhSdklHSmxhVzVuSUdSbGMzUnliM2xsWkNCdmNpQnlaWEJzWVdObFpDQmllU0JoSUc1bGQxeHVJQ29nYVc1emRHRnVZMlV1SUVKdmRHZ2dZWEpuZFcxbGJuUnpJR0Z5WlNCbGJHVnRaVzUwY3k0Z1ZHaHBjeUJsYm5OMWNtVnpJSFJvWVhRZ2RHaHBjeUJzYjJkcFl5QmpZVzVjYmlBcUlHOXdaWEpoZEdVZ2IyNGdjM1JoZEdWc1pYTnpJSFJ5WldWeklIZHBkR2h2ZFhRZ1lXNTVJR0poWTJ0cGJtY2dhVzV6ZEdGdVkyVXVYRzRnS2x4dUlDb2dRSEJoY21GdElIcy9iMkpxWldOMGZTQndjbVYyUld4bGJXVnVkRnh1SUNvZ1FIQmhjbUZ0SUhzL2IySnFaV04wZlNCdVpYaDBSV3hsYldWdWRGeHVJQ29nUUhKbGRIVnliaUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUIwYUdVZ1pYaHBjM1JwYm1jZ2FXNXpkR0Z1WTJVZ2MyaHZkV3hrSUdKbElIVndaR0YwWldRdVhHNGdLaUJBY0hKdmRHVmpkR1ZrWEc0Z0tpOWNibVoxYm1OMGFXOXVJSE5vYjNWc1pGVndaR0YwWlZKbFlXTjBRMjl0Y0c5dVpXNTBLSEJ5WlhaRmJHVnRaVzUwTENCdVpYaDBSV3hsYldWdWRDa2dlMXh1SUNCcFppQW9jSEpsZGtWc1pXMWxiblFnSVQwZ2JuVnNiQ0FtSmlCdVpYaDBSV3hsYldWdWRDQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ2RtRnlJSEJ5WlhaVWVYQmxJRDBnZEhsd1pXOW1JSEJ5WlhaRmJHVnRaVzUwTzF4dUlDQWdJSFpoY2lCdVpYaDBWSGx3WlNBOUlIUjVjR1Z2WmlCdVpYaDBSV3hsYldWdWREdGNiaUFnSUNCcFppQW9jSEpsZGxSNWNHVWdQVDA5SUNkemRISnBibWNuSUh4OElIQnlaWFpVZVhCbElEMDlQU0FuYm5WdFltVnlKeWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJQ2h1WlhoMFZIbHdaU0E5UFQwZ0ozTjBjbWx1WnljZ2ZId2dibVY0ZEZSNWNHVWdQVDA5SUNkdWRXMWlaWEluS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdhV1lnS0c1bGVIUlVlWEJsSUQwOVBTQW5iMkpxWldOMEp5QW1KbHh1SUNBZ0lDQWdJQ0FnSUhCeVpYWkZiR1Z0Wlc1MExuUjVjR1VnUFQwOUlHNWxlSFJGYkdWdFpXNTBMblI1Y0dVZ0ppWmNiaUFnSUNBZ0lDQWdJQ0J3Y21WMlJXeGxiV1Z1ZEM1clpYa2dQVDA5SUc1bGVIUkZiR1Z0Wlc1MExtdGxlU2tnZTF4dUlDQWdJQ0FnSUNCMllYSWdiM2R1WlhKelRXRjBZMmdnUFNCd2NtVjJSV3hsYldWdWRDNWZiM2R1WlhJZ1BUMDlJRzVsZUhSRmJHVnRaVzUwTGw5dmQyNWxjanRjYmlBZ0lDQWdJQ0FnZG1GeUlIQnlaWFpPWVcxbElEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2RtRnlJRzVsZUhST1lXMWxJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdkbUZ5SUc1bGVIUkVhWE53YkdGNVRtRnRaU0E5SUc1MWJHdzdYRzRnSUNBZ0lDQWdJR2xtSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWXBJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JVzkzYm1WeWMwMWhkR05vS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NISmxka1ZzWlcxbGJuUXVYMjkzYm1WeUlDRTlJRzUxYkd3Z0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbVYyUld4bGJXVnVkQzVmYjNkdVpYSXVaMlYwVUhWaWJHbGpTVzV6ZEdGdVkyVW9LU0FoUFNCdWRXeHNJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0hKbGRrVnNaVzFsYm5RdVgyOTNibVZ5TG1kbGRGQjFZbXhwWTBsdWMzUmhibU5sS0NrdVkyOXVjM1J5ZFdOMGIzSWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbVYyVG1GdFpTQTlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjSEpsZGtWc1pXMWxiblF1WDI5M2JtVnlMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2t1WTI5dWMzUnlkV04wYjNJdVpHbHpjR3hoZVU1aGJXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JtVjRkRVZzWlcxbGJuUXVYMjkzYm1WeUlDRTlJRzUxYkd3Z0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwUld4bGJXVnVkQzVmYjNkdVpYSXVaMlYwVUhWaWJHbGpTVzV6ZEdGdVkyVW9LU0FoUFNCdWRXeHNJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYm1WNGRFVnNaVzFsYm5RdVgyOTNibVZ5TG1kbGRGQjFZbXhwWTBsdWMzUmhibU5sS0NrdVkyOXVjM1J5ZFdOMGIzSWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwVG1GdFpTQTlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdibVY0ZEVWc1pXMWxiblF1WDI5M2JtVnlMbWRsZEZCMVlteHBZMGx1YzNSaGJtTmxLQ2t1WTI5dWMzUnlkV04wYjNJdVpHbHpjR3hoZVU1aGJXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JtVjRkRVZzWlcxbGJuUXVkSGx3WlNBaFBTQnVkV3hzSUNZbVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRVZzWlcxbGJuUXVkSGx3WlM1a2FYTndiR0Y1VG1GdFpTQWhQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFJFYVhOd2JHRjVUbUZ0WlNBOUlHNWxlSFJGYkdWdFpXNTBMblI1Y0dVdVpHbHpjR3hoZVU1aGJXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2JtVjRkRVZzWlcxbGJuUXVkSGx3WlNBaFBTQnVkV3hzSUNZbUlIUjVjR1Z2WmlCdVpYaDBSV3hsYldWdWRDNTBlWEJsSUQwOVBTQW5jM1J5YVc1bkp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwUkdsemNHeGhlVTVoYldVZ1BTQnVaWGgwUld4bGJXVnVkQzUwZVhCbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ1WlhoMFJXeGxiV1Z1ZEM1MGVYQmxJQ0U5UFNBbmMzUnlhVzVuSnlCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHNWxlSFJGYkdWdFpXNTBMblI1Y0dVZ1BUMDlJQ2RwYm5CMWRDY2dmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFJXeGxiV1Z1ZEM1MGVYQmxJRDA5UFNBbmRHVjRkR0Z5WldFbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2dvY0hKbGRrVnNaVzFsYm5RdVgyOTNibVZ5SUNFOUlHNTFiR3dnSmlaY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIQnlaWFpGYkdWdFpXNTBMbDl2ZDI1bGNpNWZhWE5QZDI1bGNrNWxZMlZ6YzJGeWVTQTlQVDBnWm1Gc2MyVXBJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBb2JtVjRkRVZzWlcxbGJuUXVYMjkzYm1WeUlDRTlJRzUxYkd3Z0ppWmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhSRmJHVnRaVzUwTGw5dmQyNWxjaTVmYVhOUGQyNWxjazVsWTJWemMyRnllU0E5UFQwZ1ptRnNjMlVwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEJ5WlhaRmJHVnRaVzUwTGw5dmQyNWxjaUFoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCd2NtVjJSV3hsYldWdWRDNWZiM2R1WlhJdVgybHpUM2R1WlhKT1pXTmxjM05oY25rZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ibVY0ZEVWc1pXMWxiblF1WDI5M2JtVnlJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc1bGVIUkZiR1Z0Wlc1MExsOXZkMjVsY2k1ZmFYTlBkMjVsY2s1bFkyVnpjMkZ5ZVNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUIzWVhKdWFXNW5LRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1Gc2MyVXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FuUENWeklDOCtJR2x6SUdKbGFXNW5JSEpsYm1SbGNtVmtJR0o1SUdKdmRHZ2dKWE1nWVc1a0lDVnpJSFZ6YVc1bklIUm9aU0J6WVcxbElDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSjJ0bGVTQW9KWE1wSUdsdUlIUm9aU0J6WVcxbElIQnNZV05sTGlCRGRYSnlaVzUwYkhrc0lIUm9hWE1nYldWaGJuTWdkR2hoZENBbklDdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2QwYUdWNUlHUnZibHhjSjNRZ2NISmxjMlZ5ZG1VZ2MzUmhkR1V1SUZSb2FYTWdZbVZvWVhacGIzSWdjMmh2ZFd4a0lHSmxJSFpsY25rZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FuY21GeVpTQnpieUIzWlZ4Y0ozSmxJR052Ym5OcFpHVnlhVzVuSUdSbGNISmxZMkYwYVc1bklHbDBMaUJRYkdWaGMyVWdZMjl1ZEdGamRDQW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNkMGFHVWdVbVZoWTNRZ2RHVmhiU0JoYm1RZ1pYaHdiR0ZwYmlCNWIzVnlJSFZ6WlNCallYTmxJSE52SUhSb1lYUWdkMlVnWTJGdUlDY2dLMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSjNSaGEyVWdkR2hoZENCcGJuUnZJR052Ym5OcFpHVnlZWFJwYjI0dUp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzVsZUhSRWFYTndiR0Y1VG1GdFpTQjhmQ0FuVlc1cmJtOTNiaUJEYjIxd2IyNWxiblFuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NISmxkazVoYldVZ2ZId2dKMXRWYm10dWIzZHVYU2NzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVpYaDBUbUZ0WlNCOGZDQW5XMVZ1YTI1dmQyNWRKeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCeVpYWkZiR1Z0Wlc1MExtdGxlVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2tnT2lCdWRXeHNLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjNkdVpYSnpUV0YwWTJnN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJtWVd4elpUdGNibjFjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCemFHOTFiR1JWY0dSaGRHVlNaV0ZqZEVOdmJYQnZibVZ1ZER0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSB0b0FycmF5XG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKFwiLi9pbnZhcmlhbnRcIik7XG5cbi8qKlxuICogQ29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gYXJyYXlzLlxuICpcbiAqIFRoaXMgQVBJIGFzc3VtZXMgdGhlIGNhbGxlciBrbm93cyB0aGUgY29udGVudHMgb2YgdGhlIGRhdGEgdHlwZS4gRm9yIGxlc3NcbiAqIHdlbGwgZGVmaW5lZCBpbnB1dHMgdXNlIGNyZWF0ZUFycmF5RnJvbU1peGVkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufGZpbGVsaXN0fSBvYmpcbiAqIEByZXR1cm4ge2FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICB2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aDtcblxuICAvLyBTb21lIGJyb3dzZSBidWlsdGluIG9iamVjdHMgY2FuIHJlcG9ydCB0eXBlb2YgJ2Z1bmN0aW9uJyAoZS5nLiBOb2RlTGlzdCBpblxuICAvLyBvbGQgdmVyc2lvbnMgb2YgU2FmYXJpKS5cbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAhQXJyYXkuaXNBcnJheShvYmopICYmXG4gICAgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpLFxuICAgICd0b0FycmF5OiBBcnJheS1saWtlIG9iamVjdCBleHBlY3RlZCdcbiAgKSA6IGludmFyaWFudCghQXJyYXkuaXNBcnJheShvYmopICYmXG4gICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSkpO1xuXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgdHlwZW9mIGxlbmd0aCA9PT0gJ251bWJlcicsXG4gICAgJ3RvQXJyYXk6IE9iamVjdCBuZWVkcyBhIGxlbmd0aCBwcm9wZXJ0eSdcbiAgKSA6IGludmFyaWFudCh0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJykpO1xuXG4gIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgbGVuZ3RoID09PSAwIHx8XG4gICAgKGxlbmd0aCAtIDEpIGluIG9iaixcbiAgICAndG9BcnJheTogT2JqZWN0IHNob3VsZCBoYXZlIGtleXMgZm9yIGluZGljZXMnXG4gICkgOiBpbnZhcmlhbnQobGVuZ3RoID09PSAwIHx8XG4gIChsZW5ndGggLSAxKSBpbiBvYmopKTtcblxuICAvLyBPbGQgSUUgZG9lc24ndCBnaXZlIGNvbGxlY3Rpb25zIGFjY2VzcyB0byBoYXNPd25Qcm9wZXJ0eS4gQXNzdW1lIGlucHV0c1xuICAvLyB3aXRob3V0IG1ldGhvZCB3aWxsIHRocm93IGR1cmluZyB0aGUgc2xpY2UgY2FsbCBhbmQgc2tpcCBzdHJhaWdodCB0byB0aGVcbiAgLy8gZmFsbGJhY2suXG4gIGlmIChvYmouaGFzT3duUHJvcGVydHkpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSUUgPCA5IGRvZXMgbm90IHN1cHBvcnQgQXJyYXkjc2xpY2Ugb24gY29sbGVjdGlvbnMgb2JqZWN0c1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byBjb3B5aW5nIGtleSBieSBrZXkuIFRoaXMgYXNzdW1lcyBhbGwga2V5cyBoYXZlIGEgdmFsdWUsXG4gIC8vIHNvIHdpbGwgbm90IHByZXNlcnZlIHNwYXJzZWx5IHBvcHVsYXRlZCBpbnB1dHMuXG4gIHZhciByZXQgPSBBcnJheShsZW5ndGgpO1xuICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgbGVuZ3RoOyBpaSsrKSB7XG4gICAgcmV0W2lpXSA9IG9ialtpaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0FycmF5O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2ZEc5QmNuSmhlUzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRU52Y0hseWFXZG9kQ0F5TURFMExUSXdNVFVzSUVaaFkyVmliMjlyTENCSmJtTXVYRzRnS2lCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ3BjYmlBcUlGUm9hWE1nYzI5MWNtTmxJR052WkdVZ2FYTWdiR2xqWlc1elpXUWdkVzVrWlhJZ2RHaGxJRUpUUkMxemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHbHVJSFJvWlZ4dUlDb2dURWxEUlU1VFJTQm1hV3hsSUdsdUlIUm9aU0J5YjI5MElHUnBjbVZqZEc5eWVTQnZaaUIwYUdseklITnZkWEpqWlNCMGNtVmxMaUJCYmlCaFpHUnBkR2x2Ym1Gc0lHZHlZVzUwWEc0Z0tpQnZaaUJ3WVhSbGJuUWdjbWxuYUhSeklHTmhiaUJpWlNCbWIzVnVaQ0JwYmlCMGFHVWdVRUZVUlU1VVV5Qm1hV3hsSUdsdUlIUm9aU0J6WVcxbElHUnBjbVZqZEc5eWVTNWNiaUFxWEc0Z0tpQkFjSEp2ZG1sa1pYTk5iMlIxYkdVZ2RHOUJjbkpoZVZ4dUlDb2dRSFI1Y0dWamFHVmphM05jYmlBcUwxeHVYRzUyWVhJZ2FXNTJZWEpwWVc1MElEMGdjbVZ4ZFdseVpTaGNJaTR2YVc1MllYSnBZVzUwWENJcE8xeHVYRzR2S2lwY2JpQXFJRU52Ym5abGNuUWdZWEp5WVhrdGJHbHJaU0J2WW1wbFkzUnpJSFJ2SUdGeWNtRjVjeTVjYmlBcVhHNGdLaUJVYUdseklFRlFTU0JoYzNOMWJXVnpJSFJvWlNCallXeHNaWElnYTI1dmQzTWdkR2hsSUdOdmJuUmxiblJ6SUc5bUlIUm9aU0JrWVhSaElIUjVjR1V1SUVadmNpQnNaWE56WEc0Z0tpQjNaV3hzSUdSbFptbHVaV1FnYVc1d2RYUnpJSFZ6WlNCamNtVmhkR1ZCY25KaGVVWnliMjFOYVhobFpDNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyOWlhbVZqZEh4bWRXNWpkR2x2Ym54bWFXeGxiR2x6ZEgwZ2IySnFYRzRnS2lCQWNtVjBkWEp1SUh0aGNuSmhlWDFjYmlBcUwxeHVablZ1WTNScGIyNGdkRzlCY25KaGVTaHZZbW9wSUh0Y2JpQWdkbUZ5SUd4bGJtZDBhQ0E5SUc5aWFpNXNaVzVuZEdnN1hHNWNiaUFnTHk4Z1UyOXRaU0JpY205M2MyVWdZblZwYkhScGJpQnZZbXBsWTNSeklHTmhiaUJ5WlhCdmNuUWdkSGx3Wlc5bUlDZG1kVzVqZEdsdmJpY2dLR1V1Wnk0Z1RtOWtaVXhwYzNRZ2FXNWNiaUFnTHk4Z2IyeGtJSFpsY25OcGIyNXpJRzltSUZOaFptRnlhU2t1WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSVVGeWNtRjVMbWx6UVhKeVlYa29iMkpxS1NBbUpseHVJQ0FnSUNoMGVYQmxiMllnYjJKcUlEMDlQU0FuYjJKcVpXTjBKeUI4ZkNCMGVYQmxiMllnYjJKcUlEMDlQU0FuWm5WdVkzUnBiMjRuS1N4Y2JpQWdJQ0FuZEc5QmNuSmhlVG9nUVhKeVlYa3RiR2xyWlNCdlltcGxZM1FnWlhod1pXTjBaV1FuWEc0Z0lDa2dPaUJwYm5aaGNtbGhiblFvSVVGeWNtRjVMbWx6UVhKeVlYa29iMkpxS1NBbUpseHVJQ0FvZEhsd1pXOW1JRzlpYWlBOVBUMGdKMjlpYW1WamRDY2dmSHdnZEhsd1pXOW1JRzlpYWlBOVBUMGdKMloxYm1OMGFXOXVKeWtwS1R0Y2JseHVJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lIUjVjR1Z2WmlCc1pXNW5kR2dnUFQwOUlDZHVkVzFpWlhJbkxGeHVJQ0FnSUNkMGIwRnljbUY1T2lCUFltcGxZM1FnYm1WbFpITWdZU0JzWlc1bmRHZ2djSEp2Y0dWeWRIa25YRzRnSUNrZ09pQnBiblpoY21saGJuUW9kSGx3Wlc5bUlHeGxibWQwYUNBOVBUMGdKMjUxYldKbGNpY3BLVHRjYmx4dUlDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUd4bGJtZDBhQ0E5UFQwZ01DQjhmRnh1SUNBZ0lDaHNaVzVuZEdnZ0xTQXhLU0JwYmlCdlltb3NYRzRnSUNBZ0ozUnZRWEp5WVhrNklFOWlhbVZqZENCemFHOTFiR1FnYUdGMlpTQnJaWGx6SUdadmNpQnBibVJwWTJWekoxeHVJQ0FwSURvZ2FXNTJZWEpwWVc1MEtHeGxibWQwYUNBOVBUMGdNQ0I4ZkZ4dUlDQW9iR1Z1WjNSb0lDMGdNU2tnYVc0Z2IySnFLU2s3WEc1Y2JpQWdMeThnVDJ4a0lFbEZJR1J2WlhOdUozUWdaMmwyWlNCamIyeHNaV04wYVc5dWN5QmhZMk5sYzNNZ2RHOGdhR0Z6VDNkdVVISnZjR1Z5ZEhrdUlFRnpjM1Z0WlNCcGJuQjFkSE5jYmlBZ0x5OGdkMmwwYUc5MWRDQnRaWFJvYjJRZ2QybHNiQ0IwYUhKdmR5QmtkWEpwYm1jZ2RHaGxJSE5zYVdObElHTmhiR3dnWVc1a0lITnJhWEFnYzNSeVlXbG5hSFFnZEc4Z2RHaGxYRzRnSUM4dklHWmhiR3hpWVdOckxseHVJQ0JwWmlBb2IySnFMbWhoYzA5M2JsQnliM0JsY25SNUtTQjdYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQkJjbkpoZVM1d2NtOTBiM1I1Y0dVdWMyeHBZMlV1WTJGc2JDaHZZbW9wTzF4dUlDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUM4dklFbEZJRHdnT1NCa2IyVnpJRzV2ZENCemRYQndiM0owSUVGeWNtRjVJM05zYVdObElHOXVJR052Ykd4bFkzUnBiMjV6SUc5aWFtVmpkSE5jYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0F2THlCR1lXeHNJR0poWTJzZ2RHOGdZMjl3ZVdsdVp5QnJaWGtnWW5rZ2EyVjVMaUJVYUdseklHRnpjM1Z0WlhNZ1lXeHNJR3RsZVhNZ2FHRjJaU0JoSUhaaGJIVmxMRnh1SUNBdkx5QnpieUIzYVd4c0lHNXZkQ0J3Y21WelpYSjJaU0J6Y0dGeWMyVnNlU0J3YjNCMWJHRjBaV1FnYVc1d2RYUnpMbHh1SUNCMllYSWdjbVYwSUQwZ1FYSnlZWGtvYkdWdVozUm9LVHRjYmlBZ1ptOXlJQ2gyWVhJZ2FXa2dQU0F3T3lCcGFTQThJR3hsYm1kMGFEc2dhV2tyS3lrZ2UxeHVJQ0FnSUhKbGRGdHBhVjBnUFNCdlltcGJhV2xkTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhRN1hHNTlYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnZEc5QmNuSmhlVHRjYmlKZGZRPT0iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHRyYXZlcnNlQWxsQ2hpbGRyZW5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdEVsZW1lbnQgPSByZXF1aXJlKFwiLi9SZWFjdEVsZW1lbnRcIik7XG52YXIgUmVhY3RGcmFnbWVudCA9IHJlcXVpcmUoXCIuL1JlYWN0RnJhZ21lbnRcIik7XG52YXIgUmVhY3RJbnN0YW5jZUhhbmRsZXMgPSByZXF1aXJlKFwiLi9SZWFjdEluc3RhbmNlSGFuZGxlc1wiKTtcblxudmFyIGdldEl0ZXJhdG9yRm4gPSByZXF1aXJlKFwiLi9nZXRJdGVyYXRvckZuXCIpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoXCIuL2ludmFyaWFudFwiKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4vd2FybmluZ1wiKTtcblxudmFyIFNFUEFSQVRPUiA9IFJlYWN0SW5zdGFuY2VIYW5kbGVzLlNFUEFSQVRPUjtcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG5cbi8qKlxuICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5XG4gKiBwYXR0ZXJuLlxuICovXG5cbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVyTG9va3VwID0ge1xuICAnPSc6ICc9MCcsXG4gICcuJzogJz0xJyxcbiAgJzonOiAnPTInXG59O1xuXG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvWz0uOl0vZztcblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXNlclByb3ZpZGVkS2V5RXNjYXBlcihtYXRjaCkge1xuICByZXR1cm4gdXNlclByb3ZpZGVkS2V5RXNjYXBlckxvb2t1cFttYXRjaF07XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGNvbXBvbmVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBjb21wb25lbnQgQSBjb21wb25lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50S2V5KGNvbXBvbmVudCwgaW5kZXgpIHtcbiAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gd3JhcFVzZXJQcm92aWRlZEtleShjb21wb25lbnQua2V5KTtcbiAgfVxuICAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG4vKipcbiAqIEVzY2FwZSBhIGNvbXBvbmVudCBrZXkgc28gdGhhdCBpdCBpcyBzYWZlIHRvIHVzZSBpbiBhIHJlYWN0aWQuXG4gKlxuICogQHBhcmFtIHsqfSBrZXkgQ29tcG9uZW50IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBBbiBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuICgnJyArIHRleHQpLnJlcGxhY2UoXG4gICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsXG4gICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlclxuICApO1xufVxuXG4vKipcbiAqIFdyYXAgYSBga2V5YCB2YWx1ZSBleHBsaWNpdGx5IHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbiAqIGltcGxpY2l0bHktZ2VuZXJhdGVkIGtleXMgZ2VuZXJhdGVkIGJ5IGEgY29tcG9uZW50J3MgaW5kZXggaW4gaXRzIHBhcmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFZhbHVlIG9mIGEgdXNlci1wcm92aWRlZCBga2V5YCBhdHRyaWJ1dGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gd3JhcFVzZXJQcm92aWRlZEtleShrZXkpIHtcbiAgcmV0dXJuICckJyArIGVzY2FwZVVzZXJQcm92aWRlZEtleShrZXkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHshc3RyaW5nfSBuYW1lU29GYXIgTmFtZSBvZiB0aGUga2V5IHBhdGggc28gZmFyLlxuICogQHBhcmFtIHshbnVtYmVyfSBpbmRleFNvRmFyIE51bWJlciBvZiBjaGlsZHJlbiBlbmNvdW50ZXJlZCB1bnRpbCB0aGlzIHBvaW50LlxuICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHRvIGludm9rZSB3aXRoIGVhY2ggY2hpbGQgZm91bmQuXG4gKiBAcGFyYW0gez8qfSB0cmF2ZXJzZUNvbnRleHQgVXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRocm91Z2hvdXQgdGhlIHRyYXZlcnNhbFxuICogcHJvY2Vzcy5cbiAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVlLlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChcbiAgY2hpbGRyZW4sXG4gIG5hbWVTb0ZhcixcbiAgaW5kZXhTb0ZhcixcbiAgY2FsbGJhY2ssXG4gIHRyYXZlcnNlQ29udGV4dFxuKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwgfHxcbiAgICAgIHR5cGUgPT09ICdzdHJpbmcnIHx8XG4gICAgICB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAgICAgUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgIGNhbGxiYWNrKFxuICAgICAgdHJhdmVyc2VDb250ZXh0LFxuICAgICAgY2hpbGRyZW4sXG4gICAgICAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgICAgLy8gc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93cy5cbiAgICAgIG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRDb21wb25lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNvRmFyLFxuICAgICAgaW5kZXhTb0ZhclxuICAgICk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB2YXIgY2hpbGQsIG5leHROYW1lLCBuZXh0SW5kZXg7XG4gIHZhciBzdWJ0cmVlQ291bnQgPSAwOyAvLyBDb3VudCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLlxuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IChcbiAgICAgICAgKG5hbWVTb0ZhciAhPT0gJycgPyBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1IgOiBTRVBBUkFUT1IpICtcbiAgICAgICAgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpKVxuICAgICAgKTtcbiAgICAgIG5leHRJbmRleCA9IGluZGV4U29GYXIgKyBzdWJ0cmVlQ291bnQ7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoXG4gICAgICAgIGNoaWxkLFxuICAgICAgICBuZXh0TmFtZSxcbiAgICAgICAgbmV4dEluZGV4LFxuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgdHJhdmVyc2VDb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gY2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICB2YXIgaWkgPSAwO1xuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgY2hpbGQgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgIG5leHROYW1lID0gKFxuICAgICAgICAgICAgKG5hbWVTb0ZhciAhPT0gJycgPyBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1IgOiBTRVBBUkFUT1IpICtcbiAgICAgICAgICAgIGdldENvbXBvbmVudEtleShjaGlsZCwgaWkrKylcbiAgICAgICAgICApO1xuICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4U29GYXIgKyBzdWJ0cmVlQ291bnQ7XG4gICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKFxuICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICBuZXh0TmFtZSxcbiAgICAgICAgICAgIG5leHRJbmRleCxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgdHJhdmVyc2VDb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOVikge1xuICAgICAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyB3YXJuaW5nKFxuICAgICAgICAgICAgZGlkV2FybkFib3V0TWFwcyxcbiAgICAgICAgICAgICdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkLiBJdCBpcyBhbiAnICtcbiAgICAgICAgICAgICdleHBlcmltZW50YWwgZmVhdHVyZSB0aGF0IG1pZ2h0IGJlIHJlbW92ZWQuIENvbnZlcnQgaXQgdG8gYSAnICtcbiAgICAgICAgICAgICdzZXF1ZW5jZSAvIGl0ZXJhYmxlIG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nXG4gICAgICAgICAgKSA6IG51bGwpO1xuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgIGNoaWxkID0gZW50cnlbMV07XG4gICAgICAgICAgICBuZXh0TmFtZSA9IChcbiAgICAgICAgICAgICAgKG5hbWVTb0ZhciAhPT0gJycgPyBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1IgOiBTRVBBUkFUT1IpICtcbiAgICAgICAgICAgICAgd3JhcFVzZXJQcm92aWRlZEtleShlbnRyeVswXSkgKyBTVUJTRVBBUkFUT1IgK1xuICAgICAgICAgICAgICBnZXRDb21wb25lbnRLZXkoY2hpbGQsIDApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5kZXhTb0ZhciArIHN1YnRyZWVDb3VudDtcbiAgICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChcbiAgICAgICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgICAgIG5leHROYW1lLFxuICAgICAgICAgICAgICBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICB0cmF2ZXJzZUNvbnRleHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgICAgY2hpbGRyZW4ubm9kZVR5cGUgIT09IDEsXG4gICAgICAgICd0cmF2ZXJzZUFsbENoaWxkcmVuKC4uLik6IEVuY291bnRlcmVkIGFuIGludmFsaWQgY2hpbGQ7IERPTSAnICtcbiAgICAgICAgJ2VsZW1lbnRzIGFyZSBub3QgdmFsaWQgY2hpbGRyZW4gb2YgUmVhY3QgY29tcG9uZW50cy4nXG4gICAgICApIDogaW52YXJpYW50KGNoaWxkcmVuLm5vZGVUeXBlICE9PSAxKSk7XG4gICAgICB2YXIgZnJhZ21lbnQgPSBSZWFjdEZyYWdtZW50LmV4dHJhY3QoY2hpbGRyZW4pO1xuICAgICAgZm9yICh2YXIga2V5IGluIGZyYWdtZW50KSB7XG4gICAgICAgIGlmIChmcmFnbWVudC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgY2hpbGQgPSBmcmFnbWVudFtrZXldO1xuICAgICAgICAgIG5leHROYW1lID0gKFxuICAgICAgICAgICAgKG5hbWVTb0ZhciAhPT0gJycgPyBuYW1lU29GYXIgKyBTVUJTRVBBUkFUT1IgOiBTRVBBUkFUT1IpICtcbiAgICAgICAgICAgIHdyYXBVc2VyUHJvdmlkZWRLZXkoa2V5KSArIFNVQlNFUEFSQVRPUiArXG4gICAgICAgICAgICBnZXRDb21wb25lbnRLZXkoY2hpbGQsIDApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleFNvRmFyICsgc3VidHJlZUNvdW50O1xuICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChcbiAgICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgICAgbmV4dE5hbWUsXG4gICAgICAgICAgICBuZXh0SW5kZXgsXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIHRyYXZlcnNlQ29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3VidHJlZUNvdW50O1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAsIGJ1dFxuICogbWlnaHQgYWxzbyBiZSBzcGVjaWZpZWQgdGhyb3VnaCBhdHRyaWJ1dGVzOlxuICpcbiAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbiwgLi4uKWBcbiAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5sZWZ0UGFuZWxDaGlsZHJlbiwgLi4uKWBcbiAqXG4gKiBUaGUgYHRyYXZlcnNlQ29udGV4dGAgaXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgdGhhdCBpcyBwYXNzZWQgdGhyb3VnaCB0aGVcbiAqIGVudGlyZSB0cmF2ZXJzYWwuIEl0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGFjY3VtdWxhdGlvbnMgb3IgYW55dGhpbmcgZWxzZSB0aGF0XG4gKiB0aGUgY2FsbGJhY2sgbWlnaHQgZmluZCByZWxldmFudC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIG9iamVjdC5cbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBUbyBpbnZva2UgdXBvbiB0cmF2ZXJzaW5nIGVhY2ggY2hpbGQuXG4gKiBAcGFyYW0gez8qfSB0cmF2ZXJzZUNvbnRleHQgQ29udGV4dCBmb3IgdHJhdmVyc2FsLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwgJycsIDAsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRyYXZlcnNlQWxsQ2hpbGRyZW47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZkSEpoZG1WeWMyVkJiR3hEYUdsc1pISmxiaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEVpTENKbWFXeGxJam9pWjJWdVpYSmhkR1ZrTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1EyOXdlWEpwWjJoMElESXdNVE10TWpBeE5Td2dSbUZqWldKdmIyc3NJRWx1WXk1Y2JpQXFJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1WEc0Z0tseHVJQ29nVkdocGN5QnpiM1Z5WTJVZ1kyOWtaU0JwY3lCc2FXTmxibk5sWkNCMWJtUmxjaUIwYUdVZ1FsTkVMWE4wZVd4bElHeHBZMlZ1YzJVZ1ptOTFibVFnYVc0Z2RHaGxYRzRnS2lCTVNVTkZUbE5GSUdacGJHVWdhVzRnZEdobElISnZiM1FnWkdseVpXTjBiM0o1SUc5bUlIUm9hWE1nYzI5MWNtTmxJSFJ5WldVdUlFRnVJR0ZrWkdsMGFXOXVZV3dnWjNKaGJuUmNiaUFxSUc5bUlIQmhkR1Z1ZENCeWFXZG9kSE1nWTJGdUlHSmxJR1p2ZFc1a0lHbHVJSFJvWlNCUVFWUkZUbFJUSUdacGJHVWdhVzRnZEdobElITmhiV1VnWkdseVpXTjBiM0o1TGx4dUlDcGNiaUFxSUVCd2NtOTJhV1JsYzAxdlpIVnNaU0IwY21GMlpYSnpaVUZzYkVOb2FXeGtjbVZ1WEc0Z0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1VtVmhZM1JGYkdWdFpXNTBJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JGYkdWdFpXNTBYQ0lwTzF4dWRtRnlJRkpsWVdOMFJuSmhaMjFsYm5RZ1BTQnlaWEYxYVhKbEtGd2lMaTlTWldGamRFWnlZV2R0Wlc1MFhDSXBPMXh1ZG1GeUlGSmxZV04wU1c1emRHRnVZMlZJWVc1a2JHVnpJRDBnY21WeGRXbHlaU2hjSWk0dlVtVmhZM1JKYm5OMFlXNWpaVWhoYm1Sc1pYTmNJaWs3WEc1Y2JuWmhjaUJuWlhSSmRHVnlZWFJ2Y2tadUlEMGdjbVZ4ZFdseVpTaGNJaTR2WjJWMFNYUmxjbUYwYjNKR2Jsd2lLVHRjYm5aaGNpQnBiblpoY21saGJuUWdQU0J5WlhGMWFYSmxLRndpTGk5cGJuWmhjbWxoYm5SY0lpazdYRzUyWVhJZ2QyRnlibWx1WnlBOUlISmxjWFZwY21Vb1hDSXVMM2RoY201cGJtZGNJaWs3WEc1Y2JuWmhjaUJUUlZCQlVrRlVUMUlnUFNCU1pXRmpkRWx1YzNSaGJtTmxTR0Z1Wkd4bGN5NVRSVkJCVWtGVVQxSTdYRzUyWVhJZ1UxVkNVMFZRUVZKQlZFOVNJRDBnSnpvbk8xeHVYRzR2S2lwY2JpQXFJRlJQUkU4NklGUmxjM1FnZEdoaGRDQmhJSE5wYm1kc1pTQmphR2xzWkNCaGJtUWdZVzRnWVhKeVlYa2dkMmwwYUNCdmJtVWdhWFJsYlNCb1lYWmxJSFJvWlNCellXMWxJR3RsZVZ4dUlDb2djR0YwZEdWeWJpNWNiaUFxTDF4dVhHNTJZWElnZFhObGNsQnliM1pwWkdWa1MyVjVSWE5qWVhCbGNreHZiMnQxY0NBOUlIdGNiaUFnSnowbk9pQW5QVEFuTEZ4dUlDQW5MaWM2SUNjOU1TY3NYRzRnSUNjNkp6b2dKejB5SjF4dWZUdGNibHh1ZG1GeUlIVnpaWEpRY205MmFXUmxaRXRsZVVWelkyRndaVkpsWjJWNElEMGdMMXM5TGpwZEwyYzdYRzVjYm5aaGNpQmthV1JYWVhKdVFXSnZkWFJOWVhCeklEMGdabUZzYzJVN1hHNWNibVoxYm1OMGFXOXVJSFZ6WlhKUWNtOTJhV1JsWkV0bGVVVnpZMkZ3WlhJb2JXRjBZMmdwSUh0Y2JpQWdjbVYwZFhKdUlIVnpaWEpRY205MmFXUmxaRXRsZVVWelkyRndaWEpNYjI5cmRYQmJiV0YwWTJoZE8xeHVmVnh1WEc0dktpcGNiaUFxSUVkbGJtVnlZWFJsSUdFZ2EyVjVJSE4wY21sdVp5QjBhR0YwSUdsa1pXNTBhV1pwWlhNZ1lTQmpiMjF3YjI1bGJuUWdkMmwwYUdsdUlHRWdjMlYwTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3S24wZ1kyOXRjRzl1Wlc1MElFRWdZMjl0Y0c5dVpXNTBJSFJvWVhRZ1kyOTFiR1FnWTI5dWRHRnBiaUJoSUcxaGJuVmhiQ0JyWlhrdVhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdhVzVrWlhnZ1NXNWtaWGdnZEdoaGRDQnBjeUIxYzJWa0lHbG1JR0VnYldGdWRXRnNJR3RsZVNCcGN5QnViM1FnY0hKdmRtbGtaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOVhHNGdLaTljYm1aMWJtTjBhVzl1SUdkbGRFTnZiWEJ2Ym1WdWRFdGxlU2hqYjIxd2IyNWxiblFzSUdsdVpHVjRLU0I3WEc0Z0lHbG1JQ2hqYjIxd2IyNWxiblFnSmlZZ1kyOXRjRzl1Wlc1MExtdGxlU0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdMeThnUlhod2JHbGphWFFnYTJWNVhHNGdJQ0FnY21WMGRYSnVJSGR5WVhCVmMyVnlVSEp2ZG1sa1pXUkxaWGtvWTI5dGNHOXVaVzUwTG10bGVTazdYRzRnSUgxY2JpQWdMeThnU1cxd2JHbGphWFFnYTJWNUlHUmxkR1Z5YldsdVpXUWdZbmtnZEdobElHbHVaR1Y0SUdsdUlIUm9aU0J6WlhSY2JpQWdjbVYwZFhKdUlHbHVaR1Y0TG5SdlUzUnlhVzVuS0RNMktUdGNibjFjYmx4dUx5b3FYRzRnS2lCRmMyTmhjR1VnWVNCamIyMXdiMjVsYm5RZ2EyVjVJSE52SUhSb1lYUWdhWFFnYVhNZ2MyRm1aU0IwYnlCMWMyVWdhVzRnWVNCeVpXRmpkR2xrTGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3S24wZ2EyVjVJRU52YlhCdmJtVnVkQ0JyWlhrZ2RHOGdZbVVnWlhOallYQmxaQzVjYmlBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ1FXNGdaWE5qWVhCbFpDQnpkSEpwYm1jdVhHNGdLaTljYm1aMWJtTjBhVzl1SUdWelkyRndaVlZ6WlhKUWNtOTJhV1JsWkV0bGVTaDBaWGgwS1NCN1hHNGdJSEpsZEhWeWJpQW9KeWNnS3lCMFpYaDBLUzV5WlhCc1lXTmxLRnh1SUNBZ0lIVnpaWEpRY205MmFXUmxaRXRsZVVWelkyRndaVkpsWjJWNExGeHVJQ0FnSUhWelpYSlFjbTkyYVdSbFpFdGxlVVZ6WTJGd1pYSmNiaUFnS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJYY21Gd0lHRWdZR3RsZVdBZ2RtRnNkV1VnWlhod2JHbGphWFJzZVNCd2NtOTJhV1JsWkNCaWVTQjBhR1VnZFhObGNpQjBieUJrYVhOMGFXNW5kV2x6YUNCcGRDQm1jbTl0WEc0Z0tpQnBiWEJzYVdOcGRHeDVMV2RsYm1WeVlYUmxaQ0JyWlhseklHZGxibVZ5WVhSbFpDQmllU0JoSUdOdmJYQnZibVZ1ZENkeklHbHVaR1Y0SUdsdUlHbDBjeUJ3WVhKbGJuUXVYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHdGxlU0JXWVd4MVpTQnZaaUJoSUhWelpYSXRjSEp2ZG1sa1pXUWdZR3RsZVdBZ1lYUjBjbWxpZFhSbFhHNGdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlYRzRnS2k5Y2JtWjFibU4wYVc5dUlIZHlZWEJWYzJWeVVISnZkbWxrWldSTFpYa29hMlY1S1NCN1hHNGdJSEpsZEhWeWJpQW5KQ2NnS3lCbGMyTmhjR1ZWYzJWeVVISnZkbWxrWldSTFpYa29hMlY1S1R0Y2JuMWNibHh1THlvcVhHNGdLaUJBY0dGeVlXMGdlejhxZlNCamFHbHNaSEpsYmlCRGFHbHNaSEpsYmlCMGNtVmxJR052Ym5SaGFXNWxjaTVjYmlBcUlFQndZWEpoYlNCN0lYTjBjbWx1WjMwZ2JtRnRaVk52Um1GeUlFNWhiV1VnYjJZZ2RHaGxJR3RsZVNCd1lYUm9JSE52SUdaaGNpNWNiaUFxSUVCd1lYSmhiU0I3SVc1MWJXSmxjbjBnYVc1a1pYaFRiMFpoY2lCT2RXMWlaWElnYjJZZ1kyaHBiR1J5Wlc0Z1pXNWpiM1Z1ZEdWeVpXUWdkVzUwYVd3Z2RHaHBjeUJ3YjJsdWRDNWNiaUFxSUVCd1lYSmhiU0I3SVdaMWJtTjBhVzl1ZlNCallXeHNZbUZqYXlCRFlXeHNZbUZqYXlCMGJ5QnBiblp2YTJVZ2QybDBhQ0JsWVdOb0lHTm9hV3hrSUdadmRXNWtMbHh1SUNvZ1FIQmhjbUZ0SUhzL0tuMGdkSEpoZG1WeWMyVkRiMjUwWlhoMElGVnpaV1FnZEc4Z2NHRnpjeUJwYm1admNtMWhkR2x2YmlCMGFISnZkV2RvYjNWMElIUm9aU0IwY21GMlpYSnpZV3hjYmlBcUlIQnliMk5sYzNNdVhHNGdLaUJBY21WMGRYSnVJSHNoYm5WdFltVnlmU0JVYUdVZ2JuVnRZbVZ5SUc5bUlHTm9hV3hrY21WdUlHbHVJSFJvYVhNZ2MzVmlkSEpsWlM1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnZEhKaGRtVnljMlZCYkd4RGFHbHNaSEpsYmtsdGNHd29YRzRnSUdOb2FXeGtjbVZ1TEZ4dUlDQnVZVzFsVTI5R1lYSXNYRzRnSUdsdVpHVjRVMjlHWVhJc1hHNGdJR05oYkd4aVlXTnJMRnh1SUNCMGNtRjJaWEp6WlVOdmJuUmxlSFJjYmlrZ2UxeHVJQ0IyWVhJZ2RIbHdaU0E5SUhSNWNHVnZaaUJqYUdsc1pISmxianRjYmx4dUlDQnBaaUFvZEhsd1pTQTlQVDBnSjNWdVpHVm1hVzVsWkNjZ2ZId2dkSGx3WlNBOVBUMGdKMkp2YjJ4bFlXNG5LU0I3WEc0Z0lDQWdMeThnUVd4c0lHOW1JSFJvWlNCaFltOTJaU0JoY21VZ2NHVnlZMlZwZG1Wa0lHRnpJRzUxYkd3dVhHNGdJQ0FnWTJocGJHUnlaVzRnUFNCdWRXeHNPMXh1SUNCOVhHNWNiaUFnYVdZZ0tHTm9hV3hrY21WdUlEMDlQU0J1ZFd4c0lIeDhYRzRnSUNBZ0lDQjBlWEJsSUQwOVBTQW5jM1J5YVc1bkp5QjhmRnh1SUNBZ0lDQWdkSGx3WlNBOVBUMGdKMjUxYldKbGNpY2dmSHhjYmlBZ0lDQWdJRkpsWVdOMFJXeGxiV1Z1ZEM1cGMxWmhiR2xrUld4bGJXVnVkQ2hqYUdsc1pISmxiaWtwSUh0Y2JpQWdJQ0JqWVd4c1ltRmpheWhjYmlBZ0lDQWdJSFJ5WVhabGNuTmxRMjl1ZEdWNGRDeGNiaUFnSUNBZ0lHTm9hV3hrY21WdUxGeHVJQ0FnSUNBZ0x5OGdTV1lnYVhRbmN5QjBhR1VnYjI1c2VTQmphR2xzWkN3Z2RISmxZWFFnZEdobElHNWhiV1VnWVhNZ2FXWWdhWFFnZDJGeklIZHlZWEJ3WldRZ2FXNGdZVzRnWVhKeVlYbGNiaUFnSUNBZ0lDOHZJSE52SUhSb1lYUWdhWFFuY3lCamIyNXphWE4wWlc1MElHbG1JSFJvWlNCdWRXMWlaWElnYjJZZ1kyaHBiR1J5Wlc0Z1ozSnZkM011WEc0Z0lDQWdJQ0J1WVcxbFUyOUdZWElnUFQwOUlDY25JRDhnVTBWUVFWSkJWRTlTSUNzZ1oyVjBRMjl0Y0c5dVpXNTBTMlY1S0dOb2FXeGtjbVZ1TENBd0tTQTZJRzVoYldWVGIwWmhjaXhjYmlBZ0lDQWdJR2x1WkdWNFUyOUdZWEpjYmlBZ0lDQXBPMXh1SUNBZ0lISmxkSFZ5YmlBeE8xeHVJQ0I5WEc1Y2JpQWdkbUZ5SUdOb2FXeGtMQ0J1WlhoMFRtRnRaU3dnYm1WNGRFbHVaR1Y0TzF4dUlDQjJZWElnYzNWaWRISmxaVU52ZFc1MElEMGdNRHNnTHk4Z1EyOTFiblFnYjJZZ1kyaHBiR1J5Wlc0Z1ptOTFibVFnYVc0Z2RHaGxJR04xY25KbGJuUWdjM1ZpZEhKbFpTNWNibHh1SUNCcFppQW9RWEp5WVhrdWFYTkJjbkpoZVNoamFHbHNaSEpsYmlrcElIdGNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnYVNBOElHTm9hV3hrY21WdUxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JqYUdsc1pDQTlJR05vYVd4a2NtVnVXMmxkTzF4dUlDQWdJQ0FnYm1WNGRFNWhiV1VnUFNBb1hHNGdJQ0FnSUNBZ0lDaHVZVzFsVTI5R1lYSWdJVDA5SUNjbklEOGdibUZ0WlZOdlJtRnlJQ3NnVTFWQ1UwVlFRVkpCVkU5U0lEb2dVMFZRUVZKQlZFOVNLU0FyWEc0Z0lDQWdJQ0FnSUdkbGRFTnZiWEJ2Ym1WdWRFdGxlU2hqYUdsc1pDd2dhU2xjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0J1WlhoMFNXNWtaWGdnUFNCcGJtUmxlRk52Um1GeUlDc2djM1ZpZEhKbFpVTnZkVzUwTzF4dUlDQWdJQ0FnYzNWaWRISmxaVU52ZFc1MElDczlJSFJ5WVhabGNuTmxRV3hzUTJocGJHUnlaVzVKYlhCc0tGeHVJQ0FnSUNBZ0lDQmphR2xzWkN4Y2JpQWdJQ0FnSUNBZ2JtVjRkRTVoYldVc1hHNGdJQ0FnSUNBZ0lHNWxlSFJKYm1SbGVDeGNiaUFnSUNBZ0lDQWdZMkZzYkdKaFkyc3NYRzRnSUNBZ0lDQWdJSFJ5WVhabGNuTmxRMjl1ZEdWNGRGeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2RtRnlJR2wwWlhKaGRHOXlSbTRnUFNCblpYUkpkR1Z5WVhSdmNrWnVLR05vYVd4a2NtVnVLVHRjYmlBZ0lDQnBaaUFvYVhSbGNtRjBiM0pHYmlrZ2UxeHVJQ0FnSUNBZ2RtRnlJR2wwWlhKaGRHOXlJRDBnYVhSbGNtRjBiM0pHYmk1allXeHNLR05vYVd4a2NtVnVLVHRjYmlBZ0lDQWdJSFpoY2lCemRHVndPMXh1SUNBZ0lDQWdhV1lnS0dsMFpYSmhkRzl5Um00Z0lUMDlJR05vYVd4a2NtVnVMbVZ1ZEhKcFpYTXBJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHbHBJRDBnTUR0Y2JpQWdJQ0FnSUNBZ2QyaHBiR1VnS0NFb2MzUmxjQ0E5SUdsMFpYSmhkRzl5TG01bGVIUW9LU2t1Wkc5dVpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOb2FXeGtJRDBnYzNSbGNDNTJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ0lDQnVaWGgwVG1GdFpTQTlJQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDaHVZVzFsVTI5R1lYSWdJVDA5SUNjbklEOGdibUZ0WlZOdlJtRnlJQ3NnVTFWQ1UwVlFRVkpCVkU5U0lEb2dVMFZRUVZKQlZFOVNLU0FyWEc0Z0lDQWdJQ0FnSUNBZ0lDQm5aWFJEYjIxd2IyNWxiblJMWlhrb1kyaHBiR1FzSUdscEt5c3BYRzRnSUNBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ0lDQnVaWGgwU1c1a1pYZ2dQU0JwYm1SbGVGTnZSbUZ5SUNzZ2MzVmlkSEpsWlVOdmRXNTBPMXh1SUNBZ0lDQWdJQ0FnSUhOMVluUnlaV1ZEYjNWdWRDQXJQU0IwY21GMlpYSnpaVUZzYkVOb2FXeGtjbVZ1U1cxd2JDaGNiaUFnSUNBZ0lDQWdJQ0FnSUdOb2FXeGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J1WlhoMFNXNWtaWGdzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZV3hzWW1GamF5eGNiaUFnSUNBZ0lDQWdJQ0FnSUhSeVlYWmxjbk5sUTI5dWRHVjRkRnh1SUNBZ0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZcElIdGNiaUFnSUNBZ0lDQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdkMkZ5Ym1sdVp5aGNiaUFnSUNBZ0lDQWdJQ0FnSUdScFpGZGhjbTVCWW05MWRFMWhjSE1zWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5WWE5wYm1jZ1RXRndjeUJoY3lCamFHbHNaSEpsYmlCcGN5QnViM1FnZVdWMElHWjFiR3g1SUhOMWNIQnZjblJsWkM0Z1NYUWdhWE1nWVc0Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNBblpYaHdaWEpwYldWdWRHRnNJR1psWVhSMWNtVWdkR2hoZENCdGFXZG9kQ0JpWlNCeVpXMXZkbVZrTGlCRGIyNTJaWEowSUdsMElIUnZJR0VnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FuYzJWeGRXVnVZMlVnTHlCcGRHVnlZV0pzWlNCdlppQnJaWGxsWkNCU1pXRmpkRVZzWlcxbGJuUnpJR2x1YzNSbFlXUXVKMXh1SUNBZ0lDQWdJQ0FnSUNrZ09pQnVkV3hzS1R0Y2JpQWdJQ0FnSUNBZ0lDQmthV1JYWVhKdVFXSnZkWFJOWVhCeklEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQXZMeUJKZEdWeVlYUnZjaUIzYVd4c0lIQnliM1pwWkdVZ1pXNTBjbmtnVzJzc2RsMGdkSFZ3YkdWeklISmhkR2hsY2lCMGFHRnVJSFpoYkhWbGN5NWNiaUFnSUNBZ0lDQWdkMmhwYkdVZ0tDRW9jM1JsY0NBOUlHbDBaWEpoZEc5eUxtNWxlSFFvS1NrdVpHOXVaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lIWmhjaUJsYm5SeWVTQTlJSE4wWlhBdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1Z1ZEhKNUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCamFHbHNaQ0E5SUdWdWRISjVXekZkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdibVY0ZEU1aGJXVWdQU0FvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ2h1WVcxbFUyOUdZWElnSVQwOUlDY25JRDhnYm1GdFpWTnZSbUZ5SUNzZ1UxVkNVMFZRUVZKQlZFOVNJRG9nVTBWUVFWSkJWRTlTS1NBclhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhkeVlYQlZjMlZ5VUhKdmRtbGtaV1JMWlhrb1pXNTBjbmxiTUYwcElDc2dVMVZDVTBWUVFWSkJWRTlTSUN0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWjJWMFEyOXRjRzl1Wlc1MFMyVjVLR05vYVd4a0xDQXdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUc1bGVIUkpibVJsZUNBOUlHbHVaR1Y0VTI5R1lYSWdLeUJ6ZFdKMGNtVmxRMjkxYm5RN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZFdKMGNtVmxRMjkxYm5RZ0t6MGdkSEpoZG1WeWMyVkJiR3hEYUdsc1pISmxia2x0Y0d3b1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdOb2FXeGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnVaWGgwVG1GdFpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JtVjRkRWx1WkdWNExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCallXeHNZbUZqYXl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhKaGRtVnljMlZEYjI1MFpYaDBYRzRnSUNBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pTQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0FnSUNoY0luQnliMlIxWTNScGIyNWNJaUFoUFQwZ2NISnZZMlZ6Y3k1bGJuWXVUazlFUlY5RlRsWWdQeUJwYm5aaGNtbGhiblFvWEc0Z0lDQWdJQ0FnSUdOb2FXeGtjbVZ1TG01dlpHVlVlWEJsSUNFOVBTQXhMRnh1SUNBZ0lDQWdJQ0FuZEhKaGRtVnljMlZCYkd4RGFHbHNaSEpsYmlndUxpNHBPaUJGYm1OdmRXNTBaWEpsWkNCaGJpQnBiblpoYkdsa0lHTm9hV3hrT3lCRVQwMGdKeUFyWEc0Z0lDQWdJQ0FnSUNkbGJHVnRaVzUwY3lCaGNtVWdibTkwSUhaaGJHbGtJR05vYVd4a2NtVnVJRzltSUZKbFlXTjBJR052YlhCdmJtVnVkSE11SjF4dUlDQWdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaGphR2xzWkhKbGJpNXViMlJsVkhsd1pTQWhQVDBnTVNrcE8xeHVJQ0FnSUNBZ2RtRnlJR1p5WVdkdFpXNTBJRDBnVW1WaFkzUkdjbUZuYldWdWRDNWxlSFJ5WVdOMEtHTm9hV3hrY21WdUtUdGNiaUFnSUNBZ0lHWnZjaUFvZG1GeUlHdGxlU0JwYmlCbWNtRm5iV1Z1ZENrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWm5KaFoyMWxiblF1YUdGelQzZHVVSEp2Y0dWeWRIa29hMlY1S1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05vYVd4a0lEMGdabkpoWjIxbGJuUmJhMlY1WFR0Y2JpQWdJQ0FnSUNBZ0lDQnVaWGgwVG1GdFpTQTlJQ2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDaHVZVzFsVTI5R1lYSWdJVDA5SUNjbklEOGdibUZ0WlZOdlJtRnlJQ3NnVTFWQ1UwVlFRVkpCVkU5U0lEb2dVMFZRUVZKQlZFOVNLU0FyWEc0Z0lDQWdJQ0FnSUNBZ0lDQjNjbUZ3VlhObGNsQnliM1pwWkdWa1MyVjVLR3RsZVNrZ0t5QlRWVUpUUlZCQlVrRlVUMUlnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdaMlYwUTI5dGNHOXVaVzUwUzJWNUtHTm9hV3hrTENBd0tWeHVJQ0FnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2JtVjRkRWx1WkdWNElEMGdhVzVrWlhoVGIwWmhjaUFySUhOMVluUnlaV1ZEYjNWdWREdGNiaUFnSUNBZ0lDQWdJQ0J6ZFdKMGNtVmxRMjkxYm5RZ0t6MGdkSEpoZG1WeWMyVkJiR3hEYUdsc1pISmxia2x0Y0d3b1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYUdsc1pDeGNiaUFnSUNBZ0lDQWdJQ0FnSUc1bGVIUk9ZVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdibVY0ZEVsdVpHVjRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRnNiR0poWTJzc1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY21GMlpYSnpaVU52Ym5SbGVIUmNiaUFnSUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhOMVluUnlaV1ZEYjNWdWREdGNibjFjYmx4dUx5b3FYRzRnS2lCVWNtRjJaWEp6WlhNZ1kyaHBiR1J5Wlc0Z2RHaGhkQ0JoY21VZ2RIbHdhV05oYkd4NUlITndaV05wWm1sbFpDQmhjeUJnY0hKdmNITXVZMmhwYkdSeVpXNWdMQ0JpZFhSY2JpQXFJRzFwWjJoMElHRnNjMjhnWW1VZ2MzQmxZMmxtYVdWa0lIUm9jbTkxWjJnZ1lYUjBjbWxpZFhSbGN6cGNiaUFxWEc0Z0tpQXRJR0IwY21GMlpYSnpaVUZzYkVOb2FXeGtjbVZ1S0hSb2FYTXVjSEp2Y0hNdVkyaHBiR1J5Wlc0c0lDNHVMaWxnWEc0Z0tpQXRJR0IwY21GMlpYSnpaVUZzYkVOb2FXeGtjbVZ1S0hSb2FYTXVjSEp2Y0hNdWJHVm1kRkJoYm1Wc1EyaHBiR1J5Wlc0c0lDNHVMaWxnWEc0Z0tseHVJQ29nVkdobElHQjBjbUYyWlhKelpVTnZiblJsZUhSZ0lHbHpJR0Z1SUc5d2RHbHZibUZzSUdGeVozVnRaVzUwSUhSb1lYUWdhWE1nY0dGemMyVmtJSFJvY205MVoyZ2dkR2hsWEc0Z0tpQmxiblJwY21VZ2RISmhkbVZ5YzJGc0xpQkpkQ0JqWVc0Z1ltVWdkWE5sWkNCMGJ5QnpkRzl5WlNCaFkyTjFiWFZzWVhScGIyNXpJRzl5SUdGdWVYUm9hVzVuSUdWc2MyVWdkR2hoZEZ4dUlDb2dkR2hsSUdOaGJHeGlZV05ySUcxcFoyaDBJR1pwYm1RZ2NtVnNaWFpoYm5RdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUhzL0tuMGdZMmhwYkdSeVpXNGdRMmhwYkdSeVpXNGdkSEpsWlNCdlltcGxZM1F1WEc0Z0tpQkFjR0Z5WVcwZ2V5Rm1kVzVqZEdsdmJuMGdZMkZzYkdKaFkyc2dWRzhnYVc1MmIydGxJSFZ3YjI0Z2RISmhkbVZ5YzJsdVp5QmxZV05vSUdOb2FXeGtMbHh1SUNvZ1FIQmhjbUZ0SUhzL0tuMGdkSEpoZG1WeWMyVkRiMjUwWlhoMElFTnZiblJsZUhRZ1ptOXlJSFJ5WVhabGNuTmhiQzVjYmlBcUlFQnlaWFIxY200Z2V5RnVkVzFpWlhKOUlGUm9aU0J1ZFcxaVpYSWdiMllnWTJocGJHUnlaVzRnYVc0Z2RHaHBjeUJ6ZFdKMGNtVmxMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQjBjbUYyWlhKelpVRnNiRU5vYVd4a2NtVnVLR05vYVd4a2NtVnVMQ0JqWVd4c1ltRmpheXdnZEhKaGRtVnljMlZEYjI1MFpYaDBLU0I3WEc0Z0lHbG1JQ2hqYUdsc1pISmxiaUE5UFNCdWRXeHNLU0I3WEc0Z0lDQWdjbVYwZFhKdUlEQTdYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdkSEpoZG1WeWMyVkJiR3hEYUdsc1pISmxia2x0Y0d3b1kyaHBiR1J5Wlc0c0lDY25MQ0F3TENCallXeHNZbUZqYXl3Z2RISmhkbVZ5YzJWRGIyNTBaWGgwS1R0Y2JuMWNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0IwY21GMlpYSnpaVUZzYkVOb2FXeGtjbVZ1TzF4dUlsMTkiLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHByb3ZpZGVzTW9kdWxlIHVwZGF0ZVxuICovXG5cbiAvKiBnbG9iYWwgaGFzT3duUHJvcGVydHk6dHJ1ZSAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBhc3NpZ24gPSByZXF1aXJlKFwiLi9PYmplY3QuYXNzaWduXCIpO1xudmFyIGtleU9mID0gcmVxdWlyZShcIi4va2V5T2ZcIik7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZShcIi4vaW52YXJpYW50XCIpO1xudmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHNoYWxsb3dDb3B5KHgpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICByZXR1cm4geC5jb25jYXQoKTtcbiAgfSBlbHNlIGlmICh4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBhc3NpZ24obmV3IHguY29uc3RydWN0b3IoKSwgeCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cbn1cblxudmFyIENPTU1BTkRfUFVTSCA9IGtleU9mKHskcHVzaDogbnVsbH0pO1xudmFyIENPTU1BTkRfVU5TSElGVCA9IGtleU9mKHskdW5zaGlmdDogbnVsbH0pO1xudmFyIENPTU1BTkRfU1BMSUNFID0ga2V5T2YoeyRzcGxpY2U6IG51bGx9KTtcbnZhciBDT01NQU5EX1NFVCA9IGtleU9mKHskc2V0OiBudWxsfSk7XG52YXIgQ09NTUFORF9NRVJHRSA9IGtleU9mKHskbWVyZ2U6IG51bGx9KTtcbnZhciBDT01NQU5EX0FQUExZID0ga2V5T2YoeyRhcHBseTogbnVsbH0pO1xuXG52YXIgQUxMX0NPTU1BTkRTX0xJU1QgPSBbXG4gIENPTU1BTkRfUFVTSCxcbiAgQ09NTUFORF9VTlNISUZULFxuICBDT01NQU5EX1NQTElDRSxcbiAgQ09NTUFORF9TRVQsXG4gIENPTU1BTkRfTUVSR0UsXG4gIENPTU1BTkRfQVBQTFlcbl07XG5cbnZhciBBTExfQ09NTUFORFNfU0VUID0ge307XG5cbkFMTF9DT01NQU5EU19MSVNULmZvckVhY2goZnVuY3Rpb24oY29tbWFuZCkge1xuICBBTExfQ09NTUFORFNfU0VUW2NvbW1hbmRdID0gdHJ1ZTtcbn0pO1xuXG5mdW5jdGlvbiBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIGNvbW1hbmQpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSxcbiAgICAndXBkYXRlKCk6IGV4cGVjdGVkIHRhcmdldCBvZiAlcyB0byBiZSBhbiBhcnJheTsgZ290ICVzLicsXG4gICAgY29tbWFuZCxcbiAgICB2YWx1ZVxuICApIDogaW52YXJpYW50KEFycmF5LmlzQXJyYXkodmFsdWUpKSk7XG4gIHZhciBzcGVjVmFsdWUgPSBzcGVjW2NvbW1hbmRdO1xuICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgIEFycmF5LmlzQXJyYXkoc3BlY1ZhbHVlKSxcbiAgICAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYW4gYXJyYXk7IGdvdCAlcy4gJyArXG4gICAgJ0RpZCB5b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXIgaW4gYW4gYXJyYXk/JyxcbiAgICBjb21tYW5kLFxuICAgIHNwZWNWYWx1ZVxuICApIDogaW52YXJpYW50KEFycmF5LmlzQXJyYXkoc3BlY1ZhbHVlKSkpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUodmFsdWUsIHNwZWMpIHtcbiAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICB0eXBlb2Ygc3BlYyA9PT0gJ29iamVjdCcsXG4gICAgJ3VwZGF0ZSgpOiBZb3UgcHJvdmlkZWQgYSBrZXkgcGF0aCB0byB1cGRhdGUoKSB0aGF0IGRpZCBub3QgY29udGFpbiBvbmUgJyArXG4gICAgJ29mICVzLiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIHslczogLi4ufT8nLFxuICAgIEFMTF9DT01NQU5EU19MSVNULmpvaW4oJywgJyksXG4gICAgQ09NTUFORF9TRVRcbiAgKSA6IGludmFyaWFudCh0eXBlb2Ygc3BlYyA9PT0gJ29iamVjdCcpKTtcblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX1NFVCkpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgT2JqZWN0LmtleXMoc3BlYykubGVuZ3RoID09PSAxLFxuICAgICAgJ0Nhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUga2V5IGluIGFuIG9iamVjdCB3aXRoICVzJyxcbiAgICAgIENPTU1BTkRfU0VUXG4gICAgKSA6IGludmFyaWFudChPYmplY3Qua2V5cyhzcGVjKS5sZW5ndGggPT09IDEpKTtcblxuICAgIHJldHVybiBzcGVjW0NPTU1BTkRfU0VUXTtcbiAgfVxuXG4gIHZhciBuZXh0VmFsdWUgPSBzaGFsbG93Q29weSh2YWx1ZSk7XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9NRVJHRSkpIHtcbiAgICB2YXIgbWVyZ2VPYmogPSBzcGVjW0NPTU1BTkRfTUVSR0VdO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBtZXJnZU9iaiAmJiB0eXBlb2YgbWVyZ2VPYmogPT09ICdvYmplY3QnLFxuICAgICAgJ3VwZGF0ZSgpOiAlcyBleHBlY3RzIGEgc3BlYyBvZiB0eXBlIFxcJ29iamVjdFxcJzsgZ290ICVzJyxcbiAgICAgIENPTU1BTkRfTUVSR0UsXG4gICAgICBtZXJnZU9ialxuICAgICkgOiBpbnZhcmlhbnQobWVyZ2VPYmogJiYgdHlwZW9mIG1lcmdlT2JqID09PSAnb2JqZWN0JykpO1xuICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICBuZXh0VmFsdWUgJiYgdHlwZW9mIG5leHRWYWx1ZSA9PT0gJ29iamVjdCcsXG4gICAgICAndXBkYXRlKCk6ICVzIGV4cGVjdHMgYSB0YXJnZXQgb2YgdHlwZSBcXCdvYmplY3RcXCc7IGdvdCAlcycsXG4gICAgICBDT01NQU5EX01FUkdFLFxuICAgICAgbmV4dFZhbHVlXG4gICAgKSA6IGludmFyaWFudChuZXh0VmFsdWUgJiYgdHlwZW9mIG5leHRWYWx1ZSA9PT0gJ29iamVjdCcpKTtcbiAgICBhc3NpZ24obmV4dFZhbHVlLCBzcGVjW0NPTU1BTkRfTUVSR0VdKTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfUFVTSCkpIHtcbiAgICBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNwZWMsIENPTU1BTkRfUFVTSCk7XG4gICAgc3BlY1tDT01NQU5EX1BVU0hdLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgbmV4dFZhbHVlLnB1c2goaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzcGVjLCBDT01NQU5EX1VOU0hJRlQpKSB7XG4gICAgaW52YXJpYW50QXJyYXlDYXNlKHZhbHVlLCBzcGVjLCBDT01NQU5EX1VOU0hJRlQpO1xuICAgIHNwZWNbQ09NTUFORF9VTlNISUZUXS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIG5leHRWYWx1ZS51bnNoaWZ0KGl0ZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9TUExJQ0UpKSB7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpLFxuICAgICAgJ0V4cGVjdGVkICVzIHRhcmdldCB0byBiZSBhbiBhcnJheTsgZ290ICVzJyxcbiAgICAgIENPTU1BTkRfU1BMSUNFLFxuICAgICAgdmFsdWVcbiAgICApIDogaW52YXJpYW50KEFycmF5LmlzQXJyYXkodmFsdWUpKSk7XG4gICAgKFwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViA/IGludmFyaWFudChcbiAgICAgIEFycmF5LmlzQXJyYXkoc3BlY1tDT01NQU5EX1NQTElDRV0pLFxuICAgICAgJ3VwZGF0ZSgpOiBleHBlY3RlZCBzcGVjIG9mICVzIHRvIGJlIGFuIGFycmF5IG9mIGFycmF5czsgZ290ICVzLiAnICtcbiAgICAgICdEaWQgeW91IGZvcmdldCB0byB3cmFwIHlvdXIgcGFyYW1ldGVycyBpbiBhbiBhcnJheT8nLFxuICAgICAgQ09NTUFORF9TUExJQ0UsXG4gICAgICBzcGVjW0NPTU1BTkRfU1BMSUNFXVxuICAgICkgOiBpbnZhcmlhbnQoQXJyYXkuaXNBcnJheShzcGVjW0NPTU1BTkRfU1BMSUNFXSkpKTtcbiAgICBzcGVjW0NPTU1BTkRfU1BMSUNFXS5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgIChcInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPyBpbnZhcmlhbnQoXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYXJncyksXG4gICAgICAgICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheSBvZiBhcnJheXM7IGdvdCAlcy4gJyArXG4gICAgICAgICdEaWQgeW91IGZvcmdldCB0byB3cmFwIHlvdXIgcGFyYW1ldGVycyBpbiBhbiBhcnJheT8nLFxuICAgICAgICBDT01NQU5EX1NQTElDRSxcbiAgICAgICAgc3BlY1tDT01NQU5EX1NQTElDRV1cbiAgICAgICkgOiBpbnZhcmlhbnQoQXJyYXkuaXNBcnJheShhcmdzKSkpO1xuICAgICAgbmV4dFZhbHVlLnNwbGljZS5hcHBseShuZXh0VmFsdWUsIGFyZ3MpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9BUFBMWSkpIHtcbiAgICAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WID8gaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHNwZWNbQ09NTUFORF9BUFBMWV0gPT09ICdmdW5jdGlvbicsXG4gICAgICAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYSBmdW5jdGlvbjsgZ290ICVzLicsXG4gICAgICBDT01NQU5EX0FQUExZLFxuICAgICAgc3BlY1tDT01NQU5EX0FQUExZXVxuICAgICkgOiBpbnZhcmlhbnQodHlwZW9mIHNwZWNbQ09NTUFORF9BUFBMWV0gPT09ICdmdW5jdGlvbicpKTtcbiAgICBuZXh0VmFsdWUgPSBzcGVjW0NPTU1BTkRfQVBQTFldKG5leHRWYWx1ZSk7XG4gIH1cblxuICBmb3IgKHZhciBrIGluIHNwZWMpIHtcbiAgICBpZiAoIShBTExfQ09NTUFORFNfU0VULmhhc093blByb3BlcnR5KGspICYmIEFMTF9DT01NQU5EU19TRVRba10pKSB7XG4gICAgICBuZXh0VmFsdWVba10gPSB1cGRhdGUodmFsdWVba10sIHNwZWNba10pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltNXZaR1ZmYlc5a2RXeGxjeTl5WldGamRDOXNhV0l2ZFhCa1lYUmxMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFaUxDSm1hV3hsSWpvaVoyVnVaWEpoZEdWa0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRMjl3ZVhKcFoyaDBJREl3TVRNdE1qQXhOU3dnUm1GalpXSnZiMnNzSUVsdVl5NWNiaUFxSUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdVhHNGdLbHh1SUNvZ1ZHaHBjeUJ6YjNWeVkyVWdZMjlrWlNCcGN5QnNhV05sYm5ObFpDQjFibVJsY2lCMGFHVWdRbE5FTFhOMGVXeGxJR3hwWTJWdWMyVWdabTkxYm1RZ2FXNGdkR2hsWEc0Z0tpQk1TVU5GVGxORklHWnBiR1VnYVc0Z2RHaGxJSEp2YjNRZ1pHbHlaV04wYjNKNUlHOW1JSFJvYVhNZ2MyOTFjbU5sSUhSeVpXVXVJRUZ1SUdGa1pHbDBhVzl1WVd3Z1ozSmhiblJjYmlBcUlHOW1JSEJoZEdWdWRDQnlhV2RvZEhNZ1kyRnVJR0psSUdadmRXNWtJR2x1SUhSb1pTQlFRVlJGVGxSVElHWnBiR1VnYVc0Z2RHaGxJSE5oYldVZ1pHbHlaV04wYjNKNUxseHVJQ3BjYmlBcUlFQndjbTkyYVdSbGMwMXZaSFZzWlNCMWNHUmhkR1ZjYmlBcUwxeHVYRzRnTHlvZ1oyeHZZbUZzSUdoaGMwOTNibEJ5YjNCbGNuUjVPblJ5ZFdVZ0tpOWNibHh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzUyWVhJZ1lYTnphV2R1SUQwZ2NtVnhkV2x5WlNoY0lpNHZUMkpxWldOMExtRnpjMmxuYmx3aUtUdGNiblpoY2lCclpYbFBaaUE5SUhKbGNYVnBjbVVvWENJdUwydGxlVTltWENJcE8xeHVkbUZ5SUdsdWRtRnlhV0Z1ZENBOUlISmxjWFZwY21Vb1hDSXVMMmx1ZG1GeWFXRnVkRndpS1R0Y2JuWmhjaUJvWVhOUGQyNVFjbTl3WlhKMGVTQTlJSHQ5TG1oaGMwOTNibEJ5YjNCbGNuUjVPMXh1WEc1bWRXNWpkR2x2YmlCemFHRnNiRzkzUTI5d2VTaDRLU0I3WEc0Z0lHbG1JQ2hCY25KaGVTNXBjMEZ5Y21GNUtIZ3BLU0I3WEc0Z0lDQWdjbVYwZFhKdUlIZ3VZMjl1WTJGMEtDazdYRzRnSUgwZ1pXeHpaU0JwWmlBb2VDQW1KaUIwZVhCbGIyWWdlQ0E5UFQwZ0oyOWlhbVZqZENjcElIdGNiaUFnSUNCeVpYUjFjbTRnWVhOemFXZHVLRzVsZHlCNExtTnZibk4wY25WamRHOXlLQ2tzSUhncE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCNE8xeHVJQ0I5WEc1OVhHNWNiblpoY2lCRFQwMU5RVTVFWDFCVlUwZ2dQU0JyWlhsUFppaDdKSEIxYzJnNklHNTFiR3g5S1R0Y2JuWmhjaUJEVDAxTlFVNUVYMVZPVTBoSlJsUWdQU0JyWlhsUFppaDdKSFZ1YzJocFpuUTZJRzUxYkd4OUtUdGNiblpoY2lCRFQwMU5RVTVFWDFOUVRFbERSU0E5SUd0bGVVOW1LSHNrYzNCc2FXTmxPaUJ1ZFd4c2ZTazdYRzUyWVhJZ1EwOU5UVUZPUkY5VFJWUWdQU0JyWlhsUFppaDdKSE5sZERvZ2JuVnNiSDBwTzF4dWRtRnlJRU5QVFUxQlRrUmZUVVZTUjBVZ1BTQnJaWGxQWmloN0pHMWxjbWRsT2lCdWRXeHNmU2s3WEc1MllYSWdRMDlOVFVGT1JGOUJVRkJNV1NBOUlHdGxlVTltS0hza1lYQndiSGs2SUc1MWJHeDlLVHRjYmx4dWRtRnlJRUZNVEY5RFQwMU5RVTVFVTE5TVNWTlVJRDBnVzF4dUlDQkRUMDFOUVU1RVgxQlZVMGdzWEc0Z0lFTlBUVTFCVGtSZlZVNVRTRWxHVkN4Y2JpQWdRMDlOVFVGT1JGOVRVRXhKUTBVc1hHNGdJRU5QVFUxQlRrUmZVMFZVTEZ4dUlDQkRUMDFOUVU1RVgwMUZVa2RGTEZ4dUlDQkRUMDFOUVU1RVgwRlFVRXhaWEc1ZE8xeHVYRzUyWVhJZ1FVeE1YME5QVFUxQlRrUlRYMU5GVkNBOUlIdDlPMXh1WEc1QlRFeGZRMDlOVFVGT1JGTmZURWxUVkM1bWIzSkZZV05vS0daMWJtTjBhVzl1S0dOdmJXMWhibVFwSUh0Y2JpQWdRVXhNWDBOUFRVMUJUa1JUWDFORlZGdGpiMjF0WVc1a1hTQTlJSFJ5ZFdVN1hHNTlLVHRjYmx4dVpuVnVZM1JwYjI0Z2FXNTJZWEpwWVc1MFFYSnlZWGxEWVhObEtIWmhiSFZsTENCemNHVmpMQ0JqYjIxdFlXNWtLU0I3WEc0Z0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnUVhKeVlYa3VhWE5CY25KaGVTaDJZV3gxWlNrc1hHNGdJQ0FnSjNWd1pHRjBaU2dwT2lCbGVIQmxZM1JsWkNCMFlYSm5aWFFnYjJZZ0pYTWdkRzhnWW1VZ1lXNGdZWEp5WVhrN0lHZHZkQ0FsY3k0bkxGeHVJQ0FnSUdOdmJXMWhibVFzWEc0Z0lDQWdkbUZzZFdWY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENoQmNuSmhlUzVwYzBGeWNtRjVLSFpoYkhWbEtTa3BPMXh1SUNCMllYSWdjM0JsWTFaaGJIVmxJRDBnYzNCbFkxdGpiMjF0WVc1a1hUdGNiaUFnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQkJjbkpoZVM1cGMwRnljbUY1S0hOd1pXTldZV3gxWlNrc1hHNGdJQ0FnSjNWd1pHRjBaU2dwT2lCbGVIQmxZM1JsWkNCemNHVmpJRzltSUNWeklIUnZJR0psSUdGdUlHRnljbUY1T3lCbmIzUWdKWE11SUNjZ0sxeHVJQ0FnSUNkRWFXUWdlVzkxSUdadmNtZGxkQ0IwYnlCM2NtRndJSGx2ZFhJZ2NHRnlZVzFsZEdWeUlHbHVJR0Z1SUdGeWNtRjVQeWNzWEc0Z0lDQWdZMjl0YldGdVpDeGNiaUFnSUNCemNHVmpWbUZzZFdWY2JpQWdLU0E2SUdsdWRtRnlhV0Z1ZENoQmNuSmhlUzVwYzBGeWNtRjVLSE53WldOV1lXeDFaU2twS1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnZFhCa1lYUmxLSFpoYkhWbExDQnpjR1ZqS1NCN1hHNGdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ2RIbHdaVzltSUhOd1pXTWdQVDA5SUNkdlltcGxZM1FuTEZ4dUlDQWdJQ2QxY0dSaGRHVW9LVG9nV1c5MUlIQnliM1pwWkdWa0lHRWdhMlY1SUhCaGRHZ2dkRzhnZFhCa1lYUmxLQ2tnZEdoaGRDQmthV1FnYm05MElHTnZiblJoYVc0Z2IyNWxJQ2NnSzF4dUlDQWdJQ2R2WmlBbGN5NGdSR2xrSUhsdmRTQm1iM0puWlhRZ2RHOGdhVzVqYkhWa1pTQjdKWE02SUM0dUxuMC9KeXhjYmlBZ0lDQkJURXhmUTA5TlRVRk9SRk5mVEVsVFZDNXFiMmx1S0Njc0lDY3BMRnh1SUNBZ0lFTlBUVTFCVGtSZlUwVlVYRzRnSUNrZ09pQnBiblpoY21saGJuUW9kSGx3Wlc5bUlITndaV01nUFQwOUlDZHZZbXBsWTNRbktTazdYRzVjYmlBZ2FXWWdLR2hoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvYzNCbFl5d2dRMDlOVFVGT1JGOVRSVlFwS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJRTlpYW1WamRDNXJaWGx6S0hOd1pXTXBMbXhsYm1kMGFDQTlQVDBnTVN4Y2JpQWdJQ0FnSUNkRFlXNXViM1FnYUdGMlpTQnRiM0psSUhSb1lXNGdiMjVsSUd0bGVTQnBiaUJoYmlCdlltcGxZM1FnZDJsMGFDQWxjeWNzWEc0Z0lDQWdJQ0JEVDAxTlFVNUVYMU5GVkZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb1QySnFaV04wTG10bGVYTW9jM0JsWXlrdWJHVnVaM1JvSUQwOVBTQXhLU2s3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjM0JsWTF0RFQwMU5RVTVFWDFORlZGMDdYRzRnSUgxY2JseHVJQ0IyWVhJZ2JtVjRkRlpoYkhWbElEMGdjMmhoYkd4dmQwTnZjSGtvZG1Gc2RXVXBPMXh1WEc0Z0lHbG1JQ2hvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0hOd1pXTXNJRU5QVFUxQlRrUmZUVVZTUjBVcEtTQjdYRzRnSUNBZ2RtRnlJRzFsY21kbFQySnFJRDBnYzNCbFkxdERUMDFOUVU1RVgwMUZVa2RGWFR0Y2JpQWdJQ0FvWENKd2NtOWtkV04wYVc5dVhDSWdJVDA5SUhCeWIyTmxjM011Wlc1MkxrNVBSRVZmUlU1V0lEOGdhVzUyWVhKcFlXNTBLRnh1SUNBZ0lDQWdiV1Z5WjJWUFltb2dKaVlnZEhsd1pXOW1JRzFsY21kbFQySnFJRDA5UFNBbmIySnFaV04wSnl4Y2JpQWdJQ0FnSUNkMWNHUmhkR1VvS1RvZ0pYTWdaWGh3WldOMGN5QmhJSE53WldNZ2IyWWdkSGx3WlNCY1hDZHZZbXBsWTNSY1hDYzdJR2R2ZENBbGN5Y3NYRzRnSUNBZ0lDQkRUMDFOUVU1RVgwMUZVa2RGTEZ4dUlDQWdJQ0FnYldWeVoyVlBZbXBjYmlBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0cxbGNtZGxUMkpxSUNZbUlIUjVjR1Z2WmlCdFpYSm5aVTlpYWlBOVBUMGdKMjlpYW1WamRDY3BLVHRjYmlBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ2JtVjRkRlpoYkhWbElDWW1JSFI1Y0dWdlppQnVaWGgwVm1Gc2RXVWdQVDA5SUNkdlltcGxZM1FuTEZ4dUlDQWdJQ0FnSjNWd1pHRjBaU2dwT2lBbGN5QmxlSEJsWTNSeklHRWdkR0Z5WjJWMElHOW1JSFI1Y0dVZ1hGd25iMkpxWldOMFhGd25PeUJuYjNRZ0pYTW5MRnh1SUNBZ0lDQWdRMDlOVFVGT1JGOU5SVkpIUlN4Y2JpQWdJQ0FnSUc1bGVIUldZV3gxWlZ4dUlDQWdJQ2tnT2lCcGJuWmhjbWxoYm5Rb2JtVjRkRlpoYkhWbElDWW1JSFI1Y0dWdlppQnVaWGgwVm1Gc2RXVWdQVDA5SUNkdlltcGxZM1FuS1NrN1hHNGdJQ0FnWVhOemFXZHVLRzVsZUhSV1lXeDFaU3dnYzNCbFkxdERUMDFOUVU1RVgwMUZVa2RGWFNrN1hHNGdJSDFjYmx4dUlDQnBaaUFvYUdGelQzZHVVSEp2Y0dWeWRIa3VZMkZzYkNoemNHVmpMQ0JEVDAxTlFVNUVYMUJWVTBncEtTQjdYRzRnSUNBZ2FXNTJZWEpwWVc1MFFYSnlZWGxEWVhObEtIWmhiSFZsTENCemNHVmpMQ0JEVDAxTlFVNUVYMUJWVTBncE8xeHVJQ0FnSUhOd1pXTmJRMDlOVFVGT1JGOVFWVk5JWFM1bWIzSkZZV05vS0daMWJtTjBhVzl1S0dsMFpXMHBJSHRjYmlBZ0lDQWdJRzVsZUhSV1lXeDFaUzV3ZFhOb0tHbDBaVzBwTzF4dUlDQWdJSDBwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR2hoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvYzNCbFl5d2dRMDlOVFVGT1JGOVZUbE5JU1VaVUtTa2dlMXh1SUNBZ0lHbHVkbUZ5YVdGdWRFRnljbUY1UTJGelpTaDJZV3gxWlN3Z2MzQmxZeXdnUTA5TlRVRk9SRjlWVGxOSVNVWlVLVHRjYmlBZ0lDQnpjR1ZqVzBOUFRVMUJUa1JmVlU1VFNFbEdWRjB1Wm05eVJXRmphQ2htZFc1amRHbHZiaWhwZEdWdEtTQjdYRzRnSUNBZ0lDQnVaWGgwVm1Gc2RXVXVkVzV6YUdsbWRDaHBkR1Z0S1R0Y2JpQWdJQ0I5S1R0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2hvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0hOd1pXTXNJRU5QVFUxQlRrUmZVMUJNU1VORktTa2dlMXh1SUNBZ0lDaGNJbkJ5YjJSMVkzUnBiMjVjSWlBaFBUMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUZUbFlnUHlCcGJuWmhjbWxoYm5Rb1hHNGdJQ0FnSUNCQmNuSmhlUzVwYzBGeWNtRjVLSFpoYkhWbEtTeGNiaUFnSUNBZ0lDZEZlSEJsWTNSbFpDQWxjeUIwWVhKblpYUWdkRzhnWW1VZ1lXNGdZWEp5WVhrN0lHZHZkQ0FsY3ljc1hHNGdJQ0FnSUNCRFQwMU5RVTVFWDFOUVRFbERSU3hjYmlBZ0lDQWdJSFpoYkhWbFhHNGdJQ0FnS1NBNklHbHVkbUZ5YVdGdWRDaEJjbkpoZVM1cGMwRnljbUY1S0haaGJIVmxLU2twTzF4dUlDQWdJQ2hjSW5CeWIyUjFZM1JwYjI1Y0lpQWhQVDBnY0hKdlkyVnpjeTVsYm5ZdVRrOUVSVjlGVGxZZ1B5QnBiblpoY21saGJuUW9YRzRnSUNBZ0lDQkJjbkpoZVM1cGMwRnljbUY1S0hOd1pXTmJRMDlOVFVGT1JGOVRVRXhKUTBWZEtTeGNiaUFnSUNBZ0lDZDFjR1JoZEdVb0tUb2daWGh3WldOMFpXUWdjM0JsWXlCdlppQWxjeUIwYnlCaVpTQmhiaUJoY25KaGVTQnZaaUJoY25KaGVYTTdJR2R2ZENBbGN5NGdKeUFyWEc0Z0lDQWdJQ0FuUkdsa0lIbHZkU0JtYjNKblpYUWdkRzhnZDNKaGNDQjViM1Z5SUhCaGNtRnRaWFJsY25NZ2FXNGdZVzRnWVhKeVlYay9KeXhjYmlBZ0lDQWdJRU5QVFUxQlRrUmZVMUJNU1VORkxGeHVJQ0FnSUNBZ2MzQmxZMXREVDAxTlFVNUVYMU5RVEVsRFJWMWNiaUFnSUNBcElEb2dhVzUyWVhKcFlXNTBLRUZ5Y21GNUxtbHpRWEp5WVhrb2MzQmxZMXREVDAxTlFVNUVYMU5RVEVsRFJWMHBLU2s3WEc0Z0lDQWdjM0JsWTF0RFQwMU5RVTVFWDFOUVRFbERSVjB1Wm05eVJXRmphQ2htZFc1amRHbHZiaWhoY21kektTQjdYRzRnSUNBZ0lDQW9YQ0p3Y205a2RXTjBhVzl1WENJZ0lUMDlJSEJ5YjJObGMzTXVaVzUyTGs1UFJFVmZSVTVXSUQ4Z2FXNTJZWEpwWVc1MEtGeHVJQ0FnSUNBZ0lDQkJjbkpoZVM1cGMwRnljbUY1S0dGeVozTXBMRnh1SUNBZ0lDQWdJQ0FuZFhCa1lYUmxLQ2s2SUdWNGNHVmpkR1ZrSUhOd1pXTWdiMllnSlhNZ2RHOGdZbVVnWVc0Z1lYSnlZWGtnYjJZZ1lYSnlZWGx6T3lCbmIzUWdKWE11SUNjZ0sxeHVJQ0FnSUNBZ0lDQW5SR2xrSUhsdmRTQm1iM0puWlhRZ2RHOGdkM0poY0NCNWIzVnlJSEJoY21GdFpYUmxjbk1nYVc0Z1lXNGdZWEp5WVhrL0p5eGNiaUFnSUNBZ0lDQWdRMDlOVFVGT1JGOVRVRXhKUTBVc1hHNGdJQ0FnSUNBZ0lITndaV05iUTA5TlRVRk9SRjlUVUV4SlEwVmRYRzRnSUNBZ0lDQXBJRG9nYVc1MllYSnBZVzUwS0VGeWNtRjVMbWx6UVhKeVlYa29ZWEpuY3lrcEtUdGNiaUFnSUNBZ0lHNWxlSFJXWVd4MVpTNXpjR3hwWTJVdVlYQndiSGtvYm1WNGRGWmhiSFZsTENCaGNtZHpLVHRjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaG9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLSE53WldNc0lFTlBUVTFCVGtSZlFWQlFURmtwS1NCN1hHNGdJQ0FnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1ZpQS9JR2x1ZG1GeWFXRnVkQ2hjYmlBZ0lDQWdJSFI1Y0dWdlppQnpjR1ZqVzBOUFRVMUJUa1JmUVZCUVRGbGRJRDA5UFNBblpuVnVZM1JwYjI0bkxGeHVJQ0FnSUNBZ0ozVndaR0YwWlNncE9pQmxlSEJsWTNSbFpDQnpjR1ZqSUc5bUlDVnpJSFJ2SUdKbElHRWdablZ1WTNScGIyNDdJR2R2ZENBbGN5NG5MRnh1SUNBZ0lDQWdRMDlOVFVGT1JGOUJVRkJNV1N4Y2JpQWdJQ0FnSUhOd1pXTmJRMDlOVFVGT1JGOUJVRkJNV1YxY2JpQWdJQ0FwSURvZ2FXNTJZWEpwWVc1MEtIUjVjR1Z2WmlCemNHVmpXME5QVFUxQlRrUmZRVkJRVEZsZElEMDlQU0FuWm5WdVkzUnBiMjRuS1NrN1hHNGdJQ0FnYm1WNGRGWmhiSFZsSUQwZ2MzQmxZMXREVDAxTlFVNUVYMEZRVUV4WlhTaHVaWGgwVm1Gc2RXVXBPMXh1SUNCOVhHNWNiaUFnWm05eUlDaDJZWElnYXlCcGJpQnpjR1ZqS1NCN1hHNGdJQ0FnYVdZZ0tDRW9RVXhNWDBOUFRVMUJUa1JUWDFORlZDNW9ZWE5QZDI1UWNtOXdaWEowZVNocktTQW1KaUJCVEV4ZlEwOU5UVUZPUkZOZlUwVlVXMnRkS1NrZ2UxeHVJQ0FnSUNBZ2JtVjRkRlpoYkhWbFcydGRJRDBnZFhCa1lYUmxLSFpoYkhWbFcydGRMQ0J6Y0dWalcydGRLVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdibVY0ZEZaaGJIVmxPMXh1ZlZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlIVndaR0YwWlR0Y2JpSmRmUT09IiwiKGZ1bmN0aW9uIChwcm9jZXNzKXtcbi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEBwcm92aWRlc01vZHVsZSB3YXJuaW5nXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZW1wdHlGdW5jdGlvblwiKTtcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmcgPSBlbXB0eUZ1bmN0aW9uO1xuXG5pZiAoXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WKSB7XG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCApIHtmb3IgKHZhciBhcmdzPVtdLCRfXzA9MiwkX18xPWFyZ3VtZW50cy5sZW5ndGg7JF9fMDwkX18xOyRfXzArKykgYXJncy5wdXNoKGFyZ3VtZW50c1skX18wXSk7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQubGVuZ3RoIDwgMTAgfHwgL15bc1xcV10qJC8udGVzdChmb3JtYXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUaGUgd2FybmluZyBmb3JtYXQgc2hvdWxkIGJlIGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyAnICtcbiAgICAgICAgJ3dhcm5pbmcuIFBsZWFzZSwgdXNlIGEgbW9yZSBkZXNjcmlwdGl2ZSBmb3JtYXQgdGhhbjogJyArIGZvcm1hdFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ0ZhaWxlZCBDb21wb3NpdGUgcHJvcFR5cGU6ICcpID09PSAwKSB7XG4gICAgICByZXR1cm47IC8vIElnbm9yZSBDb21wb3NpdGVDb21wb25lbnQgcHJvcHR5cGUgY2hlY2suXG4gICAgfVxuXG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgIHtyZXR1cm4gYXJnc1thcmdJbmRleCsrXTt9KTtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGNhdGNoKHgpIHt9XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OXlaV0ZqZEM5c2FXSXZkMkZ5Ym1sdVp5NXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFTnZjSGx5YVdkb2RDQXlNREUwTFRJd01UVXNJRVpoWTJWaWIyOXJMQ0JKYm1NdVhHNGdLaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDcGNiaUFxSUZSb2FYTWdjMjkxY21ObElHTnZaR1VnYVhNZ2JHbGpaVzV6WldRZ2RXNWtaWElnZEdobElFSlRSQzF6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdsdUlIUm9aVnh1SUNvZ1RFbERSVTVUUlNCbWFXeGxJR2x1SUhSb1pTQnliMjkwSUdScGNtVmpkRzl5ZVNCdlppQjBhR2x6SUhOdmRYSmpaU0IwY21WbExpQkJiaUJoWkdScGRHbHZibUZzSUdkeVlXNTBYRzRnS2lCdlppQndZWFJsYm5RZ2NtbG5hSFJ6SUdOaGJpQmlaU0JtYjNWdVpDQnBiaUIwYUdVZ1VFRlVSVTVVVXlCbWFXeGxJR2x1SUhSb1pTQnpZVzFsSUdScGNtVmpkRzl5ZVM1Y2JpQXFYRzRnS2lCQWNISnZkbWxrWlhOTmIyUjFiR1VnZDJGeWJtbHVaMXh1SUNvdlhHNWNibHdpZFhObElITjBjbWxqZEZ3aU8xeHVYRzUyWVhJZ1pXMXdkSGxHZFc1amRHbHZiaUE5SUhKbGNYVnBjbVVvWENJdUwyVnRjSFI1Um5WdVkzUnBiMjVjSWlrN1hHNWNiaThxS2x4dUlDb2dVMmx0YVd4aGNpQjBieUJwYm5aaGNtbGhiblFnWW5WMElHOXViSGtnYkc5bmN5QmhJSGRoY201cGJtY2dhV1lnZEdobElHTnZibVJwZEdsdmJpQnBjeUJ1YjNRZ2JXVjBMbHh1SUNvZ1ZHaHBjeUJqWVc0Z1ltVWdkWE5sWkNCMGJ5QnNiMmNnYVhOemRXVnpJR2x1SUdSbGRtVnNiM0J0Wlc1MElHVnVkbWx5YjI1dFpXNTBjeUJwYmlCamNtbDBhV05oYkZ4dUlDb2djR0YwYUhNdUlGSmxiVzkyYVc1bklIUm9aU0JzYjJkbmFXNW5JR052WkdVZ1ptOXlJSEJ5YjJSMVkzUnBiMjRnWlc1MmFYSnZibTFsYm5SeklIZHBiR3dnYTJWbGNDQjBhR1ZjYmlBcUlITmhiV1VnYkc5bmFXTWdZVzVrSUdadmJHeHZkeUIwYUdVZ2MyRnRaU0JqYjJSbElIQmhkR2h6TGx4dUlDb3ZYRzVjYm5aaGNpQjNZWEp1YVc1bklEMGdaVzF3ZEhsR2RXNWpkR2x2Ymp0Y2JseHVhV1lnS0Z3aWNISnZaSFZqZEdsdmJsd2lJQ0U5UFNCd2NtOWpaWE56TG1WdWRpNU9UMFJGWDBWT1Zpa2dlMXh1SUNCM1lYSnVhVzVuSUQwZ1puVnVZM1JwYjI0b1kyOXVaR2wwYVc5dUxDQm1iM0p0WVhRZ0tTQjdabTl5SUNoMllYSWdZWEpuY3oxYlhTd2tYMTh3UFRJc0pGOWZNVDFoY21kMWJXVnVkSE11YkdWdVozUm9PeVJmWHpBOEpGOWZNVHNrWDE4d0t5c3BJR0Z5WjNNdWNIVnphQ2hoY21kMWJXVnVkSE5iSkY5Zk1GMHBPMXh1SUNBZ0lHbG1JQ2htYjNKdFlYUWdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Z4dUlDQWdJQ0FnSUNBbllIZGhjbTVwYm1jb1kyOXVaR2wwYVc5dUxDQm1iM0p0WVhRc0lDNHVMbUZ5WjNNcFlDQnlaWEYxYVhKbGN5QmhJSGRoY201cGJtY2dKeUFyWEc0Z0lDQWdJQ0FnSUNkdFpYTnpZV2RsSUdGeVozVnRaVzUwSjF4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb1ptOXliV0YwTG14bGJtZDBhQ0E4SURFd0lIeDhJQzllVzNOY1hGZGRLaVF2TG5SbGMzUW9abTl5YldGMEtTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQW5WR2hsSUhkaGNtNXBibWNnWm05eWJXRjBJSE5vYjNWc1pDQmlaU0JoWW14bElIUnZJSFZ1YVhGMVpXeDVJR2xrWlc1MGFXWjVJSFJvYVhNZ0p5QXJYRzRnSUNBZ0lDQWdJQ2QzWVhKdWFXNW5MaUJRYkdWaGMyVXNJSFZ6WlNCaElHMXZjbVVnWkdWelkzSnBjSFJwZG1VZ1ptOXliV0YwSUhSb1lXNDZJQ2NnS3lCbWIzSnRZWFJjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0dadmNtMWhkQzVwYm1SbGVFOW1LQ2RHWVdsc1pXUWdRMjl0Y0c5emFYUmxJSEJ5YjNCVWVYQmxPaUFuS1NBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVPeUF2THlCSloyNXZjbVVnUTI5dGNHOXphWFJsUTI5dGNHOXVaVzUwSUhCeWIzQjBlWEJsSUdOb1pXTnJMbHh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doWTI5dVpHbDBhVzl1S1NCN1hHNGdJQ0FnSUNCMllYSWdZWEpuU1c1a1pYZ2dQU0F3TzF4dUlDQWdJQ0FnZG1GeUlHMWxjM05oWjJVZ1BTQW5WMkZ5Ym1sdVp6b2dKeUFySUdadmNtMWhkQzV5WlhCc1lXTmxLQzhsY3k5bkxDQm1kVzVqZEdsdmJpZ3BJQ0I3Y21WMGRYSnVJR0Z5WjNOYllYSm5TVzVrWlhncksxMDdmU2s3WEc0Z0lDQWdJQ0JqYjI1emIyeGxMbmRoY200b2JXVnpjMkZuWlNrN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0F2THlBdExTMGdWMlZzWTI5dFpTQjBieUJrWldKMVoyZHBibWNnVW1WaFkzUWdMUzB0WEc0Z0lDQWdJQ0FnSUM4dklGUm9hWE1nWlhKeWIzSWdkMkZ6SUhSb2NtOTNiaUJoY3lCaElHTnZiblpsYm1sbGJtTmxJSE52SUhSb1lYUWdlVzkxSUdOaGJpQjFjMlVnZEdocGN5QnpkR0ZqYTF4dUlDQWdJQ0FnSUNBdkx5QjBieUJtYVc1a0lIUm9aU0JqWVd4c2MybDBaU0IwYUdGMElHTmhkWE5sWkNCMGFHbHpJSGRoY201cGJtY2dkRzhnWm1seVpTNWNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHMWxjM05oWjJVcE8xeHVJQ0FnSUNBZ2ZTQmpZWFJqYUNoNEtTQjdmVnh1SUNBZ0lIMWNiaUFnZlR0Y2JuMWNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0IzWVhKdWFXNW5PMXh1SWwxOSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvUmVhY3QnKTtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tICcuL1RhYmxlSGVhZGVyJztcbmltcG9ydCBUYWJsZUJvZHkgZnJvbSAnLi9UYWJsZUJvZHknO1xuaW1wb3J0IFBhZ2luYXRpb25MaXN0IGZyb20gJy4vcGFnaW5hdGlvbi9QYWdpbmF0aW9uTGlzdCc7XG5pbXBvcnQgVG9vbEJhciBmcm9tICcuL3Rvb2xiYXIvVG9vbEJhcic7XG5pbXBvcnQgVGFibGVGaWx0ZXIgZnJvbSAnLi9UYWJsZUZpbHRlcic7XG5pbXBvcnQge1RhYmxlRGF0YVN0b3JlfSBmcm9tICcuL3N0b3JlL1RhYmxlRGF0YVN0b3JlJztcblxuY2xhc3MgQm9vdHN0cmFwVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLl9hdHRhY2hDZWxsRWRpdEZ1bmMoKTtcbiAgICBsZXQga2V5RmllbGQgPSBudWxsO1xuICAgIGxldCBjdXN0b21Tb3J0RnVuY01hcCA9IHt9O1xuXG4gICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaCh0aGlzLnByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbihjb2x1bW4pe1xuICAgICAgaWYoY29sdW1uLnByb3BzLmlzS2V5KXtcbiAgICAgICAgaWYoa2V5RmllbGQgIT0gbnVsbCkgdGhyb3cgXCJFcnJvci4gTXVsdGlwbGUga2V5IGNvbHVtbiBiZSBkZXRlY3RlZCBpbiBUYWJsZUhlYWRlckNvbHVtbi5cIjtcbiAgICAgICAga2V5RmllbGQgPSBjb2x1bW4ucHJvcHMuZGF0YUZpZWxkO1xuICAgICAgfVxuICAgICAgaWYoY29sdW1uLnByb3BzLnNvcnRGdW5jKXtcbiAgICAgICAgY3VzdG9tU29ydEZ1bmNNYXBbY29sdW1uLnByb3BzLmRhdGFGaWVsZF0gPSBjb2x1bW4ucHJvcHMuc29ydEZ1bmM7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG5cbiAgICBpZihrZXlGaWVsZCA9PSBudWxsKVxuICAgICAgdGhyb3cgXCJFcnJvci4gTm8gYW55IGtleSBjb2x1bW4gZGVmaW5lZCBpbiBUYWJsZUhlYWRlckNvbHVtbi4gVXNlICdpc0tleT17dHJ1ZX0nIHRvIHNwZWNpZnkgYW4gdW5pcXVlIGNvbHVtbiBhZnRlciB2ZXJzaW9uIDAuNS40LlwiO1xuXG4gICAgaWYoIUFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5kYXRhKSl7XG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFRhYmxlRGF0YVN0b3JlKHRoaXMucHJvcHMuZGF0YS5nZXREYXRhKCkpO1xuICAgICAgdGhpcy5wcm9wcy5kYXRhLmNsZWFyKCk7XG4gICAgICB0aGlzLnByb3BzLmRhdGEub24oJ2NoYW5nZScsIChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgZGF0YTogdGhpcy5nZXRUYWJsZURhdGEoKVxuICAgICAgICB9KVxuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICB9IGVsc2V7XG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFRhYmxlRGF0YVN0b3JlKHRoaXMucHJvcHMuZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuc3RvcmUuc2V0UHJvcHModGhpcy5wcm9wcy5wYWdpbmF0aW9uLCBrZXlGaWVsZCwgY3VzdG9tU29ydEZ1bmNNYXApO1xuXG4gICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cgJiYgdGhpcy5wcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQpe1xuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleSh0aGlzLnByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRhdGE6IHRoaXMuZ2V0VGFibGVEYXRhKCksXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKClcbiAgICB9O1xuICB9XG5cbiAgZ2V0VGFibGVEYXRhKCkge1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKHRoaXMucHJvcHMub3B0aW9ucy5wYWdlIHx8IDEsXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9wdGlvbnMuc2l6ZVBlclBhZ2UgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUWzBdKVxuICAgICAgICAgICAgICAgICAgLmdldCgpO1xuICAgIH0gZWxzZXtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcyl7XG4gICAgaWYoQXJyYXkuaXNBcnJheShuZXh0UHJvcHMuZGF0YSkpe1xuICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKG5leHRQcm9wcy5kYXRhKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiB0aGlzLmdldFRhYmxlRGF0YSgpXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYobmV4dFByb3BzLnNlbGVjdFJvdyAmJiBuZXh0UHJvcHMuc2VsZWN0Um93LnNlbGVjdGVkKXtcbiAgICAgIC8vc2V0IGRlZmF1bHQgc2VsZWN0IHJvd3MgdG8gc3RvcmUuXG4gICAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KG5leHRQcm9wcy5zZWxlY3RSb3cuc2VsZWN0ZWQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkUm93S2V5czogbmV4dFByb3BzLnNlbGVjdFJvdy5zZWxlY3RlZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCl7XG4gICAgdGhpcy5fYXR0YWNoQ2VsbEVkaXRGdW5jKCk7XG4gICAgaWYodGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyVGFibGVDb21wbGV0ZSlcbiAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hZnRlclRhYmxlQ29tcGxldGUoKTtcbiAgfVxuXG4gIF9hdHRhY2hDZWxsRWRpdEZ1bmMoKXtcbiAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0KXtcbiAgICAgIHRoaXMucHJvcHMuY2VsbEVkaXQuX19vbkNvbXBsZXRlRWRpdF9fID0gdGhpcy5oYW5kbGVFZGl0Q2VsbC5iaW5kKHRoaXMpO1xuICAgICAgaWYodGhpcy5wcm9wcy5jZWxsRWRpdC5tb2RlICE9PSBDb25zdC5DRUxMX0VESVRfTk9ORSlcbiAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciB0YWJsZUNsYXNzID0gY2xhc3NTZXQoXCJyZWFjdC1icy10YWJsZVwiKTtcbiAgICB2YXIgY2hpbGRyZW5zID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgc3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMucHJvcHMuaGVpZ2h0XG4gICAgfTtcbiAgICBpZighQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKSl7XG4gICAgICBjaGlsZHJlbnMgPSBbdGhpcy5wcm9wcy5jaGlsZHJlbl07XG4gICAgfVxuICAgIHZhciBjb2x1bW5zID0gY2hpbGRyZW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpe1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY29sdW1uLnByb3BzLmRhdGFGaWVsZCxcbiAgICAgICAgYWxpZ246IGNvbHVtbi5wcm9wcy5kYXRhQWxpZ24sXG4gICAgICAgIHNvcnQ6IGNvbHVtbi5wcm9wcy5kYXRhU29ydCxcbiAgICAgICAgZm9ybWF0OiBjb2x1bW4ucHJvcHMuZGF0YUZvcm1hdCxcbiAgICAgICAgZWRpdGFibGU6IGNvbHVtbi5wcm9wcy5lZGl0YWJsZSxcbiAgICAgICAgaGlkZGVuOiBjb2x1bW4ucHJvcHMuaGlkZGVuLFxuICAgICAgICBjbGFzc05hbWU6Y29sdW1uLnByb3BzLmNvbHVtbkNsYXNzTmFtZSxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi5wcm9wcy53aWR0aCxcbiAgICAgICAgaW5kZXg6IGlcbiAgICAgIH07XG4gICAgfSwgdGhpcyk7XG5cbiAgICB2YXIgcGFnaW5hdGlvbiA9IHRoaXMucmVuZGVyUGFnaW5hdGlvbigpO1xuICAgIHZhciB0b29sQmFyID0gdGhpcy5yZW5kZXJUb29sQmFyKCk7XG4gICAgdmFyIHRhYmxlRmlsdGVyID0gdGhpcy5yZW5kZXJUYWJsZUZpbHRlcihjb2x1bW5zKTtcbiAgICByZXR1cm4oXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlYWN0LWJzLWNvbnRhaW5lclwiPlxuICAgICAgICB7dG9vbEJhcn1cbiAgICAgICAgPGRpdiByZWY9XCJ0YWJsZVwiIHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPXt0YWJsZUNsYXNzfT5cbiAgICAgICAgICA8VGFibGVIZWFkZXIgcm93U2VsZWN0VHlwZT17dGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgaGlkZVNlbGVjdENvbHVtbj17dGhpcy5wcm9wcy5zZWxlY3RSb3cuaGlkZVNlbGVjdENvbHVtbn1cbiAgICAgICAgICAgICAgICAgICAgICAgc29ydE5hbWU9e3RoaXMucHJvcHMub3B0aW9ucy5zb3J0TmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgc29ydE9yZGVyPXt0aGlzLnByb3BzLm9wdGlvbnMuc29ydE9yZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICBvblNvcnQ9e3RoaXMuaGFuZGxlU29ydC5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdEFsbFJvdz17dGhpcy5oYW5kbGVTZWxlY3RBbGxSb3cuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyZWQ9e3RoaXMucHJvcHMuYm9yZGVyZWR9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgPC9UYWJsZUhlYWRlcj5cbiAgICAgICAgICA8VGFibGVCb2R5IHJlZj1cImJvZHlcIiBkYXRhPXt0aGlzLnN0YXRlLmRhdGF9IGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICB0ckNsYXNzTmFtZT17dGhpcy5wcm9wcy50ckNsYXNzTmFtZX1cbiAgICAgICAgICAgIHN0cmlwZWQ9e3RoaXMucHJvcHMuc3RyaXBlZH1cbiAgICAgICAgICAgIGJvcmRlcmVkPXt0aGlzLnByb3BzLmJvcmRlcmVkfVxuICAgICAgICAgICAgaG92ZXI9e3RoaXMucHJvcHMuaG92ZXJ9XG4gICAgICAgICAgICBrZXlGaWVsZD17dGhpcy5zdG9yZS5nZXRLZXlGaWVsZCgpfVxuICAgICAgICAgICAgY29uZGVuc2VkPXt0aGlzLnByb3BzLmNvbmRlbnNlZH1cbiAgICAgICAgICAgIHNlbGVjdFJvdz17dGhpcy5wcm9wcy5zZWxlY3RSb3d9XG4gICAgICAgICAgICBjZWxsRWRpdD17dGhpcy5wcm9wcy5jZWxsRWRpdH1cbiAgICAgICAgICAgIHNlbGVjdGVkUm93S2V5cz17dGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXN9XG4gICAgICAgICAgICBvblNlbGVjdFJvdz17dGhpcy5oYW5kbGVTZWxlY3RSb3cuYmluZCh0aGlzKX0vPlxuICAgICAgICAgIHt0YWJsZUZpbHRlcn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtwYWdpbmF0aW9ufVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgaGFuZGxlU29ydChvcmRlciwgc29ydEZpZWxkKXtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5zdG9yZS5zb3J0KG9yZGVyLCBzb3J0RmllbGQpLmdldCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVQYWdpbmF0aW9uRGF0YShwYWdlLCBzaXplUGVyUGFnZSl7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuc3RvcmUucGFnZShwYWdlLCBzaXplUGVyUGFnZSkuZ2V0KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdEFsbFJvdyhlKXtcbiAgICB2YXIgaXNTZWxlY3RlZCA9IGUuY3VycmVudFRhcmdldC5jaGVja2VkO1xuICAgIGxldCBzZWxlY3RlZFJvd0tleXMgPSBbXTtcbiAgICBpZihpc1NlbGVjdGVkKXtcbiAgICAgIHNlbGVjdGVkUm93S2V5cyA9IHRoaXMuc3RvcmUuZ2V0QWxsUm93a2V5KCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFJvd0tleShzZWxlY3RlZFJvd0tleXMpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBzZWxlY3RlZFJvd0tleXNcbiAgICB9KTtcbiAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdEFsbCl7XG4gICAgICB0aGlzLnByb3BzLnNlbGVjdFJvdy5vblNlbGVjdEFsbChpc1NlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTZWxlY3RSb3cocm93LCBpc1NlbGVjdGVkKXtcbiAgICBsZXQgY3VyclNlbGVjdGVkID0gdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKTtcbiAgICBsZXQgcm93S2V5ID0gcm93W3RoaXMuc3RvcmUuZ2V0S2V5RmllbGQoKV07XG4gICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpe1xuICAgICAgY3VyclNlbGVjdGVkID0gaXNTZWxlY3RlZD9bcm93S2V5XTpbXVxuICAgIH0gZWxzZSB7XG4gICAgICBpZihpc1NlbGVjdGVkKSB7XG4gICAgICAgIGN1cnJTZWxlY3RlZC5wdXNoKHJvd0tleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyU2VsZWN0ZWQgPSBjdXJyU2VsZWN0ZWQuZmlsdGVyKGZ1bmN0aW9uKGtleSl7XG4gICAgICAgICAgcmV0dXJuIHJvd0tleSAhPT0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KGN1cnJTZWxlY3RlZCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3RlZFJvd0tleXM6IGN1cnJTZWxlY3RlZFxuICAgIH0pO1xuXG4gICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cub25TZWxlY3Qpe1xuICAgICAgdGhpcy5wcm9wcy5zZWxlY3RSb3cub25TZWxlY3Qocm93LCBpc1NlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVFZGl0Q2VsbChuZXdWYWwsIHJvd0luZGV4LCBjb2xJbmRleCl7XG4gICAgbGV0IGZpZWxkTmFtZTtcbiAgICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHRoaXMucHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICBpZihpID09IGNvbEluZGV4KXtcbiAgICAgICAgZmllbGROYW1lID0gY29sdW1uLnByb3BzLmRhdGFGaWVsZDtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuc3RvcmUuZWRpdChuZXdWYWwsIHJvd0luZGV4LCBmaWVsZE5hbWUpLmdldCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG5cbiAgICBpZih0aGlzLnByb3BzLmNlbGxFZGl0LmFmdGVyU2F2ZUNlbGwpe1xuICAgICAgdGhpcy5wcm9wcy5jZWxsRWRpdC5hZnRlclNhdmVDZWxsKHRoaXMuc3RhdGUuZGF0YVtyb3dJbmRleF0sIGZpZWxkTmFtZSwgbmV3VmFsKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBZGRSb3dCZWdpbigpe1xuICAgIGlmKHRoaXMucmVmcy5ib2R5KXtcbiAgICAgIC8vIHRoaXMucmVmcy5ib2R5LmNhbmNlbEVkaXQoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBZGRSb3cobmV3T2JqKXtcbiAgICBsZXQgbXNnID0gbnVsbCwgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnN0b3JlLmFkZChuZXdPYmopO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnByb3BzLnBhZ2luYXRpb24pe1xuICAgICAgLy9pZiBwYWdpbmF0aW9uIGlzIGVuYWJsZWQgYW5kIGluc2VydCByb3cgYmUgdHJpZ2dlciwgY2hhbmdlIHRvIGxhc3QgcGFnZVxuICAgICAgbGV0IHNpemVQZXJQYWdlID0gdGhpcy5yZWZzLnBhZ2luYXRpb24uZ2V0U2l6ZVBlclBhZ2UoKTtcbiAgICAgIGxldCBjdXJyTGFzdFBhZ2UgPSBNYXRoLmNlaWwodGhpcy5zdG9yZS5nZXREYXRhTnVtKCkvc2l6ZVBlclBhZ2UpO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKGN1cnJMYXN0UGFnZSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlZnMucGFnaW5hdGlvbi5jaGFuZ2VQYWdlKGN1cnJMYXN0UGFnZSk7XG4gICAgfSBlbHNle1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMucHJvcHMub3B0aW9ucy5hZnRlckluc2VydFJvdyl7XG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJJbnNlcnRSb3cobmV3T2JqKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVEcm9wUm93KCl7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgZHJvcFJvd0tleXMgPSB0aGlzLnN0b3JlLmdldFNlbGVjdGVkUm93S2V5cygpO1xuICAgIC8vYWRkIGNvbmZpcm0gYmVmb3IgdGhlIGRlbGV0ZSBhY3Rpb25cbiAgICBpZihkcm9wUm93S2V5cyYmZHJvcFJvd0tleXMubGVuZ3RoPjApe1xuICAgICAgaWYoIWNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB3YW50IGRlbGV0ZT8nKSl7cmV0dXJufVxuICAgIH1cbiAgICB0aGlzLnN0b3JlLnJlbW92ZShkcm9wUm93S2V5cyk7ICAvL3JlbW92ZSBzZWxlY3RlZCBSb3dcbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkUm93S2V5KFtdKTsgIC8vY2xlYXIgc2VsZWN0ZWQgcm93IGtleVxuXG4gICAgaWYodGhpcy5wcm9wcy5wYWdpbmF0aW9uKXtcbiAgICAgIGxldCBzaXplUGVyUGFnZSA9IHRoaXMucmVmcy5wYWdpbmF0aW9uLmdldFNpemVQZXJQYWdlKCk7XG4gICAgICBsZXQgY3Vyckxhc3RQYWdlID0gTWF0aC5jZWlsKHRoaXMuc3RvcmUuZ2V0RGF0YU51bSgpL3NpemVQZXJQYWdlKTtcbiAgICAgIGxldCBjdXJyZW50UGFnZSA9IHRoaXMucmVmcy5wYWdpbmF0aW9uLmdldEN1cnJlbnRQYWdlKCk7XG4gICAgICBpZihjdXJyZW50UGFnZSA+IGN1cnJMYXN0UGFnZSlcbiAgICAgICAgY3VycmVudFBhZ2UgPSBjdXJyTGFzdFBhZ2U7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoY3VycmVudFBhZ2UsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdG9yZS5nZXRTZWxlY3RlZFJvd0tleXMoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlZnMucGFnaW5hdGlvbi5jaGFuZ2VQYWdlKGN1cnJlbnRQYWdlKTtcbiAgICB9ZWxzZXtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRSb3dLZXlzKClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZih0aGlzLnByb3BzLm9wdGlvbnMuYWZ0ZXJEZWxldGVSb3cpe1xuICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFmdGVyRGVsZXRlUm93KGRyb3BSb3dLZXlzKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVGaWx0ZXJEYXRhKGZpbHRlck9iail7XG4gICAgdGhpcy5zdG9yZS5maWx0ZXIoZmlsdGVyT2JqKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmKHRoaXMucHJvcHMucGFnaW5hdGlvbil7XG4gICAgICBsZXQgc2l6ZVBlclBhZ2UgPSB0aGlzLnJlZnMucGFnaW5hdGlvbi5nZXRTaXplUGVyUGFnZSgpO1xuICAgICAgcmVzdWx0ID0gdGhpcy5zdG9yZS5wYWdlKDEsIHNpemVQZXJQYWdlKS5nZXQoKTtcbiAgICAgIHRoaXMucmVmcy5wYWdpbmF0aW9uLmNoYW5nZVBhZ2UoMSk7XG4gICAgfWVsc2V7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRhdGE6IHJlc3VsdFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoKHNlYXJjaFRleHQpe1xuICAgIHRoaXMuc3RvcmUuc2VhcmNoKHNlYXJjaFRleHQpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYodGhpcy5wcm9wcy5wYWdpbmF0aW9uKXtcbiAgICAgIGxldCBzaXplUGVyUGFnZSA9IHRoaXMucmVmcy5wYWdpbmF0aW9uLmdldFNpemVQZXJQYWdlKCk7XG4gICAgICByZXN1bHQgPSB0aGlzLnN0b3JlLnBhZ2UoMSwgc2l6ZVBlclBhZ2UpLmdldCgpO1xuICAgICAgdGhpcy5yZWZzLnBhZ2luYXRpb24uY2hhbmdlUGFnZSgxKTtcbiAgICB9ZWxzZXtcbiAgICAgIHJlc3VsdCA9IHRoaXMuc3RvcmUuZ2V0KCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXJQYWdpbmF0aW9uKCl7XG4gICAgaWYodGhpcy5wcm9wcy5wYWdpbmF0aW9uKXtcbiAgICAgIHJldHVybihcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8UGFnaW5hdGlvbkxpc3QgcmVmPVwicGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJQYWdlPXt0aGlzLnByb3BzLm9wdGlvbnMucGFnZSB8fCAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VQYWdlPXt0aGlzLmhhbmRsZVBhZ2luYXRpb25EYXRhLmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVQZXJQYWdlPXt0aGlzLnByb3BzLm9wdGlvbnMuc2l6ZVBlclBhZ2UgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUWzBdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplUGVyUGFnZUxpc3Q9e3RoaXMucHJvcHMub3B0aW9ucy5zaXplUGVyUGFnZUxpc3QgfHwgQ29uc3QuU0laRV9QRVJfUEFHRV9MSVNUfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uU2l6ZT17dGhpcy5wcm9wcy5vcHRpb25zLnBhZ2luYXRpb25TaXplIHx8IENvbnN0LlBBR0lOQVRJT05fU0laRX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNpemU9e3RoaXMuc3RvcmUuZ2V0RGF0YU51bSgpfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIClcbiAgICB9ZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXJUb29sQmFyKCl7XG4gICAgbGV0IGNvbHVtbnM7XG4gICAgaWYoQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKSl7XG4gICAgICBjb2x1bW5zID0gdGhpcy5wcm9wcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY29sdW1uKXtcbiAgICAgICAgdmFyIHByb3BzPWNvbHVtbi5wcm9wcztcbiAgICAgICAgcmV0dXJuIHtcbi8vIDw8PDw8PDwgSEVBRFxuLy8gICAgICAgICAgIG5hbWU6IGNvbHVtbi5wcm9wcy5jaGlsZHJlbixcbi8vICAgICAgICAgICBmaWVsZDogY29sdW1uLnByb3BzLmRhdGFGaWVsZCxcbi8vICAgICAgICAgICBlZGl0YWJsZTogY29sdW1uLnByb3BzLmVkaXRhYmxlXG4vLyA9PT09PT09XG4gICAgICAgICAgbmFtZTogcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgZmllbGQ6IHByb3BzLmRhdGFGaWVsZCxcbiAgICAgICAgICAvL3doZW4geW91IHdhbnQgc2FtZSBhdXRvIGdlbmVyYXRlIHZhbHVlIGFuZCBub3QgYWxsb3cgZWRpdCwgZXhhbXBsZSBJRCBmaWVsZFxuICAgICAgICAgIGF1dG9WYWx1ZTpwcm9wcy5hdXRvVmFsdWV8fGZhbHNlLFxuICAgICAgICAgIC8vZm9yIGNyZWF0ZSBlaWR0b3IsIG5vIHBhcmFtcyBmb3IgY29sdW1uLmVkaXRhYmxlKCkgaW5kaWNhdGUgdGhhdCBlZGl0b3IgZm9yIG5ldyByb3dcbiAgICAgICAgICBlZGl0YWJsZTpwcm9wcy5lZGl0YWJsZSYmKHR5cGVvZiBwcm9wcy5lZGl0YWJsZT09PVwiZnVuY3Rpb25cIik/cHJvcHMuZWRpdGFibGUoKTpwcm9wcy5lZGl0YWJsZSxcbiAgICAgICAgICBmb3JtYXQ6cHJvcHMuZm9ybWF0P2Zvcm1hdDpmYWxzZVxuLy8gPj4+Pj4+PiA5OWNkNDU5ZGVmZmQ1MjYyZDg4NjkxZThiMDc1OTc3YmMwYTI4MTFmXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1ucyA9IFt7XG4gICAgICAgIG5hbWU6IHRoaXMucHJvcHMuY2hpbGRyZW4ucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGZpZWxkOiB0aGlzLnByb3BzLmNoaWxkcmVuLnByb3BzLmRhdGFGaWVsZCxcbiAgICAgICAgZWRpdGFibGU6IHRoaXMucHJvcHMuY2hpbGRyZW4ucHJvcHMuZWRpdGFibGVcbiAgICAgIH1dO1xuICAgIH1cbiAgICBpZih0aGlzLnByb3BzLmluc2VydFJvdyB8fCB0aGlzLnByb3BzLmRlbGV0ZVJvdyB8fCB0aGlzLnByb3BzLnNlYXJjaCl7XG4gICAgICByZXR1cm4oXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidG9vbC1iYXJcIj5cbiAgICAgICAgICA8VG9vbEJhciBlbmFibGVJbnNlcnQ9e3RoaXMucHJvcHMuaW5zZXJ0Um93fVxuICAgICAgICAgICAgICAgICAgIGVuYWJsZURlbGV0ZT17dGhpcy5wcm9wcy5kZWxldGVSb3d9XG4gICAgICAgICAgICAgICAgICAgZW5hYmxlU2VhcmNoPXt0aGlzLnByb3BzLnNlYXJjaH1cbiAgICAgICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgIG9uQWRkUm93PXt0aGlzLmhhbmRsZUFkZFJvdy5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgIG9uQWRkUm93QmVnaW49e3RoaXMuaGFuZGxlQWRkUm93QmVnaW4uYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICBvbkRyb3BSb3c9e3RoaXMuaGFuZGxlRHJvcFJvdy5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXt0aGlzLmhhbmRsZVNlYXJjaC5iaW5kKHRoaXMpfS8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKVxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyVGFibGVGaWx0ZXIoY29sdW1ucyl7XG4gICAgaWYodGhpcy5wcm9wcy5jb2x1bW5GaWx0ZXIpe1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRhYmxlRmlsdGVyIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgICAgICAgICByb3dTZWxlY3RUeXBlPXt0aGlzLnByb3BzLnNlbGVjdFJvdy5tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXI9e3RoaXMuaGFuZGxlRmlsdGVyRGF0YS5iaW5kKHRoaXMpfS8+XG4gICAgICApO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5Cb290c3RyYXBUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIGhlaWdodDogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YTogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICBzdHJpcGVkOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBob3ZlcjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNvbmRlbnNlZDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIHBhZ2luYXRpb246IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hQbGFjZWhvbGRlcjogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgc2VsZWN0Um93OiBSZWFjdC5Qcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1vZGU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgYmdDb2xvcjogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZDogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICAgIG9uU2VsZWN0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgICBvblNlbGVjdEFsbDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gICAgY2xpY2tUb1NlbGVjdDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gICAgaGlkZVNlbGVjdENvbHVtbjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbFxuICB9KSxcbiAgY2VsbEVkaXQ6IFJlYWN0LlByb3BUeXBlcy5zaGFwZSh7XG4gICAgbW9kZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgICBibHVyVG9TYXZlOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgICBhZnRlclNhdmVDZWxsOiBSZWFjdC5Qcm9wVHlwZXMuZnVuY1xuICB9KSxcbiAgaW5zZXJ0Um93OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgZGVsZXRlUm93OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgc2VhcmNoOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgY29sdW1uRmlsdGVyOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgdHJDbGFzc05hbWU6IFJlYWN0LlByb3BUeXBlcy5hbnksXG4gIG9wdGlvbnM6IFJlYWN0LlByb3BUeXBlcy5zaGFwZSh7XG4gICAgc29ydE5hbWU6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gICAgc29ydE9yZGVyOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFmdGVyVGFibGVDb21wbGV0ZTogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWZ0ZXJEZWxldGVSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICAgIGFmdGVySW5zZXJ0Um93OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgICBwYWdlOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICAgIHNpemVQZXJQYWdlTGlzdDogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICAgIHNpemVQZXJQYWdlOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICAgIHBhZ2luYXRpb25TaXplOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyXG4gIH0pXG59O1xuQm9vdHN0cmFwVGFibGUuZGVmYXVsdFByb3BzID0ge1xuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICBzdHJpcGVkOiBmYWxzZSxcbiAgYm9yZGVyZWQ6IHRydWUsXG4gIGhvdmVyOiBmYWxzZSxcbiAgY29uZGVuc2VkOiBmYWxzZSxcbiAgcGFnaW5hdGlvbjogZmFsc2UsXG4gIHNlYXJjaFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gIHNlbGVjdFJvdzoge1xuICAgIG1vZGU6IENvbnN0LlJPV19TRUxFQ1RfTk9ORSxcbiAgICBiZ0NvbG9yOiBDb25zdC5ST1dfU0VMRUNUX0JHX0NPTE9SLFxuICAgIHNlbGVjdGVkOiBbXSxcbiAgICBvblNlbGVjdDogdW5kZWZpbmVkLFxuICAgIG9uU2VsZWN0QWxsOiB1bmRlZmluZWQsXG4gICAgY2xpY2tUb1NlbGVjdDogZmFsc2UsXG4gICAgaGlkZVNlbGVjdENvbHVtbjogZmFsc2UsXG4gICAgY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsOiBmYWxzZVxuICB9LFxuICBjZWxsRWRpdDp7XG4gICAgbW9kZTogQ29uc3QuQ0VMTF9FRElUX05PTkUsXG4gICAgYmx1clRvU2F2ZTogZmFsc2UsXG4gICAgYWZ0ZXJTYXZlQ2VsbDogdW5kZWZpbmVkXG4gIH0sXG4gIGluc2VydFJvdzogZmFsc2UsXG4gIGRlbGV0ZVJvdzogZmFsc2UsXG4gIHNlYXJjaDogZmFsc2UsXG4gIGNvbHVtbkZpbHRlcjogZmFsc2UsXG4gIHRyQ2xhc3NOYW1lOiAnJyxcbiAgb3B0aW9uczoge1xuICAgIHNvcnROYW1lOiB1bmRlZmluZWQsXG4gICAgc29ydE9yZGVyOiBDb25zdC5TT1JUX0RFU0MsXG4gICAgYWZ0ZXJUYWJsZUNvbXBsZXRlOiB1bmRlZmluZWQsXG4gICAgYWZ0ZXJEZWxldGVSb3c6IHVuZGVmaW5lZCxcbiAgICBhZnRlckluc2VydFJvdzogdW5kZWZpbmVkLFxuICAgIHBhZ2U6IDEsXG4gICAgc2l6ZVBlclBhZ2VMaXN0OiBDb25zdC5TSVpFX1BFUl9QQUdFX0xJU1QsXG4gICAgc2l6ZVBlclBhZ2U6IENvbnN0LlNJWkVfUEVSX1BBR0VfTElTVFswXSxcbiAgICBwYWdpbmF0aW9uU2l6ZTogQ29uc3QuUEFHSU5BVElPTl9TSVpFXG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJvb3RzdHJhcFRhYmxlO1xuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBTT1JUX0RFU0M6IFwiZGVzY1wiLFxuICBTT1JUX0FTQzogXCJhc2NcIixcbiAgU0laRV9QRVJfUEFHRTogMTAsXG4gIE5FWFRfUEFHRTogXCI+XCIsXG4gIExBU1RfUEFHRTogXCI+PlwiLFxuICBQUkVfUEFHRTogXCI8XCIsXG4gIEZJUlNUX1BBR0U6IFwiPDxcIixcbiAgUk9XX1NFTEVDVF9CR19DT0xPUjogXCJcIixcbiAgUk9XX1NFTEVDVF9OT05FOiBcIm5vbmVcIixcbiAgUk9XX1NFTEVDVF9TSU5HTEU6IFwicmFkaW9cIixcbiAgUk9XX1NFTEVDVF9NVUxUSTogXCJjaGVja2JveFwiLFxuICBDRUxMX0VESVRfTk9ORTogXCJub25lXCIsXG4gIENFTExfRURJVF9DTElDSzogXCJjbGlja1wiLFxuICBDRUxMX0VESVRfREJDTElDSzogXCJkYmNsaWNrXCIsXG4gIFNJWkVfUEVSX1BBR0VfTElTVDogWzEwLCAyNSwgMzAsIDUwXSxcbiAgUEFHSU5BVElPTl9TSVpFOiA1XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xudmFyIEVkaXRvcj1mdW5jdGlvbihlZGl0YWJsZSwgYXR0ciwgZm9ybWF0LCBlZGl0b3JDbGFzcywgZGVmYXVsdFZhbHVlKXtcblxuXG4gICAgaWYoZWRpdGFibGU9PT10cnVlfHx0eXBlb2YgZWRpdGFibGU9PT1cInN0cmluZ1wiKXsvL3NpbXBsZSBkZWNsYXJlXG4gICAgICAgIHZhciB0eXBlPWVkaXRhYmxlPT09dHJ1ZT8ndGV4dCc6ZWRpdGFibGU7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8aW5wdXQgey4uLmF0dHJ9IHR5cGU9e3R5cGV9IGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17KGVkaXRvckNsYXNzfHxcIlwiKStcIiBmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dFwifSAvPlxuICAgICAgICApXG4gICAgfSBlbHNlIGlmKCFlZGl0YWJsZSl7XG4gICAgICB2YXIgdHlwZT1lZGl0YWJsZT09PXRydWU/J3RleHQnOmVkaXRhYmxlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8aW5wdXQgey4uLmF0dHJ9IHR5cGU9e3R5cGV9IGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfSBkaXNhYmxlZD0nZGlzYWJsZWQnXG4gICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17KGVkaXRvckNsYXNzfHxcIlwiKStcIiBmb3JtLWNvbnRyb2wgZWRpdG9yIGVkaXQtdGV4dFwifSAvPlxuICAgICAgKVxuICAgIH0gZWxzZSBpZihlZGl0YWJsZS50eXBlKXsvL3N0YW5kYXJkIGRlY2xhcmVcbiAgICAgICAgLy9wdXQgc3R5bGUgaWYgZXhpc3RcbiAgICAgICAgZWRpdGFibGUuc3R5bGUmJihhdHRyLnN0eWxlPWVkaXRhYmxlLnN0eWxlKTtcblxuICAgICAgICAvL3B1dCBjbGFzcyBpZiBleGlzdFxuICAgICAgICBhdHRyLmNsYXNzTmFtZSA9IChlZGl0b3JDbGFzc3x8XCJcIikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGZvcm0tY29udHJvbCBlZGl0b3IgZWRpdC1cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGUudHlwZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRhYmxlLmNsYXNzTmFtZT8oXCIgXCIrZWRpdGFibGUuY2xhc3NOYW1lKTpcIlwiKTtcblxuICAgICAgICBpZihlZGl0YWJsZS50eXBlID09PSAnc2VsZWN0Jyl7Ly9wcm9jZXNzIHNlbGVjdCBpbnB1dFxuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBbXSwgdmFsdWVzPWVkaXRhYmxlLm9wdGlvbnMudmFsdWVzO1xuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKXsvL29ubHkgY2FuIHVzZSBhcnJyYXkgZGF0YSBmb3Igb3B0aW9uc1xuICAgICAgICAgICAgICAgIHZhciByb3dWYWx1ZTtcbiAgICAgICAgICAgICAgICBvcHRpb25zPXZhbHVlcy5tYXAoZnVuY3Rpb24oZCxpKXtcbiAgICAgICAgICAgICAgICAgICAgcm93VmFsdWU9Zm9ybWF0P2Zvcm1hdChkKTpkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17J29wdGlvbicraX0gdmFsdWU9e2R9Pntyb3dWYWx1ZX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICAgIDxzZWxlY3Qgey4uLmF0dHJ9IGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfT57b3B0aW9uc308L3NlbGVjdD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZihlZGl0YWJsZS50eXBlID09PSAndGV4dGFyZWEnKXsvL3Byb2Nlc3MgdGV4dGFyZWEgaW5wdXRcbiAgICAgICAgICAgIC8vcHV0ICBvdGhlciBpZiBleGlzdFxuICAgICAgICAgICAgZWRpdGFibGUuY29scyYmKGF0dHIuY29scz1lZGl0YWJsZS5jb2xzKTtcbiAgICAgICAgICAgIGVkaXRhYmxlLnJvd3MmJihhdHRyLnJvd3M9ZWRpdGFibGUucm93cyk7XG4gICAgICAgICAgICB2YXIga2V5VXBIYW5kbGVyPWF0dHIub25LZXlEb3duLHNhdmVCdG49bnVsbDtcbiAgICAgICAgICAgIGlmKGtleVVwSGFuZGxlcil7XG4gICAgICAgICAgICAgICAgYXR0ci5vbktleURvd249ZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgIT0gMTMpIHsgLy9ub3QgUHJlc3NlZCBFTlRFUlxuICAgICAgICAgICAgICAgICAgICAgICAga2V5VXBIYW5kbGVyKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBzYXZlQnRuPTxidXR0byBjbGFzc05hbWU9XCJidG4gYnRuLWluZm8gYnRuLXhzIHRleHRhcmVhLXNhdmUtYnRuXCIgb25DbGljaz17a2V5VXBIYW5kbGVyfT5zYXZlPC9idXR0bz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSB7Li4uYXR0cn0gZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9PjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgIHtzYXZlQnRufVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYoZWRpdGFibGUudHlwZSA9PT0gJ2NoZWNrYm94Jyl7XG4gICAgICAgICAgbGV0IHZhbHVlcyA9ICd0cnVlOmZhbHNlJztcbiAgICAgICAgICBpZihlZGl0YWJsZS5vcHRpb25zICYmIGVkaXRhYmxlLm9wdGlvbnMudmFsdWVzKXtcbiAgICAgICAgICAgIC8vIHZhbHVlcyA9IGVkaXRhYmxlLm9wdGlvbnMudmFsdWVzLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICB2YWx1ZXMgPSBlZGl0YWJsZS5vcHRpb25zLnZhbHVlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgYXR0ci5jbGFzc05hbWUgPSBhdHRyLmNsYXNzTmFtZS5yZXBsYWNlKCdmb3JtLWNvbnRyb2wnLCcnKTtcbiAgICAgICAgICBhdHRyLmNsYXNzTmFtZSArPSAnIGNoZWNrYm94IHB1bGwtcmlnaHQnO1xuXG4gICAgICAgICAgbGV0IGNoZWNrZWQgPSBkZWZhdWx0VmFsdWUgPT0gdmFsdWVzLnNwbGl0KCc6JylbMF0/dHJ1ZTpmYWxzZTtcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8aW5wdXQgey4uLmF0dHJ9IHR5cGU9J2NoZWNrYm94JyB2YWx1ZT17dmFsdWVzfSBkZWZhdWx0Q2hlY2tlZD17Y2hlY2tlZH0vPlxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZXsvL3Byb2Nlc3Mgb3RoZXIgaW5wdXQgdHlwZS4gYXMgcGFzc3dvcmQsdXJsLGVtYWlsLi4uXG4gICAgICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICAgICAgPGlucHV0IHsuLi5hdHRyfSB0eXBlPXt0eXBlfSBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX0vPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vZGVmYXVsdCByZXR1cm4gZm9yIG90aGVyIGNhc2Ugb2YgZWRpdGFibGVcbiAgICByZXR1cm4oXG4gICAgICAgIDxpbnB1dCB7Li4uYXR0cn0gdHlwZT1cInRleHRcIiBjbGFzc05hbWU9eyhlZGl0b3JDbGFzc3x8XCJcIikrXCIgZm9ybS1jb250cm9sIGVkaXRvciBlZGl0LXRleHRcIn0vPlxuICAgIClcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgVG9hc3RyIGZyb20gJ3JlYWN0LXRvYXN0cic7XG5cbnZhciBUb2FzdHJDb250YWluZXI9VG9hc3RyLlRvYXN0Q29udGFpbmVyO1xudmFyIFRvYXN0ck1lc3NhZ2VGYWN0b3J5PVJlYWN0LmNyZWF0ZUZhY3RvcnkoVG9hc3RyLlRvYXN0TWVzc2FnZS5hbmltYXRpb24pO1xuXG5jbGFzcyBOb3RpZmljYXRpb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG4gIC8vIGFsbG93IHR5cGUgaXMgc3VjY2VzcyxpbmZvLHdhcm5pbmcsZXJyb3JcbiAgbm90aWNlKHR5cGUsbXNnLHRpdGxlKXtcbiAgICB0aGlzLnJlZnMudG9hc3RyW3R5cGVdKFxuICAgICAgICBtc2csdGl0bGUsIHtcbiAgICAgICAgICBtb2RlOidzaW5nbGUnLFxuICAgICAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICAgICAgZXh0ZW5kZWRUaW1lT3V0OiAxMDAwLFxuICAgICAgICAgIHNob3dBbmltYXRpb246IFwiYW5pbWF0ZWQgIGJvdW5jZUluXCIsXG4gICAgICAgICAgaGlkZUFuaW1hdGlvbjogXCJhbmltYXRlZCBib3VuY2VPdXRcIlxuICAgICAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHJldHVybihcbiAgICAgICAgPFRvYXN0ckNvbnRhaW5lciByZWY9XCJ0b2FzdHJcIiB0b2FzdE1lc3NhZ2VGYWN0b3J5PXtUb2FzdHJNZXNzYWdlRmFjdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInRvYXN0LWNvbnRhaW5lclwiICBjbGFzc05hbWU9XCJ0b2FzdC10b3AtcmlnaHRcIj48L1RvYXN0ckNvbnRhaW5lcj5cbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm90aWZpY2F0aW9uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcblxuY2xhc3MgU2VsZWN0Um93SGVhZGVyQ29sdW1uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIHJlbmRlcigpe1xuICAgIHZhciB0aFN0eWxlID0ge1xuICAgICAgd2lkdGg6IDM1XG4gICAgfTtcblxuICAgIHJldHVybihcbiAgICAgIDx0aCBzdHlsZT17dGhTdHlsZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGgtaW5uZXIgdGFibGUtaGVhZGVyLWNvbHVtblwiPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGg+XG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdFJvd0hlYWRlckNvbHVtbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc3QgZnJvbSAnLi9Db25zdCc7XG5pbXBvcnQgVGFibGVSb3cgZnJvbSAnLi9UYWJsZVJvdyc7XG5pbXBvcnQgVGFibGVDb2x1bW4gZnJvbSAnLi9UYWJsZUNvbHVtbic7XG5pbXBvcnQgVGFibGVFZGl0Q29sdW1uIGZyb20gJy4vVGFibGVFZGl0Q29sdW1uJztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcblxudmFyIGlzRnVuPWZ1bmN0aW9uKG9iail7XG4gIHJldHVybiBvYmomJih0eXBlb2Ygb2JqPT09XCJmdW5jdGlvblwiKTtcblxufTtcbmNsYXNzIFRhYmxlQm9keSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY3VyckVkaXRDZWxsOiBudWxsXG4gICAgfTtcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciBjb250YWluZXJDbGFzc2VzID0gY2xhc3NTZXQoXCJ0YWJsZS1jb250YWluZXJcIik7XG5cbiAgICB2YXIgdGFibGVDbGFzc2VzID0gY2xhc3NTZXQoXCJ0YWJsZVwiLCB7XG4gICAgICAndGFibGUtc3RyaXBlZCc6IHRoaXMucHJvcHMuc3RyaXBlZCxcbiAgICAgICd0YWJsZS1ib3JkZXJlZCc6IHRoaXMucHJvcHMuYm9yZGVyZWQsXG4gICAgICAndGFibGUtaG92ZXInOiB0aGlzLnByb3BzLmhvdmVyLFxuICAgICAgJ3RhYmxlLWNvbmRlbnNlZCc6IHRoaXMucHJvcHMuY29uZGVuc2VkXG4gICAgfSk7XG5cbiAgICB2YXIgaXNTZWxlY3RSb3dEZWZpbmVkID0gdGhpcy5faXNTZWxlY3RSb3dEZWZpbmVkKCk7XG4gICAgdmFyIHRhYmxlSGVhZGVyID0gdGhpcy5yZW5kZXJUYWJsZUhlYWRlcihpc1NlbGVjdFJvd0RlZmluZWQpO1xuXG4gICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucHJvcHMuZGF0YS5tYXAoZnVuY3Rpb24oZGF0YSwgcil7XG4gICAgICB2YXIgdGFibGVDb2x1bW5zID0gdGhpcy5wcm9wcy5jb2x1bW5zLm1hcChmdW5jdGlvbihjb2x1bW4sIGkpe1xuICAgICAgICB2YXIgZmllbGRWYWx1ZSA9IGRhdGFbY29sdW1uLm5hbWVdO1xuICAgICAgICBpZih0aGlzLmVkaXRpbmcgJiZcbiAgICAgICAgICBjb2x1bW4ubmFtZSAhPT0gdGhpcy5wcm9wcy5rZXlGaWVsZCAmJiAvLyBLZXkgZmllbGQgY2FuJ3QgYmUgZWRpdFxuICAgICAgICAgIGNvbHVtbi5lZGl0YWJsZSAmJiAvLyBjb2x1bW4gaXMgZWRpdGFibGU/IGRlZmF1bHQgaXMgdHJ1ZSwgdXNlciBjYW4gc2V0IGl0IGZhbHNlXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyRWRpdENlbGwgIT0gbnVsbCAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuY3VyckVkaXRDZWxsLnJpZCA9PSByICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5jdXJyRWRpdENlbGwuY2lkID09IGkpe1xuICAgICAgICAgICAgdmFyIGZvcm1hdD1jb2x1bW4uZm9ybWF0P2Z1bmN0aW9uKHZhbHVlKXtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5mb3JtYXQodmFsdWUsZGF0YSkucmVwbGFjZSgvPC4qPz4vZywnJyk7XG4gICAgICAgICAgICB9OmZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICA8VGFibGVFZGl0Q29sdW1uIGNvbXBsZXRlRWRpdD17dGhpcy5oYW5kbGVDb21wbGV0ZUVkaXRDZWxsLmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hZGQgYnkgYmx1ZXNwcmluZyBmb3IgY29sdW1uIGVkaXRvciBjdXN0b21pemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZT17aXNGdW4oY29sdW1uLmVkaXRhYmxlKT9jb2x1bW4uZWRpdGFibGUoZmllbGRWYWx1ZSxkYXRhLHIsaSk6Y29sdW1uLmVkaXRhYmxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD17Y29sdW1uLmZvcm1hdD9mb3JtYXQ6ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdXJUb1NhdmU9e3RoaXMucHJvcHMuY2VsbEVkaXQuYmx1clRvU2F2ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleD17cn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleD17aX0+XG4gICAgICAgICAgICAgICAge2ZpZWxkVmFsdWV9XG4gICAgICAgICAgICAgIDwvVGFibGVFZGl0Q29sdW1uPlxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgLy9hZGQgYnkgYmx1ZXNwcmluZyBmb3IgY2xhc3NOYW1lIGN1c3RvbWl6ZVxuICAgICAgICAgIHZhciB0ZENsYXNzTmFtZT1pc0Z1bihjb2x1bW4uY2xhc3NOYW1lKT9jb2x1bW4uY2xhc3NOYW1lKGZpZWxkVmFsdWUsZGF0YSxyLGkpOmNvbHVtbi5jbGFzc05hbWU7XG5cbiAgICAgICAgICBpZih0eXBlb2YgY29sdW1uLmZvcm1hdCAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICB2YXIgZm9ybWF0dGVkVmFsdWUgPSBjb2x1bW4uZm9ybWF0KGZpZWxkVmFsdWUsIGRhdGEpO1xuICAgICAgICAgICAgaWYgKCFSZWFjdC5pc1ZhbGlkRWxlbWVudChmb3JtYXR0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBmb3JtYXR0ZWRWYWx1ZX19PjwvZGl2PjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgPFRhYmxlQ29sdW1uIGRhdGFBbGlnbj17Y29sdW1uLmFsaWdufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0ZENsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxFZGl0PXt0aGlzLnByb3BzLmNlbGxFZGl0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb25FZGl0PXt0aGlzLmhhbmRsZUVkaXRDZWxsLmJpbmQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Y29sdW1uLndpZHRofT5cbiAgICAgICAgICAgICAgICB7Zm9ybWF0dGVkVmFsdWV9XG4gICAgICAgICAgICAgIDwvVGFibGVDb2x1bW4+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgICA8VGFibGVDb2x1bW4gZGF0YUFsaWduPXtjb2x1bW4uYWxpZ259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RkQ2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbEVkaXQ9e3RoaXMucHJvcHMuY2VsbEVkaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRkZW49e2NvbHVtbi5oaWRkZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVkaXQ9e3RoaXMuaGFuZGxlRWRpdENlbGwuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtjb2x1bW4ud2lkdGh9PlxuICAgICAgICAgICAgICAgIHtmaWVsZFZhbHVlfVxuICAgICAgICAgICAgICA8L1RhYmxlQ29sdW1uPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgdGhpcyk7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLnByb3BzLnNlbGVjdGVkUm93S2V5cy5pbmRleE9mKGRhdGFbdGhpcy5wcm9wcy5rZXlGaWVsZF0pICE9IC0xO1xuLy8gPDw8PDw8PCBIRUFEXG4gICAgICB2YXIgc2VsZWN0Um93Q29sdW1uID0gaXNTZWxlY3RSb3dEZWZpbmVkICYmICF0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTZWxlY3RSb3dDb2x1bW4oc2VsZWN0ZWQpOm51bGw7XG4vLyA9PT09PT09XG4gICAgICAvLyB2YXIgc2VsZWN0Um93Q29sdW1uID0gaXNTZWxlY3RSb3dEZWZpbmVkP3RoaXMucmVuZGVyU2VsZWN0Um93Q29sdW1uKHNlbGVjdGVkKTpudWxsO1xuICAgICAgLy9hZGQgYnkgYmx1ZXNwcmluZyBmb3IgY2xhc3NOYW1lIGN1c3RvbWl6ZVxuICAgICAgdmFyIHRyQ2xhc3NOYW1lPWlzRnVuKHRoaXMucHJvcHMudHJDbGFzc05hbWUpP3RoaXMucHJvcHMudHJDbGFzc05hbWUoZGF0YSxyKTp0aGlzLnByb3BzLnRyQ2xhc3NOYW1lO1xuLy8gPj4+Pj4+PiA5OWNkNDU5ZGVmZmQ1MjYyZDg4NjkxZThiMDc1OTc3YmMwYTI4MTFmXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGFibGVSb3cgaXNTZWxlY3RlZD17c2VsZWN0ZWR9IGtleT17cn0gY2xhc3NOYW1lPXt0ckNsYXNzTmFtZX1cbiAgICAgICAgICBzZWxlY3RSb3c9e2lzU2VsZWN0Um93RGVmaW5lZD90aGlzLnByb3BzLnNlbGVjdFJvdzp1bmRlZmluZWR9XG4gICAgICAgICAgZW5hYmxlQ2VsbEVkaXQ9e3RoaXMucHJvcHMuY2VsbEVkaXQubW9kZSAhPT0gQ29uc3QuQ0VMTF9FRElUX05PTkV9XG4gICAgICAgICAgb25TZWxlY3RSb3c9e3RoaXMuaGFuZGxlU2VsZWN0Um93LmJpbmQodGhpcyl9PlxuICAgICAgICAgIHtzZWxlY3RSb3dDb2x1bW59XG4gICAgICAgICAge3RhYmxlQ29sdW1uc31cbiAgICAgICAgPC9UYWJsZVJvdz5cbiAgICAgIClcbiAgICB9LCB0aGlzKTtcblxuICAgIGlmKHRhYmxlUm93cy5sZW5ndGggPT09IDApe1xuICAgICAgdGFibGVSb3dzLnB1c2goXG4gICAgICA8VGFibGVSb3cga2V5PVwiIyN0YWJsZS1lbXB0eSMjXCI+XG4gICAgICAgIDx0ZCBjb2xTcGFuPXt0aGlzLnByb3BzLmNvbHVtbnMubGVuZ3RoKyhpc1NlbGVjdFJvd0RlZmluZWQ/MTowKX1cbiAgICAgICAgICAgIHN0eWxlPXt7IHRleHRBbGlnbjogXCJjZW50ZXJcIiB9fT5cbiAgICAgICAgICAgIFRoZXJlIGlzIG5vIGRhdGEgdG8gZGlzcGxheVxuICAgICAgICA8L3RkPlxuICAgICAgPC9UYWJsZVJvdz4pO1xuICAgIH1cblxuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgIHJldHVybihcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjb250YWluZXJDbGFzc2VzfT5cbiAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGFibGVDbGFzc2VzfT5cbiAgICAgICAgICB7dGFibGVIZWFkZXJ9XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAge3RhYmxlUm93c31cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmVuZGVyVGFibGVIZWFkZXIoaXNTZWxlY3RSb3dEZWZpbmVkKXtcbiAgICB2YXIgc2VsZWN0Um93SGVhZGVyID0gbnVsbDtcblxuICAgIGlmKGlzU2VsZWN0Um93RGVmaW5lZCl7XG4gICAgICBsZXQgc3R5bGUgPSB7XG4gICAgICAgIHdpZHRoOjM1XG4gICAgICB9XG4gICAgICBzZWxlY3RSb3dIZWFkZXIgPSB0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uP251bGw6KDx0aCBzdHlsZT17c3R5bGV9IGtleT17LTF9PjwvdGg+KTtcbiAgICB9XG4gICAgdmFyIHRoZWFkZXIgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICBsZXQgc3R5bGU9e1xuICAgICAgICBkaXNwbGF5OiBjb2x1bW4uaGlkZGVuP1wibm9uZVwiOm51bGwsXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGhcbiAgICAgIH07XG4gICAgICByZXR1cm4gKDx0aCBzdHlsZT17c3R5bGV9IGtleT17aX0gY2xhc3NOYW1lPXtjb2x1bW4uY2xhc3NOYW1lfT48L3RoPik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4oXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj57c2VsZWN0Um93SGVhZGVyfXt0aGVhZGVyfTwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgIClcbiAgfVxuXG4gIGhhbmRsZVNlbGVjdFJvdyhyb3dJbmRleCwgaXNTZWxlY3RlZCl7XG4gICAgdmFyIGtleSwgc2VsZWN0ZWRSb3c7XG4gICAgdGhpcy5wcm9wcy5kYXRhLmZvckVhY2goZnVuY3Rpb24ocm93LCBpKXtcbiAgICAgIGlmKGkgPT0gcm93SW5kZXgtMSl7XG4gICAgICAgIGtleSA9IHJvd1t0aGlzLnByb3BzLmtleUZpZWxkXTtcbiAgICAgICAgc2VsZWN0ZWRSb3cgPSByb3c7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5wcm9wcy5vblNlbGVjdFJvdyhzZWxlY3RlZFJvdywgaXNTZWxlY3RlZCk7XG4gIH1cblxuICBoYW5kbGVTZWxlY3RSb3dDb2x1bUNoYW5nZShlKXtcbiAgICBpZighdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCB8fCAhdGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdEFuZEVkaXRDZWxsKXtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Um93KFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnJvd0luZGV4LCBlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRWRpdENlbGwocm93SW5kZXgsIGNvbHVtbkluZGV4KXtcbiAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xuICAgIGlmKHRoaXMuX2lzU2VsZWN0Um93RGVmaW5lZCgpKXtcbiAgICAgIGNvbHVtbkluZGV4LS07XG4gICAgICBpZih0aGlzLnByb3BzLnNlbGVjdFJvdy5oaWRlU2VsZWN0Q29sdW1uKVxuICAgICAgICBjb2x1bW5JbmRleCsrO1xuICAgIH1cbiAgICByb3dJbmRleC0tO1xuICAgIHZhciBzdGF0ZU9iaiA9IHtcbiAgICAgIGN1cnJFZGl0Q2VsbDoge1xuICAgICAgICByaWQ6IHJvd0luZGV4LFxuICAgICAgICBjaWQ6IGNvbHVtbkluZGV4XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmKHRoaXMucHJvcHMuc2VsZWN0Um93LmNsaWNrVG9TZWxlY3RBbmRFZGl0Q2VsbCl7XG4gICAgICAvL2lmIGVkaXQgY2VsbCwgdHJpZ2dlciByb3cgc2VsZWN0aW9ucyBhbHNvXG4gICAgICBsZXQgc2VsZWN0ZWQgPSB0aGlzLnByb3BzLnNlbGVjdGVkUm93S2V5cy5pbmRleE9mKHRoaXMucHJvcHMuZGF0YVtyb3dJbmRleF1bdGhpcy5wcm9wcy5rZXlGaWVsZF0pICE9IC0xO1xuICAgICAgdGhpcy5oYW5kbGVTZWxlY3RSb3cocm93SW5kZXgrMSwgIXNlbGVjdGVkKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZU9iaik7XG4gIH1cblxuICBjYW5jZWxFZGl0KCl7XG4gICAgdmFyIGN1cnJFZGl0Q2VsbD10aGlzLnN0YXRlLmN1cnJFZGl0Q2VsbDtcbiAgICBpZihjdXJyRWRpdENlbGwpe1xuICAgICAgdGhpcy5oYW5kbGVDb21wbGV0ZUVkaXRDZWxsKG51bGwsY3VyckVkaXRDZWxsLnJpZCxjdXJyRWRpdENlbGwuY2lkKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVDb21wbGV0ZUVkaXRDZWxsKG5ld1ZhbCwgcm93SW5kZXgsIGNvbHVtbkluZGV4KXtcbiAgICB0aGlzLnNldFN0YXRlKHtjdXJyRWRpdENlbGw6IG51bGx9KTtcbiAgICBpZihudWxsICE9IG5ld1ZhbClcbiAgICAgIHRoaXMucHJvcHMuY2VsbEVkaXQuX19vbkNvbXBsZXRlRWRpdF9fKG5ld1ZhbCwgcm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxuXG4gIHJlbmRlclNlbGVjdFJvd0NvbHVtbihzZWxlY3RlZCl7XG4gICAgaWYodGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSkge1xuICAgICAgcmV0dXJuICg8VGFibGVDb2x1bW4+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzZWxlY3Rpb25cIiBjaGVja2VkPXtzZWxlY3RlZH0gb25DaGFuZ2U9e3RoaXMuaGFuZGxlU2VsZWN0Um93Q29sdW1DaGFuZ2UuYmluZCh0aGlzKX0vPjwvVGFibGVDb2x1bW4+KTtcbiAgICB9ZWxzZSB7XG4gICAgICByZXR1cm4gKDxUYWJsZUNvbHVtbiA+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNoZWNrZWQ9e3NlbGVjdGVkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3RSb3dDb2x1bUNoYW5nZS5iaW5kKHRoaXMpfS8+PC9UYWJsZUNvbHVtbj4pO1xuICAgIH1cbiAgfVxuXG4gIF9pc1NlbGVjdFJvd0RlZmluZWQoKXtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWxlY3RSb3cubW9kZSA9PSBDb25zdC5ST1dfU0VMRUNUX1NJTkdMRSB8fFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VsZWN0Um93Lm1vZGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9NVUxUSTtcbiAgfVxufVxuVGFibGVCb2R5LnByb3BUeXBlcyA9IHtcbiAgZGF0YTogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICBjb2x1bW5zOiBSZWFjdC5Qcm9wVHlwZXMuYXJyYXksXG4gIHN0cmlwZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBib3JkZXJlZDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGhvdmVyOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgY29uZGVuc2VkOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAga2V5RmllbGQ6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdGVkUm93S2V5czogUmVhY3QuUHJvcFR5cGVzLmFycmF5LFxuICBvblNlbGVjdFJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZUJvZHk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuXG5jbGFzcyBUYWJsZUNvbHVtbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIGhhbmRsZUNlbGxFZGl0KGUpe1xuICAgIGlmKHRoaXMucHJvcHMuY2VsbEVkaXQubW9kZSA9PSBDb25zdC5DRUxMX0VESVRfREJDTElDSyl7XG4gICAgICBpZihkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KSB7XG4gICAgICAgIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO1xuICAgICAgfSBlbHNlIGlmKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9wcy5vbkVkaXQoXG4gICAgICBlLmN1cnJlbnRUYXJnZXQucGFyZW50RWxlbWVudC5yb3dJbmRleCxcbiAgICAgIGUuY3VycmVudFRhcmdldC5jZWxsSW5kZXgpO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIHRkU3R5bGUgPSB7XG4gICAgICB0ZXh0QWxpZ246IHRoaXMucHJvcHMuZGF0YUFsaWduLFxuICAgICAgZGlzcGxheTogdGhpcy5wcm9wcy5oaWRkZW4/XCJub25lXCI6bnVsbFxuICAgIH07XG5cbiAgICB2YXIgb3B0cyA9IHt9O1xuICAgIGlmKHRoaXMucHJvcHMuY2VsbEVkaXQpe1xuICAgICAgaWYodGhpcy5wcm9wcy5jZWxsRWRpdC5tb2RlID09IENvbnN0LkNFTExfRURJVF9DTElDSyl7XG4gICAgICAgIG9wdHMub25DbGljayA9IHRoaXMuaGFuZGxlQ2VsbEVkaXQuYmluZCh0aGlzKTtcbiAgICAgIH1lbHNlIGlmKHRoaXMucHJvcHMuY2VsbEVkaXQubW9kZSA9PSBDb25zdC5DRUxMX0VESVRfREJDTElDSyl7XG4gICAgICAgIG9wdHMub25Eb3VibGVDbGljayA9IHRoaXMuaGFuZGxlQ2VsbEVkaXQuYmluZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZCBzdHlsZT17dGRTdHlsZX0gY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZX0gey4uLm9wdHN9PlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvdGQ+XG4gICAgKVxuICB9XG59XG5UYWJsZUNvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGRhdGFBbGlnbjogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgaGlkZGVuOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOlJlYWN0LlByb3BUeXBlcy5zdHJpbmdcbn07XG5cblRhYmxlQ29sdW1uLmRlZmF1bHRQcm9wcyA9IHtcbiAgZGF0YUFsaWduOiBcImxlZnRcIixcbiAgaGlkZGVuOiBmYWxzZSxcbiAgY2xhc3NOYW1lOlwiXCJcbn1cbmV4cG9ydCBkZWZhdWx0IFRhYmxlQ29sdW1uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcbmltcG9ydCBFZGl0b3IgZnJvbSAnLi9FZGl0b3InXG5pbXBvcnQgTm90aWZpZXIgZnJvbSAnLi9Ob3RpZmljYXRpb24uanMnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5jbGFzcyBUYWJsZUVkaXRDb2x1bW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMudGltZW91dGVDbGVhcj0wO1xuICAgICAgICB0aGlzLnN0YXRlPXtcbiAgICAgICAgICAgIHNoYWtlRWRpdG9yOmZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gIGhhbmRsZUtleVByZXNzKGUpe1xuICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIHsgLy9QcmVzc2VkIEVOVEVSXG4gICAgICBsZXQgdmFsdWUgPSBlLmN1cnJlbnRUYXJnZXQudHlwZSA9PSAnY2hlY2tib3gnP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRDaGVja0JveFZhbHVlKGUpOmUuY3VycmVudFRhcmdldC52YWx1ZTtcblxuICAgICAgaWYoIXRoaXMudmFsaWRhdG9yKHZhbHVlKSl7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wcy5jb21wbGV0ZUVkaXQoXG4gICAgICAgIHZhbHVlLCB0aGlzLnByb3BzLnJvd0luZGV4LCB0aGlzLnByb3BzLmNvbEluZGV4KTtcbiAgICB9ZWxzZSBpZihlLmtleUNvZGUgPT0gMjcpe1xuICAgICAgdGhpcy5wcm9wcy5jb21wbGV0ZUVkaXQoXG4gICAgICAgIG51bGwsIHRoaXMucHJvcHMucm93SW5kZXgsIHRoaXMucHJvcHMuY29sSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUJsdXIoZSl7XG4gICAgaWYodGhpcy5wcm9wcy5ibHVyVG9TYXZlKXtcbiAgICAgIGxldCB2YWx1ZSA9IGUuY3VycmVudFRhcmdldC50eXBlID09ICdjaGVja2JveCc/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldENoZWNrQm94VmFsdWUoZSk6ZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgaWYoIXRoaXMudmFsaWRhdG9yKHZhbHVlKSl7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5wcm9wcy5jb21wbGV0ZUVkaXQoXG4gICAgICAgICAgdmFsdWUsIHRoaXMucHJvcHMucm93SW5kZXgsIHRoaXMucHJvcHMuY29sSW5kZXgpO1xuICAgIH1cbiAgfVxuICB2YWxpZGF0b3IodmFsdWUpe1xuICAgICAgdmFyIHRzPXRoaXM7XG4gICAgICBpZih0cy5wcm9wcy5lZGl0YWJsZS52YWxpZGF0b3Ipe1xuICAgICAgICAgIHZhciB2YWxpZD10cy5wcm9wcy5lZGl0YWJsZS52YWxpZGF0b3IodmFsdWUpO1xuICAgICAgICAgIGlmKHZhbGlkIT09dHJ1ZSl7XG4gICAgICAgICAgICAgIHRzLnJlZnMubm90aWZpZXIubm90aWNlKCdlcnJvcicsdmFsaWQsXCJQcmVzc2VkIEVTQyBjYW4gY2FuY2VsXCIpO1xuICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0cy5yZWZzLmlucHV0UmVmLmdldERPTU5vZGUoKTtcbiAgICAgICAgICAgICAgLy9hbmltYXRlIGlucHV0XG4gICAgICAgICAgICAgIHRzLmNsZWFyVGltZW91dCgpO1xuICAgICAgICAgICAgICB0cy5zZXRTdGF0ZSh7c2hha2VFZGl0b3I6dHJ1ZX0pO1xuICAgICAgICAgICAgICB0cy50aW1lb3V0ZUNsZWFyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0cy5zZXRTdGF0ZSh7c2hha2VFZGl0b3I6ZmFsc2V9KTt9LDMwMCk7XG4gICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG4gIGNsZWFyVGltZW91dCgpe1xuICAgICAgaWYodGhpcy50aW1lb3V0ZUNsZWFyIT0wKXtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0ZUNsZWFyKTtcbiAgICAgICAgICB0aGlzLnRpbWVvdXRlQ2xlYXI9MDtcbiAgICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgICAgdmFyIGlucHV0ID0gdGhpcy5yZWZzLmlucHV0UmVmLmdldERPTU5vZGUoKTtcbiAgICAgIC8vIGlucHV0LnZhbHVlID0gdGhpcy5wcm9wcy5jaGlsZHJlbnx8Jyc7XG4gICAgICBpbnB1dC5mb2N1cygpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jbGVhclRpbWVvdXQoKTtcbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciBlZGl0YWJsZT10aGlzLnByb3BzLmVkaXRhYmxlLFxuICAgICAgICBmb3JtYXQ9dGhpcy5wcm9wcy5mb3JtYXQsXG4gICAgICAgIGF0dHI9e1xuICAgICAgICAgICAgcmVmOlwiaW5wdXRSZWZcIixcbiAgICAgICAgICAgIG9uS2V5RG93bjp0aGlzLmhhbmRsZUtleVByZXNzLmJpbmQodGhpcyksXG4gICAgICAgICAgICBvbkJsdXI6dGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcylcbiAgICAgICAgfTtcbiAgICAgICAgLy9wdXQgcGxhY2Vob2xkZXIgaWYgZXhpc3RcbiAgICAgICAgZWRpdGFibGUucGxhY2Vob2xkZXImJihhdHRyLnBsYWNlaG9sZGVyPWVkaXRhYmxlLnBsYWNlaG9sZGVyKTtcblxuICAgIHZhciBlZGl0b3JDbGFzcz1jbGFzc1NldCh7J2FuaW1hdGVkJzp0aGlzLnN0YXRlLnNoYWtlRWRpdG9yLCdzaGFrZSc6dGhpcy5zdGF0ZS5zaGFrZUVkaXRvcn0pO1xuICAgIHJldHVybihcbiAgICAgICAgPHRkIHJlZj1cInRkXCIgc3R5bGU9e3twb3NpdGlvbjoncmVsYXRpdmUnfX0+XG4gICAgICAgICAgICB7RWRpdG9yKGVkaXRhYmxlLGF0dHIsZm9ybWF0LGVkaXRvckNsYXNzLHRoaXMucHJvcHMuY2hpbGRyZW58fCcnKX1cbiAgICAgICAgICAgIDxOb3RpZmllciByZWY9XCJub3RpZmllclwiPjwvTm90aWZpZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgKVxuICB9XG5cbiAgX2dldENoZWNrQm94VmFsdWUoZSl7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgbGV0IHZhbHVlcyA9IGUuY3VycmVudFRhcmdldC52YWx1ZS5zcGxpdCgnOicpO1xuICAgIHZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ/dmFsdWVzWzBdOnZhbHVlc1sxXTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxufVxuVGFibGVFZGl0Q29sdW1uLnByb3BUeXBlcyA9IHtcbiAgY29tcGxldGVFZGl0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgcm93SW5kZXg6IFJlYWN0LlByb3BUeXBlcy5udW1iZXIsXG4gIGNvbEluZGV4OiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICBibHVyVG9TYXZlOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbFxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUVkaXRDb2x1bW47XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5jbGFzcyBUYWJsZUZpbHRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmZpbHRlck9iaiA9IHt9O1xuICB9XG5cbiAgaGFuZGxlS2V5VXAoZSl7XG4gICAgaWYoZS5jdXJyZW50VGFyZ2V0LnZhbHVlLnRyaW0oKSA9PT0gXCJcIilcbiAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlck9ialtlLmN1cnJlbnRUYXJnZXQubmFtZV07XG4gICAgZWxzZVxuICAgICAgdGhpcy5maWx0ZXJPYmpbZS5jdXJyZW50VGFyZ2V0Lm5hbWVdID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcih0aGlzLmZpbHRlck9iaik7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgdGFibGVDbGFzc2VzID0gY2xhc3NTZXQoXCJ0YWJsZVwiLCB7XG4gICAgICAndGFibGUtc3RyaXBlZCc6IHRoaXMucHJvcHMuc3RyaXBlZCxcbiAgICAgICd0YWJsZS1jb25kZW5zZWQnOiB0aGlzLnByb3BzLmNvbmRlbnNlZFxuICAgIH0pO1xuICAgIHZhciBzZWxlY3RSb3dIZWFkZXIgPSBudWxsO1xuXG4gICAgaWYodGhpcy5wcm9wcy5yb3dTZWxlY3RUeXBlID09IENvbnN0LlJPV19TRUxFQ1RfU0lOR0xFIHx8XG4gICAgICAgIHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PSBDb25zdC5ST1dfU0VMRUNUX01VTFRJKXtcbiAgICAgIGxldCBzdHlsZSA9IHtcbiAgICAgICAgd2lkdGg6MzUsXG4gICAgICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgICAgICBwYWRkaW5nUmlnaHQ6IDBcbiAgICAgIH1cbiAgICAgIHNlbGVjdFJvd0hlYWRlciA9ICg8dGggc3R5bGU9e3N0eWxlfSBrZXk9ey0xfT5GaWx0ZXI8L3RoPik7XG4gICAgfVxuICAgIHZhciBmaWx0ZXJGaWVsZCA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uKXtcbiAgICAgIHZhciB0aFN0eWxlID0ge1xuICAgICAgICBkaXNwbGF5OiBjb2x1bW4uaGlkZGVuP1wibm9uZVwiOm51bGwsXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGhcbiAgICAgIH07XG4gICAgICByZXR1cm4oXG4gICAgICAgIDx0aCBrZXk9e2NvbHVtbi5uYW1lfSBzdHlsZT17dGhTdHlsZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aC1pbm5lciB0YWJsZS1oZWFkZXItY29sdW1uXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj17Y29sdW1uLm5hbWV9IG5hbWU9e2NvbHVtbi5uYW1lfSBvbktleVVwPXt0aGlzLmhhbmRsZUtleVVwLmJpbmQodGhpcyl9Lz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgIClcbiAgICB9LCB0aGlzKTtcbiAgICByZXR1cm4oXG4gICAgICA8dGFibGUgY2xhc3NOYW1lPXt0YWJsZUNsYXNzZXN9IHN0eWxlPXt7bWFyZ2luVG9wOjV9fT5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0ciBzdHlsZT17e2JvcmRlckJvdHRvbVN0eWxlOiAnaGlkZGVuJ319PlxuICAgICAgICAgICAge3NlbGVjdFJvd0hlYWRlcn17ZmlsdGVyRmllbGR9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgIDwvdGFibGU+XG4gICAgKVxuICB9XG59XG5UYWJsZUZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbHVtbnM6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgcm93U2VsZWN0VHlwZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgb25GaWx0ZXI6IFJlYWN0LlByb3BUeXBlcy5mdW5jXG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVGaWx0ZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJztcbmltcG9ydCBjbGFzc1NldCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBTZWxlY3RSb3dIZWFkZXJDb2x1bW4gZnJvbSAnLi9TZWxlY3RSb3dIZWFkZXJDb2x1bW4nO1xuXG5jbGFzcyBUYWJsZUhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIGNsZWFyU29ydENhcmV0KG9yZGVyLCBzb3J0RmllbGQpe1xuICAgIHZhciByb3cgPSB0aGlzLnJlZnMuaGVhZGVyLmdldERPTU5vZGUoKTtcbiAgICBmb3IodmFyIGk9MDtpPHJvdy5jaGlsZEVsZW1lbnRDb3VudDtpKyspe1xuICAgICAgdmFyIGNvbHVtbiA9IHJvdy5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXNbMF07XG4gICAgICBpZihjb2x1bW4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm9yZGVyXCIpLmxlbmd0aCA+IDApe1xuICAgICAgICBjb2x1bW4ucmVtb3ZlQ2hpbGQoY29sdW1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJvcmRlclwiKVswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJvcHMub25Tb3J0KG9yZGVyLCBzb3J0RmllbGQpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKXtcbiAgICAvL2RlZmF1bHQgc29ydGluZ1xuICAgIGlmKHRoaXMucHJvcHMuc29ydE5hbWUpe1xuICAgICAgdGhpcy5jbGVhclNvcnRDYXJldCh0aGlzLnByb3BzLnNvcnRPcmRlciwgdGhpcy5wcm9wcy5zb3J0TmFtZSk7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yZWZzLmhlYWRlci5nZXRET01Ob2RlKCk7XG4gICAgICBmb3IodmFyIGk9MDtpPHJvdy5jaGlsZEVsZW1lbnRDb3VudDtpKyspe1xuICAgICAgICB2YXIgY29sdW1uID0gcm93LmNoaWxkTm9kZXNbaV0uY2hpbGROb2Rlc1swXTtcbiAgICAgICAgaWYoY29sdW1uLmdldEF0dHJpYnV0ZSgnZGF0YS1maWVsZCcpID09PSB0aGlzLnByb3BzLnNvcnROYW1lKXtcbiAgICAgICAgICBjb2x1bW4uYXBwZW5kQ2hpbGQoVXRpbC5yZW5kZXJTb3J0Q2FyZXQodGhpcy5wcm9wcy5zb3J0T3JkZXIpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpe1xuICAgIHZhciBjb250YWluZXJDbGFzc2VzID0gY2xhc3NTZXQoXCJ0YWJsZS1oZWFkZXJcIik7XG4gICAgdmFyIHRhYmxlQ2xhc3NlcyA9IGNsYXNzU2V0KFwidGFibGVcIiwgXCJ0YWJsZS1ob3ZlclwiLCB7XG4gICAgICAgIFwidGFibGUtYm9yZGVyZWRcIjogdGhpcy5wcm9wcy5ib3JkZXJlZFxuICAgIH0pO1xuICAgIHZhciBzZWxlY3RSb3dIZWFkZXJDb2wgPSB0aGlzLnByb3BzLmhpZGVTZWxlY3RDb2x1bW4/bnVsbDp0aGlzLnJlbmRlclNlbGVjdFJvd0hlYWRlcigpO1xuICAgIHRoaXMuX2F0dGFjaENsZWFyU29ydENhcmV0RnVuYygpO1xuXG4gICAgcmV0dXJuKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbnRhaW5lckNsYXNzZXN9PlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXt0YWJsZUNsYXNzZXN9PlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0ciByZWY9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAge3NlbGVjdFJvd0hlYWRlckNvbH1cbiAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZW5kZXJTZWxlY3RSb3dIZWFkZXIoKXtcbiAgICBpZih0aGlzLnByb3BzLnJvd1NlbGVjdFR5cGUgPT0gQ29uc3QuUk9XX1NFTEVDVF9TSU5HTEUpIHtcbiAgICAgIHJldHVybiAoPFNlbGVjdFJvd0hlYWRlckNvbHVtbj48L1NlbGVjdFJvd0hlYWRlckNvbHVtbj4pO1xuICAgIH1lbHNlIGlmKHRoaXMucHJvcHMucm93U2VsZWN0VHlwZSA9PSBDb25zdC5ST1dfU0VMRUNUX01VTFRJKXtcbiAgICAgIHJldHVybiAoPFNlbGVjdFJvd0hlYWRlckNvbHVtbj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgb25DaGFuZ2U9e3RoaXMucHJvcHMub25TZWxlY3RBbGxSb3d9Lz48L1NlbGVjdFJvd0hlYWRlckNvbHVtbj4pO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgX2F0dGFjaENsZWFyU29ydENhcmV0RnVuYygpe1xuICAgIGlmKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikpe1xuICAgICAgZm9yKGxldCBpPTA7aTx0aGlzLnByb3BzLmNoaWxkcmVuLmxlbmd0aDtpKyspe1xuICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuW2ldID1cbiAgICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQodGhpcy5wcm9wcy5jaGlsZHJlbltpXSwge2tleTogaSwgY2xlYXJTb3J0Q2FyZXQ6IHRoaXMuY2xlYXJTb3J0Q2FyZXQuYmluZCh0aGlzKX0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb3BzLmNoaWxkcmVuID1cbiAgICAgICAgUmVhY3QuY2xvbmVFbGVtZW50KHRoaXMucHJvcHMuY2hpbGRyZW4sIHtrZXk6IDAsIGNsZWFyU29ydENhcmV0OiB0aGlzLmNsZWFyU29ydENhcmV0LmJpbmQodGhpcyl9KTtcbiAgICB9XG4gIH1cbn1cblRhYmxlSGVhZGVyLnByb3BUeXBlcyA9IHtcbiAgcm93U2VsZWN0VHlwZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgb25Tb3J0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgb25TZWxlY3RBbGxSb3c6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICBzb3J0TmFtZTogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgc29ydE9yZGVyOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBoaWRlU2VsZWN0Q29sdW1uOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgYm9yZGVyZWQ6IFJlYWN0LlByb3BUeXBlcy5ib29sXG59O1xuXG5UYWJsZUhlYWRlci5kZWZhdWx0UHJvcHMgPSB7XG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJztcblxuY2xhc3MgVGFibGVIZWFkZXJDb2x1bW4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgb3JkZXI6IENvbnN0LlNPUlRfREVTQ1xuXG4gIGhhbmRsZUNvbHVtbkNsaWNrKGUpe1xuICAgIGlmKCF0aGlzLnByb3BzLmRhdGFTb3J0KXJldHVybjtcbiAgICB2YXIgZG9tID0gdGhpcy5yZWZzLmlubmVyRGl2LmdldERPTU5vZGUoKTtcbiAgICB0aGlzLm9yZGVyID0gdGhpcy5vcmRlciA9PSBDb25zdC5TT1JUX0RFU0M/Q29uc3QuU09SVF9BU0M6Q29uc3QuU09SVF9ERVNDO1xuICAgIHRoaXMucHJvcHMuY2xlYXJTb3J0Q2FyZXQodGhpcy5vcmRlciwgdGhpcy5wcm9wcy5kYXRhRmllbGQpO1xuICAgIGRvbS5hcHBlbmRDaGlsZChVdGlsLnJlbmRlclNvcnRDYXJldCh0aGlzLm9yZGVyKSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgIHRoaXMucmVmcy5pbm5lckRpdi5nZXRET01Ob2RlKCkuc2V0QXR0cmlidXRlKFwiZGF0YS1maWVsZFwiLCB0aGlzLnByb3BzLmRhdGFGaWVsZCk7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgdGhTdHlsZSA9IHtcbiAgICAgIHRleHRBbGlnbjogdGhpcy5wcm9wcy5kYXRhQWxpZ24sXG4gICAgICBkaXNwbGF5OiB0aGlzLnByb3BzLmhpZGRlbj9cIm5vbmVcIjpudWxsLFxuICAgICAgd2lkdGg6IHRoaXMucHJvcHMud2lkdGhcbiAgICB9O1xuXG4gICAgdmFyIGNsYXNzZXMgPSB0aGlzLnByb3BzLmNsYXNzTmFtZStcIiBcIisodGhpcy5wcm9wcy5kYXRhU29ydD9cInNvcnQtY29sdW1uXCI6XCJcIik7XG4gICAgcmV0dXJuKFxuICAgICAgPHRoIGNsYXNzTmFtZT17Y2xhc3Nlc30gc3R5bGU9e3RoU3R5bGV9PlxuICAgICAgICA8ZGl2IHJlZj1cImlubmVyRGl2XCIgY2xhc3NOYW1lPVwidGgtaW5uZXIgdGFibGUtaGVhZGVyLWNvbHVtblwiXG4gICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDb2x1bW5DbGljay5iaW5kKHRoaXMpfT57dGhpcy5wcm9wcy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgIDwvdGg+XG4gICAgKVxuICB9XG59XG5UYWJsZUhlYWRlckNvbHVtbi5wcm9wVHlwZXMgPSB7XG4gIGRhdGFGaWVsZDogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgZGF0YUFsaWduOiBSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRhU29ydDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNsZWFyU29ydENhcmV0OiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgZGF0YUZvcm1hdDogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIGlzS2V5OiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgZWRpdGFibGU6IFJlYWN0LlByb3BUeXBlcy5hbnksXG4gIGhpZGRlbjogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTpSZWFjdC5Qcm9wVHlwZXMuc3RyaW5nLFxuICB3aWR0aDogUmVhY3QuUHJvcFR5cGVzLnN0cmluZyxcbiAgc29ydEZ1bmM6IFJlYWN0LlByb3BUeXBlcy5mdW5jLFxuICBjb2x1bW5DbGFzc05hbWU6IFJlYWN0LlByb3BUeXBlcy5hbnlcbn07XG5cblRhYmxlSGVhZGVyQ29sdW1uLmRlZmF1bHRQcm9wcyA9IHtcbiAgZGF0YUFsaWduOiBcImxlZnRcIixcbiAgZGF0YVNvcnQ6IGZhbHNlLFxuICBkYXRhRm9ybWF0OiB1bmRlZmluZWQsXG4gIGlzS2V5OiBmYWxzZSxcbiAgZWRpdGFibGU6IHRydWUsXG4gIGNsZWFyU29ydENhcmV0OiB1bmRlZmluZWQsXG4gIGhpZGRlbjogZmFsc2UsXG4gIGNsYXNzTmFtZTogXCJcIixcbiAgd2lkdGg6IG51bGwsXG4gIHNvcnRGdW5jOiB1bmRlZmluZWQsXG4gIGNvbHVtbkNsYXNzTmFtZTogJydcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyQ29sdW1uO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDb25zdCBmcm9tICcuL0NvbnN0JztcblxuY2xhc3MgVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgcm93Q2xpY2soZSl7XG4gICAgaWYoZS50YXJnZXQudGFnTmFtZSAhPT0gXCJJTlBVVFwiKVxuICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdFJvdyhlLmN1cnJlbnRUYXJnZXQucm93SW5kZXgsICF0aGlzLnByb3BzLmlzU2VsZWN0ZWQpO1xuICB9XG5cbiAgcmVuZGVyKCl7XG5cbiAgICB2YXIgdHJDc3M9e1xuICAgICAgc3R5bGU6e1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMucHJvcHMuaXNTZWxlY3RlZD90aGlzLnByb3BzLnNlbGVjdFJvdy5iZ0NvbG9yOm51bGxcbiAgICAgIH0sXG4gICAgICBjbGFzc05hbWU6dGhpcy5wcm9wcy5jbGFzc05hbWV8fCcnXG4gICAgfTtcblxuICAgIGlmKHRoaXMucHJvcHMuc2VsZWN0Um93ICYmICF0aGlzLnByb3BzLmVuYWJsZUNlbGxFZGl0ICYmXG4gICAgICAodGhpcy5wcm9wcy5zZWxlY3RSb3cuY2xpY2tUb1NlbGVjdCB8fCB0aGlzLnByb3BzLnNlbGVjdFJvdy5jbGlja1RvU2VsZWN0QW5kRWRpdENlbGwpKXtcbiAgICAgIHJldHVybihcbiAgICAgICAgPHRyIHsuLi50ckNzc30gb25DbGljaz17dGhpcy5yb3dDbGljay5iaW5kKHRoaXMpfT57dGhpcy5wcm9wcy5jaGlsZHJlbn08L3RyPlxuICAgICAgKVxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuKFxuICAgICAgICA8dHIgey4uLnRyQ3NzfT57dGhpcy5wcm9wcy5jaGlsZHJlbn08L3RyPlxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuVGFibGVSb3cucHJvcFR5cGVzID0ge1xuICBpc1NlbGVjdGVkOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbCxcbiAgZW5hYmxlQ2VsbEVkaXQ6IFJlYWN0LlByb3BUeXBlcy5ib29sLFxuICBvblNlbGVjdFJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvdztcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NTZXQgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmNsYXNzIFBhZ2VCdXR0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnR7XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdH1cblxuICBwYWdlQnRuQ2xpY2soZSl7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucHJvcHMuY2hhbmdlUGFnZShlLmN1cnJlbnRUYXJnZXQudGV4dCk7XG4gIH1cblxuICByZW5kZXIoKXtcbiAgICB2YXIgY2xhc3NlcyA9IHRoaXMucHJvcHMuYWN0aXZlP2NsYXNzU2V0KFwiYWN0aXZlXCIpOm51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGxpIGNsYXNzTmFtZT17Y2xhc3Nlc30+PGEgaHJlZj1cIiNcIiBvbkNsaWNrPXt0aGlzLnBhZ2VCdG5DbGljay5iaW5kKHRoaXMpfT57dGhpcy5wcm9wcy5jaGlsZHJlbn08L2E+PC9saT5cbiAgICApXG4gIH1cbn1cblBhZ2VCdXR0b24ucHJvcFR5cGVzID0ge1xuICBjaGFuZ2VQYWdlOiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgYWN0aXZlOiBSZWFjdC5Qcm9wVHlwZXMuYm9vbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFnZUJ1dHRvbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUGFnZUJ1dHRvbiBmcm9tICcuL1BhZ2VCdXR0b24uanMnXG5pbXBvcnQgQ29uc3QgZnJvbSAnLi4vQ29uc3QnO1xuXG5jbGFzcyBQYWdpbmF0aW9uTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudHtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLnN0YXRlID0ge1xuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucHJvcHMuY3VyclBhZ2UsXG4gICAgICBzaXplUGVyUGFnZTogdGhpcy5wcm9wcy5zaXplUGVyUGFnZVxuICAgIH07XG5cdH1cblxuICBjaGFuZ2VQYWdlKHBhZ2Upe1xuICAgIGlmKHBhZ2UgPT0gQ29uc3QuUFJFX1BBR0Upe1xuICAgICAgcGFnZSA9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2UtMSA8IDE/MTp0aGlzLnN0YXRlLmN1cnJlbnRQYWdlLTE7XG4gICAgfWVsc2UgaWYocGFnZSA9PSBDb25zdC5ORVhUX1BBR0Upe1xuICAgICAgcGFnZSA9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2UrMSA+IHRoaXMudG90YWxQYWdlcz90aGlzLnRvdGFsUGFnZXM6dGhpcy5zdGF0ZS5jdXJyZW50UGFnZSsxO1xuICAgIH1lbHNlIGlmKHBhZ2UgPT0gQ29uc3QuTEFTVF9QQUdFKXtcbiAgICAgIHBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgfWVsc2UgaWYocGFnZSA9PSBDb25zdC5GSVJTVF9QQUdFKXtcbiAgICAgIHBhZ2UgPSAxO1xuICAgIH1lbHNle1xuICAgICAgcGFnZSA9IHBhcnNlSW50KHBhZ2UpO1xuICAgIH1cblxuICAgIGlmKHBhZ2UgIT0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZSl7XG4gICAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50UGFnZTogcGFnZX0pO1xuICAgICAgdGhpcy5wcm9wcy5jaGFuZ2VQYWdlKHBhZ2UsIHRoaXMuc3RhdGUuc2l6ZVBlclBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVNpemVQZXJQYWdlKGUpe1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB2YXIgc2VsZWN0U2l6ZSA9IHBhcnNlSW50KGUuY3VycmVudFRhcmdldC50ZXh0KTtcbiAgICBpZihzZWxlY3RTaXplICE9IHRoaXMuc3RhdGUuc2l6ZVBlclBhZ2Upe1xuICAgICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRoaXMucHJvcHMuZGF0YVNpemUvc2VsZWN0U2l6ZSk7XG4gICAgICBpZih0aGlzLnN0YXRlLmN1cnJlbnRQYWdlID4gdGhpcy50b3RhbFBhZ2VzKVxuICAgICAgICB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlID0gdGhpcy50b3RhbFBhZ2VzO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNpemVQZXJQYWdlOiBzZWxlY3RTaXplLFxuICAgICAgICBjdXJyZW50UGFnZTogdGhpcy5zdGF0ZS5jdXJyZW50UGFnZVxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb3BzLmNoYW5nZVBhZ2UodGhpcy5zdGF0ZS5jdXJyZW50UGFnZSwgc2VsZWN0U2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdGhpcy50b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHRoaXMucHJvcHMuZGF0YVNpemUvdGhpcy5zdGF0ZS5zaXplUGVyUGFnZSk7XG4gICAgdmFyIHBhZ2VCdG5zID0gdGhpcy5tYWtlUGFnZSgpO1xuICAgIHZhciBwYWdlTGlzdFN0eWxlID0ge1xuICAgICAgbWFyZ2luVG9wOiBcIjBweFwiICAvL292ZXJyaWRlIHRoZSBtYXJnaW4tdG9wIGRlZmluZWQgaW4gLnBhZ2luYXRpb24gY2xhc3MgaW4gYm9vdHN0cmFwLlxuICAgIH1cblxuICAgIHZhciBzaXplUGVyUGFnZUxpc3QgPSB0aGlzLnByb3BzLnNpemVQZXJQYWdlTGlzdC5tYXAoKHNpemVQZXJQYWdlKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8bGkga2V5PXtzaXplUGVyUGFnZX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIDxhIHJvbGU9XCJtZW51aXRlbVwiIHRhYkluZGV4PVwiLTFcIiBocmVmPVwiI1wiIG9uQ2xpY2s9e3RoaXMuY2hhbmdlU2l6ZVBlclBhZ2UuYmluZCh0aGlzKX0+e3NpemVQZXJQYWdlfTwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGRyb3Bkb3duLXRvZ2dsZVwiIHR5cGU9XCJidXR0b25cIiBpZD1cInBhZ2VEcm9wRG93blwiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5zaXplUGVyUGFnZX1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJwYWdlRHJvcERvd25cIj5cbiAgICAgICAgICAgICAge3NpemVQZXJQYWdlTGlzdH1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCI+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cInBhZ2luYXRpb25cIiBzdHlsZT17cGFnZUxpc3RTdHlsZX0+XG4gICAgICAgICAgICB7cGFnZUJ0bnN9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBtYWtlUGFnZSgpe1xuICAgIHZhciBwYWdlcyA9IHRoaXMuZ2V0UGFnZXMoKTtcbiAgICByZXR1cm4gcGFnZXMubWFwKGZ1bmN0aW9uKHBhZ2Upe1xuICAgICAgdmFyIGlzQWN0aXZlID0gcGFnZSA9PSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlP3RydWU6ZmFsc2U7XG4gICAgICByZXR1cm4oXG4gICAgICAgIDxQYWdlQnV0dG9uIGNoYW5nZVBhZ2U9e3RoaXMuY2hhbmdlUGFnZS5iaW5kKHRoaXMpfSBhY3RpdmU9e2lzQWN0aXZlfSBrZXk9e3BhZ2V9PntwYWdlfTwvUGFnZUJ1dHRvbj5cbiAgICAgIClcbiAgICB9LCB0aGlzKTtcbiAgfVxuXG4gIGdldFBhZ2VzKCl7XG4gICAgdmFyIHN0YXJ0UGFnZSA9IDEsIGVuZFBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG5cbiAgICBzdGFydFBhZ2UgPSBNYXRoLm1heCh0aGlzLnN0YXRlLmN1cnJlbnRQYWdlIC0gTWF0aC5mbG9vcih0aGlzLnByb3BzLnBhZ2luYXRpb25TaXplLzIpLCAxKTtcbiAgICBlbmRQYWdlICAgPSBzdGFydFBhZ2UgKyB0aGlzLnByb3BzLnBhZ2luYXRpb25TaXplIC0gMTtcblxuICAgIGlmIChlbmRQYWdlID4gdGhpcy50b3RhbFBhZ2VzKSB7XG4gICAgICBlbmRQYWdlICAgPSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgICBzdGFydFBhZ2UgPSBlbmRQYWdlIC0gdGhpcy5wcm9wcy5wYWdpbmF0aW9uU2l6ZSArIDE7XG4gICAgfVxuICAgIHZhciBwYWdlcyA9IFtDb25zdC5GSVJTVF9QQUdFLCBDb25zdC5QUkVfUEFHRV07XG4gICAgZm9yKHZhciBpPXN0YXJ0UGFnZTtpPD1lbmRQYWdlO2krKyl7XG4gICAgICBpZihpPjApcGFnZXMucHVzaChpKTtcbiAgICB9XG4gICAgcGFnZXMucHVzaChDb25zdC5ORVhUX1BBR0UpO1xuICAgIHBhZ2VzLnB1c2goQ29uc3QuTEFTVF9QQUdFKTtcbiAgICByZXR1cm4gcGFnZXM7XG4gIH1cblxuICBnZXRDdXJyZW50UGFnZSgpe1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlO1xuICB9XG5cbiAgZ2V0U2l6ZVBlclBhZ2UoKXtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zaXplUGVyUGFnZTtcbiAgfVxufVxuUGFnaW5hdGlvbkxpc3QucHJvcFR5cGVzID0ge1xuICBjdXJyUGFnZTogUmVhY3QuUHJvcFR5cGVzLm51bWJlcixcbiAgc2l6ZVBlclBhZ2U6IFJlYWN0LlByb3BUeXBlcy5udW1iZXIsXG4gIGRhdGFTaXplOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyLFxuICBjaGFuZ2VQYWdlOiBSZWFjdC5Qcm9wVHlwZXMuZnVuYyxcbiAgc2l6ZVBlclBhZ2VMaXN0OiBSZWFjdC5Qcm9wVHlwZXMuYXJyYXksXG4gIHBhZ2luYXRpb25TaXplOiBSZWFjdC5Qcm9wVHlwZXMubnVtYmVyXG59O1xuXG5QYWdpbmF0aW9uTGlzdC5kZWZhdWx0UHJvcHMgPSB7XG4gIHNpemVQZXJQYWdlOiBDb25zdC5TSVpFX1BFUl9QQUdFXG59XG5leHBvcnQgZGVmYXVsdCBQYWdpbmF0aW9uTGlzdDtcbiIsImltcG9ydCBDb25zdCBmcm9tIFwiLi4vQ29uc3RcIjtcbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbmZ1bmN0aW9uIF9zb3J0KGFyciwgc29ydEZpZWxkLCBvcmRlciwgc29ydEZ1bmMpe1xuICBvcmRlciA9IG9yZGVyLnRvTG93ZXJDYXNlKCk7XG4gIGFyci5zb3J0KChhLGIpID0+IHtcbiAgICBpZihzb3J0RnVuYyl7XG4gICAgICByZXR1cm4gc29ydEZ1bmMoYSwgYiwgb3JkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihvcmRlciA9PSBDb25zdC5TT1JUX0RFU0Mpe1xuICAgICAgICByZXR1cm4gYVtzb3J0RmllbGRdID4gYltzb3J0RmllbGRdPy0xOiAoKGFbc29ydEZpZWxkXSA8IGJbc29ydEZpZWxkXSkgPyAxIDogMCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgcmV0dXJuIGFbc29ydEZpZWxkXSA8IGJbc29ydEZpZWxkXT8tMTogKChhW3NvcnRGaWVsZF0gPiBiW3NvcnRGaWVsZF0pID8gMSA6IDApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlRGF0YVNldCBleHRlbmRzIEV2ZW50RW1pdHRlcntcbiAgY29uc3RydWN0b3IoZGF0YSl7XG4gICAgc3VwZXIoZGF0YSk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIHNldERhdGEoZGF0YSkge1xuICAgIHRoaXMuZW1pdCgnY2hhbmdlJywgZGF0YSk7XG4gIH1cblxuICBjbGVhcigpe1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gIH1cblxuICBnZXREYXRhKCl7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhU3RvcmV7XG5cbiAgY29uc3RydWN0b3IoZGF0YSl7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmN1c3RvbVNvcnRGdW5jTWFwID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IG51bGw7XG4gICAgdGhpcy5pc09uRmlsdGVyID0gZmFsc2U7XG4gICAgdGhpcy5maWx0ZXJPYmogPSBudWxsO1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IG51bGw7XG4gICAgdGhpcy5zb3J0T2JqID0gbnVsbDtcbiAgICB0aGlzLnBhZ2VPYmogPSB7fTtcbiAgICB0aGlzLnNlbGVjdGVkID0gW107XG4gIH1cblxuICBzZXRQcm9wcyhpc1BhZ2luYXRpb24sIGtleUZpZWxkLCBjdXN0b21Tb3J0RnVuY01hcCl7XG4gICAgdGhpcy5rZXlGaWVsZCA9IGtleUZpZWxkO1xuICAgIHRoaXMuZW5hYmxlUGFnaW5hdGlvbiA9IGlzUGFnaW5hdGlvbjtcbiAgICB0aGlzLmN1c3RvbVNvcnRGdW5jTWFwID0gY3VzdG9tU29ydEZ1bmNNYXA7XG4gIH1cblxuICBzZXREYXRhKGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIGlmKHRoaXMuaXNPbkZpbHRlcikge1xuICAgICAgaWYobnVsbCAhPT0gdGhpcy5maWx0ZXJPYmopIHRoaXMuZmlsdGVyKHRoaXMuZmlsdGVyT2JqKTtcbiAgICAgIGlmKG51bGwgIT09IHRoaXMuc2VhcmNoVGV4dCkgdGhpcy5zZWFyY2godGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gICAgaWYodGhpcy5zb3J0T2JqKXtcbiAgICAgIHRoaXMuc29ydCh0aGlzLnNvcnRPYmoub3JkZXIsIHRoaXMuc29ydE9iai5zb3J0RmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHNldFNlbGVjdGVkUm93S2V5KHNlbGVjdGVkUm93S2V5cyl7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkUm93S2V5cztcbiAgfVxuXG4gIGdldFNlbGVjdGVkUm93S2V5cygpe1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0Q3VycmVudERpc3BsYXlEYXRhKCl7XG4gICAgaWYodGhpcy5pc09uRmlsdGVyKSByZXR1cm4gdGhpcy5maWx0ZXJlZERhdGE7XG4gICAgZWxzZSByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgc29ydChvcmRlciwgc29ydEZpZWxkKXtcbiAgICB0aGlzLnNvcnRPYmogPSB7XG4gICAgICBvcmRlcjogb3JkZXIsXG4gICAgICBzb3J0RmllbGQ6IHNvcnRGaWVsZFxuICAgIH07XG5cbiAgICBsZXQgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBsZXQgc29ydEZ1bmMgPSB0aGlzLmN1c3RvbVNvcnRGdW5jTWFwW3NvcnRGaWVsZF07XG4gICAgY3VycmVudERpc3BsYXlEYXRhID0gX3NvcnQoY3VycmVudERpc3BsYXlEYXRhLCBzb3J0RmllbGQsIG9yZGVyLCBzb3J0RnVuYyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhZ2UocGFnZSwgc2l6ZVBlclBhZ2Upe1xuICAgIHRoaXMucGFnZU9iai5lbmQgPSBwYWdlKnNpemVQZXJQYWdlLTE7XG4gICAgdGhpcy5wYWdlT2JqLnN0YXJ0ID0gdGhpcy5wYWdlT2JqLmVuZCAtIChzaXplUGVyUGFnZSAtIDEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZWRpdChuZXdWYWwsIHJvd0luZGV4LCBmaWVsZE5hbWUpe1xuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGxldCByb3dLZXlDYWNoZTtcbiAgICBpZighdGhpcy5lbmFibGVQYWdpbmF0aW9uKXtcbiAgICAgIGN1cnJlbnREaXNwbGF5RGF0YVtyb3dJbmRleF1bZmllbGROYW1lXSA9IG5ld1ZhbDtcbiAgICAgIHJvd0tleUNhY2hlID0gY3VycmVudERpc3BsYXlEYXRhW3Jvd0luZGV4XVt0aGlzLmtleUZpZWxkXTtcbiAgICB9ZWxzZXtcbiAgICAgIGN1cnJlbnREaXNwbGF5RGF0YVt0aGlzLnBhZ2VPYmouc3RhcnQrcm93SW5kZXhdW2ZpZWxkTmFtZV0gPSBuZXdWYWw7XG4gICAgICByb3dLZXlDYWNoZSA9IGN1cnJlbnREaXNwbGF5RGF0YVt0aGlzLnBhZ2VPYmouc3RhcnQrcm93SW5kZXhdW3RoaXMua2V5RmllbGRdO1xuICAgIH1cbiAgICBpZih0aGlzLmlzT25GaWx0ZXIpe1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goZnVuY3Rpb24ocm93KXtcbiAgICAgICAgaWYocm93W3RoaXMua2V5RmllbGRdID09PSByb3dLZXlDYWNoZSl7XG4gICAgICAgICAgcm93W3RoaXMua2V5RmllbGRdW2ZpZWxkTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZChuZXdPYmope1xuICAgIGlmKG5ld09ialt0aGlzLmtleUZpZWxkXS50cmltKCkgPT09IFwiXCIpe1xuICAgICAgdGhyb3cgdGhpcy5rZXlGaWVsZCArIFwiIGNhbid0IGJlIGVtcHR5IHZhbHVlLlwiO1xuICAgIH1cbiAgICBsZXQgY3VycmVudERpc3BsYXlEYXRhID0gdGhpcy5nZXRDdXJyZW50RGlzcGxheURhdGEoKTtcbiAgICBjdXJyZW50RGlzcGxheURhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpe1xuICAgICAgaWYocm93W3RoaXMua2V5RmllbGRdLnRvU3RyaW5nKCkgPT09IG5ld09ialt0aGlzLmtleUZpZWxkXSl7XG4gICAgICAgIHRocm93IHRoaXMua2V5RmllbGQgKyBcIiBcIiArIG5ld09ialt0aGlzLmtleUZpZWxkXSArIFwiIGFscmVhZHkgZXhpc3RzXCI7XG4gICAgICB9XG4gICAgfSwgdGhpcyk7XG5cbiAgICBjdXJyZW50RGlzcGxheURhdGEucHVzaChuZXdPYmopO1xuICAgIGlmKHRoaXMuaXNPbkZpbHRlcil7XG4gICAgICB0aGlzLmRhdGEucHVzaChuZXdPYmopO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZShyb3dLZXkpe1xuICAgIGxldCBjdXJyZW50RGlzcGxheURhdGEgPSB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpO1xuICAgIGxldCByZXN1bHQgPSBjdXJyZW50RGlzcGxheURhdGEuZmlsdGVyKGZ1bmN0aW9uKHJvdyl7XG4gICAgICByZXR1cm4gcm93S2V5LmluZGV4T2Yocm93W3RoaXMua2V5RmllbGRdKSA9PSAtMTtcbiAgICB9LCB0aGlzKTtcblxuICAgIGlmKHRoaXMuaXNPbkZpbHRlcil7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKGZ1bmN0aW9uKHJvdyl7XG4gICAgICAgIHJldHVybiByb3dLZXkuaW5kZXhPZihyb3dbdGhpcy5rZXlGaWVsZF0pID09IC0xO1xuICAgICAgfSwgdGhpcyk7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHJlc3VsdDtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXIoZmlsdGVyT2JqKXtcbiAgICBpZihPYmplY3Qua2V5cyhmaWx0ZXJPYmopLmxlbmd0aCA9PSAwKXtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJPYmogPSBudWxsO1xuICAgIH0gZWxzZXtcbiAgICAgIHRoaXMuZmlsdGVyT2JqID0gZmlsdGVyT2JqO1xuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKGZ1bmN0aW9uKHJvdyl7XG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgIGZvcih2YXIga2V5IGluIGZpbHRlck9iail7XG4gICAgICAgICAgaWYocm93W2tleV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyT2JqW2tleV0udG9Mb3dlckNhc2UoKSkgPT0gLTEpe1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2VhcmNoKHNlYXJjaFRleHQpe1xuICAgIGlmKHNlYXJjaFRleHQudHJpbSgpID09PSBcIlwiKXtcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuaXNPbkZpbHRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24ocm93KXtcbiAgICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgICAgIGZvcih2YXIga2V5IGluIHJvdyl7XG4gICAgICAgICAgaWYocm93W2tleV0gJiZcbiAgICAgICAgICAgICByb3dba2V5XS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpICE9PSAtMSl7XG4gICAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmlzT25GaWx0ZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCgpe1xuICAgIGxldCBfZGF0YSA9IHRoaXMuZ2V0Q3VycmVudERpc3BsYXlEYXRhKCk7XG5cbiAgICBpZihfZGF0YS5sZW5ndGggPT0gMCkgcmV0dXJuIF9kYXRhO1xuXG4gICAgaWYoIXRoaXMuZW5hYmxlUGFnaW5hdGlvbil7XG4gICAgICByZXR1cm4gX2RhdGE7XG4gICAgfWVsc2V7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBmb3IodmFyIGk9dGhpcy5wYWdlT2JqLnN0YXJ0O2k8PXRoaXMucGFnZU9iai5lbmQ7aSsrKXtcbiAgICAgICAgcmVzdWx0LnB1c2goX2RhdGFbaV0pO1xuICAgICAgICBpZihpKzEgPT0gX2RhdGEubGVuZ3RoKWJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBnZXRLZXlGaWVsZCgpe1xuICAgIHJldHVybiB0aGlzLmtleUZpZWxkO1xuICB9XG5cbiAgZ2V0RGF0YU51bSgpe1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnREaXNwbGF5RGF0YSgpLmxlbmd0aDtcbiAgfVxuXG4gIGdldEFsbFJvd2tleSgpe1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFwKGZ1bmN0aW9uKHJvdyl7XG4gICAgICByZXR1cm4gcm93W3RoaXMua2V5RmllbGRdO1xuICAgIH0sIHRoaXMpO1xuICB9XG5cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzU2V0IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IENvbnN0IGZyb20gJy4uL0NvbnN0JztcbmltcG9ydCBFZGl0b3IgZnJvbSAnLi4vRWRpdG9yJztcbmltcG9ydCBOb3RpZmllciBmcm9tICcuLi9Ob3RpZmljYXRpb24uanMnO1xuXG5jbGFzcyBUb29sQmFyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50e1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuICAgIHRoaXMudGltZW91dGVDbGVhcj0wO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0luc2VydFJvd1RyaWdnZXI6IHRydWUsXG4gICAgICB2YWxpZGF0ZVN0YXRlOm51bGwsXG4gICAgICBzaGFrZUVkaXRvcjpmYWxzZVxuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICB0aGlzLmNsZWFyVGltZW91dCgpO1xuICB9XG4gIGNsZWFyVGltZW91dCgpIHtcbiAgICBpZih0aGlzLnRpbWVvdXRlQ2xlYXIpe1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dGVDbGVhcik7XG4gICAgICB0aGlzLnRpbWVvdXRlQ2xlYXI9MDtcbiAgICB9XG4gIH1cblxuICBjaGVja0FuZFBhcnNlRm9ybSgpe1xuICAgIHZhciB0cz10aGlzLG5ld09iaiA9IHt9LGlzVmFsaWQ9dHJ1ZSx0ZW1wVmFsdWUsdGVtcE1zZyx2YWxpZGF0ZVN0YXRlPXt9O1xuICAgIHRoaXMucHJvcHMuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbiwgaSl7XG4gICAgICBpZihjb2x1bW4uYXV0b1ZhbHVlKXsvL3doZW4geW91IHdhbnQgc2FtZSBhdXRvIGdlbmVyYXRlIHZhbHVlIGFuZCBub3QgYWxsb3cgZWRpdCwgZXhhbXBsZSBJRCBmaWVsZFxuICAgICAgICB0ZW1wVmFsdWU9dHlwZW9mIGNvbHVtbi5hdXRvVmFsdWU9PSdmdW5jdGlvbic/Y29sdW1uLmF1dG9WYWx1ZSgpOignYXV0b3ZhbHVlLScrbmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGxldCBkb20gPSB0aGlzLnJlZnNbY29sdW1uLmZpZWxkK2ldLmdldERPTU5vZGUoKTtcbiAgICAgICAgdGVtcFZhbHVlID0gZG9tLnZhbHVlO1xuXG4gICAgICAgIGlmKGNvbHVtbi5lZGl0YWJsZSAmJiBjb2x1bW4uZWRpdGFibGUudHlwZSA9PSAnY2hlY2tib3gnKXtcbiAgICAgICAgICBsZXQgdmFsdWVzID0gZG9tLnZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgdGVtcFZhbHVlID0gZG9tLmNoZWNrZWQ/IHZhbHVlc1swXTp2YWx1ZXNbMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZihjb2x1bW4uZWRpdGFibGUmJmNvbHVtbi5lZGl0YWJsZS52YWxpZGF0b3Ipey8vcHJvY2VzcyB2YWxpZGF0ZVxuICAgICAgICAgIHRlbXBNc2c9IGNvbHVtbi5lZGl0YWJsZS52YWxpZGF0b3IodGVtcFZhbHVlKVxuICAgICAgICAgIGlmKHRlbXBNc2chPT10cnVlKXtcbiAgICAgICAgICAgIGlzVmFsaWQ9ZmFsc2U7XG4gICAgICAgICAgICB2YWxpZGF0ZVN0YXRlW2NvbHVtbi5maWVsZF09dGVtcE1zZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV3T2JqW2NvbHVtbi5maWVsZF0gPXRlbXBWYWx1ZTtcbiAgICB9LCB0aGlzKTtcblxuICAgIGlmKGlzVmFsaWQpe1xuICAgICAgcmV0dXJuIG5ld09iajtcbiAgICB9ZWxzZXtcbiAgICAgIHRzLmNsZWFyVGltZW91dCgpO1xuICAgICAgLy9zaG93IGVycm9yIGluIGZvcm0gYW5kIHNoYWtlIGl0XG4gICAgICB0aGlzLnNldFN0YXRlKHt2YWxpZGF0ZVN0YXRlOnZhbGlkYXRlU3RhdGUsc2hha2VFZGl0b3I6dHJ1ZX0pO1xuICAgICAgLy9ub3RpZmllciBlcnJvclxuICAgICAgdHMucmVmcy5ub3RpZmllci5ub3RpY2UoJ2Vycm9yJyxcIkZvcm0gdmFsaWRhdGUgZXJyb3JzLCBwbGVhc2UgY2hlY2tpbmchXCIsXCJQcmVzc2VkIEVTQyBjYW4gY2FuY2VsXCIpO1xuICAgICAgLy9jbGVhciBhbmltYXRlIGNsYXNzXG4gICAgICB0cy50aW1lb3V0ZUNsZWFyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0cy5zZXRTdGF0ZSh7c2hha2VFZGl0b3I6ZmFsc2V9KTt9LDMwMCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVTYXZlQnRuQ2xpY2soZSl7XG4gICAgdmFyIG5ld09iaiA9IHRoaXMuY2hlY2tBbmRQYXJzZUZvcm0oKTtcbiAgICBpZighbmV3T2JqKXsvL3ZhbGlkYXRlIGVycm9yc1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbXNnID0gdGhpcy5wcm9wcy5vbkFkZFJvdyhuZXdPYmopO1xuICAgIGlmKG1zZykge1xuICAgICAgdmFyIHRzPXRoaXM7XG4gICAgICB0cy5yZWZzLm5vdGlmaWVyLm5vdGljZSgnZXJyb3InLG1zZyxcIlByZXNzZWQgRVNDIGNhbiBjYW5jZWxcIik7XG4gICAgICB0cy5jbGVhclRpbWVvdXQoKTtcbiAgICAgIC8vc2hha2UgZm9ybSBhbmQgaGFjayBwcmV2ZW50IG1vZGFsIGhpZGVcbiAgICAgIHRzLnNldFN0YXRlKHtzaGFrZUVkaXRvcjp0cnVlLHZhbGlkYXRlU3RhdGU6XCJ0aGlzIGlzIGhhY2sgZm9yIHByZXZlbnQgYm9vdHN0cmFwIG1vZGFsIGhpZGVcIn0pO1xuICAgICAgLy9jbGVhciBhbmltYXRlIGNsYXNzXG4gICAgICB0cy50aW1lb3V0ZUNsZWFyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0cy5zZXRTdGF0ZSh7c2hha2VFZGl0b3I6ZmFsc2V9KTt9LDMwMCk7XG4gICAgfSBlbHNle1xuICAgICAgLy9yZXNldCBzdGF0ZSBhbmQgaGlkZSBtb2RhbCBoaWRlXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsaWRhdGVTdGF0ZTpudWxsLFxuICAgICAgICBzaGFrZUVkaXRvcjpmYWxzZVxuICAgICAgfSk7XG4gICAgICAvL3Jlc2V0IGZvcm1cbiAgICAgIHRoaXMucmVmcy5mb3JtLmdldERPTU5vZGUoKS5yZXNldCgpO1xuXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRHJvcFJvd0J0bkNsaWNrKGUpe1xuICAgIHRoaXMucHJvcHMub25Ecm9wUm93KCk7XG4gIH1cblxuICBoYW5kbGVDbG9zZUJ0bihlKXtcbiAgICB0aGlzLnJlZnMud2FybmluZy5nZXRET01Ob2RlKCkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB9XG5cbiAgaGFuZGxlS2V5VXAoZSl7XG4gICAgdGhpcy5wcm9wcy5vblNlYXJjaChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuICB9XG5cbiAgcmVuZGVyKCl7XG4gICAgdmFyIG1vZGFsQ2xhc3NOYW1lID0gXCJicy10YWJsZS1tb2RhbC1zbVwiK25ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHZhciBpbnNlcnRCdG4gPSB0aGlzLnByb3BzLmVuYWJsZUluc2VydD9cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQWRkUm93QmVnaW59IGNsYXNzTmFtZT1cImJ0biBidG4taW5mb1wiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD17Jy4nK21vZGFsQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImdseXBoaWNvbiBnbHlwaGljb24tcGx1c1wiPjwvaT4gTmV3PC9idXR0b24+Om51bGw7XG5cbiAgICB2YXIgZGVsZXRlQnRuID0gdGhpcy5wcm9wcy5lbmFibGVEZWxldGU/XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi13YXJuaW5nXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiIHRpdGxlPVwiRHJvcCBzZWxlY3RlZCByb3dcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVEcm9wUm93QnRuQ2xpY2suYmluZCh0aGlzKX0+XG4gICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoXCI+PC9pPiBEZWxldGVcbiAgICAgICAgICA8L2J1dHRvbj46bnVsbDtcbiAgICB2YXIgc2VhcmNoVGV4dElucHV0ID0gdGhpcy5wcm9wcy5lbmFibGVTZWFyY2g/XG4gICAgICA8aW5wdXQgdHlwZT0ndGV4dCcgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMuc2VhcmNoUGxhY2Vob2xkZXI/dGhpcy5wcm9wcy5zZWFyY2hQbGFjZWhvbGRlcjonU2VhcmNoJ30gb25LZXlVcD17dGhpcy5oYW5kbGVLZXlVcC5iaW5kKHRoaXMpfS8+Om51bGw7XG4gICAgdmFyIG1vZGFsID0gdGhpcy5wcm9wcy5lbmFibGVJbnNlcnQ/dGhpcy5yZW5kZXJJbnNlcnRSb3dNb2RhbChtb2RhbENsYXNzTmFtZSk6bnVsbDtcbiAgICB2YXIgd2FybmluZ1N0eWxlID0ge1xuICAgICAgZGlzcGxheTogXCJub25lXCIsXG4gICAgICBtYXJnaW5Cb3R0b206IDBcbiAgICB9O1xuICAgIHJldHVybihcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC14c1wiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCIuLi5cIj5cbiAgICAgICAgICB7aW5zZXJ0QnRufVxuICAgICAgICAgIHtkZWxldGVCdG59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2VhcmNoVGV4dElucHV0fVxuICAgICAgICA8Tm90aWZpZXIgcmVmPVwibm90aWZpZXJcIj48L05vdGlmaWVyPlxuICAgICAgICB7bW9kYWx9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZW5kZXJJbnNlcnRSb3dNb2RhbChtb2RhbENsYXNzTmFtZSl7XG4gICAgdmFyIHZhbGlkYXRlU3RhdGU9dGhpcy5zdGF0ZS52YWxpZGF0ZVN0YXRlfHx7fTtcbiAgICB2YXIgaW5wdXRGaWVsZCA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uLCBpKXtcbi8vIDw8PDw8PDwgSEVBRFxuLy8gICAgICAgbGV0IGRpc2FibGVkID0gY29sdW1uLmVkaXRhYmxlP2ZhbHNlOidkaXNhYmxlZCc7XG4vLyA9PT09PT09XG4gICAgICB2YXIgZWRpdGFibGU9Y29sdW1uLmVkaXRhYmxlLFxuICAgICAgICAgIGZvcm1hdD1jb2x1bW4uZm9ybWF0LFxuICAgICAgICAgIGF0dHI9e3JlZjpjb2x1bW4uZmllbGQraSxwbGFjZWhvbGRlcjplZGl0YWJsZS5wbGFjZWhvbGRlcj9lZGl0YWJsZS5wbGFjZWhvbGRlcjpjb2x1bW4ubmFtZX07XG5cbiAgICAgIGlmKGNvbHVtbi5hdXRvVmFsdWUpey8vd2hlbiB5b3Ugd2FudCBzYW1lIGF1dG8gZ2VuZXJhdGUgdmFsdWUgYW5kIG5vdCBhbGxvdyBlZGl0LCBleGFtcGxlIElEIGZpZWxkXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIGVycm9yPXZhbGlkYXRlU3RhdGVbY29sdW1uLmZpZWxkXT8oPHNwYW4gY2xhc3NOYW1lPVwiaGVscC1ibG9jayBiZy1kYW5nZXJcIj57dmFsaWRhdGVTdGF0ZVtjb2x1bW4uZmllbGRdfTwvc3Bhbj4pOm51bGw7XG4vLyA+Pj4+Pj4+IDk5Y2Q0NTlkZWZmZDUyNjJkODg2OTFlOGIwNzU5NzdiYzBhMjgxMWZcblxuICAgICAgLy8gbGV0IGVkaXRvciA9IEVkaXRvcihlZGl0YWJsZSxhdHRyLGZvcm1hdCk7XG4gICAgICAvLyBpZihlZGl0b3IucHJvcHMudHlwZSAmJiBlZGl0b3IucHJvcHMudHlwZSA9PSAnY2hlY2tib3gnKXtcbiAgICAgIHJldHVybihcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCIga2V5PXtjb2x1bW4uZmllbGR9PlxuICAgICAgICAgIDxsYWJlbD57Y29sdW1uLm5hbWV9PC9sYWJlbD5cbiAgICAgICAgICB7RWRpdG9yKGVkaXRhYmxlLGF0dHIsZm9ybWF0LCcnKX1cbiAgICAgICAgICB7ZXJyb3J9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgICB2YXIgbW9kYWxDbGFzcyA9IGNsYXNzU2V0KFwibW9kYWxcIiwgXCJmYWRlXCIgLCBtb2RhbENsYXNzTmFtZSx7XG4gICAgICAnaW4nOnRoaXMuc3RhdGUuc2hha2VFZGl0b3J8fHRoaXMuc3RhdGUudmFsaWRhdGVTdGF0ZS8vaGFjayBwcmV2ZW50IGJvb3RzdHJhcCBtb2RhbCBoaWRlIGJ5IHJlUmVuZGVyXG4gICAgfSk7XG4gICAgdmFyIGRpYWxvZ0NsYXNzPWNsYXNzU2V0KFwibW9kYWwtZGlhbG9nXCIsXCJtb2RhbC1zbVwiLHtcbiAgICAgIFwiYW5pbWF0ZWRcIjp0aGlzLnN0YXRlLnNoYWtlRWRpdG9yLFxuICAgICAgXCJzaGFrZVwiOnRoaXMuc3RhdGUuc2hha2VFZGl0b3JcbiAgICB9KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9XCJtb2RhbFwiICBjbGFzc05hbWU9e21vZGFsQ2xhc3N9IHRhYkluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZGlhbG9nQ2xhc3N9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+PC9idXR0b24+XG4gICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJtb2RhbC10aXRsZVwiPk5ldyBSZWNvcmQ8L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgPGZvcm0gcmVmPVwiZm9ybVwiPlxuICAgICAgICAgICAgICB7aW5wdXRGaWVsZH1cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4taW5mb1wiICBvbkNsaWNrPXt0aGlzLmhhbmRsZVNhdmVCdG5DbGljay5iaW5kKHRoaXMpfT5TYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn1cblRvb2xCYXIucHJvcFR5cGVzID0ge1xuICBvbkFkZFJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRHJvcFJvdzogUmVhY3QuUHJvcFR5cGVzLmZ1bmMsXG4gIGVuYWJsZUluc2VydDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZURlbGV0ZTogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGVuYWJsZVNlYXJjaDogUmVhY3QuUHJvcFR5cGVzLmJvb2wsXG4gIGNvbHVtbnM6IFJlYWN0LlByb3BUeXBlcy5hcnJheSxcbiAgc2VhcmNoUGxhY2Vob2xkZXI6IFJlYWN0LlByb3BUeXBlcy5zdHJpbmdcbn07XG5cblRvb2xCYXIuZGVmYXVsdFByb3BzID0ge1xuICBlbmFibGVJbnNlcnQ6IGZhbHNlLFxuICBlbmFibGVEZWxldGU6IGZhbHNlLFxuICBlbmFibGVTZWFyY2g6IGZhbHNlXG59XG5leHBvcnQgZGVmYXVsdCBUb29sQmFyO1xuIiwiaW1wb3J0IENvbnN0IGZyb20gJy4vQ29uc3QnO1xuZXhwb3J0IGRlZmF1bHQge1xuXG4gIHJlbmRlclNvcnRDYXJldChvcmRlcikge1xuICAgIHZhciB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgd3JhcC5jbGFzc05hbWUgPSBcIm9yZGVyXCI7XG4gICAgaWYob3JkZXIgPT0gQ29uc3QuU09SVF9BU0MpIHdyYXAuY2xhc3NOYW1lICs9IFwiIGRyb3B1cFwiO1xuICAgIHZhciBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIGlubmVyLmNsYXNzTmFtZSA9IFwiY2FyZXRcIjtcbiAgICBpbm5lci5zdHlsZS5tYXJnaW4gPSBcIjEwcHggNXB4XCI7XG4gICAgd3JhcC5hcHBlbmRDaGlsZChpbm5lcik7XG4gICAgcmV0dXJuIHdyYXA7XG4gIH1cblxufTtcbiIsImltcG9ydCBCb290c3RyYXBUYWJsZSBmcm9tICcuL0Jvb3RzdHJhcFRhYmxlJztcbmltcG9ydCBUYWJsZUhlYWRlckNvbHVtbiBmcm9tICcuL1RhYmxlSGVhZGVyQ29sdW1uJztcbmltcG9ydCB7VGFibGVEYXRhU2V0fSBmcm9tICcuL3N0b3JlL1RhYmxlRGF0YVN0b3JlJztcblxuaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpe1xuICB3aW5kb3cuQm9vdHN0cmFwVGFibGUgPSBCb290c3RyYXBUYWJsZTtcbiAgd2luZG93LlRhYmxlSGVhZGVyQ29sdW1uID0gVGFibGVIZWFkZXJDb2x1bW47XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gIEJvb3RzdHJhcFRhYmxlLFxuICBUYWJsZUhlYWRlckNvbHVtbixcbiAgVGFibGVEYXRhU2V0XG59O1xuIl19 diff --git a/src/BootstrapTable.js b/src/BootstrapTable.js index 0fe35e883..171ecc6f7 100644 --- a/src/BootstrapTable.js +++ b/src/BootstrapTable.js @@ -132,12 +132,14 @@ class BootstrapTable extends React.Component{ sortName={this.props.options.sortName} sortOrder={this.props.options.sortOrder} onSort={this.handleSort.bind(this)} - onSelectAllRow={this.handleSelectAllRow.bind(this)}> + onSelectAllRow={this.handleSelectAllRow.bind(this)} + bordered={this.props.bordered}> {this.props.children} - +
{selectRowHeaderCol} @@ -83,7 +86,8 @@ TableHeader.propTypes = { onSelectAllRow: React.PropTypes.func, sortName: React.PropTypes.string, sortOrder: React.PropTypes.string, - hideSelectColumn: React.PropTypes.bool + hideSelectColumn: React.PropTypes.bool, + bordered: React.PropTypes.bool }; TableHeader.defaultProps = {