ng-jhipster
Version:
A Jhipster util library for Angular
96 lines (92 loc) • 14.6 kB
JavaScript
/*
Copyright 2013-2020 the original author or authors from the JHipster project.
This file is part of the JHipster project, see https://www.jhipster.tech/
for more information.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { Component, Input } from '@angular/core';
export class JhiMetricsDatasourceComponent {
filterNaN(input) {
if (isNaN(input)) {
return 0;
}
return input;
}
}
JhiMetricsDatasourceComponent.decorators = [
{ type: Component, args: [{
selector: 'jhi-metrics-datasource',
template: `
<h3 jhiTranslate="metrics.datasource.title">DataSource statistics (time in millisecond)</h3>
<div class="table-responsive" *ngIf="!updating">
<table class="table table-striped">
<thead>
<tr>
<th>
<span jhiTranslate="metrics.datasource.usage">Connection Pool Usage</span> (active:
{{ datasourceMetrics.active.value }}, min: {{ datasourceMetrics.min.value }}, max:
{{ datasourceMetrics.max.value }}, idle: {{ datasourceMetrics.idle.value }})
</th>
<th class="text-right" jhiTranslate="metrics.datasource.count">Count</th>
<th class="text-right" jhiTranslate="metrics.datasource.mean">Mean</th>
<th class="text-right" jhiTranslate="metrics.servicesstats.table.min">Min</th>
<th class="text-right" jhiTranslate="metrics.servicesstats.table.p50">p50</th>
<th class="text-right" jhiTranslate="metrics.servicesstats.table.p75">p75</th>
<th class="text-right" jhiTranslate="metrics.servicesstats.table.p95">p95</th>
<th class="text-right" jhiTranslate="metrics.servicesstats.table.p99">p99</th>
<th class="text-right" jhiTranslate="metrics.datasource.max">Max</th>
</tr>
</thead>
<tbody>
<tr>
<td>Acquire</td>
<td class="text-right">{{ datasourceMetrics.acquire.count }}</td>
<td class="text-right">{{ filterNaN(datasourceMetrics.acquire.mean) | number: '1.0-2' }}</td>
<td class="text-right">{{ datasourceMetrics.acquire['0.0'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.acquire['0.5'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.acquire['0.75'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.acquire['0.95'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.acquire['0.99'] | number: '1.0-3' }}</td>
<td class="text-right">{{ filterNaN(datasourceMetrics.acquire.max) | number: '1.0-2' }}</td>
</tr>
<tr>
<td>Creation</td>
<td class="text-right">{{ datasourceMetrics.creation.count }}</td>
<td class="text-right">{{ filterNaN(datasourceMetrics.creation.mean) | number: '1.0-2' }}</td>
<td class="text-right">{{ datasourceMetrics.creation['0.0'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.creation['0.5'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.creation['0.75'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.creation['0.95'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.creation['0.99'] | number: '1.0-3' }}</td>
<td class="text-right">{{ filterNaN(datasourceMetrics.creation.max) | number: '1.0-2' }}</td>
</tr>
<tr>
<td>Usage</td>
<td class="text-right">{{ datasourceMetrics.usage.count }}</td>
<td class="text-right">{{ filterNaN(datasourceMetrics.usage.mean) | number: '1.0-2' }}</td>
<td class="text-right">{{ datasourceMetrics.usage['0.0'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.usage['0.5'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.usage['0.75'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.usage['0.95'] | number: '1.0-3' }}</td>
<td class="text-right">{{ datasourceMetrics.usage['0.99'] | number: '1.0-3' }}</td>
<td class="text-right">{{ filterNaN(datasourceMetrics.usage.max) | number: '1.0-2' }}</td>
</tr>
</tbody>
</table>
</div>
`
},] }
];
JhiMetricsDatasourceComponent.propDecorators = {
datasourceMetrics: [{ type: Input }],
updating: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamhpLW1ldHJpY3MtZGF0YXNvdXJjZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L21ldHJpY3MvamhpLW1ldHJpY3MtZGF0YXNvdXJjZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFnRWpELE1BQU0sT0FBTyw2QkFBNkI7SUFtQnRDLFNBQVMsQ0FBQyxLQUFLO1FBQ1gsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7O1lBdEZKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsd0JBQXdCO2dCQUNsQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0EwRFQ7YUFDSjs7O2dDQUtJLEtBQUs7dUJBYUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gQ29weXJpZ2h0IDIwMTMtMjAyMCB0aGUgb3JpZ2luYWwgYXV0aG9yIG9yIGF1dGhvcnMgZnJvbSB0aGUgSkhpcHN0ZXIgcHJvamVjdC5cblxuIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBKSGlwc3RlciBwcm9qZWN0LCBzZWUgaHR0cHM6Ly93d3cuamhpcHN0ZXIudGVjaC9cbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2poaS1tZXRyaWNzLWRhdGFzb3VyY2UnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxoMyBqaGlUcmFuc2xhdGU9XCJtZXRyaWNzLmRhdGFzb3VyY2UudGl0bGVcIj5EYXRhU291cmNlIHN0YXRpc3RpY3MgKHRpbWUgaW4gbWlsbGlzZWNvbmQpPC9oMz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIiAqbmdJZj1cIiF1cGRhdGluZ1wiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGpoaVRyYW5zbGF0ZT1cIm1ldHJpY3MuZGF0YXNvdXJjZS51c2FnZVwiPkNvbm5lY3Rpb24gUG9vbCBVc2FnZTwvc3Bhbj4gKGFjdGl2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhc291cmNlTWV0cmljcy5hY3RpdmUudmFsdWUgfX0sIG1pbjoge3sgZGF0YXNvdXJjZU1ldHJpY3MubWluLnZhbHVlIH19LCBtYXg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YXNvdXJjZU1ldHJpY3MubWF4LnZhbHVlIH19LCBpZGxlOiB7eyBkYXRhc291cmNlTWV0cmljcy5pZGxlLnZhbHVlIH19KVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtcmlnaHRcIiBqaGlUcmFuc2xhdGU9XCJtZXRyaWNzLmRhdGFzb3VyY2UuY291bnRcIj5Db3VudDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LXJpZ2h0XCIgamhpVHJhbnNsYXRlPVwibWV0cmljcy5kYXRhc291cmNlLm1lYW5cIj5NZWFuPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtcmlnaHRcIiBqaGlUcmFuc2xhdGU9XCJtZXRyaWNzLnNlcnZpY2Vzc3RhdHMudGFibGUubWluXCI+TWluPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtcmlnaHRcIiBqaGlUcmFuc2xhdGU9XCJtZXRyaWNzLnNlcnZpY2Vzc3RhdHMudGFibGUucDUwXCI+cDUwPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtcmlnaHRcIiBqaGlUcmFuc2xhdGU9XCJtZXRyaWNzLnNlcnZpY2Vzc3RhdHMudGFibGUucDc1XCI+cDc1PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtcmlnaHRcIiBqaGlUcmFuc2xhdGU9XCJtZXRyaWNzLnNlcnZpY2Vzc3RhdHMudGFibGUucDk1XCI+cDk1PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtcmlnaHRcIiBqaGlUcmFuc2xhdGU9XCJtZXRyaWNzLnNlcnZpY2Vzc3RhdHMudGFibGUucDk5XCI+cDk5PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtcmlnaHRcIiBqaGlUcmFuc2xhdGU9XCJtZXRyaWNzLmRhdGFzb3VyY2UubWF4XCI+TWF4PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPkFjcXVpcmU8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGRhdGFzb3VyY2VNZXRyaWNzLmFjcXVpcmUuY291bnQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGZpbHRlck5hTihkYXRhc291cmNlTWV0cmljcy5hY3F1aXJlLm1lYW4pIHwgbnVtYmVyOiAnMS4wLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtcmlnaHRcIj57eyBkYXRhc291cmNlTWV0cmljcy5hY3F1aXJlWycwLjAnXSB8IG51bWJlcjogJzEuMC0zJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+e3sgZGF0YXNvdXJjZU1ldHJpY3MuYWNxdWlyZVsnMC41J10gfCBudW1iZXI6ICcxLjAtMycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGRhdGFzb3VyY2VNZXRyaWNzLmFjcXVpcmVbJzAuNzUnXSB8IG51bWJlcjogJzEuMC0zJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+e3sgZGF0YXNvdXJjZU1ldHJpY3MuYWNxdWlyZVsnMC45NSddIHwgbnVtYmVyOiAnMS4wLTMnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtcmlnaHRcIj57eyBkYXRhc291cmNlTWV0cmljcy5hY3F1aXJlWycwLjk5J10gfCBudW1iZXI6ICcxLjAtMycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGZpbHRlck5hTihkYXRhc291cmNlTWV0cmljcy5hY3F1aXJlLm1heCkgfCBudW1iZXI6ICcxLjAtMicgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Q3JlYXRpb248L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGRhdGFzb3VyY2VNZXRyaWNzLmNyZWF0aW9uLmNvdW50IH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtcmlnaHRcIj57eyBmaWx0ZXJOYU4oZGF0YXNvdXJjZU1ldHJpY3MuY3JlYXRpb24ubWVhbikgfCBudW1iZXI6ICcxLjAtMicgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGRhdGFzb3VyY2VNZXRyaWNzLmNyZWF0aW9uWycwLjAnXSB8IG51bWJlcjogJzEuMC0zJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+e3sgZGF0YXNvdXJjZU1ldHJpY3MuY3JlYXRpb25bJzAuNSddIHwgbnVtYmVyOiAnMS4wLTMnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtcmlnaHRcIj57eyBkYXRhc291cmNlTWV0cmljcy5jcmVhdGlvblsnMC43NSddIHwgbnVtYmVyOiAnMS4wLTMnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtcmlnaHRcIj57eyBkYXRhc291cmNlTWV0cmljcy5jcmVhdGlvblsnMC45NSddIHwgbnVtYmVyOiAnMS4wLTMnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtcmlnaHRcIj57eyBkYXRhc291cmNlTWV0cmljcy5jcmVhdGlvblsnMC45OSddIHwgbnVtYmVyOiAnMS4wLTMnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtcmlnaHRcIj57eyBmaWx0ZXJOYU4oZGF0YXNvdXJjZU1ldHJpY3MuY3JlYXRpb24ubWF4KSB8IG51bWJlcjogJzEuMC0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5Vc2FnZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+e3sgZGF0YXNvdXJjZU1ldHJpY3MudXNhZ2UuY291bnQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGZpbHRlck5hTihkYXRhc291cmNlTWV0cmljcy51c2FnZS5tZWFuKSB8IG51bWJlcjogJzEuMC0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+e3sgZGF0YXNvdXJjZU1ldHJpY3MudXNhZ2VbJzAuMCddIHwgbnVtYmVyOiAnMS4wLTMnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtcmlnaHRcIj57eyBkYXRhc291cmNlTWV0cmljcy51c2FnZVsnMC41J10gfCBudW1iZXI6ICcxLjAtMycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGRhdGFzb3VyY2VNZXRyaWNzLnVzYWdlWycwLjc1J10gfCBudW1iZXI6ICcxLjAtMycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGRhdGFzb3VyY2VNZXRyaWNzLnVzYWdlWycwLjk1J10gfCBudW1iZXI6ICcxLjAtMycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGRhdGFzb3VyY2VNZXRyaWNzLnVzYWdlWycwLjk5J10gfCBudW1iZXI6ICcxLjAtMycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1yaWdodFwiPnt7IGZpbHRlck5hTihkYXRhc291cmNlTWV0cmljcy51c2FnZS5tYXgpIHwgbnVtYmVyOiAnMS4wLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBKaGlNZXRyaWNzRGF0YXNvdXJjZUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogb2JqZWN0IGNvbnRhaW5pbmcgYWxsIGRhdGFzb3VyY2UgcmVsYXRlZCBtZXRyaWNzXG4gICAgICovXG4gICAgQElucHV0KCkgZGF0YXNvdXJjZU1ldHJpY3M6IHtcbiAgICAgICAgYWN0aXZlOiBhbnk7XG4gICAgICAgIG1pbjogYW55O1xuICAgICAgICBpZGxlOiBhbnk7XG4gICAgICAgIG1heDogYW55O1xuICAgICAgICB1c2FnZTogYW55O1xuICAgICAgICBhY3F1aXJlOiBhbnk7XG4gICAgICAgIGNyZWF0aW9uOiBhbnk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGJvb2xlYW4gZmllbGQgc2F5aW5nIGlmIHRoZSBtZXRyaWNzIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB1cGRhdGVkXG4gICAgICovXG4gICAgQElucHV0KCkgdXBkYXRpbmc6IGJvb2xlYW47XG5cbiAgICBmaWx0ZXJOYU4oaW5wdXQpIHtcbiAgICAgICAgaWYgKGlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbn1cbiJdfQ==