@hitsoft/e-donusum 100.1.17-Edo-Test → 100.1.18-Edo-Test
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.
- package/esm2020/lib/auto-send-rules/auto-send-rule/auto-send-rule.module.mjs +1 -1
- package/esm2020/lib/components/hit-inbound-invoices/hit-inbound-invoice.component.mjs +229 -83
- package/esm2020/lib/components/hit-inbound-invoices/hit-inbound-invoice.module.mjs +15 -5
- package/esm2020/lib/components/hit-setup-wizard/hit-setup-wizard.component.mjs +2 -2
- package/esm2020/lib/hit-proxy/hit-inbound-invoices/hit-inbound-invoice.service.mjs +28 -1
- package/esm2020/lib/hit-proxy/hit-inbound-invoices/models.mjs +1 -1
- package/esm2020/lib/proxy/auto-send-rule-doc-types/index.mjs +1 -1
- package/esm2020/lib/proxy/auto-send-rule-scenarios/index.mjs +1 -1
- package/esm2020/lib/proxy/auto-send-rules/index.mjs +1 -1
- package/esm2020/lib/proxy/document-serials/index.mjs +1 -1
- package/esm2020/lib/proxy/gib-partner-pks/index.mjs +1 -1
- package/esm2020/lib/proxy/note-rule-doc-types/index.mjs +1 -1
- package/esm2020/lib/proxy/note-rule-scenarios/index.mjs +1 -1
- package/esm2020/lib/proxy/note-rules/index.mjs +1 -1
- package/esm2020/lib/proxy/params-companies/index.mjs +1 -1
- package/esm2020/lib/proxy/params-generals/index.mjs +1 -1
- package/esm2020/lib/proxy/params-integrators/index.mjs +1 -1
- package/esm2020/lib/proxy/paramse-dispatches/index.mjs +1 -1
- package/esm2020/lib/proxy/paramse-invoices/index.mjs +1 -1
- package/esm2020/lib/proxy/xslt-formats/index.mjs +1 -1
- package/esm2020/lib/proxy/xslt-rule-doc-types/index.mjs +1 -1
- package/esm2020/lib/proxy/xslt-rule-scenarios/index.mjs +1 -1
- package/esm2020/lib/proxy/xslt-rules/index.mjs +1 -1
- package/fesm2015/hitsoft-e-donusum.mjs +274 -88
- package/fesm2015/hitsoft-e-donusum.mjs.map +1 -1
- package/fesm2020/hitsoft-e-donusum.mjs +270 -88
- package/fesm2020/hitsoft-e-donusum.mjs.map +1 -1
- package/lib/components/hit-inbound-invoices/hit-inbound-invoice.component.d.ts +15 -1
- package/lib/components/hit-inbound-invoices/hit-inbound-invoice.module.d.ts +2 -1
- package/lib/hit-proxy/hit-inbound-invoices/hit-inbound-invoice.service.d.ts +5 -0
- package/lib/hit-proxy/hit-inbound-invoices/models.d.ts +54 -0
- package/package.json +1 -1
|
@@ -81,6 +81,15 @@ export class HitInboundInvoiceComponent {
|
|
|
81
81
|
this.branchPopupVisible = false;
|
|
82
82
|
this.selectedBranchId = null;
|
|
83
83
|
this.isFileModalBusy = false;
|
|
84
|
+
// Manuel Kalem Ekle
|
|
85
|
+
this.isModalOpenForManualLine = false;
|
|
86
|
+
this.isModalBusyForManualLine = false;
|
|
87
|
+
this.manualLines = [];
|
|
88
|
+
this.taxGroups = [];
|
|
89
|
+
// Muhatap Katalog Numarası
|
|
90
|
+
this.isModalOpenForCatalog = false;
|
|
91
|
+
this.isModalBusyForCatalog = false;
|
|
92
|
+
this.catalogMatchLines = [];
|
|
84
93
|
this.onResultPopupClosed = () => {
|
|
85
94
|
this.resultPopupVisible = false;
|
|
86
95
|
this.dxInboundInvoiceInstance.instance.clearSelection();
|
|
@@ -660,12 +669,32 @@ export class HitInboundInvoiceComponent {
|
|
|
660
669
|
sendDraft(draftGridLines) {
|
|
661
670
|
let requestDtoDocumentLines = [];
|
|
662
671
|
draftGridLines.forEach(element => {
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
672
|
+
if (element.objType === 0 || element.objType === -1) {
|
|
673
|
+
// Manuel kalem (0) veya Katalog eşleştirme (-1)
|
|
674
|
+
requestDtoDocumentLines.push({
|
|
675
|
+
quantity: element.selectedQty,
|
|
676
|
+
baseType: null,
|
|
677
|
+
baseEntry: null,
|
|
678
|
+
baseLine: null,
|
|
679
|
+
itemCode: element.itemCode,
|
|
680
|
+
itemDescription: element.dscription,
|
|
681
|
+
unitPrice: element.unitPrice,
|
|
682
|
+
taxCode: element.freeTxt,
|
|
683
|
+
vatGroup: element.freeTxt,
|
|
684
|
+
currency: this.selectedInboundInvoice?.documentCurrencyCode?.toString(),
|
|
685
|
+
uomCode: element.text || undefined,
|
|
686
|
+
discPrcnt: undefined
|
|
687
|
+
});
|
|
688
|
+
}
|
|
689
|
+
else {
|
|
690
|
+
// Referans belgeli kalem - mevcut akış
|
|
691
|
+
requestDtoDocumentLines.push({
|
|
692
|
+
quantity: element.selectedQty,
|
|
693
|
+
baseType: element.objType,
|
|
694
|
+
baseEntry: element.docEntry,
|
|
695
|
+
baseLine: element.lineNum
|
|
696
|
+
});
|
|
697
|
+
}
|
|
669
698
|
});
|
|
670
699
|
let requestDto = {
|
|
671
700
|
docEntry: null,
|
|
@@ -699,12 +728,24 @@ export class HitInboundInvoiceComponent {
|
|
|
699
728
|
sendDocument(documentGridLines) {
|
|
700
729
|
let requestDtoDocumentLines = [];
|
|
701
730
|
documentGridLines.forEach(element => {
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
731
|
+
if (element.objType === 0) {
|
|
732
|
+
// Manuel kalem
|
|
733
|
+
requestDtoDocumentLines.push({
|
|
734
|
+
quantity: element.selectedQty,
|
|
735
|
+
baseType: null,
|
|
736
|
+
baseEntry: null,
|
|
737
|
+
baseLine: null
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
else {
|
|
741
|
+
// Referans belgeli kalem
|
|
742
|
+
requestDtoDocumentLines.push({
|
|
743
|
+
quantity: element.selectedQty,
|
|
744
|
+
baseType: element.objType,
|
|
745
|
+
baseEntry: element.docEntry,
|
|
746
|
+
baseLine: element.lineNum
|
|
747
|
+
});
|
|
748
|
+
}
|
|
708
749
|
});
|
|
709
750
|
let requestDto = {
|
|
710
751
|
docEntry: null,
|
|
@@ -790,74 +831,179 @@ export class HitInboundInvoiceComponent {
|
|
|
790
831
|
}
|
|
791
832
|
});
|
|
792
833
|
}
|
|
793
|
-
//
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
834
|
+
// Manuel Kalem Ekle - Modal aç
|
|
835
|
+
openManualLineModal() {
|
|
836
|
+
if (this.documentLines.some(d => d.objType === 0 || d.objType === -1)) {
|
|
837
|
+
this.toasterService.warn("Satırlar zaten eklenmiştir. Önce mevcut satırları temizleyiniz.");
|
|
838
|
+
return;
|
|
839
|
+
}
|
|
840
|
+
this.isModalBusyForManualLine = true;
|
|
841
|
+
this.manualLines = [];
|
|
842
|
+
this.itemsGridStore = this.service.itemsGridStore;
|
|
843
|
+
// XML satırlarını ve vergi gruplarını paralel çek
|
|
844
|
+
this.service.getInvoiceXmlLines(this.selectedInboundInvoice.id).subscribe({
|
|
845
|
+
next: (xmlLines) => {
|
|
846
|
+
// Vergi gruplarını çek (Category='I', Inactive='N')
|
|
847
|
+
this.service.getTaxGroups('I').subscribe({
|
|
848
|
+
next: (groups) => {
|
|
849
|
+
const isIade = this.selectedInboundInvoice?.invoiceTypeCode === 'IADE';
|
|
850
|
+
// IADE (iade) faturalarında yalnızca R ile başlayan vergi gruplarından seçilir
|
|
851
|
+
const availableTaxGroups = isIade
|
|
852
|
+
? groups.filter(g => g.code?.startsWith('R'))
|
|
853
|
+
: groups;
|
|
854
|
+
this.taxGroups = availableTaxGroups;
|
|
855
|
+
// XML satırlarını ManualLineDto'ya dönüştür
|
|
856
|
+
this.manualLines = xmlLines.map(line => {
|
|
857
|
+
// Vergi oranına göre varsayılan vergi grubu eşle (IADE'de R grupları arasından)
|
|
858
|
+
let defaultTaxCode = '';
|
|
859
|
+
const taxPercent = line.taxPercent;
|
|
860
|
+
if (taxPercent != null && availableTaxGroups.length > 0) {
|
|
861
|
+
const matched = availableTaxGroups.find(g => Math.abs(g.rate - taxPercent) < 0.01);
|
|
862
|
+
if (matched) {
|
|
863
|
+
defaultTaxCode = matched.code;
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
return {
|
|
867
|
+
lineNumber: line.lineNumber,
|
|
868
|
+
itemCode: '',
|
|
869
|
+
itemName: line.itemName,
|
|
870
|
+
quantity: line.quantity,
|
|
871
|
+
unitPrice: line.unitPrice,
|
|
872
|
+
taxCode: defaultTaxCode,
|
|
873
|
+
currencyCode: line.currencyCode,
|
|
874
|
+
selected: true
|
|
875
|
+
};
|
|
876
|
+
});
|
|
877
|
+
this.isModalBusyForManualLine = false;
|
|
878
|
+
this.isModalOpenForManualLine = true;
|
|
879
|
+
},
|
|
880
|
+
error: () => {
|
|
881
|
+
// Vergi grupları alınamazsa (SAP bağlantısı yok) yine de aç
|
|
882
|
+
this.taxGroups = [];
|
|
883
|
+
this.manualLines = xmlLines.map(line => ({
|
|
884
|
+
lineNumber: line.lineNumber,
|
|
885
|
+
itemCode: '',
|
|
886
|
+
itemName: line.itemName,
|
|
887
|
+
quantity: line.quantity,
|
|
888
|
+
unitPrice: line.unitPrice,
|
|
889
|
+
taxCode: '',
|
|
890
|
+
currencyCode: line.currencyCode,
|
|
891
|
+
selected: true
|
|
892
|
+
}));
|
|
893
|
+
this.isModalBusyForManualLine = false;
|
|
894
|
+
this.isModalOpenForManualLine = true;
|
|
895
|
+
}
|
|
896
|
+
});
|
|
897
|
+
},
|
|
898
|
+
error: (err) => {
|
|
899
|
+
this.isModalBusyForManualLine = false;
|
|
900
|
+
this.toasterService.error("XML satırları okunamadı: " + (err?.error?.error?.message || err.message));
|
|
901
|
+
}
|
|
902
|
+
});
|
|
903
|
+
}
|
|
904
|
+
// Kalem grid'inden (dropdown içindeki datagrid) seçim
|
|
905
|
+
onItemGridSelectionChanged(event, lineIndex) {
|
|
906
|
+
const selected = event.selectedRowsData && event.selectedRowsData[0];
|
|
907
|
+
if (selected) {
|
|
908
|
+
this.manualLines[lineIndex].itemCode = selected.itemCode;
|
|
909
|
+
this.manualLines[lineIndex].itemName = selected.itemName;
|
|
910
|
+
this.manualLines[lineIndex].itemBoxOpened = false;
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
toggleAllManualLines(event) {
|
|
914
|
+
const checked = event.target.checked;
|
|
915
|
+
this.manualLines.forEach(l => l.selected = checked);
|
|
916
|
+
}
|
|
917
|
+
// Muhatap Katalog Numarası ile Taslak Belge Oluştur - Modal aç
|
|
918
|
+
openCatalogMatchModal() {
|
|
919
|
+
if (this.documentLines.some(d => d.objType === 0 || d.objType === -1)) {
|
|
920
|
+
this.toasterService.warn("Satırlar zaten eklenmiştir. Önce mevcut satırları temizleyiniz.");
|
|
921
|
+
return;
|
|
922
|
+
}
|
|
923
|
+
this.isModalBusyForCatalog = true;
|
|
924
|
+
this.catalogMatchLines = [];
|
|
925
|
+
this.service.getCatalogMatchLines(this.selectedInboundInvoice.id).subscribe({
|
|
926
|
+
next: (lines) => {
|
|
927
|
+
this.catalogMatchLines = lines;
|
|
928
|
+
this.isModalBusyForCatalog = false;
|
|
929
|
+
this.isModalOpenForCatalog = true;
|
|
930
|
+
},
|
|
931
|
+
error: (err) => {
|
|
932
|
+
this.isModalBusyForCatalog = false;
|
|
933
|
+
this.toasterService.error("Katalog eşleştirme hatası: " + (err?.error?.error?.message || err.message));
|
|
934
|
+
}
|
|
935
|
+
});
|
|
936
|
+
}
|
|
937
|
+
// Muhatap Katalog satırlarını documentLines'a ekle
|
|
938
|
+
addCatalogLinesToDocument() {
|
|
939
|
+
// Eşleşme kontrolü
|
|
940
|
+
const unmatchedLines = this.catalogMatchLines.filter(l => !l.isMatched);
|
|
941
|
+
if (unmatchedLines.length > 0) {
|
|
942
|
+
this.toasterService.error("Eşleşmemiş Kalem veya Kalemler Mevcuttur. Lütfen Muhatap Katalog Tanımı Yapınız.");
|
|
943
|
+
return;
|
|
944
|
+
}
|
|
945
|
+
// Eşleşen satırları documentLines'a ekle
|
|
946
|
+
this.catalogMatchLines.forEach(line => {
|
|
947
|
+
this.documentLines.push({
|
|
948
|
+
selectedQty: line.quantity,
|
|
949
|
+
openQty: line.quantity,
|
|
950
|
+
objType: -1,
|
|
951
|
+
docEntry: 0,
|
|
952
|
+
docNum: 0,
|
|
953
|
+
numAtCard: '',
|
|
954
|
+
lineNum: line.lineNumber,
|
|
955
|
+
docDate: '',
|
|
956
|
+
docDueDate: '',
|
|
957
|
+
itemCode: line.catalogItemCode,
|
|
958
|
+
dscription: line.xmlItemName,
|
|
959
|
+
text: line.unitCode,
|
|
960
|
+
freeTxt: line.taxCode,
|
|
961
|
+
unitPrice: line.unitPrice ? +line.unitPrice : null,
|
|
962
|
+
cardCode: ''
|
|
963
|
+
});
|
|
964
|
+
});
|
|
965
|
+
this.isModalOpenForCatalog = false;
|
|
966
|
+
this.toasterService.success(this.catalogMatchLines.length + " satır eklendi.");
|
|
967
|
+
}
|
|
968
|
+
// Manuel satırları document lines'a ekle
|
|
969
|
+
addManualLinesToDocument() {
|
|
970
|
+
const selectedLines = this.manualLines.filter(l => l.selected);
|
|
971
|
+
if (selectedLines.length === 0) {
|
|
972
|
+
this.toasterService.warn("En az bir satır seçiniz.");
|
|
973
|
+
return;
|
|
974
|
+
}
|
|
975
|
+
// Tüm satırlar seçilmeli - XML satır sayısı ile eşleşmeli
|
|
976
|
+
if (selectedLines.length !== this.manualLines.length) {
|
|
977
|
+
this.toasterService.error("XML satır sayısı ile seçilen satır sayısı eşleşmiyor. Tüm satırlar için kalem seçimi yapılmalıdır.");
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
const emptyItemLines = selectedLines.filter(l => !l.itemCode);
|
|
981
|
+
if (emptyItemLines.length > 0) {
|
|
982
|
+
this.toasterService.error("Tüm satırlar için kalem kodu seçiniz.");
|
|
983
|
+
return;
|
|
984
|
+
}
|
|
985
|
+
selectedLines.forEach(line => {
|
|
986
|
+
this.documentLines.push({
|
|
987
|
+
selectedQty: line.quantity,
|
|
988
|
+
openQty: line.quantity,
|
|
989
|
+
objType: 0,
|
|
990
|
+
docEntry: 0,
|
|
991
|
+
docNum: 0,
|
|
992
|
+
numAtCard: '',
|
|
993
|
+
lineNum: line.lineNumber,
|
|
994
|
+
docDate: '',
|
|
995
|
+
docDueDate: '',
|
|
996
|
+
itemCode: line.itemCode,
|
|
997
|
+
dscription: line.itemName,
|
|
998
|
+
text: '',
|
|
999
|
+
freeTxt: line.taxCode,
|
|
1000
|
+
unitPrice: line.unitPrice,
|
|
1001
|
+
cardCode: ''
|
|
1002
|
+
});
|
|
1003
|
+
});
|
|
1004
|
+
this.isModalOpenForManualLine = false;
|
|
1005
|
+
this.toasterService.success(selectedLines.length + " satır eklendi.");
|
|
1006
|
+
}
|
|
861
1007
|
checkBoxChanged(event) {
|
|
862
1008
|
let formControls = this.formResponse.controls;
|
|
863
1009
|
var id = event.target.id;
|
|
@@ -1111,10 +1257,10 @@ export class HitInboundInvoiceComponent {
|
|
|
1111
1257
|
}
|
|
1112
1258
|
}
|
|
1113
1259
|
HitInboundInvoiceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitInboundInvoiceComponent, deps: [{ token: i1.ListService }, { token: i2.HitInboundInvoiceService }, { token: i3.HitInvoiceService }, { token: i4.HitBranchesService }, { token: i5.HitParamsGeneralsService }, { token: i6.FormBuilder }, { token: i6.FormBuilder }, { token: i6.FormBuilder }, { token: i7.ToasterService }, { token: i8.HitBusinessPartnerGroupService }, { token: i0.ChangeDetectorRef }, { token: i7.ConfirmationService }, { token: i9.HitSharedService }, { token: i10.HitFileDocumentTypeService }, { token: i11.ActivatedRoute }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1114
|
-
HitInboundInvoiceComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitInboundInvoiceComponent, selector: "lib-inbound-invoice", providers: [ListService, { provide: NgbDateAdapter, useClass: DateAdapter }], viewQueries: [{ propertyName: "dxInboundInvoiceInstance", first: true, predicate: ["dxInboundInvoiceInstance"], descendants: true }, { propertyName: "dxPurchaseOrderDocuments", first: true, predicate: ["dxPurchaseOrderDocuments"], descendants: true }, { propertyName: "dxPurchaseDespatchDocuments", first: true, predicate: ["dxPurchaseDespatchDocuments"], descendants: true }, { propertyName: "dxDocumentLines", first: true, predicate: ["dxDocumentLines"], descendants: true }, { propertyName: "tabPanel", first: true, predicate: ["tabPanel"], descendants: true }], ngImport: i0, template: "<abp-page [title]=\"pageTitleKey | abpLocalization\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"text-lg-end pt-2\">\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"!isEArchive ? 'btn-primary' : 'btn-secondary'\" (click)=\"selectInvoiceType(false)\">\r\n {{ 'eDonusum::EInvoice' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"isEArchive ? 'btn-primary' : 'btn-secondary'\" (click)=\"selectInvoiceType(true)\">\r\n {{ 'eDonusum::EArchive' | abpLocalization }}\r\n </button>\r\n <ng-container *ngIf=\"isProcessedView\">\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'draft' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('draft')\">\r\n {{ 'eDonusum::DraftDocumentFilter' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'registered' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('registered')\">\r\n {{ 'eDonusum::RegisteredDocumentFilter' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'manual' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('manual')\">\r\n {{ 'eDonusum::ManuallyProcessedFilter' | abpLocalization }}\r\n </button>\r\n </ng-container>\r\n <button class=\"btn btn-secondary btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n (click)=\"downloadInboundPDFMultiple()\">\r\n <i class=\"fa fa-file-pdf-o me-1\"></i>\r\n {{ 'eDonusum::DownloadPDFMultiple' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-secondary btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n (click)=\"printInboundPDFMultiple()\">\r\n <i class=\"fa fa-print me-1\" aria-hidden=\"true\"></i>\r\n Toplu PDF Yazd\u0131r\r\n </button>\r\n <ng-container *ngIf=\"!isProcessedView\">\r\n <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"openBranchPopup()\" [disabled]=\"!hasValidSelection\">\r\n\r\n <i class=\"fa fa-copy me-1\"></i>\r\n {{ 'eDonusum::CreateMultipleEmptyDrafts' | abpLocalization }}\r\n </button>\r\n\r\n <!-- <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"viewPDFsMultiple()\">\r\n <i class=\"fa fa-download me-1\" aria-hidden=\"true\"></i>\r\n {{ 'eDonusum::ViewPDFMultiple' | abpLocalization }}\r\n </button> -->\r\n\r\n <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"getInboundInvoice()\">\r\n <i class=\"fa fa-envelope me-1\" aria-hidden=\"true\"></i>\r\n {{ 'eDonusum::CheckInboundInvoices' | abpLocalization }}\r\n </button>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </abp-page-toolbar-container>\r\n <p>{{ pageDescriptionKey | abpLocalization }}</p>\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid #dxInboundInvoiceInstance [dataSource]=\"inboundInvoicesDataSource\" [showRowLines]=\"true\"\r\n [showBorders]=\"true\" [remoteOperations]=\"true\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\"\r\n [columnHidingEnabled]=\"true\" [rowAlternationEnabled]=\"true\" style=\"height: 75vh;\"\r\n (onSelectionChanged)=\"onInboundSelectionChanged($event)\" (onRowPrepared)=\"changeRowsColor($event)\">\r\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [allowedPageSizes]=\"[50,100,200]\" [showNavigationButtons]=\"true\"\r\n [showPageSizeSelector]=\"true\">\r\n </dxo-pager>\r\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-group-panel [visible]=\"true\" [allowColumnDragging]=\"true\"></dxo-group-panel>\r\n <dxo-grouping #expand [autoExpandAll]=\"false\" [allowCollapsing]=\"true\"\r\n [contextMenuEnabled]=\"true\"></dxo-grouping>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-export [enabled]=\"true\" [allowExportSelectedData]=\"false\"></dxo-export>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-filter-builder [allowHierarchicalFields]=\"true\"></dxo-filter-builder>\r\n <dxo-filter-panel [visible]=\"true\"></dxo-filter-panel>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxi-column [fixed]=\"true\" dataField=\"id\" width=\"120\" [allowGrouping]=\"false\" [allowFiltering]=\"false\"\r\n [allowHeaderFiltering]=\"false\" [allowHiding]=\"false\" [allowReordering]=\"false\"\r\n cellTemplate=\"operationTemplate\" caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\">\r\n <div *dxTemplate=\"let row of 'operationTemplate'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\"\r\n ngbDropdownToggle [disabled]=\"disabledIdColumn\">\r\n <i class=\"fa fa-cog mr-1\" aria-hidden=\"true\"></i>\r\n {{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <!-- <button ngbDropdownItem (click)=\"update(row.data)\">\r\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i> {{ 'AbpUi::Edit' | abpLocalization }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"delete(row.data)\">\r\n <i class=\"fa fa-trash\" aria-hidden=\"true\"></i> {{ 'AbpUi::Delete' | abpLocalization }}\r\n </button> -->\r\n <button ngbDropdownItem (click)=\"getInvoicePreview(row.data)\"\r\n *ngIf=\"row.data.status == 600 || row.data.status == 700 || row.data.status == 650 || row.data.status == 750 || row.data.status == 680 || row.data.status == 780 || row.data.status == 670 || row.data.status == 770\">\r\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i> {{ 'eDonusum::GetView' | abpLocalization }}\r\n </button>\r\n <ng-container *ngIf=\"!isProcessedView\">\r\n <button ngbDropdownItem (click)=\"openResponseModal(row.data)\"\r\n *ngIf=\"row.data.profileId == 'TICARIFATURA' && row.data.receiverResponse == 0\">\r\n <i class=\"fa fa-envelope\" aria-hidden=\"true\"></i> {{ 'eDonusum::Response' | abpLocalization }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openPartnerModal(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-user\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateBusinessPartner' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openDraftForm(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-file\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateDraftDocument' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openDocumentForm(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-file-text\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateDocument' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"processManual(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-hand-paper-o\" aria-hidden=\"true\"></i> {{ 'eDonusum::ProcessManual' | abpLocalization\r\n }}\r\n </button>\r\n </ng-container>\r\n <button ngbDropdownItem (click)=\"showAllFiles(row.data)\"\r\n *ngIf=\"row.data.status == 600 || row.data.status == 700 || row.data.status == 650 || row.data.status == 750 || row.data.status == 680 || row.data.status == 780 || row.data.status == 670 || row.data.status == 770\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i> {{ 'eDonusum::ShowAllFiles' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column dataField=\"issueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::IssueDate'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"paymentTermsPaymentDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::PaymentDueDate'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"uuId\" caption=\"{{'eDonusum::UuId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"invoiceId\" caption=\"{{'eDonusum::InvoiceId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"accountingSupplierPartyName\"\r\n caption=\"{{'eDonusum::AccountingSupplierPartyName'|abpLocalization}}\" aria-hidden=\"true\"></dxi-column>\r\n <dxi-column dataField=\"accountingSupplierPartyVknTckn\"\r\n caption=\"{{'eDonusum::AccountingSupplierPartyVknTckn'|abpLocalization}}\" aria-hidden=\"true\"></dxi-column>\r\n\r\n <dxi-column caption=\"{{'eDonusum::UserComment'|abpLocalization}}\" width=\"320\" cellTemplate=\"userCommentTemplate\"></dxi-column>\r\n\r\n <dxi-column dataField=\"status\" caption=\"{{'eDonusum::Status'|abpLocalization}}\" aria-hidden=\"true\">\r\n <dxo-lookup [dataSource]=\"inboundInvoiceStatusLookup\" valueExpr=\"id\" displayExpr=\"displayName\">\r\n </dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"resourceDocEntry\" caption=\"{{'eDonusum::ResourceDocEntry'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"resourceDocNum\" caption=\"{{'eDonusum::ResourceDocNum'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column cellTemplate=\"docTypeTemplate\" dataField=\"resourceDocType\"\r\n caption=\"{{'eDonusum::ResourceDocType'|abpLocalization}}\">\r\n <div *dxTemplate=\"let data of 'docTypeTemplate'\">\r\n {{getDocObjectName(data.data)}}\r\n </div>\r\n </dxi-column>\r\n\r\n <dxi-column dataField=\"receiverResponse\" caption=\"{{'eDonusum::ReceiverResponse'|abpLocalization}}\"\r\n cellTemplate=\"iconTemplate\">\r\n <dxo-lookup [dataSource]=\"inboundInvoiceReceiverResponseLookup\" valueExpr=\"id\" displayExpr=\"displayName\">\r\n </dxo-lookup>\r\n </dxi-column>\r\n <div *dxTemplate=\"let data of 'iconTemplate'\">\r\n <i [ngClass]=\"getIconClass(data.data.receiverResponse)\"\r\n [ngStyle]=\"{'color':data.data.receiverResponse == '1' ? 'green' : data.data.receiverResponse == '2' ? 'red' : 'gray'}\"></i>\r\n {{getReceiverResponseName(data.data.receiverResponse)}}\r\n\r\n </div>\r\n <div *dxTemplate=\"let data of 'userCommentTemplate'\">\r\n <div class=\"d-flex align-items-center\">\r\n <input type=\"text\"\r\n class=\"form-control form-control-sm me-2\"\r\n [value]=\"getRowComment(data.data)\"\r\n (input)=\"onUserCommentChanged($any($event.target).value, data.data)\"\r\n placeholder=\"{{ 'eDonusum::AddComment' | abpLocalization }}\"\r\n />\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\r\n [disabled]=\"isSavingComment[data.data.id]\"\r\n (click)=\"saveUserComment(data.data)\">\r\n Kaydet\r\n </button>\r\n </div>\r\n </div>\r\n <dxi-column dataField=\"profileId\" caption=\"{{'eDonusum::ProfileId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"invoiceTypeCode\" caption=\"{{'eDonusum::InvoiceTypeCode'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"legalMonetaryTotalPayableAmount\" caption=\"{{'eDonusum::PayableAmount'|abpLocalization}}\"\r\n dataType=\"number\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"documentCurrencyCode\" caption=\"{{'eDonusum::DocCurrency'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"pricingExchangeRateCalculationRate\" caption=\"{{'eDonusum::DocRate'|abpLocalization}}\"\r\n dataType=\"number\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"inboundDocumentCreateLog\"\r\n caption=\"{{'eDonusum::InboundDocumentCreateLog'|abpLocalization}}\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n<abp-modal [busy]=\"isModalBusyForResponse\" [(visible)]=\"isModalOpenForResponse\" [options]=\"{ size: 'm' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ 'eDonusum::SendResponse' | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formResponse\" id=\"invoice-response\" validateOnSubmit>\r\n <div class=\"container-fluid\">\r\n <div class=\"mt-2 fade-in-top\">\r\n <div class=\"row\" style=\"margin-top:20px\">\r\n <div class=\"col-md\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"invoice-response-invoice-id\">\r\n {{'eDonusum::Id'|abpLocalization}}\r\n </label>\r\n\r\n <dx-text-box id=\"invoice-response-invoice-id\" [disabled]=\"true\" class=\"form-control\"\r\n formControlName=\"id\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"invoice-response-invoice-uuid\">\r\n {{'eDonusum::UuId'|abpLocalization}}\r\n </label>\r\n\r\n <dx-text-box id=\"invoice-response-invoice-uuid\" [disabled]=\"true\" class=\"form-control\"\r\n formControlName=\"invoiceUUID\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"form-check mb-3\">\r\n <input type=\"checkbox\" id=\"invoice-response-invoice-accept\" formControlName=\"isAccepted\"\r\n name=\"responseCheck\" (change)=\"checkBoxChanged($event)\" class=\"form-check-input\" />\r\n\r\n <label for=\"invoice-response-invoice-accept\" class=\"form-check-label\">\r\n {{ 'eDonusum::Accept' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md\">\r\n <div class=\"form-check mb-3\">\r\n <input type=\"checkbox\" id=\"invoice-response-invoice-reject\" formControlName=\"isRejected\"\r\n name=\"responseCheck\" (change)=\"checkBoxChanged($event)\" class=\"form-check-input\" />\r\n\r\n <label for=\"invoice-response-invoice-reject\" class=\"form-check-label\">\r\n {{ 'eDonusum::Reject' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" iconClass=\"fa fa-check\" class=\"btn btn-warning\" formName=\"invoice-response\"\r\n (click)=\"sendInvoiceResponse(false)\">\r\n {{ 'eDonusum::Reject' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" iconClass=\"fa fa-check\" class=\"btn btn-success\" formName=\"invoice-response\"\r\n (click)=\"sendInvoiceResponse(true)\">\r\n {{ 'eDonusum::Accept' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForPartner\" [(visible)]=\"isModalOpenForPartner\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ 'eDonusum::CreateBusinessPartner' | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formPartner\" id=\"create-partner\" (ngSubmit)=\"createBusinessPartner()\" validateOnSubmit>\r\n <div class=\"container-fluid\">\r\n <div class=\"mt-2 fade-in-top\">\r\n <div class=\"row\" style=\"margin-top:20px\">\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-name\">\r\n {{'eDonusum::PartnerName'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-name\" formControlName=\"name\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-vkn\">\r\n {{'eDonusum::PartnerVKN'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-vkn\" [disabled]=\"true\" formControlName=\"vkn\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-partner-add-id\">\r\n {{'eDonusum::PartnerAdditionalId'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-partner-add-id\" [disabled]=\"true\" formControlName=\"partnerAddId\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-currency\">\r\n {{'eDonusum::PartnerCurrency'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-currency\" [disabled]=\"true\" formControlName=\"partnerCurrency\"\r\n maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-web-site\">\r\n {{'eDonusum::PartnerWebSite'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-web-site\" formControlName=\"partnerWebSiteURI\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-series\">\r\n {{'eDonusum::PartnerSeries'|abpLocalization}}\r\n </label>\r\n <dx-drop-down-box [(value)]=\"serialGridBoxValue\" [(opened)]=\"isSerialGridBoxOpened\" valueExpr=\"series\"\r\n [deferRendering]=\"false\" [displayExpr]=\"serialGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerSeries\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableSeries\"\r\n (onOptionChanged)=\"onSerialGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableSeries\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"serialGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"series\" caption=\"Seri\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-groups\">\r\n {{'eDonusum::PartnerGroup'|abpLocalization}}\r\n </label>\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-groups\" [dataSource]=\"partnerAvailableGroups\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerGroup\" maxlength=\"256\"\r\n [disabled]=\"isLoadingGroups\" [showClearButton]=\"false\" autofocus></dx-select-box>\r\n <div *ngIf=\"isLoadingGroups\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n <dx-drop-down-box [(value)]=\"groupGridBoxValue\" [(opened)]=\"isGroupGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"groupGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerGroup\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableGroups\"\r\n (onOptionChanged)=\"onGroupGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableGroups\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"groupGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Kod\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-account\">\r\n {{'eDonusum::PartnerBankAccount'|abpLocalization}}\r\n </label>\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-account\" [dataSource]=\"partnerAvailableAccounts\" valueExpr=\"id\"\r\n displayExpr=\"text\" class=\"form-control\" formControlName=\"partnerAccount\"\r\n [disabled]=\"isLoadingAccounts\" [showClearButton]=\"false\" maxlength=\"256\"></dx-select-box>\r\n <div *ngIf=\"isLoadingAccounts\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div> -->\r\n <dx-drop-down-box [(value)]=\"accountGridBoxValue\" [(opened)]=\"isAccountGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"accountGridBox_displayExpr\" [dropDownOptions]=\"{ width: 750 }\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerAccount\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableAccounts\"\r\n (onOptionChanged)=\"onAccountGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableAccounts\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"accountGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"id\" caption=\"Kod\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n\r\n\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-mail\">\r\n {{'eDonusum::PartnerMail'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-mail\" formControlName=\"partnerEmail\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-country\" [dataSource]=\"partnerAvailableCountries\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerCountry\" maxlength=\"256\"\r\n (onValueChanged)=\"getStates()\" [disabled]=\"isLoadingCountries\" [showClearButton]=\"false\"\r\n autofocus></dx-select-box>\r\n <div *ngIf=\"isLoadingCountries\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-country\">\r\n {{ 'eDonusum::PartnerCountry' | abpLocalization }} *\r\n </label>\r\n <dx-drop-down-box [(value)]=\"countryGridBoxValue\" [(opened)]=\"isCountryGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"countryGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerCountry\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableCountries\"\r\n (onOptionChanged)=\"onCountryGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableCountries\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"countryGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Code\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Name\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-state\">\r\n {{'eDonusum::PartnerState'|abpLocalization}}\r\n </label>\r\n\r\n <div class=\"position-relative\">\r\n <!-- <dx-select-box id=\"create-partner-state\" [dataSource]=\"partnerAvailableStates\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerState\" maxlength=\"256\"\r\n [disabled]=\"isLoadingStates\" [showClearButton]=\"false\" autofocus>\r\n </dx-select-box>\r\n <div *ngIf=\"isLoadingStates\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <dx-drop-down-box [(value)]=\"stateGridBoxValue\" [(opened)]=\"isStateGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"stateGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerState\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableStates\"\r\n (onOptionChanged)=\"onStateGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableStates\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"stateGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Code\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Name\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-zipcode\">\r\n {{'eDonusum::PartnerZipcode'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-zipcode\" formControlName=\"partnerZipCode\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-city\">\r\n {{'eDonusum::PartnerCity'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-city\" formControlName=\"partnerCity\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-county\">\r\n {{'eDonusum::PartnerCounty'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-county\" formControlName=\"partnerCounty\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-street\">\r\n {{'eDonusum::PartnerStreet'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-street\" formControlName=\"partnerStreet\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-block\">\r\n {{'eDonusum::PartnerBlock'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-block\" formControlName=\"partnerBlock\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"submit\" iconClass=\"fa fa-check\" [disabled]=\"isModalBusyForPartner\" class=\"btn btn-success\"\r\n form=\"create-partner\">\r\n {{ 'eDonusum::CreateBusinessPartner' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForDocument\" [(visible)]=\"isModalOpenForDocument\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (isDraft ? 'eDonusum::CreateDraft' : 'eDonusum::CreateDocument') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formDocument\" id=\"create-document\" validateOnSubmit>\r\n <!-- <div class=\"card\"> -->\r\n <!-- <div class=\"card-body\"> -->\r\n <!-- <div class=\"mt-3\"> -->\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::PartnerVKN'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-vkn\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.accountingSupplierPartyVknTckn\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md\">\r\n </div>\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::IssueDate'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-date-box id=\"create-draft-issue-date\" [disabled]=\"true\" dataType=\"date\"\r\n [value]=\"this.selectedInboundInvoice.issueDate\" maxlength=\"256\"></dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::PartnerName'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-partner-name\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.accountingSupplierPartyName\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md\"></div>\r\n <div class=\"col-md-5\" *ngIf=\"isBranch\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::AutoTakeDocCreateBranch'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-select-box id=\"create-draft-branch-name\" formControlName=\"selectedBranch\" class=\"form-control\"\r\n displayExpr=\"name\" valueExpr=\"code\" [dataSource]=\"branchesDataSource\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::InvoiceId'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-invoice-id\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.invoiceId\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <dx-data-grid #dxDocumentLines [dataSource]=\"documentLines\" [showRowLines]=\"true\" [showBorders]=\"true\"\r\n [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\" [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\" [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-editing [allowUpdating]=\"true\" [allowAdding]=\"false\" [allowDeleting]=\"true\" mode=\"cell\" [useIcons]=\"true\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"objType\" caption=\"{{'eDonusum::ObjectType'|abpLocalization}}\"\r\n [allowEditing]=\"false\"><dxo-lookup [dataSource]=\"objectTypesLookup\" valueExpr=\"id\" displayExpr=\"text\">\r\n </dxo-lookup></dxi-column>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n <!-- <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column> -->\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"selectedQty\" caption=\"{{'eDonusum::SelectedQty'|abpLocalization}}\"\r\n [allowEditing]=\"true\"></dxi-column>\r\n </dx-data-grid>\r\n <!-- </div> -->\r\n <!-- </div>\r\n </div> -->\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-warning\" (click)=\"openOpenDocumentsForm()\">\r\n {{ 'eDonusum::ResourceDocuments' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success\" [disabled]=\"isModalBusyForDraft\" (click)=\"createDraftDocument()\">\r\n {{ (isDraft ? 'eDonusum::CreateDraftDocument' : 'eDonusum::CreateDocument') | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n\r\n<abp-modal [busy]=\"isModalBusyForOpenDocs\" [(visible)]=\"isModalOpenForOpenDocs\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected ? 'AbpUi::Edit' : 'eDonusum::OpenDocs') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <form id=\"open-documents\">\r\n <!-- DevExtreme Tab Panel -->\r\n <dx-tab-panel [animationEnabled]=\"true\" [swipeEnabled]=\"true\" [loop]=\"false\" #tabPanel>\r\n <dxi-item title=\"{{ 'eDonusum::PurchaseOrder' | abpLocalization }}\" icon=\"fas fa-shopping-cart\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"mt-3\">\r\n <dx-data-grid #dxPurchaseOrderDocuments [dataSource]=\"purchaseOrderDocuments\" [showRowLines]=\"true\"\r\n [showBorders]=\"true\" [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" [allowColumnReordering]=\"true\"\r\n [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\" style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxo-editing [allowUpdating]=\"false\" [allowAdding]=\"false\" [allowDeleting]=\"false\" mode=\"cell\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\" [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-item>\r\n\r\n <dxi-item title=\"{{ 'eDonusum::PurchaseDespatch' | abpLocalization }}\" icon=\"fas fa-truck\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"mt-3\">\r\n <dx-data-grid #dxPurchaseDespatchDocuments [dataSource]=\"purchaseDespatchDocuments\"\r\n [showRowLines]=\"true\" [showBorders]=\"true\" [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\"\r\n [repaintChangesOnly]=\"true\" [allowColumnResizing]=\"true\" columnResizingMode=\"widget\"\r\n [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-editing [allowUpdating]=\"false\" [allowAdding]=\"false\" [allowDeleting]=\"false\" mode=\"cell\">\r\n </dxo-editing>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\" [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" [allowEditing]=\"false\"\r\n caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-item>\r\n </dx-tab-panel>\r\n </form>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success\" [disabled]=\"isModalBusyForOpenDocs\" (click)=\"selectOpenDocuments()\">\r\n {{ 'eDonusum::SelectDocument' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n\r\n<dx-popup [(visible)]=\"resultPopupVisible\" title=\"{{'eDonusum::CreateDraftResults'|abpLocalization}}\"\r\n [showCloseButton]=\"true\" (onHiding)=\"onResultPopupClosed()\">\r\n\r\n <dx-data-grid [dataSource]=\"draftResults\" [showBorders]=\"true\" height=\"100%\" [columnAutoWidth]=\"true\"\r\n [rowAlternationEnabled]=\"true\" [wordWrapEnabled]=\"true\">\r\n\r\n\r\n <dxi-column dataField=\"isSuccess\" caption=\"{{ 'eDonusum::Status' | abpLocalization }}\"\r\n [cellTemplate]=\"'statusTemplate'\">\r\n </dxi-column>\r\n\r\n <div *dxTemplate=\"let data of 'statusTemplate'\">\r\n <span *ngIf=\"data.value\" style=\"color: green; font-size: 18px;\">\u2714</span>\r\n <span *ngIf=\"!data.value\" style=\"color: red; font-size: 18px;\">\u2716</span>\r\n </div>\r\n\r\n <dxi-column dataField=\"efatno\" caption=\"{{'eDonusum::InvoiceId'|abpLocalization}}\" [width]=\"200\"></dxi-column>\r\n <dxi-column dataField=\"draftDocument.docEntry\" caption=\"{{'eDonusum::ResourceDocEntry'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"draftDocument.docNum\" caption=\"{{'eDonusum::ResourceDocNum'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"errorMessage\" caption=\"{{'eDonusum::ErrorMessage'|abpLocalization}}\" [width]=\"500\">\r\n <ng-template dxTemplate=\"cell\" let-data>\r\n <div style=\"white-space: normal; line-height: 1.6; font-size: 13px; color:#b00020\" [title]=\"data.value\">\r\n {{ data.value }}\r\n </div>\r\n </ng-template>\r\n </dxi-column>\r\n\r\n </dx-data-grid>\r\n\r\n <!-- ALT BUTONLAR -->\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\"\r\n [options]=\"{ text: ('eDonusum::Ok' | abpLocalization), type: 'default', onClick: onResultPopupClosed }\">\r\n </dxi-toolbar-item>\r\n\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\"\r\n [options]=\"{ text: ('eDonusum::Close' | abpLocalization), type: 'normal', onClick: closeResultPopup }\">\r\n </dxi-toolbar-item>\r\n\r\n</dx-popup>\r\n\r\n<dx-popup [(visible)]=\"branchPopupVisible\" title=\"{{ 'eDonusum::BranchSelectionTitle' | abpLocalization }}\"\r\n [width]=\"400\" [height]=\"250\" [showCloseButton]=\"true\">\r\n\r\n <dx-select-box [dataSource]=\"branchesDataSource\" displayExpr=\"name\" valueExpr=\"code\" [(value)]=\"selectedBranchId\"\r\n placeholder=\"{{ 'eDonusum::SelectBranchPlaceholder' | abpLocalization }}\">\r\n </dx-select-box>\r\n\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\" [options]=\"{ \r\n text: ('eDonusum::Continue' | abpLocalization), \r\n type: 'success', \r\n onClick: confirmBranchSelection\r\n }\">\r\n </dxi-toolbar-item>\r\n\r\n</dx-popup>\r\n\r\n<abp-modal [busy]=\"isFileModalBusy\" [(visible)]=\"isFileModalOpen\" [options]=\"{ size: 'lg' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'eDonusum::InvoiceFiles' | abpLocalization }}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid [dataSource]=\"invoiceFilesDataSource\" [showRowLines]=\"true\" [showBorders]=\"true\"\r\n [remoteOperations]=\"true\" [hoverStateEnabled]=\"true\" [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\" [columnAutoWidth]=\"true\" [rowAlternationEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxi-column [fixed]=\"true\" dataField=\"id\" width=\"120\" [allowGrouping]=\"false\" [allowFiltering]=\"false\"\r\n [allowHeaderFiltering]=\"false\" cellTemplate=\"fileOperationTemplate\"\r\n caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\">\r\n <div *dxTemplate=\"let row of 'fileOperationTemplate'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" ngbDropdownToggle>\r\n <i class=\"fa fa-cog mr-1\"></i> {{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <button ngbDropdownItem (click)=\"DownloadFile(row.data)\">\r\n <i class=\"fa fa-download\"></i> {{ 'eDonusum::Download' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column [allowEditing]=\"false\" dataField=\"extraItem\" caption=\"{{'eDonusum::Name'|abpLocalization}}\">\r\n <dxo-lookup [dataSource]=\"invoiceFileNameLookup\" valueExpr=\"id\"\r\n displayExpr=\"displayName\"></dxo-lookup>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.AutofocusDirective, selector: "[autofocus]", inputs: ["autofocus"] }, { kind: "directive", type: i1.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "directive", type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "component", type: i7.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i7.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i13.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i13.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "directive", type: i14.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i14.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i14.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i14.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "component", type: i15.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i16.DxoColumnChooserComponent, selector: "dxo-column-chooser", inputs: ["allowSearch", "emptyPanelText", "enabled", "height", "mode", "searchTimeout", "sortOrder", "title", "width"] }, { kind: "component", type: i16.DxoColumnFixingComponent, selector: "dxo-column-fixing", inputs: ["enabled", "texts"] }, { kind: "component", type: i16.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i16.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i16.DxoLookupComponent, selector: "dxo-lookup", inputs: ["allowClearing", "calculateCellValue", "dataSource", "displayExpr", "valueExpr"] }, { kind: "component", type: i16.DxoEditingComponent, selector: "dxo-editing", inputs: ["allowAdding", "allowDeleting", "allowUpdating", "changes", "confirmDelete", "editColumnName", "editRowKey", "form", "mode", "newRowPosition", "popup", "refreshMode", "selectTextOnEditStart", "startEditAction", "texts", "useIcons", "allowAddShape", "allowChangeConnection", "allowChangeConnectorPoints", "allowChangeConnectorText", "allowChangeShapeText", "allowDeleteConnector", "allowDeleteShape", "allowMoveShape", "allowResizeShape", "allowDependencyAdding", "allowDependencyDeleting", "allowResourceAdding", "allowResourceDeleting", "allowResourceUpdating", "allowTaskAdding", "allowTaskDeleting", "allowTaskResourceUpdating", "allowTaskUpdating", "enabled", "allowDragging", "allowResizing", "allowTimeZoneEditing"], outputs: ["changesChange", "editColumnNameChange", "editRowKeyChange"] }, { kind: "component", type: i16.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "titleTemplate", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i16.DxiToolbarItemComponent, selector: "dxi-toolbar-item", inputs: ["cssClass", "disabled", "html", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "template", "text", "toolbar", "visible", "widget"] }, { kind: "component", type: i16.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "svgToCanvas", "allowExportSelectedData", "texts"] }, { kind: "component", type: i16.DxoFilterBuilderComponent, selector: "dxo-filter-builder", inputs: ["accessKey", "activeStateEnabled", "allowHierarchicalFields", "customOperations", "disabled", "elementAttr", "fields", "filterOperationDescriptions", "focusStateEnabled", "groupOperationDescriptions", "groupOperations", "height", "hint", "hoverStateEnabled", "maxGroupLevel", "onContentReady", "onDisposing", "onEditorPrepared", "onEditorPreparing", "onInitialized", "onOptionChanged", "onValueChanged", "rtlEnabled", "tabIndex", "value", "visible", "width"], outputs: ["valueChange"] }, { kind: "component", type: i16.DxoFilterPanelComponent, selector: "dxo-filter-panel", inputs: ["customizeText", "filterEnabled", "texts", "visible"], outputs: ["filterEnabledChange"] }, { kind: "component", type: i16.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i16.DxoGroupingComponent, selector: "dxo-grouping", inputs: ["allowCollapsing", "autoExpandAll", "contextMenuEnabled", "expandMode", "texts"] }, { kind: "component", type: i16.DxoGroupPanelComponent, selector: "dxo-group-panel", inputs: ["allowColumnDragging", "emptyPanelText", "visible"], outputs: ["visibleChange"] }, { kind: "component", type: i16.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i16.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i16.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i16.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "deferred", "mode", "selectAllMode", "showCheckBoxesMode", "recursive"] }, { kind: "component", type: i16.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "directive", type: i17.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i15.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i15.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i15.DxTabPanelComponent, selector: "dx-tab-panel", inputs: ["accessKey", "activeStateEnabled", "animationEnabled", "dataSource", "deferRendering", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "itemHoldTimeout", "items", "itemTemplate", "itemTitleTemplate", "loop", "noDataText", "repaintChangesOnly", "rtlEnabled", "scrollByContent", "scrollingEnabled", "selectedIndex", "selectedItem", "showNavButtons", "swipeEnabled", "tabIndex", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onItemClick", "onItemContextMenu", "onItemHold", "onItemRendered", "onOptionChanged", "onSelectionChanged", "onTitleClick", "onTitleHold", "onTitleRendered", "accessKeyChange", "activeStateEnabledChange", "animationEnabledChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "itemHoldTimeoutChange", "itemsChange", "itemTemplateChange", "itemTitleTemplateChange", "loopChange", "noDataTextChange", "repaintChangesOnlyChange", "rtlEnabledChange", "scrollByContentChange", "scrollingEnabledChange", "selectedIndexChange", "selectedItemChange", "showNavButtonsChange", "swipeEnabledChange", "tabIndexChange", "visibleChange", "widthChange"] }, { kind: "component", type: i18.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i18.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i15.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i15.DxDropDownBoxComponent, selector: "dx-drop-down-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "contentTemplate", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValueFormatter", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "label", "labelMode", "maxLength", "name", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showDropDownButton", "stylingMode", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width"], outputs: ["onChange", "onClosed", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "contentTemplateChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueFormatterChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "labelChange", "labelModeChange", "maxLengthChange", "nameChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showDropDownButtonChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i15.DxPopupComponent, selector: "dx-popup", inputs: ["accessKey", "animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "dragAndResizeArea", "dragEnabled", "dragOutsideBoundary", "elementAttr", "focusStateEnabled", "fullScreen", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "resizeEnabled", "restorePosition", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showTitle", "tabIndex", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onResize", "onResizeEnd", "onResizeStart", "onShowing", "onShown", "onTitleRendered", "accessKeyChange", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "dragAndResizeAreaChange", "dragEnabledChange", "dragOutsideBoundaryChange", "elementAttrChange", "focusStateEnabledChange", "fullScreenChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "resizeEnabledChange", "restorePositionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showTitleChange", "tabIndexChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "pipe", type: i1.LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
1260
|
+
HitInboundInvoiceComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitInboundInvoiceComponent, selector: "lib-inbound-invoice", providers: [ListService, { provide: NgbDateAdapter, useClass: DateAdapter }], viewQueries: [{ propertyName: "dxInboundInvoiceInstance", first: true, predicate: ["dxInboundInvoiceInstance"], descendants: true }, { propertyName: "dxPurchaseOrderDocuments", first: true, predicate: ["dxPurchaseOrderDocuments"], descendants: true }, { propertyName: "dxPurchaseDespatchDocuments", first: true, predicate: ["dxPurchaseDespatchDocuments"], descendants: true }, { propertyName: "dxDocumentLines", first: true, predicate: ["dxDocumentLines"], descendants: true }, { propertyName: "tabPanel", first: true, predicate: ["tabPanel"], descendants: true }], ngImport: i0, template: "<abp-page [title]=\"pageTitleKey | abpLocalization\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"text-lg-end pt-2\">\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"!isEArchive ? 'btn-primary' : 'btn-secondary'\" (click)=\"selectInvoiceType(false)\">\r\n {{ 'eDonusum::EInvoice' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"isEArchive ? 'btn-primary' : 'btn-secondary'\" (click)=\"selectInvoiceType(true)\">\r\n {{ 'eDonusum::EArchive' | abpLocalization }}\r\n </button>\r\n <ng-container *ngIf=\"isProcessedView\">\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'draft' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('draft')\">\r\n {{ 'eDonusum::DraftDocumentFilter' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'registered' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('registered')\">\r\n {{ 'eDonusum::RegisteredDocumentFilter' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'manual' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('manual')\">\r\n {{ 'eDonusum::ManuallyProcessedFilter' | abpLocalization }}\r\n </button>\r\n </ng-container>\r\n <button class=\"btn btn-secondary btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n (click)=\"downloadInboundPDFMultiple()\">\r\n <i class=\"fa fa-file-pdf-o me-1\"></i>\r\n {{ 'eDonusum::DownloadPDFMultiple' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-secondary btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n (click)=\"printInboundPDFMultiple()\">\r\n <i class=\"fa fa-print me-1\" aria-hidden=\"true\"></i>\r\n Toplu PDF Yazd\u0131r\r\n </button>\r\n <ng-container *ngIf=\"!isProcessedView\">\r\n <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"openBranchPopup()\" [disabled]=\"!hasValidSelection\">\r\n\r\n <i class=\"fa fa-copy me-1\"></i>\r\n {{ 'eDonusum::CreateMultipleEmptyDrafts' | abpLocalization }}\r\n </button>\r\n\r\n <!-- <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"viewPDFsMultiple()\">\r\n <i class=\"fa fa-download me-1\" aria-hidden=\"true\"></i>\r\n {{ 'eDonusum::ViewPDFMultiple' | abpLocalization }}\r\n </button> -->\r\n\r\n <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"getInboundInvoice()\">\r\n <i class=\"fa fa-envelope me-1\" aria-hidden=\"true\"></i>\r\n {{ 'eDonusum::CheckInboundInvoices' | abpLocalization }}\r\n </button>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </abp-page-toolbar-container>\r\n <p>{{ pageDescriptionKey | abpLocalization }}</p>\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid #dxInboundInvoiceInstance [dataSource]=\"inboundInvoicesDataSource\" [showRowLines]=\"true\"\r\n [showBorders]=\"true\" [remoteOperations]=\"true\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\"\r\n [columnHidingEnabled]=\"true\" [rowAlternationEnabled]=\"true\" style=\"height: 75vh;\"\r\n (onSelectionChanged)=\"onInboundSelectionChanged($event)\" (onRowPrepared)=\"changeRowsColor($event)\">\r\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [allowedPageSizes]=\"[50,100,200]\" [showNavigationButtons]=\"true\"\r\n [showPageSizeSelector]=\"true\">\r\n </dxo-pager>\r\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-group-panel [visible]=\"true\" [allowColumnDragging]=\"true\"></dxo-group-panel>\r\n <dxo-grouping #expand [autoExpandAll]=\"false\" [allowCollapsing]=\"true\"\r\n [contextMenuEnabled]=\"true\"></dxo-grouping>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-export [enabled]=\"true\" [allowExportSelectedData]=\"false\"></dxo-export>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-filter-builder [allowHierarchicalFields]=\"true\"></dxo-filter-builder>\r\n <dxo-filter-panel [visible]=\"true\"></dxo-filter-panel>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxi-column [fixed]=\"true\" dataField=\"id\" width=\"120\" [allowGrouping]=\"false\" [allowFiltering]=\"false\"\r\n [allowHeaderFiltering]=\"false\" [allowHiding]=\"false\" [allowReordering]=\"false\"\r\n cellTemplate=\"operationTemplate\" caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\">\r\n <div *dxTemplate=\"let row of 'operationTemplate'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\"\r\n ngbDropdownToggle [disabled]=\"disabledIdColumn\">\r\n <i class=\"fa fa-cog mr-1\" aria-hidden=\"true\"></i>\r\n {{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <!-- <button ngbDropdownItem (click)=\"update(row.data)\">\r\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i> {{ 'AbpUi::Edit' | abpLocalization }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"delete(row.data)\">\r\n <i class=\"fa fa-trash\" aria-hidden=\"true\"></i> {{ 'AbpUi::Delete' | abpLocalization }}\r\n </button> -->\r\n <button ngbDropdownItem (click)=\"getInvoicePreview(row.data)\"\r\n *ngIf=\"row.data.status == 600 || row.data.status == 700 || row.data.status == 650 || row.data.status == 750 || row.data.status == 680 || row.data.status == 780 || row.data.status == 670 || row.data.status == 770\">\r\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i> {{ 'eDonusum::GetView' | abpLocalization }}\r\n </button>\r\n <ng-container *ngIf=\"!isProcessedView\">\r\n <button ngbDropdownItem (click)=\"openResponseModal(row.data)\"\r\n *ngIf=\"row.data.profileId == 'TICARIFATURA' && row.data.receiverResponse == 0\">\r\n <i class=\"fa fa-envelope\" aria-hidden=\"true\"></i> {{ 'eDonusum::Response' | abpLocalization }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openPartnerModal(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-user\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateBusinessPartner' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openDraftForm(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-file\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateDraftDocument' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openDocumentForm(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-file-text\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateDocument' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"processManual(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-hand-paper-o\" aria-hidden=\"true\"></i> {{ 'eDonusum::ProcessManual' | abpLocalization\r\n }}\r\n </button>\r\n </ng-container>\r\n <button ngbDropdownItem (click)=\"showAllFiles(row.data)\"\r\n *ngIf=\"row.data.status == 600 || row.data.status == 700 || row.data.status == 650 || row.data.status == 750 || row.data.status == 680 || row.data.status == 780 || row.data.status == 670 || row.data.status == 770\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i> {{ 'eDonusum::ShowAllFiles' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column dataField=\"issueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::IssueDate'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"paymentTermsPaymentDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::PaymentDueDate'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"uuId\" caption=\"{{'eDonusum::UuId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"invoiceId\" caption=\"{{'eDonusum::InvoiceId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"accountingSupplierPartyName\"\r\n caption=\"{{'eDonusum::AccountingSupplierPartyName'|abpLocalization}}\" aria-hidden=\"true\"></dxi-column>\r\n <dxi-column dataField=\"accountingSupplierPartyVknTckn\"\r\n caption=\"{{'eDonusum::AccountingSupplierPartyVknTckn'|abpLocalization}}\" aria-hidden=\"true\"></dxi-column>\r\n\r\n <dxi-column caption=\"{{'eDonusum::UserComment'|abpLocalization}}\" width=\"320\" cellTemplate=\"userCommentTemplate\"></dxi-column>\r\n\r\n <dxi-column dataField=\"status\" caption=\"{{'eDonusum::Status'|abpLocalization}}\" aria-hidden=\"true\">\r\n <dxo-lookup [dataSource]=\"inboundInvoiceStatusLookup\" valueExpr=\"id\" displayExpr=\"displayName\">\r\n </dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"resourceDocEntry\" caption=\"{{'eDonusum::ResourceDocEntry'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"resourceDocNum\" caption=\"{{'eDonusum::ResourceDocNum'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column cellTemplate=\"docTypeTemplate\" dataField=\"resourceDocType\"\r\n caption=\"{{'eDonusum::ResourceDocType'|abpLocalization}}\">\r\n <div *dxTemplate=\"let data of 'docTypeTemplate'\">\r\n {{getDocObjectName(data.data)}}\r\n </div>\r\n </dxi-column>\r\n\r\n <dxi-column dataField=\"receiverResponse\" caption=\"{{'eDonusum::ReceiverResponse'|abpLocalization}}\"\r\n cellTemplate=\"iconTemplate\">\r\n <dxo-lookup [dataSource]=\"inboundInvoiceReceiverResponseLookup\" valueExpr=\"id\" displayExpr=\"displayName\">\r\n </dxo-lookup>\r\n </dxi-column>\r\n <div *dxTemplate=\"let data of 'iconTemplate'\">\r\n <i [ngClass]=\"getIconClass(data.data.receiverResponse)\"\r\n [ngStyle]=\"{'color':data.data.receiverResponse == '1' ? 'green' : data.data.receiverResponse == '2' ? 'red' : 'gray'}\"></i>\r\n {{getReceiverResponseName(data.data.receiverResponse)}}\r\n\r\n </div>\r\n <div *dxTemplate=\"let data of 'userCommentTemplate'\">\r\n <div class=\"d-flex align-items-center\">\r\n <input type=\"text\"\r\n class=\"form-control form-control-sm me-2\"\r\n [value]=\"getRowComment(data.data)\"\r\n (input)=\"onUserCommentChanged($any($event.target).value, data.data)\"\r\n placeholder=\"{{ 'eDonusum::AddComment' | abpLocalization }}\"\r\n />\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\r\n [disabled]=\"isSavingComment[data.data.id]\"\r\n (click)=\"saveUserComment(data.data)\">\r\n Kaydet\r\n </button>\r\n </div>\r\n </div>\r\n <dxi-column dataField=\"profileId\" caption=\"{{'eDonusum::ProfileId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"invoiceTypeCode\" caption=\"{{'eDonusum::InvoiceTypeCode'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"legalMonetaryTotalPayableAmount\" caption=\"{{'eDonusum::PayableAmount'|abpLocalization}}\"\r\n dataType=\"number\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"documentCurrencyCode\" caption=\"{{'eDonusum::DocCurrency'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"pricingExchangeRateCalculationRate\" caption=\"{{'eDonusum::DocRate'|abpLocalization}}\"\r\n dataType=\"number\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"inboundDocumentCreateLog\"\r\n caption=\"{{'eDonusum::InboundDocumentCreateLog'|abpLocalization}}\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n<abp-modal [busy]=\"isModalBusyForResponse\" [(visible)]=\"isModalOpenForResponse\" [options]=\"{ size: 'm' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ 'eDonusum::SendResponse' | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formResponse\" id=\"invoice-response\" validateOnSubmit>\r\n <div class=\"container-fluid\">\r\n <div class=\"mt-2 fade-in-top\">\r\n <div class=\"row\" style=\"margin-top:20px\">\r\n <div class=\"col-md\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"invoice-response-invoice-id\">\r\n {{'eDonusum::Id'|abpLocalization}}\r\n </label>\r\n\r\n <dx-text-box id=\"invoice-response-invoice-id\" [disabled]=\"true\" class=\"form-control\"\r\n formControlName=\"id\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"invoice-response-invoice-uuid\">\r\n {{'eDonusum::UuId'|abpLocalization}}\r\n </label>\r\n\r\n <dx-text-box id=\"invoice-response-invoice-uuid\" [disabled]=\"true\" class=\"form-control\"\r\n formControlName=\"invoiceUUID\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"form-check mb-3\">\r\n <input type=\"checkbox\" id=\"invoice-response-invoice-accept\" formControlName=\"isAccepted\"\r\n name=\"responseCheck\" (change)=\"checkBoxChanged($event)\" class=\"form-check-input\" />\r\n\r\n <label for=\"invoice-response-invoice-accept\" class=\"form-check-label\">\r\n {{ 'eDonusum::Accept' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md\">\r\n <div class=\"form-check mb-3\">\r\n <input type=\"checkbox\" id=\"invoice-response-invoice-reject\" formControlName=\"isRejected\"\r\n name=\"responseCheck\" (change)=\"checkBoxChanged($event)\" class=\"form-check-input\" />\r\n\r\n <label for=\"invoice-response-invoice-reject\" class=\"form-check-label\">\r\n {{ 'eDonusum::Reject' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" iconClass=\"fa fa-check\" class=\"btn btn-warning\" formName=\"invoice-response\"\r\n (click)=\"sendInvoiceResponse(false)\">\r\n {{ 'eDonusum::Reject' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" iconClass=\"fa fa-check\" class=\"btn btn-success\" formName=\"invoice-response\"\r\n (click)=\"sendInvoiceResponse(true)\">\r\n {{ 'eDonusum::Accept' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForPartner\" [(visible)]=\"isModalOpenForPartner\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ 'eDonusum::CreateBusinessPartner' | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formPartner\" id=\"create-partner\" (ngSubmit)=\"createBusinessPartner()\" validateOnSubmit>\r\n <div class=\"container-fluid\">\r\n <div class=\"mt-2 fade-in-top\">\r\n <div class=\"row\" style=\"margin-top:20px\">\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-name\">\r\n {{'eDonusum::PartnerName'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-name\" formControlName=\"name\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-vkn\">\r\n {{'eDonusum::PartnerVKN'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-vkn\" [disabled]=\"true\" formControlName=\"vkn\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-partner-add-id\">\r\n {{'eDonusum::PartnerAdditionalId'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-partner-add-id\" [disabled]=\"true\" formControlName=\"partnerAddId\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-currency\">\r\n {{'eDonusum::PartnerCurrency'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-currency\" [disabled]=\"true\" formControlName=\"partnerCurrency\"\r\n maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-web-site\">\r\n {{'eDonusum::PartnerWebSite'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-web-site\" formControlName=\"partnerWebSiteURI\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-series\">\r\n {{'eDonusum::PartnerSeries'|abpLocalization}}\r\n </label>\r\n <dx-drop-down-box [(value)]=\"serialGridBoxValue\" [(opened)]=\"isSerialGridBoxOpened\" valueExpr=\"series\"\r\n [deferRendering]=\"false\" [displayExpr]=\"serialGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerSeries\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableSeries\"\r\n (onOptionChanged)=\"onSerialGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableSeries\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"serialGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"series\" caption=\"Seri\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-groups\">\r\n {{'eDonusum::PartnerGroup'|abpLocalization}}\r\n </label>\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-groups\" [dataSource]=\"partnerAvailableGroups\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerGroup\" maxlength=\"256\"\r\n [disabled]=\"isLoadingGroups\" [showClearButton]=\"false\" autofocus></dx-select-box>\r\n <div *ngIf=\"isLoadingGroups\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n <dx-drop-down-box [(value)]=\"groupGridBoxValue\" [(opened)]=\"isGroupGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"groupGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerGroup\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableGroups\"\r\n (onOptionChanged)=\"onGroupGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableGroups\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"groupGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Kod\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-account\">\r\n {{'eDonusum::PartnerBankAccount'|abpLocalization}}\r\n </label>\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-account\" [dataSource]=\"partnerAvailableAccounts\" valueExpr=\"id\"\r\n displayExpr=\"text\" class=\"form-control\" formControlName=\"partnerAccount\"\r\n [disabled]=\"isLoadingAccounts\" [showClearButton]=\"false\" maxlength=\"256\"></dx-select-box>\r\n <div *ngIf=\"isLoadingAccounts\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div> -->\r\n <dx-drop-down-box [(value)]=\"accountGridBoxValue\" [(opened)]=\"isAccountGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"accountGridBox_displayExpr\" [dropDownOptions]=\"{ width: 750 }\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerAccount\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableAccounts\"\r\n (onOptionChanged)=\"onAccountGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableAccounts\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"accountGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"id\" caption=\"Kod\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n\r\n\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-mail\">\r\n {{'eDonusum::PartnerMail'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-mail\" formControlName=\"partnerEmail\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-country\" [dataSource]=\"partnerAvailableCountries\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerCountry\" maxlength=\"256\"\r\n (onValueChanged)=\"getStates()\" [disabled]=\"isLoadingCountries\" [showClearButton]=\"false\"\r\n autofocus></dx-select-box>\r\n <div *ngIf=\"isLoadingCountries\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-country\">\r\n {{ 'eDonusum::PartnerCountry' | abpLocalization }} *\r\n </label>\r\n <dx-drop-down-box [(value)]=\"countryGridBoxValue\" [(opened)]=\"isCountryGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"countryGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerCountry\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableCountries\"\r\n (onOptionChanged)=\"onCountryGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableCountries\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"countryGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Code\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Name\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-state\">\r\n {{'eDonusum::PartnerState'|abpLocalization}}\r\n </label>\r\n\r\n <div class=\"position-relative\">\r\n <!-- <dx-select-box id=\"create-partner-state\" [dataSource]=\"partnerAvailableStates\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerState\" maxlength=\"256\"\r\n [disabled]=\"isLoadingStates\" [showClearButton]=\"false\" autofocus>\r\n </dx-select-box>\r\n <div *ngIf=\"isLoadingStates\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <dx-drop-down-box [(value)]=\"stateGridBoxValue\" [(opened)]=\"isStateGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"stateGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerState\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableStates\"\r\n (onOptionChanged)=\"onStateGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableStates\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"stateGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Code\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Name\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-zipcode\">\r\n {{'eDonusum::PartnerZipcode'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-zipcode\" formControlName=\"partnerZipCode\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-city\">\r\n {{'eDonusum::PartnerCity'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-city\" formControlName=\"partnerCity\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-county\">\r\n {{'eDonusum::PartnerCounty'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-county\" formControlName=\"partnerCounty\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-street\">\r\n {{'eDonusum::PartnerStreet'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-street\" formControlName=\"partnerStreet\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-block\">\r\n {{'eDonusum::PartnerBlock'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-block\" formControlName=\"partnerBlock\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"submit\" iconClass=\"fa fa-check\" [disabled]=\"isModalBusyForPartner\" class=\"btn btn-success\"\r\n form=\"create-partner\">\r\n {{ 'eDonusum::CreateBusinessPartner' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForDocument\" [(visible)]=\"isModalOpenForDocument\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (isDraft ? 'eDonusum::CreateDraft' : 'eDonusum::CreateDocument') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formDocument\" id=\"create-document\" validateOnSubmit>\r\n <!-- <div class=\"card\"> -->\r\n <!-- <div class=\"card-body\"> -->\r\n <!-- <div class=\"mt-3\"> -->\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::PartnerVKN'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-vkn\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.accountingSupplierPartyVknTckn\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md\">\r\n </div>\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::IssueDate'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-date-box id=\"create-draft-issue-date\" [disabled]=\"true\" dataType=\"date\"\r\n [value]=\"this.selectedInboundInvoice.issueDate\" maxlength=\"256\"></dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::PartnerName'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-partner-name\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.accountingSupplierPartyName\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md\"></div>\r\n <div class=\"col-md-5\" *ngIf=\"isBranch\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::AutoTakeDocCreateBranch'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-select-box id=\"create-draft-branch-name\" formControlName=\"selectedBranch\" class=\"form-control\"\r\n displayExpr=\"name\" valueExpr=\"code\" [dataSource]=\"branchesDataSource\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::InvoiceId'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-invoice-id\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.invoiceId\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <dx-data-grid #dxDocumentLines [dataSource]=\"documentLines\" [showRowLines]=\"true\" [showBorders]=\"true\"\r\n [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\" [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\" [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-editing [allowUpdating]=\"true\" [allowAdding]=\"false\" [allowDeleting]=\"true\" mode=\"cell\" [useIcons]=\"true\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"objType\" caption=\"{{'eDonusum::ObjectType'|abpLocalization}}\"\r\n [allowEditing]=\"false\"><dxo-lookup [dataSource]=\"objectTypesLookup\" valueExpr=\"id\" displayExpr=\"text\">\r\n </dxo-lookup></dxi-column>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n <!-- <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column> -->\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"selectedQty\" caption=\"{{'eDonusum::SelectedQty'|abpLocalization}}\"\r\n [allowEditing]=\"true\"></dxi-column>\r\n </dx-data-grid>\r\n <!-- </div> -->\r\n <!-- </div>\r\n </div> -->\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-info\" (click)=\"openManualLineModal()\" [disabled]=\"isModalBusyForManualLine\">\r\n Manuel Kalem Ekle\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"openCatalogMatchModal()\" [disabled]=\"isModalBusyForCatalog\">\r\n Muhatap Katalog No ile Taslak Belge Olu\u015Ftur\r\n </button>\r\n <button type=\"button\" class=\"btn btn-warning\" (click)=\"openOpenDocumentsForm()\">\r\n {{ 'eDonusum::ResourceDocuments' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success\" [disabled]=\"isModalBusyForDraft\" (click)=\"createDraftDocument()\">\r\n {{ (isDraft ? 'eDonusum::CreateDraftDocument' : 'eDonusum::CreateDocument') | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<!-- Manuel Kalem Ekleme Modal -->\r\n<abp-modal [busy]=\"isModalBusyForManualLine\" [(visible)]=\"isModalOpenForManualLine\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>Manuel Kalem Ekleme</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-sm\">\r\n <thead class=\"thead-light\">\r\n <tr>\r\n <th style=\"width: 40px;\">\r\n <input type=\"checkbox\" (change)=\"toggleAllManualLines($event)\">\r\n </th>\r\n <th>Kalem Kodu</th>\r\n <th>Kalem Tan\u0131m\u0131</th>\r\n <th style=\"width: 100px;\">Miktar</th>\r\n <th style=\"width: 120px;\">Birim Fiyat</th>\r\n <th style=\"width: 150px;\">Vergi Grubu</th>\r\n <th style=\"width: 80px;\">Para Birimi</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let line of manualLines; let i = index\">\r\n <td class=\"text-center\">\r\n <input type=\"checkbox\" [(ngModel)]=\"line.selected\">\r\n </td>\r\n <td>\r\n <dx-drop-down-box [(value)]=\"line.itemCode\" [(opened)]=\"line.itemBoxOpened\"\r\n valueExpr=\"itemCode\" displayExpr=\"itemCode\"\r\n placeholder=\"Kalem kodu se\u00E7iniz...\" [showClearButton]=\"true\"\r\n [dataSource]=\"itemsGridStore\" [dropDownOptions]=\"{ width: 520, height: 430 }\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-data-grid [dataSource]=\"itemsGridStore\" [remoteOperations]=\"true\" [height]=\"390\"\r\n [showBorders]=\"true\" [hoverStateEnabled]=\"true\" [columnAutoWidth]=\"true\"\r\n [selectedRowKeys]=\"line.itemCode ? [line.itemCode] : []\"\r\n (onSelectionChanged)=\"onItemGridSelectionChanged($event, i)\">\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-search-panel [visible]=\"true\" [width]=\"260\" placeholder=\"Kalem kodu / ad\u0131 ara...\"></dxo-search-panel>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"20\"></dxo-paging>\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n <dxi-column dataField=\"itemCode\" caption=\"Kalem Kodu\" [width]=\"180\"></dxi-column>\r\n <dxi-column dataField=\"itemName\" caption=\"Kalem Ad\u0131\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </dx-drop-down-box>\r\n </td>\r\n <td>\r\n <dx-text-box [(value)]=\"line.itemName\" [readOnly]=\"false\"></dx-text-box>\r\n </td>\r\n <td>\r\n <dx-number-box [(value)]=\"line.quantity\" [showSpinButtons]=\"false\" format=\"#,##0.##\"></dx-number-box>\r\n </td>\r\n <td>\r\n <dx-number-box [(value)]=\"line.unitPrice\" [showSpinButtons]=\"false\" format=\"#,##0.00\"></dx-number-box>\r\n </td>\r\n <td>\r\n <dx-lookup [(value)]=\"line.taxCode\"\r\n [dataSource]=\"taxGroups\"\r\n displayExpr=\"code\" valueExpr=\"code\"\r\n placeholder=\"Vergi grubu se\u00E7iniz...\"\r\n [showClearButton]=\"true\"\r\n [searchEnabled]=\"true\"\r\n searchExpr=\"['code','name']\"\r\n [dropDownOptions]=\"{ width: 350, height: 300 }\"\r\n itemTemplate=\"taxTemplate\">\r\n <div *dxTemplate=\"let item of 'taxTemplate'\">\r\n <div><strong>{{item.code}}</strong> - {{item.name}} ({{item.rate}}%)</div>\r\n </div>\r\n </dx-lookup>\r\n </td>\r\n <td>\r\n <dx-text-box [(value)]=\"line.currencyCode\" [readOnly]=\"true\"></dx-text-box>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"manualLines.length === 0\" class=\"text-center text-muted py-3\">\r\n XML'de fatura sat\u0131r\u0131 bulunamad\u0131.\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"isModalOpenForManualLine = false\">\r\n Vazge\u00E7\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addManualLinesToDocument()\"\r\n [disabled]=\"manualLines.length === 0\">\r\n Sat\u0131rlar\u0131 Ekle\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<!-- Muhatap Katalog Numaras\u0131 E\u015Fle\u015Ftirme Modal -->\r\n<abp-modal [busy]=\"isModalBusyForCatalog\" [(visible)]=\"isModalOpenForCatalog\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>Muhatap Katalog Numaras\u0131 E\u015Fle\u015Ftirme</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <dx-data-grid [dataSource]=\"catalogMatchLines\"\r\n [showBorders]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\">\r\n\r\n <dxi-column dataField=\"catalogItemCode\" caption=\"Kalem Kodu\" [width]=\"120\"></dxi-column>\r\n <dxi-column dataField=\"xmlItemName\" caption=\"Kalem Tan\u0131m\u0131\"></dxi-column>\r\n <dxi-column dataField=\"catalogSubstitute\" caption=\"Muhatap Katalog Tan\u0131m\u0131\"></dxi-column>\r\n <dxi-column dataField=\"matchedItemCode\" caption=\"Muhatap Katalog Kodu\" [width]=\"150\"></dxi-column>\r\n <dxi-column dataField=\"isMatched\" caption=\"E\u015Fle\u015Fme Durumu\" [width]=\"130\" cellTemplate=\"matchStatusTemplate\">\r\n </dxi-column>\r\n\r\n <div *dxTemplate=\"let cell of 'matchStatusTemplate'\">\r\n <span [ngStyle]=\"{'color': cell.value ? 'green' : 'red', 'font-weight': 'bold'}\">\r\n {{ cell.value ? 'Evet' : 'Hay\u0131r' }}\r\n </span>\r\n </div>\r\n\r\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" [width]=\"80\" format=\"#,##0.##\"></dxi-column>\r\n <dxi-column dataField=\"unitPrice\" caption=\"Birim Fiyat\" [width]=\"100\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"taxCode\" caption=\"Vergi Grubu\" [width]=\"100\"></dxi-column>\r\n <dxi-column dataField=\"unitCode\" caption=\"\u00D6l\u00E7\u00FC Birimi\" [width]=\"90\"></dxi-column>\r\n <dxi-column dataField=\"discountPercent\" caption=\"\u0130ndirim %\" [width]=\"80\" format=\"#,##0.##\"></dxi-column>\r\n </dx-data-grid>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"isModalOpenForCatalog = false\">\r\n Vazge\u00E7\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addCatalogLinesToDocument()\" [disabled]=\"isModalBusyForCatalog\">\r\n Sat\u0131rlar\u0131 Ekle\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForOpenDocs\" [(visible)]=\"isModalOpenForOpenDocs\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected ? 'AbpUi::Edit' : 'eDonusum::OpenDocs') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <form id=\"open-documents\">\r\n <!-- DevExtreme Tab Panel -->\r\n <dx-tab-panel [animationEnabled]=\"true\" [swipeEnabled]=\"true\" [loop]=\"false\" #tabPanel>\r\n <dxi-item title=\"{{ 'eDonusum::PurchaseOrder' | abpLocalization }}\" icon=\"fas fa-shopping-cart\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"mt-3\">\r\n <dx-data-grid #dxPurchaseOrderDocuments [dataSource]=\"purchaseOrderDocuments\" [showRowLines]=\"true\"\r\n [showBorders]=\"true\" [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" [allowColumnReordering]=\"true\"\r\n [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\" style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxo-editing [allowUpdating]=\"false\" [allowAdding]=\"false\" [allowDeleting]=\"false\" mode=\"cell\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\" [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-item>\r\n\r\n <dxi-item title=\"{{ 'eDonusum::PurchaseDespatch' | abpLocalization }}\" icon=\"fas fa-truck\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"mt-3\">\r\n <dx-data-grid #dxPurchaseDespatchDocuments [dataSource]=\"purchaseDespatchDocuments\"\r\n [showRowLines]=\"true\" [showBorders]=\"true\" [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\"\r\n [repaintChangesOnly]=\"true\" [allowColumnResizing]=\"true\" columnResizingMode=\"widget\"\r\n [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-editing [allowUpdating]=\"false\" [allowAdding]=\"false\" [allowDeleting]=\"false\" mode=\"cell\">\r\n </dxo-editing>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\" [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" [allowEditing]=\"false\"\r\n caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-item>\r\n </dx-tab-panel>\r\n </form>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success\" [disabled]=\"isModalBusyForOpenDocs\" (click)=\"selectOpenDocuments()\">\r\n {{ 'eDonusum::SelectDocument' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n\r\n<dx-popup [(visible)]=\"resultPopupVisible\" title=\"{{'eDonusum::CreateDraftResults'|abpLocalization}}\"\r\n [showCloseButton]=\"true\" (onHiding)=\"onResultPopupClosed()\">\r\n\r\n <dx-data-grid [dataSource]=\"draftResults\" [showBorders]=\"true\" height=\"100%\" [columnAutoWidth]=\"true\"\r\n [rowAlternationEnabled]=\"true\" [wordWrapEnabled]=\"true\">\r\n\r\n\r\n <dxi-column dataField=\"isSuccess\" caption=\"{{ 'eDonusum::Status' | abpLocalization }}\"\r\n [cellTemplate]=\"'statusTemplate'\">\r\n </dxi-column>\r\n\r\n <div *dxTemplate=\"let data of 'statusTemplate'\">\r\n <span *ngIf=\"data.value\" style=\"color: green; font-size: 18px;\">\u2714</span>\r\n <span *ngIf=\"!data.value\" style=\"color: red; font-size: 18px;\">\u2716</span>\r\n </div>\r\n\r\n <dxi-column dataField=\"efatno\" caption=\"{{'eDonusum::InvoiceId'|abpLocalization}}\" [width]=\"200\"></dxi-column>\r\n <dxi-column dataField=\"draftDocument.docEntry\" caption=\"{{'eDonusum::ResourceDocEntry'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"draftDocument.docNum\" caption=\"{{'eDonusum::ResourceDocNum'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"errorMessage\" caption=\"{{'eDonusum::ErrorMessage'|abpLocalization}}\" [width]=\"500\">\r\n <ng-template dxTemplate=\"cell\" let-data>\r\n <div style=\"white-space: normal; line-height: 1.6; font-size: 13px; color:#b00020\" [title]=\"data.value\">\r\n {{ data.value }}\r\n </div>\r\n </ng-template>\r\n </dxi-column>\r\n\r\n </dx-data-grid>\r\n\r\n <!-- ALT BUTONLAR -->\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\"\r\n [options]=\"{ text: ('eDonusum::Ok' | abpLocalization), type: 'default', onClick: onResultPopupClosed }\">\r\n </dxi-toolbar-item>\r\n\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\"\r\n [options]=\"{ text: ('eDonusum::Close' | abpLocalization), type: 'normal', onClick: closeResultPopup }\">\r\n </dxi-toolbar-item>\r\n\r\n</dx-popup>\r\n\r\n<dx-popup [(visible)]=\"branchPopupVisible\" title=\"{{ 'eDonusum::BranchSelectionTitle' | abpLocalization }}\"\r\n [width]=\"400\" [height]=\"250\" [showCloseButton]=\"true\">\r\n\r\n <dx-select-box [dataSource]=\"branchesDataSource\" displayExpr=\"name\" valueExpr=\"code\" [(value)]=\"selectedBranchId\"\r\n placeholder=\"{{ 'eDonusum::SelectBranchPlaceholder' | abpLocalization }}\">\r\n </dx-select-box>\r\n\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\" [options]=\"{ \r\n text: ('eDonusum::Continue' | abpLocalization), \r\n type: 'success', \r\n onClick: confirmBranchSelection\r\n }\">\r\n </dxi-toolbar-item>\r\n\r\n</dx-popup>\r\n\r\n<abp-modal [busy]=\"isFileModalBusy\" [(visible)]=\"isFileModalOpen\" [options]=\"{ size: 'lg' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'eDonusum::InvoiceFiles' | abpLocalization }}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid [dataSource]=\"invoiceFilesDataSource\" [showRowLines]=\"true\" [showBorders]=\"true\"\r\n [remoteOperations]=\"true\" [hoverStateEnabled]=\"true\" [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\" [columnAutoWidth]=\"true\" [rowAlternationEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxi-column [fixed]=\"true\" dataField=\"id\" width=\"120\" [allowGrouping]=\"false\" [allowFiltering]=\"false\"\r\n [allowHeaderFiltering]=\"false\" cellTemplate=\"fileOperationTemplate\"\r\n caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\">\r\n <div *dxTemplate=\"let row of 'fileOperationTemplate'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" ngbDropdownToggle>\r\n <i class=\"fa fa-cog mr-1\"></i> {{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <button ngbDropdownItem (click)=\"DownloadFile(row.data)\">\r\n <i class=\"fa fa-download\"></i> {{ 'eDonusum::Download' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column [allowEditing]=\"false\" dataField=\"extraItem\" caption=\"{{'eDonusum::Name'|abpLocalization}}\">\r\n <dxo-lookup [dataSource]=\"invoiceFileNameLookup\" valueExpr=\"id\"\r\n displayExpr=\"displayName\"></dxo-lookup>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.AutofocusDirective, selector: "[autofocus]", inputs: ["autofocus"] }, { kind: "directive", type: i1.FormSubmitDirective, selector: "form[ngSubmit][formGroup]", inputs: ["debounce", "notValidateOnSubmit", "markAsDirtyWhenSubmit"], outputs: ["ngSubmit"] }, { kind: "directive", type: i1.PermissionDirective, selector: "[abpPermission]", inputs: ["abpPermission", "abpPermissionRunChangeDetection"] }, { kind: "component", type: i7.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i7.ModalCloseDirective, selector: "[abpClose]" }, { kind: "directive", type: i13.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i13.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "directive", type: i14.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i14.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i14.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i14.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "component", type: i15.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i16.DxoColumnChooserComponent, selector: "dxo-column-chooser", inputs: ["allowSearch", "emptyPanelText", "enabled", "height", "mode", "searchTimeout", "sortOrder", "title", "width"] }, { kind: "component", type: i16.DxoColumnFixingComponent, selector: "dxo-column-fixing", inputs: ["enabled", "texts"] }, { kind: "component", type: i16.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i16.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i16.DxoLookupComponent, selector: "dxo-lookup", inputs: ["allowClearing", "calculateCellValue", "dataSource", "displayExpr", "valueExpr"] }, { kind: "component", type: i16.DxoEditingComponent, selector: "dxo-editing", inputs: ["allowAdding", "allowDeleting", "allowUpdating", "changes", "confirmDelete", "editColumnName", "editRowKey", "form", "mode", "newRowPosition", "popup", "refreshMode", "selectTextOnEditStart", "startEditAction", "texts", "useIcons", "allowAddShape", "allowChangeConnection", "allowChangeConnectorPoints", "allowChangeConnectorText", "allowChangeShapeText", "allowDeleteConnector", "allowDeleteShape", "allowMoveShape", "allowResizeShape", "allowDependencyAdding", "allowDependencyDeleting", "allowResourceAdding", "allowResourceDeleting", "allowResourceUpdating", "allowTaskAdding", "allowTaskDeleting", "allowTaskResourceUpdating", "allowTaskUpdating", "enabled", "allowDragging", "allowResizing", "allowTimeZoneEditing"], outputs: ["changesChange", "editColumnNameChange", "editRowKeyChange"] }, { kind: "component", type: i16.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "titleTemplate", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i16.DxiToolbarItemComponent, selector: "dxi-toolbar-item", inputs: ["cssClass", "disabled", "html", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "template", "text", "toolbar", "visible", "widget"] }, { kind: "component", type: i16.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "svgToCanvas", "allowExportSelectedData", "texts"] }, { kind: "component", type: i16.DxoFilterBuilderComponent, selector: "dxo-filter-builder", inputs: ["accessKey", "activeStateEnabled", "allowHierarchicalFields", "customOperations", "disabled", "elementAttr", "fields", "filterOperationDescriptions", "focusStateEnabled", "groupOperationDescriptions", "groupOperations", "height", "hint", "hoverStateEnabled", "maxGroupLevel", "onContentReady", "onDisposing", "onEditorPrepared", "onEditorPreparing", "onInitialized", "onOptionChanged", "onValueChanged", "rtlEnabled", "tabIndex", "value", "visible", "width"], outputs: ["valueChange"] }, { kind: "component", type: i16.DxoFilterPanelComponent, selector: "dxo-filter-panel", inputs: ["customizeText", "filterEnabled", "texts", "visible"], outputs: ["filterEnabledChange"] }, { kind: "component", type: i16.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i16.DxoGroupingComponent, selector: "dxo-grouping", inputs: ["allowCollapsing", "autoExpandAll", "contextMenuEnabled", "expandMode", "texts"] }, { kind: "component", type: i16.DxoGroupPanelComponent, selector: "dxo-group-panel", inputs: ["allowColumnDragging", "emptyPanelText", "visible"], outputs: ["visibleChange"] }, { kind: "component", type: i16.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i16.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i16.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i16.DxoSearchPanelComponent, selector: "dxo-search-panel", inputs: ["highlightCaseSensitive", "highlightSearchText", "placeholder", "searchVisibleColumnsOnly", "text", "visible", "width"], outputs: ["textChange"] }, { kind: "component", type: i16.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "deferred", "mode", "selectAllMode", "showCheckBoxesMode", "recursive"] }, { kind: "component", type: i16.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "directive", type: i17.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i15.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i15.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i15.DxLookupComponent, selector: "dx-lookup", inputs: ["accessKey", "activeStateEnabled", "applyButtonText", "applyValueMode", "cancelButtonText", "cleanSearchOnOpening", "clearButtonText", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownCentered", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "fullScreen", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "minSearchLength", "name", "nextButtonText", "noDataText", "opened", "pageLoadingText", "pageLoadMode", "placeholder", "pulledDownText", "pullingDownText", "pullRefreshEnabled", "refreshingText", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchPlaceholder", "searchStartEvent", "searchTimeout", "selectedItem", "showCancelButton", "showClearButton", "showDataBeforeSearch", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "useNativeScrolling", "usePopover", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onClosed", "onContentReady", "onDisposing", "onInitialized", "onItemClick", "onOpened", "onOptionChanged", "onPageLoading", "onPullRefresh", "onScroll", "onSelectionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "applyButtonTextChange", "applyValueModeChange", "cancelButtonTextChange", "cleanSearchOnOpeningChange", "clearButtonTextChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownCenteredChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "fullScreenChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "minSearchLengthChange", "nameChange", "nextButtonTextChange", "noDataTextChange", "openedChange", "pageLoadingTextChange", "pageLoadModeChange", "placeholderChange", "pulledDownTextChange", "pullingDownTextChange", "pullRefreshEnabledChange", "refreshingTextChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchPlaceholderChange", "searchStartEventChange", "searchTimeoutChange", "selectedItemChange", "showCancelButtonChange", "showClearButtonChange", "showDataBeforeSearchChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "useNativeScrollingChange", "usePopoverChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i15.DxTabPanelComponent, selector: "dx-tab-panel", inputs: ["accessKey", "activeStateEnabled", "animationEnabled", "dataSource", "deferRendering", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "itemHoldTimeout", "items", "itemTemplate", "itemTitleTemplate", "loop", "noDataText", "repaintChangesOnly", "rtlEnabled", "scrollByContent", "scrollingEnabled", "selectedIndex", "selectedItem", "showNavButtons", "swipeEnabled", "tabIndex", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onItemClick", "onItemContextMenu", "onItemHold", "onItemRendered", "onOptionChanged", "onSelectionChanged", "onTitleClick", "onTitleHold", "onTitleRendered", "accessKeyChange", "activeStateEnabledChange", "animationEnabledChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "itemHoldTimeoutChange", "itemsChange", "itemTemplateChange", "itemTitleTemplateChange", "loopChange", "noDataTextChange", "repaintChangesOnlyChange", "rtlEnabledChange", "scrollByContentChange", "scrollingEnabledChange", "selectedIndexChange", "selectedItemChange", "showNavButtonsChange", "swipeEnabledChange", "tabIndexChange", "visibleChange", "widthChange"] }, { kind: "component", type: i18.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i18.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i15.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i15.DxDropDownBoxComponent, selector: "dx-drop-down-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "contentTemplate", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValueFormatter", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "label", "labelMode", "maxLength", "name", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showDropDownButton", "stylingMode", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width"], outputs: ["onChange", "onClosed", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "contentTemplateChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueFormatterChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "labelChange", "labelModeChange", "maxLengthChange", "nameChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showDropDownButtonChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i15.DxPopupComponent, selector: "dx-popup", inputs: ["accessKey", "animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "dragAndResizeArea", "dragEnabled", "dragOutsideBoundary", "elementAttr", "focusStateEnabled", "fullScreen", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "resizeEnabled", "restorePosition", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showTitle", "tabIndex", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onResize", "onResizeEnd", "onResizeStart", "onShowing", "onShown", "onTitleRendered", "accessKeyChange", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "dragAndResizeAreaChange", "dragEnabledChange", "dragOutsideBoundaryChange", "elementAttrChange", "focusStateEnabledChange", "fullScreenChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "resizeEnabledChange", "restorePositionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showTitleChange", "tabIndexChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i15.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i1.LocalizationPipe, name: "abpLocalization" }], changeDetection: i0.ChangeDetectionStrategy.Default });
|
|
1115
1261
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitInboundInvoiceComponent, decorators: [{
|
|
1116
1262
|
type: Component,
|
|
1117
|
-
args: [{ selector: 'lib-inbound-invoice', changeDetection: ChangeDetectionStrategy.Default, providers: [ListService, { provide: NgbDateAdapter, useClass: DateAdapter }], template: "<abp-page [title]=\"pageTitleKey | abpLocalization\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"text-lg-end pt-2\">\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"!isEArchive ? 'btn-primary' : 'btn-secondary'\" (click)=\"selectInvoiceType(false)\">\r\n {{ 'eDonusum::EInvoice' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"isEArchive ? 'btn-primary' : 'btn-secondary'\" (click)=\"selectInvoiceType(true)\">\r\n {{ 'eDonusum::EArchive' | abpLocalization }}\r\n </button>\r\n <ng-container *ngIf=\"isProcessedView\">\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'draft' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('draft')\">\r\n {{ 'eDonusum::DraftDocumentFilter' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'registered' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('registered')\">\r\n {{ 'eDonusum::RegisteredDocumentFilter' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'manual' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('manual')\">\r\n {{ 'eDonusum::ManuallyProcessedFilter' | abpLocalization }}\r\n </button>\r\n </ng-container>\r\n <button class=\"btn btn-secondary btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n (click)=\"downloadInboundPDFMultiple()\">\r\n <i class=\"fa fa-file-pdf-o me-1\"></i>\r\n {{ 'eDonusum::DownloadPDFMultiple' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-secondary btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n (click)=\"printInboundPDFMultiple()\">\r\n <i class=\"fa fa-print me-1\" aria-hidden=\"true\"></i>\r\n Toplu PDF Yazd\u0131r\r\n </button>\r\n <ng-container *ngIf=\"!isProcessedView\">\r\n <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"openBranchPopup()\" [disabled]=\"!hasValidSelection\">\r\n\r\n <i class=\"fa fa-copy me-1\"></i>\r\n {{ 'eDonusum::CreateMultipleEmptyDrafts' | abpLocalization }}\r\n </button>\r\n\r\n <!-- <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"viewPDFsMultiple()\">\r\n <i class=\"fa fa-download me-1\" aria-hidden=\"true\"></i>\r\n {{ 'eDonusum::ViewPDFMultiple' | abpLocalization }}\r\n </button> -->\r\n\r\n <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"getInboundInvoice()\">\r\n <i class=\"fa fa-envelope me-1\" aria-hidden=\"true\"></i>\r\n {{ 'eDonusum::CheckInboundInvoices' | abpLocalization }}\r\n </button>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </abp-page-toolbar-container>\r\n <p>{{ pageDescriptionKey | abpLocalization }}</p>\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid #dxInboundInvoiceInstance [dataSource]=\"inboundInvoicesDataSource\" [showRowLines]=\"true\"\r\n [showBorders]=\"true\" [remoteOperations]=\"true\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\"\r\n [columnHidingEnabled]=\"true\" [rowAlternationEnabled]=\"true\" style=\"height: 75vh;\"\r\n (onSelectionChanged)=\"onInboundSelectionChanged($event)\" (onRowPrepared)=\"changeRowsColor($event)\">\r\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [allowedPageSizes]=\"[50,100,200]\" [showNavigationButtons]=\"true\"\r\n [showPageSizeSelector]=\"true\">\r\n </dxo-pager>\r\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-group-panel [visible]=\"true\" [allowColumnDragging]=\"true\"></dxo-group-panel>\r\n <dxo-grouping #expand [autoExpandAll]=\"false\" [allowCollapsing]=\"true\"\r\n [contextMenuEnabled]=\"true\"></dxo-grouping>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-export [enabled]=\"true\" [allowExportSelectedData]=\"false\"></dxo-export>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-filter-builder [allowHierarchicalFields]=\"true\"></dxo-filter-builder>\r\n <dxo-filter-panel [visible]=\"true\"></dxo-filter-panel>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxi-column [fixed]=\"true\" dataField=\"id\" width=\"120\" [allowGrouping]=\"false\" [allowFiltering]=\"false\"\r\n [allowHeaderFiltering]=\"false\" [allowHiding]=\"false\" [allowReordering]=\"false\"\r\n cellTemplate=\"operationTemplate\" caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\">\r\n <div *dxTemplate=\"let row of 'operationTemplate'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\"\r\n ngbDropdownToggle [disabled]=\"disabledIdColumn\">\r\n <i class=\"fa fa-cog mr-1\" aria-hidden=\"true\"></i>\r\n {{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <!-- <button ngbDropdownItem (click)=\"update(row.data)\">\r\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i> {{ 'AbpUi::Edit' | abpLocalization }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"delete(row.data)\">\r\n <i class=\"fa fa-trash\" aria-hidden=\"true\"></i> {{ 'AbpUi::Delete' | abpLocalization }}\r\n </button> -->\r\n <button ngbDropdownItem (click)=\"getInvoicePreview(row.data)\"\r\n *ngIf=\"row.data.status == 600 || row.data.status == 700 || row.data.status == 650 || row.data.status == 750 || row.data.status == 680 || row.data.status == 780 || row.data.status == 670 || row.data.status == 770\">\r\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i> {{ 'eDonusum::GetView' | abpLocalization }}\r\n </button>\r\n <ng-container *ngIf=\"!isProcessedView\">\r\n <button ngbDropdownItem (click)=\"openResponseModal(row.data)\"\r\n *ngIf=\"row.data.profileId == 'TICARIFATURA' && row.data.receiverResponse == 0\">\r\n <i class=\"fa fa-envelope\" aria-hidden=\"true\"></i> {{ 'eDonusum::Response' | abpLocalization }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openPartnerModal(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-user\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateBusinessPartner' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openDraftForm(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-file\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateDraftDocument' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openDocumentForm(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-file-text\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateDocument' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"processManual(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-hand-paper-o\" aria-hidden=\"true\"></i> {{ 'eDonusum::ProcessManual' | abpLocalization\r\n }}\r\n </button>\r\n </ng-container>\r\n <button ngbDropdownItem (click)=\"showAllFiles(row.data)\"\r\n *ngIf=\"row.data.status == 600 || row.data.status == 700 || row.data.status == 650 || row.data.status == 750 || row.data.status == 680 || row.data.status == 780 || row.data.status == 670 || row.data.status == 770\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i> {{ 'eDonusum::ShowAllFiles' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column dataField=\"issueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::IssueDate'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"paymentTermsPaymentDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::PaymentDueDate'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"uuId\" caption=\"{{'eDonusum::UuId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"invoiceId\" caption=\"{{'eDonusum::InvoiceId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"accountingSupplierPartyName\"\r\n caption=\"{{'eDonusum::AccountingSupplierPartyName'|abpLocalization}}\" aria-hidden=\"true\"></dxi-column>\r\n <dxi-column dataField=\"accountingSupplierPartyVknTckn\"\r\n caption=\"{{'eDonusum::AccountingSupplierPartyVknTckn'|abpLocalization}}\" aria-hidden=\"true\"></dxi-column>\r\n\r\n <dxi-column caption=\"{{'eDonusum::UserComment'|abpLocalization}}\" width=\"320\" cellTemplate=\"userCommentTemplate\"></dxi-column>\r\n\r\n <dxi-column dataField=\"status\" caption=\"{{'eDonusum::Status'|abpLocalization}}\" aria-hidden=\"true\">\r\n <dxo-lookup [dataSource]=\"inboundInvoiceStatusLookup\" valueExpr=\"id\" displayExpr=\"displayName\">\r\n </dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"resourceDocEntry\" caption=\"{{'eDonusum::ResourceDocEntry'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"resourceDocNum\" caption=\"{{'eDonusum::ResourceDocNum'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column cellTemplate=\"docTypeTemplate\" dataField=\"resourceDocType\"\r\n caption=\"{{'eDonusum::ResourceDocType'|abpLocalization}}\">\r\n <div *dxTemplate=\"let data of 'docTypeTemplate'\">\r\n {{getDocObjectName(data.data)}}\r\n </div>\r\n </dxi-column>\r\n\r\n <dxi-column dataField=\"receiverResponse\" caption=\"{{'eDonusum::ReceiverResponse'|abpLocalization}}\"\r\n cellTemplate=\"iconTemplate\">\r\n <dxo-lookup [dataSource]=\"inboundInvoiceReceiverResponseLookup\" valueExpr=\"id\" displayExpr=\"displayName\">\r\n </dxo-lookup>\r\n </dxi-column>\r\n <div *dxTemplate=\"let data of 'iconTemplate'\">\r\n <i [ngClass]=\"getIconClass(data.data.receiverResponse)\"\r\n [ngStyle]=\"{'color':data.data.receiverResponse == '1' ? 'green' : data.data.receiverResponse == '2' ? 'red' : 'gray'}\"></i>\r\n {{getReceiverResponseName(data.data.receiverResponse)}}\r\n\r\n </div>\r\n <div *dxTemplate=\"let data of 'userCommentTemplate'\">\r\n <div class=\"d-flex align-items-center\">\r\n <input type=\"text\"\r\n class=\"form-control form-control-sm me-2\"\r\n [value]=\"getRowComment(data.data)\"\r\n (input)=\"onUserCommentChanged($any($event.target).value, data.data)\"\r\n placeholder=\"{{ 'eDonusum::AddComment' | abpLocalization }}\"\r\n />\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\r\n [disabled]=\"isSavingComment[data.data.id]\"\r\n (click)=\"saveUserComment(data.data)\">\r\n Kaydet\r\n </button>\r\n </div>\r\n </div>\r\n <dxi-column dataField=\"profileId\" caption=\"{{'eDonusum::ProfileId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"invoiceTypeCode\" caption=\"{{'eDonusum::InvoiceTypeCode'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"legalMonetaryTotalPayableAmount\" caption=\"{{'eDonusum::PayableAmount'|abpLocalization}}\"\r\n dataType=\"number\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"documentCurrencyCode\" caption=\"{{'eDonusum::DocCurrency'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"pricingExchangeRateCalculationRate\" caption=\"{{'eDonusum::DocRate'|abpLocalization}}\"\r\n dataType=\"number\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"inboundDocumentCreateLog\"\r\n caption=\"{{'eDonusum::InboundDocumentCreateLog'|abpLocalization}}\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n<abp-modal [busy]=\"isModalBusyForResponse\" [(visible)]=\"isModalOpenForResponse\" [options]=\"{ size: 'm' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ 'eDonusum::SendResponse' | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formResponse\" id=\"invoice-response\" validateOnSubmit>\r\n <div class=\"container-fluid\">\r\n <div class=\"mt-2 fade-in-top\">\r\n <div class=\"row\" style=\"margin-top:20px\">\r\n <div class=\"col-md\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"invoice-response-invoice-id\">\r\n {{'eDonusum::Id'|abpLocalization}}\r\n </label>\r\n\r\n <dx-text-box id=\"invoice-response-invoice-id\" [disabled]=\"true\" class=\"form-control\"\r\n formControlName=\"id\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"invoice-response-invoice-uuid\">\r\n {{'eDonusum::UuId'|abpLocalization}}\r\n </label>\r\n\r\n <dx-text-box id=\"invoice-response-invoice-uuid\" [disabled]=\"true\" class=\"form-control\"\r\n formControlName=\"invoiceUUID\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"form-check mb-3\">\r\n <input type=\"checkbox\" id=\"invoice-response-invoice-accept\" formControlName=\"isAccepted\"\r\n name=\"responseCheck\" (change)=\"checkBoxChanged($event)\" class=\"form-check-input\" />\r\n\r\n <label for=\"invoice-response-invoice-accept\" class=\"form-check-label\">\r\n {{ 'eDonusum::Accept' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md\">\r\n <div class=\"form-check mb-3\">\r\n <input type=\"checkbox\" id=\"invoice-response-invoice-reject\" formControlName=\"isRejected\"\r\n name=\"responseCheck\" (change)=\"checkBoxChanged($event)\" class=\"form-check-input\" />\r\n\r\n <label for=\"invoice-response-invoice-reject\" class=\"form-check-label\">\r\n {{ 'eDonusum::Reject' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" iconClass=\"fa fa-check\" class=\"btn btn-warning\" formName=\"invoice-response\"\r\n (click)=\"sendInvoiceResponse(false)\">\r\n {{ 'eDonusum::Reject' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" iconClass=\"fa fa-check\" class=\"btn btn-success\" formName=\"invoice-response\"\r\n (click)=\"sendInvoiceResponse(true)\">\r\n {{ 'eDonusum::Accept' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForPartner\" [(visible)]=\"isModalOpenForPartner\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ 'eDonusum::CreateBusinessPartner' | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formPartner\" id=\"create-partner\" (ngSubmit)=\"createBusinessPartner()\" validateOnSubmit>\r\n <div class=\"container-fluid\">\r\n <div class=\"mt-2 fade-in-top\">\r\n <div class=\"row\" style=\"margin-top:20px\">\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-name\">\r\n {{'eDonusum::PartnerName'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-name\" formControlName=\"name\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-vkn\">\r\n {{'eDonusum::PartnerVKN'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-vkn\" [disabled]=\"true\" formControlName=\"vkn\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-partner-add-id\">\r\n {{'eDonusum::PartnerAdditionalId'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-partner-add-id\" [disabled]=\"true\" formControlName=\"partnerAddId\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-currency\">\r\n {{'eDonusum::PartnerCurrency'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-currency\" [disabled]=\"true\" formControlName=\"partnerCurrency\"\r\n maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-web-site\">\r\n {{'eDonusum::PartnerWebSite'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-web-site\" formControlName=\"partnerWebSiteURI\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-series\">\r\n {{'eDonusum::PartnerSeries'|abpLocalization}}\r\n </label>\r\n <dx-drop-down-box [(value)]=\"serialGridBoxValue\" [(opened)]=\"isSerialGridBoxOpened\" valueExpr=\"series\"\r\n [deferRendering]=\"false\" [displayExpr]=\"serialGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerSeries\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableSeries\"\r\n (onOptionChanged)=\"onSerialGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableSeries\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"serialGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"series\" caption=\"Seri\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-groups\">\r\n {{'eDonusum::PartnerGroup'|abpLocalization}}\r\n </label>\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-groups\" [dataSource]=\"partnerAvailableGroups\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerGroup\" maxlength=\"256\"\r\n [disabled]=\"isLoadingGroups\" [showClearButton]=\"false\" autofocus></dx-select-box>\r\n <div *ngIf=\"isLoadingGroups\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n <dx-drop-down-box [(value)]=\"groupGridBoxValue\" [(opened)]=\"isGroupGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"groupGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerGroup\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableGroups\"\r\n (onOptionChanged)=\"onGroupGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableGroups\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"groupGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Kod\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-account\">\r\n {{'eDonusum::PartnerBankAccount'|abpLocalization}}\r\n </label>\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-account\" [dataSource]=\"partnerAvailableAccounts\" valueExpr=\"id\"\r\n displayExpr=\"text\" class=\"form-control\" formControlName=\"partnerAccount\"\r\n [disabled]=\"isLoadingAccounts\" [showClearButton]=\"false\" maxlength=\"256\"></dx-select-box>\r\n <div *ngIf=\"isLoadingAccounts\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div> -->\r\n <dx-drop-down-box [(value)]=\"accountGridBoxValue\" [(opened)]=\"isAccountGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"accountGridBox_displayExpr\" [dropDownOptions]=\"{ width: 750 }\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerAccount\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableAccounts\"\r\n (onOptionChanged)=\"onAccountGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableAccounts\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"accountGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"id\" caption=\"Kod\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n\r\n\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-mail\">\r\n {{'eDonusum::PartnerMail'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-mail\" formControlName=\"partnerEmail\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-country\" [dataSource]=\"partnerAvailableCountries\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerCountry\" maxlength=\"256\"\r\n (onValueChanged)=\"getStates()\" [disabled]=\"isLoadingCountries\" [showClearButton]=\"false\"\r\n autofocus></dx-select-box>\r\n <div *ngIf=\"isLoadingCountries\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-country\">\r\n {{ 'eDonusum::PartnerCountry' | abpLocalization }} *\r\n </label>\r\n <dx-drop-down-box [(value)]=\"countryGridBoxValue\" [(opened)]=\"isCountryGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"countryGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerCountry\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableCountries\"\r\n (onOptionChanged)=\"onCountryGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableCountries\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"countryGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Code\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Name\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-state\">\r\n {{'eDonusum::PartnerState'|abpLocalization}}\r\n </label>\r\n\r\n <div class=\"position-relative\">\r\n <!-- <dx-select-box id=\"create-partner-state\" [dataSource]=\"partnerAvailableStates\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerState\" maxlength=\"256\"\r\n [disabled]=\"isLoadingStates\" [showClearButton]=\"false\" autofocus>\r\n </dx-select-box>\r\n <div *ngIf=\"isLoadingStates\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <dx-drop-down-box [(value)]=\"stateGridBoxValue\" [(opened)]=\"isStateGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"stateGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerState\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableStates\"\r\n (onOptionChanged)=\"onStateGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableStates\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"stateGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Code\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Name\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-zipcode\">\r\n {{'eDonusum::PartnerZipcode'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-zipcode\" formControlName=\"partnerZipCode\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-city\">\r\n {{'eDonusum::PartnerCity'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-city\" formControlName=\"partnerCity\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-county\">\r\n {{'eDonusum::PartnerCounty'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-county\" formControlName=\"partnerCounty\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-street\">\r\n {{'eDonusum::PartnerStreet'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-street\" formControlName=\"partnerStreet\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-block\">\r\n {{'eDonusum::PartnerBlock'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-block\" formControlName=\"partnerBlock\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"submit\" iconClass=\"fa fa-check\" [disabled]=\"isModalBusyForPartner\" class=\"btn btn-success\"\r\n form=\"create-partner\">\r\n {{ 'eDonusum::CreateBusinessPartner' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForDocument\" [(visible)]=\"isModalOpenForDocument\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (isDraft ? 'eDonusum::CreateDraft' : 'eDonusum::CreateDocument') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formDocument\" id=\"create-document\" validateOnSubmit>\r\n <!-- <div class=\"card\"> -->\r\n <!-- <div class=\"card-body\"> -->\r\n <!-- <div class=\"mt-3\"> -->\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::PartnerVKN'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-vkn\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.accountingSupplierPartyVknTckn\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md\">\r\n </div>\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::IssueDate'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-date-box id=\"create-draft-issue-date\" [disabled]=\"true\" dataType=\"date\"\r\n [value]=\"this.selectedInboundInvoice.issueDate\" maxlength=\"256\"></dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::PartnerName'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-partner-name\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.accountingSupplierPartyName\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md\"></div>\r\n <div class=\"col-md-5\" *ngIf=\"isBranch\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::AutoTakeDocCreateBranch'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-select-box id=\"create-draft-branch-name\" formControlName=\"selectedBranch\" class=\"form-control\"\r\n displayExpr=\"name\" valueExpr=\"code\" [dataSource]=\"branchesDataSource\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::InvoiceId'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-invoice-id\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.invoiceId\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <dx-data-grid #dxDocumentLines [dataSource]=\"documentLines\" [showRowLines]=\"true\" [showBorders]=\"true\"\r\n [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\" [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\" [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-editing [allowUpdating]=\"true\" [allowAdding]=\"false\" [allowDeleting]=\"true\" mode=\"cell\" [useIcons]=\"true\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"objType\" caption=\"{{'eDonusum::ObjectType'|abpLocalization}}\"\r\n [allowEditing]=\"false\"><dxo-lookup [dataSource]=\"objectTypesLookup\" valueExpr=\"id\" displayExpr=\"text\">\r\n </dxo-lookup></dxi-column>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n <!-- <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column> -->\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"selectedQty\" caption=\"{{'eDonusum::SelectedQty'|abpLocalization}}\"\r\n [allowEditing]=\"true\"></dxi-column>\r\n </dx-data-grid>\r\n <!-- </div> -->\r\n <!-- </div>\r\n </div> -->\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-warning\" (click)=\"openOpenDocumentsForm()\">\r\n {{ 'eDonusum::ResourceDocuments' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success\" [disabled]=\"isModalBusyForDraft\" (click)=\"createDraftDocument()\">\r\n {{ (isDraft ? 'eDonusum::CreateDraftDocument' : 'eDonusum::CreateDocument') | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n\r\n<abp-modal [busy]=\"isModalBusyForOpenDocs\" [(visible)]=\"isModalOpenForOpenDocs\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected ? 'AbpUi::Edit' : 'eDonusum::OpenDocs') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <form id=\"open-documents\">\r\n <!-- DevExtreme Tab Panel -->\r\n <dx-tab-panel [animationEnabled]=\"true\" [swipeEnabled]=\"true\" [loop]=\"false\" #tabPanel>\r\n <dxi-item title=\"{{ 'eDonusum::PurchaseOrder' | abpLocalization }}\" icon=\"fas fa-shopping-cart\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"mt-3\">\r\n <dx-data-grid #dxPurchaseOrderDocuments [dataSource]=\"purchaseOrderDocuments\" [showRowLines]=\"true\"\r\n [showBorders]=\"true\" [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" [allowColumnReordering]=\"true\"\r\n [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\" style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxo-editing [allowUpdating]=\"false\" [allowAdding]=\"false\" [allowDeleting]=\"false\" mode=\"cell\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\" [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-item>\r\n\r\n <dxi-item title=\"{{ 'eDonusum::PurchaseDespatch' | abpLocalization }}\" icon=\"fas fa-truck\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"mt-3\">\r\n <dx-data-grid #dxPurchaseDespatchDocuments [dataSource]=\"purchaseDespatchDocuments\"\r\n [showRowLines]=\"true\" [showBorders]=\"true\" [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\"\r\n [repaintChangesOnly]=\"true\" [allowColumnResizing]=\"true\" columnResizingMode=\"widget\"\r\n [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-editing [allowUpdating]=\"false\" [allowAdding]=\"false\" [allowDeleting]=\"false\" mode=\"cell\">\r\n </dxo-editing>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\" [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" [allowEditing]=\"false\"\r\n caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-item>\r\n </dx-tab-panel>\r\n </form>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success\" [disabled]=\"isModalBusyForOpenDocs\" (click)=\"selectOpenDocuments()\">\r\n {{ 'eDonusum::SelectDocument' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n\r\n<dx-popup [(visible)]=\"resultPopupVisible\" title=\"{{'eDonusum::CreateDraftResults'|abpLocalization}}\"\r\n [showCloseButton]=\"true\" (onHiding)=\"onResultPopupClosed()\">\r\n\r\n <dx-data-grid [dataSource]=\"draftResults\" [showBorders]=\"true\" height=\"100%\" [columnAutoWidth]=\"true\"\r\n [rowAlternationEnabled]=\"true\" [wordWrapEnabled]=\"true\">\r\n\r\n\r\n <dxi-column dataField=\"isSuccess\" caption=\"{{ 'eDonusum::Status' | abpLocalization }}\"\r\n [cellTemplate]=\"'statusTemplate'\">\r\n </dxi-column>\r\n\r\n <div *dxTemplate=\"let data of 'statusTemplate'\">\r\n <span *ngIf=\"data.value\" style=\"color: green; font-size: 18px;\">\u2714</span>\r\n <span *ngIf=\"!data.value\" style=\"color: red; font-size: 18px;\">\u2716</span>\r\n </div>\r\n\r\n <dxi-column dataField=\"efatno\" caption=\"{{'eDonusum::InvoiceId'|abpLocalization}}\" [width]=\"200\"></dxi-column>\r\n <dxi-column dataField=\"draftDocument.docEntry\" caption=\"{{'eDonusum::ResourceDocEntry'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"draftDocument.docNum\" caption=\"{{'eDonusum::ResourceDocNum'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"errorMessage\" caption=\"{{'eDonusum::ErrorMessage'|abpLocalization}}\" [width]=\"500\">\r\n <ng-template dxTemplate=\"cell\" let-data>\r\n <div style=\"white-space: normal; line-height: 1.6; font-size: 13px; color:#b00020\" [title]=\"data.value\">\r\n {{ data.value }}\r\n </div>\r\n </ng-template>\r\n </dxi-column>\r\n\r\n </dx-data-grid>\r\n\r\n <!-- ALT BUTONLAR -->\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\"\r\n [options]=\"{ text: ('eDonusum::Ok' | abpLocalization), type: 'default', onClick: onResultPopupClosed }\">\r\n </dxi-toolbar-item>\r\n\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\"\r\n [options]=\"{ text: ('eDonusum::Close' | abpLocalization), type: 'normal', onClick: closeResultPopup }\">\r\n </dxi-toolbar-item>\r\n\r\n</dx-popup>\r\n\r\n<dx-popup [(visible)]=\"branchPopupVisible\" title=\"{{ 'eDonusum::BranchSelectionTitle' | abpLocalization }}\"\r\n [width]=\"400\" [height]=\"250\" [showCloseButton]=\"true\">\r\n\r\n <dx-select-box [dataSource]=\"branchesDataSource\" displayExpr=\"name\" valueExpr=\"code\" [(value)]=\"selectedBranchId\"\r\n placeholder=\"{{ 'eDonusum::SelectBranchPlaceholder' | abpLocalization }}\">\r\n </dx-select-box>\r\n\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\" [options]=\"{ \r\n text: ('eDonusum::Continue' | abpLocalization), \r\n type: 'success', \r\n onClick: confirmBranchSelection\r\n }\">\r\n </dxi-toolbar-item>\r\n\r\n</dx-popup>\r\n\r\n<abp-modal [busy]=\"isFileModalBusy\" [(visible)]=\"isFileModalOpen\" [options]=\"{ size: 'lg' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'eDonusum::InvoiceFiles' | abpLocalization }}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid [dataSource]=\"invoiceFilesDataSource\" [showRowLines]=\"true\" [showBorders]=\"true\"\r\n [remoteOperations]=\"true\" [hoverStateEnabled]=\"true\" [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\" [columnAutoWidth]=\"true\" [rowAlternationEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxi-column [fixed]=\"true\" dataField=\"id\" width=\"120\" [allowGrouping]=\"false\" [allowFiltering]=\"false\"\r\n [allowHeaderFiltering]=\"false\" cellTemplate=\"fileOperationTemplate\"\r\n caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\">\r\n <div *dxTemplate=\"let row of 'fileOperationTemplate'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" ngbDropdownToggle>\r\n <i class=\"fa fa-cog mr-1\"></i> {{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <button ngbDropdownItem (click)=\"DownloadFile(row.data)\">\r\n <i class=\"fa fa-download\"></i> {{ 'eDonusum::Download' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column [allowEditing]=\"false\" dataField=\"extraItem\" caption=\"{{'eDonusum::Name'|abpLocalization}}\">\r\n <dxo-lookup [dataSource]=\"invoiceFileNameLookup\" valueExpr=\"id\"\r\n displayExpr=\"displayName\"></dxo-lookup>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
1263
|
+
args: [{ selector: 'lib-inbound-invoice', changeDetection: ChangeDetectionStrategy.Default, providers: [ListService, { provide: NgbDateAdapter, useClass: DateAdapter }], template: "<abp-page [title]=\"pageTitleKey | abpLocalization\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"text-lg-end pt-2\">\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"!isEArchive ? 'btn-primary' : 'btn-secondary'\" (click)=\"selectInvoiceType(false)\">\r\n {{ 'eDonusum::EInvoice' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"isEArchive ? 'btn-primary' : 'btn-secondary'\" (click)=\"selectInvoiceType(true)\">\r\n {{ 'eDonusum::EArchive' | abpLocalization }}\r\n </button>\r\n <ng-container *ngIf=\"isProcessedView\">\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'draft' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('draft')\">\r\n {{ 'eDonusum::DraftDocumentFilter' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'registered' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('registered')\">\r\n {{ 'eDonusum::RegisteredDocumentFilter' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n [ngClass]=\"selectedProcessedFilter === 'manual' ? 'btn-primary' : 'btn-secondary'\"\r\n (click)=\"selectProcessedFilter('manual')\">\r\n {{ 'eDonusum::ManuallyProcessedFilter' | abpLocalization }}\r\n </button>\r\n </ng-container>\r\n <button class=\"btn btn-secondary btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n (click)=\"downloadInboundPDFMultiple()\">\r\n <i class=\"fa fa-file-pdf-o me-1\"></i>\r\n {{ 'eDonusum::DownloadPDFMultiple' | abpLocalization }}\r\n </button>\r\n <button class=\"btn btn-secondary btn-sm\" type=\"button\" style=\"margin-right: 5px;\"\r\n (click)=\"printInboundPDFMultiple()\">\r\n <i class=\"fa fa-print me-1\" aria-hidden=\"true\"></i>\r\n Toplu PDF Yazd\u0131r\r\n </button>\r\n <ng-container *ngIf=\"!isProcessedView\">\r\n <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"openBranchPopup()\" [disabled]=\"!hasValidSelection\">\r\n\r\n <i class=\"fa fa-copy me-1\"></i>\r\n {{ 'eDonusum::CreateMultipleEmptyDrafts' | abpLocalization }}\r\n </button>\r\n\r\n <!-- <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"viewPDFsMultiple()\">\r\n <i class=\"fa fa-download me-1\" aria-hidden=\"true\"></i>\r\n {{ 'eDonusum::ViewPDFMultiple' | abpLocalization }}\r\n </button> -->\r\n\r\n <button *abpPermission=\"'eDonusum.Invoices.Create'\" class=\"btn btn-primary btn-sm\" type=\"button\"\r\n style=\"margin-right: 5px;\" (click)=\"getInboundInvoice()\">\r\n <i class=\"fa fa-envelope me-1\" aria-hidden=\"true\"></i>\r\n {{ 'eDonusum::CheckInboundInvoices' | abpLocalization }}\r\n </button>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </abp-page-toolbar-container>\r\n <p>{{ pageDescriptionKey | abpLocalization }}</p>\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid #dxInboundInvoiceInstance [dataSource]=\"inboundInvoicesDataSource\" [showRowLines]=\"true\"\r\n [showBorders]=\"true\" [remoteOperations]=\"true\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\"\r\n [columnHidingEnabled]=\"true\" [rowAlternationEnabled]=\"true\" style=\"height: 75vh;\"\r\n (onSelectionChanged)=\"onInboundSelectionChanged($event)\" (onRowPrepared)=\"changeRowsColor($event)\">\r\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [allowedPageSizes]=\"[50,100,200]\" [showNavigationButtons]=\"true\"\r\n [showPageSizeSelector]=\"true\">\r\n </dxo-pager>\r\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-group-panel [visible]=\"true\" [allowColumnDragging]=\"true\"></dxo-group-panel>\r\n <dxo-grouping #expand [autoExpandAll]=\"false\" [allowCollapsing]=\"true\"\r\n [contextMenuEnabled]=\"true\"></dxo-grouping>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-export [enabled]=\"true\" [allowExportSelectedData]=\"false\"></dxo-export>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-filter-builder [allowHierarchicalFields]=\"true\"></dxo-filter-builder>\r\n <dxo-filter-panel [visible]=\"true\"></dxo-filter-panel>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxi-column [fixed]=\"true\" dataField=\"id\" width=\"120\" [allowGrouping]=\"false\" [allowFiltering]=\"false\"\r\n [allowHeaderFiltering]=\"false\" [allowHiding]=\"false\" [allowReordering]=\"false\"\r\n cellTemplate=\"operationTemplate\" caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\">\r\n <div *dxTemplate=\"let row of 'operationTemplate'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\"\r\n ngbDropdownToggle [disabled]=\"disabledIdColumn\">\r\n <i class=\"fa fa-cog mr-1\" aria-hidden=\"true\"></i>\r\n {{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <!-- <button ngbDropdownItem (click)=\"update(row.data)\">\r\n <i class=\"fa fa-edit\" aria-hidden=\"true\"></i> {{ 'AbpUi::Edit' | abpLocalization }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"delete(row.data)\">\r\n <i class=\"fa fa-trash\" aria-hidden=\"true\"></i> {{ 'AbpUi::Delete' | abpLocalization }}\r\n </button> -->\r\n <button ngbDropdownItem (click)=\"getInvoicePreview(row.data)\"\r\n *ngIf=\"row.data.status == 600 || row.data.status == 700 || row.data.status == 650 || row.data.status == 750 || row.data.status == 680 || row.data.status == 780 || row.data.status == 670 || row.data.status == 770\">\r\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i> {{ 'eDonusum::GetView' | abpLocalization }}\r\n </button>\r\n <ng-container *ngIf=\"!isProcessedView\">\r\n <button ngbDropdownItem (click)=\"openResponseModal(row.data)\"\r\n *ngIf=\"row.data.profileId == 'TICARIFATURA' && row.data.receiverResponse == 0\">\r\n <i class=\"fa fa-envelope\" aria-hidden=\"true\"></i> {{ 'eDonusum::Response' | abpLocalization }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openPartnerModal(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-user\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateBusinessPartner' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openDraftForm(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-file\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateDraftDocument' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"openDocumentForm(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-file-text\" aria-hidden=\"true\"></i> {{ 'eDonusum::CreateDocument' | abpLocalization\r\n }}\r\n </button>\r\n <button ngbDropdownItem (click)=\"processManual(row.data)\"\r\n *ngIf=\"!(row.data.profileId == 'TICARIFATURA' && row.data.status == 700 && row.data.receiverResponse == 2) && (row.data.status == 600 || row.data.status == 700)\">\r\n <i class=\"fa fa-hand-paper-o\" aria-hidden=\"true\"></i> {{ 'eDonusum::ProcessManual' | abpLocalization\r\n }}\r\n </button>\r\n </ng-container>\r\n <button ngbDropdownItem (click)=\"showAllFiles(row.data)\"\r\n *ngIf=\"row.data.status == 600 || row.data.status == 700 || row.data.status == 650 || row.data.status == 750 || row.data.status == 680 || row.data.status == 780 || row.data.status == 670 || row.data.status == 770\">\r\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i> {{ 'eDonusum::ShowAllFiles' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column dataField=\"issueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::IssueDate'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"paymentTermsPaymentDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::PaymentDueDate'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"uuId\" caption=\"{{'eDonusum::UuId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"invoiceId\" caption=\"{{'eDonusum::InvoiceId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"accountingSupplierPartyName\"\r\n caption=\"{{'eDonusum::AccountingSupplierPartyName'|abpLocalization}}\" aria-hidden=\"true\"></dxi-column>\r\n <dxi-column dataField=\"accountingSupplierPartyVknTckn\"\r\n caption=\"{{'eDonusum::AccountingSupplierPartyVknTckn'|abpLocalization}}\" aria-hidden=\"true\"></dxi-column>\r\n\r\n <dxi-column caption=\"{{'eDonusum::UserComment'|abpLocalization}}\" width=\"320\" cellTemplate=\"userCommentTemplate\"></dxi-column>\r\n\r\n <dxi-column dataField=\"status\" caption=\"{{'eDonusum::Status'|abpLocalization}}\" aria-hidden=\"true\">\r\n <dxo-lookup [dataSource]=\"inboundInvoiceStatusLookup\" valueExpr=\"id\" displayExpr=\"displayName\">\r\n </dxo-lookup>\r\n </dxi-column>\r\n <dxi-column dataField=\"resourceDocEntry\" caption=\"{{'eDonusum::ResourceDocEntry'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"resourceDocNum\" caption=\"{{'eDonusum::ResourceDocNum'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column cellTemplate=\"docTypeTemplate\" dataField=\"resourceDocType\"\r\n caption=\"{{'eDonusum::ResourceDocType'|abpLocalization}}\">\r\n <div *dxTemplate=\"let data of 'docTypeTemplate'\">\r\n {{getDocObjectName(data.data)}}\r\n </div>\r\n </dxi-column>\r\n\r\n <dxi-column dataField=\"receiverResponse\" caption=\"{{'eDonusum::ReceiverResponse'|abpLocalization}}\"\r\n cellTemplate=\"iconTemplate\">\r\n <dxo-lookup [dataSource]=\"inboundInvoiceReceiverResponseLookup\" valueExpr=\"id\" displayExpr=\"displayName\">\r\n </dxo-lookup>\r\n </dxi-column>\r\n <div *dxTemplate=\"let data of 'iconTemplate'\">\r\n <i [ngClass]=\"getIconClass(data.data.receiverResponse)\"\r\n [ngStyle]=\"{'color':data.data.receiverResponse == '1' ? 'green' : data.data.receiverResponse == '2' ? 'red' : 'gray'}\"></i>\r\n {{getReceiverResponseName(data.data.receiverResponse)}}\r\n\r\n </div>\r\n <div *dxTemplate=\"let data of 'userCommentTemplate'\">\r\n <div class=\"d-flex align-items-center\">\r\n <input type=\"text\"\r\n class=\"form-control form-control-sm me-2\"\r\n [value]=\"getRowComment(data.data)\"\r\n (input)=\"onUserCommentChanged($any($event.target).value, data.data)\"\r\n placeholder=\"{{ 'eDonusum::AddComment' | abpLocalization }}\"\r\n />\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\r\n [disabled]=\"isSavingComment[data.data.id]\"\r\n (click)=\"saveUserComment(data.data)\">\r\n Kaydet\r\n </button>\r\n </div>\r\n </div>\r\n <dxi-column dataField=\"profileId\" caption=\"{{'eDonusum::ProfileId'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"invoiceTypeCode\" caption=\"{{'eDonusum::InvoiceTypeCode'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"legalMonetaryTotalPayableAmount\" caption=\"{{'eDonusum::PayableAmount'|abpLocalization}}\"\r\n dataType=\"number\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"documentCurrencyCode\" caption=\"{{'eDonusum::DocCurrency'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"pricingExchangeRateCalculationRate\" caption=\"{{'eDonusum::DocRate'|abpLocalization}}\"\r\n dataType=\"number\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"inboundDocumentCreateLog\"\r\n caption=\"{{'eDonusum::InboundDocumentCreateLog'|abpLocalization}}\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n</abp-page>\r\n\r\n<abp-modal [busy]=\"isModalBusyForResponse\" [(visible)]=\"isModalOpenForResponse\" [options]=\"{ size: 'm' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ 'eDonusum::SendResponse' | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formResponse\" id=\"invoice-response\" validateOnSubmit>\r\n <div class=\"container-fluid\">\r\n <div class=\"mt-2 fade-in-top\">\r\n <div class=\"row\" style=\"margin-top:20px\">\r\n <div class=\"col-md\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"invoice-response-invoice-id\">\r\n {{'eDonusum::Id'|abpLocalization}}\r\n </label>\r\n\r\n <dx-text-box id=\"invoice-response-invoice-id\" [disabled]=\"true\" class=\"form-control\"\r\n formControlName=\"id\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"invoice-response-invoice-uuid\">\r\n {{'eDonusum::UuId'|abpLocalization}}\r\n </label>\r\n\r\n <dx-text-box id=\"invoice-response-invoice-uuid\" [disabled]=\"true\" class=\"form-control\"\r\n formControlName=\"invoiceUUID\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"form-check mb-3\">\r\n <input type=\"checkbox\" id=\"invoice-response-invoice-accept\" formControlName=\"isAccepted\"\r\n name=\"responseCheck\" (change)=\"checkBoxChanged($event)\" class=\"form-check-input\" />\r\n\r\n <label for=\"invoice-response-invoice-accept\" class=\"form-check-label\">\r\n {{ 'eDonusum::Accept' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md\">\r\n <div class=\"form-check mb-3\">\r\n <input type=\"checkbox\" id=\"invoice-response-invoice-reject\" formControlName=\"isRejected\"\r\n name=\"responseCheck\" (change)=\"checkBoxChanged($event)\" class=\"form-check-input\" />\r\n\r\n <label for=\"invoice-response-invoice-reject\" class=\"form-check-label\">\r\n {{ 'eDonusum::Reject' | abpLocalization }}\r\n </label>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" iconClass=\"fa fa-check\" class=\"btn btn-warning\" formName=\"invoice-response\"\r\n (click)=\"sendInvoiceResponse(false)\">\r\n {{ 'eDonusum::Reject' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" iconClass=\"fa fa-check\" class=\"btn btn-success\" formName=\"invoice-response\"\r\n (click)=\"sendInvoiceResponse(true)\">\r\n {{ 'eDonusum::Accept' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForPartner\" [(visible)]=\"isModalOpenForPartner\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ 'eDonusum::CreateBusinessPartner' | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formPartner\" id=\"create-partner\" (ngSubmit)=\"createBusinessPartner()\" validateOnSubmit>\r\n <div class=\"container-fluid\">\r\n <div class=\"mt-2 fade-in-top\">\r\n <div class=\"row\" style=\"margin-top:20px\">\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-name\">\r\n {{'eDonusum::PartnerName'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-name\" formControlName=\"name\" maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-vkn\">\r\n {{'eDonusum::PartnerVKN'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-vkn\" [disabled]=\"true\" formControlName=\"vkn\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-partner-add-id\">\r\n {{'eDonusum::PartnerAdditionalId'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-partner-add-id\" [disabled]=\"true\" formControlName=\"partnerAddId\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-currency\">\r\n {{'eDonusum::PartnerCurrency'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-currency\" [disabled]=\"true\" formControlName=\"partnerCurrency\"\r\n maxlength=\"256\" autofocus></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-web-site\">\r\n {{'eDonusum::PartnerWebSite'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-web-site\" formControlName=\"partnerWebSiteURI\"\r\n maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-series\">\r\n {{'eDonusum::PartnerSeries'|abpLocalization}}\r\n </label>\r\n <dx-drop-down-box [(value)]=\"serialGridBoxValue\" [(opened)]=\"isSerialGridBoxOpened\" valueExpr=\"series\"\r\n [deferRendering]=\"false\" [displayExpr]=\"serialGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerSeries\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableSeries\"\r\n (onOptionChanged)=\"onSerialGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableSeries\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"serialGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"series\" caption=\"Seri\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-groups\">\r\n {{'eDonusum::PartnerGroup'|abpLocalization}}\r\n </label>\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-groups\" [dataSource]=\"partnerAvailableGroups\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerGroup\" maxlength=\"256\"\r\n [disabled]=\"isLoadingGroups\" [showClearButton]=\"false\" autofocus></dx-select-box>\r\n <div *ngIf=\"isLoadingGroups\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n <dx-drop-down-box [(value)]=\"groupGridBoxValue\" [(opened)]=\"isGroupGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"groupGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerGroup\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableGroups\"\r\n (onOptionChanged)=\"onGroupGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableGroups\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"groupGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Kod\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-account\">\r\n {{'eDonusum::PartnerBankAccount'|abpLocalization}}\r\n </label>\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-account\" [dataSource]=\"partnerAvailableAccounts\" valueExpr=\"id\"\r\n displayExpr=\"text\" class=\"form-control\" formControlName=\"partnerAccount\"\r\n [disabled]=\"isLoadingAccounts\" [showClearButton]=\"false\" maxlength=\"256\"></dx-select-box>\r\n <div *ngIf=\"isLoadingAccounts\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div> -->\r\n <dx-drop-down-box [(value)]=\"accountGridBoxValue\" [(opened)]=\"isAccountGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"accountGridBox_displayExpr\" [dropDownOptions]=\"{ width: 750 }\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerAccount\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableAccounts\"\r\n (onOptionChanged)=\"onAccountGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableAccounts\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"accountGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"id\" caption=\"Kod\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"Ad\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n\r\n\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-mail\">\r\n {{'eDonusum::PartnerMail'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-mail\" formControlName=\"partnerEmail\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <!-- <div class=\"position-relative\">\r\n <dx-select-box id=\"create-partner-country\" [dataSource]=\"partnerAvailableCountries\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerCountry\" maxlength=\"256\"\r\n (onValueChanged)=\"getStates()\" [disabled]=\"isLoadingCountries\" [showClearButton]=\"false\"\r\n autofocus></dx-select-box>\r\n <div *ngIf=\"isLoadingCountries\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-country\">\r\n {{ 'eDonusum::PartnerCountry' | abpLocalization }} *\r\n </label>\r\n <dx-drop-down-box [(value)]=\"countryGridBoxValue\" [(opened)]=\"isCountryGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"countryGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerCountry\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableCountries\"\r\n (onOptionChanged)=\"onCountryGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableCountries\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"countryGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Code\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Name\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-state\">\r\n {{'eDonusum::PartnerState'|abpLocalization}}\r\n </label>\r\n\r\n <div class=\"position-relative\">\r\n <!-- <dx-select-box id=\"create-partner-state\" [dataSource]=\"partnerAvailableStates\" valueExpr=\"code\"\r\n displayExpr=\"name\" class=\"form-control\" formControlName=\"partnerState\" maxlength=\"256\"\r\n [disabled]=\"isLoadingStates\" [showClearButton]=\"false\" autofocus>\r\n </dx-select-box>\r\n <div *ngIf=\"isLoadingStates\" class=\"position-absolute top-50 start-50 translate-middle\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{'eDonusum::Loading'|abpLocalization}}</span>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <dx-drop-down-box [(value)]=\"stateGridBoxValue\" [(opened)]=\"isStateGridBoxOpened\" valueExpr=\"code\"\r\n [deferRendering]=\"false\" [displayExpr]=\"stateGridBox_displayExpr\"\r\n placeholder=\"{{ 'eDonusum::SelectAValue' | abpLocalization }}\" formControlName=\"partnerState\"\r\n [showClearButton]=\"false\" [dataSource]=\"partnerAvailableStates\"\r\n (onOptionChanged)=\"onStateGridBoxOptionChanged($event)\">\r\n <dx-data-grid [dataSource]=\"partnerAvailableStates\" [hoverStateEnabled]=\"true\" [height]=\"250\"\r\n [(selectedRowKeys)]=\"stateGridBoxValue\" [remoteOperations]=\"true\">\r\n <dxi-column dataField=\"code\" caption=\"Code\"></dxi-column>\r\n <dxi-column dataField=\"name\" caption=\"Name\"></dxi-column>\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-scrolling mode=\"infinite\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"10\"></dxo-paging>\r\n </dx-data-grid>\r\n </dx-drop-down-box>\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-zipcode\">\r\n {{'eDonusum::PartnerZipcode'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-zipcode\" formControlName=\"partnerZipCode\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-city\">\r\n {{'eDonusum::PartnerCity'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-city\" formControlName=\"partnerCity\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-county\">\r\n {{'eDonusum::PartnerCounty'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-county\" formControlName=\"partnerCounty\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-street\">\r\n {{'eDonusum::PartnerStreet'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-street\" formControlName=\"partnerStreet\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" for=\"create-partner-block\">\r\n {{'eDonusum::PartnerBlock'|abpLocalization}}\r\n </label>\r\n <dx-text-box id=\"create-partner-block\" formControlName=\"partnerBlock\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"submit\" iconClass=\"fa fa-check\" [disabled]=\"isModalBusyForPartner\" class=\"btn btn-success\"\r\n form=\"create-partner\">\r\n {{ 'eDonusum::CreateBusinessPartner' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForDocument\" [(visible)]=\"isModalOpenForDocument\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (isDraft ? 'eDonusum::CreateDraft' : 'eDonusum::CreateDocument') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <form [formGroup]=\"formDocument\" id=\"create-document\" validateOnSubmit>\r\n <!-- <div class=\"card\"> -->\r\n <!-- <div class=\"card-body\"> -->\r\n <!-- <div class=\"mt-3\"> -->\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::PartnerVKN'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-vkn\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.accountingSupplierPartyVknTckn\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md\">\r\n </div>\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::IssueDate'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-date-box id=\"create-draft-issue-date\" [disabled]=\"true\" dataType=\"date\"\r\n [value]=\"this.selectedInboundInvoice.issueDate\" maxlength=\"256\"></dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::PartnerName'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-partner-name\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.accountingSupplierPartyName\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md\"></div>\r\n <div class=\"col-md-5\" *ngIf=\"isBranch\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::AutoTakeDocCreateBranch'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-select-box id=\"create-draft-branch-name\" formControlName=\"selectedBranch\" class=\"form-control\"\r\n displayExpr=\"name\" valueExpr=\"code\" [dataSource]=\"branchesDataSource\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-5\">\r\n <div class=\"mb-3\">\r\n <div class=\"dx-field\">\r\n <div class=\"dx-field-label\"> {{'eDonusum::InvoiceId'|abpLocalization}}\r\n </div>\r\n <div class=\"dx-field-value\">\r\n <dx-text-box id=\"create-draft-invoice-id\" [disabled]=\"true\"\r\n [value]=\"this.selectedInboundInvoice.invoiceId\" maxlength=\"256\"></dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <dx-data-grid #dxDocumentLines [dataSource]=\"documentLines\" [showRowLines]=\"true\" [showBorders]=\"true\"\r\n [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\" [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\" [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-editing [allowUpdating]=\"true\" [allowAdding]=\"false\" [allowDeleting]=\"true\" mode=\"cell\" [useIcons]=\"true\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"objType\" caption=\"{{'eDonusum::ObjectType'|abpLocalization}}\"\r\n [allowEditing]=\"false\"><dxo-lookup [dataSource]=\"objectTypesLookup\" valueExpr=\"id\" displayExpr=\"text\">\r\n </dxo-lookup></dxi-column>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n <!-- <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column> -->\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"selectedQty\" caption=\"{{'eDonusum::SelectedQty'|abpLocalization}}\"\r\n [allowEditing]=\"true\"></dxi-column>\r\n </dx-data-grid>\r\n <!-- </div> -->\r\n <!-- </div>\r\n </div> -->\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-info\" (click)=\"openManualLineModal()\" [disabled]=\"isModalBusyForManualLine\">\r\n Manuel Kalem Ekle\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"openCatalogMatchModal()\" [disabled]=\"isModalBusyForCatalog\">\r\n Muhatap Katalog No ile Taslak Belge Olu\u015Ftur\r\n </button>\r\n <button type=\"button\" class=\"btn btn-warning\" (click)=\"openOpenDocumentsForm()\">\r\n {{ 'eDonusum::ResourceDocuments' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success\" [disabled]=\"isModalBusyForDraft\" (click)=\"createDraftDocument()\">\r\n {{ (isDraft ? 'eDonusum::CreateDraftDocument' : 'eDonusum::CreateDocument') | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<!-- Manuel Kalem Ekleme Modal -->\r\n<abp-modal [busy]=\"isModalBusyForManualLine\" [(visible)]=\"isModalOpenForManualLine\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>Manuel Kalem Ekleme</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-sm\">\r\n <thead class=\"thead-light\">\r\n <tr>\r\n <th style=\"width: 40px;\">\r\n <input type=\"checkbox\" (change)=\"toggleAllManualLines($event)\">\r\n </th>\r\n <th>Kalem Kodu</th>\r\n <th>Kalem Tan\u0131m\u0131</th>\r\n <th style=\"width: 100px;\">Miktar</th>\r\n <th style=\"width: 120px;\">Birim Fiyat</th>\r\n <th style=\"width: 150px;\">Vergi Grubu</th>\r\n <th style=\"width: 80px;\">Para Birimi</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let line of manualLines; let i = index\">\r\n <td class=\"text-center\">\r\n <input type=\"checkbox\" [(ngModel)]=\"line.selected\">\r\n </td>\r\n <td>\r\n <dx-drop-down-box [(value)]=\"line.itemCode\" [(opened)]=\"line.itemBoxOpened\"\r\n valueExpr=\"itemCode\" displayExpr=\"itemCode\"\r\n placeholder=\"Kalem kodu se\u00E7iniz...\" [showClearButton]=\"true\"\r\n [dataSource]=\"itemsGridStore\" [dropDownOptions]=\"{ width: 520, height: 430 }\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <dx-data-grid [dataSource]=\"itemsGridStore\" [remoteOperations]=\"true\" [height]=\"390\"\r\n [showBorders]=\"true\" [hoverStateEnabled]=\"true\" [columnAutoWidth]=\"true\"\r\n [selectedRowKeys]=\"line.itemCode ? [line.itemCode] : []\"\r\n (onSelectionChanged)=\"onItemGridSelectionChanged($event, i)\">\r\n <dxo-selection mode=\"single\"></dxo-selection>\r\n <dxo-search-panel [visible]=\"true\" [width]=\"260\" placeholder=\"Kalem kodu / ad\u0131 ara...\"></dxo-search-panel>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-paging [enabled]=\"true\" [pageSize]=\"20\"></dxo-paging>\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n <dxi-column dataField=\"itemCode\" caption=\"Kalem Kodu\" [width]=\"180\"></dxi-column>\r\n <dxi-column dataField=\"itemName\" caption=\"Kalem Ad\u0131\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </dx-drop-down-box>\r\n </td>\r\n <td>\r\n <dx-text-box [(value)]=\"line.itemName\" [readOnly]=\"false\"></dx-text-box>\r\n </td>\r\n <td>\r\n <dx-number-box [(value)]=\"line.quantity\" [showSpinButtons]=\"false\" format=\"#,##0.##\"></dx-number-box>\r\n </td>\r\n <td>\r\n <dx-number-box [(value)]=\"line.unitPrice\" [showSpinButtons]=\"false\" format=\"#,##0.00\"></dx-number-box>\r\n </td>\r\n <td>\r\n <dx-lookup [(value)]=\"line.taxCode\"\r\n [dataSource]=\"taxGroups\"\r\n displayExpr=\"code\" valueExpr=\"code\"\r\n placeholder=\"Vergi grubu se\u00E7iniz...\"\r\n [showClearButton]=\"true\"\r\n [searchEnabled]=\"true\"\r\n searchExpr=\"['code','name']\"\r\n [dropDownOptions]=\"{ width: 350, height: 300 }\"\r\n itemTemplate=\"taxTemplate\">\r\n <div *dxTemplate=\"let item of 'taxTemplate'\">\r\n <div><strong>{{item.code}}</strong> - {{item.name}} ({{item.rate}}%)</div>\r\n </div>\r\n </dx-lookup>\r\n </td>\r\n <td>\r\n <dx-text-box [(value)]=\"line.currencyCode\" [readOnly]=\"true\"></dx-text-box>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"manualLines.length === 0\" class=\"text-center text-muted py-3\">\r\n XML'de fatura sat\u0131r\u0131 bulunamad\u0131.\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"isModalOpenForManualLine = false\">\r\n Vazge\u00E7\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addManualLinesToDocument()\"\r\n [disabled]=\"manualLines.length === 0\">\r\n Sat\u0131rlar\u0131 Ekle\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<!-- Muhatap Katalog Numaras\u0131 E\u015Fle\u015Ftirme Modal -->\r\n<abp-modal [busy]=\"isModalBusyForCatalog\" [(visible)]=\"isModalOpenForCatalog\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>Muhatap Katalog Numaras\u0131 E\u015Fle\u015Ftirme</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n <dx-data-grid [dataSource]=\"catalogMatchLines\"\r\n [showBorders]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\">\r\n\r\n <dxi-column dataField=\"catalogItemCode\" caption=\"Kalem Kodu\" [width]=\"120\"></dxi-column>\r\n <dxi-column dataField=\"xmlItemName\" caption=\"Kalem Tan\u0131m\u0131\"></dxi-column>\r\n <dxi-column dataField=\"catalogSubstitute\" caption=\"Muhatap Katalog Tan\u0131m\u0131\"></dxi-column>\r\n <dxi-column dataField=\"matchedItemCode\" caption=\"Muhatap Katalog Kodu\" [width]=\"150\"></dxi-column>\r\n <dxi-column dataField=\"isMatched\" caption=\"E\u015Fle\u015Fme Durumu\" [width]=\"130\" cellTemplate=\"matchStatusTemplate\">\r\n </dxi-column>\r\n\r\n <div *dxTemplate=\"let cell of 'matchStatusTemplate'\">\r\n <span [ngStyle]=\"{'color': cell.value ? 'green' : 'red', 'font-weight': 'bold'}\">\r\n {{ cell.value ? 'Evet' : 'Hay\u0131r' }}\r\n </span>\r\n </div>\r\n\r\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" [width]=\"80\" format=\"#,##0.##\"></dxi-column>\r\n <dxi-column dataField=\"unitPrice\" caption=\"Birim Fiyat\" [width]=\"100\" format=\"#,##0.00\"></dxi-column>\r\n <dxi-column dataField=\"taxCode\" caption=\"Vergi Grubu\" [width]=\"100\"></dxi-column>\r\n <dxi-column dataField=\"unitCode\" caption=\"\u00D6l\u00E7\u00FC Birimi\" [width]=\"90\"></dxi-column>\r\n <dxi-column dataField=\"discountPercent\" caption=\"\u0130ndirim %\" [width]=\"80\" format=\"#,##0.##\"></dxi-column>\r\n </dx-data-grid>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"isModalOpenForCatalog = false\">\r\n Vazge\u00E7\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"addCatalogLinesToDocument()\" [disabled]=\"isModalBusyForCatalog\">\r\n Sat\u0131rlar\u0131 Ekle\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n<abp-modal [busy]=\"isModalBusyForOpenDocs\" [(visible)]=\"isModalOpenForOpenDocs\" [options]=\"{ size: 'xl' }\">\r\n <ng-template #abpHeader>\r\n <h3>\r\n {{ (selected ? 'AbpUi::Edit' : 'eDonusum::OpenDocs') | abpLocalization }}\r\n </h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <form id=\"open-documents\">\r\n <!-- DevExtreme Tab Panel -->\r\n <dx-tab-panel [animationEnabled]=\"true\" [swipeEnabled]=\"true\" [loop]=\"false\" #tabPanel>\r\n <dxi-item title=\"{{ 'eDonusum::PurchaseOrder' | abpLocalization }}\" icon=\"fas fa-shopping-cart\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"mt-3\">\r\n <dx-data-grid #dxPurchaseOrderDocuments [dataSource]=\"purchaseOrderDocuments\" [showRowLines]=\"true\"\r\n [showBorders]=\"true\" [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\" [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\" columnResizingMode=\"widget\" [allowColumnReordering]=\"true\"\r\n [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\" style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxo-editing [allowUpdating]=\"false\" [allowAdding]=\"false\" [allowDeleting]=\"false\" mode=\"cell\">\r\n </dxo-editing>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\" [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-item>\r\n\r\n <dxi-item title=\"{{ 'eDonusum::PurchaseDespatch' | abpLocalization }}\" icon=\"fas fa-truck\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"mt-3\">\r\n <dx-data-grid #dxPurchaseDespatchDocuments [dataSource]=\"purchaseDespatchDocuments\"\r\n [showRowLines]=\"true\" [showBorders]=\"true\" [remoteOperations]=\"false\" [hoverStateEnabled]=\"true\"\r\n [repaintChangesOnly]=\"true\" [allowColumnResizing]=\"true\" columnResizingMode=\"widget\"\r\n [allowColumnReordering]=\"true\" [columnAutoWidth]=\"true\" [columnHidingEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-column-chooser [allowSearch]=\"true\" [enabled]=\"true\" mode=\"select\"></dxo-column-chooser>\r\n <dxo-editing [allowUpdating]=\"false\" [allowAdding]=\"false\" [allowDeleting]=\"false\" mode=\"cell\">\r\n </dxo-editing>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-selection mode=\"multiple\" selectAllMode=\"page\" showCheckBoxesMode=\"always\">\r\n </dxo-selection>\r\n <dxi-column dataField=\"docEntry\" caption=\"{{'eDonusum::DocEntry'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"{{'eDonusum::DocNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"numAtCard\" caption=\"{{'eDonusum::NumAtCard'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"lineNum\" caption=\"{{'eDonusum::LineNum'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"cardCode\" caption=\"{{'eDonusum::CardCode'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDate\" dataType=\"date\" caption=\"{{'eDonusum::DocDate'|abpLocalization}}\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"docDueDate\" dataType=\"date\"\r\n caption=\"{{'eDonusum::DocDueDate'|abpLocalization}}\" [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemCode\" caption=\"{{'eDonusum::ItemCode'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"dscription\" caption=\"{{'eDonusum::Dscription'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"text\" caption=\"{{'eDonusum::Text'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"freeTxt\" caption=\"{{'eDonusum::FreeTxt'|abpLocalization}}\"></dxi-column>\r\n <dxi-column dataField=\"openQty\" [allowEditing]=\"false\"\r\n caption=\"{{'eDonusum::OpenQty'|abpLocalization}}\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-item>\r\n </dx-tab-panel>\r\n </form>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success\" [disabled]=\"isModalBusyForOpenDocs\" (click)=\"selectOpenDocuments()\">\r\n {{ 'eDonusum::SelectDocument' | abpLocalization }}\r\n </button>\r\n </ng-template>\r\n</abp-modal>\r\n\r\n\r\n<dx-popup [(visible)]=\"resultPopupVisible\" title=\"{{'eDonusum::CreateDraftResults'|abpLocalization}}\"\r\n [showCloseButton]=\"true\" (onHiding)=\"onResultPopupClosed()\">\r\n\r\n <dx-data-grid [dataSource]=\"draftResults\" [showBorders]=\"true\" height=\"100%\" [columnAutoWidth]=\"true\"\r\n [rowAlternationEnabled]=\"true\" [wordWrapEnabled]=\"true\">\r\n\r\n\r\n <dxi-column dataField=\"isSuccess\" caption=\"{{ 'eDonusum::Status' | abpLocalization }}\"\r\n [cellTemplate]=\"'statusTemplate'\">\r\n </dxi-column>\r\n\r\n <div *dxTemplate=\"let data of 'statusTemplate'\">\r\n <span *ngIf=\"data.value\" style=\"color: green; font-size: 18px;\">\u2714</span>\r\n <span *ngIf=\"!data.value\" style=\"color: red; font-size: 18px;\">\u2716</span>\r\n </div>\r\n\r\n <dxi-column dataField=\"efatno\" caption=\"{{'eDonusum::InvoiceId'|abpLocalization}}\" [width]=\"200\"></dxi-column>\r\n <dxi-column dataField=\"draftDocument.docEntry\" caption=\"{{'eDonusum::ResourceDocEntry'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"draftDocument.docNum\" caption=\"{{'eDonusum::ResourceDocNum'|abpLocalization}}\"\r\n aria-hidden=\"true\">\r\n </dxi-column>\r\n <dxi-column dataField=\"errorMessage\" caption=\"{{'eDonusum::ErrorMessage'|abpLocalization}}\" [width]=\"500\">\r\n <ng-template dxTemplate=\"cell\" let-data>\r\n <div style=\"white-space: normal; line-height: 1.6; font-size: 13px; color:#b00020\" [title]=\"data.value\">\r\n {{ data.value }}\r\n </div>\r\n </ng-template>\r\n </dxi-column>\r\n\r\n </dx-data-grid>\r\n\r\n <!-- ALT BUTONLAR -->\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\"\r\n [options]=\"{ text: ('eDonusum::Ok' | abpLocalization), type: 'default', onClick: onResultPopupClosed }\">\r\n </dxi-toolbar-item>\r\n\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\"\r\n [options]=\"{ text: ('eDonusum::Close' | abpLocalization), type: 'normal', onClick: closeResultPopup }\">\r\n </dxi-toolbar-item>\r\n\r\n</dx-popup>\r\n\r\n<dx-popup [(visible)]=\"branchPopupVisible\" title=\"{{ 'eDonusum::BranchSelectionTitle' | abpLocalization }}\"\r\n [width]=\"400\" [height]=\"250\" [showCloseButton]=\"true\">\r\n\r\n <dx-select-box [dataSource]=\"branchesDataSource\" displayExpr=\"name\" valueExpr=\"code\" [(value)]=\"selectedBranchId\"\r\n placeholder=\"{{ 'eDonusum::SelectBranchPlaceholder' | abpLocalization }}\">\r\n </dx-select-box>\r\n\r\n <dxi-toolbar-item widget=\"dxButton\" toolbar=\"bottom\" location=\"after\" [options]=\"{ \r\n text: ('eDonusum::Continue' | abpLocalization), \r\n type: 'success', \r\n onClick: confirmBranchSelection\r\n }\">\r\n </dxi-toolbar-item>\r\n\r\n</dx-popup>\r\n\r\n<abp-modal [busy]=\"isFileModalBusy\" [(visible)]=\"isFileModalOpen\" [options]=\"{ size: 'lg' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ 'eDonusum::InvoiceFiles' | abpLocalization }}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid [dataSource]=\"invoiceFilesDataSource\" [showRowLines]=\"true\" [showBorders]=\"true\"\r\n [remoteOperations]=\"true\" [hoverStateEnabled]=\"true\" [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\" [columnAutoWidth]=\"true\" [rowAlternationEnabled]=\"true\"\r\n style=\"height: 50vh;\">\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"horizontal\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxi-column [fixed]=\"true\" dataField=\"id\" width=\"120\" [allowGrouping]=\"false\" [allowFiltering]=\"false\"\r\n [allowHeaderFiltering]=\"false\" cellTemplate=\"fileOperationTemplate\"\r\n caption=\"{{ 'AbpUi::Actions' | abpLocalization }}\">\r\n <div *dxTemplate=\"let row of 'fileOperationTemplate'\">\r\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\r\n <button class=\"btn btn-primary btn-sm dropdown-toggle\" ngbDropdownToggle>\r\n <i class=\"fa fa-cog mr-1\"></i> {{ 'AbpUi::Actions' | abpLocalization }}\r\n </button>\r\n <div ngbDropdownMenu>\r\n <button ngbDropdownItem (click)=\"DownloadFile(row.data)\">\r\n <i class=\"fa fa-download\"></i> {{ 'eDonusum::Download' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </dxi-column>\r\n <dxi-column [allowEditing]=\"false\" dataField=\"extraItem\" caption=\"{{'eDonusum::Name'|abpLocalization}}\">\r\n <dxo-lookup [dataSource]=\"invoiceFileNameLookup\" valueExpr=\"id\"\r\n displayExpr=\"displayName\"></dxo-lookup>\r\n </dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
1118
1264
|
}], ctorParameters: function () { return [{ type: i1.ListService }, { type: i2.HitInboundInvoiceService }, { type: i3.HitInvoiceService }, { type: i4.HitBranchesService }, { type: i5.HitParamsGeneralsService }, { type: i6.FormBuilder }, { type: i6.FormBuilder }, { type: i6.FormBuilder }, { type: i7.ToasterService }, { type: i8.HitBusinessPartnerGroupService }, { type: i0.ChangeDetectorRef }, { type: i7.ConfirmationService }, { type: i9.HitSharedService }, { type: i10.HitFileDocumentTypeService }, { type: i11.ActivatedRoute }, { type: i1.LocalizationService }]; }, propDecorators: { dxInboundInvoiceInstance: [{
|
|
1119
1265
|
type: ViewChild,
|
|
1120
1266
|
args: ['dxInboundInvoiceInstance', { static: false }]
|
|
@@ -1131,4 +1277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
1131
1277
|
type: ViewChild,
|
|
1132
1278
|
args: ['tabPanel', { static: false }]
|
|
1133
1279
|
}] } });
|
|
1134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWluYm91bmQtaW52b2ljZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lLWRvbnVzdW0vc3JjL2xpYi9jb21wb25lbnRzL2hpdC1pbmJvdW5kLWludm9pY2VzL2hpdC1pbmJvdW5kLWludm9pY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZS1kb251c3VtL3NyYy9saWIvY29tcG9uZW50cy9oaXQtaW5ib3VuZC1pbnZvaWNlcy9oaXQtaW5ib3VuZC1pbnZvaWNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUF1QyxNQUFNLGNBQWMsQ0FBQztBQUN2SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQTZDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUQsT0FBTyxXQUFXLE1BQU0sOEJBQThCLENBQUM7QUFHdkQsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtwRSxPQUFPLEVBQUUsUUFBUSxFQUFPLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCckMsTUFBTSxPQUFPLDBCQUEwQjtJQTBGbkMsWUFDb0IsSUFBaUIsRUFDaEIsT0FBaUMsRUFDakMsY0FBaUMsRUFDakMsa0JBQXNDLEVBQ3RDLHdCQUFrRCxFQUNsRCxXQUF3QixFQUN4QixxQkFBa0MsRUFDbEMsc0JBQW1DLEVBQ25DLGNBQThCLEVBQzlCLDJCQUEyRCxFQUMzRCxHQUFzQixFQUN0QixZQUFpQyxFQUNqQyxnQkFBa0MsRUFDbEMsdUJBQW1ELEVBQ25ELEtBQXFC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RUFBRSxDQUFDO29sQkFhbEIsd0JBQXdCO3NCQUFqRixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDRSx3QkFBd0I7c0JBQWpGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNLLDJCQUEyQjtzQkFBdkYsU0FBUzt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1YsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0wsUUFBUTtzQkFBakQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQUJQLCBpc051bGxPckVtcHR5LCBpc051bGxPclVuZGVmaW5lZCwgTGlzdFNlcnZpY2UsIExvY2FsaXphdGlvblNlcnZpY2UsIFBhZ2VkUmVzdWx0RHRvIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZC9leHRlbnNpb25zJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25Jbml0LCBQaXBlLCBQaXBlVHJhbnNmb3JtLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiRGF0ZUFkYXB0ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IER4RGF0YUdyaWRDb21wb25lbnQsIER4VGFiUGFuZWxDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQgQ3VzdG9tU3RvcmUgZnJvbSAnZGV2ZXh0cmVtZS9kYXRhL2N1c3RvbV9zdG9yZSc7XHJcbmltcG9ydCB7IEhpdEluYm91bmRJbnZvaWNlU2VydmljZSB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9oaXQtaW5ib3VuZC1pbnZvaWNlcy9oaXQtaW5ib3VuZC1pbnZvaWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIaXRJbnZvaWNlU2VydmljZSB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9oaXQtaW52b2ljZXMvaGl0LWludm9pY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IGZvcm1hdERhdGUsIGdldExvY2FsZURhdGVGb3JtYXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIaXRCdXNpbmVzc1BhcnRuZXJHcm91cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvaGl0LWJ1c2luZXNzLXBhcnRuZXItZ3JvdXBzL2hpdC1idXNpbmVzcy1wYXJ0bmVyLWdyb3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCcEFkZHJlc3MsIENvbm5lY3RvckRyYWZ0RG9jdW1lbnREdG8sIENvbm5lY3RvckRyYWZ0RG9jdW1lbnRMaW5lRHRvLCBDb25uZWN0b3JNdWx0aXBsZUVtcHR5RHJhZnREdG8sIENvbm5lY3RvclB1cmNoYXNlSW52b2ljZURvY3VtZW50RHRvLCBDb25uZWN0b3JQdXJjaGFzZUludm9pY2VEb2N1bWVudExpbmVEdG8sIENyZWF0ZUJ1c2luZXNzUGFydG5lclN1cHBsaWVyRHRvLCBPcGVuRG9jdW1lbnREdG8gfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvaGl0LWluYm91bmQtaW52b2ljZXMvbW9kZWxzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBIaXRCcmFuY2hlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvaGl0LWJyYW5jaGVzL2hpdC1icmFuY2guc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdFBhcmFtc0dlbmVyYWxzU2VydmljZSB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9oaXQtcGFyYW1zLWdlbmVyYWxzL2hpdC1wYXJhbXMtZ2VuZXJhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGl0U2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9zaGFyZWQvaGl0LXNoYXJlZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGl0RmlsZURvY3VtZW50VHlwZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvaGl0LWZpbGUtZG9jdW1lbnQtdHlwZS9oaXQtZmlsZS1kb2N1bWVudC10eXBlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG50eXBlIEluYm91bmRJbnZvaWNlVmlld01vZGUgPSAndW5wcm9jZXNzZWQnIHwgJ3Byb2Nlc3NlZCc7XHJcbnR5cGUgUHJvY2Vzc2VkSW52b2ljZUZpbHRlciA9ICdkcmFmdCcgfCAncmVnaXN0ZXJlZCcgfCAnbWFudWFsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItaW5ib3VuZC1pbnZvaWNlJyxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcclxuICAgIHByb3ZpZGVyczogW0xpc3RTZXJ2aWNlLCB7IHByb3ZpZGU6IE5nYkRhdGVBZGFwdGVyLCB1c2VDbGFzczogRGF0ZUFkYXB0ZXIgfV0sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGl0LWluYm91bmQtaW52b2ljZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZXM6IFtdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGl0SW5ib3VuZEludm9pY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1bnByb2Nlc3NlZFN0YXR1c2VzID0gWzYwMCwgNzAwXTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VkU3RhdHVzZXMgPSBbNjUwLCA3NTAsIDY3MCwgNzcwLCA2ODAsIDc4MF07XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NlZFN0YXR1c0dyb3VwczogUmVjb3JkPFByb2Nlc3NlZEludm9pY2VGaWx0ZXIsIG51bWJlcltdPiA9IHtcclxuICAgICAgICBkcmFmdDogWzY1MCwgNzUwXSxcclxuICAgICAgICByZWdpc3RlcmVkOiBbNjcwLCA3NzBdLFxyXG4gICAgICAgIG1hbnVhbDogWzY4MCwgNzgwXVxyXG4gICAgfTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdkeEluYm91bmRJbnZvaWNlSW5zdGFuY2UnLCB7IHN0YXRpYzogZmFsc2UgfSkgZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlOiBEeERhdGFHcmlkQ29tcG9uZW50XHJcbiAgICBAVmlld0NoaWxkKCdkeFB1cmNoYXNlT3JkZXJEb2N1bWVudHMnLCB7IHN0YXRpYzogZmFsc2UgfSkgZHhQdXJjaGFzZU9yZGVyRG9jdW1lbnRzOiBEeERhdGFHcmlkQ29tcG9uZW50XHJcbiAgICBAVmlld0NoaWxkKCdkeFB1cmNoYXNlRGVzcGF0Y2hEb2N1bWVudHMnLCB7IHN0YXRpYzogZmFsc2UgfSkgZHhQdXJjaGFzZURlc3BhdGNoRG9jdW1lbnRzOiBEeERhdGFHcmlkQ29tcG9uZW50XHJcbiAgICBAVmlld0NoaWxkKCdkeERvY3VtZW50TGluZXMnLCB7IHN0YXRpYzogZmFsc2UgfSkgZHhEb2N1bWVudExpbmVzOiBEeERhdGFHcmlkQ29tcG9uZW50XHJcbiAgICBAVmlld0NoaWxkKCd0YWJQYW5lbCcsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJQYW5lbDogRHhUYWJQYW5lbENvbXBvbmVudFxyXG5cclxuICAgIGluYm91bmRJbnZvaWNlc0RhdGFTb3VyY2U6IGFueVxyXG4gICAgaW5ib3VuZEludm9pY2VTdGF0dXNMb29rdXA6IGFueVxyXG4gICAgaW5ib3VuZEludm9pY2VSZWNlaXZlclJlc3BvbnNlTG9va3VwOiBhbnlcclxuICAgIHZpZXdNb2RlOiBJbmJvdW5kSW52b2ljZVZpZXdNb2RlID0gJ3VucHJvY2Vzc2VkJztcclxuICAgIGlzRUFyY2hpdmUgPSBmYWxzZTtcclxuICAgIHNlbGVjdGVkUHJvY2Vzc2VkRmlsdGVyOiBQcm9jZXNzZWRJbnZvaWNlRmlsdGVyID0gbnVsbDtcclxuXHJcbiAgICBwYXJ0bmVyQXZhaWxhYmxlQWNjb3VudHM6IEFycmF5PHsgaWQ6IHN0cmluZywgdGV4dDogc3RyaW5nIH0+ID0gW107XHJcbiAgICBvYmplY3RUeXBlc0xvb2t1cDogQXJyYXk8eyBpZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfT4gPSBbXHJcbiAgICAgICAgeyBpZDogXCIyMFwiLCB0ZXh0OiBcIlNhdMSxbiBBbG1hIMSwcnNhbGl5ZXNpXCIgfSxcclxuICAgICAgICB7IGlkOiBcIjIyXCIsIHRleHQ6IFwiU2F0xLFuIEFsbWEgU2lwYXJpxZ9pXCIgfVxyXG4gICAgXTsgcGFydG5lckF2YWlsYWJsZVNlcmllczogW107XHJcbiAgICBwYXJ0bmVyQXZhaWxhYmxlR3JvdXBzOiBbXTtcclxuICAgIHBhcnRuZXJBdmFpbGFibGVDb3VudHJpZXM6IFtdO1xyXG4gICAgcGFydG5lckF2YWlsYWJsZVN0YXRlczogW107XHJcbiAgICBvcGVuRG9jdW1lbnRzRm9yUGFydG5lcjogW107XHJcbiAgICBpbnZvaWNlT2JqZWN0c0VudW1Mb29rdXA6IGFueTtcclxuICAgIGludm9pY2VGaWxlc0RhdGFTb3VyY2U6IGFueVxyXG4gICAgdXNlckNvbW1lbnRNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGlzU2F2aW5nQ29tbWVudDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIHB1cmNoYXNlT3JkZXJEb2N1bWVudHM6IFtdO1xyXG4gICAgZG9jdW1lbnRMaW5lczogT3BlbkRvY3VtZW50RHRvW10gPSBbXTtcclxuICAgIHB1cmNoYXNlRGVzcGF0Y2hEb2N1bWVudHM6IFtdO1xyXG4gICAgaXNNb2RhbEJ1c3lGb3JSZXNwb25zZSA9IGZhbHNlO1xyXG4gICAgaXNNb2RhbE9wZW5Gb3JSZXNwb25zZSA9IGZhbHNlO1xyXG4gICAgaXNNb2RhbEJ1c3lGb3JQYXJ0bmVyID0gZmFsc2U7XHJcbiAgICBpc01vZGFsT3BlbkZvclBhcnRuZXIgPSBmYWxzZTtcclxuICAgIGlzTW9kYWxCdXN5Rm9yT3BlbkRvY3MgPSBmYWxzZTtcclxuICAgIGlzTW9kYWxPcGVuRm9yT3BlbkRvY3MgPSBmYWxzZTtcclxuICAgIGlzTW9kYWxCdXN5Rm9yRG9jdW1lbnQgPSBmYWxzZTtcclxuICAgIGlzTW9kYWxPcGVuRm9yRG9jdW1lbnQgPSBmYWxzZTtcclxuICAgIGlzTG9hZGluZ1N0YXRlcyA9IGZhbHNlO1xyXG4gICAgaXNMb2FkaW5nU2VyaWVzID0gZmFsc2U7XHJcbiAgICBpc0xvYWRpbmdHcm91cHMgPSBmYWxzZTtcclxuICAgIGlzTG9hZGluZ0FjY291bnRzID0gZmFsc2U7XHJcbiAgICBpc0xvYWRpbmdDb3VudHJpZXMgPSBmYWxzZTtcclxuICAgIGlzRmlsZU1vZGFsT3BlbiA9IGZhbHNlO1xyXG5cclxuICAgIGZhdHVyYU9uaXpsZW1lOiBhbnk7XHJcbiAgICBmb3JtUmVzcG9uc2U6IEZvcm1Hcm91cDtcclxuICAgIGZvcm1QYXJ0bmVyOiBGb3JtR3JvdXA7XHJcbiAgICBmb3JtRG9jdW1lbnQ6IEZvcm1Hcm91cDtcclxuXHJcbiAgICBjb3VudHJ5R3JpZEJveFZhbHVlOiBhbnlcclxuICAgIGlzQ291bnRyeUdyaWRCb3hPcGVuZWQ6IGJvb2xlYW5cclxuXHJcbiAgICBzdGF0ZUdyaWRCb3hWYWx1ZTogYW55XHJcbiAgICBpc1N0YXRlR3JpZEJveE9wZW5lZDogYm9vbGVhblxyXG5cclxuICAgIHNlcmlhbEdyaWRCb3hWYWx1ZTogYW55XHJcbiAgICBpc1NlcmlhbEdyaWRCb3hPcGVuZWQ6IGJvb2xlYW5cclxuXHJcbiAgICBncm91cEdyaWRCb3hWYWx1ZTogYW55XHJcbiAgICBpc0dyb3VwR3JpZEJveE9wZW5lZDogYm9vbGVhblxyXG5cclxuICAgIGFjY291bnRHcmlkQm94VmFsdWU6IGFueVxyXG4gICAgaXNBY2NvdW50R3JpZEJveE9wZW5lZDogYm9vbGVhblxyXG5cclxuICAgIGJyYW5jaGVzRGF0YVNvdXJjZTogYW55O1xyXG4gICAgc2VsZWN0ZWRJbmJvdW5kSW52b2ljZTogYW55O1xyXG4gICAgY2l0aWVzOiBhbnk7XHJcbiAgICBjaXR5U2VydmljZTogYW55O1xyXG4gICAgaXNEcmFmdDogYW55O1xyXG4gICAgaXNCcmFuY2ggPSBmYWxzZTtcclxuXHJcbiAgICBkcmFmdFJlc3VsdHM6IGFueVtdID0gW107XHJcbiAgICByZXN1bHRQb3B1cFZpc2libGUgPSBmYWxzZTtcclxuICAgIGhhc1ZhbGlkU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICBicmFuY2hQb3B1cFZpc2libGUgPSBmYWxzZTtcclxuICAgIHNlbGVjdGVkQnJhbmNoSWQ6IG51bWJlciA9IG51bGw7XHJcblxyXG5cclxuICAgIGludm9pY2VGaWxlTmFtZUxvb2t1cDogYW55O1xyXG4gICAgaXNGaWxlTW9kYWxCdXN5ID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGxpc3Q6IExpc3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZTogSGl0SW5ib3VuZEludm9pY2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW52b2ljZVNlcnZpY2U6IEhpdEludm9pY2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaGl0QnJhbmNoZXNTZXJ2aWNlOiBIaXRCcmFuY2hlc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBoaXRQYXJhbXNHZW5lcmFsc1NlcnZpY2U6IEhpdFBhcmFtc0dlbmVyYWxzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyRm9yUGFydG5lcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlckZvckRvY3VtZW50OiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGJ1c2luZXNzUGFydG5lckdyb3VwU2VydmljZTogSGl0QnVzaW5lc3NQYXJ0bmVyR3JvdXBTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGhpdFNoYXJlZFNlcnZpY2U6IEhpdFNoYXJlZFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmaWxlRG9jdW1lbnRUeXBlU2VydmljZTogSGl0RmlsZURvY3VtZW50VHlwZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmNvdW50cnlHcmlkQm94X2Rpc3BsYXlFeHByID0gdGhpcy5jb3VudHJ5R3JpZEJveF9kaXNwbGF5RXhwci5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZUdyaWRCb3hfZGlzcGxheUV4cHIgPSB0aGlzLnN0YXRlR3JpZEJveF9kaXNwbGF5RXhwci5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5zZXJpYWxHcmlkQm94X2Rpc3BsYXlFeHByID0gdGhpcy5zZXJpYWxHcmlkQm94X2Rpc3BsYXlFeHByLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLmdyb3VwR3JpZEJveF9kaXNwbGF5RXhwciA9IHRoaXMuZ3JvdXBHcmlkQm94X2Rpc3BsYXlFeHByLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLmFjY291bnRHcmlkQm94X2Rpc3BsYXlFeHByID0gdGhpcy5hY2NvdW50R3JpZEJveF9kaXNwbGF5RXhwci5iaW5kKHRoaXMpXHJcbiAgICB9XHJcbiAgICBjb3VudHJ5R3JpZEJveF9kaXNwbGF5RXhwcigpIHtcclxuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY291bnRyeUdyaWRCb3hWYWx1ZSkgJiYgIWlzTnVsbE9yRW1wdHkodGhpcy5jb3VudHJ5R3JpZEJveFZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1QYXJ0bmVyLmNvbnRyb2xzLnBhcnRuZXJDb3VudHJ5LnNldFZhbHVlKHRoaXMuY291bnRyeUdyaWRCb3hWYWx1ZVswXS5jb2RlKVxyXG4gICAgICAgICAgICB0aGlzLmdldFN0YXRlcygpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5jb3VudHJ5R3JpZEJveFZhbHVlWzBdLm5hbWV9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGVHcmlkQm94X2Rpc3BsYXlFeHByKCkge1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodGhpcy5zdGF0ZUdyaWRCb3hWYWx1ZSkgJiYgIWlzTnVsbE9yRW1wdHkodGhpcy5zdGF0ZUdyaWRCb3hWYWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtUGFydG5lci5jb250cm9scy5wYXJ0bmVyU3RhdGUuc2V0VmFsdWUodGhpcy5zdGF0ZUdyaWRCb3hWYWx1ZVswXS5jb2RlKVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5zdGF0ZUdyaWRCb3hWYWx1ZVswXS5uYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlcmlhbEdyaWRCb3hfZGlzcGxheUV4cHIoKSB7XHJcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLnNlcmlhbEdyaWRCb3hWYWx1ZSkgJiYgIWlzTnVsbE9yRW1wdHkodGhpcy5zZXJpYWxHcmlkQm94VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVBhcnRuZXIuY29udHJvbHMucGFydG5lclNlcmllcy5zZXRWYWx1ZSh0aGlzLnNlcmlhbEdyaWRCb3hWYWx1ZVswXS5zZXJpZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnNlcmlhbEdyaWRCb3hWYWx1ZVswXS5uYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwR3JpZEJveF9kaXNwbGF5RXhwcigpIHtcclxuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZ3JvdXBHcmlkQm94VmFsdWUpICYmICFpc051bGxPckVtcHR5KHRoaXMuZ3JvdXBHcmlkQm94VmFsdWUpKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZvcm1QYXJ0bmVyLmNvbnRyb2xzLnBhcnRuZXJHcm91cC5zZXRWYWx1ZSh0aGlzLmdyb3VwR3JpZEJveFZhbHVlWzBdLmNvZGUpXHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmdyb3VwR3JpZEJveFZhbHVlWzBdLm5hbWV9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWNjb3VudEdyaWRCb3hfZGlzcGxheUV4cHIoKSB7XHJcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLmFjY291bnRHcmlkQm94VmFsdWUpICYmICFpc051bGxPckVtcHR5KHRoaXMuYWNjb3VudEdyaWRCb3hWYWx1ZSkpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVBhcnRuZXIuY29udHJvbHMucGFydG5lckFjY291bnQuc2V0VmFsdWUodGhpcy5hY2NvdW50R3JpZEJveFZhbHVlWzBdLmlkKVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5hY2NvdW50R3JpZEJveFZhbHVlWzBdLnRleHR9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiBzaG93QWxsRmlsZXMocmVjb3JkKSB7XHJcbiAgICAgICAgIHRoaXMuaW52b2ljZUZpbGVzRGF0YVNvdXJjZSA9IHRoaXMuaW52b2ljZVNlcnZpY2UuTG9hZEludm9pY2VGaWxlcyhyZWNvcmQudXVJZClcclxuICAgICAgICAgdGhpcy5pc0ZpbGVNb2RhbE9wZW4gPSB0cnVlO1xyXG4gICAgIH0qL1xyXG4gICAgb25Db3VudHJ5R3JpZEJveE9wdGlvbkNoYW5nZWQoZSkge1xyXG4gICAgICAgIGlmIChlLm5hbWUgPT09ICd2YWx1ZScpIHtcclxuXHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzQ291bnRyeUdyaWRCb3hPcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblN0YXRlR3JpZEJveE9wdGlvbkNoYW5nZWQoZSkge1xyXG4gICAgICAgIGlmIChlLm5hbWUgPT09ICd2YWx1ZScpIHtcclxuXHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzU3RhdGVHcmlkQm94T3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TZXJpYWxHcmlkQm94T3B0aW9uQ2hhbmdlZChlKSB7XHJcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ3ZhbHVlJykge1xyXG5cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNTZXJpYWxHcmlkQm94T3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Hcm91cEdyaWRCb3hPcHRpb25DaGFuZ2VkKGUpIHtcclxuICAgICAgICBpZiAoZS5uYW1lID09PSAndmFsdWUnKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0dyb3VwR3JpZEJveE9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQWNjb3VudEdyaWRCb3hPcHRpb25DaGFuZ2VkKGUpIHtcclxuICAgICAgICBpZiAoZS5uYW1lID09PSAndmFsdWUnKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0FjY291bnRHcmlkQm94T3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS52aWV3TW9kZSA/PyAndW5wcm9jZXNzZWQnO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJlSW5ib3VuZEludm9pY2VzRGF0YVNvdXJjZSgpO1xyXG4gICAgICAgIHRoaXMuaW52b2ljZVNlcnZpY2UuZ2V0U3RhdHVzZXMoKS5zdWJzY3JpYmUobGlzdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5ib3VuZEludm9pY2VTdGF0dXNMb29rdXAgPSB0aGlzLmlzUHJvY2Vzc2VkVmlld1xyXG4gICAgICAgICAgICAgICAgPyBsaXN0Lm1hcChzdGF0dXMgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0UHJvY2Vzc2VkU3RhdHVzRGlzcGxheU5hbWUoc3RhdHVzLmlkKSA/PyBzdGF0dXMuZGlzcGxheU5hbWVcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgOiBsaXN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlsZURvY3VtZW50VHlwZVNlcnZpY2UuZ2V0RmlsZURvY3VtZW50VHlwZXMoKS5zdWJzY3JpYmUobGlzdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW52b2ljZUZpbGVOYW1lTG9va3VwID0gbGlzdDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmludm9pY2VTZXJ2aWNlLmdldFJlY2VpdmVyUmVzcG9uc2VzKCkuc3Vic2NyaWJlKGxpc3QgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluYm91bmRJbnZvaWNlUmVjZWl2ZXJSZXNwb25zZUxvb2t1cCA9IGxpc3Q7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5oaXRQYXJhbXNHZW5lcmFsc1NlcnZpY2UuZ2V0UGFyYW1zR2VuZXJhbCgpLnN1YnNjcmliZShkYXRhID0+IHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNCcmFuY2ggPSBkYXRhLmlzQnJhbmNoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNCcmFuY2gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGl0QnJhbmNoZXNTZXJ2aWNlLmdldEJyYW5jaGVzKCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJhbmNoZXNEYXRhU291cmNlID0gZGF0YTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nQ291bnRyaWVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0Q291bnRyaWVzKClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdDb3VudHJpZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAobGlzdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFydG5lckF2YWlsYWJsZUNvdW50cmllcyA9IGxpc3Q7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCLDnGxrZWxlciB5w7xrbGVuaXJrZW4gYmlyIGhhdGEgb2x1xZ90dS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjb3VudHJpZXM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdHcm91cHMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYnVzaW5lc3NQYXJ0bmVyR3JvdXBTZXJ2aWNlLmdldFN1cHBsaWVyR3JvdXBzKClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdHcm91cHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAobGlzdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFydG5lckF2YWlsYWJsZUdyb3VwcyA9IGxpc3Q7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJQYXJ0bmVyIGdydXBsYXLEsSB5w7xrbGVuaXJrZW4gYmlyIGhhdGEgb2x1xZ90dS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBncm91cHM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnZvaWNlU2VydmljZS5nZXRTYXBPYmplY3RzKCkuc3Vic2NyaWJlKGxpc3QgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmludm9pY2VPYmplY3RzRW51bUxvb2t1cCA9IGxpc3Q7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNQcm9jZXNzZWRWaWV3KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdNb2RlID09PSAncHJvY2Vzc2VkJztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGFnZVRpdGxlS2V5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNQcm9jZXNzZWRWaWV3XHJcbiAgICAgICAgICAgID8gJ2VEb251c3VtOjpQcm9jZXNzZWRJbmJvdW5kSW52b2ljZXMnXHJcbiAgICAgICAgICAgIDogJ2VEb251c3VtOjpVbnByb2Nlc3NlZEluYm91bmRJbnZvaWNlcyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBhZ2VEZXNjcmlwdGlvbktleSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzUHJvY2Vzc2VkVmlld1xyXG4gICAgICAgICAgICA/ICdlRG9udXN1bTo6UHJvY2Vzc2VkSW5ib3VuZEludm9pY2VzRGVzY3JpcHRpb24nXHJcbiAgICAgICAgICAgIDogJ2VEb251c3VtOjpVbnByb2Nlc3NlZEluYm91bmRJbnZvaWNlc0Rlc2NyaXB0aW9uJztcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RJbnZvaWNlVHlwZShpc0VBcmNoaXZlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFQXJjaGl2ZSA9PT0gaXNFQXJjaGl2ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRUFyY2hpdmUgPSBpc0VBcmNoaXZlO1xyXG4gICAgICAgIHRoaXMucmVsb2FkSW5ib3VuZEludm9pY2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0UHJvY2Vzc2VkRmlsdGVyKGZpbHRlcjogUHJvY2Vzc2VkSW52b2ljZUZpbHRlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvY2Vzc2VkRmlsdGVyID09PSBmaWx0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2Nlc3NlZEZpbHRlciA9IGZpbHRlcjtcclxuICAgICAgICB0aGlzLnJlbG9hZEluYm91bmRJbnZvaWNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uZmlndXJlSW5ib3VuZEludm9pY2VzRGF0YVNvdXJjZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzb3VyY2VTdG9yZSA9IHRoaXMuc2VydmljZS5Mb2FkSW5ib3VuZEludm9pY2VzO1xyXG5cclxuICAgICAgICB0aGlzLmluYm91bmRJbnZvaWNlc0RhdGFTb3VyY2UgPSBuZXcgQ3VzdG9tU3RvcmUoe1xyXG4gICAgICAgICAgICBrZXk6ICdpZCcsXHJcbiAgICAgICAgICAgIGxvYWQ6IGxvYWRPcHRpb25zID0+IHNvdXJjZVN0b3JlLmxvYWQoe1xyXG4gICAgICAgICAgICAgICAgLi4ubG9hZE9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IHRoaXMuY29tYmluZUZpbHRlcnModGhpcy5nZXRSZXF1aXJlZEluYm91bmRJbnZvaWNlRmlsdGVyKCksIGxvYWRPcHRpb25zLmZpbHRlcilcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJlcXVpcmVkSW5ib3VuZEludm9pY2VGaWx0ZXIoKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1c2VzID0gdGhpcy5pc1Byb2Nlc3NlZFZpZXdcclxuICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkUHJvY2Vzc2VkRmlsdGVyXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc2VkU3RhdHVzR3JvdXBzW3RoaXMuc2VsZWN0ZWRQcm9jZXNzZWRGaWx0ZXJdXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMucHJvY2Vzc2VkU3RhdHVzZXNcclxuICAgICAgICAgICAgOiB0aGlzLnVucHJvY2Vzc2VkU3RhdHVzZXM7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzRmlsdGVyID0gc3RhdHVzZXNcclxuICAgICAgICAgICAgLm1hcChzdGF0dXMgPT4gWydzdGF0dXMnLCAnPScsIHN0YXR1c10pXHJcbiAgICAgICAgICAgIC5yZWR1Y2UoKGZpbHRlciwgY3VycmVudCkgPT4gZmlsdGVyID8gW2ZpbHRlciwgJ29yJywgY3VycmVudF0gOiBjdXJyZW50LCBudWxsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFtzdGF0dXNGaWx0ZXIsICdhbmQnLCBbJ2lzRUFyY2hpdmUnLCAnPScsIHRoaXMuaXNFQXJjaGl2ZV1dO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tYmluZUZpbHRlcnMocmVxdWlyZWRGaWx0ZXI6IGFueVtdLCBncmlkRmlsdGVyOiBhbnkpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIGdyaWRGaWx0ZXIgPyBbcmVxdWlyZWRGaWx0ZXIsICdhbmQnLCBncmlkRmlsdGVyXSA6IHJlcXVpcmVkRmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVsb2FkSW5ib3VuZEludm9pY2VzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UucGFnZUluZGV4KDApO1xyXG4gICAgICAgIHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFByb2Nlc3NlZFN0YXR1c0Rpc3BsYXlOYW1lKHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9jZXNzZWRTdGF0dXNHcm91cHMuZHJhZnQuaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ2VEb251c3VtOjpQcm9jZXNzZWRJbmJvdW5kSW52b2ljZURyYWZ0U3RhdHVzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NlZFN0YXR1c0dyb3Vwcy5yZWdpc3RlcmVkLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdlRG9udXN1bTo6UHJvY2Vzc2VkSW5ib3VuZEludm9pY2VSZWdpc3RlcmVkU3RhdHVzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NlZFN0YXR1c0dyb3Vwcy5tYW51YWwuaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ2VEb251c3VtOjpQcm9jZXNzZWRJbmJvdW5kSW52b2ljZU1hbnVhbFN0YXR1cycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldEluYm91bmRJbnZvaWNlKCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRJbmJvdW5kSW52b2ljZShuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlLnJlZnJlc2goKSlcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbnZvaWNlUHJldmlldyhyZWNvcmQpIHtcclxuICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRJbmJvdW5kSW52b2ljZVZpZXcocmVjb3JkLnV1SWQpLnN1YnNjcmliZShpdGVtID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaXRTaGFyZWRTZXJ2aWNlLnByZXZpZXdGaWxlKGl0ZW0uY29udGVudCwgaXRlbS5maWxlbmFtZSk7XHJcblxyXG4gICAgICAgICAgICAvKmNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGBkYXRhOiR7aXRlbS5taW1lVHlwZX07YmFzZTY0LCR7aXRlbS5jb250ZW50fWA7XHJcbiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHNvdXJjZTtcclxuICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGAke2l0ZW0uZmlsZW5hbWV9YDtcclxuICAgICAgICAgICAgbGluay5jbGljaygpOyovXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB2aWV3UERGc011bHRpcGxlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlXHJcbiAgICAgICAgICAgIC5nZXRWaXNpYmxlUm93cygpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBpLmlzU2VsZWN0ZWQgPT0gdHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybihcIkzDvHRmZW4gZW4gYXogYmlyIGZhdHVyYSBzZcOnaW5pei5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlbGVjdGVkUm93cy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGludm9pY2VObyA9IHJvdy5kYXRhLmludm9pY2VJZDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5nZXRJbmJvdW5kSW52b2ljZVZpZXcocm93LmRhdGEudXVJZCkuc3Vic2NyaWJlKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW5CYXNlNjQgPSBpdGVtLmNvbnRlbnQuaW5jbHVkZXMoJywnKVxyXG4gICAgICAgICAgICAgICAgICAgID8gaXRlbS5jb250ZW50LnNwbGl0KCcsJylbMV1cclxuICAgICAgICAgICAgICAgICAgICA6IGl0ZW0uY29udGVudDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IFVpbnQ4QXJyYXkuZnJvbShhdG9iKGNsZWFuQmFzZTY0KSwgYyA9PiBjLmNoYXJDb2RlQXQoMCkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtieXRlc10sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RhYiA9IHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycsICdub29wZW5lcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1RhYikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhYi5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhYi5kb2N1bWVudC50aXRsZSA9IGludm9pY2VObyA/PyByb3cuZGF0YS51dUlkO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRmF0dXJhIG51bWFyYXPEsXlsYSBpbmRpclxyXG4gICAgICAgICAgICAgICAgLyogICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgIGEuZG93bmxvYWQgPSBgJHtpbnZvaWNlTm8gPz8gcm93LmRhdGEudXVJZH0ucGRmYDtcclxuICAgICAgICAgICAgICAgICAgICAgYS5jbGljaygpOyAqL1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpLCA2MF8wMDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSb3dDb21tZW50KHJlY29yZDogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXJlY29yZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJDb21tZW50TWFwW3JlY29yZC5pZF0gPz8gcmVjb3JkLnVzZXJDb21tZW50ID8/ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVXNlckNvbW1lbnRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIHJlY29yZDogYW55KSB7XHJcbiAgICAgICAgaWYgKCFyZWNvcmQgfHwgIXJlY29yZC5pZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXNlckNvbW1lbnRNYXBbcmVjb3JkLmlkXSA9ICh2YWx1ZSA/PyAnJykudHJpbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVVc2VyQ29tbWVudChyZWNvcmQ6IGFueSkge1xyXG4gICAgICAgIGlmICghcmVjb3JkIHx8ICFyZWNvcmQuaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29tbWVudCA9ICh0aGlzLnVzZXJDb21tZW50TWFwW3JlY29yZC5pZF0gPz8gcmVjb3JkLnVzZXJDb21tZW50ID8/ICcnKS50cmltKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGNvbW1lbnQubGVuZ3RoID4gMjU0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignQcOnxLFrbGFtYSBlbiBmYXpsYSAyNTQga2FyYWt0ZXIgb2xhYmlsaXIuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNTYXZpbmdDb21tZW50W3JlY29yZC5pZF0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5zYXZlSW52b2ljZVVzZXJDb21tZW50KHJlY29yZC5pZCwgY29tbWVudClcclxuICAgICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NhdmluZ0NvbW1lbnRbcmVjb3JkLmlkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKCdBw6fEsWtsYW1hIGtheWRlZGlsZGkuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyQ29tbWVudE1hcFtyZWNvcmQuaWRdID0gY29tbWVudDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnVzZXJDb21tZW50ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnVzZXJDb21tZW50ID0gY29tbWVudDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKCdBw6fEsWtsYW1hIGtheWRlZGlsaXJrZW4gYmlyIGhhdGEgb2x1xZ90dS4nKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgdXNlciBjb21tZW50OicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblJlc3BvbnNlTW9kYWwocmVjb3JkKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYnVpbGRGb3JtKHJlY29yZCk7XHJcbiAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvclJlc3BvbnNlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZvcm0ocmVjb3JkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtUmVzcG9uc2UgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgaWQ6IHJlY29yZC5pZCxcclxuICAgICAgICAgICAgaW52b2ljZVVVSUQ6IHJlY29yZC51dUlkLFxyXG4gICAgICAgICAgICBpc0FjY2VwdGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kSW52b2ljZVJlc3BvbnNlKHJlc3BvbnNlOiBib29sZWFuKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1SZXNwb25zZS5pbnZhbGlkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmZvcm1SZXNwb25zZS52YWx1ZVxyXG5cclxuICAgICAgICB0aGlzLnNlcnZpY2Uuc2VuZEludm9pY2VSZXNwb25zZShyZXN1bHQuaW52b2ljZVVVSUQsIHJlc3BvbnNlLCByZXN1bHQuaWQpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvclJlc3BvbnNlID0gZmFsc2U7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBvcGVuUGFydG5lck1vZGFsKHJlY29yZCkge1xyXG5cclxuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmluZm8oXCJNdWhhdGFwIGtvbnRyb2zDvCB5YXDEsWzEsXlvciwgbMO8dGZlbiBiZWtsZXlpbml6LlwiKVxyXG4gICAgICAgIGxldCBjYXJkVHlwZSA9IFwiY1N1cHBsaWVyXCI7XHJcbiAgICAgICAgaWYgKHJlY29yZC5pbnZvaWNlVHlwZUNvZGUgPT0gXCJJQURFXCIpXHJcbiAgICAgICAgICAgIGNhcmRUeXBlID0gXCJjQ3VzdG9tZXJcIjtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuY2hlY2tCdXNpbmVzc1BhcnRuZXJFeGlzdChyZWNvcmQuYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuLGNhcmRUeXBlKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGb3JtRm9yUGFydG5lcihyZWNvcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IocmVjb3JkLmFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrbiArIFwiIG51bWFyYWzEsSBzYXTEsWPEsSB6YXRlbiBtZXZjdXQuXCIpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGVzKCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nU3RhdGVzID0gdHJ1ZTtcclxuICAgICAgICAvLyDDlm5jZSBtZXZjdXQgc3RhdGUgc2XDp2ltaW5pIHRlbWl6bGVcclxuICAgICAgICB0aGlzLmZvcm1QYXJ0bmVyLmNvbnRyb2xzLnBhcnRuZXJTdGF0ZS5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgdGhpcy5wYXJ0bmVyQXZhaWxhYmxlU3RhdGVzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRTdGF0ZXModGhpcy5mb3JtUGFydG5lci5jb250cm9scy5wYXJ0bmVyQ291bnRyeS52YWx1ZSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdTdGF0ZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAobGlzdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFydG5lckF2YWlsYWJsZVN0YXRlcyA9IGxpc3Q7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCLEsGwvZXlhbGV0IGJpbGdpbGVyaSB5w7xrbGVuaXJrZW4gYmlyIGhhdGEgb2x1xZ90dS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzdGF0ZXM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlRm9ybVBhcnRuZXIoKSB7XHJcbiAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvclBhcnRuZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yUGFydG5lciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9ybVBhcnRuZXIucmVzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVCdXNpbmVzc1BhcnRuZXIoKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1QYXJ0bmVyLmludmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvclBhcnRuZXIgPSB0cnVlO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdER0b0FkZHJlc3NlczogQnBBZGRyZXNzW10gPSBbXVxyXG4gICAgICAgIHJlcXVlc3REdG9BZGRyZXNzZXMucHVzaCh7XHJcbiAgICAgICAgICAgIGFkZHJlc3NOYW1lOiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ucGFydG5lckFkZHJlc3M/LnZhbHVlLFxyXG4gICAgICAgICAgICBzdHJlZXQ6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyU3RyZWV0Py52YWx1ZSxcclxuICAgICAgICAgICAgYmxvY2s6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyQmxvY2s/LnZhbHVlLFxyXG4gICAgICAgICAgICB6aXBDb2RlOiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ucGFydG5lclppcENvZGU/LnZhbHVlLFxyXG4gICAgICAgICAgICBjaXR5OiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ucGFydG5lckNpdHk/LnZhbHVlLFxyXG4gICAgICAgICAgICBjb3VudHk6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyQ291bnR5Py52YWx1ZSxcclxuICAgICAgICAgICAgY291bnRyeTogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJDb3VudHJ5Py52YWx1ZSxcclxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyU3RhdGU/LnZhbHVlLFxyXG4gICAgICAgICAgICBhZGRyZXNzVHlwZTogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJBZGRyZXNzVHlwZT8udmFsdWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3REdG86IENyZWF0ZUJ1c2luZXNzUGFydG5lclN1cHBsaWVyRHRvID0ge1xyXG4gICAgICAgICAgICBjYXJkQ29kZTogXCJcIixcclxuICAgICAgICAgICAgdW5pZmllZEZlZGVyYWxUYXhJRDogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnZrbj8udmFsdWUsXHJcbiAgICAgICAgICAgIGNhcmROYW1lOiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ubmFtZT8udmFsdWUsXHJcbiAgICAgICAgICAgIGNhcmRUeXBlOiBcIlNcIixcclxuICAgICAgICAgICAgY3VycmVuY3k6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyQ3VycmVuY3k/LnZhbHVlLFxyXG4gICAgICAgICAgICBkZWJpdG9yQWNjb3VudDogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJBY2NvdW50Py52YWx1ZSxcclxuICAgICAgICAgICAgc2VyaWVzOiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ucGFydG5lclNlcmllcz8udmFsdWUsXHJcbiAgICAgICAgICAgIGdyb3VwQ29kZTogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJHcm91cD8udmFsdWUsXHJcbiAgICAgICAgICAgIHdlYnNpdGU6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyV2ViU2l0ZVVSST8udmFsdWUsXHJcbiAgICAgICAgICAgIGFkZGl0aW9uYWxJRDogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJBZGRJZD8udmFsdWUsXHJcbiAgICAgICAgICAgIGJwQWRkcmVzc2VzOiByZXF1ZXN0RHRvQWRkcmVzc2VzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZUJ1c2luZXNzUGFydG5lckZvclN1cHBsaWVyKHJlcXVlc3REdG8pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZUZvcm1QYXJ0bmVyKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcyhyZXN1bHQuY2FyZENvZGUgKyBcIiBrb2RsdSBtdWhhdGFwIGJhxZ9hcsSxeWxhIG9sdcWfdHVydWxkdS5cIik7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJNdWhhdGFwIG9sdcWfdHVydWx1cmtlbiBiaXIgaGF0YSBvbHXFn3R1LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdNdWhhdGFwIG9sdcWfdHVydWx1cmtlbiBiaXIgaGF0YSBvbHXFn3R1OicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGb3JtRm9yUGFydG5lcihyZWNvcmQpIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0UGFydG5lckRldGFpbHMocmVjb3JkLmlkKS5zdWJzY3JpYmUoaW52b2ljZSA9PiB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZvcm1QYXJ0bmVyID0gdGhpcy5mb3JtQnVpbGRlckZvclBhcnRuZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgdmtuOiBbcmVjb3JkLmFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrbiA/PyBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogW3JlY29yZC5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eU5hbWUgPz8gXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgICAgIHBhcnRuZXJDdXJyZW5jeTogW3JlY29yZC5kb2N1bWVudEN1cnJlbmN5Q29kZSA/PyBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICAgICAgcGFydG5lckFjY291bnQ6IFtcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICAgICAgcGFydG5lclNlcmllczogW1wiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyR3JvdXA6IFtcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICAgICAgcGFydG5lckVtYWlsOiBbaW52b2ljZT8uYWNjb3VudGluZ1N1cHBsaWVyUGFydHk/LnBhcnR5Py5jb250YWN0Py5lbGVjdHJvbmljTWFpbD8udmFsdWUgPz8gXCJcIl0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyV2ViU2l0ZVVSSTogW2ludm9pY2U/LmFjY291bnRpbmdTdXBwbGllclBhcnR5Py5wYXJ0eT8ud2Vic2l0ZVVSST8udmFsdWUgPz8gXCJcIl0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyQWRkSWQ6IFtpbnZvaWNlPy5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eT8ucGFydHk/LnBhcnR5VGF4U2NoZW1lPy50YXhTY2hlbWU/Lm5hbWU/LnZhbHVlID8/IFwiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyQWRkcmVzc1R5cGU6IFwiQlwiLFxyXG4gICAgICAgICAgICAgICAgcGFydG5lckFkZHJlc3M6IFwiRmF0dXJhIEFkcmVzaVwiLFxyXG4gICAgICAgICAgICAgICAgcGFydG5lclN0cmVldDogW2ludm9pY2U/LmFjY291bnRpbmdTdXBwbGllclBhcnR5Py5wYXJ0eT8ucG9zdGFsQWRkcmVzcz8uc3RyZWV0TmFtZT8udmFsdWUgPz8gXCJcIl0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyQmxvY2s6IFtpbnZvaWNlPy5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eT8ucGFydHk/LnBvc3RhbEFkZHJlc3M/LmJsb2NrTmFtZT8udmFsdWUgPz8gXCJcIl0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyQ2l0eTogW2ludm9pY2U/LmFjY291bnRpbmdTdXBwbGllclBhcnR5Py5wYXJ0eT8ucG9zdGFsQWRkcmVzcz8uY2l0eU5hbWU/LnZhbHVlID8/IFwiXCJdLFxyXG4gICAgICAgICAgICAgICAgcGFydG5lclppcENvZGU6IFtpbnZvaWNlPy5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eT8ucGFydHk/LnBvc3RhbEFkZHJlc3M/LnBvc3RhbFpvbmU/LnZhbHVlID8/IFwiXCJdLFxyXG4gICAgICAgICAgICAgICAgcGFydG5lckNvdW50eTogW2ludm9pY2U/LmFjY291bnRpbmdTdXBwbGllclBhcnR5Py5wYXJ0eT8ucG9zdGFsQWRkcmVzcz8uY2l0eVN1YmRpdmlzaW9uTmFtZT8udmFsdWUgPz8gXCJcIl0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyU3RhdGU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyQ291bnRyeTogXCJcIlxyXG5cclxuICAgICAgICAgICAgICAgIC8vcGFydG5lckNpdHk6IGludm9pY2VEZXRhaWxzLlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvclBhcnRuZXIgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmlzTG9hZGluZ0FjY291bnRzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlcmlhbEdyaWRCb3hWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5ncm91cEdyaWRCb3hWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZUdyaWRCb3hWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5jb3VudHJ5R3JpZEJveFZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLmFjY291bnRHcmlkQm94VmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRCYW5rQWNjb3VudEJ5Q3VycmVuY3kocmVjb3JkLmRvY3VtZW50Q3VycmVuY3lDb2RlKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0FjY291bnRzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGxpc3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRuZXJBdmFpbGFibGVBY2NvdW50cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0bmVyQXZhaWxhYmxlQWNjb3VudHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZWxlbWVudC5hY2N0Q29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGVsZW1lbnQuYWNjdENvZGUgKyBcIiBcIiArIGVsZW1lbnQuYWNjdE5hbWUudG9VcHBlckNhc2UoKSArIFwiIFwiICsgZWxlbWVudC5hY3RDdXJyLnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJCYW5rYSBoZXNhcGxhcsSxIHnDvGtsZW5pcmtlbiBiaXIgaGF0YSBvbHXFn3R1LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGFjY291bnRzOicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nU2VyaWVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0UGFydG5lck51bWJlcmluZ1NlcmllcygpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU2VyaWVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGxpc3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRuZXJBdmFpbGFibGVTZXJpZXMgPSBsaXN0O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFwiU2VyaSBudW1hcmFsYXLEsSB5w7xrbGVuaXJrZW4gYmlyIGhhdGEgb2x1xZ90dS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzZXJpZXM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJ0bmVyQXZhaWxhYmxlU3RhdGVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGb3JtRm9yRG9jdW1lbnQoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtRG9jdW1lbnQgPSB0aGlzLmZvcm1CdWlsZGVyRm9yRG9jdW1lbnQuZ3JvdXAoe1xyXG4gICAgICAgICAgICBzZWxlY3RlZEJyYW5jaDogdGhpcy5icmFuY2hlc0RhdGFTb3VyY2U/LmZpbHRlcihwID0+IHAuaXNNYWluKVswXS5jb2RlID8/IFwiXCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRHJhZnRGb3JtKHJlY29yZCkge1xyXG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuaW5mbyhcIk11aGF0YXAga29udHJvbMO8IHlhcMSxbMSxeW9yLCBsw7x0ZmVuIGJla2xleWluaXouXCIpXHJcbiAgICAgICAgIGxldCBjYXJkVHlwZSA9IFwiY1N1cHBsaWVyXCI7XHJcbiAgICAgICAgaWYgKHJlY29yZC5pbnZvaWNlVHlwZUNvZGUgPT0gXCJJQURFXCIpXHJcbiAgICAgICAgICAgIGNhcmRUeXBlID0gXCJjQ3VzdG9tZXJcIjtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuY2hlY2tCdXNpbmVzc1BhcnRuZXJFeGlzdChyZWNvcmQuYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuLGNhcmRUeXBlKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCLEsGxnaWxpIFZLTid5ZSBhaXQgKFwiICsgcmVjb3JkLmFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrbiArIFwiKSBtdWhhdGFwIGJ1bHVuYW1hZMSxLCBsw7x0ZmVuIMO2bmNlIG11aGF0YXAgb2x1xZ90dXJ1bi5cIilcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRm9ybUZvckRvY3VtZW50KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2UgPSByZWNvcmQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yRG9jdW1lbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RyYWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5Eb2N1bWVudEZvcm0ocmVjb3JkKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5pbmZvKFwiTXVoYXRhcCBrb250cm9sw7wgeWFwxLFsxLF5b3IsIGzDvHRmZW4gYmVrbGV5aW5pei5cIilcclxuICAgICAgICBsZXQgY2FyZFR5cGUgPSBcImNTdXBwbGllclwiO1xyXG4gICAgICAgIGlmIChyZWNvcmQuaW52b2ljZVR5cGVDb2RlID09IFwiSUFERVwiKVxyXG4gICAgICAgICAgICBjYXJkVHlwZSA9IFwiY0N1c3RvbWVyXCI7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNoZWNrQnVzaW5lc3NQYXJ0bmVyRXhpc3QocmVjb3JkLmFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrbixjYXJkVHlwZSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFwixLBsZ2lsaSBWS04neWUgYWl0IChcIiArIHJlY29yZC5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eVZrblRja24gKyBcIikgbXVoYXRhcCBidWx1bmFtYWTEsSwgbMO8dGZlbiDDtm5jZSBtdWhhdGFwIG9sdcWfdHVydW4uXCIpXHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEZvcm1Gb3JEb2N1bWVudCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlID0gcmVjb3JkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvckRvY3VtZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEcmFmdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3Blbk9wZW5Eb2N1bWVudHNGb3JtKCkge1xyXG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuaW5mbyhcIkHDp8SxayBiZWxnZSBzYXTEsXJsYXLEsSBzb3JndWxhbsSxeW9yLCBsw7x0ZmVuIGJla2xleWluaXouXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRPcGVuRG9jdW1lbnRzKHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eVZrblRja24pLnN1YnNjcmliZShsaXN0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuRG9jdW1lbnRzRm9yUGFydG5lciA9IGxpc3Q7XHJcblxyXG4gICAgICAgICAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnB1cmNoYXNlT3JkZXJEb2N1bWVudHMgPSBsaXN0LmZpbHRlcihkb2MgPT4gZG9jLm9ialR5cGUgPT09IDIyKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTYXTEsW4gYWxtYSBzaXBhcmnFn2xlcmkgKE9ialR5cGU9MjIpOicsIHRoaXMucHVyY2hhc2VPcmRlckRvY3VtZW50cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gT2JqVHlwZT0yMCBvbGFubGFyxLEgc2F0xLFuIGFsbWEgaXJzYWxpeWVzaSB0YWLEsW5hIGZpbHRyZWxlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnB1cmNoYXNlRGVzcGF0Y2hEb2N1bWVudHMgPSBsaXN0LmZpbHRlcihkb2MgPT4gZG9jLm9ialR5cGUgPT09IDIwKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTYXTEsW4gYWxtYSBpcnNhbGl5ZWxlcmkgKE9ialR5cGU9MjApOicsIHRoaXMucHVyY2hhc2VEZXNwYXRjaERvY3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAvLyBPYmpUeXBlPTIyIG9sYW5sYXLEsSBzYXTEsW4gYWxtYSBzaXBhcmnFn2kgdGFixLFuYSBmaWx0cmVsZVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNNb2RhbE9wZW5Gb3JPcGVuRG9jcyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oXCLEsGxnaWxpIG11aGF0YXAgacOnaW4gYcOnxLFrIGJlbGdlIHNhdMSxcsSxIGJ1bHVuYW1hZMSxLlwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0T3BlbkRvY3VtZW50cygpIHtcclxuICAgICAgICBsZXQgcHVyY2hhc2VEZXNwYXRjaGVzID0gdGhpcy5keFB1cmNoYXNlRGVzcGF0Y2hEb2N1bWVudHMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpXHJcbiAgICAgICAgbGV0IHB1cmNoYXNlT3JkZXJzID0gdGhpcy5keFB1cmNoYXNlT3JkZXJEb2N1bWVudHMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpXHJcbiAgICAgICAgbGV0IHJlZmVyZW5jZURvY3MgPSBbXTtcclxuICAgICAgICBpZiAocHVyY2hhc2VPcmRlcnMubGVuZ3RoID4gMCAmJiBwdXJjaGFzZURlc3BhdGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFwiUmVmZXJhbnMgb2xhcmFrIHlhbG7EsXpjYSBiaXIgYmVsZ2UgdMO8csO8IHNlw6dpbGViaWxpci5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwdXJjaGFzZU9yZGVycy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICByZWZlcmVuY2VEb2NzID0gcHVyY2hhc2VPcmRlcnM7XHJcbiAgICAgICAgaWYgKHB1cmNoYXNlRGVzcGF0Y2hlcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICByZWZlcmVuY2VEb2NzID0gcHVyY2hhc2VEZXNwYXRjaGVzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudExpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZURvY3Muc29tZShlID0+ICF0aGlzLmRvY3VtZW50TGluZXMuc29tZShkID0+IGQub2JqVHlwZSA9PT0gZS5vYmpUeXBlKSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJSZWZlcmFucyBvbGFyYWsgeWFsbsSxemNhIGJpciBiZWxnZSB0w7xyw7wgc2XDp2lsZWJpbGlyLlwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVmZXJlbmNlRG9jcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAhdGhpcy5kb2N1bWVudExpbmVzLnNvbWUoZHJhZnQgPT5cclxuICAgICAgICAgICAgICAgIGRyYWZ0Lm9ialR5cGUgPT09IGVsZW1lbnQub2JqVHlwZSAmJlxyXG4gICAgICAgICAgICAgICAgZHJhZnQuZG9jRW50cnkgPT09IGVsZW1lbnQuZG9jRW50cnkgJiZcclxuICAgICAgICAgICAgICAgIGRyYWZ0LmxpbmVOdW0gPT09IGVsZW1lbnQubGluZU51bVxyXG4gICAgICAgICAgICApICYmIHRoaXMuZG9jdW1lbnRMaW5lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkUXR5OiBlbGVtZW50Lm9wZW5RdHksXHJcbiAgICAgICAgICAgICAgICBvcGVuUXR5OiBlbGVtZW50Lm9wZW5RdHksXHJcbiAgICAgICAgICAgICAgICBvYmpUeXBlOiBlbGVtZW50Lm9ialR5cGUsXHJcbiAgICAgICAgICAgICAgICBkb2NFbnRyeTogZWxlbWVudC5kb2NFbnRyeSxcclxuICAgICAgICAgICAgICAgIGRvY051bTogZWxlbWVudC5kb2NOdW0sXHJcbiAgICAgICAgICAgICAgICBudW1BdENhcmQ6IGVsZW1lbnQubnVtQXRDYXJkLFxyXG4gICAgICAgICAgICAgICAgbGluZU51bTogZWxlbWVudC5saW5lTnVtLFxyXG4gICAgICAgICAgICAgICAgZG9jRGF0ZTogZWxlbWVudC5kb2NEYXRlLFxyXG4gICAgICAgICAgICAgICAgZG9jRHVlRGF0ZTogZWxlbWVudC5kb2NEdWVEYXRlLFxyXG4gICAgICAgICAgICAgICAgaXRlbUNvZGU6IGVsZW1lbnQuaXRlbUNvZGUsXHJcbiAgICAgICAgICAgICAgICBkc2NyaXB0aW9uOiBlbGVtZW50LmRzY3JpcHRpb24sXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBlbGVtZW50LnRleHQsXHJcbiAgICAgICAgICAgICAgICBmcmVlVHh0OiBlbGVtZW50LmZyZWVUeHQsXHJcbiAgICAgICAgICAgICAgICBjYXJkQ29kZTogZWxlbWVudC5jYXJkQ29kZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5oaWRlRm9ybU9wZW5Eb2N1bWVudHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlRm9ybU9wZW5Eb2N1bWVudHMoKSB7XHJcbiAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvck9wZW5Eb2NzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvck9wZW5Eb2NzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGhpZGVGb3JtRHJhZnQoKSB7XHJcbiAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvckRvY3VtZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvckRvY3VtZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudExpbmVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgc2VuZERyYWZ0KGRyYWZ0R3JpZExpbmVzOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCByZXF1ZXN0RHRvRG9jdW1lbnRMaW5lczogQ29ubmVjdG9yRHJhZnREb2N1bWVudExpbmVEdG9bXSA9IFtdO1xyXG5cclxuICAgICAgICBkcmFmdEdyaWRMaW5lcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICByZXF1ZXN0RHRvRG9jdW1lbnRMaW5lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBlbGVtZW50LnNlbGVjdGVkUXR5LFxyXG4gICAgICAgICAgICAgICAgYmFzZVR5cGU6IGVsZW1lbnQub2JqVHlwZSxcclxuICAgICAgICAgICAgICAgIGJhc2VFbnRyeTogZWxlbWVudC5kb2NFbnRyeSxcclxuICAgICAgICAgICAgICAgIGJhc2VMaW5lOiBlbGVtZW50LmxpbmVOdW1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0RHRvOiBDb25uZWN0b3JEcmFmdERvY3VtZW50RHRvID0ge1xyXG4gICAgICAgICAgICBkb2NFbnRyeTogbnVsbCxcclxuICAgICAgICAgICAgZG9jTnVtOiBudWxsLFxyXG4gICAgICAgICAgICBkb2NDdXJyZW5jeTogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5kb2N1bWVudEN1cnJlbmN5Q29kZT8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgZG9jT2JqZWN0Q29kZTp0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmludm9pY2VUeXBlQ29kZT09PVwiSUFERVwiP1wib0NyZWRpdE5vdGVzXCI6XCJvUHVyY2hhc2VJbnZvaWNlc1wiLFxyXG4gICAgICAgICAgICBkb2NEYXRlOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmlzc3VlRGF0ZT8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdGF4RGF0ZTogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pc3N1ZURhdGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGRvY0R1ZURhdGU6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucGF5bWVudFRlcm1zUGF5bWVudER1ZURhdGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGRvY1JhdGU6ICh0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LnByaWNpbmdFeGNoYW5nZVJhdGVDYWxjdWxhdGlvblJhdGUgPD0gMSB8fCBpc051bGxPckVtcHR5KHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJpY2luZ0V4Y2hhbmdlUmF0ZUNhbGN1bGF0aW9uUmF0ZSkpID8gMSA6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5wcmljaW5nRXhjaGFuZ2VSYXRlQ2FsY3VsYXRpb25SYXRlLFxyXG4gICAgICAgICAgICBjYXJkQ29kZTogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eVZrblRja24/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIG51bUF0Q2FyZDogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlSWQ/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHVfRUZBVE5POiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmludm9pY2VJZD8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdV9VVUlEOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LnV1SWQ/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHVfU0VORDogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlVHlwZUNvZGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHVfUHJvZmlsZUlkOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LnByb2ZpbGVJZD8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgZG9jdW1lbnRMaW5lczogcmVxdWVzdER0b0RvY3VtZW50TGluZXMsXHJcbiAgICAgICAgICAgIGJQTF9JREFzc2lnbmVkVG9JbnZvaWNlOiB0aGlzLmlzQnJhbmNoID8gdGhpcy5mb3JtRG9jdW1lbnQ/LmNvbnRyb2xzPy5zZWxlY3RlZEJyYW5jaD8udmFsdWUgOiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZURyYWZ0RG9jdW1lbnQocmVxdWVzdER0bywgdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlLmlkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVGb3JtRHJhZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0LmRvY0VudHJ5ICsgXCIgbnVtYXJhbMSxIHRhc2xhayBiZWxnZSBiYcWfYXLEsXlsYSBvbHXFn3R1cnVsZHUuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kRG9jdW1lbnQoZG9jdW1lbnRHcmlkTGluZXM6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHJlcXVlc3REdG9Eb2N1bWVudExpbmVzOiBDb25uZWN0b3JQdXJjaGFzZUludm9pY2VEb2N1bWVudExpbmVEdG9bXSA9IFtdO1xyXG5cclxuICAgICAgICBkb2N1bWVudEdyaWRMaW5lcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICByZXF1ZXN0RHRvRG9jdW1lbnRMaW5lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBlbGVtZW50LnNlbGVjdGVkUXR5LFxyXG4gICAgICAgICAgICAgICAgYmFzZVR5cGU6IGVsZW1lbnQub2JqVHlwZSxcclxuICAgICAgICAgICAgICAgIGJhc2VFbnRyeTogZWxlbWVudC5kb2NFbnRyeSxcclxuICAgICAgICAgICAgICAgIGJhc2VMaW5lOiBlbGVtZW50LmxpbmVOdW1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0RHRvOiBDb25uZWN0b3JQdXJjaGFzZUludm9pY2VEb2N1bWVudER0byA9IHtcclxuICAgICAgICAgICAgZG9jRW50cnk6IG51bGwsXHJcbiAgICAgICAgICAgIGRvY051bTogbnVsbCxcclxuICAgICAgICAgICAgZG9jQ3VycmVuY3k6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uZG9jdW1lbnRDdXJyZW5jeUNvZGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGRvY0RhdGU6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaXNzdWVEYXRlPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICB0YXhEYXRlOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmlzc3VlRGF0ZT8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgZG9jRHVlRGF0ZTogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5wYXltZW50VGVybXNQYXltZW50RHVlRGF0ZT8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgZG9jUmF0ZTogKHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJpY2luZ0V4Y2hhbmdlUmF0ZUNhbGN1bGF0aW9uUmF0ZSA8PSAxIHx8IGlzTnVsbE9yRW1wdHkodGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5wcmljaW5nRXhjaGFuZ2VSYXRlQ2FsY3VsYXRpb25SYXRlKSkgPyAxIDogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlLnByaWNpbmdFeGNoYW5nZVJhdGVDYWxjdWxhdGlvblJhdGUsXHJcbiAgICAgICAgICAgIGNhcmRDb2RlOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LmFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrbj8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgbnVtQXRDYXJkOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmludm9pY2VJZD8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdV9FRkFUTk86IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaW52b2ljZUlkPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICB1X1VVSUQ6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8udXVJZD8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdV9TRU5EOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmludm9pY2VUeXBlQ29kZT8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdV9Qcm9maWxlSWQ6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJvZmlsZUlkPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBiUExfSURBc3NpZ25lZFRvSW52b2ljZTogdGhpcy5pc0JyYW5jaCA/IHRoaXMuZm9ybURvY3VtZW50Py5jb250cm9scz8uc2VsZWN0ZWRCcmFuY2g/LnZhbHVlIDogbnVsbCxcclxuICAgICAgICAgICAgZG9jdW1lbnRMaW5lczogcmVxdWVzdER0b0RvY3VtZW50TGluZXNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNlcnZpY2UuY3JlYXRlUHVyY2hhc2VJbnZvaWNlRG9jdW1lbnQocmVxdWVzdER0bywgdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlLmlkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVGb3JtRHJhZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcyhyZXN1bHQuZG9jRW50cnkgKyBcIiBudW1hcmFsxLEgYmVsZ2UgYmHFn2FyxLF5bGEgb2x1xZ90dXJ1bGR1LlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlRHJhZnREb2N1bWVudCgpIHtcclxuICAgICAgICB0aGlzLmlzTW9kYWxCdXN5Rm9yRG9jdW1lbnQgPSB0cnVlO1xyXG5cclxuXHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZHhEb2N1bWVudExpbmVzLmluc3RhbmNlLmdldERhdGFTb3VyY2UoKTtcclxuICAgICAgICBkYXRhU291cmNlLnN0b3JlKCkubG9hZCgpLnRoZW4oKGdyaWRMaW5lczogYW55W10pID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmIChncmlkTGluZXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRHJhZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuaW5mbygnVGFibG9kYSBzYXTEsXIgYnVsdW5tYWTEscSfxLEgacOnaW4gdGFzbGFrIGJlbGdlIGJvxZ8gb2xhcmFrIG9sdcWfdHVydWxhY2FrdMSxci4gRGV2YW0gZXRtZWsgaXN0aXlvciBtdXN1bnV6PycsIHsga2V5OiAnOjpCaWxnaScsIGRlZmF1bHRWYWx1ZTogJycgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBDb25maXJtYXRpb24uU3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFwiY29uZmlybVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kRHJhZnQoZ3JpZExpbmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvckRvY3VtZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIkthecSxdGzEsSBiZWxnZSBvbHXFn3R1cnVsdXJrZW4gYm/FnyBzYXTEsXIgZ2lyaWxlbWV6LlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZExpbmVzLmZpbHRlcih4ID0+IHguc2VsZWN0ZWRRdHkgPiB4Lm9wZW5RdHkpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuaW5mbygnU2XDp2lsZW4gbWlrdGFyxLEsIGHDp8SxayBtaWt0YXJkYW4gYsO8ecO8ayBvbGFuIHNhdMSxci9zYXTEsXJsYXIgbWV2Y3V0LiBEZXZhbSBldG1layBpc3RpeW9yIG11c3VudXo/JywgeyBrZXk6ICc6OkJpbGdpJywgZGVmYXVsdFZhbHVlOiAnJyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0dXM6IENvbmZpcm1hdGlvbi5TdGF0dXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gXCJjb25maXJtXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RyYWZ0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmREcmFmdChncmlkTGluZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kRG9jdW1lbnQoZ3JpZExpbmVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb2RhbEJ1c3lGb3JEb2N1bWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRHJhZnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZERyYWZ0KGdyaWRMaW5lcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmREb2N1bWVudChncmlkTGluZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzTWFudWFsKHJlY29yZCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5wcm9jZXNzTWFudWFsKHJlY29yZC5pZCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcyhcIkJlbGdlIGJhxZ9hcsSxeWxhIG1hbnVlbCBpxZ9sZW5kaS5cIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAvLyBNYW51ZWwgS2FsZW0gRWtsZSAtIE1vZGFsIGHDp1xyXG4gICAgLy8gb3Blbk1hbnVhbExpbmVNb2RhbCgpIHtcclxuICAgIC8vICAgICBpZiAodGhpcy5kb2N1bWVudExpbmVzLnNvbWUoZCA9PiBkLm9ialR5cGUgPT09IDAgfHwgZC5vYmpUeXBlID09PSAtMSkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKFwiU2F0xLFybGFyIHphdGVuIGVrbGVubWnFn3Rpci4gw5ZuY2UgbWV2Y3V0IHNhdMSxcmxhcsSxIHRlbWl6bGV5aW5pei5cIik7XHJcbiAgICAvLyAgICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdGhpcy5pc01vZGFsQnVzeUZvck1hbnVhbExpbmUgPSB0cnVlO1xyXG4gICAgLy8gICAgIHRoaXMubWFudWFsTGluZXMgPSBbXTtcclxuICAgIC8vICAgICB0aGlzLmluaXRTYXBJdGVtc1N0b3JlKCk7XHJcblxyXG4gICAgLy8gICAgIGNvbnN0IGlzSWFkZSA9IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaW52b2ljZVR5cGVDb2RlID09PSAnSUFERSc7XHJcblxyXG4gICAgLy8gICAgIC8vIFhNTCBzYXTEsXJsYXLEsW7EsSB2ZSB2ZXJnaSBncnVwbGFyxLFuxLEgcGFyYWxlbCDDp2VrXHJcbiAgICAvLyAgICAgdGhpcy5zZXJ2aWNlLmdldEludm9pY2VYbWxMaW5lcyh0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2UuaWQpLnN1YnNjcmliZSh7XHJcbiAgICAvLyAgICAgICAgIG5leHQ6ICh4bWxMaW5lczogSW52b2ljZVhtbExpbmVEdG9bXSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gVmVyZ2kgZ3J1cGxhcsSxbsSxIMOnZWsgKENhdGVnb3J5PSdJJywgSW5hY3RpdmU9J04nKVxyXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmdldFRheEdyb3VwcygnSScpLnN1YnNjcmliZSh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbmV4dDogKGdyb3VwczogU2FwVGF4R3JvdXBEdG9bXSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnRheEdyb3VwcyA9IGlzSWFkZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgPyAoZ3JvdXBzIHx8IFtdKS5maWx0ZXIoZyA9PiBnLmNvZGU/LnN0YXJ0c1dpdGgoJ1InKSlcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdyb3VwcyB8fCBbXSkuZmlsdGVyKGcgPT4gZy5jb2RlPy5zdGFydHNXaXRoKCdQJykpO1xyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgLy8gWE1MIHNhdMSxcmxhcsSxbsSxIE1hbnVhbExpbmVEdG8neWEgZMO2bsO8xZ90w7xyXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFudWFsTGluZXMgPSB4bWxMaW5lcy5tYXAobGluZSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJnaSBvcmFuxLFuYSBnw7ZyZSB2YXJzYXnEsWxhbiB2ZXJnaSBncnVidSBlxZ9sZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRUYXhDb2RlID0gJyc7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXhQZXJjZW50ID0gbGluZS50YXhQZXJjZW50O1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRheFBlcmNlbnQgIT0gbnVsbCAmJiB0aGlzLnRheEdyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMudGF4R3JvdXBzLmZpbmQoZyA9PiBNYXRoLmFicyhnLnJhdGUgLSB0YXhQZXJjZW50KSA8IDAuMDEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUYXhDb2RlID0gbWF0Y2hlZC5jb2RlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmUubGluZU51bWJlcixcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ29kZTogJycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IGxpbmUuaXRlbU5hbWUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGxpbmUucXVhbnRpdHksXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdFByaWNlOiBsaW5lLnVuaXRQcmljZSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDb2RlOiBkZWZhdWx0VGF4Q29kZSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU6IGxpbmUuY3VycmVuY3lDb2RlLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIE1hbnVhbExpbmVEdG87XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvck1hbnVhbExpbmUgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvck1hbnVhbExpbmUgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0sXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgLy8gVmVyZ2kgZ3J1cGxhcsSxIGFsxLFuYW1henNhIChTQVAgYmHEn2xhbnTEsXPEsSB5b2spIHlpbmUgZGUgYcOnXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudGF4R3JvdXBzID0gW107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFudWFsTGluZXMgPSB4bWxMaW5lcy5tYXAobGluZSA9PiAoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZS5saW5lTnVtYmVyLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUNvZGU6ICcnLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IGxpbmUuaXRlbU5hbWUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogbGluZS5xdWFudGl0eSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRQcmljZTogbGluZS51bml0UHJpY2UsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDb2RlOiAnJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogbGluZS5jdXJyZW5jeUNvZGUsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogdHJ1ZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGFzIE1hbnVhbExpbmVEdG8pKTtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb2RhbEJ1c3lGb3JNYW51YWxMaW5lID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb2RhbE9wZW5Gb3JNYW51YWxMaW5lID0gdHJ1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgfSxcclxuICAgIC8vICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMuaXNNb2RhbEJ1c3lGb3JNYW51YWxMaW5lID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFwiWE1MIHNhdMSxcmxhcsSxIG9rdW5hbWFkxLE6IFwiICsgKGVycj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8IGVyci5tZXNzYWdlKSk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH1cclxuXHJcblxyXG4gICAgY2hlY2tCb3hDaGFuZ2VkKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbHMgPSB0aGlzLmZvcm1SZXNwb25zZS5jb250cm9sc1xyXG4gICAgICAgIHZhciBpZCA9IGV2ZW50LnRhcmdldC5pZDtcclxuICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdyZXNwb25zZUNoZWNrJykgYXMgTm9kZUxpc3RPZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICAgICAgICBjaGVja2JveGVzLmZvckVhY2goY2hlY2tib3ggPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2hlY2tib3guaWQgIT09IGlkKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbHNbY2hlY2tib3guYXR0cmlidXRlc1tcImZvcm1jb250cm9sbmFtZVwiXS52YWx1ZV0uc2V0VmFsdWUoY2hlY2tib3guY2hlY2tlZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVJvd3NDb2xvcihlKSB7XHJcbiAgICAgICAgaWYgKGUucm93VHlwZSAhPT0gJ2RhdGEnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd0VsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gZS5yb3dFbGVtZW50Py50b0FycmF5XHJcbiAgICAgICAgICAgID8gZS5yb3dFbGVtZW50LnRvQXJyYXkoKVxyXG4gICAgICAgICAgICA6IGUucm93RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICAgICAgICA/IFtlLnJvd0VsZW1lbnRdXHJcbiAgICAgICAgICAgICAgICA6IEFycmF5LmZyb20oZS5yb3dFbGVtZW50ID8/IFtdKTtcclxuXHJcbiAgICAgICAgaWYgKCFyb3dFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudHNUb0NvbG9yOiBIVE1MRWxlbWVudFtdID0gW107XHJcbiAgICAgICAgcm93RWxlbWVudHMuZm9yRWFjaChyb3dFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudHNUb0NvbG9yLnB1c2gocm93RWxlbWVudCk7XHJcbiAgICAgICAgICAgIEFycmF5LmZyb20ocm93RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpKS5mb3JFYWNoKGNlbGwgPT5cclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzVG9Db2xvci5wdXNoKGNlbGwgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGVsZW1lbnRzVG9Db2xvci5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnYmFja2dyb3VuZC1jb2xvcicpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNQcm9jZXNzZWRWaWV3IHx8IGUuZGF0YS5wcm9maWxlSWQgIT09ICdUSUNBUklGQVRVUkEnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd0NvbG9yczogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcclxuICAgICAgICAgICAgMDogJyNmNGEyNjEnLFxyXG4gICAgICAgICAgICAxOiAnIzNlYmQ2MCcsXHJcbiAgICAgICAgICAgIDI6ICcjY2M0ZjQ1J1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgcm93Q29sb3IgPSByb3dDb2xvcnNbTnVtYmVyKGUuZGF0YS5yZWNlaXZlclJlc3BvbnNlKV07XHJcblxyXG4gICAgICAgIGlmIChyb3dDb2xvcikge1xyXG4gICAgICAgICAgICBlbGVtZW50c1RvQ29sb3IuZm9yRWFjaChlbGVtZW50ID0+XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWNvbG9yJywgcm93Q29sb3IsICdpbXBvcnRhbnQnKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSZWNlaXZlclJlc3BvbnNlTmFtZShyZXNwb25zZUlkKSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmluYm91bmRJbnZvaWNlUmVjZWl2ZXJSZXNwb25zZUxvb2t1cC5maW5kKCh4KSA9PiB4LmlkID09PSByZXNwb25zZUlkKTtcclxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRpc3BsYXlOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJY29uQ2xhc3MocmVzcG9uc2VJZCkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZUlkID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiZmFzIGZhLWNsb2NrXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlSWQgPT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJmYXMgZmEtY2hlY2stY2lyY2xlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlSWQgPT0gMikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJmYXMgZmEtdGltZXMtY2lyY2xlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERvY09iamVjdE5hbWUoZGF0YSkge1xyXG4gICAgICAgIGxldCBvYmpOYW1lID0gKChkYXRhLmlzRHJhZnQgPyBcIlRhc2xhayBcIiA6IFwiXCIpICsgdGhpcy5pbnZvaWNlT2JqZWN0c0VudW1Mb29rdXAuZmluZCgoeCkgPT4geC5pZCA9PSAoZGF0YS5pc0RyYWZ0ID8gZGF0YS5yZXNvdXJjZVN1YkRvY1R5cGUgOiBkYXRhLnJlc291cmNlRG9jVHlwZSkpPy5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgaWYgKG9iak5hbWUgPT0gXCJ1bmRlZmluZWRcIilcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmpOYW1lO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvbkluYm91bmRTZWxlY3Rpb25DaGFuZ2VkKGUpIHtcclxuICAgICAgICBjb25zdCByb3dzID0gZS5zZWxlY3RlZFJvd3NEYXRhO1xyXG5cclxuICAgICAgICBpZiAoIXJvd3MgfHwgcm93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNWYWxpZFNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDEsMWfIGt1cmFsxLFcclxuICAgICAgICBjb25zdCB2YWxpZCA9IHJvd3MuZXZlcnkoeCA9PlxyXG4gICAgICAgICAgICAhKHgucHJvZmlsZUlkID09ICdUSUNBUklGQVRVUkEnICYmIHguc3RhdHVzID09IDcwMCAmJiB4LnJlY2VpdmVyUmVzcG9uc2UgPT0gMikgJiZcclxuICAgICAgICAgICAgKHguaW52b2ljZVR5cGVDb2RlICE9PSAnSUFERScgJiZcclxuICAgICAgICAgICAgICAgICh4LnN0YXR1cyA9PT0gNjAwIHx8IHguc3RhdHVzID09PSA3MDApKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuaGFzVmFsaWRTZWxlY3Rpb24gPSB2YWxpZDtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVNdWx0aXBsZUVtcHR5RHJhZnRzKCkge1xyXG4gICAgICAgIGxldCByZXF1ZXN0RHRvczogQ29ubmVjdG9yTXVsdGlwbGVFbXB0eURyYWZ0RHRvW10gPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmJvdW5kSW52b2ljZVJvd3MgPSB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XHJcblxyXG4gICAgICAgIGlmICghc2VsZWN0ZWRJbmJvdW5kSW52b2ljZVJvd3MgfHwgc2VsZWN0ZWRJbmJvdW5kSW52b2ljZVJvd3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJMw7x0ZmVuIGVuIGF6IGJpciBrYXnEsXQgc2XDp2luaXouXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB2YWxpZFJvd3MgPSBzZWxlY3RlZEluYm91bmRJbnZvaWNlUm93cy5maWx0ZXIoeCA9PiB4Lmludm9pY2VUeXBlQ29kZSAhPT0gJ0lBREUnICYmICh4LnN0YXR1cyA9PT0gNjAwIHx8IHguc3RhdHVzID09PSA3MDApKTtcclxuICAgICAgICBpZiAodmFsaWRSb3dzLmxlbmd0aCAhPT0gc2VsZWN0ZWRJbmJvdW5kSW52b2ljZVJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJMaXN0ZSBpw6dlcmlzaW5kZSBmYXR1cmEgdGlwaSAnSUFERScgb2xhbiB2ZXlhIGJlbGdlIGR1cnVtdSBlbnRlZ3JhdMO2cmRlbiBhbMSxbmTEsSB2ZSB5YSBlbnRlZ3JhdMO2cmRlbiB5YW7EsXRsYW5kxLEgb2xtYXlhbiBrYXnEsXRsYXIgbWV2Y3V0LlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5ib3VuZEludm9pY2VSb3dzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gNjUwIHx8IHguc3RhdHVzID09PSA3NTApKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJMaXN0ZW5pbiBpw6dlcmlzaW5kZSBkYWhhIMO2bmNlZGVuIHRhc2xhayBiZWxnZXNpIG9sdcWfdHVydWxhbiBiZWxnZWxlciBidWx1bm1ha3RhZMSxci4gS29udHJvbCBlZGluaXouXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxlY3RlZEluYm91bmRJbnZvaWNlUm93cy5mb3JFYWNoKHNlbGVjdGVkSW5ib3VuZEludm9pY2UgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZHJhZnREb2N1bWVudDogQ29ubmVjdG9yRHJhZnREb2N1bWVudER0byA9IHtcclxuICAgICAgICAgICAgICAgIGRvY0VudHJ5OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZG9jTnVtOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZG9jQ3VycmVuY3k6IHNlbGVjdGVkSW5ib3VuZEludm9pY2U/LmRvY3VtZW50Q3VycmVuY3lDb2RlPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZG9jT2JqZWN0Q29kZTogXCJvUHVyY2hhc2VJbnZvaWNlc1wiLFxyXG4gICAgICAgICAgICAgICAgZG9jRGF0ZTogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaXNzdWVEYXRlPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdGF4RGF0ZTogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaXNzdWVEYXRlPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZG9jRHVlRGF0ZTogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucGF5bWVudFRlcm1zUGF5bWVudER1ZURhdGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBkb2NSYXRlOiAoc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJpY2luZ0V4Y2hhbmdlUmF0ZUNhbGN1bGF0aW9uUmF0ZSA8PSAxIHx8IGlzTnVsbE9yRW1wdHkoc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJpY2luZ0V4Y2hhbmdlUmF0ZUNhbGN1bGF0aW9uUmF0ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgPyAxXHJcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZEluYm91bmRJbnZvaWNlLnByaWNpbmdFeGNoYW5nZVJhdGVDYWxjdWxhdGlvblJhdGUsXHJcbiAgICAgICAgICAgICAgICBjYXJkQ29kZTogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgbnVtQXRDYXJkOiBzZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlSWQ/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB1X0VGQVROTzogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaW52b2ljZUlkPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdV9VVUlEOiBzZWxlY3RlZEluYm91bmRJbnZvaWNlPy51dUlkPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdV9TRU5EOiBzZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlVHlwZUNvZGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB1X1Byb2ZpbGVJZDogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJvZmlsZUlkPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRMaW5lczogW10sXHJcbiAgICAgICAgICAgICAgICBiUExfSURBc3NpZ25lZFRvSW52b2ljZTogdGhpcy5pc0JyYW5jaFxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEJyYW5jaElkXHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0RHRvcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGludm9pY2VJRDogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5pZCxcclxuICAgICAgICAgICAgICAgIGRyYWZ0RG9jdW1lbnQ6IGRyYWZ0RG9jdW1lbnRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFNlcnZpcyBpw6dlcnNpbmRlIE11aGF0YXAga29udHJvbMO8IGRlIHlhcMSxbMSxeW9yXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZU11bHRpcGxlRW1wdHlEcmFmdHMocmVxdWVzdER0b3MpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZnRSZXN1bHRzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQb3B1cFZpc2libGUgPSB0cnVlOyAvLyBwb3B1cCBhw6fEsWzEsXJcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVzdWx0UG9wdXBDbG9zZWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRQb3B1cFZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICAgIHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVJlc3VsdFBvcHVwID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzdWx0UG9wdXBWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UuY2xlYXJTZWxlY3Rpb24oKTtcclxuICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRJbmNvbWluZ1BERk11bHRpcGxlKCkge1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlXHJcbiAgICAgICAgICAgIC5nZXRWaXNpYmxlUm93cygpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBpLmlzU2VsZWN0ZWQgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgLm1hcChwID0+IHAuZGF0YS5pZCk7XHJcblxyXG4gICAgICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignTMO8dGZlbiBlbiBheiBiaXIgZmF0dXJhIHNlw6dpbml6LicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0SW5jb21pbmdJbnZvaWNlUGRmc011bHRpcGxlKGlkcykuc3Vic2NyaWJlKChkYXRhOiBCbG9iKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ppcCcgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSAnR2VsZW5GYXR1cmFsYXItJyArIHRoaXMuZ2V0WmlwRGF0ZSgpICsgJy56aXAnO1xyXG4gICAgICAgICAgICBhLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBkb3dubG9hZFBERk11bHRpcGxlKCkge1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgbGV0IGlkczogQXJyYXk8eyBpZDogc3RyaW5nIH0+ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlLmdldFZpc2libGVSb3dzKCkuZmlsdGVyKGkgPT4gaS5pc1NlbGVjdGVkID09IHRydWUpLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGlkcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiBlbGVtZW50LmRhdGEuaWQsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbnZvaWNlU2VydmljZS5nZXRJbnZvaWNlUGRmc011bHRpcGxlKGlkcy5tYXAocCA9PiBwLmlkKSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGRhdGEpO1xyXG4gICAgICAgICAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShieXRlQ2hhcmFjdGVycy5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vemlwJyB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIMSwbmRpcm1lXHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSAnRmF0dXJhbGFyLScgKyB0aGlzLmdldFppcERhdGUoKSArICcuemlwJztcclxuICAgICAgICAgICAgYS5jbGljaygpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkJyYW5jaFBvcHVwKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0JyYW5jaCkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU11bHRpcGxlRW1wdHlEcmFmdHMoKTsgLy8gxZ91YmVzaXogZGlyZWt0XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5icmFuY2hQb3B1cFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1CcmFuY2hTZWxlY3Rpb24gPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQnJhbmNoSWQpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIkzDvHRmZW4gxZ91YmUgc2XDp2luaXouXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJyYW5jaFBvcHVwVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTXVsdGlwbGVFbXB0eURyYWZ0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dBbGxGaWxlcyhyZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmludm9pY2VGaWxlc0RhdGFTb3VyY2UgPSB0aGlzLnNlcnZpY2UuTG9hZEluYm91bmRJbnZvaWNlRmlsZXMocmVjb3JkLmlkKTtcclxuICAgICAgICB0aGlzLmlzRmlsZU1vZGFsT3BlbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgRG93bmxvYWRGaWxlKHJlY29yZCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5kb3dubG9hZEZpbGVCeUlkKHJlY29yZC5jb250ZW50TWFzdGVySWQpLnN1YnNjcmliZShpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gYGRhdGE6JHtpdGVtLm1pbWVUeXBlfTtiYXNlNjQsJHtpdGVtLmNvbnRlbnR9YDtcclxuICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgbGluay5ocmVmID0gc291cmNlO1xyXG4gICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gYCR7aXRlbS5maWxlbmFtZX1gO1xyXG4gICAgICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRJbmJvdW5kUERGTXVsdGlwbGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UuZ2V0VmlzaWJsZVJvd3MoKVxyXG4gICAgICAgICAgICAuZmlsdGVyKHIgPT4gci5pc1NlbGVjdGVkICYmIHIucm93VHlwZSA9PT0gJ2RhdGEnKVxyXG4gICAgICAgICAgICAubWFwKHIgPT4gci5kYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJvd3MgfHwgc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oXCJMw7x0ZmVuIGVuIGF6IGJpciBmYXR1cmEgc2XDp2luLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IHNlbGVjdGVkUm93cy5tYXAociA9PiByLmlkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEluYm91bmRJbnZvaWNlUGRmc011bHRpcGxlKGlkcykuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoZGF0YSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vemlwJyB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSAnR2VsZW5GYXR1cmFsYXItJyArIHRoaXMuZ2V0WmlwRGF0ZSgpICsgJy56aXAnO1xyXG4gICAgICAgICAgICBhLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0WmlwRGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgIGNvbnN0IGhvdXJzID0gU3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgICBjb25zdCBtaW51dGVzID0gU3RyaW5nKGRhdGUuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICAgIGNvbnN0IHNlY29uZHMgPSBTdHJpbmcoZGF0ZS5nZXRTZWNvbmRzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LiR7bW9udGh9LiR7ZGF5fS0ke2hvdXJzfS4ke21pbnV0ZXN9LiR7c2Vjb25kc31gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaW50SW5ib3VuZFBERk11bHRpcGxlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlLmdldFZpc2libGVSb3dzKClcclxuICAgICAgICAgICAgLmZpbHRlcihyID0+IHIuaXNTZWxlY3RlZCAmJiByLnJvd1R5cGUgPT09ICdkYXRhJylcclxuICAgICAgICAgICAgLm1hcChyID0+IHIuZGF0YSk7XHJcblxyXG4gICAgICAgIGlmICghc2VsZWN0ZWRSb3dzIHx8IHNlbGVjdGVkUm93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKFwiTMO8dGZlbiBlbiBheiBiaXIgZmF0dXJhIHNlw6dpbi5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBzZWxlY3RlZFJvd3MubWFwKHIgPT4gci5pZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRJbmJvdW5kSW52b2ljZVBkZnNNZXJnZWQoaWRzKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihkYXRhKTtcclxuICAgICAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYnl0ZUFycmF5W2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J5dGVBcnJheV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCJwYWdlVGl0bGVLZXkgfCBhYnBMb2NhbGl6YXRpb25cIj5cclxuICA8YWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXIgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxnLWVuZCBwdC0yXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCJcclxuICAgICAgICBbbmdDbGFzc109XCIhaXNFQXJjaGl2ZSA/ICdidG4tcHJpbWFyeScgOiAnYnRuLXNlY29uZGFyeSdcIiAoY2xpY2spPVwic2VsZWN0SW52b2ljZVR5cGUoZmFsc2UpXCI+XHJcbiAgICAgICAge3sgJ2VEb251c3VtOjpFSW52b2ljZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCJcclxuICAgICAgICBbbmdDbGFzc109XCJpc0VBcmNoaXZlID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tc2Vjb25kYXJ5J1wiIChjbGljayk9XCJzZWxlY3RJbnZvaWNlVHlwZSh0cnVlKVwiPlxyXG4gICAgICAgIHt7ICdlRG9udXN1bTo6RUFyY2hpdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNQcm9jZXNzZWRWaWV3XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRQcm9jZXNzZWRGaWx0ZXIgPT09ICdkcmFmdCcgPyAnYnRuLXByaW1hcnknIDogJ2J0bi1zZWNvbmRhcnknXCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcm9jZXNzZWRGaWx0ZXIoJ2RyYWZ0JylcIj5cclxuICAgICAgICAgIHt7ICdlRG9udXN1bTo6RHJhZnREb2N1bWVudEZpbHRlcicgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZFByb2Nlc3NlZEZpbHRlciA9PT0gJ3JlZ2lzdGVyZWQnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tc2Vjb25kYXJ5J1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJvY2Vzc2VkRmlsdGVyKCdyZWdpc3RlcmVkJylcIj5cclxuICAgICAgICAgIHt7ICdlRG9udXN1bTo6UmVnaXN0ZXJlZERvY3VtZW50RmlsdGVyJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkUHJvY2Vzc2VkRmlsdGVyID09PSAnbWFudWFsJyA/ICdidG4tcHJpbWFyeScgOiAnYnRuLXNlY29uZGFyeSdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByb2Nlc3NlZEZpbHRlcignbWFudWFsJylcIj5cclxuICAgICAgICAgIHt7ICdlRG9udXN1bTo6TWFudWFsbHlQcm9jZXNzZWRGaWx0ZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCJcclxuICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRJbmJvdW5kUERGTXVsdGlwbGUoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1wZGYtbyBtZS0xXCI+PC9pPlxyXG4gICAgICAgIHt7ICdlRG9udXN1bTo6RG93bmxvYWRQREZNdWx0aXBsZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIlxyXG4gICAgICAgIChjbGljayk9XCJwcmludEluYm91bmRQREZNdWx0aXBsZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wcmludCBtZS0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgIFRvcGx1IFBERiBZYXpkxLFyXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUHJvY2Vzc2VkVmlld1wiPlxyXG4gICAgICA8YnV0dG9uICphYnBQZXJtaXNzaW9uPVwiJ2VEb251c3VtLkludm9pY2VzLkNyZWF0ZSdcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiIChjbGljayk9XCJvcGVuQnJhbmNoUG9wdXAoKVwiIFtkaXNhYmxlZF09XCIhaGFzVmFsaWRTZWxlY3Rpb25cIj5cclxuXHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb3B5IG1lLTFcIj48L2k+XHJcbiAgICAgICAge3sgJ2VEb251c3VtOjpDcmVhdGVNdWx0aXBsZUVtcHR5RHJhZnRzJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDwhLS0gPGJ1dHRvbiAqYWJwUGVybWlzc2lvbj1cIidlRG9udXN1bS5JbnZvaWNlcy5DcmVhdGUnXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIiAoY2xpY2spPVwidmlld1BERnNNdWx0aXBsZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZCBtZS0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgIHt7ICdlRG9udXN1bTo6Vmlld1BERk11bHRpcGxlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICA8YnV0dG9uICphYnBQZXJtaXNzaW9uPVwiJ2VEb251c3VtLkludm9pY2VzLkNyZWF0ZSdcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiIChjbGljayk9XCJnZXRJbmJvdW5kSW52b2ljZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbnZlbG9wZSBtZS0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgIHt7ICdlRG9udXN1bTo6Q2hlY2tJbmJvdW5kSW52b2ljZXMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9hYnAtcGFnZS10b29sYmFyLWNvbnRhaW5lcj5cclxuICA8cD57eyBwYWdlRGVzY3JpcHRpb25LZXkgfCBhYnBMb2NhbGl6YXRpb24gfX08L3A+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgPGR4LWRhdGEtZ3JpZCAjZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlIFtkYXRhU291cmNlXT1cImluYm91bmRJbnZvaWNlc0RhdGFTb3VyY2VcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIlxyXG4gICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3JlbW90ZU9wZXJhdGlvbnNdPVwidHJ1ZVwiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW3JlcGFpbnRDaGFuZ2VzT25seV09XCJ0cnVlXCJcclxuICAgICAgICBbYWxsb3dDb2x1bW5SZXNpemluZ109XCJ0cnVlXCIgY29sdW1uUmVzaXppbmdNb2RlPVwid2lkZ2V0XCIgW2FsbG93Q29sdW1uUmVvcmRlcmluZ109XCJ0cnVlXCIgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICBbY29sdW1uSGlkaW5nRW5hYmxlZF09XCJ0cnVlXCIgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCIgc3R5bGU9XCJoZWlnaHQ6IDc1dmg7XCJcclxuICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2VkKT1cIm9uSW5ib3VuZFNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiIChvblJvd1ByZXBhcmVkKT1cImNoYW5nZVJvd3NDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgPGR4by1wYWdlciBbdmlzaWJsZV09XCJ0cnVlXCIgW3Nob3dJbmZvXT1cInRydWVcIiBbYWxsb3dlZFBhZ2VTaXplc109XCJbNTAsMTAwLDIwMF1cIiBbc2hvd05hdmlnYXRpb25CdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIj5cclxuICAgICAgICA8L2R4by1wYWdlcj5cclxuICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiNTBcIj48L2R4by1wYWdpbmc+XHJcbiAgICAgICAgPGR4by1zZWxlY3Rpb24gbW9kZT1cIm11bHRpcGxlXCIgc2VsZWN0QWxsTW9kZT1cInBhZ2VcIiBzaG93Q2hlY2tCb3hlc01vZGU9XCJhbHdheXNcIj5cclxuICAgICAgICA8L2R4by1zZWxlY3Rpb24+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tY2hvb3NlciBbYWxsb3dTZWFyY2hdPVwidHJ1ZVwiIFtlbmFibGVkXT1cInRydWVcIiBtb2RlPVwic2VsZWN0XCI+PC9keG8tY29sdW1uLWNob29zZXI+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tZml4aW5nIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1jb2x1bW4tZml4aW5nPlxyXG4gICAgICAgIDxkeG8tZ3JvdXAtcGFuZWwgW3Zpc2libGVdPVwidHJ1ZVwiIFthbGxvd0NvbHVtbkRyYWdnaW5nXT1cInRydWVcIj48L2R4by1ncm91cC1wYW5lbD5cclxuICAgICAgICA8ZHhvLWdyb3VwaW5nICNleHBhbmQgW2F1dG9FeHBhbmRBbGxdPVwiZmFsc2VcIiBbYWxsb3dDb2xsYXBzaW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgW2NvbnRleHRNZW51RW5hYmxlZF09XCJ0cnVlXCI+PC9keG8tZ3JvdXBpbmc+XHJcbiAgICAgICAgPGR4by1oZWFkZXItZmlsdGVyIFthbGxvd1NlYXJjaF09XCJ0cnVlXCIgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWhlYWRlci1maWx0ZXI+XHJcbiAgICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIiBbYWxsb3dFeHBvcnRTZWxlY3RlZERhdGFdPVwiZmFsc2VcIj48L2R4by1leHBvcnQ+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tZml4aW5nIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1jb2x1bW4tZml4aW5nPlxyXG4gICAgICAgIDxkeG8tZmlsdGVyLWJ1aWxkZXIgW2FsbG93SGllcmFyY2hpY2FsRmllbGRzXT1cInRydWVcIj48L2R4by1maWx0ZXItYnVpbGRlcj5cclxuICAgICAgICA8ZHhvLWZpbHRlci1wYW5lbCBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXBhbmVsPlxyXG4gICAgICAgIDxkeG8tc29ydGluZyBtb2RlPVwic2luZ2xlXCI+PC9keG8tc29ydGluZz5cclxuICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwiaG9yaXpvbnRhbFwiIHNob3dTY3JvbGxiYXI9XCJhbHdheXNcIj48L2R4by1zY3JvbGxpbmc+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gW2ZpeGVkXT1cInRydWVcIiBkYXRhRmllbGQ9XCJpZFwiIHdpZHRoPVwiMTIwXCIgW2FsbG93R3JvdXBpbmddPVwiZmFsc2VcIiBbYWxsb3dGaWx0ZXJpbmddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW2FsbG93SGVhZGVyRmlsdGVyaW5nXT1cImZhbHNlXCIgW2FsbG93SGlkaW5nXT1cImZhbHNlXCIgW2FsbG93UmVvcmRlcmluZ109XCJmYWxzZVwiXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU9XCJvcGVyYXRpb25UZW1wbGF0ZVwiIGNhcHRpb249XCJ7eyAnQWJwVWk6OkFjdGlvbnMnIHwgYWJwTG9jYWxpemF0aW9uIH19XCI+XHJcbiAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IHJvdyBvZiAnb3BlcmF0aW9uVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBkcm9wZG93bi10b2dnbGVcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGUgW2Rpc2FibGVkXT1cImRpc2FibGVkSWRDb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29nIG1yLTFcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICB7eyAnQWJwVWk6OkFjdGlvbnMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnU+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJ1cGRhdGUocm93LmRhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwiZGVsZXRlKHJvdy5kYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdBYnBVaTo6RGVsZXRlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwiZ2V0SW52b2ljZVByZXZpZXcocm93LmRhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3cuZGF0YS5zdGF0dXMgPT0gNjAwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3MDAgfHwgcm93LmRhdGEuc3RhdHVzID09IDY1MCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNzUwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA2ODAgfHwgcm93LmRhdGEuc3RhdHVzID09IDc4MCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNjcwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3NzBcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdlRG9udXN1bTo6R2V0VmlldycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1Byb2Nlc3NlZFZpZXdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJvcGVuUmVzcG9uc2VNb2RhbChyb3cuZGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy5kYXRhLnByb2ZpbGVJZCA9PSAnVElDQVJJRkFUVVJBJyAmJiByb3cuZGF0YS5yZWNlaXZlclJlc3BvbnNlID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbnZlbG9wZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2VEb251c3VtOjpSZXNwb25zZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrKT1cIm9wZW5QYXJ0bmVyTW9kYWwocm93LmRhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhKHJvdy5kYXRhLnByb2ZpbGVJZCA9PSAnVElDQVJJRkFUVVJBJyAmJiByb3cuZGF0YS5zdGF0dXMgPT0gNzAwICAmJiByb3cuZGF0YS5yZWNlaXZlclJlc3BvbnNlID09IDIpICYmIChyb3cuZGF0YS5zdGF0dXMgPT0gNjAwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3MDApXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdXNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2VEb251c3VtOjpDcmVhdGVCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJvcGVuRHJhZnRGb3JtKHJvdy5kYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIShyb3cuZGF0YS5wcm9maWxlSWQgPT0gJ1RJQ0FSSUZBVFVSQScgJiYgcm93LmRhdGEuc3RhdHVzID09IDcwMCAgJiYgcm93LmRhdGEucmVjZWl2ZXJSZXNwb25zZSA9PSAyKSAmJiAocm93LmRhdGEuc3RhdHVzID09IDYwMCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNzAwKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdlRG9udXN1bTo6Q3JlYXRlRHJhZnREb2N1bWVudCcgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrKT1cIm9wZW5Eb2N1bWVudEZvcm0ocm93LmRhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhKHJvdy5kYXRhLnByb2ZpbGVJZCA9PSAnVElDQVJJRkFUVVJBJyAmJiByb3cuZGF0YS5zdGF0dXMgPT0gNzAwICAmJiByb3cuZGF0YS5yZWNlaXZlclJlc3BvbnNlID09IDIpICYmIChyb3cuZGF0YS5zdGF0dXMgPT0gNjAwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3MDApXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS10ZXh0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZURvbnVzdW06OkNyZWF0ZURvY3VtZW50JyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwicHJvY2Vzc01hbnVhbChyb3cuZGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiEocm93LmRhdGEucHJvZmlsZUlkID09ICdUSUNBUklGQVRVUkEnICYmIHJvdy5kYXRhLnN0YXR1cyA9PSA3MDAgICYmIHJvdy5kYXRhLnJlY2VpdmVyUmVzcG9uc2UgPT0gMikgJiYgKHJvdy5kYXRhLnN0YXR1cyA9PSA2MDAgfHwgcm93LmRhdGEuc3RhdHVzID09IDcwMClcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oYW5kLXBhcGVyLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdlRG9udXN1bTo6UHJvY2Vzc01hbnVhbCcgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwic2hvd0FsbEZpbGVzKHJvdy5kYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93LmRhdGEuc3RhdHVzID09IDYwMCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNzAwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA2NTAgfHwgcm93LmRhdGEuc3RhdHVzID09IDc1MCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNjgwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3ODAgfHwgcm93LmRhdGEuc3RhdHVzID09IDY3MCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNzcwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZURvbnVzdW06OlNob3dBbGxGaWxlcycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpc3N1ZURhdGVcIiBkYXRhVHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7J2VEb251c3VtOjpJc3N1ZURhdGUnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInBheW1lbnRUZXJtc1BheW1lbnREdWVEYXRlXCIgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eydlRG9udXN1bTo6UGF5bWVudER1ZURhdGUnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInV1SWRcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlV1SWQnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImludm9pY2VJZFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6SW52b2ljZUlkJ3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJhY2NvdW50aW5nU3VwcGxpZXJQYXJ0eU5hbWVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7J2VEb251c3VtOjpBY2NvdW50aW5nU3VwcGxpZXJQYXJ0eU5hbWUnfGFicExvY2FsaXphdGlvbn19XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrblwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3snZURvbnVzdW06OkFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrbid8YWJwTG9jYWxpemF0aW9ufX1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2R4aS1jb2x1bW4+XHJcblxyXG4gICAgICAgIDxkeGktY29sdW1uIGNhcHRpb249XCJ7eydlRG9udXN1bTo6VXNlckNvbW1lbnQnfGFicExvY2FsaXphdGlvbn19XCIgd2lkdGg9XCIzMjBcIiBjZWxsVGVtcGxhdGU9XCJ1c2VyQ29tbWVudFRlbXBsYXRlXCI+PC9keGktY29sdW1uPlxyXG5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJzdGF0dXNcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlN0YXR1cyd8YWJwTG9jYWxpemF0aW9ufX1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cImluYm91bmRJbnZvaWNlU3RhdHVzTG9va3VwXCIgdmFsdWVFeHByPVwiaWRcIiBkaXNwbGF5RXhwcj1cImRpc3BsYXlOYW1lXCI+XHJcbiAgICAgICAgICA8L2R4by1sb29rdXA+XHJcbiAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInJlc291cmNlRG9jRW50cnlcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlJlc291cmNlRG9jRW50cnknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJyZXNvdXJjZURvY051bVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6UmVzb3VyY2VEb2NOdW0nfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBjZWxsVGVtcGxhdGU9XCJkb2NUeXBlVGVtcGxhdGVcIiBkYXRhRmllbGQ9XCJyZXNvdXJjZURvY1R5cGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7J2VEb251c3VtOjpSZXNvdXJjZURvY1R5cGUnfGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2RvY1R5cGVUZW1wbGF0ZSdcIj5cclxuICAgICAgICAgICAge3tnZXREb2NPYmplY3ROYW1lKGRhdGEuZGF0YSl9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9keGktY29sdW1uPlxyXG5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJyZWNlaXZlclJlc3BvbnNlXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpSZWNlaXZlclJlc3BvbnNlJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU9XCJpY29uVGVtcGxhdGVcIj5cclxuICAgICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cImluYm91bmRJbnZvaWNlUmVjZWl2ZXJSZXNwb25zZUxvb2t1cFwiIHZhbHVlRXhwcj1cImlkXCIgZGlzcGxheUV4cHI9XCJkaXNwbGF5TmFtZVwiPlxyXG4gICAgICAgICAgPC9keG8tbG9va3VwPlxyXG4gICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2ljb25UZW1wbGF0ZSdcIj5cclxuICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cImdldEljb25DbGFzcyhkYXRhLmRhdGEucmVjZWl2ZXJSZXNwb25zZSlcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2NvbG9yJzpkYXRhLmRhdGEucmVjZWl2ZXJSZXNwb25zZSA9PSAnMScgPyAnZ3JlZW4nIDogZGF0YS5kYXRhLnJlY2VpdmVyUmVzcG9uc2UgPT0gJzInID8gJ3JlZCcgOiAnZ3JheSd9XCI+PC9pPlxyXG4gICAgICAgICAge3tnZXRSZWNlaXZlclJlc3BvbnNlTmFtZShkYXRhLmRhdGEucmVjZWl2ZXJSZXNwb25zZSl9fVxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ3VzZXJDb21tZW50VGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtZS0yXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Um93Q29tbWVudChkYXRhLmRhdGEpXCJcclxuICAgICAgICAgICAgICAoaW5wdXQpPVwib25Vc2VyQ29tbWVudENoYW5nZWQoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgZGF0YS5kYXRhKVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZURvbnVzdW06OkFkZENvbW1lbnQnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNTYXZpbmdDb21tZW50W2RhdGEuZGF0YS5pZF1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzYXZlVXNlckNvbW1lbnQoZGF0YS5kYXRhKVwiPlxyXG4gICAgICAgICAgICAgIEtheWRldFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInByb2ZpbGVJZFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6UHJvZmlsZUlkJ3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpbnZvaWNlVHlwZUNvZGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06Okludm9pY2VUeXBlQ29kZSd8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibGVnYWxNb25ldGFyeVRvdGFsUGF5YWJsZUFtb3VudFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6UGF5YWJsZUFtb3VudCd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgZGF0YVR5cGU9XCJudW1iZXJcIiBmb3JtYXQ9XCIjLCMjMC4wMFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2N1bWVudEN1cnJlbmN5Q29kZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jQ3VycmVuY3knfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInByaWNpbmdFeGNoYW5nZVJhdGVDYWxjdWxhdGlvblJhdGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY1JhdGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIGRhdGFUeXBlPVwibnVtYmVyXCIgZm9ybWF0PVwiIywjIzAuMDBcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaW5ib3VuZERvY3VtZW50Q3JlYXRlTG9nXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eydlRG9udXN1bTo6SW5ib3VuZERvY3VtZW50Q3JlYXRlTG9nJ3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9hYnAtcGFnZT5cclxuXHJcbjxhYnAtbW9kYWwgW2J1c3ldPVwiaXNNb2RhbEJ1c3lGb3JSZXNwb25zZVwiIFsodmlzaWJsZSldPVwiaXNNb2RhbE9wZW5Gb3JSZXNwb25zZVwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ20nIH1cIj5cclxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgIDxoMz5cclxuICAgICAge3sgJ2VEb251c3VtOjpTZW5kUmVzcG9uc2UnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2gzPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVJlc3BvbnNlXCIgaWQ9XCJpbnZvaWNlLXJlc3BvbnNlXCIgdmFsaWRhdGVPblN1Ym1pdD5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGZhZGUtaW4tdG9wXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjIwcHhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiaW52b2ljZS1yZXNwb25zZS1pbnZvaWNlLWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpJZCd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiaW52b2ljZS1yZXNwb25zZS1pbnZvaWNlLWlkXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlkXCIgbWF4bGVuZ3RoPVwiMjU2XCIgYXV0b2ZvY3VzPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImludm9pY2UtcmVzcG9uc2UtaW52b2ljZS11dWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpVdUlkJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggaWQ9XCJpbnZvaWNlLXJlc3BvbnNlLWludm9pY2UtdXVpZFwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbnZvaWNlVVVJRFwiIG1heGxlbmd0aD1cIjI1NlwiIGF1dG9mb2N1cz48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJpbnZvaWNlLXJlc3BvbnNlLWludm9pY2UtYWNjZXB0XCIgZm9ybUNvbnRyb2xOYW1lPVwiaXNBY2NlcHRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXNwb25zZUNoZWNrXCIgKGNoYW5nZSk9XCJjaGVja0JveENoYW5nZWQoJGV2ZW50KVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImludm9pY2UtcmVzcG9uc2UtaW52b2ljZS1hY2NlcHRcIiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAge3sgJ2VEb251c3VtOjpBY2NlcHQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImludm9pY2UtcmVzcG9uc2UtaW52b2ljZS1yZWplY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJpc1JlamVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgbmFtZT1cInJlc3BvbnNlQ2hlY2tcIiAoY2hhbmdlKT1cImNoZWNrQm94Q2hhbmdlZCgkZXZlbnQpXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiaW52b2ljZS1yZXNwb25zZS1pbnZvaWNlLXJlamVjdFwiIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyAnZURvbnVzdW06OlJlamVjdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT5cclxuICAgICAge3sgJ0FicFVpOjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIiBmb3JtTmFtZT1cImludm9pY2UtcmVzcG9uc2VcIlxyXG4gICAgICAoY2xpY2spPVwic2VuZEludm9pY2VSZXNwb25zZShmYWxzZSlcIj5cclxuICAgICAge3sgJ2VEb251c3VtOjpSZWplY3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBmb3JtTmFtZT1cImludm9pY2UtcmVzcG9uc2VcIlxyXG4gICAgICAoY2xpY2spPVwic2VuZEludm9pY2VSZXNwb25zZSh0cnVlKVwiPlxyXG4gICAgICB7eyAnZURvbnVzdW06OkFjY2VwdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYWJwLW1vZGFsPlxyXG5cclxuPGFicC1tb2RhbCBbYnVzeV09XCJpc01vZGFsQnVzeUZvclBhcnRuZXJcIiBbKHZpc2libGUpXT1cImlzTW9kYWxPcGVuRm9yUGFydG5lclwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ3hsJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+XHJcbiAgICAgIHt7ICdlRG9udXN1bTo6Q3JlYXRlQnVzaW5lc3NQYXJ0bmVyJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1QYXJ0bmVyXCIgaWQ9XCJjcmVhdGUtcGFydG5lclwiIChuZ1N1Ym1pdCk9XCJjcmVhdGVCdXNpbmVzc1BhcnRuZXIoKVwiIHZhbGlkYXRlT25TdWJtaXQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBmYWRlLWluLXRvcFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwibWFyZ2luLXRvcDoyMHB4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lck5hbWUnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItbmFtZVwiIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvZm9jdXM+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItdmtuXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpQYXJ0bmVyVktOJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLXZrblwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwidmtuXCJcclxuICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMjU2XCI+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItcGFydG5lci1hZGQtaWRcIj5cclxuICAgICAgICAgICAgICAgICAge3snZURvbnVzdW06OlBhcnRuZXJBZGRpdGlvbmFsSWQnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItcGFydG5lci1hZGQtaWRcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJBZGRJZFwiXHJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWN1cnJlbmN5XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpQYXJ0bmVyQ3VycmVuY3knfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItY3VycmVuY3lcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJDdXJyZW5jeVwiXHJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjI1NlwiIGF1dG9mb2N1cz48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJjcmVhdGUtcGFydG5lci13ZWItc2l0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lcldlYlNpdGUnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItd2ViLXNpdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyV2ViU2l0ZVVSSVwiXHJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLXNlcmllc1wiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lclNlcmllcyd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZHgtZHJvcC1kb3duLWJveCBbKHZhbHVlKV09XCJzZXJpYWxHcmlkQm94VmFsdWVcIiBbKG9wZW5lZCldPVwiaXNTZXJpYWxHcmlkQm94T3BlbmVkXCIgdmFsdWVFeHByPVwic2VyaWVzXCJcclxuICAgICAgICAgICAgICAgICAgW2RlZmVyUmVuZGVyaW5nXT1cImZhbHNlXCIgW2Rpc3BsYXlFeHByXT1cInNlcmlhbEdyaWRCb3hfZGlzcGxheUV4cHJcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlRG9udXN1bTo6U2VsZWN0QVZhbHVlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJTZXJpZXNcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cImZhbHNlXCIgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZVNlcmllc1wiXHJcbiAgICAgICAgICAgICAgICAgIChvbk9wdGlvbkNoYW5nZWQpPVwib25TZXJpYWxHcmlkQm94T3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZVNlcmllc1wiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW2hlaWdodF09XCIyNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb3dLZXlzKV09XCJzZXJpYWxHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwic2VyaWVzXCIgY2FwdGlvbj1cIlNlcmlcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibmFtZVwiIGNhcHRpb249XCJBZFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwiaW5maW5pdGVcIj48L2R4by1zY3JvbGxpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgICAgICAgICAgICA8L2R4LWRyb3AtZG93bi1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lckdyb3VwJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItZ3JvdXBzXCIgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZUdyb3Vwc1wiIHZhbHVlRXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwibmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFydG5lckdyb3VwXCIgbWF4bGVuZ3RoPVwiMjU2XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nR3JvdXBzXCIgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiIGF1dG9mb2N1cz48L2R4LXNlbGVjdC1ib3g+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdHcm91cHNcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3snZURvbnVzdW06OkxvYWRpbmcnfGFicExvY2FsaXphdGlvbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxkeC1kcm9wLWRvd24tYm94IFsodmFsdWUpXT1cImdyb3VwR3JpZEJveFZhbHVlXCIgWyhvcGVuZWQpXT1cImlzR3JvdXBHcmlkQm94T3BlbmVkXCIgdmFsdWVFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkZWZlclJlbmRlcmluZ109XCJmYWxzZVwiIFtkaXNwbGF5RXhwcl09XCJncm91cEdyaWRCb3hfZGlzcGxheUV4cHJcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlRG9udXN1bTo6U2VsZWN0QVZhbHVlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJCdXR0b25dPVwiZmFsc2VcIiBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlR3JvdXBzXCJcclxuICAgICAgICAgICAgICAgICAgKG9uT3B0aW9uQ2hhbmdlZCk9XCJvbkdyb3VwR3JpZEJveE9wdGlvbkNoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZHgtZGF0YS1ncmlkIFtkYXRhU291cmNlXT1cInBhcnRuZXJBdmFpbGFibGVHcm91cHNcIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiIFtoZWlnaHRdPVwiMjUwXCJcclxuICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm93S2V5cyldPVwiZ3JvdXBHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY29kZVwiIGNhcHRpb249XCJLb2RcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibmFtZVwiIGNhcHRpb249XCJBZFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwiaW5maW5pdGVcIj48L2R4by1zY3JvbGxpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgICAgICAgICAgICA8L2R4LWRyb3AtZG93bi1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWFjY291bnRcIj5cclxuICAgICAgICAgICAgICAgICAge3snZURvbnVzdW06OlBhcnRuZXJCYW5rQWNjb3VudCd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLWFjY291bnRcIiBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlQWNjb3VudHNcIiB2YWx1ZUV4cHI9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyQWNjb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ0FjY291bnRzXCIgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtc2VsZWN0LWJveD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ0FjY291bnRzXCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTAgc3RhcnQtNTAgdHJhbnNsYXRlLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7J2VEb251c3VtOjpMb2FkaW5nJ3xhYnBMb2NhbGl6YXRpb259fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZHgtZHJvcC1kb3duLWJveCBbKHZhbHVlKV09XCJhY2NvdW50R3JpZEJveFZhbHVlXCIgWyhvcGVuZWQpXT1cImlzQWNjb3VudEdyaWRCb3hPcGVuZWRcIiB2YWx1ZUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgICAgW2RlZmVyUmVuZGVyaW5nXT1cImZhbHNlXCIgW2Rpc3BsYXlFeHByXT1cImFjY291bnRHcmlkQm94X2Rpc3BsYXlFeHByXCIgW2Ryb3BEb3duT3B0aW9uc109XCJ7IHdpZHRoOiA3NTAgfVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2VEb251c3VtOjpTZWxlY3RBVmFsdWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwicGFydG5lckFjY291bnRcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cImZhbHNlXCIgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZUFjY291bnRzXCJcclxuICAgICAgICAgICAgICAgICAgKG9uT3B0aW9uQ2hhbmdlZCk9XCJvbkFjY291bnRHcmlkQm94T3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZUFjY291bnRzXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiBbaGVpZ2h0XT1cIjI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvd0tleXMpXT1cImFjY291bnRHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaWRcIiBjYXB0aW9uPVwiS29kXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInRleHRcIiBjYXB0aW9uPVwiQWRcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1zZWxlY3Rpb24gbW9kZT1cInNpbmdsZVwiPjwvZHhvLXNlbGVjdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLWZpbHRlci1yb3cgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWZpbHRlci1yb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1zY3JvbGxpbmcgbW9kZT1cImluZmluaXRlXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeG8tcGFnaW5nIFtlbmFibGVkXT1cInRydWVcIiBbcGFnZVNpemVdPVwiMTBcIj48L2R4by1wYWdpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZHgtZGF0YS1ncmlkPlxyXG4gICAgICAgICAgICAgICAgPC9keC1kcm9wLWRvd24tYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItbWFpbFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lck1haWwnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItbWFpbFwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJFbWFpbFwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItY291bnRyeVwiIFtkYXRhU291cmNlXT1cInBhcnRuZXJBdmFpbGFibGVDb3VudHJpZXNcIiB2YWx1ZUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cIm5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJDb3VudHJ5XCIgbWF4bGVuZ3RoPVwiMjU2XCJcclxuICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0U3RhdGVzKClcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nQ291bnRyaWVzXCIgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzPjwvZHgtc2VsZWN0LWJveD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ0NvdW50cmllc1wiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTUwIHN0YXJ0LTUwIHRyYW5zbGF0ZS1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eydlRG9udXN1bTo6TG9hZGluZyd8YWJwTG9jYWxpemF0aW9ufX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWNvdW50cnlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnZURvbnVzdW06OlBhcnRuZXJDb3VudHJ5JyB8IGFicExvY2FsaXphdGlvbiB9fSAqXHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1kcm9wLWRvd24tYm94IFsodmFsdWUpXT1cImNvdW50cnlHcmlkQm94VmFsdWVcIiBbKG9wZW5lZCldPVwiaXNDb3VudHJ5R3JpZEJveE9wZW5lZFwiIHZhbHVlRXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkZWZlclJlbmRlcmluZ109XCJmYWxzZVwiIFtkaXNwbGF5RXhwcl09XCJjb3VudHJ5R3JpZEJveF9kaXNwbGF5RXhwclwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZURvbnVzdW06OlNlbGVjdEFWYWx1ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyQ291bnRyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiIFtkYXRhU291cmNlXT1cInBhcnRuZXJBdmFpbGFibGVDb3VudHJpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbk9wdGlvbkNoYW5nZWQpPVwib25Db3VudHJ5R3JpZEJveE9wdGlvbkNoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZUNvdW50cmllc1wiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW2hlaWdodF09XCIyNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvd0tleXMpXT1cImNvdW50cnlHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjb2RlXCIgY2FwdGlvbj1cIkNvZGVcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgY2FwdGlvbj1cIk5hbWVcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1zY3JvbGxpbmcgbW9kZT1cImluZmluaXRlXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgICAgICAgICAgPC9keC1kcm9wLWRvd24tYm94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLXN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpQYXJ0bmVyU3RhdGUnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxkeC1zZWxlY3QtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItc3RhdGVcIiBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlU3RhdGVzXCIgdmFsdWVFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJuYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyU3RhdGVcIiBtYXhsZW5ndGg9XCIyNTZcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdTdGF0ZXNcIiBbc2hvd0NsZWFyQnV0dG9uXT1cImZhbHNlXCIgYXV0b2ZvY3VzPlxyXG4gICAgICAgICAgICAgICAgICA8L2R4LXNlbGVjdC1ib3g+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdTdGF0ZXNcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3snZURvbnVzdW06OkxvYWRpbmcnfGFicExvY2FsaXphdGlvbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkeC1kcm9wLWRvd24tYm94IFsodmFsdWUpXT1cInN0YXRlR3JpZEJveFZhbHVlXCIgWyhvcGVuZWQpXT1cImlzU3RhdGVHcmlkQm94T3BlbmVkXCIgdmFsdWVFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmVyUmVuZGVyaW5nXT1cImZhbHNlXCIgW2Rpc3BsYXlFeHByXT1cInN0YXRlR3JpZEJveF9kaXNwbGF5RXhwclwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZURvbnVzdW06OlNlbGVjdEFWYWx1ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyU3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJCdXR0b25dPVwiZmFsc2VcIiBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlU3RhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAob25PcHRpb25DaGFuZ2VkKT1cIm9uU3RhdGVHcmlkQm94T3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlU3RhdGVzXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiBbaGVpZ2h0XT1cIjI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm93S2V5cyldPVwic3RhdGVHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjb2RlXCIgY2FwdGlvbj1cIkNvZGVcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgY2FwdGlvbj1cIk5hbWVcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1zY3JvbGxpbmcgbW9kZT1cImluZmluaXRlXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgICAgICAgICAgPC9keC1kcm9wLWRvd24tYm94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLXppcGNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAge3snZURvbnVzdW06OlBhcnRuZXJaaXBjb2RlJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLXppcGNvZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyWmlwQ29kZVwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWNpdHlcIj5cclxuICAgICAgICAgICAgICAgICAge3snZURvbnVzdW06OlBhcnRuZXJDaXR5J3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLWNpdHlcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyQ2l0eVwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWNvdW50eVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lckNvdW50eSd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggaWQ9XCJjcmVhdGUtcGFydG5lci1jb3VudHlcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyQ291bnR5XCIgbWF4bGVuZ3RoPVwiMjU2XCI+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItc3RyZWV0XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpQYXJ0bmVyU3RyZWV0J3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLXN0cmVldFwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJTdHJlZXRcIiBtYXhsZW5ndGg9XCIyNTZcIj48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJjcmVhdGUtcGFydG5lci1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lckJsb2NrJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLWJsb2NrXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFydG5lckJsb2NrXCIgbWF4bGVuZ3RoPVwiMjU2XCI+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT5cclxuICAgICAge3sgJ0FicFVpOjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgW2Rpc2FibGVkXT1cImlzTW9kYWxCdXN5Rm9yUGFydG5lclwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCJcclxuICAgICAgZm9ybT1cImNyZWF0ZS1wYXJ0bmVyXCI+XHJcbiAgICAgIHt7ICdlRG9udXN1bTo6Q3JlYXRlQnVzaW5lc3NQYXJ0bmVyJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcblxyXG48YWJwLW1vZGFsIFtidXN5XT1cImlzTW9kYWxCdXN5Rm9yRG9jdW1lbnRcIiBbKHZpc2libGUpXT1cImlzTW9kYWxPcGVuRm9yRG9jdW1lbnRcIiBbb3B0aW9uc109XCJ7IHNpemU6ICd4bCcgfVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgPGgzPlxyXG4gICAgICB7eyAoaXNEcmFmdCA/ICdlRG9udXN1bTo6Q3JlYXRlRHJhZnQnIDogJ2VEb251c3VtOjpDcmVhdGVEb2N1bWVudCcpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2gzPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybURvY3VtZW50XCIgaWQ9XCJjcmVhdGUtZG9jdW1lbnRcIiB2YWxpZGF0ZU9uU3VibWl0PlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkXCI+IC0tPlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj4gLS0+XHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTNcIj4gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZC1sYWJlbFwiPiB7eydlRG9udXN1bTo6UGFydG5lclZLTid8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1kcmFmdC12a25cIiBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2UuYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuXCIgbWF4bGVuZ3RoPVwiMjU2XCI+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtbGFiZWxcIj4ge3snZURvbnVzdW06Oklzc3VlRGF0ZSd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxkeC1kYXRlLWJveCBpZD1cImNyZWF0ZS1kcmFmdC1pc3N1ZS1kYXRlXCIgW2Rpc2FibGVkXT1cInRydWVcIiBkYXRhVHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlLmlzc3VlRGF0ZVwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtbGFiZWxcIj4ge3snZURvbnVzdW06OlBhcnRuZXJOYW1lJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZC12YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLWRyYWZ0LXBhcnRuZXItbmFtZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eU5hbWVcIiBtYXhsZW5ndGg9XCIyNTZcIj48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIiAqbmdJZj1cImlzQnJhbmNoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtbGFiZWxcIj4ge3snZURvbnVzdW06OkF1dG9UYWtlRG9jQ3JlYXRlQnJhbmNoJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZC12YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggaWQ9XCJjcmVhdGUtZHJhZnQtYnJhbmNoLW5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RlZEJyYW5jaFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJuYW1lXCIgdmFsdWVFeHByPVwiY29kZVwiIFtkYXRhU291cmNlXT1cImJyYW5jaGVzRGF0YVNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9keC1zZWxlY3QtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkLWxhYmVsXCI+IHt7J2VEb251c3VtOjpJbnZvaWNlSWQnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkLXZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggaWQ9XCJjcmVhdGUtZHJhZnQtaW52b2ljZS1pZFwiIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5pbnZvaWNlSWRcIiBtYXhsZW5ndGg9XCIyNTZcIj48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGR4LWRhdGEtZ3JpZCAjZHhEb2N1bWVudExpbmVzIFtkYXRhU291cmNlXT1cImRvY3VtZW50TGluZXNcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3JlbW90ZU9wZXJhdGlvbnNdPVwiZmFsc2VcIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiIFtyZXBhaW50Q2hhbmdlc09ubHldPVwidHJ1ZVwiIFthbGxvd0NvbHVtblJlc2l6aW5nXT1cInRydWVcIlxyXG4gICAgICAgIGNvbHVtblJlc2l6aW5nTW9kZT1cIndpZGdldFwiIFthbGxvd0NvbHVtblJlb3JkZXJpbmddPVwidHJ1ZVwiIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiIFtjb2x1bW5IaWRpbmdFbmFibGVkXT1cInRydWVcIlxyXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA1MHZoO1wiPlxyXG4gICAgICAgIDxkeG8tY29sdW1uLWZpeGluZyBbZW5hYmxlZF09XCJ0cnVlXCI+PC9keG8tY29sdW1uLWZpeGluZz5cclxuICAgICAgICA8ZHhvLWhlYWRlci1maWx0ZXIgW2FsbG93U2VhcmNoXT1cInRydWVcIiBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8taGVhZGVyLWZpbHRlcj5cclxuICAgICAgICA8ZHhvLWZpbHRlci1yb3cgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWZpbHRlci1yb3c+XHJcbiAgICAgICAgPGR4by1zb3J0aW5nIG1vZGU9XCJzaW5nbGVcIj48L2R4by1zb3J0aW5nPlxyXG4gICAgICAgIDxkeG8tY29sdW1uLWNob29zZXIgW2FsbG93U2VhcmNoXT1cInRydWVcIiBbZW5hYmxlZF09XCJ0cnVlXCIgbW9kZT1cInNlbGVjdFwiPjwvZHhvLWNvbHVtbi1jaG9vc2VyPlxyXG4gICAgICAgIDxkeG8tc2Nyb2xsaW5nIG1vZGU9XCJob3Jpem9udGFsXCIgc2hvd1Njcm9sbGJhcj1cImFsd2F5c1wiPjwvZHhvLXNjcm9sbGluZz5cclxuICAgICAgICA8ZHhvLWVkaXRpbmcgW2FsbG93VXBkYXRpbmddPVwidHJ1ZVwiIFthbGxvd0FkZGluZ109XCJmYWxzZVwiIFthbGxvd0RlbGV0aW5nXT1cInRydWVcIiBtb2RlPVwiY2VsbFwiIFt1c2VJY29uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgPC9keG8tZWRpdGluZz5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJvYmpUeXBlXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpPYmplY3RUeXBlJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PGR4by1sb29rdXAgW2RhdGFTb3VyY2VdPVwib2JqZWN0VHlwZXNMb29rdXBcIiB2YWx1ZUV4cHI9XCJpZFwiIGRpc3BsYXlFeHByPVwidGV4dFwiPlxyXG4gICAgICAgICAgPC9keG8tbG9va3VwPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NFbnRyeVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jRW50cnknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZG9jTnVtXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpEb2NOdW0nfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibnVtQXRDYXJkXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpOdW1BdENhcmQnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibGluZU51bVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6TGluZU51bSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuXHJcbiAgICAgICAgPCEtLSA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjYXJkQ29kZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6Q2FyZENvZGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+IC0tPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY0RhdGVcIiBkYXRhVHlwZT1cImRhdGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY0RhdGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZG9jRHVlRGF0ZVwiIGRhdGFUeXBlPVwiZGF0ZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jRHVlRGF0ZSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpdGVtQ29kZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6SXRlbUNvZGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZHNjcmlwdGlvblwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RHNjcmlwdGlvbid8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidGV4dFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6VGV4dCd8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZnJlZVR4dFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RnJlZVR4dCd8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwib3BlblF0eVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6T3BlblF0eSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJzZWxlY3RlZFF0eVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6U2VsZWN0ZWRRdHknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwidHJ1ZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICA8IS0tIDwvZGl2PlxyXG4gICAgICA8L2Rpdj4gLS0+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+XHJcbiAgICAgIHt7ICdBYnBVaTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2FybmluZ1wiIChjbGljayk9XCJvcGVuT3BlbkRvY3VtZW50c0Zvcm0oKVwiPlxyXG4gICAgICB7eyAnZURvbnVzdW06OlJlc291cmNlRG9jdW1lbnRzJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIFtkaXNhYmxlZF09XCJpc01vZGFsQnVzeUZvckRyYWZ0XCIgKGNsaWNrKT1cImNyZWF0ZURyYWZ0RG9jdW1lbnQoKVwiPlxyXG4gICAgICB7eyAoaXNEcmFmdCA/ICdlRG9udXN1bTo6Q3JlYXRlRHJhZnREb2N1bWVudCcgOiAnZURvbnVzdW06OkNyZWF0ZURvY3VtZW50JykgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYWJwLW1vZGFsPlxyXG5cclxuXHJcbjxhYnAtbW9kYWwgW2J1c3ldPVwiaXNNb2RhbEJ1c3lGb3JPcGVuRG9jc1wiIFsodmlzaWJsZSldPVwiaXNNb2RhbE9wZW5Gb3JPcGVuRG9jc1wiIFtvcHRpb25zXT1cInsgc2l6ZTogJ3hsJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+XHJcbiAgICAgIHt7IChzZWxlY3RlZCA/ICdBYnBVaTo6RWRpdCcgOiAnZURvbnVzdW06Ok9wZW5Eb2NzJykgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvaDM+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcbiAgICA8Zm9ybSBpZD1cIm9wZW4tZG9jdW1lbnRzXCI+XHJcbiAgICAgIDwhLS0gRGV2RXh0cmVtZSBUYWIgUGFuZWwgLS0+XHJcbiAgICAgIDxkeC10YWItcGFuZWwgW2FuaW1hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiIFtzd2lwZUVuYWJsZWRdPVwidHJ1ZVwiIFtsb29wXT1cImZhbHNlXCIgI3RhYlBhbmVsPlxyXG4gICAgICAgIDxkeGktaXRlbSB0aXRsZT1cInt7ICdlRG9udXN1bTo6UHVyY2hhc2VPcmRlcicgfCBhYnBMb2NhbGl6YXRpb24gfX1cIiBpY29uPVwiZmFzIGZhLXNob3BwaW5nLWNhcnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCAjZHhQdXJjaGFzZU9yZGVyRG9jdW1lbnRzIFtkYXRhU291cmNlXT1cInB1cmNoYXNlT3JkZXJEb2N1bWVudHNcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiIFtyZW1vdGVPcGVyYXRpb25zXT1cImZhbHNlXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiBbcmVwYWludENoYW5nZXNPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbYWxsb3dDb2x1bW5SZXNpemluZ109XCJ0cnVlXCIgY29sdW1uUmVzaXppbmdNb2RlPVwid2lkZ2V0XCIgW2FsbG93Q29sdW1uUmVvcmRlcmluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCIgW2NvbHVtbkhpZGluZ0VuYWJsZWRdPVwidHJ1ZVwiIHN0eWxlPVwiaGVpZ2h0OiA1MHZoO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLWNvbHVtbi1maXhpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiPjwvZHhvLWNvbHVtbi1maXhpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8taGVhZGVyLWZpbHRlciBbYWxsb3dTZWFyY2hdPVwidHJ1ZVwiIFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1oZWFkZXItZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLWZpbHRlci1yb3cgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWZpbHRlci1yb3c+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8tc29ydGluZyBtb2RlPVwic2luZ2xlXCI+PC9keG8tc29ydGluZz5cclxuICAgICAgICAgICAgICAgICAgPGR4by1zY3JvbGxpbmcgbW9kZT1cImhvcml6b250YWxcIiBzaG93U2Nyb2xsYmFyPVwiYWx3YXlzXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLWNvbHVtbi1jaG9vc2VyIFthbGxvd1NlYXJjaF09XCJ0cnVlXCIgW2VuYWJsZWRdPVwidHJ1ZVwiIG1vZGU9XCJzZWxlY3RcIj48L2R4by1jb2x1bW4tY2hvb3Nlcj5cclxuICAgICAgICAgICAgICAgICAgPGR4by1zZWxlY3Rpb24gbW9kZT1cIm11bHRpcGxlXCIgc2VsZWN0QWxsTW9kZT1cInBhZ2VcIiBzaG93Q2hlY2tCb3hlc01vZGU9XCJhbHdheXNcIj5cclxuICAgICAgICAgICAgICAgICAgPC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLWVkaXRpbmcgW2FsbG93VXBkYXRpbmddPVwiZmFsc2VcIiBbYWxsb3dBZGRpbmddPVwiZmFsc2VcIiBbYWxsb3dEZWxldGluZ109XCJmYWxzZVwiIG1vZGU9XCJjZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZHhvLWVkaXRpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY0VudHJ5XCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpEb2NFbnRyeSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY051bVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jTnVtJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibnVtQXRDYXJkXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpOdW1BdENhcmQnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJsaW5lTnVtXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpMaW5lTnVtJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImNhcmRDb2RlXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpDYXJkQ29kZSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY0RhdGVcIiBkYXRhVHlwZT1cImRhdGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY0RhdGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NEdWVEYXRlXCIgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY0R1ZURhdGUnfGFicExvY2FsaXphdGlvbn19XCIgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaXRlbUNvZGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06Okl0ZW1Db2RlJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZHNjcmlwdGlvblwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RHNjcmlwdGlvbid8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInRleHRcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlRleHQnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJmcmVlVHh0XCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpGcmVlVHh0J3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwib3BlblF0eVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6T3BlblF0eSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9keGktaXRlbT5cclxuXHJcbiAgICAgICAgPGR4aS1pdGVtIHRpdGxlPVwie3sgJ2VEb251c3VtOjpQdXJjaGFzZURlc3BhdGNoJyB8IGFicExvY2FsaXphdGlvbiB9fVwiIGljb249XCJmYXMgZmEtdHJ1Y2tcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCAjZHhQdXJjaGFzZURlc3BhdGNoRG9jdW1lbnRzIFtkYXRhU291cmNlXT1cInB1cmNoYXNlRGVzcGF0Y2hEb2N1bWVudHNcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiIFtyZW1vdGVPcGVyYXRpb25zXT1cImZhbHNlXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVwYWludENoYW5nZXNPbmx5XT1cInRydWVcIiBbYWxsb3dDb2x1bW5SZXNpemluZ109XCJ0cnVlXCIgY29sdW1uUmVzaXppbmdNb2RlPVwid2lkZ2V0XCJcclxuICAgICAgICAgICAgICAgICAgW2FsbG93Q29sdW1uUmVvcmRlcmluZ109XCJ0cnVlXCIgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCIgW2NvbHVtbkhpZGluZ0VuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA1MHZoO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLWNvbHVtbi1maXhpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiPjwvZHhvLWNvbHVtbi1maXhpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8taGVhZGVyLWZpbHRlciBbYWxsb3dTZWFyY2hdPVwidHJ1ZVwiIFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1oZWFkZXItZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLWZpbHRlci1yb3cgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWZpbHRlci1yb3c+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8tc29ydGluZyBtb2RlPVwic2luZ2xlXCI+PC9keG8tc29ydGluZz5cclxuICAgICAgICAgICAgICAgICAgPGR4by1jb2x1bW4tY2hvb3NlciBbYWxsb3dTZWFyY2hdPVwidHJ1ZVwiIFtlbmFibGVkXT1cInRydWVcIiBtb2RlPVwic2VsZWN0XCI+PC9keG8tY29sdW1uLWNob29zZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8tZWRpdGluZyBbYWxsb3dVcGRhdGluZ109XCJmYWxzZVwiIFthbGxvd0FkZGluZ109XCJmYWxzZVwiIFthbGxvd0RlbGV0aW5nXT1cImZhbHNlXCIgbW9kZT1cImNlbGxcIj5cclxuICAgICAgICAgICAgICAgICAgPC9keG8tZWRpdGluZz5cclxuICAgICAgICAgICAgICAgICAgPGR4by1zY3JvbGxpbmcgbW9kZT1cImhvcml6b250YWxcIiBzaG93U2Nyb2xsYmFyPVwiYWx3YXlzXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwibXVsdGlwbGVcIiBzZWxlY3RBbGxNb2RlPVwicGFnZVwiIHNob3dDaGVja0JveGVzTW9kZT1cImFsd2F5c1wiPlxyXG4gICAgICAgICAgICAgICAgICA8L2R4by1zZWxlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY0VudHJ5XCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpEb2NFbnRyeSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY051bVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jTnVtJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibnVtQXRDYXJkXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpOdW1BdENhcmQnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJsaW5lTnVtXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpMaW5lTnVtJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY2FyZENvZGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkNhcmRDb2RlJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZG9jRGF0ZVwiIGRhdGFUeXBlPVwiZGF0ZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jRGF0ZSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY0R1ZURhdGVcIiBkYXRhVHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jRHVlRGF0ZSd8YWJwTG9jYWxpemF0aW9ufX1cIiBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpdGVtQ29kZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6SXRlbUNvZGUnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkc2NyaXB0aW9uXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpEc2NyaXB0aW9uJ3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidGV4dFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6VGV4dCd8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImZyZWVUeHRcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkZyZWVUeHQnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJvcGVuUXR5XCIgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7J2VEb251c3VtOjpPcGVuUXR5J3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgIDwvZHgtZGF0YS1ncmlkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZHhpLWl0ZW0+XHJcbiAgICAgIDwvZHgtdGFiLXBhbmVsPlxyXG4gICAgPC9mb3JtPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+XHJcbiAgICAgIHt7ICdBYnBVaTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIFtkaXNhYmxlZF09XCJpc01vZGFsQnVzeUZvck9wZW5Eb2NzXCIgKGNsaWNrKT1cInNlbGVjdE9wZW5Eb2N1bWVudHMoKVwiPlxyXG4gICAgICB7eyAnZURvbnVzdW06OlNlbGVjdERvY3VtZW50JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcblxyXG5cclxuPGR4LXBvcHVwIFsodmlzaWJsZSldPVwicmVzdWx0UG9wdXBWaXNpYmxlXCIgdGl0bGU9XCJ7eydlRG9udXN1bTo6Q3JlYXRlRHJhZnRSZXN1bHRzJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgW3Nob3dDbG9zZUJ1dHRvbl09XCJ0cnVlXCIgKG9uSGlkaW5nKT1cIm9uUmVzdWx0UG9wdXBDbG9zZWQoKVwiPlxyXG5cclxuICA8ZHgtZGF0YS1ncmlkIFtkYXRhU291cmNlXT1cImRyYWZ0UmVzdWx0c1wiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgaGVpZ2h0PVwiMTAwJVwiIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXHJcbiAgICBbcm93QWx0ZXJuYXRpb25FbmFibGVkXT1cInRydWVcIiBbd29yZFdyYXBFbmFibGVkXT1cInRydWVcIj5cclxuXHJcblxyXG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaXNTdWNjZXNzXCIgY2FwdGlvbj1cInt7ICdlRG9udXN1bTo6U3RhdHVzJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgIFtjZWxsVGVtcGxhdGVdPVwiJ3N0YXR1c1RlbXBsYXRlJ1wiPlxyXG4gICAgPC9keGktY29sdW1uPlxyXG5cclxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnc3RhdHVzVGVtcGxhdGUnXCI+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS52YWx1ZVwiIHN0eWxlPVwiY29sb3I6IGdyZWVuOyBmb250LXNpemU6IDE4cHg7XCI+4pyUPC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFkYXRhLnZhbHVlXCIgc3R5bGU9XCJjb2xvcjogcmVkOyBmb250LXNpemU6IDE4cHg7XCI+4pyWPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZWZhdG5vXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpJbnZvaWNlSWQnfGFicExvY2FsaXphdGlvbn19XCIgW3dpZHRoXT1cIjIwMFwiPjwvZHhpLWNvbHVtbj5cclxuICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRyYWZ0RG9jdW1lbnQuZG9jRW50cnlcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlJlc291cmNlRG9jRW50cnknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkcmFmdERvY3VtZW50LmRvY051bVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6UmVzb3VyY2VEb2NOdW0nfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJlcnJvck1lc3NhZ2VcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkVycm9yTWVzc2FnZSd8YWJwTG9jYWxpemF0aW9ufX1cIiBbd2lkdGhdPVwiNTAwXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBkeFRlbXBsYXRlPVwiY2VsbFwiIGxldC1kYXRhPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm9ybWFsOyBsaW5lLWhlaWdodDogMS42OyBmb250LXNpemU6IDEzcHg7IGNvbG9yOiNiMDAwMjBcIiBbdGl0bGVdPVwiZGF0YS52YWx1ZVwiPlxyXG4gICAgICAgICAge3sgZGF0YS52YWx1ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9keGktY29sdW1uPlxyXG5cclxuICA8L2R4LWRhdGEtZ3JpZD5cclxuXHJcbiAgPCEtLSBBTFQgQlVUT05MQVIgLS0+XHJcbiAgPGR4aS10b29sYmFyLWl0ZW0gd2lkZ2V0PVwiZHhCdXR0b25cIiB0b29sYmFyPVwiYm90dG9tXCIgbG9jYXRpb249XCJhZnRlclwiXHJcbiAgICBbb3B0aW9uc109XCJ7IHRleHQ6ICgnZURvbnVzdW06Ok9rJyB8IGFicExvY2FsaXphdGlvbiksIHR5cGU6ICdkZWZhdWx0Jywgb25DbGljazogb25SZXN1bHRQb3B1cENsb3NlZCB9XCI+XHJcbiAgPC9keGktdG9vbGJhci1pdGVtPlxyXG5cclxuICA8ZHhpLXRvb2xiYXItaXRlbSB3aWRnZXQ9XCJkeEJ1dHRvblwiIHRvb2xiYXI9XCJib3R0b21cIiBsb2NhdGlvbj1cImFmdGVyXCJcclxuICAgIFtvcHRpb25zXT1cInsgIHRleHQ6ICgnZURvbnVzdW06OkNsb3NlJyB8IGFicExvY2FsaXphdGlvbiksICB0eXBlOiAnbm9ybWFsJywgb25DbGljazogY2xvc2VSZXN1bHRQb3B1cCB9XCI+XHJcbiAgPC9keGktdG9vbGJhci1pdGVtPlxyXG5cclxuPC9keC1wb3B1cD5cclxuXHJcbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cImJyYW5jaFBvcHVwVmlzaWJsZVwiIHRpdGxlPVwie3sgJ2VEb251c3VtOjpCcmFuY2hTZWxlY3Rpb25UaXRsZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gIFt3aWR0aF09XCI0MDBcIiBbaGVpZ2h0XT1cIjI1MFwiIFtzaG93Q2xvc2VCdXR0b25dPVwidHJ1ZVwiPlxyXG5cclxuICA8ZHgtc2VsZWN0LWJveCBbZGF0YVNvdXJjZV09XCJicmFuY2hlc0RhdGFTb3VyY2VcIiBkaXNwbGF5RXhwcj1cIm5hbWVcIiB2YWx1ZUV4cHI9XCJjb2RlXCIgWyh2YWx1ZSldPVwic2VsZWN0ZWRCcmFuY2hJZFwiXHJcbiAgICBwbGFjZWhvbGRlcj1cInt7ICdlRG9udXN1bTo6U2VsZWN0QnJhbmNoUGxhY2Vob2xkZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XCI+XHJcbiAgPC9keC1zZWxlY3QtYm94PlxyXG5cclxuICA8ZHhpLXRvb2xiYXItaXRlbSB3aWRnZXQ9XCJkeEJ1dHRvblwiIHRvb2xiYXI9XCJib3R0b21cIiBsb2NhdGlvbj1cImFmdGVyXCIgW29wdGlvbnNdPVwieyBcclxuICAgICAgICAgdGV4dDogKCdlRG9udXN1bTo6Q29udGludWUnIHwgYWJwTG9jYWxpemF0aW9uKSwgXHJcbiAgICAgICAgIHR5cGU6ICdzdWNjZXNzJywgXHJcbiAgICAgICAgIG9uQ2xpY2s6IGNvbmZpcm1CcmFuY2hTZWxlY3Rpb25cclxuICAgICAgfVwiPlxyXG4gIDwvZHhpLXRvb2xiYXItaXRlbT5cclxuXHJcbjwvZHgtcG9wdXA+XHJcblxyXG48YWJwLW1vZGFsIFtidXN5XT1cImlzRmlsZU1vZGFsQnVzeVwiIFsodmlzaWJsZSldPVwiaXNGaWxlTW9kYWxPcGVuXCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnIH1cIj5cclxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgIDxoMz57eyAnZURvbnVzdW06Okludm9pY2VGaWxlcycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2gzPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgW2RhdGFTb3VyY2VdPVwiaW52b2ljZUZpbGVzRGF0YVNvdXJjZVwiIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtyZW1vdGVPcGVyYXRpb25zXT1cInRydWVcIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiIFthbGxvd0NvbHVtblJlc2l6aW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgY29sdW1uUmVzaXppbmdNb2RlPVwid2lkZ2V0XCIgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCIgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA1MHZoO1wiPlxyXG4gICAgICAgICAgICAgICAgPGR4by1zb3J0aW5nIG1vZGU9XCJzaW5nbGVcIj48L2R4by1zb3J0aW5nPlxyXG4gICAgICAgICAgICAgICAgPGR4by1zY3JvbGxpbmcgbW9kZT1cImhvcml6b250YWxcIiBzaG93U2Nyb2xsYmFyPVwiYWx3YXlzXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gW2ZpeGVkXT1cInRydWVcIiBkYXRhRmllbGQ9XCJpZFwiIHdpZHRoPVwiMTIwXCIgW2FsbG93R3JvdXBpbmddPVwiZmFsc2VcIiBbYWxsb3dGaWx0ZXJpbmddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBbYWxsb3dIZWFkZXJGaWx0ZXJpbmddPVwiZmFsc2VcIiBjZWxsVGVtcGxhdGU9XCJmaWxlT3BlcmF0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3sgJ0FicFVpOjpBY3Rpb25zJyB8IGFicExvY2FsaXphdGlvbiB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IHJvdyBvZiAnZmlsZU9wZXJhdGlvblRlbXBsYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGRyb3Bkb3duLXRvZ2dsZVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvZyBtci0xXCI+PC9pPiB7eyAnQWJwVWk6OkFjdGlvbnMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwiRG93bmxvYWRGaWxlKHJvdy5kYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L2k+IHt7ICdlRG9udXN1bTo6RG93bmxvYWQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gW2FsbG93RWRpdGluZ109XCJmYWxzZVwiIGRhdGFGaWVsZD1cImV4dHJhSXRlbVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6TmFtZSd8YWJwTG9jYWxpemF0aW9ufX1cIj5cclxuICAgICAgICAgICAgICAgICAgPGR4by1sb29rdXAgW2RhdGFTb3VyY2VdPVwiaW52b2ljZUZpbGVOYW1lTG9va3VwXCIgdmFsdWVFeHByPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwiZGlzcGxheU5hbWVcIj48L2R4by1sb29rdXA+XHJcbiAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT57eyAnQWJwVWk6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2J1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2FicC1tb2RhbD5cclxuIl19
|
|
1280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWluYm91bmQtaW52b2ljZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lLWRvbnVzdW0vc3JjL2xpYi9jb21wb25lbnRzL2hpdC1pbmJvdW5kLWludm9pY2VzL2hpdC1pbmJvdW5kLWludm9pY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZS1kb251c3VtL3NyYy9saWIvY29tcG9uZW50cy9oaXQtaW5ib3VuZC1pbnZvaWNlcy9oaXQtaW5ib3VuZC1pbnZvaWNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUF1QyxNQUFNLGNBQWMsQ0FBQztBQUN2SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQTZDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUQsT0FBTyxXQUFXLE1BQU0sOEJBQThCLENBQUM7QUFHdkQsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUtwRSxPQUFPLEVBQUUsUUFBUSxFQUFPLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCckMsTUFBTSxPQUFPLDBCQUEwQjtJQXFHbkMsWUFDb0IsSUFBaUIsRUFDaEIsT0FBaUMsRUFDakMsY0FBaUMsRUFDakMsa0JBQXNDLEVBQ3RDLHdCQUFrRCxFQUNsRCxXQUF3QixFQUN4QixxQkFBa0MsRUFDbEMsc0JBQW1DLEVBQ25DLGNBQThCLEVBQzlCLDJCQUEyRCxFQUMzRCxHQUFzQixFQUN0QixZQUFpQyxFQUNqQyxnQkFBa0MsRUFDbEMsdUJBQW1ELEVBQ25ELEtBQXFC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TUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDTCxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBQlAsIGlzTnVsbE9yRW1wdHksIGlzTnVsbE9yVW5kZWZpbmVkLCBMaXN0U2VydmljZSwgTG9jYWxpemF0aW9uU2VydmljZSwgUGFnZWRSZXN1bHREdG8gfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkL2V4dGVuc2lvbnMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkluaXQsIFBpcGUsIFBpcGVUcmFuc2Zvcm0sIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JEYXRlQWRhcHRlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgRHhEYXRhR3JpZENvbXBvbmVudCwgRHhUYWJQYW5lbENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCBDdXN0b21TdG9yZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvY3VzdG9tX3N0b3JlJztcclxuaW1wb3J0IHsgSGl0SW5ib3VuZEludm9pY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L2hpdC1pbmJvdW5kLWludm9pY2VzL2hpdC1pbmJvdW5kLWludm9pY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdEludm9pY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L2hpdC1pbnZvaWNlcy9oaXQtaW52b2ljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlLCBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHsgZm9ybWF0RGF0ZSwgZ2V0TG9jYWxlRGF0ZUZvcm1hdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEhpdEJ1c2luZXNzUGFydG5lckdyb3VwU2VydmljZSB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9oaXQtYnVzaW5lc3MtcGFydG5lci1ncm91cHMvaGl0LWJ1c2luZXNzLXBhcnRuZXItZ3JvdXAuc2VydmljZSc7XHJcbmltcG9ydCB7IEJwQWRkcmVzcywgQ2F0YWxvZ01hdGNoTGluZUR0bywgQ29ubmVjdG9yRHJhZnREb2N1bWVudER0bywgQ29ubmVjdG9yRHJhZnREb2N1bWVudExpbmVEdG8sIENvbm5lY3Rvck11bHRpcGxlRW1wdHlEcmFmdER0bywgQ29ubmVjdG9yUHVyY2hhc2VJbnZvaWNlRG9jdW1lbnREdG8sIENvbm5lY3RvclB1cmNoYXNlSW52b2ljZURvY3VtZW50TGluZUR0bywgQ3JlYXRlQnVzaW5lc3NQYXJ0bmVyU3VwcGxpZXJEdG8sIEludm9pY2VYbWxMaW5lRHRvLCBNYW51YWxMaW5lRHRvLCBPcGVuRG9jdW1lbnREdG8sIFNhcFRheEdyb3VwRHRvIH0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L2hpdC1pbmJvdW5kLWludm9pY2VzL21vZGVscyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSGl0QnJhbmNoZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L2hpdC1icmFuY2hlcy9oaXQtYnJhbmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIaXRQYXJhbXNHZW5lcmFsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvaGl0LXBhcmFtcy1nZW5lcmFscy9oaXQtcGFyYW1zLWdlbmVyYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvc2hhcmVkL2hpdC1zaGFyZWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdEZpbGVEb2N1bWVudFR5cGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L2hpdC1maWxlLWRvY3VtZW50LXR5cGUvaGl0LWZpbGUtZG9jdW1lbnQtdHlwZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxudHlwZSBJbmJvdW5kSW52b2ljZVZpZXdNb2RlID0gJ3VucHJvY2Vzc2VkJyB8ICdwcm9jZXNzZWQnO1xyXG50eXBlIFByb2Nlc3NlZEludm9pY2VGaWx0ZXIgPSAnZHJhZnQnIHwgJ3JlZ2lzdGVyZWQnIHwgJ21hbnVhbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWluYm91bmQtaW52b2ljZScsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXHJcbiAgICBwcm92aWRlcnM6IFtMaXN0U2VydmljZSwgeyBwcm92aWRlOiBOZ2JEYXRlQWRhcHRlciwgdXNlQ2xhc3M6IERhdGVBZGFwdGVyIH1dLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hpdC1pbmJvdW5kLWludm9pY2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVzOiBbXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpdEluYm91bmRJbnZvaWNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdW5wcm9jZXNzZWRTdGF0dXNlcyA9IFs2MDAsIDcwMF07XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NlZFN0YXR1c2VzID0gWzY1MCwgNzUwLCA2NzAsIDc3MCwgNjgwLCA3ODBdO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzZWRTdGF0dXNHcm91cHM6IFJlY29yZDxQcm9jZXNzZWRJbnZvaWNlRmlsdGVyLCBudW1iZXJbXT4gPSB7XHJcbiAgICAgICAgZHJhZnQ6IFs2NTAsIDc1MF0sXHJcbiAgICAgICAgcmVnaXN0ZXJlZDogWzY3MCwgNzcwXSxcclxuICAgICAgICBtYW51YWw6IFs2ODAsIDc4MF1cclxuICAgIH07XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlJywgeyBzdGF0aWM6IGZhbHNlIH0pIGR4SW5ib3VuZEludm9pY2VJbnN0YW5jZTogRHhEYXRhR3JpZENvbXBvbmVudFxyXG4gICAgQFZpZXdDaGlsZCgnZHhQdXJjaGFzZU9yZGVyRG9jdW1lbnRzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGR4UHVyY2hhc2VPcmRlckRvY3VtZW50czogRHhEYXRhR3JpZENvbXBvbmVudFxyXG4gICAgQFZpZXdDaGlsZCgnZHhQdXJjaGFzZURlc3BhdGNoRG9jdW1lbnRzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGR4UHVyY2hhc2VEZXNwYXRjaERvY3VtZW50czogRHhEYXRhR3JpZENvbXBvbmVudFxyXG4gICAgQFZpZXdDaGlsZCgnZHhEb2N1bWVudExpbmVzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGR4RG9jdW1lbnRMaW5lczogRHhEYXRhR3JpZENvbXBvbmVudFxyXG4gICAgQFZpZXdDaGlsZCgndGFiUGFuZWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFiUGFuZWw6IER4VGFiUGFuZWxDb21wb25lbnRcclxuXHJcbiAgICBpbmJvdW5kSW52b2ljZXNEYXRhU291cmNlOiBhbnlcclxuICAgIGluYm91bmRJbnZvaWNlU3RhdHVzTG9va3VwOiBhbnlcclxuICAgIGluYm91bmRJbnZvaWNlUmVjZWl2ZXJSZXNwb25zZUxvb2t1cDogYW55XHJcbiAgICB2aWV3TW9kZTogSW5ib3VuZEludm9pY2VWaWV3TW9kZSA9ICd1bnByb2Nlc3NlZCc7XHJcbiAgICBpc0VBcmNoaXZlID0gZmFsc2U7XHJcbiAgICBzZWxlY3RlZFByb2Nlc3NlZEZpbHRlcjogUHJvY2Vzc2VkSW52b2ljZUZpbHRlciA9IG51bGw7XHJcblxyXG4gICAgcGFydG5lckF2YWlsYWJsZUFjY291bnRzOiBBcnJheTx7IGlkOiBzdHJpbmcsIHRleHQ6IHN0cmluZyB9PiA9IFtdO1xyXG4gICAgb2JqZWN0VHlwZXNMb29rdXA6IEFycmF5PHsgaWQ6IHN0cmluZywgdGV4dDogc3RyaW5nIH0+ID0gW1xyXG4gICAgICAgIHsgaWQ6IFwiMjBcIiwgdGV4dDogXCJTYXTEsW4gQWxtYSDEsHJzYWxpeWVzaVwiIH0sXHJcbiAgICAgICAgeyBpZDogXCIyMlwiLCB0ZXh0OiBcIlNhdMSxbiBBbG1hIFNpcGFyacWfaVwiIH1cclxuICAgIF07IHBhcnRuZXJBdmFpbGFibGVTZXJpZXM6IFtdO1xyXG4gICAgcGFydG5lckF2YWlsYWJsZUdyb3VwczogW107XHJcbiAgICBwYXJ0bmVyQXZhaWxhYmxlQ291bnRyaWVzOiBbXTtcclxuICAgIHBhcnRuZXJBdmFpbGFibGVTdGF0ZXM6IFtdO1xyXG4gICAgb3BlbkRvY3VtZW50c0ZvclBhcnRuZXI6IFtdO1xyXG4gICAgaW52b2ljZU9iamVjdHNFbnVtTG9va3VwOiBhbnk7XHJcbiAgICBpbnZvaWNlRmlsZXNEYXRhU291cmNlOiBhbnlcclxuICAgIHVzZXJDb21tZW50TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICBpc1NhdmluZ0NvbW1lbnQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBwdXJjaGFzZU9yZGVyRG9jdW1lbnRzOiBbXTtcclxuICAgIGRvY3VtZW50TGluZXM6IE9wZW5Eb2N1bWVudER0b1tdID0gW107XHJcbiAgICBwdXJjaGFzZURlc3BhdGNoRG9jdW1lbnRzOiBbXTtcclxuICAgIGlzTW9kYWxCdXN5Rm9yUmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIGlzTW9kYWxPcGVuRm9yUmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIGlzTW9kYWxCdXN5Rm9yUGFydG5lciA9IGZhbHNlO1xyXG4gICAgaXNNb2RhbE9wZW5Gb3JQYXJ0bmVyID0gZmFsc2U7XHJcbiAgICBpc01vZGFsQnVzeUZvck9wZW5Eb2NzID0gZmFsc2U7XHJcbiAgICBpc01vZGFsT3BlbkZvck9wZW5Eb2NzID0gZmFsc2U7XHJcbiAgICBpc01vZGFsQnVzeUZvckRvY3VtZW50ID0gZmFsc2U7XHJcbiAgICBpc01vZGFsT3BlbkZvckRvY3VtZW50ID0gZmFsc2U7XHJcbiAgICBpc0xvYWRpbmdTdGF0ZXMgPSBmYWxzZTtcclxuICAgIGlzTG9hZGluZ1NlcmllcyA9IGZhbHNlO1xyXG4gICAgaXNMb2FkaW5nR3JvdXBzID0gZmFsc2U7XHJcbiAgICBpc0xvYWRpbmdBY2NvdW50cyA9IGZhbHNlO1xyXG4gICAgaXNMb2FkaW5nQ291bnRyaWVzID0gZmFsc2U7XHJcbiAgICBpc0ZpbGVNb2RhbE9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICBmYXR1cmFPbml6bGVtZTogYW55O1xyXG4gICAgZm9ybVJlc3BvbnNlOiBGb3JtR3JvdXA7XHJcbiAgICBmb3JtUGFydG5lcjogRm9ybUdyb3VwO1xyXG4gICAgZm9ybURvY3VtZW50OiBGb3JtR3JvdXA7XHJcblxyXG4gICAgY291bnRyeUdyaWRCb3hWYWx1ZTogYW55XHJcbiAgICBpc0NvdW50cnlHcmlkQm94T3BlbmVkOiBib29sZWFuXHJcblxyXG4gICAgc3RhdGVHcmlkQm94VmFsdWU6IGFueVxyXG4gICAgaXNTdGF0ZUdyaWRCb3hPcGVuZWQ6IGJvb2xlYW5cclxuXHJcbiAgICBzZXJpYWxHcmlkQm94VmFsdWU6IGFueVxyXG4gICAgaXNTZXJpYWxHcmlkQm94T3BlbmVkOiBib29sZWFuXHJcblxyXG4gICAgZ3JvdXBHcmlkQm94VmFsdWU6IGFueVxyXG4gICAgaXNHcm91cEdyaWRCb3hPcGVuZWQ6IGJvb2xlYW5cclxuXHJcbiAgICBhY2NvdW50R3JpZEJveFZhbHVlOiBhbnlcclxuICAgIGlzQWNjb3VudEdyaWRCb3hPcGVuZWQ6IGJvb2xlYW5cclxuXHJcbiAgICBicmFuY2hlc0RhdGFTb3VyY2U6IGFueTtcclxuICAgIHNlbGVjdGVkSW5ib3VuZEludm9pY2U6IGFueTtcclxuICAgIGNpdGllczogYW55O1xyXG4gICAgY2l0eVNlcnZpY2U6IGFueTtcclxuICAgIGlzRHJhZnQ6IGFueTtcclxuICAgIGlzQnJhbmNoID0gZmFsc2U7XHJcblxyXG4gICAgZHJhZnRSZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG4gICAgcmVzdWx0UG9wdXBWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBoYXNWYWxpZFNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgYnJhbmNoUG9wdXBWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBzZWxlY3RlZEJyYW5jaElkOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICAgIGludm9pY2VGaWxlTmFtZUxvb2t1cDogYW55O1xyXG4gICAgaXNGaWxlTW9kYWxCdXN5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gTWFudWVsIEthbGVtIEVrbGVcclxuICAgIGlzTW9kYWxPcGVuRm9yTWFudWFsTGluZSA9IGZhbHNlO1xyXG4gICAgaXNNb2RhbEJ1c3lGb3JNYW51YWxMaW5lID0gZmFsc2U7XHJcbiAgICBtYW51YWxMaW5lczogTWFudWFsTGluZUR0b1tdID0gW107XHJcbiAgICBpdGVtc0dyaWRTdG9yZTogYW55O1xyXG4gICAgdGF4R3JvdXBzOiBTYXBUYXhHcm91cER0b1tdID0gW107XHJcblxyXG4gICAgLy8gTXVoYXRhcCBLYXRhbG9nIE51bWFyYXPEsVxyXG4gICAgaXNNb2RhbE9wZW5Gb3JDYXRhbG9nID0gZmFsc2U7XHJcbiAgICBpc01vZGFsQnVzeUZvckNhdGFsb2cgPSBmYWxzZTtcclxuICAgIGNhdGFsb2dNYXRjaExpbmVzOiBDYXRhbG9nTWF0Y2hMaW5lRHRvW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbGlzdDogTGlzdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlOiBIaXRJbmJvdW5kSW52b2ljZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbnZvaWNlU2VydmljZTogSGl0SW52b2ljZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBoaXRCcmFuY2hlc1NlcnZpY2U6IEhpdEJyYW5jaGVzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGhpdFBhcmFtc0dlbmVyYWxzU2VydmljZTogSGl0UGFyYW1zR2VuZXJhbHNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXJGb3JQYXJ0bmVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyRm9yRG9jdW1lbnQ6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYnVzaW5lc3NQYXJ0bmVyR3JvdXBTZXJ2aWNlOiBIaXRCdXNpbmVzc1BhcnRuZXJHcm91cFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaGl0U2hhcmVkU2VydmljZTogSGl0U2hhcmVkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVEb2N1bWVudFR5cGVTZXJ2aWNlOiBIaXRGaWxlRG9jdW1lbnRUeXBlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuY291bnRyeUdyaWRCb3hfZGlzcGxheUV4cHIgPSB0aGlzLmNvdW50cnlHcmlkQm94X2Rpc3BsYXlFeHByLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLnN0YXRlR3JpZEJveF9kaXNwbGF5RXhwciA9IHRoaXMuc3RhdGVHcmlkQm94X2Rpc3BsYXlFeHByLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLnNlcmlhbEdyaWRCb3hfZGlzcGxheUV4cHIgPSB0aGlzLnNlcmlhbEdyaWRCb3hfZGlzcGxheUV4cHIuYmluZCh0aGlzKVxyXG4gICAgICAgIHRoaXMuZ3JvdXBHcmlkQm94X2Rpc3BsYXlFeHByID0gdGhpcy5ncm91cEdyaWRCb3hfZGlzcGxheUV4cHIuYmluZCh0aGlzKVxyXG4gICAgICAgIHRoaXMuYWNjb3VudEdyaWRCb3hfZGlzcGxheUV4cHIgPSB0aGlzLmFjY291bnRHcmlkQm94X2Rpc3BsYXlFeHByLmJpbmQodGhpcylcclxuICAgIH1cclxuICAgIGNvdW50cnlHcmlkQm94X2Rpc3BsYXlFeHByKCkge1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodGhpcy5jb3VudHJ5R3JpZEJveFZhbHVlKSAmJiAhaXNOdWxsT3JFbXB0eSh0aGlzLmNvdW50cnlHcmlkQm94VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVBhcnRuZXIuY29udHJvbHMucGFydG5lckNvdW50cnkuc2V0VmFsdWUodGhpcy5jb3VudHJ5R3JpZEJveFZhbHVlWzBdLmNvZGUpXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RhdGVzKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNvdW50cnlHcmlkQm94VmFsdWVbMF0ubmFtZX1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0ZUdyaWRCb3hfZGlzcGxheUV4cHIoKSB7XHJcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLnN0YXRlR3JpZEJveFZhbHVlKSAmJiAhaXNOdWxsT3JFbXB0eSh0aGlzLnN0YXRlR3JpZEJveFZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1QYXJ0bmVyLmNvbnRyb2xzLnBhcnRuZXJTdGF0ZS5zZXRWYWx1ZSh0aGlzLnN0YXRlR3JpZEJveFZhbHVlWzBdLmNvZGUpXHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLnN0YXRlR3JpZEJveFZhbHVlWzBdLm5hbWV9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2VyaWFsR3JpZEJveF9kaXNwbGF5RXhwcigpIHtcclxuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuc2VyaWFsR3JpZEJveFZhbHVlKSAmJiAhaXNOdWxsT3JFbXB0eSh0aGlzLnNlcmlhbEdyaWRCb3hWYWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtUGFydG5lci5jb250cm9scy5wYXJ0bmVyU2VyaWVzLnNldFZhbHVlKHRoaXMuc2VyaWFsR3JpZEJveFZhbHVlWzBdLnNlcmllcylcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VyaWFsR3JpZEJveFZhbHVlWzBdLm5hbWV9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXBHcmlkQm94X2Rpc3BsYXlFeHByKCkge1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodGhpcy5ncm91cEdyaWRCb3hWYWx1ZSkgJiYgIWlzTnVsbE9yRW1wdHkodGhpcy5ncm91cEdyaWRCb3hWYWx1ZSkpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVBhcnRuZXIuY29udHJvbHMucGFydG5lckdyb3VwLnNldFZhbHVlKHRoaXMuZ3JvdXBHcmlkQm94VmFsdWVbMF0uY29kZSlcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZ3JvdXBHcmlkQm94VmFsdWVbMF0ubmFtZX1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY2NvdW50R3JpZEJveF9kaXNwbGF5RXhwcigpIHtcclxuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuYWNjb3VudEdyaWRCb3hWYWx1ZSkgJiYgIWlzTnVsbE9yRW1wdHkodGhpcy5hY2NvdW50R3JpZEJveFZhbHVlKSkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mb3JtUGFydG5lci5jb250cm9scy5wYXJ0bmVyQWNjb3VudC5zZXRWYWx1ZSh0aGlzLmFjY291bnRHcmlkQm94VmFsdWVbMF0uaWQpXHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmFjY291bnRHcmlkQm94VmFsdWVbMF0udGV4dH1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qIHNob3dBbGxGaWxlcyhyZWNvcmQpIHtcclxuICAgICAgICAgdGhpcy5pbnZvaWNlRmlsZXNEYXRhU291cmNlID0gdGhpcy5pbnZvaWNlU2VydmljZS5Mb2FkSW52b2ljZUZpbGVzKHJlY29yZC51dUlkKVxyXG4gICAgICAgICB0aGlzLmlzRmlsZU1vZGFsT3BlbiA9IHRydWU7XHJcbiAgICAgfSovXHJcbiAgICBvbkNvdW50cnlHcmlkQm94T3B0aW9uQ2hhbmdlZChlKSB7XHJcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ3ZhbHVlJykge1xyXG5cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNDb3VudHJ5R3JpZEJveE9wZW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU3RhdGVHcmlkQm94T3B0aW9uQ2hhbmdlZChlKSB7XHJcbiAgICAgICAgaWYgKGUubmFtZSA9PT0gJ3ZhbHVlJykge1xyXG5cclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNTdGF0ZUdyaWRCb3hPcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlcmlhbEdyaWRCb3hPcHRpb25DaGFuZ2VkKGUpIHtcclxuICAgICAgICBpZiAoZS5uYW1lID09PSAndmFsdWUnKSB7XHJcblxyXG5cclxuICAgICAgICAgICAgdGhpcy5pc1NlcmlhbEdyaWRCb3hPcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkdyb3VwR3JpZEJveE9wdGlvbkNoYW5nZWQoZSkge1xyXG4gICAgICAgIGlmIChlLm5hbWUgPT09ICd2YWx1ZScpIHtcclxuXHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzR3JvdXBHcmlkQm94T3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25BY2NvdW50R3JpZEJveE9wdGlvbkNoYW5nZWQoZSkge1xyXG4gICAgICAgIGlmIChlLm5hbWUgPT09ICd2YWx1ZScpIHtcclxuXHJcblxyXG4gICAgICAgICAgICB0aGlzLmlzQWNjb3VudEdyaWRCb3hPcGVuZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnZpZXdNb2RlID8/ICd1bnByb2Nlc3NlZCc7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVJbmJvdW5kSW52b2ljZXNEYXRhU291cmNlKCk7XHJcbiAgICAgICAgdGhpcy5pbnZvaWNlU2VydmljZS5nZXRTdGF0dXNlcygpLnN1YnNjcmliZShsaXN0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbmJvdW5kSW52b2ljZVN0YXR1c0xvb2t1cCA9IHRoaXMuaXNQcm9jZXNzZWRWaWV3XHJcbiAgICAgICAgICAgICAgICA/IGxpc3QubWFwKHN0YXR1cyA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpcy5nZXRQcm9jZXNzZWRTdGF0dXNEaXNwbGF5TmFtZShzdGF0dXMuaWQpID8/IHN0YXR1cy5kaXNwbGF5TmFtZVxyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICA6IGxpc3Q7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maWxlRG9jdW1lbnRUeXBlU2VydmljZS5nZXRGaWxlRG9jdW1lbnRUeXBlcygpLnN1YnNjcmliZShsaXN0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbnZvaWNlRmlsZU5hbWVMb29rdXAgPSBsaXN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaW52b2ljZVNlcnZpY2UuZ2V0UmVjZWl2ZXJSZXNwb25zZXMoKS5zdWJzY3JpYmUobGlzdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5ib3VuZEludm9pY2VSZWNlaXZlclJlc3BvbnNlTG9va3VwID0gbGlzdDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmhpdFBhcmFtc0dlbmVyYWxzU2VydmljZS5nZXRQYXJhbXNHZW5lcmFsKCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc0JyYW5jaCA9IGRhdGEuaXNCcmFuY2g7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0JyYW5jaCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaXRCcmFuY2hlc1NlcnZpY2UuZ2V0QnJhbmNoZXMoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5icmFuY2hlc0RhdGFTb3VyY2UgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdDb3VudHJpZXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRDb3VudHJpZXMoKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0NvdW50cmllcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChsaXN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0bmVyQXZhaWxhYmxlQ291bnRyaWVzID0gbGlzdDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIsOcbGtlbGVyIHnDvGtsZW5pcmtlbiBiaXIgaGF0YSBvbHXFn3R1LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNvdW50cmllczonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmlzTG9hZGluZ0dyb3VwcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1BhcnRuZXJHcm91cFNlcnZpY2UuZ2V0U3VwcGxpZXJHcm91cHMoKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0dyb3VwcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChsaXN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0bmVyQXZhaWxhYmxlR3JvdXBzID0gbGlzdDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIlBhcnRuZXIgZ3J1cGxhcsSxIHnDvGtsZW5pcmtlbiBiaXIgaGF0YSBvbHXFn3R1LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGdyb3VwczonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmludm9pY2VTZXJ2aWNlLmdldFNhcE9iamVjdHMoKS5zdWJzY3JpYmUobGlzdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW52b2ljZU9iamVjdHNFbnVtTG9va3VwID0gbGlzdDtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1Byb2Nlc3NlZFZpZXcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld01vZGUgPT09ICdwcm9jZXNzZWQnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwYWdlVGl0bGVLZXkoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1Byb2Nlc3NlZFZpZXdcclxuICAgICAgICAgICAgPyAnZURvbnVzdW06OlByb2Nlc3NlZEluYm91bmRJbnZvaWNlcydcclxuICAgICAgICAgICAgOiAnZURvbnVzdW06OlVucHJvY2Vzc2VkSW5ib3VuZEludm9pY2VzJztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGFnZURlc2NyaXB0aW9uS2V5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNQcm9jZXNzZWRWaWV3XHJcbiAgICAgICAgICAgID8gJ2VEb251c3VtOjpQcm9jZXNzZWRJbmJvdW5kSW52b2ljZXNEZXNjcmlwdGlvbidcclxuICAgICAgICAgICAgOiAnZURvbnVzdW06OlVucHJvY2Vzc2VkSW5ib3VuZEludm9pY2VzRGVzY3JpcHRpb24nO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdEludm9pY2VUeXBlKGlzRUFyY2hpdmU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc0VBcmNoaXZlID09PSBpc0VBcmNoaXZlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNFQXJjaGl2ZSA9IGlzRUFyY2hpdmU7XHJcbiAgICAgICAgdGhpcy5yZWxvYWRJbmJvdW5kSW52b2ljZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RQcm9jZXNzZWRGaWx0ZXIoZmlsdGVyOiBQcm9jZXNzZWRJbnZvaWNlRmlsdGVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9jZXNzZWRGaWx0ZXIgPT09IGZpbHRlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvY2Vzc2VkRmlsdGVyID0gZmlsdGVyO1xyXG4gICAgICAgIHRoaXMucmVsb2FkSW5ib3VuZEludm9pY2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maWd1cmVJbmJvdW5kSW52b2ljZXNEYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZVN0b3JlID0gdGhpcy5zZXJ2aWNlLkxvYWRJbmJvdW5kSW52b2ljZXM7XHJcblxyXG4gICAgICAgIHRoaXMuaW5ib3VuZEludm9pY2VzRGF0YVNvdXJjZSA9IG5ldyBDdXN0b21TdG9yZSh7XHJcbiAgICAgICAgICAgIGtleTogJ2lkJyxcclxuICAgICAgICAgICAgbG9hZDogbG9hZE9wdGlvbnMgPT4gc291cmNlU3RvcmUubG9hZCh7XHJcbiAgICAgICAgICAgICAgICAuLi5sb2FkT3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIGZpbHRlcjogdGhpcy5jb21iaW5lRmlsdGVycyh0aGlzLmdldFJlcXVpcmVkSW5ib3VuZEludm9pY2VGaWx0ZXIoKSwgbG9hZE9wdGlvbnMuZmlsdGVyKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UmVxdWlyZWRJbmJvdW5kSW52b2ljZUZpbHRlcigpOiBhbnlbXSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzZXMgPSB0aGlzLmlzUHJvY2Vzc2VkVmlld1xyXG4gICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRQcm9jZXNzZWRGaWx0ZXJcclxuICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzZWRTdGF0dXNHcm91cHNbdGhpcy5zZWxlY3RlZFByb2Nlc3NlZEZpbHRlcl1cclxuICAgICAgICAgICAgICAgIDogdGhpcy5wcm9jZXNzZWRTdGF0dXNlc1xyXG4gICAgICAgICAgICA6IHRoaXMudW5wcm9jZXNzZWRTdGF0dXNlcztcclxuICAgICAgICBjb25zdCBzdGF0dXNGaWx0ZXIgPSBzdGF0dXNlc1xyXG4gICAgICAgICAgICAubWFwKHN0YXR1cyA9PiBbJ3N0YXR1cycsICc9Jywgc3RhdHVzXSlcclxuICAgICAgICAgICAgLnJlZHVjZSgoZmlsdGVyLCBjdXJyZW50KSA9PiBmaWx0ZXIgPyBbZmlsdGVyLCAnb3InLCBjdXJyZW50XSA6IGN1cnJlbnQsIG51bGwpO1xyXG5cclxuICAgICAgICByZXR1cm4gW3N0YXR1c0ZpbHRlciwgJ2FuZCcsIFsnaXNFQXJjaGl2ZScsICc9JywgdGhpcy5pc0VBcmNoaXZlXV07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb21iaW5lRmlsdGVycyhyZXF1aXJlZEZpbHRlcjogYW55W10sIGdyaWRGaWx0ZXI6IGFueSk6IGFueVtdIHtcclxuICAgICAgICByZXR1cm4gZ3JpZEZpbHRlciA/IFtyZXF1aXJlZEZpbHRlciwgJ2FuZCcsIGdyaWRGaWx0ZXJdIDogcmVxdWlyZWRGaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWxvYWRJbmJvdW5kSW52b2ljZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5wYWdlSW5kZXgoMCk7XHJcbiAgICAgICAgdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UucmVmcmVzaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UHJvY2Vzc2VkU3RhdHVzRGlzcGxheU5hbWUoc3RhdHVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3NlZFN0YXR1c0dyb3Vwcy5kcmFmdC5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnZURvbnVzdW06OlByb2Nlc3NlZEluYm91bmRJbnZvaWNlRHJhZnRTdGF0dXMnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2VkU3RhdHVzR3JvdXBzLnJlZ2lzdGVyZWQuaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ2VEb251c3VtOjpQcm9jZXNzZWRJbmJvdW5kSW52b2ljZVJlZ2lzdGVyZWRTdGF0dXMnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2VkU3RhdHVzR3JvdXBzLm1hbnVhbC5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnZURvbnVzdW06OlByb2Nlc3NlZEluYm91bmRJbnZvaWNlTWFudWFsU3RhdHVzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0SW5ib3VuZEludm9pY2UoKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEluYm91bmRJbnZvaWNlKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UucmVmcmVzaCgpKVxyXG4gICAgfVxyXG5cclxuICAgIGdldEludm9pY2VQcmV2aWV3KHJlY29yZCkge1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEluYm91bmRJbnZvaWNlVmlldyhyZWNvcmQudXVJZCkuc3Vic2NyaWJlKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhpdFNoYXJlZFNlcnZpY2UucHJldmlld0ZpbGUoaXRlbS5jb250ZW50LCBpdGVtLmZpbGVuYW1lKTtcclxuXHJcbiAgICAgICAgICAgIC8qY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gYGRhdGE6JHtpdGVtLm1pbWVUeXBlfTtiYXNlNjQsJHtpdGVtLmNvbnRlbnR9YDtcclxuICAgICAgICAgICAgbGluay5ocmVmID0gc291cmNlO1xyXG4gICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gYCR7aXRlbS5maWxlbmFtZX1gO1xyXG4gICAgICAgICAgICBsaW5rLmNsaWNrKCk7Ki9cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHZpZXdQREZzTXVsdGlwbGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2VcclxuICAgICAgICAgICAgLmdldFZpc2libGVSb3dzKClcclxuICAgICAgICAgICAgLmZpbHRlcihpID0+IGkuaXNTZWxlY3RlZCA9PSB0cnVlKTtcclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkUm93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKFwiTMO8dGZlbiBlbiBheiBiaXIgZmF0dXJhIHNlw6dpbml6LlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VsZWN0ZWRSb3dzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW52b2ljZU5vID0gcm93LmRhdGEuaW52b2ljZUlkO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEluYm91bmRJbnZvaWNlVmlldyhyb3cuZGF0YS51dUlkKS5zdWJzY3JpYmUoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbGVhbkJhc2U2NCA9IGl0ZW0uY29udGVudC5pbmNsdWRlcygnLCcpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBpdGVtLmNvbnRlbnQuc3BsaXQoJywnKVsxXVxyXG4gICAgICAgICAgICAgICAgICAgIDogaXRlbS5jb250ZW50O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gVWludDhBcnJheS5mcm9tKGF0b2IoY2xlYW5CYXNlNjQpLCBjID0+IGMuY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VGFiID0gd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJywgJ25vb3BlbmVyJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3VGFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFiLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFiLmRvY3VtZW50LnRpdGxlID0gaW52b2ljZU5vID8/IHJvdy5kYXRhLnV1SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBGYXR1cmEgbnVtYXJhc8SxeWxhIGluZGlyXHJcbiAgICAgICAgICAgICAgICAvKiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgIGEuaHJlZiA9IHVybDtcclxuICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGAke2ludm9pY2VObyA/PyByb3cuZGF0YS51dUlkfS5wZGZgO1xyXG4gICAgICAgICAgICAgICAgICAgICBhLmNsaWNrKCk7ICovXHJcblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCksIDYwXzAwMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJvd0NvbW1lbnQocmVjb3JkOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghcmVjb3JkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckNvbW1lbnRNYXBbcmVjb3JkLmlkXSA/PyByZWNvcmQudXNlckNvbW1lbnQgPz8gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgb25Vc2VyQ29tbWVudENoYW5nZWQodmFsdWU6IHN0cmluZywgcmVjb3JkOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXJlY29yZCB8fCAhcmVjb3JkLmlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2VyQ29tbWVudE1hcFtyZWNvcmQuaWRdID0gKHZhbHVlID8/ICcnKS50cmltKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVVzZXJDb21tZW50KHJlY29yZDogYW55KSB7XHJcbiAgICAgICAgaWYgKCFyZWNvcmQgfHwgIXJlY29yZC5pZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb21tZW50ID0gKHRoaXMudXNlckNvbW1lbnRNYXBbcmVjb3JkLmlkXSA/PyByZWNvcmQudXNlckNvbW1lbnQgPz8gJycpLnRyaW0oKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29tbWVudC5sZW5ndGggPiAyNTQpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKCdBw6fEsWtsYW1hIGVuIGZhemxhIDI1NCBrYXJha3RlciBvbGFiaWxpci4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc1NhdmluZ0NvbW1lbnRbcmVjb3JkLmlkXSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNhdmVJbnZvaWNlVXNlckNvbW1lbnQocmVjb3JkLmlkLCBjb21tZW50KVxyXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2F2aW5nQ29tbWVudFtyZWNvcmQuaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MoJ0HDp8Sxa2xhbWEga2F5ZGVkaWxkaS4nKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJDb21tZW50TWFwW3JlY29yZC5pZF0gPSBjb21tZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudXNlckNvbW1lbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQudXNlckNvbW1lbnQgPSBjb21tZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoJ0HDp8Sxa2xhbWEga2F5ZGVkaWxpcmtlbiBiaXIgaGF0YSBvbHXFn3R1LicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyB1c2VyIGNvbW1lbnQ6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuUmVzcG9uc2VNb2RhbChyZWNvcmQpIHtcclxuXHJcbiAgICAgICAgdGhpcy5idWlsZEZvcm0ocmVjb3JkKTtcclxuICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yUmVzcG9uc2UgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRm9ybShyZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmZvcm1SZXNwb25zZSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBpZDogcmVjb3JkLmlkLFxyXG4gICAgICAgICAgICBpbnZvaWNlVVVJRDogcmVjb3JkLnV1SWQsXHJcbiAgICAgICAgICAgIGlzQWNjZXB0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbmRJbnZvaWNlUmVzcG9uc2UocmVzcG9uc2U6IGJvb2xlYW4pIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybVJlc3BvbnNlLmludmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZm9ybVJlc3BvbnNlLnZhbHVlXHJcblxyXG4gICAgICAgIHRoaXMuc2VydmljZS5zZW5kSW52b2ljZVJlc3BvbnNlKHJlc3VsdC5pbnZvaWNlVVVJRCwgcmVzcG9uc2UsIHJlc3VsdC5pZCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yUmVzcG9uc2UgPSBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5QYXJ0bmVyTW9kYWwocmVjb3JkKSB7XHJcblxyXG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuaW5mbyhcIk11aGF0YXAga29udHJvbMO8IHlhcMSxbMSxeW9yLCBsw7x0ZmVuIGJla2xleWluaXouXCIpXHJcbiAgICAgICAgbGV0IGNhcmRUeXBlID0gXCJjU3VwcGxpZXJcIjtcclxuICAgICAgICBpZiAocmVjb3JkLmludm9pY2VUeXBlQ29kZSA9PSBcIklBREVcIilcclxuICAgICAgICAgICAgY2FyZFR5cGUgPSBcImNDdXN0b21lclwiO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5jaGVja0J1c2luZXNzUGFydG5lckV4aXN0KHJlY29yZC5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eVZrblRja24sY2FyZFR5cGUpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEZvcm1Gb3JQYXJ0bmVyKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihyZWNvcmQuYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuICsgXCIgbnVtYXJhbMSxIHNhdMSxY8SxIHphdGVuIG1ldmN1dC5cIilcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0ZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdTdGF0ZXMgPSB0cnVlO1xyXG4gICAgICAgIC8vIMOWbmNlIG1ldmN1dCBzdGF0ZSBzZcOnaW1pbmkgdGVtaXpsZVxyXG4gICAgICAgIHRoaXMuZm9ybVBhcnRuZXIuY29udHJvbHMucGFydG5lclN0YXRlLnNldFZhbHVlKCcnKTtcclxuICAgICAgICB0aGlzLnBhcnRuZXJBdmFpbGFibGVTdGF0ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldFN0YXRlcyh0aGlzLmZvcm1QYXJ0bmVyLmNvbnRyb2xzLnBhcnRuZXJDb3VudHJ5LnZhbHVlKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1N0YXRlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChsaXN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0bmVyQXZhaWxhYmxlU3RhdGVzID0gbGlzdDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIsSwbC9leWFsZXQgYmlsZ2lsZXJpIHnDvGtsZW5pcmtlbiBiaXIgaGF0YSBvbHXFn3R1LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHN0YXRlczonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVGb3JtUGFydG5lcigpIHtcclxuICAgICAgICB0aGlzLmlzTW9kYWxCdXN5Rm9yUGFydG5lciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNNb2RhbE9wZW5Gb3JQYXJ0bmVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mb3JtUGFydG5lci5yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUJ1c2luZXNzUGFydG5lcigpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybVBhcnRuZXIuaW52YWxpZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmlzTW9kYWxCdXN5Rm9yUGFydG5lciA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0RHRvQWRkcmVzc2VzOiBCcEFkZHJlc3NbXSA9IFtdXHJcbiAgICAgICAgcmVxdWVzdER0b0FkZHJlc3Nlcy5wdXNoKHtcclxuICAgICAgICAgICAgYWRkcmVzc05hbWU6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyQWRkcmVzcz8udmFsdWUsXHJcbiAgICAgICAgICAgIHN0cmVldDogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJTdHJlZXQ/LnZhbHVlLFxyXG4gICAgICAgICAgICBibG9jazogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJCbG9jaz8udmFsdWUsXHJcbiAgICAgICAgICAgIHppcENvZGU6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyWmlwQ29kZT8udmFsdWUsXHJcbiAgICAgICAgICAgIGNpdHk6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyQ2l0eT8udmFsdWUsXHJcbiAgICAgICAgICAgIGNvdW50eTogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJDb3VudHk/LnZhbHVlLFxyXG4gICAgICAgICAgICBjb3VudHJ5OiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ucGFydG5lckNvdW50cnk/LnZhbHVlLFxyXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJTdGF0ZT8udmFsdWUsXHJcbiAgICAgICAgICAgIGFkZHJlc3NUeXBlOiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ucGFydG5lckFkZHJlc3NUeXBlPy52YWx1ZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdER0bzogQ3JlYXRlQnVzaW5lc3NQYXJ0bmVyU3VwcGxpZXJEdG8gPSB7XHJcbiAgICAgICAgICAgIGNhcmRDb2RlOiBcIlwiLFxyXG4gICAgICAgICAgICB1bmlmaWVkRmVkZXJhbFRheElEOiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8udmtuPy52YWx1ZSxcclxuICAgICAgICAgICAgY2FyZE5hbWU6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5uYW1lPy52YWx1ZSxcclxuICAgICAgICAgICAgY2FyZFR5cGU6IFwiU1wiLFxyXG4gICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJDdXJyZW5jeT8udmFsdWUsXHJcbiAgICAgICAgICAgIGRlYml0b3JBY2NvdW50OiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ucGFydG5lckFjY291bnQ/LnZhbHVlLFxyXG4gICAgICAgICAgICBzZXJpZXM6IHRoaXMuZm9ybVBhcnRuZXI/LmNvbnRyb2xzPy5wYXJ0bmVyU2VyaWVzPy52YWx1ZSxcclxuICAgICAgICAgICAgZ3JvdXBDb2RlOiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ucGFydG5lckdyb3VwPy52YWx1ZSxcclxuICAgICAgICAgICAgd2Vic2l0ZTogdGhpcy5mb3JtUGFydG5lcj8uY29udHJvbHM/LnBhcnRuZXJXZWJTaXRlVVJJPy52YWx1ZSxcclxuICAgICAgICAgICAgYWRkaXRpb25hbElEOiB0aGlzLmZvcm1QYXJ0bmVyPy5jb250cm9scz8ucGFydG5lckFkZElkPy52YWx1ZSxcclxuICAgICAgICAgICAgYnBBZGRyZXNzZXM6IHJlcXVlc3REdG9BZGRyZXNzZXNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNlcnZpY2UuY3JlYXRlQnVzaW5lc3NQYXJ0bmVyRm9yU3VwcGxpZXIocmVxdWVzdER0bylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRm9ybVBhcnRuZXIoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKHJlc3VsdC5jYXJkQ29kZSArIFwiIGtvZGx1IG11aGF0YXAgYmHFn2FyxLF5bGEgb2x1xZ90dXJ1bGR1LlwiKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIk11aGF0YXAgb2x1xZ90dXJ1bHVya2VuIGJpciBoYXRhIG9sdcWfdHUuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ011aGF0YXAgb2x1xZ90dXJ1bHVya2VuIGJpciBoYXRhIG9sdcWfdHU6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZvcm1Gb3JQYXJ0bmVyKHJlY29yZCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRQYXJ0bmVyRGV0YWlscyhyZWNvcmQuaWQpLnN1YnNjcmliZShpbnZvaWNlID0+IHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybVBhcnRuZXIgPSB0aGlzLmZvcm1CdWlsZGVyRm9yUGFydG5lci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICB2a246IFtyZWNvcmQuYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuID8/IFwiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbcmVjb3JkLmFjY291bnRpbmdTdXBwbGllclBhcnR5TmFtZSA/PyBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgICAgICAgcGFydG5lckN1cnJlbmN5OiBbcmVjb3JkLmRvY3VtZW50Q3VycmVuY3lDb2RlID8/IFwiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyQWNjb3VudDogW1wiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyU2VyaWVzOiBbXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgICAgIHBhcnRuZXJHcm91cDogW1wiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyRW1haWw6IFtpbnZvaWNlPy5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eT8ucGFydHk/LmNvbnRhY3Q/LmVsZWN0cm9uaWNNYWlsPy52YWx1ZSA/PyBcIlwiXSxcclxuICAgICAgICAgICAgICAgIHBhcnRuZXJXZWJTaXRlVVJJOiBbaW52b2ljZT8uYWNjb3VudGluZ1N1cHBsaWVyUGFydHk/LnBhcnR5Py53ZWJzaXRlVVJJPy52YWx1ZSA/PyBcIlwiXSxcclxuICAgICAgICAgICAgICAgIHBhcnRuZXJBZGRJZDogW2ludm9pY2U/LmFjY291bnRpbmdTdXBwbGllclBhcnR5Py5wYXJ0eT8ucGFydHlUYXhTY2hlbWU/LnRheFNjaGVtZT8ubmFtZT8udmFsdWUgPz8gXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICAgICAgICAgIHBhcnRuZXJBZGRyZXNzVHlwZTogXCJCXCIsXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyQWRkcmVzczogXCJGYXR1cmEgQWRyZXNpXCIsXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyU3RyZWV0OiBbaW52b2ljZT8uYWNjb3VudGluZ1N1cHBsaWVyUGFydHk/LnBhcnR5Py5wb3N0YWxBZGRyZXNzPy5zdHJlZXROYW1lPy52YWx1ZSA/PyBcIlwiXSxcclxuICAgICAgICAgICAgICAgIHBhcnRuZXJCbG9jazogW2ludm9pY2U/LmFjY291bnRpbmdTdXBwbGllclBhcnR5Py5wYXJ0eT8ucG9zdGFsQWRkcmVzcz8uYmxvY2tOYW1lPy52YWx1ZSA/PyBcIlwiXSxcclxuICAgICAgICAgICAgICAgIHBhcnRuZXJDaXR5OiBbaW52b2ljZT8uYWNjb3VudGluZ1N1cHBsaWVyUGFydHk/LnBhcnR5Py5wb3N0YWxBZGRyZXNzPy5jaXR5TmFtZT8udmFsdWUgPz8gXCJcIl0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyWmlwQ29kZTogW2ludm9pY2U/LmFjY291bnRpbmdTdXBwbGllclBhcnR5Py5wYXJ0eT8ucG9zdGFsQWRkcmVzcz8ucG9zdGFsWm9uZT8udmFsdWUgPz8gXCJcIl0sXHJcbiAgICAgICAgICAgICAgICBwYXJ0bmVyQ291bnR5OiBbaW52b2ljZT8uYWNjb3VudGluZ1N1cHBsaWVyUGFydHk/LnBhcnR5Py5wb3N0YWxBZGRyZXNzPy5jaXR5U3ViZGl2aXNpb25OYW1lPy52YWx1ZSA/PyBcIlwiXSxcclxuICAgICAgICAgICAgICAgIHBhcnRuZXJTdGF0ZTogXCJcIixcclxuICAgICAgICAgICAgICAgIHBhcnRuZXJDb3VudHJ5OiBcIlwiXHJcblxyXG4gICAgICAgICAgICAgICAgLy9wYXJ0bmVyQ2l0eTogaW52b2ljZURldGFpbHMuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yUGFydG5lciA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nQWNjb3VudHMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VyaWFsR3JpZEJveFZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLmdyb3VwR3JpZEJveFZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLnN0YXRlR3JpZEJveFZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLmNvdW50cnlHcmlkQm94VmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuYWNjb3VudEdyaWRCb3hWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEJhbmtBY2NvdW50QnlDdXJyZW5jeShyZWNvcmQuZG9jdW1lbnRDdXJyZW5jeUNvZGUpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nQWNjb3VudHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAobGlzdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFydG5lckF2YWlsYWJsZUFjY291bnRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRuZXJBdmFpbGFibGVBY2NvdW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbGVtZW50LmFjY3RDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZWxlbWVudC5hY2N0Q29kZSArIFwiIFwiICsgZWxlbWVudC5hY2N0TmFtZS50b1VwcGVyQ2FzZSgpICsgXCIgXCIgKyBlbGVtZW50LmFjdEN1cnIudG9VcHBlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIkJhbmthIGhlc2FwbGFyxLEgecO8a2xlbmlya2VuIGJpciBoYXRhIG9sdcWfdHUuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgYWNjb3VudHM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdTZXJpZXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRQYXJ0bmVyTnVtYmVyaW5nU2VyaWVzKClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdTZXJpZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAobGlzdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFydG5lckF2YWlsYWJsZVNlcmllcyA9IGxpc3Q7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJTZXJpIG51bWFyYWxhcsSxIHnDvGtsZW5pcmtlbiBiaXIgaGF0YSBvbHXFn3R1LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHNlcmllczonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBhcnRuZXJBdmFpbGFibGVTdGF0ZXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZvcm1Gb3JEb2N1bWVudCgpIHtcclxuICAgICAgICB0aGlzLmZvcm1Eb2N1bWVudCA9IHRoaXMuZm9ybUJ1aWxkZXJGb3JEb2N1bWVudC5ncm91cCh7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQnJhbmNoOiB0aGlzLmJyYW5jaGVzRGF0YVNvdXJjZT8uZmlsdGVyKHAgPT4gcC5pc01haW4pWzBdLmNvZGUgPz8gXCJcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5EcmFmdEZvcm0ocmVjb3JkKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5pbmZvKFwiTXVoYXRhcCBrb250cm9sw7wgeWFwxLFsxLF5b3IsIGzDvHRmZW4gYmVrbGV5aW5pei5cIilcclxuICAgICAgICAgbGV0IGNhcmRUeXBlID0gXCJjU3VwcGxpZXJcIjtcclxuICAgICAgICBpZiAocmVjb3JkLmludm9pY2VUeXBlQ29kZSA9PSBcIklBREVcIilcclxuICAgICAgICAgICAgY2FyZFR5cGUgPSBcImNDdXN0b21lclwiO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5jaGVja0J1c2luZXNzUGFydG5lckV4aXN0KHJlY29yZC5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eVZrblRja24sY2FyZFR5cGUpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIsSwbGdpbGkgVktOJ3llIGFpdCAoXCIgKyByZWNvcmQuYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuICsgXCIpIG11aGF0YXAgYnVsdW5hbWFkxLEsIGzDvHRmZW4gw7ZuY2UgbXVoYXRhcCBvbHXFn3R1cnVuLlwiKVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGb3JtRm9yRG9jdW1lbnQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZSA9IHJlY29yZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNNb2RhbE9wZW5Gb3JEb2N1bWVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRHJhZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkRvY3VtZW50Rm9ybShyZWNvcmQpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmluZm8oXCJNdWhhdGFwIGtvbnRyb2zDvCB5YXDEsWzEsXlvciwgbMO8dGZlbiBiZWtsZXlpbml6LlwiKVxyXG4gICAgICAgIGxldCBjYXJkVHlwZSA9IFwiY1N1cHBsaWVyXCI7XHJcbiAgICAgICAgaWYgKHJlY29yZC5pbnZvaWNlVHlwZUNvZGUgPT0gXCJJQURFXCIpXHJcbiAgICAgICAgICAgIGNhcmRUeXBlID0gXCJjQ3VzdG9tZXJcIjtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuY2hlY2tCdXNpbmVzc1BhcnRuZXJFeGlzdChyZWNvcmQuYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuLGNhcmRUeXBlKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCLEsGxnaWxpIFZLTid5ZSBhaXQgKFwiICsgcmVjb3JkLmFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrbiArIFwiKSBtdWhhdGFwIGJ1bHVuYW1hZMSxLCBsw7x0ZmVuIMO2bmNlIG11aGF0YXAgb2x1xZ90dXJ1bi5cIilcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRm9ybUZvckRvY3VtZW50KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2UgPSByZWNvcmQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yRG9jdW1lbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RyYWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuT3BlbkRvY3VtZW50c0Zvcm0oKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5pbmZvKFwiQcOnxLFrIGJlbGdlIHNhdMSxcmxhcsSxIHNvcmd1bGFuxLF5b3IsIGzDvHRmZW4gYmVrbGV5aW5pei5cIilcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldE9wZW5Eb2N1bWVudHModGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlLmFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrbikuc3Vic2NyaWJlKGxpc3QgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5Eb2N1bWVudHNGb3JQYXJ0bmVyID0gbGlzdDtcclxuXHJcbiAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHVyY2hhc2VPcmRlckRvY3VtZW50cyA9IGxpc3QuZmlsdGVyKGRvYyA9PiBkb2Mub2JqVHlwZSA9PT0gMjIpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1NhdMSxbiBhbG1hIHNpcGFyacWfbGVyaSAoT2JqVHlwZT0yMik6JywgdGhpcy5wdXJjaGFzZU9yZGVyRG9jdW1lbnRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBPYmpUeXBlPTIwIG9sYW5sYXLEsSBzYXTEsW4gYWxtYSBpcnNhbGl5ZXNpIHRhYsSxbmEgZmlsdHJlbGVcclxuICAgICAgICAgICAgICAgIHRoaXMucHVyY2hhc2VEZXNwYXRjaERvY3VtZW50cyA9IGxpc3QuZmlsdGVyKGRvYyA9PiBkb2Mub2JqVHlwZSA9PT0gMjApO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1NhdMSxbiBhbG1hIGlyc2FsaXllbGVyaSAoT2JqVHlwZT0yMCk6JywgdGhpcy5wdXJjaGFzZURlc3BhdGNoRG9jdW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIC8vIE9ialR5cGU9MjIgb2xhbmxhcsSxIHNhdMSxbiBhbG1hIHNpcGFyacWfaSB0YWLEsW5hIGZpbHRyZWxlXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvck9wZW5Eb2NzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybihcIsSwbGdpbGkgbXVoYXRhcCBpw6dpbiBhw6fEsWsgYmVsZ2Ugc2F0xLFyxLEgYnVsdW5hbWFkxLEuXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RPcGVuRG9jdW1lbnRzKCkge1xyXG4gICAgICAgIGxldCBwdXJjaGFzZURlc3BhdGNoZXMgPSB0aGlzLmR4UHVyY2hhc2VEZXNwYXRjaERvY3VtZW50cy5pbnN0YW5jZS5nZXRTZWxlY3RlZFJvd3NEYXRhKClcclxuICAgICAgICBsZXQgcHVyY2hhc2VPcmRlcnMgPSB0aGlzLmR4UHVyY2hhc2VPcmRlckRvY3VtZW50cy5pbnN0YW5jZS5nZXRTZWxlY3RlZFJvd3NEYXRhKClcclxuICAgICAgICBsZXQgcmVmZXJlbmNlRG9jcyA9IFtdO1xyXG4gICAgICAgIGlmIChwdXJjaGFzZU9yZGVycy5sZW5ndGggPiAwICYmIHB1cmNoYXNlRGVzcGF0Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJSZWZlcmFucyBvbGFyYWsgeWFsbsSxemNhIGJpciBiZWxnZSB0w7xyw7wgc2XDp2lsZWJpbGlyLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHB1cmNoYXNlT3JkZXJzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZURvY3MgPSBwdXJjaGFzZU9yZGVycztcclxuICAgICAgICBpZiAocHVyY2hhc2VEZXNwYXRjaGVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZURvY3MgPSBwdXJjaGFzZURlc3BhdGNoZXM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TGluZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlRG9jcy5zb21lKGUgPT4gIXRoaXMuZG9jdW1lbnRMaW5lcy5zb21lKGQgPT4gZC5vYmpUeXBlID09PSBlLm9ialR5cGUpKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIlJlZmVyYW5zIG9sYXJhayB5YWxuxLF6Y2EgYmlyIGJlbGdlIHTDvHLDvCBzZcOnaWxlYmlsaXIuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWZlcmVuY2VEb2NzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICF0aGlzLmRvY3VtZW50TGluZXMuc29tZShkcmFmdCA9PlxyXG4gICAgICAgICAgICAgICAgZHJhZnQub2JqVHlwZSA9PT0gZWxlbWVudC5vYmpUeXBlICYmXHJcbiAgICAgICAgICAgICAgICBkcmFmdC5kb2NFbnRyeSA9PT0gZWxlbWVudC5kb2NFbnRyeSAmJlxyXG4gICAgICAgICAgICAgICAgZHJhZnQubGluZU51bSA9PT0gZWxlbWVudC5saW5lTnVtXHJcbiAgICAgICAgICAgICkgJiYgdGhpcy5kb2N1bWVudExpbmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRRdHk6IGVsZW1lbnQub3BlblF0eSxcclxuICAgICAgICAgICAgICAgIG9wZW5RdHk6IGVsZW1lbnQub3BlblF0eSxcclxuICAgICAgICAgICAgICAgIG9ialR5cGU6IGVsZW1lbnQub2JqVHlwZSxcclxuICAgICAgICAgICAgICAgIGRvY0VudHJ5OiBlbGVtZW50LmRvY0VudHJ5LFxyXG4gICAgICAgICAgICAgICAgZG9jTnVtOiBlbGVtZW50LmRvY051bSxcclxuICAgICAgICAgICAgICAgIG51bUF0Q2FyZDogZWxlbWVudC5udW1BdENhcmQsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtOiBlbGVtZW50LmxpbmVOdW0sXHJcbiAgICAgICAgICAgICAgICBkb2NEYXRlOiBlbGVtZW50LmRvY0RhdGUsXHJcbiAgICAgICAgICAgICAgICBkb2NEdWVEYXRlOiBlbGVtZW50LmRvY0R1ZURhdGUsXHJcbiAgICAgICAgICAgICAgICBpdGVtQ29kZTogZWxlbWVudC5pdGVtQ29kZSxcclxuICAgICAgICAgICAgICAgIGRzY3JpcHRpb246IGVsZW1lbnQuZHNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgIHRleHQ6IGVsZW1lbnQudGV4dCxcclxuICAgICAgICAgICAgICAgIGZyZWVUeHQ6IGVsZW1lbnQuZnJlZVR4dCxcclxuICAgICAgICAgICAgICAgIGNhcmRDb2RlOiBlbGVtZW50LmNhcmRDb2RlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmhpZGVGb3JtT3BlbkRvY3VtZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVGb3JtT3BlbkRvY3VtZW50cygpIHtcclxuICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yT3BlbkRvY3MgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTW9kYWxCdXN5Rm9yT3BlbkRvY3MgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaGlkZUZvcm1EcmFmdCgpIHtcclxuICAgICAgICB0aGlzLmlzTW9kYWxCdXN5Rm9yRG9jdW1lbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yRG9jdW1lbnQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRvY3VtZW50TGluZXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kRHJhZnQoZHJhZnRHcmlkTGluZXM6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHJlcXVlc3REdG9Eb2N1bWVudExpbmVzOiBDb25uZWN0b3JEcmFmdERvY3VtZW50TGluZUR0b1tdID0gW107XHJcblxyXG4gICAgICAgIGRyYWZ0R3JpZExpbmVzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm9ialR5cGUgPT09IDAgfHwgZWxlbWVudC5vYmpUeXBlID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gTWFudWVsIGthbGVtICgwKSB2ZXlhIEthdGFsb2cgZcWfbGXFn3Rpcm1lICgtMSlcclxuICAgICAgICAgICAgICAgIHJlcXVlc3REdG9Eb2N1bWVudExpbmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBlbGVtZW50LnNlbGVjdGVkUXR5LFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VUeXBlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VFbnRyeTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBiYXNlTGluZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQ29kZTogZWxlbWVudC5pdGVtQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtRGVzY3JpcHRpb246IGVsZW1lbnQuZHNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgICAgICB1bml0UHJpY2U6IGVsZW1lbnQudW5pdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRheENvZGU6IGVsZW1lbnQuZnJlZVR4dCxcclxuICAgICAgICAgICAgICAgICAgICB2YXRHcm91cDogZWxlbWVudC5mcmVlVHh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LmRvY3VtZW50Q3VycmVuY3lDb2RlPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHVvbUNvZGU6IGVsZW1lbnQudGV4dCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzY1ByY250OiB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVmZXJhbnMgYmVsZ2VsaSBrYWxlbSAtIG1ldmN1dCBha8SxxZ9cclxuICAgICAgICAgICAgICAgIHJlcXVlc3REdG9Eb2N1bWVudExpbmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBlbGVtZW50LnNlbGVjdGVkUXR5LFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VUeXBlOiBlbGVtZW50Lm9ialR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZUVudHJ5OiBlbGVtZW50LmRvY0VudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VMaW5lOiBlbGVtZW50LmxpbmVOdW1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0RHRvOiBDb25uZWN0b3JEcmFmdERvY3VtZW50RHRvID0ge1xyXG4gICAgICAgICAgICBkb2NFbnRyeTogbnVsbCxcclxuICAgICAgICAgICAgZG9jTnVtOiBudWxsLFxyXG4gICAgICAgICAgICBkb2NDdXJyZW5jeTogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5kb2N1bWVudEN1cnJlbmN5Q29kZT8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgZG9jT2JqZWN0Q29kZTp0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmludm9pY2VUeXBlQ29kZT09PVwiSUFERVwiP1wib0NyZWRpdE5vdGVzXCI6XCJvUHVyY2hhc2VJbnZvaWNlc1wiLFxyXG4gICAgICAgICAgICBkb2NEYXRlOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmlzc3VlRGF0ZT8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdGF4RGF0ZTogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pc3N1ZURhdGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGRvY0R1ZURhdGU6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucGF5bWVudFRlcm1zUGF5bWVudER1ZURhdGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGRvY1JhdGU6ICh0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LnByaWNpbmdFeGNoYW5nZVJhdGVDYWxjdWxhdGlvblJhdGUgPD0gMSB8fCBpc051bGxPckVtcHR5KHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJpY2luZ0V4Y2hhbmdlUmF0ZUNhbGN1bGF0aW9uUmF0ZSkpID8gMSA6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5wcmljaW5nRXhjaGFuZ2VSYXRlQ2FsY3VsYXRpb25SYXRlLFxyXG4gICAgICAgICAgICBjYXJkQ29kZTogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eVZrblRja24/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIG51bUF0Q2FyZDogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlSWQ/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHVfRUZBVE5POiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmludm9pY2VJZD8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdV9VVUlEOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LnV1SWQ/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHVfU0VORDogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlVHlwZUNvZGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHVfUHJvZmlsZUlkOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LnByb2ZpbGVJZD8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgZG9jdW1lbnRMaW5lczogcmVxdWVzdER0b0RvY3VtZW50TGluZXMsXHJcbiAgICAgICAgICAgIGJQTF9JREFzc2lnbmVkVG9JbnZvaWNlOiB0aGlzLmlzQnJhbmNoID8gdGhpcy5mb3JtRG9jdW1lbnQ/LmNvbnRyb2xzPy5zZWxlY3RlZEJyYW5jaD8udmFsdWUgOiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZURyYWZ0RG9jdW1lbnQocmVxdWVzdER0bywgdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlLmlkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVGb3JtRHJhZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0LmRvY0VudHJ5ICsgXCIgbnVtYXJhbMSxIHRhc2xhayBiZWxnZSBiYcWfYXLEsXlsYSBvbHXFn3R1cnVsZHUuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kRG9jdW1lbnQoZG9jdW1lbnRHcmlkTGluZXM6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHJlcXVlc3REdG9Eb2N1bWVudExpbmVzOiBDb25uZWN0b3JQdXJjaGFzZUludm9pY2VEb2N1bWVudExpbmVEdG9bXSA9IFtdO1xyXG5cclxuICAgICAgICBkb2N1bWVudEdyaWRMaW5lcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5vYmpUeXBlID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBNYW51ZWwga2FsZW1cclxuICAgICAgICAgICAgICAgIHJlcXVlc3REdG9Eb2N1bWVudExpbmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBlbGVtZW50LnNlbGVjdGVkUXR5LFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VUeXBlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VFbnRyeTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBiYXNlTGluZTogbnVsbFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZWZlcmFucyBiZWxnZWxpIGthbGVtXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0RHRvRG9jdW1lbnRMaW5lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogZWxlbWVudC5zZWxlY3RlZFF0eSxcclxuICAgICAgICAgICAgICAgICAgICBiYXNlVHlwZTogZWxlbWVudC5vYmpUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VFbnRyeTogZWxlbWVudC5kb2NFbnRyeSxcclxuICAgICAgICAgICAgICAgICAgICBiYXNlTGluZTogZWxlbWVudC5saW5lTnVtXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdER0bzogQ29ubmVjdG9yUHVyY2hhc2VJbnZvaWNlRG9jdW1lbnREdG8gPSB7XHJcbiAgICAgICAgICAgIGRvY0VudHJ5OiBudWxsLFxyXG4gICAgICAgICAgICBkb2NOdW06IG51bGwsXHJcbiAgICAgICAgICAgIGRvY0N1cnJlbmN5OiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LmRvY3VtZW50Q3VycmVuY3lDb2RlPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBkb2NEYXRlOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmlzc3VlRGF0ZT8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdGF4RGF0ZTogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pc3N1ZURhdGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGRvY0R1ZURhdGU6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucGF5bWVudFRlcm1zUGF5bWVudER1ZURhdGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIGRvY1JhdGU6ICh0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LnByaWNpbmdFeGNoYW5nZVJhdGVDYWxjdWxhdGlvblJhdGUgPD0gMSB8fCBpc051bGxPckVtcHR5KHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJpY2luZ0V4Y2hhbmdlUmF0ZUNhbGN1bGF0aW9uUmF0ZSkpID8gMSA6IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5wcmljaW5nRXhjaGFuZ2VSYXRlQ2FsY3VsYXRpb25SYXRlLFxyXG4gICAgICAgICAgICBjYXJkQ29kZTogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eVZrblRja24/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIG51bUF0Q2FyZDogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlSWQ/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHVfRUZBVE5POiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/Lmludm9pY2VJZD8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgdV9VVUlEOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LnV1SWQ/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHVfU0VORDogdGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlVHlwZUNvZGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHVfUHJvZmlsZUlkOiB0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2U/LnByb2ZpbGVJZD8udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgYlBMX0lEQXNzaWduZWRUb0ludm9pY2U6IHRoaXMuaXNCcmFuY2ggPyB0aGlzLmZvcm1Eb2N1bWVudD8uY29udHJvbHM/LnNlbGVjdGVkQnJhbmNoPy52YWx1ZSA6IG51bGwsXHJcbiAgICAgICAgICAgIGRvY3VtZW50TGluZXM6IHJlcXVlc3REdG9Eb2N1bWVudExpbmVzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZVB1cmNoYXNlSW52b2ljZURvY3VtZW50KHJlcXVlc3REdG8sIHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5pZClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRm9ybURyYWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0LmRvY0VudHJ5ICsgXCIgbnVtYXJhbMSxIGJlbGdlIGJhxZ9hcsSxeWxhIG9sdcWfdHVydWxkdS5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZURyYWZ0RG9jdW1lbnQoKSB7XHJcbiAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvckRvY3VtZW50ID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmR4RG9jdW1lbnRMaW5lcy5pbnN0YW5jZS5nZXREYXRhU291cmNlKCk7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5zdG9yZSgpLmxvYWQoKS50aGVuKChncmlkTGluZXM6IGFueVtdKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoZ3JpZExpbmVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RyYWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmluZm8oJ1RhYmxvZGEgc2F0xLFyIGJ1bHVubWFkxLHEn8SxIGnDp2luIHRhc2xhayBiZWxnZSBib8WfIG9sYXJhayBvbHXFn3R1cnVsYWNha3TEsXIuIERldmFtIGV0bWVrIGlzdGl5b3IgbXVzdW51ej8nLCB7IGtleTogJzo6QmlsZ2knLCBkZWZhdWx0VmFsdWU6ICcnIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHN0YXR1czogQ29uZmlybWF0aW9uLlN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBcImNvbmZpcm1cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZERyYWZ0KGdyaWRMaW5lcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb2RhbEJ1c3lGb3JEb2N1bWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJLYXnEsXRsxLEgYmVsZ2Ugb2x1xZ90dXJ1bHVya2VuIGJvxZ8gc2F0xLFyIGdpcmlsZW1lei5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyaWRMaW5lcy5maWx0ZXIoeCA9PiB4LnNlbGVjdGVkUXR5ID4geC5vcGVuUXR5KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmluZm8oJ1Nlw6dpbGVuIG1pa3RhcsSxLCBhw6fEsWsgbWlrdGFyZGFuIGLDvHnDvGsgb2xhbiBzYXTEsXIvc2F0xLFybGFyIG1ldmN1dC4gRGV2YW0gZXRtZWsgaXN0aXlvciBtdXN1bnV6PycsIHsga2V5OiAnOjpCaWxnaScsIGRlZmF1bHRWYWx1ZTogJycgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBDb25maXJtYXRpb24uU3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFwiY29uZmlybVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEcmFmdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kRHJhZnQoZ3JpZExpbmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZERvY3VtZW50KGdyaWRMaW5lcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW9kYWxCdXN5Rm9yRG9jdW1lbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RyYWZ0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmREcmFmdChncmlkTGluZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kRG9jdW1lbnQoZ3JpZExpbmVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc01hbnVhbChyZWNvcmQpIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2UucHJvY2Vzc01hbnVhbChyZWNvcmQuaWQpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MoXCJCZWxnZSBiYcWfYXLEsXlsYSBtYW51ZWwgacWfbGVuZGkuXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFudWVsIEthbGVtIEVrbGUgLSBNb2RhbCBhw6dcclxuICAgIG9wZW5NYW51YWxMaW5lTW9kYWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRMaW5lcy5zb21lKGQgPT4gZC5vYmpUeXBlID09PSAwIHx8IGQub2JqVHlwZSA9PT0gLTEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybihcIlNhdMSxcmxhciB6YXRlbiBla2xlbm1pxZ90aXIuIMOWbmNlIG1ldmN1dCBzYXTEsXJsYXLEsSB0ZW1pemxleWluaXouXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNNb2RhbEJ1c3lGb3JNYW51YWxMaW5lID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1hbnVhbExpbmVzID0gW107XHJcbiAgICAgICAgdGhpcy5pdGVtc0dyaWRTdG9yZSA9IHRoaXMuc2VydmljZS5pdGVtc0dyaWRTdG9yZTtcclxuXHJcbiAgICAgICAgLy8gWE1MIHNhdMSxcmxhcsSxbsSxIHZlIHZlcmdpIGdydXBsYXLEsW7EsSBwYXJhbGVsIMOnZWtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0SW52b2ljZVhtbExpbmVzKHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHhtbExpbmVzOiBJbnZvaWNlWG1sTGluZUR0b1tdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBWZXJnaSBncnVwbGFyxLFuxLEgw6dlayAoQ2F0ZWdvcnk9J0knLCBJbmFjdGl2ZT0nTicpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0VGF4R3JvdXBzKCdJJykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoZ3JvdXBzOiBTYXBUYXhHcm91cER0b1tdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSWFkZSA9IHRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaW52b2ljZVR5cGVDb2RlID09PSAnSUFERSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElBREUgKGlhZGUpIGZhdHVyYWxhcsSxbmRhIHlhbG7EsXpjYSBSIGlsZSBiYcWfbGF5YW4gdmVyZ2kgZ3J1cGxhcsSxbmRhbiBzZcOnaWxpclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdmFpbGFibGVUYXhHcm91cHMgPSBpc0lhZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ3JvdXBzLmZpbHRlcihnID0+IGcuY29kZT8uc3RhcnRzV2l0aCgnUicpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBncm91cHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGF4R3JvdXBzID0gYXZhaWxhYmxlVGF4R3JvdXBzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MIHNhdMSxcmxhcsSxbsSxIE1hbnVhbExpbmVEdG8neWEgZMO2bsO8xZ90w7xyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFudWFsTGluZXMgPSB4bWxMaW5lcy5tYXAobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJnaSBvcmFuxLFuYSBnw7ZyZSB2YXJzYXnEsWxhbiB2ZXJnaSBncnVidSBlxZ9sZSAoSUFERSdkZSBSIGdydXBsYXLEsSBhcmFzxLFuZGFuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRUYXhDb2RlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXhQZXJjZW50ID0gbGluZS50YXhQZXJjZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRheFBlcmNlbnQgIT0gbnVsbCAmJiBhdmFpbGFibGVUYXhHcm91cHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBhdmFpbGFibGVUYXhHcm91cHMuZmluZChnID0+IE1hdGguYWJzKGcucmF0ZSAtIHRheFBlcmNlbnQpIDwgMC4wMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRheENvZGUgPSBtYXRjaGVkLmNvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZS5saW5lTnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Db2RlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbGluZS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogbGluZS5xdWFudGl0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0UHJpY2U6IGxpbmUudW5pdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENvZGU6IGRlZmF1bHRUYXhDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogbGluZS5jdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgTWFudWFsTGluZUR0bztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW9kYWxCdXN5Rm9yTWFudWFsTGluZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yTWFudWFsTGluZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJnaSBncnVwbGFyxLEgYWzEsW5hbWF6c2EgKFNBUCBiYcSfbGFudMSxc8SxIHlvaykgeWluZSBkZSBhw6dcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXhHcm91cHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYW51YWxMaW5lcyA9IHhtbExpbmVzLm1hcChsaW5lID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lLmxpbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQ29kZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbGluZS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBsaW5lLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdFByaWNlOiBsaW5lLnVuaXRQcmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENvZGU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlOiBsaW5lLmN1cnJlbmN5Q29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgTWFudWFsTGluZUR0bykpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvck1hbnVhbExpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvck1hbnVhbExpbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvck1hbnVhbExpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJYTUwgc2F0xLFybGFyxLEgb2t1bmFtYWTEsTogXCIgKyAoZXJyPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEthbGVtIGdyaWQnaW5kZW4gKGRyb3Bkb3duIGnDp2luZGVraSBkYXRhZ3JpZCkgc2XDp2ltXHJcbiAgICBvbkl0ZW1HcmlkU2VsZWN0aW9uQ2hhbmdlZChldmVudDogYW55LCBsaW5lSW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZXZlbnQuc2VsZWN0ZWRSb3dzRGF0YSAmJiBldmVudC5zZWxlY3RlZFJvd3NEYXRhWzBdO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm1hbnVhbExpbmVzW2xpbmVJbmRleF0uaXRlbUNvZGUgPSBzZWxlY3RlZC5pdGVtQ29kZTtcclxuICAgICAgICAgICAgdGhpcy5tYW51YWxMaW5lc1tsaW5lSW5kZXhdLml0ZW1OYW1lID0gc2VsZWN0ZWQuaXRlbU5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMubWFudWFsTGluZXNbbGluZUluZGV4XS5pdGVtQm94T3BlbmVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUFsbE1hbnVhbExpbmVzKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBjaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5tYW51YWxMaW5lcy5mb3JFYWNoKGwgPT4gbC5zZWxlY3RlZCA9IGNoZWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE11aGF0YXAgS2F0YWxvZyBOdW1hcmFzxLEgaWxlIFRhc2xhayBCZWxnZSBPbHXFn3R1ciAtIE1vZGFsIGHDp1xyXG4gICAgb3BlbkNhdGFsb2dNYXRjaE1vZGFsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TGluZXMuc29tZShkID0+IGQub2JqVHlwZSA9PT0gMCB8fCBkLm9ialR5cGUgPT09IC0xKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oXCJTYXTEsXJsYXIgemF0ZW4gZWtsZW5tacWfdGlyLiDDlm5jZSBtZXZjdXQgc2F0xLFybGFyxLEgdGVtaXpsZXlpbml6LlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTW9kYWxCdXN5Rm9yQ2F0YWxvZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYXRhbG9nTWF0Y2hMaW5lcyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0Q2F0YWxvZ01hdGNoTGluZXModGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAobGluZXM6IENhdGFsb2dNYXRjaExpbmVEdG9bXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXRhbG9nTWF0Y2hMaW5lcyA9IGxpbmVzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc01vZGFsQnVzeUZvckNhdGFsb2cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNNb2RhbE9wZW5Gb3JDYXRhbG9nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNNb2RhbEJ1c3lGb3JDYXRhbG9nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFwiS2F0YWxvZyBlxZ9sZcWfdGlybWUgaGF0YXPEsTogXCIgKyAoZXJyPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE11aGF0YXAgS2F0YWxvZyBzYXTEsXJsYXLEsW7EsSBkb2N1bWVudExpbmVzJ2EgZWtsZVxyXG4gICAgYWRkQ2F0YWxvZ0xpbmVzVG9Eb2N1bWVudCgpIHtcclxuICAgICAgICAvLyBFxZ9sZcWfbWUga29udHJvbMO8XHJcbiAgICAgICAgY29uc3QgdW5tYXRjaGVkTGluZXMgPSB0aGlzLmNhdGFsb2dNYXRjaExpbmVzLmZpbHRlcihsID0+ICFsLmlzTWF0Y2hlZCk7XHJcbiAgICAgICAgaWYgKHVubWF0Y2hlZExpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIkXFn2xlxZ9tZW1pxZ8gS2FsZW0gdmV5YSBLYWxlbWxlciBNZXZjdXR0dXIuIEzDvHRmZW4gTXVoYXRhcCBLYXRhbG9nIFRhbsSxbcSxIFlhcMSxbsSxei5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEXFn2xlxZ9lbiBzYXTEsXJsYXLEsSBkb2N1bWVudExpbmVzJ2EgZWtsZVxyXG4gICAgICAgIHRoaXMuY2F0YWxvZ01hdGNoTGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudExpbmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRRdHk6IGxpbmUucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICBvcGVuUXR5OiBsaW5lLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgb2JqVHlwZTogLTEsIC8vIEthdGFsb2cgZcWfbGXFn3Rpcm1lIGnFn2FyZXRpXHJcbiAgICAgICAgICAgICAgICBkb2NFbnRyeTogMCxcclxuICAgICAgICAgICAgICAgIGRvY051bTogMCxcclxuICAgICAgICAgICAgICAgIG51bUF0Q2FyZDogJycsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtOiBsaW5lLmxpbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICBkb2NEYXRlOiAnJyxcclxuICAgICAgICAgICAgICAgIGRvY0R1ZURhdGU6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXRlbUNvZGU6IGxpbmUuY2F0YWxvZ0l0ZW1Db2RlLFxyXG4gICAgICAgICAgICAgICAgZHNjcmlwdGlvbjogbGluZS54bWxJdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgIHRleHQ6IGxpbmUudW5pdENvZGUsXHJcbiAgICAgICAgICAgICAgICBmcmVlVHh0OiBsaW5lLnRheENvZGUsXHJcbiAgICAgICAgICAgICAgICB1bml0UHJpY2U6IGxpbmUudW5pdFByaWNlID8gK2xpbmUudW5pdFByaWNlIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGNhcmRDb2RlOiAnJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc01vZGFsT3BlbkZvckNhdGFsb2cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3ModGhpcy5jYXRhbG9nTWF0Y2hMaW5lcy5sZW5ndGggKyBcIiBzYXTEsXIgZWtsZW5kaS5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFudWVsIHNhdMSxcmxhcsSxIGRvY3VtZW50IGxpbmVzJ2EgZWtsZVxyXG4gICAgYWRkTWFudWFsTGluZXNUb0RvY3VtZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGluZXMgPSB0aGlzLm1hbnVhbExpbmVzLmZpbHRlcihsID0+IGwuc2VsZWN0ZWQpO1xyXG5cclxuICAgICAgICBpZiAoc2VsZWN0ZWRMaW5lcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKFwiRW4gYXogYmlyIHNhdMSxciBzZcOnaW5pei5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFTDvG0gc2F0xLFybGFyIHNlw6dpbG1lbGkgLSBYTUwgc2F0xLFyIHNhecSxc8SxIGlsZSBlxZ9sZcWfbWVsaVxyXG4gICAgICAgIGlmIChzZWxlY3RlZExpbmVzLmxlbmd0aCAhPT0gdGhpcy5tYW51YWxMaW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIlhNTCBzYXTEsXIgc2F5xLFzxLEgaWxlIHNlw6dpbGVuIHNhdMSxciBzYXnEsXPEsSBlxZ9sZcWfbWl5b3IuIFTDvG0gc2F0xLFybGFyIGnDp2luIGthbGVtIHNlw6dpbWkgeWFwxLFsbWFsxLFkxLFyLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZW1wdHlJdGVtTGluZXMgPSBzZWxlY3RlZExpbmVzLmZpbHRlcihsID0+ICFsLml0ZW1Db2RlKTtcclxuICAgICAgICBpZiAoZW1wdHlJdGVtTGluZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFwiVMO8bSBzYXTEsXJsYXIgacOnaW4ga2FsZW0ga29kdSBzZcOnaW5pei5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlbGVjdGVkTGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudExpbmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRRdHk6IGxpbmUucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICBvcGVuUXR5OiBsaW5lLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgb2JqVHlwZTogMCwgLy8gTWFudWVsIGthbGVtIGnFn2FyZXRpXHJcbiAgICAgICAgICAgICAgICBkb2NFbnRyeTogMCxcclxuICAgICAgICAgICAgICAgIGRvY051bTogMCxcclxuICAgICAgICAgICAgICAgIG51bUF0Q2FyZDogJycsXHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtOiBsaW5lLmxpbmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICBkb2NEYXRlOiAnJyxcclxuICAgICAgICAgICAgICAgIGRvY0R1ZURhdGU6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXRlbUNvZGU6IGxpbmUuaXRlbUNvZGUsXHJcbiAgICAgICAgICAgICAgICBkc2NyaXB0aW9uOiBsaW5lLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogJycsXHJcbiAgICAgICAgICAgICAgICBmcmVlVHh0OiBsaW5lLnRheENvZGUsXHJcbiAgICAgICAgICAgICAgICB1bml0UHJpY2U6IGxpbmUudW5pdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgY2FyZENvZGU6ICcnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmlzTW9kYWxPcGVuRm9yTWFudWFsTGluZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcyhzZWxlY3RlZExpbmVzLmxlbmd0aCArIFwiIHNhdMSxciBla2xlbmRpLlwiKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY2hlY2tCb3hDaGFuZ2VkKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbHMgPSB0aGlzLmZvcm1SZXNwb25zZS5jb250cm9sc1xyXG4gICAgICAgIHZhciBpZCA9IGV2ZW50LnRhcmdldC5pZDtcclxuICAgICAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdyZXNwb25zZUNoZWNrJykgYXMgTm9kZUxpc3RPZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICAgICAgICBjaGVja2JveGVzLmZvckVhY2goY2hlY2tib3ggPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2hlY2tib3guaWQgIT09IGlkKSB7XHJcbiAgICAgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbHNbY2hlY2tib3guYXR0cmlidXRlc1tcImZvcm1jb250cm9sbmFtZVwiXS52YWx1ZV0uc2V0VmFsdWUoY2hlY2tib3guY2hlY2tlZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVJvd3NDb2xvcihlKSB7XHJcbiAgICAgICAgaWYgKGUucm93VHlwZSAhPT0gJ2RhdGEnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd0VsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gZS5yb3dFbGVtZW50Py50b0FycmF5XHJcbiAgICAgICAgICAgID8gZS5yb3dFbGVtZW50LnRvQXJyYXkoKVxyXG4gICAgICAgICAgICA6IGUucm93RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICAgICAgICA/IFtlLnJvd0VsZW1lbnRdXHJcbiAgICAgICAgICAgICAgICA6IEFycmF5LmZyb20oZS5yb3dFbGVtZW50ID8/IFtdKTtcclxuXHJcbiAgICAgICAgaWYgKCFyb3dFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudHNUb0NvbG9yOiBIVE1MRWxlbWVudFtdID0gW107XHJcbiAgICAgICAgcm93RWxlbWVudHMuZm9yRWFjaChyb3dFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudHNUb0NvbG9yLnB1c2gocm93RWxlbWVudCk7XHJcbiAgICAgICAgICAgIEFycmF5LmZyb20ocm93RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpKS5mb3JFYWNoKGNlbGwgPT5cclxuICAgICAgICAgICAgICAgIGVsZW1lbnRzVG9Db2xvci5wdXNoKGNlbGwgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGVsZW1lbnRzVG9Db2xvci5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnYmFja2dyb3VuZC1jb2xvcicpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNQcm9jZXNzZWRWaWV3IHx8IGUuZGF0YS5wcm9maWxlSWQgIT09ICdUSUNBUklGQVRVUkEnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd0NvbG9yczogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcclxuICAgICAgICAgICAgMDogJyNmNGEyNjEnLFxyXG4gICAgICAgICAgICAxOiAnIzNlYmQ2MCcsXHJcbiAgICAgICAgICAgIDI6ICcjY2M0ZjQ1J1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgcm93Q29sb3IgPSByb3dDb2xvcnNbTnVtYmVyKGUuZGF0YS5yZWNlaXZlclJlc3BvbnNlKV07XHJcblxyXG4gICAgICAgIGlmIChyb3dDb2xvcikge1xyXG4gICAgICAgICAgICBlbGVtZW50c1RvQ29sb3IuZm9yRWFjaChlbGVtZW50ID0+XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWNvbG9yJywgcm93Q29sb3IsICdpbXBvcnRhbnQnKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSZWNlaXZlclJlc3BvbnNlTmFtZShyZXNwb25zZUlkKSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmluYm91bmRJbnZvaWNlUmVjZWl2ZXJSZXNwb25zZUxvb2t1cC5maW5kKCh4KSA9PiB4LmlkID09PSByZXNwb25zZUlkKTtcclxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmRpc3BsYXlOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJY29uQ2xhc3MocmVzcG9uc2VJZCkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZUlkID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiZmFzIGZhLWNsb2NrXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlSWQgPT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJmYXMgZmEtY2hlY2stY2lyY2xlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlSWQgPT0gMikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJmYXMgZmEtdGltZXMtY2lyY2xlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERvY09iamVjdE5hbWUoZGF0YSkge1xyXG4gICAgICAgIGxldCBvYmpOYW1lID0gKChkYXRhLmlzRHJhZnQgPyBcIlRhc2xhayBcIiA6IFwiXCIpICsgdGhpcy5pbnZvaWNlT2JqZWN0c0VudW1Mb29rdXAuZmluZCgoeCkgPT4geC5pZCA9PSAoZGF0YS5pc0RyYWZ0ID8gZGF0YS5yZXNvdXJjZVN1YkRvY1R5cGUgOiBkYXRhLnJlc291cmNlRG9jVHlwZSkpPy5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgaWYgKG9iak5hbWUgPT0gXCJ1bmRlZmluZWRcIilcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmpOYW1lO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvbkluYm91bmRTZWxlY3Rpb25DaGFuZ2VkKGUpIHtcclxuICAgICAgICBjb25zdCByb3dzID0gZS5zZWxlY3RlZFJvd3NEYXRhO1xyXG5cclxuICAgICAgICBpZiAoIXJvd3MgfHwgcm93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5oYXNWYWxpZFNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDEsMWfIGt1cmFsxLFcclxuICAgICAgICBjb25zdCB2YWxpZCA9IHJvd3MuZXZlcnkoeCA9PlxyXG4gICAgICAgICAgICAhKHgucHJvZmlsZUlkID09ICdUSUNBUklGQVRVUkEnICYmIHguc3RhdHVzID09IDcwMCAmJiB4LnJlY2VpdmVyUmVzcG9uc2UgPT0gMikgJiZcclxuICAgICAgICAgICAgKHguaW52b2ljZVR5cGVDb2RlICE9PSAnSUFERScgJiZcclxuICAgICAgICAgICAgICAgICh4LnN0YXR1cyA9PT0gNjAwIHx8IHguc3RhdHVzID09PSA3MDApKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuaGFzVmFsaWRTZWxlY3Rpb24gPSB2YWxpZDtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVNdWx0aXBsZUVtcHR5RHJhZnRzKCkge1xyXG4gICAgICAgIGxldCByZXF1ZXN0RHRvczogQ29ubmVjdG9yTXVsdGlwbGVFbXB0eURyYWZ0RHRvW10gPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmJvdW5kSW52b2ljZVJvd3MgPSB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XHJcblxyXG4gICAgICAgIGlmICghc2VsZWN0ZWRJbmJvdW5kSW52b2ljZVJvd3MgfHwgc2VsZWN0ZWRJbmJvdW5kSW52b2ljZVJvd3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJMw7x0ZmVuIGVuIGF6IGJpciBrYXnEsXQgc2XDp2luaXouXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB2YWxpZFJvd3MgPSBzZWxlY3RlZEluYm91bmRJbnZvaWNlUm93cy5maWx0ZXIoeCA9PiB4Lmludm9pY2VUeXBlQ29kZSAhPT0gJ0lBREUnICYmICh4LnN0YXR1cyA9PT0gNjAwIHx8IHguc3RhdHVzID09PSA3MDApKTtcclxuICAgICAgICBpZiAodmFsaWRSb3dzLmxlbmd0aCAhPT0gc2VsZWN0ZWRJbmJvdW5kSW52b2ljZVJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJMaXN0ZSBpw6dlcmlzaW5kZSBmYXR1cmEgdGlwaSAnSUFERScgb2xhbiB2ZXlhIGJlbGdlIGR1cnVtdSBlbnRlZ3JhdMO2cmRlbiBhbMSxbmTEsSB2ZSB5YSBlbnRlZ3JhdMO2cmRlbiB5YW7EsXRsYW5kxLEgb2xtYXlhbiBrYXnEsXRsYXIgbWV2Y3V0LlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5ib3VuZEludm9pY2VSb3dzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gNjUwIHx8IHguc3RhdHVzID09PSA3NTApKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXCJMaXN0ZW5pbiBpw6dlcmlzaW5kZSBkYWhhIMO2bmNlZGVuIHRhc2xhayBiZWxnZXNpIG9sdcWfdHVydWxhbiBiZWxnZWxlciBidWx1bm1ha3RhZMSxci4gS29udHJvbCBlZGluaXouXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxlY3RlZEluYm91bmRJbnZvaWNlUm93cy5mb3JFYWNoKHNlbGVjdGVkSW5ib3VuZEludm9pY2UgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZHJhZnREb2N1bWVudDogQ29ubmVjdG9yRHJhZnREb2N1bWVudER0byA9IHtcclxuICAgICAgICAgICAgICAgIGRvY0VudHJ5OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZG9jTnVtOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZG9jQ3VycmVuY3k6IHNlbGVjdGVkSW5ib3VuZEludm9pY2U/LmRvY3VtZW50Q3VycmVuY3lDb2RlPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZG9jT2JqZWN0Q29kZTogXCJvUHVyY2hhc2VJbnZvaWNlc1wiLFxyXG4gICAgICAgICAgICAgICAgZG9jRGF0ZTogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaXNzdWVEYXRlPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdGF4RGF0ZTogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaXNzdWVEYXRlPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZG9jRHVlRGF0ZTogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucGF5bWVudFRlcm1zUGF5bWVudER1ZURhdGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBkb2NSYXRlOiAoc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJpY2luZ0V4Y2hhbmdlUmF0ZUNhbGN1bGF0aW9uUmF0ZSA8PSAxIHx8IGlzTnVsbE9yRW1wdHkoc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJpY2luZ0V4Y2hhbmdlUmF0ZUNhbGN1bGF0aW9uUmF0ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgPyAxXHJcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZEluYm91bmRJbnZvaWNlLnByaWNpbmdFeGNoYW5nZVJhdGVDYWxjdWxhdGlvblJhdGUsXHJcbiAgICAgICAgICAgICAgICBjYXJkQ29kZTogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgbnVtQXRDYXJkOiBzZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlSWQ/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB1X0VGQVROTzogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8uaW52b2ljZUlkPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdV9VVUlEOiBzZWxlY3RlZEluYm91bmRJbnZvaWNlPy51dUlkPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdV9TRU5EOiBzZWxlY3RlZEluYm91bmRJbnZvaWNlPy5pbnZvaWNlVHlwZUNvZGU/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB1X1Byb2ZpbGVJZDogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZT8ucHJvZmlsZUlkPy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRMaW5lczogW10sXHJcbiAgICAgICAgICAgICAgICBiUExfSURBc3NpZ25lZFRvSW52b2ljZTogdGhpcy5pc0JyYW5jaFxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEJyYW5jaElkXHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0RHRvcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGludm9pY2VJRDogc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5pZCxcclxuICAgICAgICAgICAgICAgIGRyYWZ0RG9jdW1lbnQ6IGRyYWZ0RG9jdW1lbnRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFNlcnZpcyBpw6dlcnNpbmRlIE11aGF0YXAga29udHJvbMO8IGRlIHlhcMSxbMSxeW9yXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZU11bHRpcGxlRW1wdHlEcmFmdHMocmVxdWVzdER0b3MpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZnRSZXN1bHRzID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQb3B1cFZpc2libGUgPSB0cnVlOyAvLyBwb3B1cCBhw6fEsWzEsXJcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVzdWx0UG9wdXBDbG9zZWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRQb3B1cFZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICAgIHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVJlc3VsdFBvcHVwID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzdWx0UG9wdXBWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UuY2xlYXJTZWxlY3Rpb24oKTtcclxuICAgICAgICB0aGlzLmR4SW5ib3VuZEludm9pY2VJbnN0YW5jZS5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRJbmNvbWluZ1BERk11bHRpcGxlKCkge1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlXHJcbiAgICAgICAgICAgIC5nZXRWaXNpYmxlUm93cygpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBpLmlzU2VsZWN0ZWQgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgLm1hcChwID0+IHAuZGF0YS5pZCk7XHJcblxyXG4gICAgICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignTMO8dGZlbiBlbiBheiBiaXIgZmF0dXJhIHNlw6dpbml6LicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0SW5jb21pbmdJbnZvaWNlUGRmc011bHRpcGxlKGlkcykuc3Vic2NyaWJlKChkYXRhOiBCbG9iKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ppcCcgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSAnR2VsZW5GYXR1cmFsYXItJyArIHRoaXMuZ2V0WmlwRGF0ZSgpICsgJy56aXAnO1xyXG4gICAgICAgICAgICBhLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBkb3dubG9hZFBERk11bHRpcGxlKCkge1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgbGV0IGlkczogQXJyYXk8eyBpZDogc3RyaW5nIH0+ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlLmdldFZpc2libGVSb3dzKCkuZmlsdGVyKGkgPT4gaS5pc1NlbGVjdGVkID09IHRydWUpLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGlkcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiBlbGVtZW50LmRhdGEuaWQsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5pbnZvaWNlU2VydmljZS5nZXRJbnZvaWNlUGRmc011bHRpcGxlKGlkcy5tYXAocCA9PiBwLmlkKSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICAgICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGRhdGEpO1xyXG4gICAgICAgICAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShieXRlQ2hhcmFjdGVycy5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vemlwJyB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIMSwbmRpcm1lXHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSAnRmF0dXJhbGFyLScgKyB0aGlzLmdldFppcERhdGUoKSArICcuemlwJztcclxuICAgICAgICAgICAgYS5jbGljaygpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkJyYW5jaFBvcHVwKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0JyYW5jaCkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU11bHRpcGxlRW1wdHlEcmFmdHMoKTsgLy8gxZ91YmVzaXogZGlyZWt0XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5icmFuY2hQb3B1cFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1CcmFuY2hTZWxlY3Rpb24gPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQnJhbmNoSWQpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcIkzDvHRmZW4gxZ91YmUgc2XDp2luaXouXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJyYW5jaFBvcHVwVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTXVsdGlwbGVFbXB0eURyYWZ0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dBbGxGaWxlcyhyZWNvcmQpIHtcclxuICAgICAgICB0aGlzLmludm9pY2VGaWxlc0RhdGFTb3VyY2UgPSB0aGlzLnNlcnZpY2UuTG9hZEluYm91bmRJbnZvaWNlRmlsZXMocmVjb3JkLmlkKTtcclxuICAgICAgICB0aGlzLmlzRmlsZU1vZGFsT3BlbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgRG93bmxvYWRGaWxlKHJlY29yZCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5kb3dubG9hZEZpbGVCeUlkKHJlY29yZC5jb250ZW50TWFzdGVySWQpLnN1YnNjcmliZShpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gYGRhdGE6JHtpdGVtLm1pbWVUeXBlfTtiYXNlNjQsJHtpdGVtLmNvbnRlbnR9YDtcclxuICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgbGluay5ocmVmID0gc291cmNlO1xyXG4gICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gYCR7aXRlbS5maWxlbmFtZX1gO1xyXG4gICAgICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRJbmJvdW5kUERGTXVsdGlwbGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5keEluYm91bmRJbnZvaWNlSW5zdGFuY2UuaW5zdGFuY2UuZ2V0VmlzaWJsZVJvd3MoKVxyXG4gICAgICAgICAgICAuZmlsdGVyKHIgPT4gci5pc1NlbGVjdGVkICYmIHIucm93VHlwZSA9PT0gJ2RhdGEnKVxyXG4gICAgICAgICAgICAubWFwKHIgPT4gci5kYXRhKTtcclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJvd3MgfHwgc2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oXCJMw7x0ZmVuIGVuIGF6IGJpciBmYXR1cmEgc2XDp2luLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IHNlbGVjdGVkUm93cy5tYXAociA9PiByLmlkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEluYm91bmRJbnZvaWNlUGRmc011bHRpcGxlKGlkcykuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoZGF0YSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vemlwJyB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgICAgIGEuZG93bmxvYWQgPSAnR2VsZW5GYXR1cmFsYXItJyArIHRoaXMuZ2V0WmlwRGF0ZSgpICsgJy56aXAnO1xyXG4gICAgICAgICAgICBhLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0WmlwRGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICAgIGNvbnN0IGhvdXJzID0gU3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgICBjb25zdCBtaW51dGVzID0gU3RyaW5nKGRhdGUuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICAgIGNvbnN0IHNlY29uZHMgPSBTdHJpbmcoZGF0ZS5nZXRTZWNvbmRzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LiR7bW9udGh9LiR7ZGF5fS0ke2hvdXJzfS4ke21pbnV0ZXN9LiR7c2Vjb25kc31gO1xyXG4gICAgfVxyXG5cclxuICAgIHByaW50SW5ib3VuZFBERk11bHRpcGxlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlLmluc3RhbmNlLmdldFZpc2libGVSb3dzKClcclxuICAgICAgICAgICAgLmZpbHRlcihyID0+IHIuaXNTZWxlY3RlZCAmJiByLnJvd1R5cGUgPT09ICdkYXRhJylcclxuICAgICAgICAgICAgLm1hcChyID0+IHIuZGF0YSk7XHJcblxyXG4gICAgICAgIGlmICghc2VsZWN0ZWRSb3dzIHx8IHNlbGVjdGVkUm93cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKFwiTMO8dGZlbiBlbiBheiBiaXIgZmF0dXJhIHNlw6dpbi5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBzZWxlY3RlZFJvd3MubWFwKHIgPT4gci5pZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VydmljZS5nZXRJbmJvdW5kSW52b2ljZVBkZnNNZXJnZWQoaWRzKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihkYXRhKTtcclxuICAgICAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYnl0ZUFycmF5W2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J5dGVBcnJheV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCJwYWdlVGl0bGVLZXkgfCBhYnBMb2NhbGl6YXRpb25cIj5cclxuICA8YWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXIgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxnLWVuZCBwdC0yXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCJcclxuICAgICAgICBbbmdDbGFzc109XCIhaXNFQXJjaGl2ZSA/ICdidG4tcHJpbWFyeScgOiAnYnRuLXNlY29uZGFyeSdcIiAoY2xpY2spPVwic2VsZWN0SW52b2ljZVR5cGUoZmFsc2UpXCI+XHJcbiAgICAgICAge3sgJ2VEb251c3VtOjpFSW52b2ljZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCJcclxuICAgICAgICBbbmdDbGFzc109XCJpc0VBcmNoaXZlID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tc2Vjb25kYXJ5J1wiIChjbGljayk9XCJzZWxlY3RJbnZvaWNlVHlwZSh0cnVlKVwiPlxyXG4gICAgICAgIHt7ICdlRG9udXN1bTo6RUFyY2hpdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNQcm9jZXNzZWRWaWV3XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRQcm9jZXNzZWRGaWx0ZXIgPT09ICdkcmFmdCcgPyAnYnRuLXByaW1hcnknIDogJ2J0bi1zZWNvbmRhcnknXCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcm9jZXNzZWRGaWx0ZXIoJ2RyYWZ0JylcIj5cclxuICAgICAgICAgIHt7ICdlRG9udXN1bTo6RHJhZnREb2N1bWVudEZpbHRlcicgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZFByb2Nlc3NlZEZpbHRlciA9PT0gJ3JlZ2lzdGVyZWQnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tc2Vjb25kYXJ5J1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJvY2Vzc2VkRmlsdGVyKCdyZWdpc3RlcmVkJylcIj5cclxuICAgICAgICAgIHt7ICdlRG9udXN1bTo6UmVnaXN0ZXJlZERvY3VtZW50RmlsdGVyJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkUHJvY2Vzc2VkRmlsdGVyID09PSAnbWFudWFsJyA/ICdidG4tcHJpbWFyeScgOiAnYnRuLXNlY29uZGFyeSdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByb2Nlc3NlZEZpbHRlcignbWFudWFsJylcIj5cclxuICAgICAgICAgIHt7ICdlRG9udXN1bTo6TWFudWFsbHlQcm9jZXNzZWRGaWx0ZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA1cHg7XCJcclxuICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRJbmJvdW5kUERGTXVsdGlwbGUoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1wZGYtbyBtZS0xXCI+PC9pPlxyXG4gICAgICAgIHt7ICdlRG9udXN1bTo6RG93bmxvYWRQREZNdWx0aXBsZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIlxyXG4gICAgICAgIChjbGljayk9XCJwcmludEluYm91bmRQREZNdWx0aXBsZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wcmludCBtZS0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgIFRvcGx1IFBERiBZYXpkxLFyXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUHJvY2Vzc2VkVmlld1wiPlxyXG4gICAgICA8YnV0dG9uICphYnBQZXJtaXNzaW9uPVwiJ2VEb251c3VtLkludm9pY2VzLkNyZWF0ZSdcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiIChjbGljayk9XCJvcGVuQnJhbmNoUG9wdXAoKVwiIFtkaXNhYmxlZF09XCIhaGFzVmFsaWRTZWxlY3Rpb25cIj5cclxuXHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb3B5IG1lLTFcIj48L2k+XHJcbiAgICAgICAge3sgJ2VEb251c3VtOjpDcmVhdGVNdWx0aXBsZUVtcHR5RHJhZnRzJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDwhLS0gPGJ1dHRvbiAqYWJwUGVybWlzc2lvbj1cIidlRG9udXN1bS5JbnZvaWNlcy5DcmVhdGUnXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIiAoY2xpY2spPVwidmlld1BERnNNdWx0aXBsZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZCBtZS0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgIHt7ICdlRG9udXN1bTo6Vmlld1BERk11bHRpcGxlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICA8YnV0dG9uICphYnBQZXJtaXNzaW9uPVwiJ2VEb251c3VtLkludm9pY2VzLkNyZWF0ZSdcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiIChjbGljayk9XCJnZXRJbmJvdW5kSW52b2ljZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbnZlbG9wZSBtZS0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgIHt7ICdlRG9udXN1bTo6Q2hlY2tJbmJvdW5kSW52b2ljZXMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9hYnAtcGFnZS10b29sYmFyLWNvbnRhaW5lcj5cclxuICA8cD57eyBwYWdlRGVzY3JpcHRpb25LZXkgfCBhYnBMb2NhbGl6YXRpb24gfX08L3A+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgPGR4LWRhdGEtZ3JpZCAjZHhJbmJvdW5kSW52b2ljZUluc3RhbmNlIFtkYXRhU291cmNlXT1cImluYm91bmRJbnZvaWNlc0RhdGFTb3VyY2VcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIlxyXG4gICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3JlbW90ZU9wZXJhdGlvbnNdPVwidHJ1ZVwiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW3JlcGFpbnRDaGFuZ2VzT25seV09XCJ0cnVlXCJcclxuICAgICAgICBbYWxsb3dDb2x1bW5SZXNpemluZ109XCJ0cnVlXCIgY29sdW1uUmVzaXppbmdNb2RlPVwid2lkZ2V0XCIgW2FsbG93Q29sdW1uUmVvcmRlcmluZ109XCJ0cnVlXCIgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICBbY29sdW1uSGlkaW5nRW5hYmxlZF09XCJ0cnVlXCIgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCIgc3R5bGU9XCJoZWlnaHQ6IDc1dmg7XCJcclxuICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2VkKT1cIm9uSW5ib3VuZFNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiIChvblJvd1ByZXBhcmVkKT1cImNoYW5nZVJvd3NDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgPGR4by1wYWdlciBbdmlzaWJsZV09XCJ0cnVlXCIgW3Nob3dJbmZvXT1cInRydWVcIiBbYWxsb3dlZFBhZ2VTaXplc109XCJbNTAsMTAwLDIwMF1cIiBbc2hvd05hdmlnYXRpb25CdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIj5cclxuICAgICAgICA8L2R4by1wYWdlcj5cclxuICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiNTBcIj48L2R4by1wYWdpbmc+XHJcbiAgICAgICAgPGR4by1zZWxlY3Rpb24gbW9kZT1cIm11bHRpcGxlXCIgc2VsZWN0QWxsTW9kZT1cInBhZ2VcIiBzaG93Q2hlY2tCb3hlc01vZGU9XCJhbHdheXNcIj5cclxuICAgICAgICA8L2R4by1zZWxlY3Rpb24+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tY2hvb3NlciBbYWxsb3dTZWFyY2hdPVwidHJ1ZVwiIFtlbmFibGVkXT1cInRydWVcIiBtb2RlPVwic2VsZWN0XCI+PC9keG8tY29sdW1uLWNob29zZXI+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tZml4aW5nIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1jb2x1bW4tZml4aW5nPlxyXG4gICAgICAgIDxkeG8tZ3JvdXAtcGFuZWwgW3Zpc2libGVdPVwidHJ1ZVwiIFthbGxvd0NvbHVtbkRyYWdnaW5nXT1cInRydWVcIj48L2R4by1ncm91cC1wYW5lbD5cclxuICAgICAgICA8ZHhvLWdyb3VwaW5nICNleHBhbmQgW2F1dG9FeHBhbmRBbGxdPVwiZmFsc2VcIiBbYWxsb3dDb2xsYXBzaW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgW2NvbnRleHRNZW51RW5hYmxlZF09XCJ0cnVlXCI+PC9keG8tZ3JvdXBpbmc+XHJcbiAgICAgICAgPGR4by1oZWFkZXItZmlsdGVyIFthbGxvd1NlYXJjaF09XCJ0cnVlXCIgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWhlYWRlci1maWx0ZXI+XHJcbiAgICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIiBbYWxsb3dFeHBvcnRTZWxlY3RlZERhdGFdPVwiZmFsc2VcIj48L2R4by1leHBvcnQ+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tZml4aW5nIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1jb2x1bW4tZml4aW5nPlxyXG4gICAgICAgIDxkeG8tZmlsdGVyLWJ1aWxkZXIgW2FsbG93SGllcmFyY2hpY2FsRmllbGRzXT1cInRydWVcIj48L2R4by1maWx0ZXItYnVpbGRlcj5cclxuICAgICAgICA8ZHhvLWZpbHRlci1wYW5lbCBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXBhbmVsPlxyXG4gICAgICAgIDxkeG8tc29ydGluZyBtb2RlPVwic2luZ2xlXCI+PC9keG8tc29ydGluZz5cclxuICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwiaG9yaXpvbnRhbFwiIHNob3dTY3JvbGxiYXI9XCJhbHdheXNcIj48L2R4by1zY3JvbGxpbmc+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gW2ZpeGVkXT1cInRydWVcIiBkYXRhRmllbGQ9XCJpZFwiIHdpZHRoPVwiMTIwXCIgW2FsbG93R3JvdXBpbmddPVwiZmFsc2VcIiBbYWxsb3dGaWx0ZXJpbmddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW2FsbG93SGVhZGVyRmlsdGVyaW5nXT1cImZhbHNlXCIgW2FsbG93SGlkaW5nXT1cImZhbHNlXCIgW2FsbG93UmVvcmRlcmluZ109XCJmYWxzZVwiXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU9XCJvcGVyYXRpb25UZW1wbGF0ZVwiIGNhcHRpb249XCJ7eyAnQWJwVWk6OkFjdGlvbnMnIHwgYWJwTG9jYWxpemF0aW9uIH19XCI+XHJcbiAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IHJvdyBvZiAnb3BlcmF0aW9uVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBkcm9wZG93bi10b2dnbGVcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGUgW2Rpc2FibGVkXT1cImRpc2FibGVkSWRDb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29nIG1yLTFcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICB7eyAnQWJwVWk6OkFjdGlvbnMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnU+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJ1cGRhdGUocm93LmRhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwiZGVsZXRlKHJvdy5kYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdBYnBVaTo6RGVsZXRlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwiZ2V0SW52b2ljZVByZXZpZXcocm93LmRhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3cuZGF0YS5zdGF0dXMgPT0gNjAwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3MDAgfHwgcm93LmRhdGEuc3RhdHVzID09IDY1MCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNzUwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA2ODAgfHwgcm93LmRhdGEuc3RhdHVzID09IDc4MCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNjcwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3NzBcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdlRG9udXN1bTo6R2V0VmlldycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1Byb2Nlc3NlZFZpZXdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJvcGVuUmVzcG9uc2VNb2RhbChyb3cuZGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy5kYXRhLnByb2ZpbGVJZCA9PSAnVElDQVJJRkFUVVJBJyAmJiByb3cuZGF0YS5yZWNlaXZlclJlc3BvbnNlID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbnZlbG9wZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2VEb251c3VtOjpSZXNwb25zZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrKT1cIm9wZW5QYXJ0bmVyTW9kYWwocm93LmRhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhKHJvdy5kYXRhLnByb2ZpbGVJZCA9PSAnVElDQVJJRkFUVVJBJyAmJiByb3cuZGF0YS5zdGF0dXMgPT0gNzAwICAmJiByb3cuZGF0YS5yZWNlaXZlclJlc3BvbnNlID09IDIpICYmIChyb3cuZGF0YS5zdGF0dXMgPT0gNjAwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3MDApXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdXNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ2VEb251c3VtOjpDcmVhdGVCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJvcGVuRHJhZnRGb3JtKHJvdy5kYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIShyb3cuZGF0YS5wcm9maWxlSWQgPT0gJ1RJQ0FSSUZBVFVSQScgJiYgcm93LmRhdGEuc3RhdHVzID09IDcwMCAgJiYgcm93LmRhdGEucmVjZWl2ZXJSZXNwb25zZSA9PSAyKSAmJiAocm93LmRhdGEuc3RhdHVzID09IDYwMCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNzAwKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdlRG9udXN1bTo6Q3JlYXRlRHJhZnREb2N1bWVudCcgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrKT1cIm9wZW5Eb2N1bWVudEZvcm0ocm93LmRhdGEpXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhKHJvdy5kYXRhLnByb2ZpbGVJZCA9PSAnVElDQVJJRkFUVVJBJyAmJiByb3cuZGF0YS5zdGF0dXMgPT0gNzAwICAmJiByb3cuZGF0YS5yZWNlaXZlclJlc3BvbnNlID09IDIpICYmIChyb3cuZGF0YS5zdGF0dXMgPT0gNjAwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3MDApXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS10ZXh0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZURvbnVzdW06OkNyZWF0ZURvY3VtZW50JyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwicHJvY2Vzc01hbnVhbChyb3cuZGF0YSlcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiEocm93LmRhdGEucHJvZmlsZUlkID09ICdUSUNBUklGQVRVUkEnICYmIHJvdy5kYXRhLnN0YXR1cyA9PSA3MDAgICYmIHJvdy5kYXRhLnJlY2VpdmVyUmVzcG9uc2UgPT0gMikgJiYgKHJvdy5kYXRhLnN0YXR1cyA9PSA2MDAgfHwgcm93LmRhdGEuc3RhdHVzID09IDcwMClcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oYW5kLXBhcGVyLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IHt7ICdlRG9udXN1bTo6UHJvY2Vzc01hbnVhbCcgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwic2hvd0FsbEZpbGVzKHJvdy5kYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93LmRhdGEuc3RhdHVzID09IDYwMCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNzAwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA2NTAgfHwgcm93LmRhdGEuc3RhdHVzID09IDc1MCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNjgwIHx8IHJvdy5kYXRhLnN0YXR1cyA9PSA3ODAgfHwgcm93LmRhdGEuc3RhdHVzID09IDY3MCB8fCByb3cuZGF0YS5zdGF0dXMgPT0gNzcwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnZURvbnVzdW06OlNob3dBbGxGaWxlcycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpc3N1ZURhdGVcIiBkYXRhVHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7J2VEb251c3VtOjpJc3N1ZURhdGUnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInBheW1lbnRUZXJtc1BheW1lbnREdWVEYXRlXCIgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eydlRG9udXN1bTo6UGF5bWVudER1ZURhdGUnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInV1SWRcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlV1SWQnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImludm9pY2VJZFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6SW52b2ljZUlkJ3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJhY2NvdW50aW5nU3VwcGxpZXJQYXJ0eU5hbWVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7J2VEb251c3VtOjpBY2NvdW50aW5nU3VwcGxpZXJQYXJ0eU5hbWUnfGFicExvY2FsaXphdGlvbn19XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrblwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3snZURvbnVzdW06OkFjY291bnRpbmdTdXBwbGllclBhcnR5VmtuVGNrbid8YWJwTG9jYWxpemF0aW9ufX1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2R4aS1jb2x1bW4+XHJcblxyXG4gICAgICAgIDxkeGktY29sdW1uIGNhcHRpb249XCJ7eydlRG9udXN1bTo6VXNlckNvbW1lbnQnfGFicExvY2FsaXphdGlvbn19XCIgd2lkdGg9XCIzMjBcIiBjZWxsVGVtcGxhdGU9XCJ1c2VyQ29tbWVudFRlbXBsYXRlXCI+PC9keGktY29sdW1uPlxyXG5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJzdGF0dXNcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlN0YXR1cyd8YWJwTG9jYWxpemF0aW9ufX1cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cImluYm91bmRJbnZvaWNlU3RhdHVzTG9va3VwXCIgdmFsdWVFeHByPVwiaWRcIiBkaXNwbGF5RXhwcj1cImRpc3BsYXlOYW1lXCI+XHJcbiAgICAgICAgICA8L2R4by1sb29rdXA+XHJcbiAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInJlc291cmNlRG9jRW50cnlcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlJlc291cmNlRG9jRW50cnknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJyZXNvdXJjZURvY051bVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6UmVzb3VyY2VEb2NOdW0nfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBjZWxsVGVtcGxhdGU9XCJkb2NUeXBlVGVtcGxhdGVcIiBkYXRhRmllbGQ9XCJyZXNvdXJjZURvY1R5cGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7J2VEb251c3VtOjpSZXNvdXJjZURvY1R5cGUnfGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2RvY1R5cGVUZW1wbGF0ZSdcIj5cclxuICAgICAgICAgICAge3tnZXREb2NPYmplY3ROYW1lKGRhdGEuZGF0YSl9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9keGktY29sdW1uPlxyXG5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJyZWNlaXZlclJlc3BvbnNlXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpSZWNlaXZlclJlc3BvbnNlJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU9XCJpY29uVGVtcGxhdGVcIj5cclxuICAgICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cImluYm91bmRJbnZvaWNlUmVjZWl2ZXJSZXNwb25zZUxvb2t1cFwiIHZhbHVlRXhwcj1cImlkXCIgZGlzcGxheUV4cHI9XCJkaXNwbGF5TmFtZVwiPlxyXG4gICAgICAgICAgPC9keG8tbG9va3VwPlxyXG4gICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2ljb25UZW1wbGF0ZSdcIj5cclxuICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cImdldEljb25DbGFzcyhkYXRhLmRhdGEucmVjZWl2ZXJSZXNwb25zZSlcIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2NvbG9yJzpkYXRhLmRhdGEucmVjZWl2ZXJSZXNwb25zZSA9PSAnMScgPyAnZ3JlZW4nIDogZGF0YS5kYXRhLnJlY2VpdmVyUmVzcG9uc2UgPT0gJzInID8gJ3JlZCcgOiAnZ3JheSd9XCI+PC9pPlxyXG4gICAgICAgICAge3tnZXRSZWNlaXZlclJlc3BvbnNlTmFtZShkYXRhLmRhdGEucmVjZWl2ZXJSZXNwb25zZSl9fVxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ3VzZXJDb21tZW50VGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtZS0yXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Um93Q29tbWVudChkYXRhLmRhdGEpXCJcclxuICAgICAgICAgICAgICAoaW5wdXQpPVwib25Vc2VyQ29tbWVudENoYW5nZWQoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgZGF0YS5kYXRhKVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZURvbnVzdW06OkFkZENvbW1lbnQnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNTYXZpbmdDb21tZW50W2RhdGEuZGF0YS5pZF1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzYXZlVXNlckNvbW1lbnQoZGF0YS5kYXRhKVwiPlxyXG4gICAgICAgICAgICAgIEtheWRldFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInByb2ZpbGVJZFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6UHJvZmlsZUlkJ3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpbnZvaWNlVHlwZUNvZGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06Okludm9pY2VUeXBlQ29kZSd8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibGVnYWxNb25ldGFyeVRvdGFsUGF5YWJsZUFtb3VudFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6UGF5YWJsZUFtb3VudCd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgZGF0YVR5cGU9XCJudW1iZXJcIiBmb3JtYXQ9XCIjLCMjMC4wMFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2N1bWVudEN1cnJlbmN5Q29kZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jQ3VycmVuY3knfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInByaWNpbmdFeGNoYW5nZVJhdGVDYWxjdWxhdGlvblJhdGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY1JhdGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIGRhdGFUeXBlPVwibnVtYmVyXCIgZm9ybWF0PVwiIywjIzAuMDBcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaW5ib3VuZERvY3VtZW50Q3JlYXRlTG9nXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eydlRG9udXN1bTo6SW5ib3VuZERvY3VtZW50Q3JlYXRlTG9nJ3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9hYnAtcGFnZT5cclxuXHJcbjxhYnAtbW9kYWwgW2J1c3ldPVwiaXNNb2RhbEJ1c3lGb3JSZXNwb25zZVwiIFsodmlzaWJsZSldPVwiaXNNb2RhbE9wZW5Gb3JSZXNwb25zZVwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ20nIH1cIj5cclxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgIDxoMz5cclxuICAgICAge3sgJ2VEb251c3VtOjpTZW5kUmVzcG9uc2UnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2gzPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVJlc3BvbnNlXCIgaWQ9XCJpbnZvaWNlLXJlc3BvbnNlXCIgdmFsaWRhdGVPblN1Ym1pdD5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGZhZGUtaW4tdG9wXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjIwcHhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiaW52b2ljZS1yZXNwb25zZS1pbnZvaWNlLWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpJZCd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiaW52b2ljZS1yZXNwb25zZS1pbnZvaWNlLWlkXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlkXCIgbWF4bGVuZ3RoPVwiMjU2XCIgYXV0b2ZvY3VzPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImludm9pY2UtcmVzcG9uc2UtaW52b2ljZS11dWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpVdUlkJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggaWQ9XCJpbnZvaWNlLXJlc3BvbnNlLWludm9pY2UtdXVpZFwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbnZvaWNlVVVJRFwiIG1heGxlbmd0aD1cIjI1NlwiIGF1dG9mb2N1cz48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJpbnZvaWNlLXJlc3BvbnNlLWludm9pY2UtYWNjZXB0XCIgZm9ybUNvbnRyb2xOYW1lPVwiaXNBY2NlcHRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXNwb25zZUNoZWNrXCIgKGNoYW5nZSk9XCJjaGVja0JveENoYW5nZWQoJGV2ZW50KVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImludm9pY2UtcmVzcG9uc2UtaW52b2ljZS1hY2NlcHRcIiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAge3sgJ2VEb251c3VtOjpBY2NlcHQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImludm9pY2UtcmVzcG9uc2UtaW52b2ljZS1yZWplY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJpc1JlamVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgbmFtZT1cInJlc3BvbnNlQ2hlY2tcIiAoY2hhbmdlKT1cImNoZWNrQm94Q2hhbmdlZCgkZXZlbnQpXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiaW52b2ljZS1yZXNwb25zZS1pbnZvaWNlLXJlamVjdFwiIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyAnZURvbnVzdW06OlJlamVjdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT5cclxuICAgICAge3sgJ0FicFVpOjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIiBmb3JtTmFtZT1cImludm9pY2UtcmVzcG9uc2VcIlxyXG4gICAgICAoY2xpY2spPVwic2VuZEludm9pY2VSZXNwb25zZShmYWxzZSlcIj5cclxuICAgICAge3sgJ2VEb251c3VtOjpSZWplY3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBmb3JtTmFtZT1cImludm9pY2UtcmVzcG9uc2VcIlxyXG4gICAgICAoY2xpY2spPVwic2VuZEludm9pY2VSZXNwb25zZSh0cnVlKVwiPlxyXG4gICAgICB7eyAnZURvbnVzdW06OkFjY2VwdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYWJwLW1vZGFsPlxyXG5cclxuPGFicC1tb2RhbCBbYnVzeV09XCJpc01vZGFsQnVzeUZvclBhcnRuZXJcIiBbKHZpc2libGUpXT1cImlzTW9kYWxPcGVuRm9yUGFydG5lclwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ3hsJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+XHJcbiAgICAgIHt7ICdlRG9udXN1bTo6Q3JlYXRlQnVzaW5lc3NQYXJ0bmVyJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1QYXJ0bmVyXCIgaWQ9XCJjcmVhdGUtcGFydG5lclwiIChuZ1N1Ym1pdCk9XCJjcmVhdGVCdXNpbmVzc1BhcnRuZXIoKVwiIHZhbGlkYXRlT25TdWJtaXQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBmYWRlLWluLXRvcFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwibWFyZ2luLXRvcDoyMHB4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lck5hbWUnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItbmFtZVwiIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvZm9jdXM+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItdmtuXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpQYXJ0bmVyVktOJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLXZrblwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwidmtuXCJcclxuICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMjU2XCI+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItcGFydG5lci1hZGQtaWRcIj5cclxuICAgICAgICAgICAgICAgICAge3snZURvbnVzdW06OlBhcnRuZXJBZGRpdGlvbmFsSWQnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItcGFydG5lci1hZGQtaWRcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJBZGRJZFwiXHJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWN1cnJlbmN5XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpQYXJ0bmVyQ3VycmVuY3knfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItY3VycmVuY3lcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJDdXJyZW5jeVwiXHJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjI1NlwiIGF1dG9mb2N1cz48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJjcmVhdGUtcGFydG5lci13ZWItc2l0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lcldlYlNpdGUnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItd2ViLXNpdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyV2ViU2l0ZVVSSVwiXHJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLXNlcmllc1wiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lclNlcmllcyd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZHgtZHJvcC1kb3duLWJveCBbKHZhbHVlKV09XCJzZXJpYWxHcmlkQm94VmFsdWVcIiBbKG9wZW5lZCldPVwiaXNTZXJpYWxHcmlkQm94T3BlbmVkXCIgdmFsdWVFeHByPVwic2VyaWVzXCJcclxuICAgICAgICAgICAgICAgICAgW2RlZmVyUmVuZGVyaW5nXT1cImZhbHNlXCIgW2Rpc3BsYXlFeHByXT1cInNlcmlhbEdyaWRCb3hfZGlzcGxheUV4cHJcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlRG9udXN1bTo6U2VsZWN0QVZhbHVlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJTZXJpZXNcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cImZhbHNlXCIgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZVNlcmllc1wiXHJcbiAgICAgICAgICAgICAgICAgIChvbk9wdGlvbkNoYW5nZWQpPVwib25TZXJpYWxHcmlkQm94T3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZVNlcmllc1wiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW2hlaWdodF09XCIyNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb3dLZXlzKV09XCJzZXJpYWxHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwic2VyaWVzXCIgY2FwdGlvbj1cIlNlcmlcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibmFtZVwiIGNhcHRpb249XCJBZFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwiaW5maW5pdGVcIj48L2R4by1zY3JvbGxpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgICAgICAgICAgICA8L2R4LWRyb3AtZG93bi1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lckdyb3VwJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItZ3JvdXBzXCIgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZUdyb3Vwc1wiIHZhbHVlRXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwibmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFydG5lckdyb3VwXCIgbWF4bGVuZ3RoPVwiMjU2XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nR3JvdXBzXCIgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiIGF1dG9mb2N1cz48L2R4LXNlbGVjdC1ib3g+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdHcm91cHNcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3snZURvbnVzdW06OkxvYWRpbmcnfGFicExvY2FsaXphdGlvbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxkeC1kcm9wLWRvd24tYm94IFsodmFsdWUpXT1cImdyb3VwR3JpZEJveFZhbHVlXCIgWyhvcGVuZWQpXT1cImlzR3JvdXBHcmlkQm94T3BlbmVkXCIgdmFsdWVFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkZWZlclJlbmRlcmluZ109XCJmYWxzZVwiIFtkaXNwbGF5RXhwcl09XCJncm91cEdyaWRCb3hfZGlzcGxheUV4cHJcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlRG9udXN1bTo6U2VsZWN0QVZhbHVlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJCdXR0b25dPVwiZmFsc2VcIiBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlR3JvdXBzXCJcclxuICAgICAgICAgICAgICAgICAgKG9uT3B0aW9uQ2hhbmdlZCk9XCJvbkdyb3VwR3JpZEJveE9wdGlvbkNoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZHgtZGF0YS1ncmlkIFtkYXRhU291cmNlXT1cInBhcnRuZXJBdmFpbGFibGVHcm91cHNcIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiIFtoZWlnaHRdPVwiMjUwXCJcclxuICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm93S2V5cyldPVwiZ3JvdXBHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY29kZVwiIGNhcHRpb249XCJLb2RcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibmFtZVwiIGNhcHRpb249XCJBZFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwiaW5maW5pdGVcIj48L2R4by1zY3JvbGxpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgICAgICAgICAgICA8L2R4LWRyb3AtZG93bi1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWFjY291bnRcIj5cclxuICAgICAgICAgICAgICAgICAge3snZURvbnVzdW06OlBhcnRuZXJCYW5rQWNjb3VudCd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLWFjY291bnRcIiBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlQWNjb3VudHNcIiB2YWx1ZUV4cHI9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyQWNjb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ0FjY291bnRzXCIgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtc2VsZWN0LWJveD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ0FjY291bnRzXCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTAgc3RhcnQtNTAgdHJhbnNsYXRlLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7J2VEb251c3VtOjpMb2FkaW5nJ3xhYnBMb2NhbGl6YXRpb259fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZHgtZHJvcC1kb3duLWJveCBbKHZhbHVlKV09XCJhY2NvdW50R3JpZEJveFZhbHVlXCIgWyhvcGVuZWQpXT1cImlzQWNjb3VudEdyaWRCb3hPcGVuZWRcIiB2YWx1ZUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgICAgW2RlZmVyUmVuZGVyaW5nXT1cImZhbHNlXCIgW2Rpc3BsYXlFeHByXT1cImFjY291bnRHcmlkQm94X2Rpc3BsYXlFeHByXCIgW2Ryb3BEb3duT3B0aW9uc109XCJ7IHdpZHRoOiA3NTAgfVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2VEb251c3VtOjpTZWxlY3RBVmFsdWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwicGFydG5lckFjY291bnRcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cImZhbHNlXCIgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZUFjY291bnRzXCJcclxuICAgICAgICAgICAgICAgICAgKG9uT3B0aW9uQ2hhbmdlZCk9XCJvbkFjY291bnRHcmlkQm94T3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZUFjY291bnRzXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiBbaGVpZ2h0XT1cIjI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvd0tleXMpXT1cImFjY291bnRHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaWRcIiBjYXB0aW9uPVwiS29kXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInRleHRcIiBjYXB0aW9uPVwiQWRcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1zZWxlY3Rpb24gbW9kZT1cInNpbmdsZVwiPjwvZHhvLXNlbGVjdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLWZpbHRlci1yb3cgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWZpbHRlci1yb3c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1zY3JvbGxpbmcgbW9kZT1cImluZmluaXRlXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeG8tcGFnaW5nIFtlbmFibGVkXT1cInRydWVcIiBbcGFnZVNpemVdPVwiMTBcIj48L2R4by1wYWdpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZHgtZGF0YS1ncmlkPlxyXG4gICAgICAgICAgICAgICAgPC9keC1kcm9wLWRvd24tYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItbWFpbFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lck1haWwnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItbWFpbFwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJFbWFpbFwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItY291bnRyeVwiIFtkYXRhU291cmNlXT1cInBhcnRuZXJBdmFpbGFibGVDb3VudHJpZXNcIiB2YWx1ZUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cIm5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJDb3VudHJ5XCIgbWF4bGVuZ3RoPVwiMjU2XCJcclxuICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0U3RhdGVzKClcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nQ291bnRyaWVzXCIgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzPjwvZHgtc2VsZWN0LWJveD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ0NvdW50cmllc1wiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTUwIHN0YXJ0LTUwIHRyYW5zbGF0ZS1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eydlRG9udXN1bTo6TG9hZGluZyd8YWJwTG9jYWxpemF0aW9ufX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWNvdW50cnlcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnZURvbnVzdW06OlBhcnRuZXJDb3VudHJ5JyB8IGFicExvY2FsaXphdGlvbiB9fSAqXHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxkeC1kcm9wLWRvd24tYm94IFsodmFsdWUpXT1cImNvdW50cnlHcmlkQm94VmFsdWVcIiBbKG9wZW5lZCldPVwiaXNDb3VudHJ5R3JpZEJveE9wZW5lZFwiIHZhbHVlRXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkZWZlclJlbmRlcmluZ109XCJmYWxzZVwiIFtkaXNwbGF5RXhwcl09XCJjb3VudHJ5R3JpZEJveF9kaXNwbGF5RXhwclwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZURvbnVzdW06OlNlbGVjdEFWYWx1ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyQ291bnRyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiIFtkYXRhU291cmNlXT1cInBhcnRuZXJBdmFpbGFibGVDb3VudHJpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbk9wdGlvbkNoYW5nZWQpPVwib25Db3VudHJ5R3JpZEJveE9wdGlvbkNoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgW2RhdGFTb3VyY2VdPVwicGFydG5lckF2YWlsYWJsZUNvdW50cmllc1wiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW2hlaWdodF09XCIyNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvd0tleXMpXT1cImNvdW50cnlHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjb2RlXCIgY2FwdGlvbj1cIkNvZGVcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgY2FwdGlvbj1cIk5hbWVcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1zY3JvbGxpbmcgbW9kZT1cImluZmluaXRlXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgICAgICAgICAgPC9keC1kcm9wLWRvd24tYm94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLXN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpQYXJ0bmVyU3RhdGUnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxkeC1zZWxlY3QtYm94IGlkPVwiY3JlYXRlLXBhcnRuZXItc3RhdGVcIiBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlU3RhdGVzXCIgdmFsdWVFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJuYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyU3RhdGVcIiBtYXhsZW5ndGg9XCIyNTZcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdTdGF0ZXNcIiBbc2hvd0NsZWFyQnV0dG9uXT1cImZhbHNlXCIgYXV0b2ZvY3VzPlxyXG4gICAgICAgICAgICAgICAgICA8L2R4LXNlbGVjdC1ib3g+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdTdGF0ZXNcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3snZURvbnVzdW06OkxvYWRpbmcnfGFicExvY2FsaXphdGlvbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkeC1kcm9wLWRvd24tYm94IFsodmFsdWUpXT1cInN0YXRlR3JpZEJveFZhbHVlXCIgWyhvcGVuZWQpXT1cImlzU3RhdGVHcmlkQm94T3BlbmVkXCIgdmFsdWVFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmVyUmVuZGVyaW5nXT1cImZhbHNlXCIgW2Rpc3BsYXlFeHByXT1cInN0YXRlR3JpZEJveF9kaXNwbGF5RXhwclwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZURvbnVzdW06OlNlbGVjdEFWYWx1ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyU3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJCdXR0b25dPVwiZmFsc2VcIiBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlU3RhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAob25PcHRpb25DaGFuZ2VkKT1cIm9uU3RhdGVHcmlkQm94T3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCBbZGF0YVNvdXJjZV09XCJwYXJ0bmVyQXZhaWxhYmxlU3RhdGVzXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiBbaGVpZ2h0XT1cIjI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm93S2V5cyldPVwic3RhdGVHcmlkQm94VmFsdWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjb2RlXCIgY2FwdGlvbj1cIkNvZGVcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgY2FwdGlvbj1cIk5hbWVcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1zY3JvbGxpbmcgbW9kZT1cImluZmluaXRlXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW2VuYWJsZWRdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICAgICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgICAgICAgICAgPC9keC1kcm9wLWRvd24tYm94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLXppcGNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAge3snZURvbnVzdW06OlBhcnRuZXJaaXBjb2RlJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLXppcGNvZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyWmlwQ29kZVwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWNpdHlcIj5cclxuICAgICAgICAgICAgICAgICAge3snZURvbnVzdW06OlBhcnRuZXJDaXR5J3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLWNpdHlcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyQ2l0eVwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImNyZWF0ZS1wYXJ0bmVyLWNvdW50eVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lckNvdW50eSd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggaWQ9XCJjcmVhdGUtcGFydG5lci1jb3VudHlcIiBmb3JtQ29udHJvbE5hbWU9XCJwYXJ0bmVyQ291bnR5XCIgbWF4bGVuZ3RoPVwiMjU2XCI+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwiY3JlYXRlLXBhcnRuZXItc3RyZWV0XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7J2VEb251c3VtOjpQYXJ0bmVyU3RyZWV0J3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLXN0cmVldFwiIGZvcm1Db250cm9sTmFtZT1cInBhcnRuZXJTdHJlZXRcIiBtYXhsZW5ndGg9XCIyNTZcIj48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJjcmVhdGUtcGFydG5lci1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICB7eydlRG9udXN1bTo6UGFydG5lckJsb2NrJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1wYXJ0bmVyLWJsb2NrXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFydG5lckJsb2NrXCIgbWF4bGVuZ3RoPVwiMjU2XCI+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBhYnBDbG9zZT5cclxuICAgICAge3sgJ0FicFVpOjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgW2Rpc2FibGVkXT1cImlzTW9kYWxCdXN5Rm9yUGFydG5lclwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCJcclxuICAgICAgZm9ybT1cImNyZWF0ZS1wYXJ0bmVyXCI+XHJcbiAgICAgIHt7ICdlRG9udXN1bTo6Q3JlYXRlQnVzaW5lc3NQYXJ0bmVyJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcblxyXG48YWJwLW1vZGFsIFtidXN5XT1cImlzTW9kYWxCdXN5Rm9yRG9jdW1lbnRcIiBbKHZpc2libGUpXT1cImlzTW9kYWxPcGVuRm9yRG9jdW1lbnRcIiBbb3B0aW9uc109XCJ7IHNpemU6ICd4bCcgfVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgPGgzPlxyXG4gICAgICB7eyAoaXNEcmFmdCA/ICdlRG9udXN1bTo6Q3JlYXRlRHJhZnQnIDogJ2VEb251c3VtOjpDcmVhdGVEb2N1bWVudCcpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2gzPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybURvY3VtZW50XCIgaWQ9XCJjcmVhdGUtZG9jdW1lbnRcIiB2YWxpZGF0ZU9uU3VibWl0PlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkXCI+IC0tPlxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj4gLS0+XHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTNcIj4gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZC1sYWJlbFwiPiB7eydlRG9udXN1bTo6UGFydG5lclZLTid8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBpZD1cImNyZWF0ZS1kcmFmdC12a25cIiBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0aGlzLnNlbGVjdGVkSW5ib3VuZEludm9pY2UuYWNjb3VudGluZ1N1cHBsaWVyUGFydHlWa25UY2tuXCIgbWF4bGVuZ3RoPVwiMjU2XCI+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtbGFiZWxcIj4ge3snZURvbnVzdW06Oklzc3VlRGF0ZSd8YWJwTG9jYWxpemF0aW9ufX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxkeC1kYXRlLWJveCBpZD1cImNyZWF0ZS1kcmFmdC1pc3N1ZS1kYXRlXCIgW2Rpc2FibGVkXT1cInRydWVcIiBkYXRhVHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGhpcy5zZWxlY3RlZEluYm91bmRJbnZvaWNlLmlzc3VlRGF0ZVwiIG1heGxlbmd0aD1cIjI1NlwiPjwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtbGFiZWxcIj4ge3snZURvbnVzdW06OlBhcnRuZXJOYW1lJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZC12YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGlkPVwiY3JlYXRlLWRyYWZ0LXBhcnRuZXItbmFtZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5hY2NvdW50aW5nU3VwcGxpZXJQYXJ0eU5hbWVcIiBtYXhsZW5ndGg9XCIyNTZcIj48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIiAqbmdJZj1cImlzQnJhbmNoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtbGFiZWxcIj4ge3snZURvbnVzdW06OkF1dG9UYWtlRG9jQ3JlYXRlQnJhbmNoJ3xhYnBMb2NhbGl6YXRpb259fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZC12YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggaWQ9XCJjcmVhdGUtZHJhZnQtYnJhbmNoLW5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RlZEJyYW5jaFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJuYW1lXCIgdmFsdWVFeHByPVwiY29kZVwiIFtkYXRhU291cmNlXT1cImJyYW5jaGVzRGF0YVNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9keC1zZWxlY3QtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkLWxhYmVsXCI+IHt7J2VEb251c3VtOjpJbnZvaWNlSWQnfGFicExvY2FsaXphdGlvbn19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkLXZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggaWQ9XCJjcmVhdGUtZHJhZnQtaW52b2ljZS1pZFwiIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRoaXMuc2VsZWN0ZWRJbmJvdW5kSW52b2ljZS5pbnZvaWNlSWRcIiBtYXhsZW5ndGg9XCIyNTZcIj48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGR4LWRhdGEtZ3JpZCAjZHhEb2N1bWVudExpbmVzIFtkYXRhU291cmNlXT1cImRvY3VtZW50TGluZXNcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3JlbW90ZU9wZXJhdGlvbnNdPVwiZmFsc2VcIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiIFtyZXBhaW50Q2hhbmdlc09ubHldPVwidHJ1ZVwiIFthbGxvd0NvbHVtblJlc2l6aW5nXT1cInRydWVcIlxyXG4gICAgICAgIGNvbHVtblJlc2l6aW5nTW9kZT1cIndpZGdldFwiIFthbGxvd0NvbHVtblJlb3JkZXJpbmddPVwidHJ1ZVwiIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiIFtjb2x1bW5IaWRpbmdFbmFibGVkXT1cInRydWVcIlxyXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA1MHZoO1wiPlxyXG4gICAgICAgIDxkeG8tY29sdW1uLWZpeGluZyBbZW5hYmxlZF09XCJ0cnVlXCI+PC9keG8tY29sdW1uLWZpeGluZz5cclxuICAgICAgICA8ZHhvLWhlYWRlci1maWx0ZXIgW2FsbG93U2VhcmNoXT1cInRydWVcIiBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8taGVhZGVyLWZpbHRlcj5cclxuICAgICAgICA8ZHhvLWZpbHRlci1yb3cgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWZpbHRlci1yb3c+XHJcbiAgICAgICAgPGR4by1zb3J0aW5nIG1vZGU9XCJzaW5nbGVcIj48L2R4by1zb3J0aW5nPlxyXG4gICAgICAgIDxkeG8tY29sdW1uLWNob29zZXIgW2FsbG93U2VhcmNoXT1cInRydWVcIiBbZW5hYmxlZF09XCJ0cnVlXCIgbW9kZT1cInNlbGVjdFwiPjwvZHhvLWNvbHVtbi1jaG9vc2VyPlxyXG4gICAgICAgIDxkeG8tc2Nyb2xsaW5nIG1vZGU9XCJob3Jpem9udGFsXCIgc2hvd1Njcm9sbGJhcj1cImFsd2F5c1wiPjwvZHhvLXNjcm9sbGluZz5cclxuICAgICAgICA8ZHhvLWVkaXRpbmcgW2FsbG93VXBkYXRpbmddPVwidHJ1ZVwiIFthbGxvd0FkZGluZ109XCJmYWxzZVwiIFthbGxvd0RlbGV0aW5nXT1cInRydWVcIiBtb2RlPVwiY2VsbFwiIFt1c2VJY29uc109XCJ0cnVlXCI+XHJcbiAgICAgICAgPC9keG8tZWRpdGluZz5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJvYmpUeXBlXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpPYmplY3RUeXBlJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PGR4by1sb29rdXAgW2RhdGFTb3VyY2VdPVwib2JqZWN0VHlwZXNMb29rdXBcIiB2YWx1ZUV4cHI9XCJpZFwiIGRpc3BsYXlFeHByPVwidGV4dFwiPlxyXG4gICAgICAgICAgPC9keG8tbG9va3VwPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NFbnRyeVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jRW50cnknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZG9jTnVtXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpEb2NOdW0nfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibnVtQXRDYXJkXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpOdW1BdENhcmQnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibGluZU51bVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6TGluZU51bSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuXHJcbiAgICAgICAgPCEtLSA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjYXJkQ29kZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6Q2FyZENvZGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+IC0tPlxyXG4gICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY0RhdGVcIiBkYXRhVHlwZT1cImRhdGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY0RhdGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZG9jRHVlRGF0ZVwiIGRhdGFUeXBlPVwiZGF0ZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jRHVlRGF0ZSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpdGVtQ29kZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6SXRlbUNvZGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZHNjcmlwdGlvblwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RHNjcmlwdGlvbid8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidGV4dFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6VGV4dCd8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZnJlZVR4dFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RnJlZVR4dCd8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwib3BlblF0eVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6T3BlblF0eSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJzZWxlY3RlZFF0eVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6U2VsZWN0ZWRRdHknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwidHJ1ZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgPC9keC1kYXRhLWdyaWQ+XHJcbiAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICA8IS0tIDwvZGl2PlxyXG4gICAgICA8L2Rpdj4gLS0+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+XHJcbiAgICAgIHt7ICdBYnBVaTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4taW5mb1wiIChjbGljayk9XCJvcGVuTWFudWFsTGluZU1vZGFsKClcIiBbZGlzYWJsZWRdPVwiaXNNb2RhbEJ1c3lGb3JNYW51YWxMaW5lXCI+XHJcbiAgICAgIE1hbnVlbCBLYWxlbSBFa2xlXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW5DYXRhbG9nTWF0Y2hNb2RhbCgpXCIgW2Rpc2FibGVkXT1cImlzTW9kYWxCdXN5Rm9yQ2F0YWxvZ1wiPlxyXG4gICAgICBNdWhhdGFwIEthdGFsb2cgTm8gaWxlIFRhc2xhayBCZWxnZSBPbHXFn3R1clxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2FybmluZ1wiIChjbGljayk9XCJvcGVuT3BlbkRvY3VtZW50c0Zvcm0oKVwiPlxyXG4gICAgICB7eyAnZURvbnVzdW06OlJlc291cmNlRG9jdW1lbnRzJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIFtkaXNhYmxlZF09XCJpc01vZGFsQnVzeUZvckRyYWZ0XCIgKGNsaWNrKT1cImNyZWF0ZURyYWZ0RG9jdW1lbnQoKVwiPlxyXG4gICAgICB7eyAoaXNEcmFmdCA/ICdlRG9udXN1bTo6Q3JlYXRlRHJhZnREb2N1bWVudCcgOiAnZURvbnVzdW06OkNyZWF0ZURvY3VtZW50JykgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYWJwLW1vZGFsPlxyXG5cclxuPCEtLSBNYW51ZWwgS2FsZW0gRWtsZW1lIE1vZGFsIC0tPlxyXG48YWJwLW1vZGFsIFtidXN5XT1cImlzTW9kYWxCdXN5Rm9yTWFudWFsTGluZVwiIFsodmlzaWJsZSldPVwiaXNNb2RhbE9wZW5Gb3JNYW51YWxMaW5lXCIgW29wdGlvbnNdPVwieyBzaXplOiAneGwnIH1cIj5cclxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgIDxoMz5NYW51ZWwgS2FsZW0gRWtsZW1lPC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1zbVwiPlxyXG4gICAgICAgIDx0aGVhZCBjbGFzcz1cInRoZWFkLWxpZ2h0XCI+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiA0MHB4O1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2hhbmdlKT1cInRvZ2dsZUFsbE1hbnVhbExpbmVzKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoPkthbGVtIEtvZHU8L3RoPlxyXG4gICAgICAgICAgICA8dGg+S2FsZW0gVGFuxLFtxLE8L3RoPlxyXG4gICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCI+TWlrdGFyPC90aD5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDEyMHB4O1wiPkJpcmltIEZpeWF0PC90aD5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDE1MHB4O1wiPlZlcmdpIEdydWJ1PC90aD5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDgwcHg7XCI+UGFyYSBCaXJpbWk8L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgbGluZSBvZiBtYW51YWxMaW5lczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImxpbmUuc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxkeC1kcm9wLWRvd24tYm94IFsodmFsdWUpXT1cImxpbmUuaXRlbUNvZGVcIiBbKG9wZW5lZCldPVwibGluZS5pdGVtQm94T3BlbmVkXCJcclxuICAgICAgICAgICAgICAgIHZhbHVlRXhwcj1cIml0ZW1Db2RlXCIgZGlzcGxheUV4cHI9XCJpdGVtQ29kZVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkthbGVtIGtvZHUgc2XDp2luaXouLi5cIiBbc2hvd0NsZWFyQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiaXRlbXNHcmlkU3RvcmVcIiBbZHJvcERvd25PcHRpb25zXT1cInsgd2lkdGg6IDUyMCwgaGVpZ2h0OiA0MzAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZHgtZGF0YS1ncmlkIFtkYXRhU291cmNlXT1cIml0ZW1zR3JpZFN0b3JlXCIgW3JlbW90ZU9wZXJhdGlvbnNdPVwidHJ1ZVwiIFtoZWlnaHRdPVwiMzkwXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRSb3dLZXlzXT1cImxpbmUuaXRlbUNvZGUgPyBbbGluZS5pdGVtQ29kZV0gOiBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJvbkl0ZW1HcmlkU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGR4by1zZWxlY3Rpb24gbW9kZT1cInNpbmdsZVwiPjwvZHhvLXNlbGVjdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNlYXJjaC1wYW5lbCBbdmlzaWJsZV09XCJ0cnVlXCIgW3dpZHRoXT1cIjI2MFwiIHBsYWNlaG9sZGVyPVwiS2FsZW0ga29kdSAvIGFkxLEgYXJhLi4uXCI+PC9keG8tc2VhcmNoLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXBhZ2luZyBbZW5hYmxlZF09XCJ0cnVlXCIgW3BhZ2VTaXplXT1cIjIwXCI+PC9keG8tcGFnaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkeG8tc2Nyb2xsaW5nIG1vZGU9XCJzdGFuZGFyZFwiPjwvZHhvLXNjcm9sbGluZz5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpdGVtQ29kZVwiIGNhcHRpb249XCJLYWxlbSBLb2R1XCIgW3dpZHRoXT1cIjE4MFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpdGVtTmFtZVwiIGNhcHRpb249XCJLYWxlbSBBZMSxXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZHgtZHJvcC1kb3duLWJveD5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKHZhbHVlKV09XCJsaW5lLml0ZW1OYW1lXCIgW3JlYWRPbmx5XT1cImZhbHNlXCI+PC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxkeC1udW1iZXItYm94IFsodmFsdWUpXT1cImxpbmUucXVhbnRpdHlcIiBbc2hvd1NwaW5CdXR0b25zXT1cImZhbHNlXCIgZm9ybWF0PVwiIywjIzAuIyNcIj48L2R4LW51bWJlci1ib3g+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8ZHgtbnVtYmVyLWJveCBbKHZhbHVlKV09XCJsaW5lLnVuaXRQcmljZVwiIFtzaG93U3BpbkJ1dHRvbnNdPVwiZmFsc2VcIiBmb3JtYXQ9XCIjLCMjMC4wMFwiPjwvZHgtbnVtYmVyLWJveD5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxkeC1sb29rdXAgWyh2YWx1ZSldPVwibGluZS50YXhDb2RlXCJcclxuICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInRheEdyb3Vwc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cImNvZGVcIiB2YWx1ZUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVmVyZ2kgZ3J1YnUgc2XDp2luaXouLi5cIlxyXG4gICAgICAgICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgc2VhcmNoRXhwcj1cIlsnY29kZScsJ25hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICBbZHJvcERvd25PcHRpb25zXT1cInsgd2lkdGg6IDM1MCwgaGVpZ2h0OiAzMDAgfVwiXHJcbiAgICAgICAgICAgICAgICBpdGVtVGVtcGxhdGU9XCJ0YXhUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBpdGVtIG9mICd0YXhUZW1wbGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj48c3Ryb25nPnt7aXRlbS5jb2RlfX08L3N0cm9uZz4gLSB7e2l0ZW0ubmFtZX19ICh7e2l0ZW0ucmF0ZX19JSk8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZHgtbG9va3VwPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsodmFsdWUpXT1cImxpbmUuY3VycmVuY3lDb2RlXCIgW3JlYWRPbmx5XT1cInRydWVcIj48L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibWFudWFsTGluZXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW11dGVkIHB5LTNcIj5cclxuICAgICAgWE1MJ2RlIGZhdHVyYSBzYXTEsXLEsSBidWx1bmFtYWTEsS5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJpc01vZGFsT3BlbkZvck1hbnVhbExpbmUgPSBmYWxzZVwiPlxyXG4gICAgICBWYXpnZcOnXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImFkZE1hbnVhbExpbmVzVG9Eb2N1bWVudCgpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIm1hbnVhbExpbmVzLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICBTYXTEsXJsYXLEsSBFa2xlXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2FicC1tb2RhbD5cclxuXHJcbjwhLS0gTXVoYXRhcCBLYXRhbG9nIE51bWFyYXPEsSBFxZ9sZcWfdGlybWUgTW9kYWwgLS0+XHJcbjxhYnAtbW9kYWwgW2J1c3ldPVwiaXNNb2RhbEJ1c3lGb3JDYXRhbG9nXCIgWyh2aXNpYmxlKV09XCJpc01vZGFsT3BlbkZvckNhdGFsb2dcIiBbb3B0aW9uc109XCJ7IHNpemU6ICd4bCcgfVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgPGgzPk11aGF0YXAgS2F0YWxvZyBOdW1hcmFzxLEgRcWfbGXFn3Rpcm1lPC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcbiAgICA8ZHgtZGF0YS1ncmlkIFtkYXRhU291cmNlXT1cImNhdGFsb2dNYXRjaExpbmVzXCJcclxuICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxyXG4gICAgICBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgIFtyb3dBbHRlcm5hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiPlxyXG5cclxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY2F0YWxvZ0l0ZW1Db2RlXCIgY2FwdGlvbj1cIkthbGVtIEtvZHVcIiBbd2lkdGhdPVwiMTIwXCI+PC9keGktY29sdW1uPlxyXG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ4bWxJdGVtTmFtZVwiIGNhcHRpb249XCJLYWxlbSBUYW7EsW3EsVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY2F0YWxvZ1N1YnN0aXR1dGVcIiBjYXB0aW9uPVwiTXVoYXRhcCBLYXRhbG9nIFRhbsSxbcSxXCI+PC9keGktY29sdW1uPlxyXG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJtYXRjaGVkSXRlbUNvZGVcIiBjYXB0aW9uPVwiTXVoYXRhcCBLYXRhbG9nIEtvZHVcIiBbd2lkdGhdPVwiMTUwXCI+PC9keGktY29sdW1uPlxyXG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpc01hdGNoZWRcIiBjYXB0aW9uPVwiRcWfbGXFn21lIER1cnVtdVwiIFt3aWR0aF09XCIxMzBcIiBjZWxsVGVtcGxhdGU9XCJtYXRjaFN0YXR1c1RlbXBsYXRlXCI+XHJcbiAgICAgIDwvZHhpLWNvbHVtbj5cclxuXHJcbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnbWF0Y2hTdGF0dXNUZW1wbGF0ZSdcIj5cclxuICAgICAgICA8c3BhbiBbbmdTdHlsZV09XCJ7J2NvbG9yJzogY2VsbC52YWx1ZSA/ICdncmVlbicgOiAncmVkJywgJ2ZvbnQtd2VpZ2h0JzogJ2JvbGQnfVwiPlxyXG4gICAgICAgICAge3sgY2VsbC52YWx1ZSA/ICdFdmV0JyA6ICdIYXnEsXInIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInF1YW50aXR5XCIgY2FwdGlvbj1cIk1pa3RhclwiIFt3aWR0aF09XCI4MFwiIGZvcm1hdD1cIiMsIyMwLiMjXCI+PC9keGktY29sdW1uPlxyXG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ1bml0UHJpY2VcIiBjYXB0aW9uPVwiQmlyaW0gRml5YXRcIiBbd2lkdGhdPVwiMTAwXCIgZm9ybWF0PVwiIywjIzAuMDBcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInRheENvZGVcIiBjYXB0aW9uPVwiVmVyZ2kgR3J1YnVcIiBbd2lkdGhdPVwiMTAwXCI+PC9keGktY29sdW1uPlxyXG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ1bml0Q29kZVwiIGNhcHRpb249XCLDlmzDp8O8IEJpcmltaVwiIFt3aWR0aF09XCI5MFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZGlzY291bnRQZXJjZW50XCIgY2FwdGlvbj1cIsSwbmRpcmltICVcIiBbd2lkdGhdPVwiODBcIiBmb3JtYXQ9XCIjLCMjMC4jI1wiPjwvZHhpLWNvbHVtbj5cclxuICAgIDwvZHgtZGF0YS1ncmlkPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJpc01vZGFsT3BlbkZvckNhdGFsb2cgPSBmYWxzZVwiPlxyXG4gICAgICBWYXpnZcOnXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImFkZENhdGFsb2dMaW5lc1RvRG9jdW1lbnQoKVwiIFtkaXNhYmxlZF09XCJpc01vZGFsQnVzeUZvckNhdGFsb2dcIj5cclxuICAgICAgU2F0xLFybGFyxLEgRWtsZVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcblxyXG48YWJwLW1vZGFsIFtidXN5XT1cImlzTW9kYWxCdXN5Rm9yT3BlbkRvY3NcIiBbKHZpc2libGUpXT1cImlzTW9kYWxPcGVuRm9yT3BlbkRvY3NcIiBbb3B0aW9uc109XCJ7IHNpemU6ICd4bCcgfVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgPGgzPlxyXG4gICAgICB7eyAoc2VsZWN0ZWQgPyAnQWJwVWk6OkVkaXQnIDogJ2VEb251c3VtOjpPcGVuRG9jcycpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2gzPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgPGZvcm0gaWQ9XCJvcGVuLWRvY3VtZW50c1wiPlxyXG4gICAgICA8IS0tIERldkV4dHJlbWUgVGFiIFBhbmVsIC0tPlxyXG4gICAgICA8ZHgtdGFiLXBhbmVsIFthbmltYXRpb25FbmFibGVkXT1cInRydWVcIiBbc3dpcGVFbmFibGVkXT1cInRydWVcIiBbbG9vcF09XCJmYWxzZVwiICN0YWJQYW5lbD5cclxuICAgICAgICA8ZHhpLWl0ZW0gdGl0bGU9XCJ7eyAnZURvbnVzdW06OlB1cmNoYXNlT3JkZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XCIgaWNvbj1cImZhcyBmYS1zaG9wcGluZy1jYXJ0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgI2R4UHVyY2hhc2VPcmRlckRvY3VtZW50cyBbZGF0YVNvdXJjZV09XCJwdXJjaGFzZU9yZGVyRG9jdW1lbnRzXCIgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJmYWxzZVwiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW3JlcGFpbnRDaGFuZ2VzT25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2FsbG93Q29sdW1uUmVzaXppbmddPVwidHJ1ZVwiIGNvbHVtblJlc2l6aW5nTW9kZT1cIndpZGdldFwiIFthbGxvd0NvbHVtblJlb3JkZXJpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiIFtjb2x1bW5IaWRpbmdFbmFibGVkXT1cInRydWVcIiBzdHlsZT1cImhlaWdodDogNTB2aDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGR4by1jb2x1bW4tZml4aW5nIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1jb2x1bW4tZml4aW5nPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLWhlYWRlci1maWx0ZXIgW2FsbG93U2VhcmNoXT1cInRydWVcIiBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8taGVhZGVyLWZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLXNvcnRpbmcgbW9kZT1cInNpbmdsZVwiPjwvZHhvLXNvcnRpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8tc2Nyb2xsaW5nIG1vZGU9XCJob3Jpem9udGFsXCIgc2hvd1Njcm9sbGJhcj1cImFsd2F5c1wiPjwvZHhvLXNjcm9sbGluZz5cclxuICAgICAgICAgICAgICAgICAgPGR4by1jb2x1bW4tY2hvb3NlciBbYWxsb3dTZWFyY2hdPVwidHJ1ZVwiIFtlbmFibGVkXT1cInRydWVcIiBtb2RlPVwic2VsZWN0XCI+PC9keG8tY29sdW1uLWNob29zZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8tc2VsZWN0aW9uIG1vZGU9XCJtdWx0aXBsZVwiIHNlbGVjdEFsbE1vZGU9XCJwYWdlXCIgc2hvd0NoZWNrQm94ZXNNb2RlPVwiYWx3YXlzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZHhvLXNlbGVjdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPGR4by1lZGl0aW5nIFthbGxvd1VwZGF0aW5nXT1cImZhbHNlXCIgW2FsbG93QWRkaW5nXT1cImZhbHNlXCIgW2FsbG93RGVsZXRpbmddPVwiZmFsc2VcIiBtb2RlPVwiY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8L2R4by1lZGl0aW5nPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NFbnRyeVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jRW50cnknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NOdW1cIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY051bSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cIm51bUF0Q2FyZFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6TnVtQXRDYXJkJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibGluZU51bVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6TGluZU51bSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjYXJkQ29kZVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6Q2FyZENvZGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NEYXRlXCIgZGF0YVR5cGU9XCJkYXRlXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpEb2NEYXRlJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZG9jRHVlRGF0ZVwiIGRhdGFUeXBlPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7J2VEb251c3VtOjpEb2NEdWVEYXRlJ3xhYnBMb2NhbGl6YXRpb259fVwiIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cIml0ZW1Db2RlXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpJdGVtQ29kZSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRzY3JpcHRpb25cIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkRzY3JpcHRpb24nfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ0ZXh0XCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpUZXh0J3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZnJlZVR4dFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RnJlZVR4dCd8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cIm9wZW5RdHlcIiBjYXB0aW9uPVwie3snZURvbnVzdW06Ok9wZW5RdHknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZHgtZGF0YS1ncmlkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZHhpLWl0ZW0+XHJcblxyXG4gICAgICAgIDxkeGktaXRlbSB0aXRsZT1cInt7ICdlRG9udXN1bTo6UHVyY2hhc2VEZXNwYXRjaCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cIiBpY29uPVwiZmFzIGZhLXRydWNrXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgI2R4UHVyY2hhc2VEZXNwYXRjaERvY3VtZW50cyBbZGF0YVNvdXJjZV09XCJwdXJjaGFzZURlc3BhdGNoRG9jdW1lbnRzXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCIgW3Nob3dCb3JkZXJzXT1cInRydWVcIiBbcmVtb3RlT3BlcmF0aW9uc109XCJmYWxzZVwiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3JlcGFpbnRDaGFuZ2VzT25seV09XCJ0cnVlXCIgW2FsbG93Q29sdW1uUmVzaXppbmddPVwidHJ1ZVwiIGNvbHVtblJlc2l6aW5nTW9kZT1cIndpZGdldFwiXHJcbiAgICAgICAgICAgICAgICAgIFthbGxvd0NvbHVtblJlb3JkZXJpbmddPVwidHJ1ZVwiIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiIFtjb2x1bW5IaWRpbmdFbmFibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogNTB2aDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGR4by1jb2x1bW4tZml4aW5nIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1jb2x1bW4tZml4aW5nPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLWhlYWRlci1maWx0ZXIgW2FsbG93U2VhcmNoXT1cInRydWVcIiBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8taGVhZGVyLWZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLXNvcnRpbmcgbW9kZT1cInNpbmdsZVwiPjwvZHhvLXNvcnRpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8tY29sdW1uLWNob29zZXIgW2FsbG93U2VhcmNoXT1cInRydWVcIiBbZW5hYmxlZF09XCJ0cnVlXCIgbW9kZT1cInNlbGVjdFwiPjwvZHhvLWNvbHVtbi1jaG9vc2VyPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhvLWVkaXRpbmcgW2FsbG93VXBkYXRpbmddPVwiZmFsc2VcIiBbYWxsb3dBZGRpbmddPVwiZmFsc2VcIiBbYWxsb3dEZWxldGluZ109XCJmYWxzZVwiIG1vZGU9XCJjZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZHhvLWVkaXRpbmc+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8tc2Nyb2xsaW5nIG1vZGU9XCJob3Jpem9udGFsXCIgc2hvd1Njcm9sbGJhcj1cImFsd2F5c1wiPjwvZHhvLXNjcm9sbGluZz5cclxuICAgICAgICAgICAgICAgICAgPGR4by1zZWxlY3Rpb24gbW9kZT1cIm11bHRpcGxlXCIgc2VsZWN0QWxsTW9kZT1cInBhZ2VcIiBzaG93Q2hlY2tCb3hlc01vZGU9XCJhbHdheXNcIj5cclxuICAgICAgICAgICAgICAgICAgPC9keG8tc2VsZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NFbnRyeVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RG9jRW50cnknfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NOdW1cIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY051bSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cIm51bUF0Q2FyZFwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6TnVtQXRDYXJkJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibGluZU51bVwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6TGluZU51bSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImNhcmRDb2RlXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpDYXJkQ29kZSd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY0RhdGVcIiBkYXRhVHlwZT1cImRhdGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY0RhdGUnfGFicExvY2FsaXphdGlvbn19XCJcclxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NEdWVEYXRlXCIgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3snZURvbnVzdW06OkRvY0R1ZURhdGUnfGFicExvY2FsaXphdGlvbn19XCIgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaXRlbUNvZGVcIiBjYXB0aW9uPVwie3snZURvbnVzdW06Okl0ZW1Db2RlJ3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZHNjcmlwdGlvblwiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6RHNjcmlwdGlvbid8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInRleHRcIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlRleHQnfGFicExvY2FsaXphdGlvbn19XCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJmcmVlVHh0XCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpGcmVlVHh0J3xhYnBMb2NhbGl6YXRpb259fVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwib3BlblF0eVwiIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eydlRG9udXN1bTo6T3BlblF0eSd8YWJwTG9jYWxpemF0aW9ufX1cIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2R4aS1pdGVtPlxyXG4gICAgICA8L2R4LXRhYi1wYW5lbD5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPlxyXG4gICAgICB7eyAnQWJwVWk6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBbZGlzYWJsZWRdPVwiaXNNb2RhbEJ1c3lGb3JPcGVuRG9jc1wiIChjbGljayk9XCJzZWxlY3RPcGVuRG9jdW1lbnRzKClcIj5cclxuICAgICAge3sgJ2VEb251c3VtOjpTZWxlY3REb2N1bWVudCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYWJwLW1vZGFsPlxyXG5cclxuXHJcbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cInJlc3VsdFBvcHVwVmlzaWJsZVwiIHRpdGxlPVwie3snZURvbnVzdW06OkNyZWF0ZURyYWZ0UmVzdWx0cyd8YWJwTG9jYWxpemF0aW9ufX1cIlxyXG4gIFtzaG93Q2xvc2VCdXR0b25dPVwidHJ1ZVwiIChvbkhpZGluZyk9XCJvblJlc3VsdFBvcHVwQ2xvc2VkKClcIj5cclxuXHJcbiAgPGR4LWRhdGEtZ3JpZCBbZGF0YVNvdXJjZV09XCJkcmFmdFJlc3VsdHNcIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiIGhlaWdodD1cIjEwMCVcIiBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxyXG4gICAgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCIgW3dvcmRXcmFwRW5hYmxlZF09XCJ0cnVlXCI+XHJcblxyXG5cclxuICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImlzU3VjY2Vzc1wiIGNhcHRpb249XCJ7eyAnZURvbnVzdW06OlN0YXR1cycgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICBbY2VsbFRlbXBsYXRlXT1cIidzdGF0dXNUZW1wbGF0ZSdcIj5cclxuICAgIDwvZHhpLWNvbHVtbj5cclxuXHJcbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ3N0YXR1c1RlbXBsYXRlJ1wiPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cImRhdGEudmFsdWVcIiBzdHlsZT1cImNvbG9yOiBncmVlbjsgZm9udC1zaXplOiAxOHB4O1wiPuKclDwvc3Bhbj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhZGF0YS52YWx1ZVwiIHN0eWxlPVwiY29sb3I6IHJlZDsgZm9udC1zaXplOiAxOHB4O1wiPuKcljwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImVmYXRub1wiIGNhcHRpb249XCJ7eydlRG9udXN1bTo6SW52b2ljZUlkJ3xhYnBMb2NhbGl6YXRpb259fVwiIFt3aWR0aF09XCIyMDBcIj48L2R4aS1jb2x1bW4+XHJcbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkcmFmdERvY3VtZW50LmRvY0VudHJ5XCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpSZXNvdXJjZURvY0VudHJ5J3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgPC9keGktY29sdW1uPlxyXG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZHJhZnREb2N1bWVudC5kb2NOdW1cIiBjYXB0aW9uPVwie3snZURvbnVzdW06OlJlc291cmNlRG9jTnVtJ3xhYnBMb2NhbGl6YXRpb259fVwiXHJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgPC9keGktY29sdW1uPlxyXG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZXJyb3JNZXNzYWdlXCIgY2FwdGlvbj1cInt7J2VEb251c3VtOjpFcnJvck1lc3NhZ2UnfGFicExvY2FsaXphdGlvbn19XCIgW3dpZHRoXT1cIjUwMFwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgZHhUZW1wbGF0ZT1cImNlbGxcIiBsZXQtZGF0YT5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vcm1hbDsgbGluZS1oZWlnaHQ6IDEuNjsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjojYjAwMDIwXCIgW3RpdGxlXT1cImRhdGEudmFsdWVcIj5cclxuICAgICAgICAgIHt7IGRhdGEudmFsdWUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZHhpLWNvbHVtbj5cclxuXHJcbiAgPC9keC1kYXRhLWdyaWQ+XHJcblxyXG4gIDwhLS0gQUxUIEJVVE9OTEFSIC0tPlxyXG4gIDxkeGktdG9vbGJhci1pdGVtIHdpZGdldD1cImR4QnV0dG9uXCIgdG9vbGJhcj1cImJvdHRvbVwiIGxvY2F0aW9uPVwiYWZ0ZXJcIlxyXG4gICAgW29wdGlvbnNdPVwieyB0ZXh0OiAoJ2VEb251c3VtOjpPaycgfCBhYnBMb2NhbGl6YXRpb24pLCB0eXBlOiAnZGVmYXVsdCcsIG9uQ2xpY2s6IG9uUmVzdWx0UG9wdXBDbG9zZWQgfVwiPlxyXG4gIDwvZHhpLXRvb2xiYXItaXRlbT5cclxuXHJcbiAgPGR4aS10b29sYmFyLWl0ZW0gd2lkZ2V0PVwiZHhCdXR0b25cIiB0b29sYmFyPVwiYm90dG9tXCIgbG9jYXRpb249XCJhZnRlclwiXHJcbiAgICBbb3B0aW9uc109XCJ7ICB0ZXh0OiAoJ2VEb251c3VtOjpDbG9zZScgfCBhYnBMb2NhbGl6YXRpb24pLCAgdHlwZTogJ25vcm1hbCcsIG9uQ2xpY2s6IGNsb3NlUmVzdWx0UG9wdXAgfVwiPlxyXG4gIDwvZHhpLXRvb2xiYXItaXRlbT5cclxuXHJcbjwvZHgtcG9wdXA+XHJcblxyXG48ZHgtcG9wdXAgWyh2aXNpYmxlKV09XCJicmFuY2hQb3B1cFZpc2libGVcIiB0aXRsZT1cInt7ICdlRG9udXN1bTo6QnJhbmNoU2VsZWN0aW9uVGl0bGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICBbd2lkdGhdPVwiNDAwXCIgW2hlaWdodF09XCIyNTBcIiBbc2hvd0Nsb3NlQnV0dG9uXT1cInRydWVcIj5cclxuXHJcbiAgPGR4LXNlbGVjdC1ib3ggW2RhdGFTb3VyY2VdPVwiYnJhbmNoZXNEYXRhU291cmNlXCIgZGlzcGxheUV4cHI9XCJuYW1lXCIgdmFsdWVFeHByPVwiY29kZVwiIFsodmFsdWUpXT1cInNlbGVjdGVkQnJhbmNoSWRcIlxyXG4gICAgcGxhY2Vob2xkZXI9XCJ7eyAnZURvbnVzdW06OlNlbGVjdEJyYW5jaFBsYWNlaG9sZGVyJyB8IGFicExvY2FsaXphdGlvbiB9fVwiPlxyXG4gIDwvZHgtc2VsZWN0LWJveD5cclxuXHJcbiAgPGR4aS10b29sYmFyLWl0ZW0gd2lkZ2V0PVwiZHhCdXR0b25cIiB0b29sYmFyPVwiYm90dG9tXCIgbG9jYXRpb249XCJhZnRlclwiIFtvcHRpb25zXT1cInsgXHJcbiAgICAgICAgIHRleHQ6ICgnZURvbnVzdW06OkNvbnRpbnVlJyB8IGFicExvY2FsaXphdGlvbiksIFxyXG4gICAgICAgICB0eXBlOiAnc3VjY2VzcycsIFxyXG4gICAgICAgICBvbkNsaWNrOiBjb25maXJtQnJhbmNoU2VsZWN0aW9uXHJcbiAgICAgIH1cIj5cclxuICA8L2R4aS10b29sYmFyLWl0ZW0+XHJcblxyXG48L2R4LXBvcHVwPlxyXG5cclxuPGFicC1tb2RhbCBbYnVzeV09XCJpc0ZpbGVNb2RhbEJ1c3lcIiBbKHZpc2libGUpXT1cImlzRmlsZU1vZGFsT3BlblwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ2xnJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+e3sgJ2VEb251c3VtOjpJbnZvaWNlRmlsZXMnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICA8ZHgtZGF0YS1ncmlkIFtkYXRhU291cmNlXT1cImludm9pY2VGaWxlc0RhdGFTb3VyY2VcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiBbYWxsb3dDb2x1bW5SZXNpemluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGNvbHVtblJlc2l6aW5nTW9kZT1cIndpZGdldFwiIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiIFtyb3dBbHRlcm5hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogNTB2aDtcIj5cclxuICAgICAgICAgICAgICAgIDxkeG8tc29ydGluZyBtb2RlPVwic2luZ2xlXCI+PC9keG8tc29ydGluZz5cclxuICAgICAgICAgICAgICAgIDxkeG8tc2Nyb2xsaW5nIG1vZGU9XCJob3Jpem9udGFsXCIgc2hvd1Njcm9sbGJhcj1cImFsd2F5c1wiPjwvZHhvLXNjcm9sbGluZz5cclxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIFtmaXhlZF09XCJ0cnVlXCIgZGF0YUZpZWxkPVwiaWRcIiB3aWR0aD1cIjEyMFwiIFthbGxvd0dyb3VwaW5nXT1cImZhbHNlXCIgW2FsbG93RmlsdGVyaW5nXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW2FsbG93SGVhZGVyRmlsdGVyaW5nXT1cImZhbHNlXCIgY2VsbFRlbXBsYXRlPVwiZmlsZU9wZXJhdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7ICdBYnBVaTo6QWN0aW9ucycgfCBhYnBMb2NhbGl6YXRpb24gfX1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCByb3cgb2YgJ2ZpbGVPcGVyYXRpb25UZW1wbGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNvbnRhaW5lcj1cImJvZHlcIiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBkcm9wZG93bi10b2dnbGVcIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb2cgbXItMVwiPjwvaT4ge3sgJ0FicFVpOjpBY3Rpb25zJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrKT1cIkRvd25sb2FkRmlsZShyb3cuZGF0YSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PC9pPiB7eyAnZURvbnVzdW06OkRvd25sb2FkJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIiBkYXRhRmllbGQ9XCJleHRyYUl0ZW1cIiBjYXB0aW9uPVwie3snZURvbnVzdW06Ok5hbWUnfGFicExvY2FsaXphdGlvbn19XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cImludm9pY2VGaWxlTmFtZUxvb2t1cFwiIHZhbHVlRXhwcj1cImlkXCJcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cImRpc3BsYXlOYW1lXCI+PC9keG8tbG9va3VwPlxyXG4gICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgIDwvZHgtZGF0YS1ncmlkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgYWJwQ2xvc2U+e3sgJ0FicFVpOjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==
|