ng-pli-commons 1.0.134 → 1.0.136

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/esm2022/lib/components/backoffice.commons.component.mjs +41 -0
  2. package/esm2022/lib/components/common.lists.component.mjs +177 -0
  3. package/esm2022/lib/components/configuration-token/configuration-token-subject.service.mjs +23 -0
  4. package/esm2022/lib/components/configuration-token/configuration-token.component.mjs +665 -0
  5. package/esm2022/lib/components/configuration-token/guarantee-token/guarantee-token.component.mjs +103 -0
  6. package/esm2022/lib/components/configuration-token/snapshot-token/snapshot-token.component.mjs +108 -0
  7. package/esm2022/lib/components/configuration.commons.component.mjs +41 -0
  8. package/esm2022/lib/components/dashboard.commons.component.mjs +85 -0
  9. package/esm2022/lib/components/dynamic-filter/dynamic-filter.component.mjs +131 -0
  10. package/esm2022/lib/components/excel-to-json/excel-to-json.component.mjs +54 -0
  11. package/esm2022/lib/components/frontoffice.commons.component.mjs +89 -0
  12. package/esm2022/lib/components/pdf-analyzer/pdf-analyzer.component.mjs +162 -0
  13. package/esm2022/lib/components/pdf-config/pdf-config.component.mjs +170 -0
  14. package/esm2022/lib/components/pdf-generator/pdf-generator.component.mjs +207 -0
  15. package/esm2022/lib/components/pdf-merge-visualizer/pdf-merge-visualizer.component.mjs +307 -0
  16. package/esm2022/lib/components/pdf-visualizer/pdf-visualizer.component.mjs +387 -0
  17. package/esm2022/lib/components/progress-bar/progress-bar.component.mjs +92 -0
  18. package/esm2022/lib/components/segmentation-tokens/segmentation-tokens.component.mjs +199 -0
  19. package/esm2022/lib/components/select-ppp/select-ppp.component.mjs +200 -0
  20. package/esm2022/lib/components/show-hide-columns/show-hide-columns-table.component.mjs +116 -0
  21. package/esm2022/lib/components/token/token.component.mjs +1047 -0
  22. package/esm2022/lib/components/tokens-calculator/tokens-calculator.component.mjs +128 -0
  23. package/esm2022/lib/directives/currency-colfuturo-formatter.directive.mjs +48 -0
  24. package/esm2022/lib/directives/currency-decimal-colfuturo-formatter.directive.mjs +35 -0
  25. package/esm2022/lib/ng-pli-commons.module.mjs +385 -0
  26. package/esm2022/lib/ng-pli-commons.service.mjs +14 -0
  27. package/esm2022/lib/pipes/currency-colfuturo.pipe.mjs +36 -0
  28. package/esm2022/lib/pipes/currency-decimal-colfuturo.pipe.mjs +39 -0
  29. package/esm2022/lib/pipes/currency-print-colfuturo.pipe.mjs +34 -0
  30. package/esm2022/lib/pipes/thousands.pipe.mjs +61 -0
  31. package/esm2022/lib/services/application-fill-percentage.service.mjs +30 -0
  32. package/esm2022/lib/services/application-pdf-form.service.mjs +27 -0
  33. package/esm2022/lib/services/application-tag.service.mjs +56 -0
  34. package/esm2022/lib/services/application.service.mjs +253 -0
  35. package/esm2022/lib/services/assign-task.service.mjs +30 -0
  36. package/esm2022/lib/services/authentication.service.mjs +133 -0
  37. package/esm2022/lib/services/blocked-beneficiary.service.mjs +42 -0
  38. package/esm2022/lib/services/budget-application.service.mjs +265 -0
  39. package/esm2022/lib/services/budget-setup.service.mjs +26 -0
  40. package/esm2022/lib/services/budget-simulation.service.mjs +65 -0
  41. package/esm2022/lib/services/budget.service.mjs +205 -0
  42. package/esm2022/lib/services/closure-wallet.service.mjs +39 -0
  43. package/esm2022/lib/services/cnf-correspondence-document-manager.service.mjs +39 -0
  44. package/esm2022/lib/services/codebtors.service.mjs +28 -0
  45. package/esm2022/lib/services/committee-assistant.service.mjs +55 -0
  46. package/esm2022/lib/services/committee-money.service.mjs +44 -0
  47. package/esm2022/lib/services/committee-pdf.service.mjs +27 -0
  48. package/esm2022/lib/services/committee-snapshot.service.mjs +60 -0
  49. package/esm2022/lib/services/common-info.service.mjs +51 -0
  50. package/esm2022/lib/services/common.service.mjs +285 -0
  51. package/esm2022/lib/services/configuration-document.service.mjs +297 -0
  52. package/esm2022/lib/services/configuration-minisite.service.mjs +26 -0
  53. package/esm2022/lib/services/configuration.service.mjs +53 -0
  54. package/esm2022/lib/services/correspondence-document-category.service.mjs +31 -0
  55. package/esm2022/lib/services/correspondence-manager.service.mjs +74 -0
  56. package/esm2022/lib/services/credit-score.service.mjs +48 -0
  57. package/esm2022/lib/services/credit-study.service.mjs +292 -0
  58. package/esm2022/lib/services/cube.service.mjs +27 -0
  59. package/esm2022/lib/services/data-form-history.service.mjs +25 -0
  60. package/esm2022/lib/services/data-form.service.mjs +176 -0
  61. package/esm2022/lib/services/data-letter-segmentation.service.mjs +64 -0
  62. package/esm2022/lib/services/document-analysis-auto.service.mjs +27 -0
  63. package/esm2022/lib/services/document-history.service.mjs +43 -0
  64. package/esm2022/lib/services/document-management.service.mjs +57 -0
  65. package/esm2022/lib/services/document-process.service.mjs +27 -0
  66. package/esm2022/lib/services/document-validation-attempt.service.mjs +32 -0
  67. package/esm2022/lib/services/document.service.mjs +144 -0
  68. package/esm2022/lib/services/documentary.type.service.mjs +69 -0
  69. package/esm2022/lib/services/email.service.mjs +30 -0
  70. package/esm2022/lib/services/evaluation.service.mjs +181 -0
  71. package/esm2022/lib/services/export-excel.service.mjs +32 -0
  72. package/esm2022/lib/services/file.service.mjs +153 -0
  73. package/esm2022/lib/services/form.service.mjs +112 -0
  74. package/esm2022/lib/services/gic-client-disbursement-metadata.service.mjs +31 -0
  75. package/esm2022/lib/services/gic-client.service.mjs +49 -0
  76. package/esm2022/lib/services/gic-cnf-bankvision-transaction.service.mjs +31 -0
  77. package/esm2022/lib/services/gic-cnf-closing-date.service.mjs +34 -0
  78. package/esm2022/lib/services/gic-cnf-maintenance.service.mjs +30 -0
  79. package/esm2022/lib/services/gic-collection.service.mjs +53 -0
  80. package/esm2022/lib/services/gic-disbursement.service.mjs +39 -0
  81. package/esm2022/lib/services/gic-extract.service.mjs +41 -0
  82. package/esm2022/lib/services/gic-log.service.mjs +41 -0
  83. package/esm2022/lib/services/gic-payment-application.service.mjs +35 -0
  84. package/esm2022/lib/services/gic-payment-plan-cube.service.mjs +27 -0
  85. package/esm2022/lib/services/gic-payment-plan.service.mjs +32 -0
  86. package/esm2022/lib/services/gic-trm.service.mjs +27 -0
  87. package/esm2022/lib/services/global.show.task.service.mjs +37 -0
  88. package/esm2022/lib/services/guarantee-document.service.mjs +52 -0
  89. package/esm2022/lib/services/guarantee-enrollment.service.mjs +37 -0
  90. package/esm2022/lib/services/guarantee.service.mjs +128 -0
  91. package/esm2022/lib/services/guarantees-summary-service.mjs +26 -0
  92. package/esm2022/lib/services/hash.service.mjs +36 -0
  93. package/esm2022/lib/services/import-data.service.mjs +27 -0
  94. package/esm2022/lib/services/import-excel-gic.service.mjs +53 -0
  95. package/esm2022/lib/services/initial-configuration-gic-parameters.service.mjs +51 -0
  96. package/esm2022/lib/services/initial-record.service.mjs +51 -0
  97. package/esm2022/lib/services/integration-ado.service.mjs +54 -0
  98. package/esm2022/lib/services/interaction-application-user.service.mjs +81 -0
  99. package/esm2022/lib/services/interest-adjustment.service.mjs +34 -0
  100. package/esm2022/lib/services/keys-assignation.service.mjs +127 -0
  101. package/esm2022/lib/services/legalization.service.mjs +150 -0
  102. package/esm2022/lib/services/letter-campaing.service.mjs +49 -0
  103. package/esm2022/lib/services/letter-task-mapping.service.mjs +40 -0
  104. package/esm2022/lib/services/log.service.mjs +41 -0
  105. package/esm2022/lib/services/maintenance.service.mjs +86 -0
  106. package/esm2022/lib/services/master-category.service.mjs +66 -0
  107. package/esm2022/lib/services/master-program.service.mjs +78 -0
  108. package/esm2022/lib/services/master-university.service.mjs +79 -0
  109. package/esm2022/lib/services/migration-plis.service.mjs +27 -0
  110. package/esm2022/lib/services/migration-survey-queue.service.mjs +24 -0
  111. package/esm2022/lib/services/openkm-document.service.mjs +27 -0
  112. package/esm2022/lib/services/page.service.mjs +38 -0
  113. package/esm2022/lib/services/partner-system.service.mjs +30 -0
  114. package/esm2022/lib/services/partner.service.mjs +34 -0
  115. package/esm2022/lib/services/pdf-analyzer.service.mjs +33 -0
  116. package/esm2022/lib/services/people-master.service.mjs +42 -0
  117. package/esm2022/lib/services/permission.service.mjs +29 -0
  118. package/esm2022/lib/services/pli-cnf-acuity-fields.service.mjs +34 -0
  119. package/esm2022/lib/services/pli-cnf-app-card-filter.service.mjs +40 -0
  120. package/esm2022/lib/services/pli-cnf-appointment-type.service.mjs +41 -0
  121. package/esm2022/lib/services/pli-cnf-budget-program-type.service.mjs +54 -0
  122. package/esm2022/lib/services/pli-cnf-budget.service.mjs +31 -0
  123. package/esm2022/lib/services/pli-cnf-cloning.service.mjs +27 -0
  124. package/esm2022/lib/services/pli-cnf-committee-pdf-config-table-config.service.mjs +47 -0
  125. package/esm2022/lib/services/pli-cnf-committee-pdf-gen-status.service.mjs +30 -0
  126. package/esm2022/lib/services/pli-cnf-committee-valpro-columns.service.mjs +42 -0
  127. package/esm2022/lib/services/pli-cnf-committee-visualization-mode.service.mjs +42 -0
  128. package/esm2022/lib/services/pli-cnf-committee.service.mjs +66 -0
  129. package/esm2022/lib/services/pli-cnf-config-minisite.service.mjs +90 -0
  130. package/esm2022/lib/services/pli-cnf-configuration-credit-study.service.mjs +41 -0
  131. package/esm2022/lib/services/pli-cnf-document-management.service.mjs +40 -0
  132. package/esm2022/lib/services/pli-cnf-dynamic-keys-assign.service.mjs +52 -0
  133. package/esm2022/lib/services/pli-cnf-evaluation-task-mailing.service.mjs +31 -0
  134. package/esm2022/lib/services/pli-cnf-evaluation-task-template.service.mjs +39 -0
  135. package/esm2022/lib/services/pli-cnf-evaluation-task.service.mjs +112 -0
  136. package/esm2022/lib/services/pli-cnf-evaluation-template.service.mjs +95 -0
  137. package/esm2022/lib/services/pli-cnf-form-edit.service.mjs +68 -0
  138. package/esm2022/lib/services/pli-cnf-form-multiaplicacion.service.mjs +46 -0
  139. package/esm2022/lib/services/pli-cnf-guarantee-documents-template.service.mjs +40 -0
  140. package/esm2022/lib/services/pli-cnf-guarantee-token.service.mjs +42 -0
  141. package/esm2022/lib/services/pli-cnf-header.service.mjs +39 -0
  142. package/esm2022/lib/services/pli-cnf-indicator.service.mjs +39 -0
  143. package/esm2022/lib/services/pli-cnf-information-system.service.mjs +24 -0
  144. package/esm2022/lib/services/pli-cnf-interaction.service.mjs +78 -0
  145. package/esm2022/lib/services/pli-cnf-letter-template-type.service.mjs +29 -0
  146. package/esm2022/lib/services/pli-cnf-letter-template.service.mjs +48 -0
  147. package/esm2022/lib/services/pli-cnf-look-and-feel.service.mjs +28 -0
  148. package/esm2022/lib/services/pli-cnf-mail.service.mjs +30 -0
  149. package/esm2022/lib/services/pli-cnf-menu-form.service.mjs +34 -0
  150. package/esm2022/lib/services/pli-cnf-migration-plis-field-budget.service.mjs +34 -0
  151. package/esm2022/lib/services/pli-cnf-migration-plis-field.service.mjs +47 -0
  152. package/esm2022/lib/services/pli-cnf-migration-status-plis.service.mjs +44 -0
  153. package/esm2022/lib/services/pli-cnf-page-section-form.service.mjs +66 -0
  154. package/esm2022/lib/services/pli-cnf-page-sub-process.service.mjs +25 -0
  155. package/esm2022/lib/services/pli-cnf-pdfs.service.mjs +31 -0
  156. package/esm2022/lib/services/pli-cnf-profile-form.service.mjs +40 -0
  157. package/esm2022/lib/services/pli-cnf-profile-user.service.mjs +49 -0
  158. package/esm2022/lib/services/pli-cnf-project-summary.service.mjs +39 -0
  159. package/esm2022/lib/services/pli-cnf-scenario.service.mjs +47 -0
  160. package/esm2022/lib/services/pli-cnf-segmentation.service.mjs +72 -0
  161. package/esm2022/lib/services/pli-cnf-snapshot-token.service.mjs +42 -0
  162. package/esm2022/lib/services/pli-cnf-status-flow-interaction.service.mjs +74 -0
  163. package/esm2022/lib/services/pli-cnf-status-flow.service.mjs +56 -0
  164. package/esm2022/lib/services/pli-cnf-support-document-category.service.mjs +47 -0
  165. package/esm2022/lib/services/pli-cnf-support-document.service.mjs +56 -0
  166. package/esm2022/lib/services/pli-cnf-survey-document.service.mjs +37 -0
  167. package/esm2022/lib/services/pli-cnf-survey-pdf.service.mjs +34 -0
  168. package/esm2022/lib/services/pli-cnf-survey.service.mjs +46 -0
  169. package/esm2022/lib/services/pli-cnf-task-group.service.mjs +33 -0
  170. package/esm2022/lib/services/pli-cnf-text-category.service.mjs +38 -0
  171. package/esm2022/lib/services/pli-cnf-text-option.service.mjs +39 -0
  172. package/esm2022/lib/services/pli-cnf-text.service.mjs +62 -0
  173. package/esm2022/lib/services/pli-cnf-type-text.service.mjs +45 -0
  174. package/esm2022/lib/services/pli-cnf-university-article.service.mjs +39 -0
  175. package/esm2022/lib/services/pli-cnf-user-calendar.service.mjs +36 -0
  176. package/esm2022/lib/services/pli-cnf-user-workspace.service.mjs +35 -0
  177. package/esm2022/lib/services/pli-cnf-valpro-keys.service.mjs +35 -0
  178. package/esm2022/lib/services/pli-cnf-workspace-segmentation.service.mjs +31 -0
  179. package/esm2022/lib/services/pli-message-type.service.mjs +40 -0
  180. package/esm2022/lib/services/pli-multiple-value-filter.service.mjs +39 -0
  181. package/esm2022/lib/services/pli-promocion-username.service.mjs +57 -0
  182. package/esm2022/lib/services/pli-seg-action-user.service.mjs +37 -0
  183. package/esm2022/lib/services/pli-segmentation.service.mjs +130 -0
  184. package/esm2022/lib/services/pli-tag-assignment.service.mjs +36 -0
  185. package/esm2022/lib/services/pli-tag.service.mjs +55 -0
  186. package/esm2022/lib/services/pli-user.service.mjs +51 -0
  187. package/esm2022/lib/services/plis-beneficiario.service.mjs +29 -0
  188. package/esm2022/lib/services/plis-estatus-change.service.mjs +30 -0
  189. package/esm2022/lib/services/post-selection.service.mjs +25 -0
  190. package/esm2022/lib/services/ppp.service.mjs +360 -0
  191. package/esm2022/lib/services/profile.service.mjs +60 -0
  192. package/esm2022/lib/services/progress-bar.service.mjs +40 -0
  193. package/esm2022/lib/services/promotion-score.service.mjs +44 -0
  194. package/esm2022/lib/services/registry-identifier.service.mjs +49 -0
  195. package/esm2022/lib/services/return-refund.service.mjs +53 -0
  196. package/esm2022/lib/services/segmentation-tokens.service.mjs +43 -0
  197. package/esm2022/lib/services/segmentation-user-service.service.mjs +94 -0
  198. package/esm2022/lib/services/segmentation.service.mjs +31 -0
  199. package/esm2022/lib/services/send-application.service.mjs +541 -0
  200. package/esm2022/lib/services/sesion-form.service.mjs +31 -0
  201. package/esm2022/lib/services/sesion.service.mjs +48 -0
  202. package/esm2022/lib/services/spinner.service.mjs +16 -0
  203. package/esm2022/lib/services/sponsorship-letter.service.mjs +68 -0
  204. package/esm2022/lib/services/status.service.mjs +104 -0
  205. package/esm2022/lib/services/summary-budget.service.mjs +24 -0
  206. package/esm2022/lib/services/survey-metadata.service.mjs +28 -0
  207. package/esm2022/lib/services/survey-queue.service.mjs +24 -0
  208. package/esm2022/lib/services/survey.service.mjs +52 -0
  209. package/esm2022/lib/services/tag-management.service.mjs +58 -0
  210. package/esm2022/lib/services/tasa.cambio.service.mjs +35 -0
  211. package/esm2022/lib/services/token-transformation.service.mjs +62 -0
  212. package/esm2022/lib/services/token.service.mjs +1477 -0
  213. package/esm2022/lib/services/university.service.mjs +50 -0
  214. package/esm2022/lib/services/upload-documents.service.mjs +60 -0
  215. package/esm2022/lib/services/user.service.mjs +28 -0
  216. package/esm2022/lib/services/visualization-committee.service.mjs +91 -0
  217. package/esm2022/lib/utils/custom-validator.mjs +95 -0
  218. package/esm2022/lib/utils/form-util.mjs +35 -0
  219. package/esm2022/lib/utils/formio-util.mjs +582 -0
  220. package/esm2022/lib/utils/version-commons.mjs +10 -0
  221. package/esm2022/ng-pli-commons.mjs +5 -0
  222. package/esm2022/public-api.mjs +226 -0
  223. package/esm2022/version.mjs +29 -0
  224. package/fesm2022/ng-pli-commons.mjs +696 -661
  225. package/fesm2022/ng-pli-commons.mjs.map +1 -1
  226. package/lib/services/send-application.service.d.ts +1 -0
  227. package/package.json +3 -1
@@ -0,0 +1,387 @@
1
+ import { Component, Input, EventEmitter, Output } from '@angular/core';
2
+ import * as PDFJS_ from 'pdfjs-dist/build/pdf.min.mjs';
3
+ import Panzoom from 'panzoom/dist/panzoom';
4
+ import { PdfDocument, UtilString, EProceso, RequestPdf } from 'ng-pli-util';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../services/common.service";
7
+ import * as i2 from "@angular/platform-browser";
8
+ import * as i3 from "ngx-toastr";
9
+ import * as i4 from "../../services/file.service";
10
+ import * as i5 from "@angular/common";
11
+ import * as i6 from "@angular/forms";
12
+ const PDFJS = PDFJS_;
13
+ // const panzoom = panzoom_;
14
+ export class PdfVisualizerComponent {
15
+ static { this.DEFAULT_HEIGHT = 500; }
16
+ constructor(commonService, sanitization, taostrService, fileService) {
17
+ this.commonService = commonService;
18
+ this.sanitization = sanitization;
19
+ this.taostrService = taostrService;
20
+ this.fileService = fileService;
21
+ /** show pager */
22
+ this.showPager = true;
23
+ /** repeat header */
24
+ this.repeatHeader = true;
25
+ /** repeat footer*/
26
+ this.repeatFooter = true;
27
+ /** It fires when the file has been downloaded */
28
+ this.onDownload = new EventEmitter();
29
+ /** It fires when the name has been sent */
30
+ this.onSendEmail = new EventEmitter();
31
+ /** It fires when the html has been modified */
32
+ this.onChange = new EventEmitter();
33
+ /** it verifies if component is ready */
34
+ this.ready = false;
35
+ /** it contains the id of canvas */
36
+ this.id_canvas = 'pdf-canvas';
37
+ /** It allows to edit html */
38
+ this.edit = false;
39
+ }
40
+ // it resolves when the html is changed
41
+ ngOnChanges(changes) {
42
+ const html = changes.html;
43
+ const urlFile = changes.urlFile;
44
+ if (html && html.currentValue) {
45
+ this.html = html.currentValue;
46
+ this.generatePDF();
47
+ }
48
+ else if (urlFile && urlFile.currentValue) {
49
+ this.urlFile = urlFile.currentValue;
50
+ this.generatePDF();
51
+ }
52
+ else {
53
+ this.ready = false;
54
+ if (this.pdfDocument && this.pdfDocument.canvas) {
55
+ let canvas = this.pdfDocument.canvas;
56
+ var ctx = this.pdfDocument.canvas.getContext('2d');
57
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
58
+ this.pdfDocument = undefined;
59
+ }
60
+ }
61
+ }
62
+ /** It generates the pdf */
63
+ generatePDF() {
64
+ if (!UtilString.isValid(this.html) && UtilString.isValid(this.urlFile)) {
65
+ this.commonService.getBase64PdfByUrl(this.urlFile).subscribe((result) => {
66
+ this.showBase64Pdf(result);
67
+ }, (error) => {
68
+ console.log('Error trying to render PDF', error);
69
+ });
70
+ }
71
+ else {
72
+ // if html was changed
73
+ let requestPdf = new RequestPdf();
74
+ requestPdf.html = this.html;
75
+ requestPdf.header = this.header;
76
+ requestPdf.footer = this.footer;
77
+ requestPdf.lang = this.lang;
78
+ requestPdf.marginTop = this.marginTop;
79
+ requestPdf.marginRight = this.marginRight;
80
+ requestPdf.marginBottom = this.marginBottom;
81
+ requestPdf.marginLeft = this.marginLeft;
82
+ requestPdf.orientation = this.orientation;
83
+ requestPdf.size = this.size;
84
+ requestPdf.font = this.font;
85
+ requestPdf.repeatHeader = this.repeatHeader;
86
+ requestPdf.repeatFooter = this.repeatFooter;
87
+ requestPdf.showPager = this.showPager;
88
+ requestPdf.headerHeight = this.headerHeight;
89
+ requestPdf.footerHeight = this.footerHeight;
90
+ this.commonService.getBase64Pdf(requestPdf).subscribe((result) => {
91
+ this.showBase64Pdf(result);
92
+ }, (error) => {
93
+ console.log('Error trying to render PDF', error);
94
+ });
95
+ }
96
+ }
97
+ showBase64Pdf(result) {
98
+ this.base64 = result.base64;
99
+ var data = atob(this.base64);
100
+ PDFJS.workerSrc = 'https://cdn.jsdelivr.net/npm/pdfjs-dist@4.6.82/build/pdf.worker.min.mjs';
101
+ if (PDFJS.GlobalWorkerOptions)
102
+ PDFJS.GlobalWorkerOptions.workerSrc =
103
+ 'https://cdn.jsdelivr.net/npm/pdfjs-dist@4.6.82/build/pdf.worker.min.mjs';
104
+ // create instance of PdfDocument with the id of canvas
105
+ // create instance of PdfDocument with the id of canvas
106
+ this.pdfDocument = new PdfDocument(this.id_canvas);
107
+ // assign variables out of scope
108
+ let pdfdocument = this.pdfDocument;
109
+ Panzoom(this.pdfDocument.canvas, {
110
+ smoothScroll: false
111
+ });
112
+ let self = this;
113
+ let ready = this.ready;
114
+ const pdfLoadingTask = PDFJS.getDocument({ data: data });
115
+ // JP - here we ask if the promise supports the new version pdfLoadingTask.promise
116
+ const promise = pdfLoadingTask.promise ? pdfLoadingTask.promise : pdfLoadingTask;
117
+ promise.then(function (pdfDoc_) {
118
+ pdfdocument.pdfDoc = pdfDoc_;
119
+ self.renderPage(1);
120
+ ready = true;
121
+ });
122
+ }
123
+ testBase64ToFile2() {
124
+ // let dataurl = this.base64;
125
+ let fileName = 'TestOPrada2.pdf';
126
+ // var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
127
+ var bstr = atob(this.base64), n = bstr.length, u8arr = new Uint8Array(n);
128
+ while (n--) {
129
+ u8arr[n] = bstr.charCodeAt(n);
130
+ }
131
+ let fileReturn = new File([u8arr], fileName, { type: 'application/pdf' });
132
+ this.testEnvioDoc(fileReturn, fileName);
133
+ }
134
+ testEnvioDoc(fileReturn, fileName) {
135
+ const filePath = this.fileService.getPath(EProceso.CONVOCATORIA, 500, 2, 1, 'aaaa', fileName);
136
+ this.fileService.upload(filePath, fileReturn).subscribe((url) => {
137
+ console.log('Finalizo envío documento', url);
138
+ }, (error) => {
139
+ console.log('Error trying to upload: ', error);
140
+ });
141
+ }
142
+ /** It returns the height */
143
+ getHeight() {
144
+ if (this.height)
145
+ return this.height + 'px';
146
+ return PdfVisualizerComponent.DEFAULT_HEIGHT + 'px';
147
+ }
148
+ /** Get page info from document, resize canvas accordingly, and render page. */
149
+ renderPage(num) {
150
+ this.pdfDocument.pageRendering = true;
151
+ // assign variables out of scope
152
+ let selfPdfDocument = this.pdfDocument;
153
+ let self = this;
154
+ // Using promise to fetch the page
155
+ this.pdfDocument.pdfDoc.getPage(num).then(function (page) {
156
+ var scale = selfPdfDocument.scale ? selfPdfDocument.scale : 1.5;
157
+ var viewport = page.getViewport({ scale: scale });
158
+ selfPdfDocument.canvas.height = viewport.height;
159
+ selfPdfDocument.canvas.width = viewport.width;
160
+ // Render PDF page into canvas context
161
+ var renderContext = {
162
+ canvasContext: selfPdfDocument.canvas.getContext('2d'),
163
+ viewport: viewport
164
+ };
165
+ var renderTask = page.render(renderContext);
166
+ // Wait for rendering to finish
167
+ renderTask.promise.then(function () {
168
+ selfPdfDocument.pageRendering = false;
169
+ if (selfPdfDocument.pageNumPending !== null) {
170
+ // New page rendering is pending
171
+ self.renderPage(selfPdfDocument.pageNumPending);
172
+ selfPdfDocument.pageNumPending = null;
173
+ }
174
+ });
175
+ });
176
+ }
177
+ /**
178
+ * If another page rendering in progress, waits until the rendering is
179
+ * finised. Otherwise, executes rendering immediately.
180
+ */
181
+ queueRenderPage(num) {
182
+ if (this.pdfDocument.pageRendering) {
183
+ this.pdfDocument.pageNumPending = num;
184
+ }
185
+ else {
186
+ this.renderPage(num);
187
+ }
188
+ }
189
+ /**
190
+ * Displays previous page.
191
+ */
192
+ onPrevPage() {
193
+ if (!this.pdfDocument || this.pdfDocument.pageNum <= 1) {
194
+ return;
195
+ }
196
+ this.pdfDocument.pageNum--;
197
+ this.queueRenderPage(this.pdfDocument.pageNum);
198
+ }
199
+ /**
200
+ * Displays next page.
201
+ */
202
+ onNextPage() {
203
+ if (!this.pdfDocument || this.pdfDocument.pageNum >= this.pdfDocument.pdfDoc.numPages) {
204
+ return;
205
+ }
206
+ this.pdfDocument.pageNum++;
207
+ this.queueRenderPage(this.pdfDocument.pageNum);
208
+ }
209
+ /**
210
+ * Displays Zoom In.
211
+ */
212
+ onZoomIn() {
213
+ if (!this.pdfDocument || this.pdfDocument.scale >= 3) {
214
+ return;
215
+ }
216
+ this.pdfDocument.scale = this.pdfDocument.scale + 0.2;
217
+ this.queueRenderPage(this.pdfDocument.pageNum);
218
+ }
219
+ /**
220
+ * Displays Zoom Out.
221
+ */
222
+ onZoomOut() {
223
+ if (!this.pdfDocument || this.pdfDocument.scale <= 0.4) {
224
+ return;
225
+ }
226
+ this.pdfDocument.scale = this.pdfDocument.scale - 0.2;
227
+ this.queueRenderPage(this.pdfDocument.pageNum);
228
+ }
229
+ ngOnInit() { }
230
+ /** It sends the document by email */
231
+ sendEmail() {
232
+ if (this.email && UtilString.validateEmail(this.email)) {
233
+ this.onSendEmail.emit({
234
+ to: this.email,
235
+ base64: this.base64
236
+ });
237
+ this.email = '';
238
+ return;
239
+ }
240
+ this.taostrService.warning('Correo electrónico es incorrecto');
241
+ }
242
+ /** It fires the event download */
243
+ download() {
244
+ const contentType = 'application/pdf';
245
+ const b64Data = this.base64;
246
+ const blob = this.b64toBlob(b64Data, contentType);
247
+ const blobUrl = URL.createObjectURL(blob);
248
+ var a = document.createElement('a');
249
+ document.body.appendChild(a);
250
+ a.style.display = 'none';
251
+ a.href = blobUrl;
252
+ a.download = this.filename;
253
+ a.click();
254
+ setTimeout(() => {
255
+ window.URL.revokeObjectURL(blobUrl);
256
+ document.body.removeChild(a);
257
+ this.onDownload.emit({
258
+ base64: this.base64
259
+ });
260
+ }, 200);
261
+ }
262
+ /** It fires when the html is changed */
263
+ change() {
264
+ this.generatePDF();
265
+ this.onChange.emit(this.html);
266
+ }
267
+ /** it allows to edit */
268
+ toggleEdit() {
269
+ this.edit = !this.edit;
270
+ }
271
+ /**
272
+ * it returns if is PdfDocument
273
+ */
274
+ isPdfDocument() {
275
+ return this.pdfDocument !== undefined;
276
+ }
277
+ /**
278
+ * it returns if is Title
279
+ */
280
+ isTitle() {
281
+ return this.title !== undefined;
282
+ }
283
+ /**
284
+ * it returns if is isPdfDoc
285
+ */
286
+ isPdfDoc() {
287
+ return (this.pdfDocument &&
288
+ this.pdfDocument.pdfDoc != undefined &&
289
+ this.pdfDocument.pdfDoc != null);
290
+ }
291
+ /**
292
+ * it returns if is filename
293
+ */
294
+ isFilename() {
295
+ return this.filename !== undefined;
296
+ }
297
+ /**
298
+ * it returns if is enableEdit
299
+ */
300
+ isEnableEdit() {
301
+ return this.enableEdit == true;
302
+ }
303
+ /**
304
+ * it returns if is edit
305
+ */
306
+ isEdit() {
307
+ return this.edit == true;
308
+ }
309
+ /**
310
+ * it returns if is enableEmail
311
+ */
312
+ isEnableEmail() {
313
+ return this.enableEmail == true;
314
+ }
315
+ b64toBlob(b64Data, contentType = '', sliceSize = 512) {
316
+ const byteArrays = [];
317
+ const byteCharacters = atob(b64Data);
318
+ for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
319
+ const slice = byteCharacters.slice(offset, offset + sliceSize);
320
+ const byteNumbers = new Array(slice.length);
321
+ for (let i = 0; i < slice.length; i++) {
322
+ byteNumbers[i] = slice.charCodeAt(i);
323
+ }
324
+ const byteArray = new Uint8Array(byteNumbers);
325
+ byteArrays.push(byteArray);
326
+ }
327
+ const blob = new Blob(byteArrays, { type: contentType });
328
+ return blob;
329
+ }
330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PdfVisualizerComponent, deps: [{ token: i1.CommonService }, { token: i2.DomSanitizer }, { token: i3.ToastrService }, { token: i4.FileService }], target: i0.ɵɵFactoryTarget.Component }); }
331
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PdfVisualizerComponent, selector: "pli-pdf-visualizer", inputs: { html: "html", header: "header", footer: "footer", marginTop: "marginTop", marginRight: "marginRight", marginBottom: "marginBottom", marginLeft: "marginLeft", font: "font", orientation: "orientation", size: "size", showPager: "showPager", repeatHeader: "repeatHeader", repeatFooter: "repeatFooter", headerHeight: "headerHeight", footerHeight: "footerHeight", enableEdit: "enableEdit", title: "title", height: "height", filename: "filename", enableEmail: "enableEmail", lang: "lang", urlFile: "urlFile" }, outputs: { onDownload: "onDownload", onSendEmail: "onSendEmail", onChange: "onChange" }, usesOnChanges: true, ngImport: i0, template: "<h3 class=\"pdf-visualizer-title\">{{ title }}</h3>\r\n<div class=\"pdf-visualizer-container\">\r\n\t<div class=\"pdf-visualizer-controls\" *ngIf=\"isPdfDocument() === true\">\r\n\t\t<div class=\"row\">\r\n\t\t\t<div class=\"col-md-7\">\r\n\t\t\t\t<div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm mr-2\" role=\"group\" aria-label=\"Second group\">\r\n\t\t\t\t\t\t<!-- zoom in-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\ttitle=\"Acercar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onZoomIn()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-search-plus\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- zoom out-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\ttitle=\"Alejar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onZoomOut()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-search-minus\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm mr-2\" role=\"group\" aria-label=\"Third group\">\r\n\t\t\t\t\t\t<!--prev -->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onPrevPage()\"\r\n\t\t\t\t\t\t\ttitle=\"Anterior\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-chevron-left\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- pagination-->\r\n\t\t\t\t\t\t<span class=\"btn btn-outline-secondary\" *ngIf=\"isPdfDoc() === true\">\r\n\t\t\t\t\t\t\tP\u00E1gina: {{ pdfDocument.pageNum }} / {{ pdfDocument.pdfDoc.numPages }}\r\n\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t<!--next -->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onNextPage()\"\r\n\t\t\t\t\t\t\ttitle=\"Siguiente\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-chevron-right\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm\" role=\"group\" aria-label=\"First group\">\r\n\t\t\t\t\t\t<!-- download-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t[download]=\"filename\"\r\n\t\t\t\t\t\t\t*ngIf=\"isFilename() === true\"\r\n\t\t\t\t\t\t\t(click)=\"download()\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Descargar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<!-- [href]=\"\r\n\t\t\t\t\t\t\tsanitization.bypassSecurityTrustUrl(\r\n\t\t\t\t\t\t\t\t'data:application/pdf;base64,' + this.base64\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\" -->\r\n\t\t\t\t\t\t\t<span class=\"fa fa-download\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- toggle edit--\r\n <a href=\"Javascript:;\" *ngIf=\"isEnableEdit() === true\" class=\"btn btn-outline-secondary\" title=\"Editar\"\r\n data-toggle=\"tooltip\" data-placement=\"top\" (click)=\"toggleEdit()\">\r\n <span class=\"fa fa-edit\"></span>\r\n </a>\r\n\r\n <!-- generate pdf-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t*ngIf=\"isEdit() === true\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Generar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\t(click)=\"change()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-play\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"col-md-5 pull-right\" *ngIf=\"isEnableEmail() === true\">\r\n\t\t\t\t<div class=\"input-group input-group-sm\">\r\n\t\t\t\t\t<label for=\"pdf-visualizer-email\" class=\"pdf\">\r\n\t\t\t\t\t\tEnviar mensaje a\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"email\"\r\n\t\t\t\t\t\tid=\"pdf-visualizer-email\"\r\n\t\t\t\t\t\tname=\"pdf-visualizer-email\"\r\n\t\t\t\t\t\trequired=\"true\"\r\n\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\tplaceholder=\"Correo electr\u00F3nico\"\r\n\t\t\t\t\t\t[(ngModel)]=\"email\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div class=\"input-group-append\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t(click)=\"sendEmail()\"\r\n\t\t\t\t\t\t\ttitle=\"Enviar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\t\tsrc=\"http://giro360.co/zona360/colfuturo/PLIC/img/export.svg\"\r\n\t\t\t\t\t\t\t\talt=\"\"\r\n\t\t\t\t\t\t\t\twidth=\"16\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"pdf-visualizer-dashboard\">\r\n\t\t<div class=\"row\">\r\n\t\t\t<div class=\"col-md-5\" *ngIf=\"isEdit() === true\">\r\n\t\t\t\t<textarea\r\n\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t[style.height]=\"getHeight()\"\r\n\t\t\t\t\tstyle=\"resize:vertical;\"\r\n\t\t\t\t\t[(ngModel)]=\"html\"\r\n\t\t\t\t></textarea>\r\n\t\t\t</div>\r\n\t\t\t<div [ngClass]=\"{ 'col-md-7': edit === true, 'col-md-12': !edit }\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tid=\"pdf-scrollable\"\r\n\t\t\t\t\tclass=\"pdf-visualizer-scrollable\"\r\n\t\t\t\t\t[style.height]=\"getHeight()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<canvas id=\"pdf-canvas\" class=\"pdf-visualizer-canvas\"> </canvas>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [".pdf-visualizer-container{border:1px solid #eee;margin:10px 0}.pdf-visualizer-dashboard,.pdf-visualizer-controls{background-color:#f5f5f5;padding:15px}.pdf-visualizer-dashboard{border-bottom:1px solid #eee;border-top:1px solid #eee}.pdf-visualizer-title{font-size:1.4rem;color:red;text-align:center;margin-bottom:1em}.pdf-visualizer-canvas{cursor:move}.text-align-center{text-align:center}.text-align-left{text-align:left}.text-align-right{text-align:right}.margin-left{margin-left:5px}.pdf-visualizer-scrollable{overflow:hidden;text-align:center}label.pdf{margin-right:.6em;line-height:24px}button.btn-outline-secondary{height:26px;line-height:12px!important;background-color:#f2f2f2;border:1px solid #ccc;color:#333}button.btn-outline-secondary:hover{background-color:#e6e6e6}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
332
+ }
333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PdfVisualizerComponent, decorators: [{
334
+ type: Component,
335
+ args: [{ selector: 'pli-pdf-visualizer', standalone: false, template: "<h3 class=\"pdf-visualizer-title\">{{ title }}</h3>\r\n<div class=\"pdf-visualizer-container\">\r\n\t<div class=\"pdf-visualizer-controls\" *ngIf=\"isPdfDocument() === true\">\r\n\t\t<div class=\"row\">\r\n\t\t\t<div class=\"col-md-7\">\r\n\t\t\t\t<div class=\"btn-toolbar\" role=\"toolbar\" aria-label=\"Toolbar with button groups\">\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm mr-2\" role=\"group\" aria-label=\"Second group\">\r\n\t\t\t\t\t\t<!-- zoom in-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\ttitle=\"Acercar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onZoomIn()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-search-plus\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- zoom out-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\ttitle=\"Alejar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onZoomOut()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-search-minus\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm mr-2\" role=\"group\" aria-label=\"Third group\">\r\n\t\t\t\t\t\t<!--prev -->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onPrevPage()\"\r\n\t\t\t\t\t\t\ttitle=\"Anterior\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-chevron-left\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- pagination-->\r\n\t\t\t\t\t\t<span class=\"btn btn-outline-secondary\" *ngIf=\"isPdfDoc() === true\">\r\n\t\t\t\t\t\t\tP\u00E1gina: {{ pdfDocument.pageNum }} / {{ pdfDocument.pdfDoc.numPages }}\r\n\t\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t\t<!--next -->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\t(click)=\"onNextPage()\"\r\n\t\t\t\t\t\t\ttitle=\"Siguiente\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-chevron-right\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"btn-group btn-group-sm\" role=\"group\" aria-label=\"First group\">\r\n\t\t\t\t\t\t<!-- download-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t[download]=\"filename\"\r\n\t\t\t\t\t\t\t*ngIf=\"isFilename() === true\"\r\n\t\t\t\t\t\t\t(click)=\"download()\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Descargar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<!-- [href]=\"\r\n\t\t\t\t\t\t\tsanitization.bypassSecurityTrustUrl(\r\n\t\t\t\t\t\t\t\t'data:application/pdf;base64,' + this.base64\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\" -->\r\n\t\t\t\t\t\t\t<span class=\"fa fa-download\"></span>\r\n\t\t\t\t\t\t</a>\r\n\r\n\t\t\t\t\t\t<!-- toggle edit--\r\n <a href=\"Javascript:;\" *ngIf=\"isEnableEdit() === true\" class=\"btn btn-outline-secondary\" title=\"Editar\"\r\n data-toggle=\"tooltip\" data-placement=\"top\" (click)=\"toggleEdit()\">\r\n <span class=\"fa fa-edit\"></span>\r\n </a>\r\n\r\n <!-- generate pdf-->\r\n\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t*ngIf=\"isEdit() === true\"\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttitle=\"Generar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t\t(click)=\"change()\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<span class=\"fa fa-play\"></span>\r\n\t\t\t\t\t\t</a>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"col-md-5 pull-right\" *ngIf=\"isEnableEmail() === true\">\r\n\t\t\t\t<div class=\"input-group input-group-sm\">\r\n\t\t\t\t\t<label for=\"pdf-visualizer-email\" class=\"pdf\">\r\n\t\t\t\t\t\tEnviar mensaje a\r\n\t\t\t\t\t</label>\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\ttype=\"email\"\r\n\t\t\t\t\t\tid=\"pdf-visualizer-email\"\r\n\t\t\t\t\t\tname=\"pdf-visualizer-email\"\r\n\t\t\t\t\t\trequired=\"true\"\r\n\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\tplaceholder=\"Correo electr\u00F3nico\"\r\n\t\t\t\t\t\t[(ngModel)]=\"email\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div class=\"input-group-append\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tclass=\"btn btn-outline-secondary\"\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t(click)=\"sendEmail()\"\r\n\t\t\t\t\t\t\ttitle=\"Enviar\"\r\n\t\t\t\t\t\t\tdata-toggle=\"tooltip\"\r\n\t\t\t\t\t\t\tdata-placement=\"top\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<img\r\n\t\t\t\t\t\t\t\tsrc=\"http://giro360.co/zona360/colfuturo/PLIC/img/export.svg\"\r\n\t\t\t\t\t\t\t\talt=\"\"\r\n\t\t\t\t\t\t\t\twidth=\"16\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"pdf-visualizer-dashboard\">\r\n\t\t<div class=\"row\">\r\n\t\t\t<div class=\"col-md-5\" *ngIf=\"isEdit() === true\">\r\n\t\t\t\t<textarea\r\n\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t[style.height]=\"getHeight()\"\r\n\t\t\t\t\tstyle=\"resize:vertical;\"\r\n\t\t\t\t\t[(ngModel)]=\"html\"\r\n\t\t\t\t></textarea>\r\n\t\t\t</div>\r\n\t\t\t<div [ngClass]=\"{ 'col-md-7': edit === true, 'col-md-12': !edit }\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tid=\"pdf-scrollable\"\r\n\t\t\t\t\tclass=\"pdf-visualizer-scrollable\"\r\n\t\t\t\t\t[style.height]=\"getHeight()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<canvas id=\"pdf-canvas\" class=\"pdf-visualizer-canvas\"> </canvas>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [".pdf-visualizer-container{border:1px solid #eee;margin:10px 0}.pdf-visualizer-dashboard,.pdf-visualizer-controls{background-color:#f5f5f5;padding:15px}.pdf-visualizer-dashboard{border-bottom:1px solid #eee;border-top:1px solid #eee}.pdf-visualizer-title{font-size:1.4rem;color:red;text-align:center;margin-bottom:1em}.pdf-visualizer-canvas{cursor:move}.text-align-center{text-align:center}.text-align-left{text-align:left}.text-align-right{text-align:right}.margin-left{margin-left:5px}.pdf-visualizer-scrollable{overflow:hidden;text-align:center}label.pdf{margin-right:.6em;line-height:24px}button.btn-outline-secondary{height:26px;line-height:12px!important;background-color:#f2f2f2;border:1px solid #ccc;color:#333}button.btn-outline-secondary:hover{background-color:#e6e6e6}\n"] }]
336
+ }], ctorParameters: () => [{ type: i1.CommonService }, { type: i2.DomSanitizer }, { type: i3.ToastrService }, { type: i4.FileService }], propDecorators: { html: [{
337
+ type: Input
338
+ }], header: [{
339
+ type: Input
340
+ }], footer: [{
341
+ type: Input
342
+ }], marginTop: [{
343
+ type: Input
344
+ }], marginRight: [{
345
+ type: Input
346
+ }], marginBottom: [{
347
+ type: Input
348
+ }], marginLeft: [{
349
+ type: Input
350
+ }], font: [{
351
+ type: Input
352
+ }], orientation: [{
353
+ type: Input
354
+ }], size: [{
355
+ type: Input
356
+ }], showPager: [{
357
+ type: Input
358
+ }], repeatHeader: [{
359
+ type: Input
360
+ }], repeatFooter: [{
361
+ type: Input
362
+ }], headerHeight: [{
363
+ type: Input
364
+ }], footerHeight: [{
365
+ type: Input
366
+ }], enableEdit: [{
367
+ type: Input
368
+ }], title: [{
369
+ type: Input
370
+ }], height: [{
371
+ type: Input
372
+ }], filename: [{
373
+ type: Input
374
+ }], enableEmail: [{
375
+ type: Input
376
+ }], onDownload: [{
377
+ type: Output
378
+ }], onSendEmail: [{
379
+ type: Output
380
+ }], onChange: [{
381
+ type: Output
382
+ }], lang: [{
383
+ type: Input
384
+ }], urlFile: [{
385
+ type: Input
386
+ }] } });
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXZpc3VhbGl6ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcGxpLWNvbW1vbnMvc3JjL2xpYi9jb21wb25lbnRzL3BkZi12aXN1YWxpemVyL3BkZi12aXN1YWxpemVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy9wZGYtdmlzdWFsaXplci9wZGYtdmlzdWFsaXplci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUlULEtBQUssRUFFTCxZQUFZLEVBRVosTUFBTSxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxNQUFNLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxPQUFPLE1BQU0sc0JBQXNCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7QUFLNUUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLDRCQUE0QjtBQVE1QixNQUFNLE9BQU8sc0JBQXNCO2FBQzNCLG1CQUFjLEdBQUcsR0FBRyxBQUFOLENBQU87SUFvRTVCLFlBQ1csYUFBNEIsRUFDL0IsWUFBMEIsRUFDekIsYUFBNEIsRUFDNUIsV0FBd0I7UUFIdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDekIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFuRGpDLGlCQUFpQjtRQUNSLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDbkMsb0JBQW9CO1FBQ1gsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDdEMsbUJBQW1CO1FBQ1YsaUJBQVksR0FB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LFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFFRSxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0T25Jbml0LFxyXG5cdE9uQ2hhbmdlcyxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdElucHV0LFxyXG5cdFNpbXBsZUNoYW5nZSxcclxuXHRFdmVudEVtaXR0ZXIsXHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0T3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIFBERkpTXyBmcm9tICdwZGZqcy1kaXN0L2J1aWxkL3BkZi5taW4ubWpzJztcclxuaW1wb3J0IFBhbnpvb20gZnJvbSAncGFuem9vbS9kaXN0L3Bhbnpvb20nO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZGZEb2N1bWVudCwgVXRpbFN0cmluZywgRVByb2Nlc28sIFJlcXVlc3RQZGYgfSBmcm9tICduZy1wbGktdXRpbCc7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuXHJcbmNvbnN0IFBERkpTID0gUERGSlNfO1xyXG4vLyBjb25zdCBwYW56b29tID0gcGFuem9vbV87XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncGxpLXBkZi12aXN1YWxpemVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wZGYtdmlzdWFsaXplci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wZGYtdmlzdWFsaXplci5jb21wb25lbnQuY3NzJ10sXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGRmVmlzdWFsaXplckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHRzdGF0aWMgREVGQVVMVF9IRUlHSFQgPSA1MDA7XHJcblx0LyoqIHRleHQgaHRtbCB3aWxsIGJlY29tZSBwZGYgKi9cclxuXHRASW5wdXQoKSBodG1sOiBzdHJpbmc7XHJcblx0LyoqIHRleHQgaGVhZGVyIHdpbGwgYmVjb21lIHBkZiAqL1xyXG5cdEBJbnB1dCgpIGhlYWRlcjogc3RyaW5nO1xyXG5cdC8qKiB0ZXh0IGZvb3RlciB3aWxsIGJlY29tZSBwZGYgKi9cclxuXHRASW5wdXQoKSBmb290ZXI6IHN0cmluZztcclxuXHQvKiogaXQgY29udGFpbnMgdGhlIG1hcmdpblRvcCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBkZiAqL1xyXG5cdEBJbnB1dCgpIG1hcmdpblRvcDogbnVtYmVyO1xyXG5cdC8qKiBpdCBjb250YWlucyB0aGUgbWFyZ2luUmlnaHQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwZGYgKi9cclxuXHRASW5wdXQoKSBtYXJnaW5SaWdodDogbnVtYmVyO1xyXG5cdC8qKiBpdCBjb250YWlucyB0aGUgbWFyZ2luQm90dG9tIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcGRmICovXHJcblx0QElucHV0KCkgbWFyZ2luQm90dG9tOiBudW1iZXI7XHJcblx0LyoqIGl0IGNvbnRhaW5zIHRoZSBtYXJnaW5MZWZ0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcGRmICovXHJcblx0QElucHV0KCkgbWFyZ2luTGVmdDogbnVtYmVyO1xyXG5cdC8qKiBJdCBjb250YWlucyB0aGUgZm9udCBvZiB0aGUgaHRtbCAqL1xyXG5cdEBJbnB1dCgpIGZvbnQ6IHN0cmluZztcclxuXHQvKiogSXQgY29udGFpbnMgdGhlIHBkZiBvcmllbnRhdGlvbiAqL1xyXG5cdEBJbnB1dCgpIG9yaWVudGF0aW9uOiBudW1iZXI7XHJcblx0LyoqIEl0IGNvbnRhaW5zIHRoZSBwZGYgc2l6ZSAqL1xyXG5cdEBJbnB1dCgpIHNpemU6IG51bWJlcjtcclxuXHQvKiogc2hvdyBwYWdlciAqL1xyXG5cdEBJbnB1dCgpIHNob3dQYWdlcjogYm9vbGVhbiA9IHRydWU7XHJcblx0LyoqIHJlcGVhdCBoZWFkZXIgKi9cclxuXHRASW5wdXQoKSByZXBlYXRIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdC8qKiByZXBlYXQgZm9vdGVyKi9cclxuXHRASW5wdXQoKSByZXBlYXRGb290ZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdC8qKiBIZWFkZXIgaGVpZ2h0ICovXHJcblx0QElucHV0KCkgaGVhZGVySGVpZ2h0OiBudW1iZXI7XHJcblx0LyoqIEZvb3RlciBoZWlnaHQgKi9cclxuXHRASW5wdXQoKSBmb290ZXJIZWlnaHQ6IG51bWJlcjtcclxuXHJcblx0LyoqIEl0IHZlcmlmaWVzIGlmIGlzIHBvc3NpYmxlIHRvIGVkaXQgaHRtbCAqL1xyXG5cdEBJbnB1dCgpIGVuYWJsZUVkaXQ6IGJvb2xlYW47XHJcblx0LyoqIHRpdGxlIG9mIHRoZSBwZGYgKi9cclxuXHRASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG5cdC8qKiB0aGUgaGVpZ2h0IG9mIHRoZSBwZGYgY2FudmFzICovXHJcblx0QElucHV0KCkgaGVpZ2h0OiBudW1iZXI7XHJcblx0LyoqIFRoZSBmaWxlbmFtZSBvZiB0aGUgcGRmICovXHJcblx0QElucHV0KCkgZmlsZW5hbWU6IHN0cmluZztcclxuXHQvKiogSXQgdmVyaWZpZXMgaWYgaXQgYWxsb3dzIHRvIHNlbmQgdGhlIGVtYWlsICovXHJcblx0QElucHV0KCkgZW5hYmxlRW1haWw6IGJvb2xlYW47XHJcblx0LyoqIEl0IGZpcmVzIHdoZW4gdGhlIGZpbGUgaGFzIGJlZW4gZG93bmxvYWRlZCAqL1xyXG5cdEBPdXRwdXQoKSBvbkRvd25sb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cdC8qKiBJdCBmaXJlcyB3aGVuIHRoZSBuYW1lIGhhcyBiZWVuIHNlbnQgKi9cclxuXHRAT3V0cHV0KCkgb25TZW5kRW1haWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0LyoqIEl0IGZpcmVzIHdoZW4gdGhlIGh0bWwgaGFzIGJlZW4gbW9kaWZpZWQgKi9cclxuXHRAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblx0LyoqIEl0IGNvbnRhaW5zIHRoZSBsYW5nIG9mIHRoZSBwZGYgKi9cclxuXHRASW5wdXQoKSBsYW5nOiBzdHJpbmc7XHJcblx0LyoqIFRoZSB1cmwgb2YgdGhlIHBkZiAqL1xyXG5cdEBJbnB1dCgpIHVybEZpbGU6IHN0cmluZztcclxuXHJcblx0ZW1haWw6IHN0cmluZztcclxuXHJcblx0LyoqIGJhc2U2NCBhcyByZXN1bHQgb2YgaHRtbCAyIHBkZiAqL1xyXG5cdGJhc2U2NDogc3RyaW5nO1xyXG5cdC8qKiBpdCB2ZXJpZmllcyBpZiBjb21wb25lbnQgaXMgcmVhZHkgKi9cclxuXHRyZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250aW5hcyB0aGUgYWJzdHJhY3Rpb24gb2YgcGRmIGRvY3VtZW50ICovXHJcblx0cGRmRG9jdW1lbnQ6IFBkZkRvY3VtZW50O1xyXG5cclxuXHQvKiogaXQgY29udGFpbnMgdGhlIGlkIG9mIGNhbnZhcyAqL1xyXG5cdGlkX2NhbnZhczogc3RyaW5nID0gJ3BkZi1jYW52YXMnO1xyXG5cclxuXHQvKiogSXQgYWxsb3dzIHRvIGVkaXQgaHRtbCAqL1xyXG5cdGVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcm90ZWN0ZWQgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuXHRcdHB1YmxpYyBzYW5pdGl6YXRpb246IERvbVNhbml0aXplcixcclxuXHRcdHByaXZhdGUgdGFvc3RyU2VydmljZTogVG9hc3RyU2VydmljZSxcclxuXHRcdHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlXHJcblx0KSB7fVxyXG5cclxuXHQvLyBpdCByZXNvbHZlcyB3aGVuIHRoZSBodG1sIGlzIGNoYW5nZWRcclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblx0XHRjb25zdCBodG1sOiBTaW1wbGVDaGFuZ2UgPSBjaGFuZ2VzLmh0bWw7XHJcblx0XHRjb25zdCB1cmxGaWxlOiBTaW1wbGVDaGFuZ2UgPSBjaGFuZ2VzLnVybEZpbGU7XHJcblx0XHRpZiAoaHRtbCAmJiBodG1sLmN1cnJlbnRWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLmh0bWwgPSBodG1sLmN1cnJlbnRWYWx1ZTtcclxuXHRcdFx0dGhpcy5nZW5lcmF0ZVBERigpO1xyXG5cdFx0fSBlbHNlIGlmICh1cmxGaWxlICYmIHVybEZpbGUuY3VycmVudFZhbHVlKSB7XHJcblx0XHRcdHRoaXMudXJsRmlsZSA9IHVybEZpbGUuY3VycmVudFZhbHVlO1xyXG5cdFx0XHR0aGlzLmdlbmVyYXRlUERGKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnJlYWR5ID0gZmFsc2U7XHJcblx0XHRcdGlmICh0aGlzLnBkZkRvY3VtZW50ICYmIHRoaXMucGRmRG9jdW1lbnQuY2FudmFzKSB7XHJcblx0XHRcdFx0bGV0IGNhbnZhcyA9IHRoaXMucGRmRG9jdW1lbnQuY2FudmFzO1xyXG5cdFx0XHRcdHZhciBjdHggPSB0aGlzLnBkZkRvY3VtZW50LmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cdFx0XHRcdGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcclxuXHRcdFx0XHR0aGlzLnBkZkRvY3VtZW50ID0gdW5kZWZpbmVkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiogSXQgZ2VuZXJhdGVzIHRoZSBwZGYgKi9cclxuXHRnZW5lcmF0ZVBERigpIHtcclxuXHRcdGlmICghVXRpbFN0cmluZy5pc1ZhbGlkKHRoaXMuaHRtbCkgJiYgVXRpbFN0cmluZy5pc1ZhbGlkKHRoaXMudXJsRmlsZSkpIHtcclxuXHRcdFx0dGhpcy5jb21tb25TZXJ2aWNlLmdldEJhc2U2NFBkZkJ5VXJsKHRoaXMudXJsRmlsZSkuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdChyZXN1bHQpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuc2hvd0Jhc2U2NFBkZihyZXN1bHQpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnRXJyb3IgdHJ5aW5nIHRvIHJlbmRlciBQREYnLCBlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gaWYgaHRtbCB3YXMgY2hhbmdlZFxyXG5cdFx0XHRsZXQgcmVxdWVzdFBkZjogUmVxdWVzdFBkZiA9IG5ldyBSZXF1ZXN0UGRmKCk7XHJcblx0XHRcdHJlcXVlc3RQZGYuaHRtbCA9IHRoaXMuaHRtbDtcclxuXHRcdFx0cmVxdWVzdFBkZi5oZWFkZXIgPSB0aGlzLmhlYWRlcjtcclxuXHRcdFx0cmVxdWVzdFBkZi5mb290ZXIgPSB0aGlzLmZvb3RlcjtcclxuXHRcdFx0cmVxdWVzdFBkZi5sYW5nID0gdGhpcy5sYW5nO1xyXG5cdFx0XHRyZXF1ZXN0UGRmLm1hcmdpblRvcCA9IHRoaXMubWFyZ2luVG9wO1xyXG5cdFx0XHRyZXF1ZXN0UGRmLm1hcmdpblJpZ2h0ID0gdGhpcy5tYXJnaW5SaWdodDtcclxuXHRcdFx0cmVxdWVzdFBkZi5tYXJnaW5Cb3R0b20gPSB0aGlzLm1hcmdpbkJvdHRvbTtcclxuXHRcdFx0cmVxdWVzdFBkZi5tYXJnaW5MZWZ0ID0gdGhpcy5tYXJnaW5MZWZ0O1xyXG5cdFx0XHRyZXF1ZXN0UGRmLm9yaWVudGF0aW9uID0gdGhpcy5vcmllbnRhdGlvbjtcclxuXHRcdFx0cmVxdWVzdFBkZi5zaXplID0gdGhpcy5zaXplO1xyXG5cdFx0XHRyZXF1ZXN0UGRmLmZvbnQgPSB0aGlzLmZvbnQ7XHJcblx0XHRcdHJlcXVlc3RQZGYucmVwZWF0SGVhZGVyID0gdGhpcy5yZXBlYXRIZWFkZXI7XHJcblx0XHRcdHJlcXVlc3RQZGYucmVwZWF0Rm9vdGVyID0gdGhpcy5yZXBlYXRGb290ZXI7XHJcblx0XHRcdHJlcXVlc3RQZGYuc2hvd1BhZ2VyID0gdGhpcy5zaG93UGFnZXI7XHJcblx0XHRcdHJlcXVlc3RQZGYuaGVhZGVySGVpZ2h0ID0gdGhpcy5oZWFkZXJIZWlnaHQ7XHJcblx0XHRcdHJlcXVlc3RQZGYuZm9vdGVySGVpZ2h0ID0gdGhpcy5mb290ZXJIZWlnaHQ7XHJcblxyXG5cdFx0XHR0aGlzLmNvbW1vblNlcnZpY2UuZ2V0QmFzZTY0UGRmKHJlcXVlc3RQZGYpLnN1YnNjcmliZShcclxuXHRcdFx0XHQocmVzdWx0KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnNob3dCYXNlNjRQZGYocmVzdWx0KTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ0Vycm9yIHRyeWluZyB0byByZW5kZXIgUERGJywgZXJyb3IpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHNob3dCYXNlNjRQZGYocmVzdWx0KSB7XHJcblx0XHR0aGlzLmJhc2U2NCA9IHJlc3VsdC5iYXNlNjQ7XHJcblx0XHR2YXIgZGF0YSA9IGF0b2IodGhpcy5iYXNlNjQpO1xyXG5cdFx0UERGSlMud29ya2VyU3JjID0gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjYuODIvYnVpbGQvcGRmLndvcmtlci5taW4ubWpzJztcclxuXHRcdGlmIChQREZKUy5HbG9iYWxXb3JrZXJPcHRpb25zKVxyXG5cdFx0XHRQREZKUy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9XHJcblx0XHRcdFx0J2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjYuODIvYnVpbGQvcGRmLndvcmtlci5taW4ubWpzJztcclxuXHRcdC8vIGNyZWF0ZSBpbnN0YW5jZSBvZiBQZGZEb2N1bWVudCB3aXRoIHRoZSBpZCBvZiBjYW52YXNcclxuXHRcdC8vIGNyZWF0ZSBpbnN0YW5jZSBvZiBQZGZEb2N1bWVudCB3aXRoIHRoZSBpZCBvZiBjYW52YXNcclxuXHRcdHRoaXMucGRmRG9jdW1lbnQgPSBuZXcgUGRmRG9jdW1lbnQodGhpcy5pZF9jYW52YXMpO1xyXG5cclxuXHRcdC8vIGFzc2lnbiB2YXJpYWJsZXMgb3V0IG9mIHNjb3BlXHJcblx0XHRsZXQgcGRmZG9jdW1lbnQ6IFBkZkRvY3VtZW50ID0gdGhpcy5wZGZEb2N1bWVudDtcclxuXHRcdFBhbnpvb20odGhpcy5wZGZEb2N1bWVudC5jYW52YXMsIHtcclxuXHRcdFx0c21vb3RoU2Nyb2xsOiBmYWxzZVxyXG5cdFx0fSk7XHJcblx0XHRsZXQgc2VsZiA9IHRoaXM7XHJcblx0XHRsZXQgcmVhZHkgPSB0aGlzLnJlYWR5O1xyXG5cclxuXHRcdGNvbnN0IHBkZkxvYWRpbmdUYXNrID0gUERGSlMuZ2V0RG9jdW1lbnQoeyBkYXRhOiBkYXRhIH0pO1xyXG5cdFx0Ly8gSlAgLSBoZXJlIHdlIGFzayBpZiB0aGUgcHJvbWlzZSBzdXBwb3J0cyB0aGUgbmV3IHZlcnNpb24gcGRmTG9hZGluZ1Rhc2sucHJvbWlzZVxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHBkZkxvYWRpbmdUYXNrLnByb21pc2UgPyBwZGZMb2FkaW5nVGFzay5wcm9taXNlIDogcGRmTG9hZGluZ1Rhc2s7XHJcblx0XHRwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBkZkRvY18pIHtcclxuXHRcdFx0cGRmZG9jdW1lbnQucGRmRG9jID0gcGRmRG9jXztcclxuXHRcdFx0c2VsZi5yZW5kZXJQYWdlKDEpO1xyXG5cdFx0XHRyZWFkeSA9IHRydWU7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHRlc3RCYXNlNjRUb0ZpbGUyKCkge1xyXG5cdFx0Ly8gbGV0IGRhdGF1cmwgPSB0aGlzLmJhc2U2NDtcclxuXHRcdGxldCBmaWxlTmFtZSA9ICdUZXN0T1ByYWRhMi5wZGYnO1xyXG5cdFx0Ly8gdmFyIGFyciA9IGRhdGF1cmwuc3BsaXQoJywnKSwgbWltZSA9IGFyclswXS5tYXRjaCgvOiguKj8pOy8pWzFdLFxyXG5cdFx0dmFyIGJzdHIgPSBhdG9iKHRoaXMuYmFzZTY0KSxcclxuXHRcdFx0biA9IGJzdHIubGVuZ3RoLFxyXG5cdFx0XHR1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xyXG5cdFx0d2hpbGUgKG4tLSkge1xyXG5cdFx0XHR1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcclxuXHRcdH1cclxuXHRcdGxldCBmaWxlUmV0dXJuID0gbmV3IEZpbGUoW3U4YXJyXSwgZmlsZU5hbWUsIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XHJcblx0XHR0aGlzLnRlc3RFbnZpb0RvYyhmaWxlUmV0dXJuLCBmaWxlTmFtZSk7XHJcblx0fVxyXG5cclxuXHR0ZXN0RW52aW9Eb2MoZmlsZVJldHVybjogYW55LCBmaWxlTmFtZTogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBmaWxlUGF0aCA9IHRoaXMuZmlsZVNlcnZpY2UuZ2V0UGF0aChcclxuXHRcdFx0RVByb2Nlc28uQ09OVk9DQVRPUklBLFxyXG5cdFx0XHQ1MDAsXHJcblx0XHRcdDIsXHJcblx0XHRcdDEsXHJcblx0XHRcdCdhYWFhJyxcclxuXHRcdFx0ZmlsZU5hbWVcclxuXHRcdCk7XHJcblx0XHR0aGlzLmZpbGVTZXJ2aWNlLnVwbG9hZChmaWxlUGF0aCwgZmlsZVJldHVybikuc3Vic2NyaWJlKFxyXG5cdFx0XHQodXJsKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ0ZpbmFsaXpvIGVudsOtbyBkb2N1bWVudG8nLCB1cmwpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRXJyb3IgdHJ5aW5nIHRvIHVwbG9hZDogJywgZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHJldHVybnMgdGhlIGhlaWdodCAgKi9cclxuXHRnZXRIZWlnaHQoKTogc3RyaW5nIHtcclxuXHRcdGlmICh0aGlzLmhlaWdodCkgcmV0dXJuIHRoaXMuaGVpZ2h0ICsgJ3B4JztcclxuXHRcdHJldHVybiBQZGZWaXN1YWxpemVyQ29tcG9uZW50LkRFRkFVTFRfSEVJR0hUICsgJ3B4JztcclxuXHR9XHJcblxyXG5cdC8qKiBHZXQgcGFnZSBpbmZvIGZyb20gZG9jdW1lbnQsIHJlc2l6ZSBjYW52YXMgYWNjb3JkaW5nbHksIGFuZCByZW5kZXIgcGFnZS4gKi9cclxuXHRyZW5kZXJQYWdlKG51bSkge1xyXG5cdFx0dGhpcy5wZGZEb2N1bWVudC5wYWdlUmVuZGVyaW5nID0gdHJ1ZTtcclxuXHRcdC8vIGFzc2lnbiB2YXJpYWJsZXMgb3V0IG9mIHNjb3BlXHJcblx0XHRsZXQgc2VsZlBkZkRvY3VtZW50OiBQZGZEb2N1bWVudCA9IHRoaXMucGRmRG9jdW1lbnQ7XHJcblx0XHRsZXQgc2VsZiA9IHRoaXM7XHJcblx0XHQvLyBVc2luZyBwcm9taXNlIHRvIGZldGNoIHRoZSBwYWdlXHJcblx0XHR0aGlzLnBkZkRvY3VtZW50LnBkZkRvYy5nZXRQYWdlKG51bSkudGhlbihmdW5jdGlvbiAocGFnZSkge1xyXG5cdFx0XHR2YXIgc2NhbGUgPSBzZWxmUGRmRG9jdW1lbnQuc2NhbGUgPyBzZWxmUGRmRG9jdW1lbnQuc2NhbGUgOiAxLjU7XHJcblx0XHRcdHZhciB2aWV3cG9ydCA9IHBhZ2UuZ2V0Vmlld3BvcnQoeyBzY2FsZTogc2NhbGUgfSk7XHJcblx0XHRcdHNlbGZQZGZEb2N1bWVudC5jYW52YXMuaGVpZ2h0ID0gdmlld3BvcnQuaGVpZ2h0O1xyXG5cdFx0XHRzZWxmUGRmRG9jdW1lbnQuY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7XHJcblxyXG5cdFx0XHQvLyBSZW5kZXIgUERGIHBhZ2UgaW50byBjYW52YXMgY29udGV4dFxyXG5cdFx0XHR2YXIgcmVuZGVyQ29udGV4dCA9IHtcclxuXHRcdFx0XHRjYW52YXNDb250ZXh0OiBzZWxmUGRmRG9jdW1lbnQuY2FudmFzLmdldENvbnRleHQoJzJkJyksXHJcblx0XHRcdFx0dmlld3BvcnQ6IHZpZXdwb3J0XHJcblx0XHRcdH07XHJcblx0XHRcdHZhciByZW5kZXJUYXNrID0gcGFnZS5yZW5kZXIocmVuZGVyQ29udGV4dCk7XHJcblxyXG5cdFx0XHQvLyBXYWl0IGZvciByZW5kZXJpbmcgdG8gZmluaXNoXHJcblx0XHRcdHJlbmRlclRhc2sucHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRzZWxmUGRmRG9jdW1lbnQucGFnZVJlbmRlcmluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdGlmIChzZWxmUGRmRG9jdW1lbnQucGFnZU51bVBlbmRpbmcgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdC8vIE5ldyBwYWdlIHJlbmRlcmluZyBpcyBwZW5kaW5nXHJcblx0XHRcdFx0XHRzZWxmLnJlbmRlclBhZ2Uoc2VsZlBkZkRvY3VtZW50LnBhZ2VOdW1QZW5kaW5nKTtcclxuXHRcdFx0XHRcdHNlbGZQZGZEb2N1bWVudC5wYWdlTnVtUGVuZGluZyA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSWYgYW5vdGhlciBwYWdlIHJlbmRlcmluZyBpbiBwcm9ncmVzcywgd2FpdHMgdW50aWwgdGhlIHJlbmRlcmluZyBpc1xyXG5cdCAqIGZpbmlzZWQuIE90aGVyd2lzZSwgZXhlY3V0ZXMgcmVuZGVyaW5nIGltbWVkaWF0ZWx5LlxyXG5cdCAqL1xyXG5cdHF1ZXVlUmVuZGVyUGFnZShudW0pIHtcclxuXHRcdGlmICh0aGlzLnBkZkRvY3VtZW50LnBhZ2VSZW5kZXJpbmcpIHtcclxuXHRcdFx0dGhpcy5wZGZEb2N1bWVudC5wYWdlTnVtUGVuZGluZyA9IG51bTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucmVuZGVyUGFnZShudW0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlzcGxheXMgcHJldmlvdXMgcGFnZS5cclxuXHQgKi9cclxuXHRvblByZXZQYWdlKCkge1xyXG5cdFx0aWYgKCF0aGlzLnBkZkRvY3VtZW50IHx8IHRoaXMucGRmRG9jdW1lbnQucGFnZU51bSA8PSAxKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMucGRmRG9jdW1lbnQucGFnZU51bS0tO1xyXG5cdFx0dGhpcy5xdWV1ZVJlbmRlclBhZ2UodGhpcy5wZGZEb2N1bWVudC5wYWdlTnVtKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpc3BsYXlzIG5leHQgcGFnZS5cclxuXHQgKi9cclxuXHRvbk5leHRQYWdlKCkge1xyXG5cdFx0aWYgKCF0aGlzLnBkZkRvY3VtZW50IHx8IHRoaXMucGRmRG9jdW1lbnQucGFnZU51bSA+PSB0aGlzLnBkZkRvY3VtZW50LnBkZkRvYy5udW1QYWdlcykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnBkZkRvY3VtZW50LnBhZ2VOdW0rKztcclxuXHRcdHRoaXMucXVldWVSZW5kZXJQYWdlKHRoaXMucGRmRG9jdW1lbnQucGFnZU51bSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEaXNwbGF5cyBab29tIEluLlxyXG5cdCAqL1xyXG5cdG9uWm9vbUluKCkge1xyXG5cdFx0aWYgKCF0aGlzLnBkZkRvY3VtZW50IHx8IHRoaXMucGRmRG9jdW1lbnQuc2NhbGUgPj0gMykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnBkZkRvY3VtZW50LnNjYWxlID0gdGhpcy5wZGZEb2N1bWVudC5zY2FsZSArIDAuMjtcclxuXHRcdHRoaXMucXVldWVSZW5kZXJQYWdlKHRoaXMucGRmRG9jdW1lbnQucGFnZU51bSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEaXNwbGF5cyBab29tIE91dC5cclxuXHQgKi9cclxuXHRvblpvb21PdXQoKSB7XHJcblx0XHRpZiAoIXRoaXMucGRmRG9jdW1lbnQgfHwgdGhpcy5wZGZEb2N1bWVudC5zY2FsZSA8PSAwLjQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5wZGZEb2N1bWVudC5zY2FsZSA9IHRoaXMucGRmRG9jdW1lbnQuc2NhbGUgLSAwLjI7XHJcblx0XHR0aGlzLnF1ZXVlUmVuZGVyUGFnZSh0aGlzLnBkZkRvY3VtZW50LnBhZ2VOdW0pO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7fVxyXG5cclxuXHQvKiogSXQgc2VuZHMgdGhlIGRvY3VtZW50IGJ5IGVtYWlsICovXHJcblx0c2VuZEVtYWlsKCkge1xyXG5cdFx0aWYgKHRoaXMuZW1haWwgJiYgVXRpbFN0cmluZy52YWxpZGF0ZUVtYWlsKHRoaXMuZW1haWwpKSB7XHJcblx0XHRcdHRoaXMub25TZW5kRW1haWwuZW1pdCh7XHJcblx0XHRcdFx0dG86IHRoaXMuZW1haWwsXHJcblx0XHRcdFx0YmFzZTY0OiB0aGlzLmJhc2U2NFxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5lbWFpbCA9ICcnO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnRhb3N0clNlcnZpY2Uud2FybmluZygnQ29ycmVvIGVsZWN0csOzbmljbyBlcyBpbmNvcnJlY3RvJyk7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgZmlyZXMgdGhlIGV2ZW50IGRvd25sb2FkICovXHJcblx0ZG93bmxvYWQoKSB7XHJcblx0XHRjb25zdCBjb250ZW50VHlwZSA9ICdhcHBsaWNhdGlvbi9wZGYnO1xyXG5cdFx0Y29uc3QgYjY0RGF0YSA9IHRoaXMuYmFzZTY0O1xyXG5cdFx0Y29uc3QgYmxvYiA9IHRoaXMuYjY0dG9CbG9iKGI2NERhdGEsIGNvbnRlbnRUeXBlKTtcclxuXHRcdGNvbnN0IGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cdFx0dmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xyXG5cdFx0YS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0YS5ocmVmID0gYmxvYlVybDtcclxuXHRcdGEuZG93bmxvYWQgPSB0aGlzLmZpbGVuYW1lO1xyXG5cdFx0YS5jbGljaygpO1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpO1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xyXG5cdFx0XHR0aGlzLm9uRG93bmxvYWQuZW1pdCh7XHJcblx0XHRcdFx0YmFzZTY0OiB0aGlzLmJhc2U2NFxyXG5cdFx0XHR9KTtcclxuXHRcdH0sIDIwMCk7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgZmlyZXMgd2hlbiB0aGUgaHRtbCBpcyBjaGFuZ2VkICovXHJcblx0Y2hhbmdlKCkge1xyXG5cdFx0dGhpcy5nZW5lcmF0ZVBERigpO1xyXG5cdFx0dGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuaHRtbCk7XHJcblx0fVxyXG5cclxuXHQvKiogaXQgYWxsb3dzIHRvIGVkaXQgKi9cclxuXHR0b2dnbGVFZGl0KCkge1xyXG5cdFx0dGhpcy5lZGl0ID0gIXRoaXMuZWRpdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGl0IHJldHVybnMgaWYgaXMgUGRmRG9jdW1lbnRcclxuXHQgKi9cclxuXHRpc1BkZkRvY3VtZW50KCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGl0IHJldHVybnMgaWYgaXMgVGl0bGVcclxuXHQgKi9cclxuXHRpc1RpdGxlKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMudGl0bGUgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGl0IHJldHVybnMgaWYgaXMgaXNQZGZEb2NcclxuXHQgKi9cclxuXHRpc1BkZkRvYygpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdHRoaXMucGRmRG9jdW1lbnQgJiZcclxuXHRcdFx0dGhpcy5wZGZEb2N1bWVudC5wZGZEb2MgIT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdHRoaXMucGRmRG9jdW1lbnQucGRmRG9jICE9IG51bGxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpdCByZXR1cm5zIGlmIGlzIGZpbGVuYW1lXHJcblx0ICovXHJcblx0aXNGaWxlbmFtZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmZpbGVuYW1lICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpdCByZXR1cm5zIGlmIGlzIGVuYWJsZUVkaXRcclxuXHQgKi9cclxuXHRpc0VuYWJsZUVkaXQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbmFibGVFZGl0ID09IHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpdCByZXR1cm5zIGlmIGlzIGVkaXRcclxuXHQgKi9cclxuXHRpc0VkaXQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5lZGl0ID09IHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBpdCByZXR1cm5zIGlmIGlzIGVuYWJsZUVtYWlsXHJcblx0ICovXHJcblx0aXNFbmFibGVFbWFpbCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmVuYWJsZUVtYWlsID09IHRydWU7XHJcblx0fVxyXG5cclxuXHRiNjR0b0Jsb2IoYjY0RGF0YSwgY29udGVudFR5cGUgPSAnJywgc2xpY2VTaXplID0gNTEyKSB7XHJcblx0XHRjb25zdCBieXRlQXJyYXlzID0gW107XHJcblx0XHRjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYjY0RGF0YSk7XHJcblx0XHRmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IG9mZnNldCArPSBzbGljZVNpemUpIHtcclxuXHRcdFx0Y29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XHJcblx0XHRcdGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2xpY2UubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRieXRlTnVtYmVyc1tpXSA9IHNsaWNlLmNoYXJDb2RlQXQoaSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG5cdFx0XHRieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihieXRlQXJyYXlzLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pO1xyXG5cdFx0cmV0dXJuIGJsb2I7XHJcblx0fVxyXG59XHJcbiIsIjxoMyBjbGFzcz1cInBkZi12aXN1YWxpemVyLXRpdGxlXCI+e3sgdGl0bGUgfX08L2gzPlxyXG48ZGl2IGNsYXNzPVwicGRmLXZpc3VhbGl6ZXItY29udGFpbmVyXCI+XHJcblx0PGRpdiBjbGFzcz1cInBkZi12aXN1YWxpemVyLWNvbnRyb2xzXCIgKm5nSWY9XCJpc1BkZkRvY3VtZW50KCkgPT09IHRydWVcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC03XCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImJ0bi10b29sYmFyXCIgcm9sZT1cInRvb2xiYXJcIiBhcmlhLWxhYmVsPVwiVG9vbGJhciB3aXRoIGJ1dHRvbiBncm91cHNcIj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiU2Vjb25kIGdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdDwhLS0gem9vbSBpbi0tPlxyXG5cdFx0XHRcdFx0XHQ8YVxyXG5cdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhc2NyaXB0OjtcIlxyXG5cdFx0XHRcdFx0XHRcdHRpdGxlPVwiQWNlcmNhclwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJcclxuXHRcdFx0XHRcdFx0XHRkYXRhLXBsYWNlbWVudD1cInRvcFwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcclxuXHRcdFx0XHRcdFx0XHQoY2xpY2spPVwib25ab29tSW4oKVwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLXNlYXJjaC1wbHVzXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2E+XHJcblxyXG5cdFx0XHRcdFx0XHQ8IS0tIHpvb20gb3V0LS0+XHJcblx0XHRcdFx0XHRcdDxhXHJcblx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFzY3JpcHQ6O1wiXHJcblx0XHRcdFx0XHRcdFx0dGl0bGU9XCJBbGVqYXJcIlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIlxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXHJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cIm9uWm9vbU91dCgpXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtc2VhcmNoLW1pbnVzXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRoaXJkIGdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdDwhLS1wcmV2IC0tPlxyXG5cdFx0XHRcdFx0XHQ8YVxyXG5cdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhc2NyaXB0OjtcIlxyXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXHJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cIm9uUHJldlBhZ2UoKVwiXHJcblx0XHRcdFx0XHRcdFx0dGl0bGU9XCJBbnRlcmlvclwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJcclxuXHRcdFx0XHRcdFx0XHRkYXRhLXBsYWNlbWVudD1cInRvcFwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9hPlxyXG5cclxuXHRcdFx0XHRcdFx0PCEtLSBwYWdpbmF0aW9uLS0+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiICpuZ0lmPVwiaXNQZGZEb2MoKSA9PT0gdHJ1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdFDDoWdpbmE6IHt7IHBkZkRvY3VtZW50LnBhZ2VOdW0gfX0gLyB7eyBwZGZEb2N1bWVudC5wZGZEb2MubnVtUGFnZXMgfX1cclxuXHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cclxuXHRcdFx0XHRcdFx0PCEtLW5leHQgLS0+XHJcblx0XHRcdFx0XHRcdDxhXHJcblx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFzY3JpcHQ6O1wiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcclxuXHRcdFx0XHRcdFx0XHQoY2xpY2spPVwib25OZXh0UGFnZSgpXCJcclxuXHRcdFx0XHRcdFx0XHR0aXRsZT1cIlNpZ3VpZW50ZVwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJcclxuXHRcdFx0XHRcdFx0XHRkYXRhLXBsYWNlbWVudD1cInRvcFwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNoZXZyb24tcmlnaHRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkZpcnN0IGdyb3VwXCI+XHJcblx0XHRcdFx0XHRcdDwhLS0gZG93bmxvYWQtLT5cclxuXHRcdFx0XHRcdFx0PGFcclxuXHRcdFx0XHRcdFx0XHRbZG93bmxvYWRdPVwiZmlsZW5hbWVcIlxyXG5cdFx0XHRcdFx0XHRcdCpuZ0lmPVwiaXNGaWxlbmFtZSgpID09PSB0cnVlXCJcclxuXHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiZG93bmxvYWQoKVwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcclxuXHRcdFx0XHRcdFx0XHR0aXRsZT1cIkRlc2NhcmdhclwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJcclxuXHRcdFx0XHRcdFx0XHRkYXRhLXBsYWNlbWVudD1cInRvcFwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8IS0tIFtocmVmXT1cIlxyXG5cdFx0XHRcdFx0XHRcdHNhbml0aXphdGlvbi5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxyXG5cdFx0XHRcdFx0XHRcdFx0J2RhdGE6YXBwbGljYXRpb24vcGRmO2Jhc2U2NCwnICsgdGhpcy5iYXNlNjRcclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFwiIC0tPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvYT5cclxuXHJcblx0XHRcdFx0XHRcdDwhLS0gdG9nZ2xlIGVkaXQtLVxyXG4gICAgICAgICAgICA8YSBocmVmPVwiSmF2YXNjcmlwdDo7XCIgKm5nSWY9XCJpc0VuYWJsZUVkaXQoKSA9PT0gdHJ1ZVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIHRpdGxlPVwiRWRpdGFyXCJcclxuICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInRvcFwiIChjbGljayk9XCJ0b2dnbGVFZGl0KClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWVkaXRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gZ2VuZXJhdGUgcGRmLS0+XHJcblx0XHRcdFx0XHRcdDxhXHJcblx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFzY3JpcHQ6O1wiXHJcblx0XHRcdFx0XHRcdFx0Km5nSWY9XCJpc0VkaXQoKSA9PT0gdHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcclxuXHRcdFx0XHRcdFx0XHR0aXRsZT1cIkdlbmVyYXJcIlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIlxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJjaGFuZ2UoKVwiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLXBsYXlcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBwdWxsLXJpZ2h0XCIgKm5nSWY9XCJpc0VuYWJsZUVtYWlsKCkgPT09IHRydWVcIj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuXHRcdFx0XHRcdDxsYWJlbCBmb3I9XCJwZGYtdmlzdWFsaXplci1lbWFpbFwiIGNsYXNzPVwicGRmXCI+XHJcblx0XHRcdFx0XHRcdEVudmlhciBtZW5zYWplIGFcclxuXHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0dHlwZT1cImVtYWlsXCJcclxuXHRcdFx0XHRcdFx0aWQ9XCJwZGYtdmlzdWFsaXplci1lbWFpbFwiXHJcblx0XHRcdFx0XHRcdG5hbWU9XCJwZGYtdmlzdWFsaXplci1lbWFpbFwiXHJcblx0XHRcdFx0XHRcdHJlcXVpcmVkPVwidHJ1ZVwiXHJcblx0XHRcdFx0XHRcdGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuXHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCJDb3JyZW8gZWxlY3Ryw7NuaWNvXCJcclxuXHRcdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJlbWFpbFwiXHJcblx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxyXG5cdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcclxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHQoY2xpY2spPVwic2VuZEVtYWlsKClcIlxyXG5cdFx0XHRcdFx0XHRcdHRpdGxlPVwiRW52aWFyXCJcclxuXHRcdFx0XHRcdFx0XHRkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIlxyXG5cdFx0XHRcdFx0XHRcdGRhdGEtcGxhY2VtZW50PVwidG9wXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxpbWdcclxuXHRcdFx0XHRcdFx0XHRcdHNyYz1cImh0dHA6Ly9naXJvMzYwLmNvL3pvbmEzNjAvY29sZnV0dXJvL1BMSUMvaW1nL2V4cG9ydC5zdmdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCJcclxuXHRcdFx0XHRcdFx0XHRcdHdpZHRoPVwiMTZcIlxyXG5cdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblxyXG5cdDxkaXYgY2xhc3M9XCJwZGYtdmlzdWFsaXplci1kYXNoYm9hcmRcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC01XCIgKm5nSWY9XCJpc0VkaXQoKSA9PT0gdHJ1ZVwiPlxyXG5cdFx0XHRcdDx0ZXh0YXJlYVxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG5cdFx0XHRcdFx0W3N0eWxlLmhlaWdodF09XCJnZXRIZWlnaHQoKVwiXHJcblx0XHRcdFx0XHRzdHlsZT1cInJlc2l6ZTp2ZXJ0aWNhbDtcIlxyXG5cdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJodG1sXCJcclxuXHRcdFx0XHQ+PC90ZXh0YXJlYT5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHRcdDxkaXYgW25nQ2xhc3NdPVwieyAnY29sLW1kLTcnOiBlZGl0ID09PSB0cnVlLCAnY29sLW1kLTEyJzogIWVkaXQgfVwiPlxyXG5cdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdGlkPVwicGRmLXNjcm9sbGFibGVcIlxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJwZGYtdmlzdWFsaXplci1zY3JvbGxhYmxlXCJcclxuXHRcdFx0XHRcdFtzdHlsZS5oZWlnaHRdPVwiZ2V0SGVpZ2h0KClcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxjYW52YXMgaWQ9XCJwZGYtY2FudmFzXCIgY2xhc3M9XCJwZGYtdmlzdWFsaXplci1jYW52YXNcIj4gPC9jYW52YXM+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,92 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { EProjectFrom } from 'ng-pli-util';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "ngx-toastr";
5
+ import * as i2 from "../../services/progress-bar.service";
6
+ import * as i3 from "@angular/common";
7
+ export class ProgressBarComponent {
8
+ constructor(toastrService, progressBarService) {
9
+ this.toastrService = toastrService;
10
+ this.progressBarService = progressBarService;
11
+ // Desde que proyecto se consulta a la barra. 1 Para PLI, 2 GIC
12
+ this.projectFrom = EProjectFrom.PLI; // Enumerado
13
+ this.finishProcess = new EventEmitter();
14
+ this.setTimeOutValue = 0;
15
+ }
16
+ ngOnInit() {
17
+ window.addEventListener('beforeunload', this.closeTabCallback);
18
+ this.setTimeOutValue = setTimeout(() => {
19
+ this.initNoIn();
20
+ }, 1000);
21
+ }
22
+ async initNoIn() {
23
+ let processActual;
24
+ if (typeof this.processType !== 'undefined') {
25
+ processActual = await this.handleProgress();
26
+ }
27
+ if (this.percentage === 100) {
28
+ this.toastrService.success('El proceso se completó con éxito!', 'Proceso completado');
29
+ this.clearActualTimeout();
30
+ this.finishProcess.emit(processActual);
31
+ }
32
+ else {
33
+ this.setTimeOutValue = setTimeout(() => {
34
+ this.initNoIn();
35
+ }, 500);
36
+ }
37
+ }
38
+ async handleProgress() {
39
+ let processActual = await this.progressBarService
40
+ .getProgress(this.processId, this.processType, this.projectFrom)
41
+ .toPromise();
42
+ let process;
43
+ if (processActual == null) {
44
+ process.processId = null;
45
+ process.processType = this.processType;
46
+ process.percentage = 0;
47
+ process.state = '';
48
+ process.current = this.current;
49
+ process.end = this.end;
50
+ processActual = await this.progressBarService
51
+ .saveProgress(process, this.projectFrom)
52
+ .toPromise();
53
+ }
54
+ this.processId = processActual.processId;
55
+ this.percentage = processActual.percentage;
56
+ return processActual;
57
+ }
58
+ clearActualTimeout() {
59
+ window.removeEventListener('beforeunload', this.closeTabCallback);
60
+ clearTimeout(this.setTimeOutValue);
61
+ this.setTimeOutValue = null;
62
+ }
63
+ closeTabCallback(e) {
64
+ const confirmationMessage = 'o/';
65
+ e.returnValue = confirmationMessage; // Gecko, Trident, Chrome 34+
66
+ return confirmationMessage; // Gecko, WebKit, Chrome <34
67
+ }
68
+ ngOnDestroy() {
69
+ this.clearActualTimeout();
70
+ }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProgressBarComponent, deps: [{ token: i1.ToastrService }, { token: i2.ProgressBarService }], target: i0.ɵɵFactoryTarget.Component }); }
72
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ProgressBarComponent, selector: "pli-progress-bar", inputs: { processId: "processId", processType: "processType", percentage: "percentage", current: "current", end: "end", projectFrom: "projectFrom" }, outputs: { finishProcess: "finishProcess" }, ngImport: i0, template: "<div class=\"progress\">\r\n <div class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{ width: percentage + '%' }\">\r\n {{ percentage }}%\r\n </div>\r\n</div>", styles: [".progress .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}\n"], dependencies: [{ kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
73
+ }
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProgressBarComponent, decorators: [{
75
+ type: Component,
76
+ args: [{ selector: 'pli-progress-bar', standalone: false, template: "<div class=\"progress\">\r\n <div class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" [ngStyle]=\"{ width: percentage + '%' }\">\r\n {{ percentage }}%\r\n </div>\r\n</div>", styles: [".progress .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}\n"] }]
77
+ }], ctorParameters: () => [{ type: i1.ToastrService }, { type: i2.ProgressBarService }], propDecorators: { processId: [{
78
+ type: Input
79
+ }], processType: [{
80
+ type: Input
81
+ }], percentage: [{
82
+ type: Input
83
+ }], current: [{
84
+ type: Input
85
+ }], end: [{
86
+ type: Input
87
+ }], projectFrom: [{
88
+ type: Input
89
+ }], finishProcess: [{
90
+ type: Output
91
+ }] } });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxhQUFhLENBQUM7Ozs7O0FBVXhELE1BQU0sT0FBTyxvQkFBb0I7SUFtQmhDLFlBQ1MsYUFBNEIsRUFDNUIsa0JBQXNDO1FBRHRDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFUL0MsK0RBQStEO1FBQ3RELGdCQUFXLEdBQVcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVk7UUFFbkQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBUWpELElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ1AsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNiLElBQUks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OlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVQcm9qZWN0RnJvbSwgUHJvZ3Jlc3NCYXIgfSBmcm9tICduZy1wbGktdXRpbCc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgUHJvZ3Jlc3NCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZ3Jlc3MtYmFyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3BsaS1wcm9ncmVzcy1iYXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2dyZXNzLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50LmNzcyddLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cdC8qKiAqL1xyXG5cdEBJbnB1dCgpIHByb2Nlc3NJZDogbnVtYmVyO1xyXG5cdC8qKiAqL1xyXG5cdEBJbnB1dCgpIHByb2Nlc3NUeXBlOiBudW1iZXI7XHJcblx0LyoqICovXHJcblx0QElucHV0KCkgcGVyY2VudGFnZTogbnVtYmVyO1xyXG5cdC8qKiAqL1xyXG5cdEBJbnB1dCgpIGN1cnJlbnQ6IG51bWJlcjtcclxuXHQvKiogKi9cclxuXHRASW5wdXQoKSBlbmQ6IG51bWJlcjtcclxuXHJcblx0Ly8gRGVzZGUgcXVlIHByb3llY3RvIHNlIGNvbnN1bHRhIGEgbGEgYmFycmEuIDEgUGFyYSBQTEksIDIgR0lDXHJcblx0QElucHV0KCkgcHJvamVjdEZyb206IG51bWJlciA9IEVQcm9qZWN0RnJvbS5QTEk7IC8vIEVudW1lcmFkb1xyXG5cclxuXHRAT3V0cHV0KCkgZmluaXNoUHJvY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHRzZXRUaW1lT3V0VmFsdWU6IGFueTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb2dyZXNzQmFyU2VydmljZTogUHJvZ3Jlc3NCYXJTZXJ2aWNlXHJcblx0KSB7XHJcblx0XHR0aGlzLnNldFRpbWVPdXRWYWx1ZSA9IDA7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCB0aGlzLmNsb3NlVGFiQ2FsbGJhY2spO1xyXG5cdFx0dGhpcy5zZXRUaW1lT3V0VmFsdWUgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5pbml0Tm9JbigpO1xyXG5cdFx0fSwgMTAwMCk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBpbml0Tm9JbigpIHtcclxuXHRcdGxldCBwcm9jZXNzQWN0dWFsO1xyXG5cdFx0aWYgKHR5cGVvZiB0aGlzLnByb2Nlc3NUeXBlICE9PSAndW5kZWZpbmVkJykge1xyXG5cdFx0XHRwcm9jZXNzQWN0dWFsID0gYXdhaXQgdGhpcy5oYW5kbGVQcm9ncmVzcygpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucGVyY2VudGFnZSA9PT0gMTAwKSB7XHJcblx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5zdWNjZXNzKCdFbCBwcm9jZXNvIHNlIGNvbXBsZXTDsyBjb24gw6l4aXRvIScsICdQcm9jZXNvIGNvbXBsZXRhZG8nKTtcclxuXHRcdFx0dGhpcy5jbGVhckFjdHVhbFRpbWVvdXQoKTtcclxuXHRcdFx0dGhpcy5maW5pc2hQcm9jZXNzLmVtaXQocHJvY2Vzc0FjdHVhbCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldFRpbWVPdXRWYWx1ZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuaW5pdE5vSW4oKTtcclxuXHRcdFx0fSwgNTAwKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGFzeW5jIGhhbmRsZVByb2dyZXNzKCkge1xyXG5cdFx0bGV0IHByb2Nlc3NBY3R1YWwgPSBhd2FpdCB0aGlzLnByb2dyZXNzQmFyU2VydmljZVxyXG5cdFx0XHQuZ2V0UHJvZ3Jlc3ModGhpcy5wcm9jZXNzSWQsIHRoaXMucHJvY2Vzc1R5cGUsIHRoaXMucHJvamVjdEZyb20pXHJcblx0XHRcdC50b1Byb21pc2UoKTtcclxuXHRcdGxldCBwcm9jZXNzOiBQcm9ncmVzc0JhcjtcclxuXHRcdGlmIChwcm9jZXNzQWN0dWFsID09IG51bGwpIHtcclxuXHRcdFx0cHJvY2Vzcy5wcm9jZXNzSWQgPSBudWxsO1xyXG5cdFx0XHRwcm9jZXNzLnByb2Nlc3NUeXBlID0gdGhpcy5wcm9jZXNzVHlwZTtcclxuXHRcdFx0cHJvY2Vzcy5wZXJjZW50YWdlID0gMDtcclxuXHRcdFx0cHJvY2Vzcy5zdGF0ZSA9ICcnO1xyXG5cdFx0XHRwcm9jZXNzLmN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XHJcblx0XHRcdHByb2Nlc3MuZW5kID0gdGhpcy5lbmQ7XHJcblx0XHRcdHByb2Nlc3NBY3R1YWwgPSBhd2FpdCB0aGlzLnByb2dyZXNzQmFyU2VydmljZVxyXG5cdFx0XHRcdC5zYXZlUHJvZ3Jlc3MocHJvY2VzcywgdGhpcy5wcm9qZWN0RnJvbSlcclxuXHRcdFx0XHQudG9Qcm9taXNlKCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLnByb2Nlc3NJZCA9IHByb2Nlc3NBY3R1YWwucHJvY2Vzc0lkO1xyXG5cdFx0dGhpcy5wZXJjZW50YWdlID0gcHJvY2Vzc0FjdHVhbC5wZXJjZW50YWdlO1xyXG5cclxuXHRcdHJldHVybiBwcm9jZXNzQWN0dWFsO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJBY3R1YWxUaW1lb3V0KCkge1xyXG5cdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHRoaXMuY2xvc2VUYWJDYWxsYmFjayk7XHJcblx0XHRjbGVhclRpbWVvdXQodGhpcy5zZXRUaW1lT3V0VmFsdWUpO1xyXG5cdFx0dGhpcy5zZXRUaW1lT3V0VmFsdWUgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0Y2xvc2VUYWJDYWxsYmFjayhlKSB7XHJcblx0XHRjb25zdCBjb25maXJtYXRpb25NZXNzYWdlID0gJ28vJztcclxuXHRcdGUucmV0dXJuVmFsdWUgPSBjb25maXJtYXRpb25NZXNzYWdlOyAvLyBHZWNrbywgVHJpZGVudCwgQ2hyb21lIDM0K1xyXG5cdFx0cmV0dXJuIGNvbmZpcm1hdGlvbk1lc3NhZ2U7IC8vIEdlY2tvLCBXZWJLaXQsIENocm9tZSA8MzRcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0dGhpcy5jbGVhckFjdHVhbFRpbWVvdXQoKTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdHJpcGVkIGFjdGl2ZVwiIHJvbGU9XCJwcm9ncmVzc2JhclwiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6IHBlcmNlbnRhZ2UgKyAnJScgfVwiPlxyXG4gICAgICAgIHt7IHBlcmNlbnRhZ2UgfX0lXHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19