https://recording.charlotteclerk.com/js/self/layout.js?v=dpG8_bPYydbCZc6B7qa-Stvf2ZXpV77p3th1ok8_y5Y
1 2var attemptCounter = 1; 3var keyStr = "ABCDEFGHIJKLMNOP" + 4 "QRSTUVWXYZabcdef" + 5 "ghijklmnopqrstuv" + 6 "wxyz0123456789+/" + 7 "="; 8 9function encode64(input) { 10 input = escape(input); 11 var output = ""; 12 var chr1, chr2, chr3 = ""; 13 var enc1, enc2, enc3, enc4 = ""; 14 var i = 0; 15 16 do { 17 chr1 = input.charCodeAt(i++); 18 chr2 = input.charCodeAt(i++); 19 chr3 = input.charCodeAt(i++); 20 21 enc1 = chr1 >> 2; 22 enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 23 enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 24 enc4 = chr3 & 63; 25 26 if (isNaN(chr2)) { 27 enc3 = enc4 = 64; 28 } else if (isNaN(chr3)) { 29 enc4 = 64; 30 } 31 32 output = output + 33 keyStr.charAt(enc1) + 34 keyStr.charAt(enc2) + 35 keyStr.charAt(enc3) + 36 keyStr.charAt(enc4); 37 chr1 = chr2 = chr3 = ""; 38 enc1 = enc2 = enc3 = enc4 = ""; 39 } while (i < input.length); 40 41 return output; 42} 43 44function decode64(input) { 45 var output = ""; 46 var chr1, chr2, chr3 = ""; 47 var enc1, enc2, enc3, enc4 = ""; 48 var i = 0; 49 50 // remove all characters that are not A-Z, a-z, 0-9, +, /, or = 51 var base64test = /[^A-Za-z0-9\+\/\=]/g; 52 if (base64test.exec(input)) { 53 alert("There were invalid base64 characters in the input text.\n" + 54 "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" + 55 "Expect errors in decoding."); 56 } 57 input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 58 59 do { 60 enc1 = keyStr.indexOf(input.charAt(i++)); 61 enc2 = keyStr.indexOf(input.charAt(i++)); 62 enc3 = keyStr.indexOf(input.charAt(i++)); 63 enc4 = keyStr.indexOf(input.charAt(i++)); 64 65 chr1 = (enc1 << 2) | (enc2 >> 4); 66 chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 67 chr3 = ((enc3 & 3) << 6) | enc4; 68 69 output = output + String.fromCharCode(chr1); 70 71 if (enc3 != 64) { 72 output = output + String.fromCharCode(chr2); 73 } 74 if (enc4 != 64) { 75 output = output + String.fromCharCode(chr3); 76 } 77 78 chr1 = chr2 = chr3 = ""; 79 enc1 = enc2 = enc3 = enc4 = ""; 80 81 } while (i < input.length); 82 83 return unescape(output); 84} 85 86 87 88 89$(document).ready(function () { 90 var str = window.location.search; 91 //this is new to no show the user name and the password 92 if (str.startsWith("?aW5OYW1lPVB1YmxpY0BDaGFybG90d")) { 93 Autologin(str); 94 } 95 96 $('#authenticateForm').on('keypress', function (e) { 97 if (e.which == 13) { // 13 is the Enter key 98 if ($('#txtConfirmationCode').val().length > 0) { 99 e.preventDefault(); // Prevent form submission on Enter key 100 } 101 } 102 }); 103 104 // Trigger btnAuthenticate click when Enter is pressed in confirmation code input 105 $('#txtConfirmationCode').on('keypress', function (e) { 106 if (e.which == 13) { // Enter key was pressed 107 $('#btnAuthenticate').click(); // Trigger Authenticate button action 108 } 109 }); 110 111 $('#enterConfirmCodeDiv').css('display', 'none'); 112 $('#buttonConfirmRow').show(); 113 $('#buttonAuthenticateRow').hide(); 114 115 if ($('#IsAuthenticated').data('message') == "Y") { 116 if ($('#nameAuthenticated').data('message') == '[email protected]') { 117 $('#lblLogin').html($('#nameAuthenticated').data('message')); 118 } 119 else { 120 if ($('#nameAuthenticated').data('message') != 'Public') { 121 $('#lblLogin').html("Logout - " + $('#nameAuthenticated').data('message')) 122 } 123 else { 124 $('#lblLogin').html("Logout - " + $('#firstName').data('message') + " " + $('#lastName').data('message')); 125 } 126 127 } 128 $('#loginTextDiv').css('display', 'inline'); 129 } 130 if ($('#IsAuthenticated').data('message') == "N") { 131 $('#lblLogin').html("Agent Login"); 132 $('#loginTextDiv').css('display', 'inline'); 133 $('#lblAuthenticate').html("Authenticate"); 134 $('#authenticateTextDiv').css('display', 'inline'); 135 } 136 137 $('#authenticateForm').validate({ 138 139 errorPlacement: function (error, element) { 140 // name attrib of the field 141 var n = element.attr("name"); 142 143 if (n == "firstname") 144 element.attr("placeholder", "Required First Name"); 145 else if (n == "lastname") 146 element.attr("placeholder", "Required Last Name"); 147 else if (n == "emailauth") 148 element.attr("placeholder", "Invalid Email"); 149 }, 150 rules: { 151 firstname: { 152 required: true 153 }, 154 lastname: { 155 required: true 156 }, 157 textingnumber: { 158 required: true, 159 phoneUS: true 160 }, 161 emailauth: { 162 required: true, 163 email: true 164 } 165 }, 166 highlight: function (element) { 167 // add a class to the label of the element
168 if (element.id == "firstname") { 169 $("#lblfirstname").css("color", '#C52F38'); 170 $("#lblfirstname").css("font-weight", 'bold'); 171 $("#lblfirstname").text("Required"); 172 } 173 if (element.id == "lastname") { 174 $("#lbllastname").css("color", '#C52F38'); 175 $("#lbllastname").css("font-weight", 'bold'); 176 $("#lbllastname").text("Required"); 177 } 178 if (element.id == "textingnumber") { 179 $("#lbltextingnumber").css("color", '#C52F38'); 180 $("#lbltextingnumber").css("font-weight", 'bold'); 181 $("#lbltextingnumber").text("Invalid Phone"); 182 } 183 if (element.id == "emailauth") { 184 $("#lblemailauth").css("color", '#C52F38'); 185 $("#lblemailauth").css("font-weight", 'bold'); 186 $("#lblemailauth").text("Invalid Email"); 187 } 188 }, 189 unhighlight: function (element) { 190 if (element.id == "firstname") { 191 $("#lblfirstname").css("color", '#000000'); 192 $("#lblfirstname").css("font-weight", 'bold'); 193 $("#lblfirstname").text("First Name"); 194 } 195 if (element.id == "lastname") { 196 $("#lbllastname").css("color", '#000000'); 197 $("#lbllastname").css("font-weight", 'bold'); 198 $("#lbllastname").text("Last Name"); 199 } 200 if (element.id == "textingnumber") { 201 // remove a class to the label of the element 202 $("#lbltextingnumber").css("color", '#000000'); 203 $("#lbltextingnumber").css("font-weight", 'bold'); 204 $("#lbltextingnumber").text("Phone Number"); 205 } 206 if (element.id == "emailauth") { 207 $("#lblemailauth").css("color", '#000000'); 208 $("#lblemailauth").css("font-weight", 'bold'); 209 $("#lblemailauth").text("Email"); 210 } 211 } 212 }); 213 214 $('#firstname').on('change keyup', function (event) { 215 $(this).val(function (index, value) { 216 if (value != "") { 217 return ProperCase(value); 218 } 219 }); 220 }); 221 222 $('#lastname').on('change keyup', function (event) { 223 $(this).val(function (index, value) { 224 if (value != "") { 225 return ProperCase(value); 226 } 227 }); 228 }); 229 230 231 232 $('#agentLogin').on('click', function (event) { 233 event.preventDefault(); 234 openForm('L'); 235 }); 236 $('#manualAuthenticate').on('click', function (event) { 237 event.preventDefault(); 238 openForm('A'); 239 }); 240 241 $('#btnLoginSubmit').on('click', function (event) { 242 event.preventDefault(); 243 login(); 244 }); 245 246 $('#btnLoginCancel').on('click', function (event) { 247 event.preventDefault(); 248 closeForm('L'); 249 }); 250 $('#btnAuthenticationCancel').on('click', function (event) { 251 event.preventDefault(); 252 closeForm('A'); 253 }); 254 $('#btnAuthenticationCancel2').on('click', function (event) { 255 event.preventDefault(); 256 closeForm('A'); 257 }); 258 259 $('#btnCartView').on('click', function (event) { 260 event.preventDefault(); 261 viewCartLayout(); 262 }); 263 264 $('#btnGetConfirmationCode').on('click', function (event) { 265 event.preventDefault(); 266 GetConfirmationCode(); 267 }); 268 269 270 $('#btnAuthenticate').on('click', function (event) { 271 event.preventDefault(); 272 CheckAllowAuthentication(); 273 }); 274 275 276 $.ajax({
277 url: "/messages/opening-message.html", 278 success: function (html) { 279 if ($(html).find("#OpeningMessageBody").prevObject[2]) { 280 let title = $(html).find("#OpeningMessageTitle"); 281 let body = $(html).find("#OpeningMessageBody"); 282 $("#CharlotteClerkImportantMessageModalTitle").append( 283 title.prevObject[0].innerHTML 284 ); 285 $("#CharlotteClerkImportantMessageModal #important-message").append( 286 body.prevObject[2].innerHTML 287 ); 288 $("#CharlotteClerkImportantMessageModal").modal("show"); 289 } 290 }, 291 }); 292}); 293function ProperCase(data) { 294 var words = data.split(' '); 295 var results = []; 296 for (var i = 0; i < words.length; i++) { 297 var letter = words[i].charAt(0).toUpperCase(); 298 results.push(letter + words[i].slice(1)); 299 } 300 return results.join(' '); 301}; 302 303function openForm(from) { 304 $('#loginDiv').css('display', 'none'); 305 $('#authenticateDiv').css('display', 'none'); 306 307 if (from == 'L') { 308 if ($('#lblLogin').html() == "Agent Login") { 309 $('#loginDiv').css('display', 'inline'); 310 $('#authenticateTextDiv').css('display', 'none'); 311 } else { 312 if ($('#nameAuthenticated').data('message') !== '[email protected]') { 313 resetForm('L'); 314 $.ajax({
315 url: "/Account/LogOff", 316 type: "POST", 317 dataType: "json", 318 success: function () { 319 $('#lblLogin').html("Agent Login"); 320 $('#loginTextDiv').css('display', 'inline'); 321 $('#lblAuthenticate').html("Authenticate"); 322 $('#authenticateTextDiv').css('display', 'inline'); 323 window.location.href = "/search/Name"; 324 } 325 }); 326 } 327 } 328 } 329 else if (from == 'A') { 330 if ($('#lblAuthenticate').html() == "Authenticate") { 331 $('#loginTextDiv').css('display', 'none'); 332 $("#authenticateDiv").css('display', 'block'); 333 $('#lblConfirmationCodeMessage').text(''); 334 } else { 335 resetForm('A'); 336 $('#lblAuthenticate').html("Authenticate"); 337 $('#loginTextDiv').css('display', 'inline'); 338 } 339 } 340} 341 342function Autologin(str) { 343 $.ajax({
344 url: "/Account/AutoLogin", 345 type: "POST", 346 dataType: "json", 347 data: { 348 inStr: str 349 }, 350 beforeSend: function () { 351 // Show image container 352 $("#loader").show(); 353 }, 354 error: function (response) { 355 $('#lblLogin').html("Login"); 356 // Hide image container 357 $("#loader").hide(); 358 }, 359 success: function (response) { 360 //auth = '(Authenticated.GetClaimValue("IsAuthenticated", Context.Request) ?? "N")';// 361 window.location.href = "/Search/Name"; 362 } 363 }); 364} 365 366function login() { 367 grecaptcha.ready(function () { 368 grecaptcha.execute($('#siteKey').data('message'), { action: 'home/login' }).then(function (token) { 369 $.getJSON("/Home/Verify?token=" + token, 370 function (dat) { 371 if (dat) { 372 var form = $('#loginForm'); 373 var token = $('input[name="__RequestVerificationToken"]', form).val(); 374 $.ajax({
375 url: "/Account/JsonLogin", 376 type: "POST", 377 dataType: "json", 378 data: { 379 __RequestVerificationToken: token, 380 inUser: $("#email").val() 381 , inPassword: $("#psw").val() 382 }, 383 beforeSend: function () { 384 // Show image container 385 $("#loader").show(); 386 }, 387 error: function (response) { 388 $('#loginmessage').html("Login Failed"); 389 $("#loginmessage").css("color", "#C72F3B"); 390 $('#lblLogin').html("Agent Login"); 391 // Hide image container 392 $("#loader").hide(); 393 }, 394 success: function (response) { 395 if (response.success) { 396 $("#loginmessage").css("color", "#000000"); 397 document.getElementById("loginDiv").style.display = "none"; 398 //auth = '(Authenticated.GetClaimValue("IsAuthenticated", Context.Request) ?? "N")'; 399 window.location.href = "/Search/Name"; 400 } 401 else { 402 $('#loginmessage').html("Login Failed"); 403 $("#loginmessage").css("color", "#C72F3B"); 404 $('#lblLogin').html("Agent Login"); 405 // Hide image container 406 $("#loader").hide(); 407 } 408 } 409 }); 410 } 411 else { 412 $('#loginmessage').html("Login Failed"); 413 $("#loginmessage").css("color", "#C72F3B"); 414 $('#lblLogin').html("Login"); 415 // Hide image container 416 $("#loader").hide(); 417 } 418 } 419 ); 420 }); 421 }); 422} 423 424function closeForm(from) { 425 if (from == 'L') { 426 $("#loginDiv").css('display', 'none'); 427 $("#authenticateTextDiv").css('display', 'inline'); 428 resetForm('L'); 429 } 430 else if (from == 'A') { 431 $("#authenticateDiv").css('display', 'none'); 432 $('#loginTextDiv').css('display', 'inline'); 433 resetForm('A'); 434 435 } 436} 437 438function resetForm(from) { 439 440 if (from == 'L') { 441 $("#email").val(''); 442 $('#psw').val(''); 443 } 444 else { 445 446 $('#radio_email').prop('checked', true); 447 $('#textingnumber').val(''); 448 $('#emailauth').val(''); 449 $("#textingNumberDiv").hide(); 450 $("#emailAuthDiv").show(); 451 textingnumber = ''; 452 emailauth = ''; 453 $('#firstname').val(''); 454 $('#lastname').val(''); 455 $('#txtConfirmationCode').val(''); 456 $('#lblConfirmationCodeMessage').text(''); 457 $('#btnAuthenticate').show(); 458 459 $('#enterConfirmCodeDiv').hide(); 460 $('#buttonConfirmRow').show(); 461 $('#buttonAuthenticateRow').hide(); 462 } 463} 464 465function GetConfirmationCode() { 466 467 // Instruction Message 468 //$('#lblInstructionMessage').html('Please enter your confirmation code.'); 469 470 var error = false; 471 472 var firstname = $('#firstname').val(); 473 var lastname = $('#lastname').val(); 474 var email = $('#emailauth').val(); 475 476 // Check if first name is valid 477 if ($("[name='firstname']").valid() == true) { 478 firstname = $('#firstname').val(); 479 error = false; 480 } 481 else { 482 $('input[name="firstname"]').valid(); 483 return; 484 } 485 // Check if last name is valid 486 if (error == false) { 487 if ($("[name='lastname']").valid() == true) { 488 lastname = $('#lastname').val(); 489 error = false; 490 } 491 else { 492 $('input[name="lastname"]').valid(); 493 return; 494 } 495 } 496 // If there is no error validate phone or email depending on radio butto selection 497 if (error == false) { 498 var selValue = $('input[name="radio_select"]:checked').val(); 499 500 // Validate email 501 if ($("[name='emailauth']").valid() == true) { 502 phone = ''; 503 $('#textingnumber').val(''); 504 email = $('#emailauth').val(); 505 error = false; 506 } 507 else { 508 $('input[name="emailauth"]').valid(); 509 return; 510 } 511 } 512 if (error == false) { 513 grecaptcha.ready(function () { 514 grecaptcha.execute($('#siteKey').data('message'), { action: 'home/login' }).then(function (token) { 515 $.getJSON("/Home/Verify?token=" + token, 516 function (dat) { 517 if (dat) { 518 var form = $('#authenticateForm'); 519 var token = $('input[name="__RequestVerificationToken"]', form).val(); 520 url = '/Authenticate/CreateAuthenticateUser'; 521 $.ajax({
522 url: url, 523 type: 'POST', 524 dataType: "json", 525 data: { 526 __RequestVerificationToken: token, 527 inFirstName: firstname, 528 inLastName: lastname, 529 inEmail: email 530 }, 531 success: function (ConfirmUserCode) { 532 if (ConfirmUserCode > 0) { 533 $('#enterConfirmCodeDiv').show(); 534 $('#buttonConfirmRow').hide(); 535 $('#buttonAuthenticateRow').show(); 536 } 537 } 538 }) 539 } 540 } 541 ); 542 }); 543 }); 544 } 545} 546 547function CheckAllowAuthentication() { 548 549 //var firstname = $('#firstname').val(); 550 // authenticationid = $('#txtConfirmationCode').val() 551 grecaptcha.ready(function () { 552 grecaptcha.execute($('#siteKey').data('message'), { action: 'home/login' }).then(function (token) { 553 $.getJSON("/Home/Verify?token=" + token, 554 function (dat) { 555 if (dat) { 556 var form = $('#authenticateForm'); 557 var token = $('input[name="__RequestVerificationToken"]', form).val(); 558 $.ajax({
559 url: '/Authenticate/UpdateAuthenticateUser', 560 type: 'POST', 561 data: { 562 __RequestVerificationToken: token, 563 inCode: $('#txtConfirmationCode').val() 564 }, 565 dataType: 'json', 566 success: function (data) { 567 if (data.success) { 568 $('#lblConfirmationCodeMessage').text("Correct Confirmation Code "); 569 $('#lblConfirmationCodeMessage').css('color', 'green'); 570 571 $('#enterConfirmCodeCreateDiv').hide(); 572 573 attemptCounter = 1; 574 } 575 else { 576 attemptCounter++; 577 } 578 $("#authenticateDiv").hide(); 579 580 Swal.fire({ 581 title: "Authentication Successful", 582 icon: "info" 583 }).then((result) => { 584 window.location.href = "/Search/Name"; 585 }); 586 587 }, 588 error: function (data) { // Handle the error 589 if (attemptCounter == 3) { 590 $('#lblConfirmationCodeMessage').text("You have reached the maximun number of attempts."); 591 $('#lblConfirmationCodeMessage').css('color', '#C52F38'); 592 setTimeout(function () { resetForm('A'); }, 3000); 593 $('#enterConfirmCodeCreateDiv').hide(); 594 $('#btnAuthenticate').hide(); 595 attemptCounter = 1; 596 } 597 else if (attemptCounter == 1) { 598 $('#lblConfirmationCodeMessage').text("Incorrect confirmation code. Please try again."); 599 $('#lblConfirmationCodeMessage').css('color', '#C52F38'); 600 $('#txtConfirmationCode').focus; 601 attemptCounter = attemptCounter + 1; 602 } 603 else if (attemptCounter == 2) { 604 $('#lblConfirmationCodeMessage').text("2nd Attempt - Incorrect confirmation code. Please try again."); 605 $('#lblConfirmationCodeMessage').css('color', '#C52F38'); 606 $('#txtConfirmationCode').focus; 607 attemptCounter = attemptCounter + 1; 608 } 609 } 610 }); 611 } 612 } 613 ); 614 }); 615 }); 616} 617 618function viewCartLayout() { 619 620 $("#cartLayoutModal").modal('show'); 621 var grid = $("#CartGridLayout").data("kendoGrid"); 622 if (!grid) { 623 $("#CartGridLayout").kendoGrid({ 624 dataSource: { 625 transport: { 626 read: "/Render/GetDocumentList/", 627 dataType: "json" 628 }, 629 destroy: { 630 url: "/Render/DeleteDocumentList/", 631 dataType: "json" 632 }, 633 schema: { 634 model: { 635 fields: { 636 myDocumentId: { type: "number" }, 637 myPageCount: { type: "number" }, 638 myBook: { type: "string" }, 639 myPage: { type: "string" }, 640 myDocTypeDescription: { type: "string" }, 641 } 642 } 643 }, 644 serverFiltering: true, 645 serverSorting: true 646 }, 647 columns: [ 648 { 649 hidden: true, 650 field: "myDocumentId" 651 }, { 652 template: ({ myBook, myPage, myDocTypeDescription }) => `<span>${kendo.htmlEncode(myBook)} / ${kendo.htmlEncode(myPage)} - ${kendo.htmlEncode(myDocTypeDescription)}</span >`, 653 width: 275 654 }, { 655 command: { 656 name: "view", 657 iconClass: "k-i-eye", 658 click: onFromLayoutImageView, 659 text: "" 660 }, 661 width: 40 662 }, { 663 command: { 664 name: "clear", 665 iconClass: "k-i-trash", 666 click: onFromLayoutImageDelete, 667 text: "" 668 }, 669 width: 40 670 } 671 ], 672 dataBound: function (e) { 673 if (e.sender.dataSource.total() == 0) { 674 // Cart Empty 675 $("#CartGridLayout").hide(); 676 $("#btnProcessLayout").hide(); 677 $("#btnCartView").css("display", "none"); 678 679 if ($('#IsAuthenticated').data('message') == "Y") { 680 $("#lblCartLayoutMessage").text("Process Cart Electronic Certification"); 681 } 682 else { 683 $("#lblCartLayoutMessage").text("Email Required For Electronic Certification"); 684 } 685 686 $("#divCartLayoutEmpty").show(); 687 } 688 else { 689 // Cart Has Items 690 $("#divCartLayoutEmpty").hide(); 691 $("#CartGridLayout").show(); 692 693 if ($('#IsAuthenticated').data('message') == "Y") { 694 $("#lblCartLayoutMessage").text("Process Cart Electronic Certification"); 695 $("#btnProcessLayout").show(); 696 } 697 else { 698 $("#lblCartLayoutMessage").text("Email Required For Electronic Certification"); 699 $("#btnProcessLayout").hide(); 700 } 701 } 702 }, 703 editable: "inline" 704 }); 705 } 706 else { 707 grid.dataSource.read(); 708 } 709} 710 711function onFromLayoutImageView(e) { 712 e.preventDefault(); 713 var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
714 var myUrl = "/Render/ViewDocuments?inFromSearch=Layout" 715 + "&inDocumentId=" + dataItem.myDocumentId 716 + "&inPageCount=" + dataItem.myPageCount; 717 718 window.location.href = myUrl; 719} 720 721function onFromLayoutImageDelete(e) { 722 e.preventDefault(); 723 var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 724 var title = 'My Document List' 725 var msg = 'Are you sure you want to Delete?' 726 727 var $content = "<div class='dialog-ovelay'>" + 728 "<div class='dialog'><header>" + 729 "<i class='fa fa-book'></i> " + 730 " <h3> " + title + " </h3> " + 731 "</header>" + 732 "<div class='dialog-msg'>" + 733 " <p> " + msg + " </p> " + 734 "</div>" + 735 "<footer>" + 736 "<div class='controls'>" + 737 " <button style='Height:40px' class='btn-danger doAction'>Yes</button> " + 738 " <button style='Height:40px' class='btn-default cancelAction'>Cancel</button> " + 739 "</div>" + 740 "</footer>" + 741 "</div>" + 742 "</div>"; 743 $('body').prepend($content); 744 $('.doAction').click(function () { 745 $.ajax({
746 url: '/Render/DeleteListItem', 747 type: 'POST', 748 data: { 749 __RequestVerificationToken: $('#__RequestVerificationToken').val(), 750 inDocumentId: dataItem.myDocumentId 751 } 752 }).done(function () { 753 754 $('#DocumentMessage').html(""); 755 viewCartLayout(); 756 757 }); 758 $(this).parents('.dialog-ovelay').fadeOut(500, function () { 759 $(this).remove(); 760 }); 761 }); 762 $('.cancelAction, .fa-close').click(function () { 763 $(this).parents('.dialog-ovelay').fadeOut(500, function () { 764 $(this).remove(); 765 }); 766 }); 767} 768
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.