This is a fully standards-compliant XML digital signature created by Open eSignForms software on a test document and test data. As of the 12.9.29 release, it supports XAdES-BES as specified in ETSI TS 101 903 v1.4.1 XML Advanced Electronic Signatures by including the QualifyingProperties, SignedProperties, SignedSignatureProperties, SigningTime, SignedDataObjectProperties and DataObjectFormat elements, as well as signing the ds:KeyInfo element.

It uses our standard format, an Enveloped Signature that encompasses the entire XML source document, the KeyInfo, QualifyingProperties as well as a special Seal containing platform identity information. It was captured by the demo system on 16 February 2019 using a developer's PC in Kirkland, Washington. It can be validated by any compliant XML Digital Signature implementation.

<?xml version="1.0" encoding="UTF-8"?>
<snapshots xmlns="http://open.esignforms.com/XMLSchema/2019" timestamp="2019-02-16T12:40:45-08:00">
<snapshot xmlns="http://open.esignforms.com/XMLSchema/2019" timestamp="2019-02-16T12:40:45-08:00" type="document"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>W-4</title>
<meta name="robots" content="noindex, nofollow" />
<meta name="Description" content="Confidential document" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="Generator" content="Yozons Open eSignForms document generator version 19.1.19_p0215_1750" />
<meta name="DeploymentId" content="bbfe9bed-918d-446b-9518-8ec303bafb83" />
<meta name="TransactionId" content="ccc1bb24-7f1d-43f6-99c2-4ef352001191" />
<meta name="TransactionTemplateId" content="589aaf0b-6f8a-49d3-b080-a10a83ecbe0c" />
<meta name="TransactionMode" content="Production" />
<meta name="PackageId" content="16f8f766-68b4-43de-9f1a-82ca9cd3d92a" />
<meta name="PackageVersionId" content="9b7bfc26-b4f3-4d6f-b746-a552c203aeaf" />
<meta name="PackageVersionPartyName" content="employee" />
<meta name="DocumentId" content="19641089-b0e8-4467-b4d4-113ede914724" />
<meta name="DocumentName" content="W-4" />
<meta name="DocumentVersionId" content="4abac535-d043-4389-9a56-4992de07cf65" />
<meta name="DocumentVersionPageId" content="080bfdf0-ba45-4efb-a996-2e7355d2b075" />
<meta name="DocumentVersionPartyName" content="Employee" />
<meta name="DocumentPageMode" content="REVIEW" />
<meta name="HtmlRenderTimestamp" content="2019-02-16 12:40:39.305 PST" />
<meta name="RequestIpAddr" content="50-46-118-196.evrt.wa.frontiernet.net (50.46.118.196)" />
<meta name="RequestUserAgent" content="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15" />
<base href="https://open.esignforms.com/demo/" />
<style type="text/css">
/* platform esf.css */
@import url(//fonts.googleapis.com/css?family=Pacifico);

body.esf { font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 1em; }

.esf a img { border: none; }

.esf table.center, .esf div.center { margin-left: auto; margin-right: auto; }

.esf p.left, .esf span.left, .esf div.left, .esf th.left, .esf td.left { text-align: left; }
.esf p.right, .esf span.right, .esf div.right, .esf th.right, .esf td.right { text-align: right; }
.esf p.center, .esf span.center, .esf th.center, .esf td.center { text-align: center; }
.esf p.justify, .esf span.justify, .esf div.justify { text-align: justify; }

.esf .bottom { vertical-align: bottom; }
.esf .top { vertical-align: top; }
.esf .middle { vertical-align: middle; }

.esf .w5 { width: 5%; }
.esf .w10 { width: 10%; }
.esf .w15 { width: 15%; }
.esf .w20 { width: 20%; }
.esf .w25 { width: 25%; }
.esf .w30 { width: 30%; }
.esf .w33 { width: 33%; }
.esf .w34 { width: 34%; }
.esf .w35 { width: 35%; }
.esf .w40 { width: 40%; }
.esf .w45 { width: 45%; }
.esf .w48 { width: 48%; }
.esf .w50 { width: 50%; }
.esf .w60 { width: 60%; }
.esf .w70 { width: 70%; }
.esf .w75 { width: 75%; }
.esf .w80 { width: 80%; }
.esf .w85 { width: 85%; }
.esf .w90 { width: 90%; }
.esf .w95 { width: 95%; }
.esf .w98 { width: 98%; }
.esf .w100 { width: 100%; }

.esf .boT { border-top: 1px solid black; }
.esf .boB { border-bottom: 1px solid black; }
.esf .boTB { border-top: 1px solid black; border-bottom: 1px solid black; }
.esf .boL { border-left: 1px solid black; }
.esf .boR { border-right: 1px solid black; }
.esf .boLR { border-left: 1px solid black; border-right: 1px solid black; }
.esf .boBdash { border-bottom: 1px dashed black; }
.esf .boBdot { border-bottom: 1px dotted black; }
.esf .boBthick { border-bottom: 4px solid black; }

.esf .box { border: 1px solid black; }
.esf .boxthicker { border: 2px solid black; }
.esf .boxthick { border: 4px solid black; }

.esf .underline { text-decoration: underline; }
.esf .bold { font-weight: bold; }
.esf .italic { font-style: italic; }

.esf ::-webkit-input-placeholder { font-style: italic; }
.esf :-moz-placeholder { font-style: italic; }
.esf ::-moz-placeholder { font-style: italic; }
.esf :-ms-input-placeholder { font-style: italic; }

.esf .caps { text-transform: uppercase; }
.esf .smallcaps { font-variant: small-caps; }
.esf .lowercase { text-transform: lowercase; }

.esf .f6 { font-size: 6pt; }
.esf .f7 { font-size: 7pt; }
.esf .f8 { font-size: 8pt; }
.esf .f9 { font-size: 9pt; }
.esf .f10 { font-size: 10pt; }
.esf .f11 { font-size: 11pt; }
.esf .f12 { font-size: 12pt; }
.esf .f14 { font-size: 14pt; }
.esf .f16 { font-size: 16pt; }
.esf .f18 { font-size: 18pt; }
.esf .f20 { font-size: 20pt; }
.esf .f22 { font-size: 22pt; }
.esf .f24 { font-size: 24pt; }
.esf .f28 { font-size: 28pt; }
.esf .f32 { font-size: 32pt; }
.esf .f36 { font-size: 36pt; }
.esf .f40 { font-size: 40pt; }
.esf .f48 { font-size: 48pt; }
.esf .f60 { font-size: 60pt; }
.esf .f72 { font-size: 72pt; }
.esf .f96 { font-size: 96pt; }

.esf .red {color: red;}
.esf .green {color: green;}
.esf .blue {color: blue;}
.esf .white {color: white;}
.esf .black {color: black;}
.esf .gray  {color: gray;}

.esf .nomargin { margin: 0; }
.esf .nomarginT { margin-top: 0; }
.esf .nomarginB { margin-bottom: 0; }
.esf .nomarginTB { margin-top: 0; margin-bottom: 0; }
.esf .nomarginL { margin-left: 0; }
.esf .nomarginR { margin-right: 0; }
.esf .nomarginLR { margin-left: 0; margin-right: 0; }
.esf .nowrap { white-space: nowrap; }

/* HTML5 versions for table cellpadding="0" through cellpadding="5" */
.esf table.cellpadding0 th, .esf table.cellpadding0 td { padding: 0; }
.esf table.cellpadding1 th, .esf table.cellpadding1 td { padding: 1px; }
.esf table.cellpadding2 th, .esf table.cellpadding2 td { padding: 2px; }
.esf table.cellpadding3 th, .esf table.cellpadding3 td { padding: 3px; }
.esf table.cellpadding4 th, .esf table.cellpadding4 td { padding: 4px; }
.esf table.cellpadding5 th, .esf table.cellpadding5 td { padding: 5px; }

/* HTML5 versions for table cellspacing="0" through cellspacing="5" */
.esf table.cellspacing0 { border-spacing: 0; }
.esf table.cellspacing1 { border-spacing: 1px; }
.esf table.cellspacing2 { border-spacing: 2px; }
.esf table.cellspacing3 { border-spacing: 3px; }
.esf table.cellspacing4 { border-spacing: 4px; }
.esf table.cellspacing5 { border-spacing: 5px; }

/* HTML5 version of border="1" through border="2" */
table.gridBorder { border-top: 1px solid black; border-left: 1px solid black; }
table.gridBorder th, table.gridBorder td { border-bottom: 1px solid black; border-right: 1px solid black; }
table.gridBorder2 { border-top: 2px solid black; border-left: 2px solid black; }
table.gridBorder2 th, table.gridBorder2 td { border-bottom: 2px solid black; border-right: 2px solid black; }

.esf div.newPage { border-top: 1px dotted gray; }
.esf .doNotPrint { } /* do nothing normally, but we override in @print so suppress the element */
.esf div.pagediv { } /* do nothing, but allows you to style as each page is wrapped in a div */

.esf div.inline { display: inline-block; }
.esf span.inlineblock { display: inline-block; }

/* The following are generally not useful for a document, but are used in the auto-rendering of fields, labels, errors, etc. Many of these can be set via DocumentStyles in Open ESF. */

/* For the Field Label rendering */
.esf label.normal { } 
.esf label.normal-error { color: red; font-weight: bold; background-color: yellow; } 
.esf label.small { font-size: 8pt; } 
.esf label.small-error { font-size: 8pt; color: red; font-weight: bold; background-color: yellow; } 

.esf span.viewFieldData { width: inherit; } /* when viewing field data -- not in input mode */
.esf span.viewFieldData-error { font-weight: bold; font-style: italic; background-color: pink; border: 2px dashed red; } /* when viewing data that was not known -- not in input mode */

.esf span.labelFieldArea { display: inline-block; } /* sets the width for the label and field area */

.esf span.labelFieldArea span.labelAreaStacked { display: block; white-space: nowrap; }
.esf span.labelFieldArea span.labelAreaRightStacked { display: block; text-align: right; white-space: nowrap; }
.esf span.labelFieldArea span.labelAreaCenterStacked { display: block; text-align: center; white-space: nowrap; }
.esf span.labelFieldArea span.labelArea { display: inline-block; white-space: nowrap; }
.esf span.labelFieldArea span.labelAreaRight { display: inline-block; text-align: right; white-space: nowrap; }
.esf span.labelFieldArea span.labelAreaCenter { display: inline-block; text-align: center; white-space: nowrap; }

.esf span.labelFieldArea span.fieldAreaStacked { display: block; width: 100%; }
.esf span.labelFieldArea span.fieldAreaLeftStacked { display: block; width: 100%; text-align: left; }
.esf span.labelFieldArea span.fieldAreaRightStacked { display: block; width: 100%; text-align: right; }
.esf span.labelFieldArea span.fieldAreaCenterStacked { display: block; width: 100%; text-align: center; }
.esf span.labelFieldArea span.fieldArea { display: inline-block; width: 100%; }
.esf span.labelFieldArea span.fieldAreaLeft { display: inline-block; width: 100%; text-align: left; }
.esf span.labelFieldArea span.fieldAreaRight { display: inline-block; width: 100%; text-align: right; }
.esf span.labelFieldArea span.fieldAreaCenter { display: inline-block; width: 100%; text-align: center; }

.esf span.labelFieldArea span.fieldAreaStackedAuto { display: block; width: auto; }
.esf span.labelFieldArea span.fieldAreaLeftStackedAuto { display: block; width: auto; text-align: left; }
.esf span.labelFieldArea span.fieldAreaRightStackedAuto { display: block; width: auto; text-align: right; }
.esf span.labelFieldArea span.fieldAreaCenterStackedAuto { display: block; width: auto; text-align: center; }
.esf span.labelFieldArea span.fieldAreaAuto { display: inline-block; width: auto; }
.esf span.labelFieldArea span.fieldAreaLeftAuto { display: inline-block; width: auto; text-align: left; }
.esf span.labelFieldArea span.fieldAreaRightAuto { display: inline-block; width: auto; text-align: right; }
.esf span.labelFieldArea span.fieldAreaCenterAuto { display: inline-block; width: auto; text-align: center; }

.esf span.fieldArea { display: inline-block; }
.esf span.fieldAreaLeft { display: inline-block; text-align: left; }
.esf span.fieldAreaRight { display: inline-block; text-align: right; }
.esf span.fieldAreaCenter { display: inline-block; text-align: center; }

.esf span.fieldAreaAuto { display: inline; }
/* Auto widths do not make sense really with alignment as the field should be no bigger than the contents; we'll keep it inline-blocked */
.esf span.fieldAreaLeftAuto { display: inline-block; text-align: left; }
.esf span.fieldAreaRightAuto { display: inline-block; text-align: right; }
.esf span.fieldAreaCenterAuto { display: inline-block; text-align: center; }

/* For signature/initials display */
.esf .signature, .esf .signature input { font-family: 'Pacifico', 'Bradley Hand ITC', 'Lucida Handwriting', 'Comic Sans MS', cursive; font-size: 14pt; color: blue; white-space: nowrap; }
.esf div.signatureBlock { border: 3px solid #9899c4; border-radius: 10px; background-color: #efffff; padding: 0px 3px 3px 12px; width: 720px; page-break-inside: avoid; }
.esf div.signatureBlock p.signatureHeader { font-size: 11pt; font-weight: bold; text-decoration: underline; margin-bottom: 0px; }
.esf .signatureMetadata { font-size: 8pt; font-family: 'Courier New', Courier, monospace; white-space: nowrap; }

/* For optional/required/error input fields; uses span.viewFieldData for showing the data when in non-edit mode */
.esf input.required { background-color: #FFFFE7; font-weight: bold; border: 1px solid #7F9DB9; width: inherit; }
.esf input.optional { background-color: white; font-weight: bold; border: 1px solid #7F9DB9; width: inherit; }
.esf input.error { background-color: #FFC0CB; font-weight: bold; border: 1px solid red; width: inherit; }
.esf select.required { background-color: #FFFFE7; font-weight: bold; border: 1px solid #7F9DB9; width: inherit; }
.esf select.optional { background-color: white; font-weight: bold; border: 1px solid #7F9DB9; width: inherit; }
.esf select.error { background-color: #FFC0CB; font-weight: bold; border: 1px solid red; width: inherit; }
.esf textarea.required { background-color: #FFFFE7; font-weight: bold; border: 1px solid #7F9DB9; width: inherit; }
.esf textarea.optional { background-color: white; font-weight: bold; border: 1px solid #7F9DB9; width: inherit; }
.esf textarea.error { background-color: #FFC0CB; font-weight: bold; border: 1px solid red; width: inherit; }
/* Special override for optional checkboxes to not have a border around them */
.esf input[type="checkbox"].required { border: 0 none !important; outline-color: #FFFFE7; outline-style: solid; outline-width: medium; }
.esf input[type="checkbox"].optional { border: 0 none !important; }
.esf input[type="checkbox"].error { outline: 1px solid red; }
/* Special override for optional radio to not have a border around them */
.esf input[type="radio"].required { border: 0 none !important; outline-color: #FFFFE7; outline-style: solid; outline-width: medium; }
.esf input[type="radio"].optional { border: 0 none !important; }
.esf input[type="radio"].error { outline: 1px solid red; }
.esf input[type="radio"] { margin-bottom: 3px; } /* push it up a bit so fits with label better */

/* For buttons */
.esf p.buttons { margin-top: 2em; margin-left: 2em; }
.esf p.buttons input { margin-right: 2em; font-size: 1.1em; padding: 5px 10px; margin-top: 5px; }
.esf p.buttons input.caution { color: #FF8000; }
.esf p.buttons input.preferredFlow { font-weight: bold; color: green; font-size: 1.3em; padding: 8px 15px; }

.esf p.extraButtons { text-align: right; margin-top: -3em; }
.esf p.extraButtons input { color: blue; font-size: 0.6em; padding: 2px 3px; margin-right: 1em; }

.esf div.documentAndPageNumbersInfo { font-family: 'Courier New', Courier, monospace; font-size: 8pt; text-align: right; color: lightgray; }

/* For image overlays */
.esf div.imageOverlay { position: relative; display: inline-block; }
.esf div.imageOverlay img { margin: 0; padding: 0; }
.esf div.imageOverlay span.imageOverlayFieldArea { position: absolute; margin: 0; padding: 0; }
.esf div.imageOverlay span.imageOverlayFieldArea input[type="radio"] { margin: 0; padding: 0; }
.esf div.imageOverlay span.imageOverlayFieldArea input[type="checkbox"] { margin: 0; padding: 0; }

.esf input.small { font-size: 8pt; }
.esf input.upload { color: green; }

/* For file uploads of images displayed inline */
.esf img.fileUploadInlineImage200 { max-width: 200px; border: 2px solid black; page-break-inside: avoid; }
.esf img.fileUploadInlineImage400 { max-width: 400px; border: 2px solid black; page-break-inside: avoid; }
.esf img.fileUploadInlineImage600 { max-width: 800px; border: 2px solid black; page-break-inside: avoid; }
.esf img.fileUploadInlineImage800 { max-width: 800px; border: 2px solid black; page-break-inside: avoid; }

/* For standard display of ErrorEntry[] arrays from Errors */
.esf table.errorEntryArea { margin-left: 1em; border: 1px solid #FBD777; border-radius: 5px; background-color: #FDE8A5; width: 95%; padding-top: 2px; padding-bottom: 2px; }
.esf ul.errorEntryArea { padding-left: 20px; }
.esf li.error-ErrorEntry { list-style-type: circle; font-size: 1em; font-weight: bold; color: red; margin-left: 0px; margin-right: 1em; }
.esf li.warning-ErrorEntry { list-style-type: circle; font-size: 1em; font-weight: bold; color: blue; margin-left: 0px; margin-right: 1em; }
.esf li.success-ErrorEntry { list-style-type: circle; font-size: 1em; font-weight: bold; color: green; margin-left: 0px; margin-right: 1em; }
.esf li.info-ErrorEntry { list-style-type: circle; font-size: 1em; font-weight: bold; color: black; margin-left: 0px; margin-right: 1em; }

/* Used for multi-line reports to separate them like "greenbar paper" of old */
.esf .bgGreenbarLight { background-color: transparent; }
.esf .bgGreenbarDark { background-color: #E8E6E6; }

.esf span.jspfooter { font-size: 8pt; color: gray; }

.esf div.jspErrorPageMessage { margin-left: 1em; width: 700px; font-weight: bold; background-color: pink; border: 1px solid black; border-radius: 10px; padding: 0px 1em 0px 1em; } 

@media print { 
	body.esf { margin: 0; padding: 0; font-size: 80% !important; }
	.esf div.newPage { border-top: none; page-break-after: always; }
	.esf a.showURL:link:after, a.showURL:visited:after { content: " (" attr(href) ")"; font-size: 80%; }
	.esf .doNotPrint { display: none; }
}


/* Begin document style id: 9a000404-5f56-4a1c-ad4a-be6382c67d97, version id: 86f339d5-81e2-4117-95c2-8f747f5a6fe3 */
body.esf { font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 11pt;    } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 span.signature { font-family: Pacifico, cursive; font-size: 14pt; color: blue; font-style: normal; font-weight: normal; font-variant: normal; text-transform: inherit;  } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 span.signature input { font-family: Pacifico, cursive; font-size: 14pt; color: blue; font-style: normal; font-weight: normal; font-variant: normal; text-transform: inherit;  } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 span.viewFieldData {      } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 input[type='checkbox'].required { border: 0 none !important; outline-color: #FFFFE7; outline-style: solid; outline-width: medium; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 input[type='radio'].required { border: 0 none !important; outline-color: #FFFFE7; outline-style: solid; outline-width: medium; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 input.required {    font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: #FFFFE7; border: 1px solid #7F9DB9; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 select.required {    font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: #FFFFE7; border: 1px solid #7F9DB9; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 textarea.required {    font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: #FFFFE7; border: 1px solid #7F9DB9; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 input.optional {    font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: white; border: 1px solid #7F9DB9; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 select.optional {    font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: white; border: 1px solid #7F9DB9; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 textarea.optional {    font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: white; border: 1px solid #7F9DB9; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 input[type='checkbox'].error { border: 0 none !important; outline: 1px solid red; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 input[type='radio'].error { border: 0 none !important; outline: 1px solid red; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 input.error {    font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: #FFC0CB; border: 1px solid red; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 select.error {    font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: #FFC0CB; border: 1px solid red; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 textarea.error {    font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: #FFC0CB; border: 1px solid red; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 label.normal {      } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 label.normal-error {   color: red; font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: yellow; } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 label.small {  font-size: 8pt;    } 
.esf .X86f339d5_81e2_4117_95c2_8f747f5a6fe3 label.small-error {  font-size: 8pt; color: red; font-style: normal; font-weight: bold; font-variant: normal; text-transform: inherit; background-color: yellow; } 
/* End document style */
</style>
<script type="text/javascript">
(function() {
	// If not defined yet, ensure our top "JavaScript namespace" variable 'esf' is created.
	if ( typeof esf == "undefined" ) {
		esf = {
			version: {
				major: 19, minor: 1, update: '19',
				toString: function(){
					with(esf.version){
						return major + "." + minor + "." + update;
					}
				}
			},
			appname: 'Open eSignForms',
			htmlCopyright: '© 2019 Yozons, Inc.',
			textCopyright: 'Copyright (c) 2009-2019 Yozons, Inc.'
		};
		
		esf.getRelease = function() {
			return this.appname + " " + this.version.toString();
		};
		
		if ( typeof console != "undefined") console.log(esf.getRelease() + ' - ' + esf.textCopyright);
		
		esf.saveScrollPosition = function(elem) {
			var currLeft = window.pageXOffset || document.documentElement.scrollLeft;
			var currTop  = window.pageYOffset || document.documentElement.scrollTop;
			elem.form.ESF_PAGE_SCROLLLEFT.value = currLeft;  // form field name must match DocumentPageBean.HIDDEN_PAGE_SCROLLLEFT
			elem.form.ESF_PAGE_SCROLLTOP.value  = currTop;   // form field name must match DocumentPageBean.HIDDEN_PAGE_SCROLLTOP
		}
		
		esf.autoPost = function(inputField) {
			esf.confirmOnPageUnloadMessage = null; // do not block leaving page for autopost
			esf.hideAllSubmitInputFields();
			inputField.form.ESF_AUTO_POST_FIELD_ID.value = inputField.id; // form field name must match DocumentPageBean.HIDDEN_AUTO_POST_FIELD_ID
			esf.saveScrollPosition(inputField);
			inputField.form.submit();
		};
		
		esf.blockEnterKeyViaInputFields = function(e) {
			var evt = e || window.event; 
			var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
			if ((evt.keyCode == 13) && (node.type=="text")) { 
				return false; 
			} 			
		};
		
		esf.checkConfirmOnPageUnload = function(confirm,durationMsec) {
			if (! confirm) {
				window.onbeforeunload = null;
			}
			if ( durationMsec && durationMsec > 0 )
				esf.hideAllSubmitInputFieldsTemporarily(durationMsec);
			else
				esf.hideAllSubmitInputFields();
		};
		
		// For links, we don't hide buttons and we don't clear the unload unless requested AND the target is _top or _self (or no target set)
		esf.checkLinkConfirmOnPageUnload = function(confirm,atag) {
			if (! confirm && (atag.target == "_top" || atag.target == "_self" || atag.target == "") ) { 
				window.onbeforeunload = null;
			}
		};
		
		// Default is no message to display on page unload
		esf.confirmOnPageUnloadMessage = null;
		
		esf.confirmOnPageUnload = function(e) {
			e = e || window.event;
			
	        if ( esf.confirmOnPageUnloadMessage ) {
	        	if (e) {
	        		e.returnValue = esf.confirmOnPageUnloadMessage;
	        	} 
	            return esf.confirmOnPageUnloadMessage;
	        }
		};

		esf.hideAllSubmitInputFields = function() {
		  if ( document.getElementsByTagName ) {
		   	var inputFields = document.getElementsByTagName("input");
		   	for( var i=0; i < inputFields.length; ++i )	{
		   	  if ( inputFields[i].type == "submit" )
		   	      esf.makeInvisible(inputFields[i]);
		   	}
		   	var buttonFields = document.getElementsByTagName("button");
		   	for( var i=0; i < buttonFields.length; ++i ) {
		   		esf.makeInvisible(buttonFields[i]);
		   	}
		   	return true;
		  }
		};
		
		esf.showAllSubmitInputFields = function() {
		  if ( document.getElementsByTagName ) {
		    var inputFields = document.getElementsByTagName("input");
		   	for( var i=0; i < inputFields.length; ++i )	{
		   	  if ( inputFields[i].type == "submit" )
		   	      esf.makeVisible(inputFields[i]);
		   	}
		   	var buttonFields = document.getElementsByTagName("button");
		   	for( var i=0; i < buttonFields.length; ++i ) {
		   		esf.makeVisible(buttonFields[i]);
		   	}
		   	return true;
		  }
		};
			
		esf.hideAllSubmitInputFieldsTemporarily = function(durationMsec) {
			esf.hideAllSubmitInputFields();
			setTimeout( esf.showAllSubmitInputFields, durationMsec );
		};
				
		esf.displayById = function(id) {
			if ( document.getElementById && document.getElementById(id) )
				esf.display(document.getElementById(id));
		};
		
		esf.display = function(elem) {
			if ( elem && elem.style )
				elem.style.display = "block";
		};
		
		esf.hideById = function(id) {
			if ( document.getElementById && document.getElementById(id) )
				esf.hide(document.getElementById(id));
		};
		
		esf.hide = function(elem) {
			if ( elem && elem.style )
				elem.style.display = "none";
		};
		
		esf.makeVisibleById = function(id) {
			if ( document.getElementById && document.getElementById(id) )
				esf.makeVisible(document.getElementById(id));
		};
		
		esf.makeVisible = function(elem) {
		  if ( elem && elem.style )
		  	elem.style.visibility = 'visible';
		};
		
		esf.makeInvisibleById = function(id) {
			if ( document.getElementById && document.getElementById(id) )
				esf.makeInvisible(document.getElementById(id));
		};
		
		esf.makeInvisible = function(elem) {
		  if ( elem && elem.style )
		  	elem.style.visibility = 'hidden';
		};
		
		esf.makeTemporarilyInvisible = function(elem, durationMsec) {
			esf.makeInvisible(elem);
		    setTimeout( function(){esf.makeVisible(elem);}, durationMsec );
		};
			
		esf.ensureTopWindow = function() {
		  if (window != window.top)
			top.location.href = location.href;
		};
		
		esf.getElementsByFieldName = function(fieldName) {
		  if ( document.getElementsByName ) {
		   	return document.getElementsByName(fieldName.toLowerCase()); // Field names are all lowercase in the HTML DOM
		  }
		  return []; // not really an empty node list, but an empty array so it has a 'length' property to query before accessing
		};
			
		esf.getElementByFieldName = function(fieldName) {
		  var elemNL = esf.getElementsByFieldName(fieldName);
		  return elemNL.length > 0 ? elemNL[0] : null;
		};
		
		esf.setAllCheckboxesByName = function(name,b) {
		  var checkboxes = esf.getElementsByFieldName(name);
		  for( var i=0; i < checkboxes.length; ++i ) {
		   	  if ( checkboxes[i].type == "checkbox" )
		   	      checkboxes[i].checked = b;
		  }
		};
		esf.checkAllCheckboxesByName = function(name) {
		    esf.setAllCheckboxesByName(name,true);
		};
		esf.uncheckAllCheckboxesByName = function(name) {
		    esf.setAllCheckboxesByName(name,false);
		};
		
		/* Expects two radiobuttons to be laid out as [] Yes  [] No order -- can also be stacked as long as Yes is first */
		esf.setupDisplayIfYesNoRadioButtonGroupIsYes = function(yesNoRadioButtonGroupName,elemIdToShowIfYes,currentRadioButtonGroupFieldValue) {
		  var rbYesNoElems = document.getElementsByName(yesNoRadioButtonGroupName.toLowerCase());
		  if ( rbYesNoElems && rbYesNoElems.length == 2 ) { /* radio buttons will only exist in EDIT mode */
			  rbYesNoElems[0].onclick = function() { esf.displayById(elemIdToShowIfYes); }; /* yes rb */
			  rbYesNoElems[1].onclick = function() { esf.hideById(elemIdToShowIfYes); }; /* no rb */
		  }
		  var lowerValue = currentRadioButtonGroupFieldValue.toLowerCase();
		  if ( lowerValue.startsWith('y') || lowerValue.startsWith('t') || lowerValue == '1' )
		      esf.displayById(elemIdToShowIfYes);
		  else
		      esf.hideById(elemIdToShowIfYes);
		};

		/* Expects two radiobuttons to be laid out as [] Yes  [] No order -- can also be stacked as long as Yes is first */
		esf.setupDisplayIfYesNoRadioButtonGroupIsNo = function(yesNoRadioButtonGroupName,elemIdToShowIfNo,currentRadioButtonGroupFieldValue) {
	      var rbYesNoElems = document.getElementsByName(yesNoRadioButtonGroupName.toLowerCase());
		  if ( rbYesNoElems && rbYesNoElems.length == 2 ) { /* radio buttons will only exist in EDIT mode */
			  rbYesNoElems[0].onclick = function() { esf.hideById(elemIdToShowIfNo); }; /* yes rb */
			  rbYesNoElems[1].onclick = function() { esf.displayById(elemIdToShowIfNo); }; /* no rb */
		  }
		  var lowerValue = currentRadioButtonGroupFieldValue.toLowerCase();
		  if ( lowerValue.startsWith('n') || lowerValue.startsWith('f') || lowerValue == '0' )
			  esf.displayById(elemIdToShowIfNo);
		  else
			  esf.hideById(elemIdToShowIfNo);
	    };
			
		esf.setupDisplayIfChecked = function(checkboxName,elemIdToShowIfChecked,currentCheckboxFieldValue,checkboxValueWhenChecked) {
		  var cbElems = document.getElementsByName(checkboxName.toLowerCase());
		  if ( cbElems && cbElems.length == 1 ) { /* checkboxes will only exist in EDIT mode */
			  cbElems[0].onchange = function() { 
				  if ( this.checked ) 
					  esf.displayById(elemIdToShowIfChecked); 
				  else 
					  esf.hideById(elemIdToShowIfChecked); 
			  };
		  }
		  if ( currentCheckboxFieldValue == checkboxValueWhenChecked )
		      esf.displayById(elemIdToShowIfChecked);
		  else
		      esf.hideById(elemIdToShowIfChecked);
		};

		
		esf.containsSpace = function(s) {
			if ( s == null )
				return false;
			i = 0;
			while( i < s.length ) {
				if ( s.charAt(i) == ' ' )
					return true;
				++i;
			}
		
			return false;
		};
		
		esf.isOnlyNumbers = function(s) {
			if ( s == null )
				return false;
			var i = 0;
			while( i < s.length ) {
				if ( "0123456789".indexOf(s.charAt(i)) < 0 )
					return false;
				i++;
			}
			return true;
		};
		
		// Trims whitespace from the front and end of a string
		esf.trimSpace = function(s) {
			if ( s == null || s.length == 0 )
				return s;
		
			var beginIndex = 0;
			var endIndex   = s.length - 1;
			while( beginIndex < s.length && s.charAt(beginIndex) == ' ' )
				++beginIndex;
			while( endIndex >= 0 && s.charAt(endIndex) == ' ' )
				--endIndex;	
			++endIndex;
			
			if ( beginIndex >= endIndex )
				return '';
				
			return s.substring(beginIndex,endIndex);
		};
		
		// Opens a window -- for a given name, width and height
		esf.showWindow = function(url,name,width,height) {
			var win = window.open(url,name,'width='+width+',height='+height+',scrollbars=yes,resizable=yes');
			win.focus();
			return false;
		};

	}
})();

/* Workaround for IE, the only browser in the world that doesn't support standard JavaScript String.startsWith() */
if ( ! String.prototype.startsWith ) {
	String.prototype.startsWith = function(searchString, position) {
		position = position || 0;
		return this.indexOf(searchString, position) === position;
	};
}


</script>
</head>
<body class="esf">
<div id="X4abac535_d043_4389_9a56_4992de07cf65" class="X86f339d5_81e2_4117_95c2_8f747f5a6fe3 pagediv">



<div id="X080bfdf0_ba45_4efb_a996_2e7355d2b075" class="Page1">

<style type="text/css">
body { background-color: #FFFFFF; font-family: Arial, Veranda, Times New Roman, sans-serif; margin: 0px 10px 0px 10px; font-size: 10pt; }
		table { background-color: #FFFFFF; font-family: Arial, Veranda, Times New Roman, sans-serif; font-size: 10pt; }
 		table.button { background-color: transparent; width: 50%; margin: 20px 25% 20px 25%; }
		table.button td { border: none; }

		table.w4 td { padding: 0 5px 0 5px; }
		p.w4 { padding: 0 5px 0 5px; }
		ul.w4 { margin-top: 3px; margin-bottom: 3px; }
		ul.w4 li { margin-top: 3px; margin-bottom: 3px; }
		td.boBdashed { border-bottom: 1px dotted; }
		div.newPage { border-bottom: 1px solid #A040A0; }	

		.data { font-weight: bold; }
		.w4textTitle { font-size: 21pt; font-family: Helvetica; font-weight: bold; }
		.w4title { font-size: 12pt; font-weight: bold; }
		.w4titlepara{ font-size: 8pt; font-weight: bold; white-space: nowrap; }
		.w4smallText { font-size: 8pt; }
		.w4midText { font-size: 9pt; }
		.w4indent{ margin-left: 10px; }
		.w4indent2{ margin-left: 20px; }		
		.w4bgcolor { background-color: #BCBDC0; }	
		span.year { font-size: 28pt; font-weight: bold; }   	
		
		@media print
		{	
		    body { font-size: 8pt; }
	   	    table { font-size: 8pt; }	
	   	    p {  font-size: 8pt; }
	   		div.newPage { border-bottom: none; page-break-after: auto; margin-top: 5em; }
		}</style>
<table border="0" cellpadding="0" cellspacing="0" class="w100 w4">
    <tbody>
        <tr>
            <td class="w15 boR boB top nowrap bottom"><span class="w4smallText">Form</span>    <span class="w4textTitle">W-4</span>
            <p><span class="w4smallText">Department of the Treasury</span><br />
            <span class="w4smallText">Internal Revenue Service</span></p>
            </td>
            <td align="center" class="w70 boR boB bottom">
            <p class="nowrap w4title"><b>Employee&#39;s Withholding Allowance Certificate</b></p>

            <p class="w4titlepara">Whether you are entitled to claim a certain number of allowances or exemption from withholding is<br />
            subject to review by the IRS. Your employer may be required to send a copy of this form to the IRS.</p>
            </td>
            <td align="center" class="w15 top boB nowrap"><span class="w4smallText">OMB No. 1545-0074</span><br />
            <span style="font-size: 37px; font-weight: bold; text-align: -webkit-center; white-space: nowrap;">2018</span></td>
        </tr>
    </tbody>
</table>

<table border="0" cellpadding="0" cellspacing="0" class="w100 w4">
    <tbody>
        <tr>
            <td class="w30 nowrap boR boB"><span class="w4smallText"><b>1</b> <span class="w4indent">Your first name and middle initial</span></span><br />
            <span class="w4indent2"><span class="viewFieldData fieldAreaAuto " style="width: auto;">Test</span> <span class="viewFieldData fieldAreaAuto " style="width: auto;"> </span></span></td>
            <td class="w40 nowrap boR boB"><span class="w4smallText">Last name</span><br />
            <span class="viewFieldData fieldArea " style="width: 100%;">Last</span></td>
            <td class="w30 nowrap boB"><span class="w4smallText bold">2 <span class="w4indent">Your social security number</span></span><br />
            <span class="viewFieldData fieldArea " style="width: 95%;">XXX-XX-6789</span></td>
        </tr>
    </tbody>
</table>

<table border="0" cellpadding="0" cellspacing="0" class="w100 w4">
    <tbody>
        <tr>
            <td class="w50 nowrap boR boB"><span class="w4indent2 w4smallText">Home address (number and street or rural route)</span><br />
            <span class="w4indent2"><span class="viewFieldData fieldArea " style="width: 95%;">123 Main St.</span></span></td>
            <td class="w50 nowrap boB w4smallText"><b>3</b> <span class="labelFieldArea bottom" ><span class="bottom fieldAreaAuto viewFieldData " style="width: auto;"><img src="./static/esf/radioSelect.png" style="padding-bottom: 2px;" alt="Selected" title="Selected"/></span><span class="labelArea"><label class="normal"> Single</label></span></span> <span class="labelFieldArea bottom" ><span class="bottom fieldAreaAuto viewFieldData " style="width: auto;"><img src="./static/esf/radioUnselect.png" style="padding-bottom: 2px;" alt="NOT selected" title="NOT selected"/></span><span class="labelArea"><label class="normal"> Married</label></span></span> <span class="labelFieldArea bottom" ><span class="bottom fieldAreaAuto viewFieldData " style="width: auto;"><img src="./static/esf/radioUnselect.png" style="padding-bottom: 2px;" alt="NOT selected" title="NOT selected"/></span><span class="labelArea"><label class="normal"> Married, but withhold at higher Single rate</label></span></span>.<br />
            <b>Note.</b> If married, but legally separated, or spouse is a nonresident alien, check the "Single" box.</td>
        </tr>
        <tr>
            <td class="w40 nowrap boR boB"><span class="w4indent2 w4smallText">City or town, state, and ZIP code</span><br />
            <span class="w4indent2"><span class="viewFieldData fieldAreaAuto " style="width: auto;">Kirkland</span>, <span class="viewFieldData fieldAreaAuto " style="width: auto;">WA</span> <span class="viewFieldData fieldAreaAuto " style="width: auto;">98033</span></span></td>
            <td class="w60 nowrap boB w4smallText"><b>4</b> <span class="w4indent bold">If your last name differs from that shown on your social security card,</span><br />
            <span class="w4indent2 bold">check here. You must call 1-800-772-1213 for a replacement card.  <span class="viewFieldData fieldAreaAuto " style="width: auto;"><img src="./static/esf/uncheck.png" style="padding-bottom: 2px;" alt="NOT checked" title="NOT checked"/></span></span></td>
        </tr>
    </tbody>
</table>

<table border="0" cellpadding="0" cellspacing="0" class="w100 w4">
    <tbody>
        <tr>
            <td class="w90 nowrap" colspan="2"><span class="bold w4smallText">5</span> <span class="w4indent2"><label class="normal">Total number of allowances you are claiming</label> (from line <b>H</b> above <b>or</b> from the <a href="http://www.irs.gov/pub/irs-pdf/fw4.pdf" target="_blank">applicable worksheet on page 2</a>)</span></td>
            <td class="nowrap boL boR boB bold">5</td>
            <td class="w10 nowrap boB"><span class="viewFieldData fieldAreaAuto " style="width: auto;">0</span></td>
        </tr>
        <tr>
            <td colspan="2">
            <table class="w100" style="margin-left: -7px; ">
                <tbody>
                    <tr>
                        <td class="nowrap"><span class="bold w4smallText">6</span> <span class="w4indent2">Additional amount, if any, you want withheld from each paycheck</span></td>
                        <td class="w90 boBdashed"> </td>
                    </tr>
                </tbody>
            </table>
            </td>
            <td class="boL boR boB bold">6</td>
            <td class="w10 nowrap boB"><span class="viewFieldData fieldAreaAuto " style="width: auto;"> </span></td>
        </tr>
        <tr>
            <td class="nowrap" colspan="3"><span class="bold w4smallText">7</span> <span class="w4indent2">I claim exemption from withholding</span> for 2018, and I certify that I meet <b>both</b> of the following conditions for exemption.
            <ul class="w4">
                <li>Last year I had a right to a refund of <b>all</b> federal income tax withheld because I had <b>no</b> tax liability, <b>and</b></li>
                <li>This year I expect a refund of <b>all</b> federal income tax withheld because I expect to have <b>no</b> tax liability.</li>
            </ul>
            </td>
            <td class="w4bgcolor boL"> </td>
        </tr>
    </tbody>
</table>

<table border="0" cellpadding="0" cellspacing="0" class="w100 w4" style="margin-bottom: 3px;">
    <tbody>
        <tr>
            <td class="nowrap"><span class="w4indent2"><span class="normalLabel">If you meet both conditions, write "Exempt" here</span></span></td>
            <td class="w50 boBdashed"> </td>
            <td class="boT boR boB boL bold nowrap">7    </td>
            <td class="w30 boT boB"><span class="viewFieldData fieldArea " style="width: 100%;"> </span></td>
        </tr>
    </tbody>
</table>

<p class="w4midText nomargin boT">Under penalties of perjury, I declare that I have examined this certificate and, to the best of my knowledge and belief, it is true, correct, and complete.</p>

<table border="0" cellpadding="0" cellspacing="0" class="w100 w4" style="margin-top: .5em; ">
    <tbody>
        <tr>
            <td class="nowrap"><b><label class="normal">Employee&#039;s signature</label></b><br />
            <span class="nowrap w4smallText">(This form is not valid unless you sign it.)</span></td>
            <td class="w75 bottom" style="min-width: 30ex;"><span class="viewFieldData fieldArea signature " style="width: 100%;">Test signature</span></td>
            <td class="w25 bottom"><b><label class="normal">Date </label></b><span class="viewFieldData fieldArea signature " style="width: 98%;">16-Feb-2019</span></td>
        </tr>
    </tbody>
</table>

<table border="0" cellpadding="0" cellspacing="0" class="w100 w4">
    <tbody>
        <tr style="height: 2em;">
            <td class="nowrap boT boR boB top"><span class="w4smallText"><b>8</b><span class="w4indent">Employer&#39;s name and address (Employer: Complete lines 8 and 10 only if sending to the IRS.)</span></span><br />
              <span class="w4indent">Demo Company, LLC, 123 Main St., Anytown, WA 12345-1234</span></td>
            <td class="nowrap boT boR boB top"><span class="w4smallText"><b>9</b><span class="w4indent">Office code (optional)</span></span></td>
            <td class="nowrap boT boB top"><span class="w4smallText"><b>10</b><span class="w4indent">Employer identification number (EIN)</span></span><br />
               91-1234567</td>
        </tr>
    </tbody>
</table>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td class="w4smallText nowrap" width="60%"><b>For Privacy Act and Paperwork Reduction Act Notice, <a href="http://www.irs.gov/pub/irs-pdf/fw4.pdf" target="_blank">see page 2</a>.</b></td>
            <td align="center" class="w4smallText" width="20%">Cat. No. 10220Q</td>
            <td align="right" width="20%"><span class="w4smallText">Form </span><span class="normalText"><b>W-4</b></span> <span class="w4smallText">(2018)</span></td>
        </tr>
    </tbody>
</table>

</div>
<div> </div><div class="signatureBlock signatureMetadata"><p class="signatureHeader">Electronic Signature Process Record</p><p>The document above has been electronically signed in accordance with the law.</p><p><span title="The document above, uniquely identified by this YUID, has been electronically signed in accordance with the law.">YUID: <b>ccc1bb24-7f1d-43f6-99c2-4ef352001191-4abac535-d043-4389-9a56-4992de07cf65</b></span></p><p>Signing party: Employee<br />   Signer ID: a7291bc3-bc0e-4544-8d47-5426a05183bb<br />   IP Address: 50-46-118-196.evrt.wa.frontiernet.net (50.46.118.196)<br />   Timestamp: 2019-02-16 12:40:39 PST (2019-02-16 20:40:39.290Z)<br />   Email: email@example.com<br />   User: Example <email@example.com> (8e2d38ce-7457-406f-9fb0-c174d2bc997d)</p></div>


</div>
</body>
</html>
]]>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="OpenESignForms_Seal">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2006/12/xml-c14n11#WithComments"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"/>
        <ds:Reference Id="Payload_Reference_ID" URI="">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>F8mgu0S9tyosrWPJ2yQlPwNwZb8p2SO+C0LN8M3bcqT3cbhZGFKyfa7OLug7ORh4iif8pGEx27Or&#13;
XFdBhoBt9g==</ds:DigestValue>
        </ds:Reference>
        <ds:Reference URI="#KeyInfo_ID">
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>HnULuiA4yy72qDreCaGQXm1QZtXu8rOd4OaHZ9raXfqexEuCq1qJ0DOewHsCxQCx9kyWkB1IHCc8&#13;
m7/DAPcXbg==</ds:DigestValue>
        </ds:Reference>
        <ds:Reference URI="#QualifyingProperties_ID">
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>v7ljecvM5AEIgoUoYpBqBt6UZjhFxolIN2Qpbt5/r17822tpITwiT81ONM/tx4u+/eSIiS/vsMKt&#13;
hA9ICyPrJg==</ds:DigestValue>
        </ds:Reference>
        <ds:Reference URI="#OpenESignForms_Seal_ID">
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>EEWzubdiWHJkKuotkoHfYYY+pgazuedJi3/1+Ir6D0bn0mKIBn9lWg8DaPY3b6m86xVevgHQNZQj&#13;
wylwUG68Hg==</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>YvsJhtoCLEkyHYQDl6mNwnL7qOJuL7SzahVOdaEnHnZvkpHIxRC7xqqlehEKtN46f4+TH5+o8n56&#13;
f7WmBcx79cQc6Ihhl1OnwTmttLBhUWx/qSm8PCQ4bC7Pl3Pabb+9QXDCV2ph7h3aJgh2BdU3r+Ib&#13;
WSqPC/VZB3Kmd4MxPpo1BBuAkMG/BWpCsHsp3EHMYfrDWh14aZicTEXn8zQ6fZrB/3/fU6Uh3hpn&#13;
OMHzdfot9qmR4KIQ5KbumlfBRWKS44lmJLQR55LcMZI/WyWDsn3vcsITOjLYeHtj3th8cwpDauvm&#13;
oXzKoRr5XZw4dSu6/bI262pKgCGs2dFPAnDBtQIyoaT5DFrrcztUY6YVWcx9PsrRz0qo0BQGBVTu&#13;
5bYdaD8ftgMJEfLTya/XrDab+Z+6ICU6AeAmxAkBeXhCn9/f++/nh8vxHp3QLlPaM4Elkisen1e/&#13;
vCV1U/6vdnbikrdbAVlTmgTVu2UmcsMO0BiuNuhA4ch6uI0X48MMWX3OCNNSSHls5EZGAxBFTWOR&#13;
dY7XS8w20Yc8F0LGMIPBvq11AWpQPVWzMEUcU5nGxP9sv//2piQLV3bexMUO2EgBjDYkd5LKZOqz&#13;
OGask92kiPG6RSnS8bufYJrP/TB+8NAugQcxSOUoVQAhp4WFSCXxiR6iAD168A3o5ZPbHDuu4EQ=</ds:SignatureValue>
    <ds:KeyInfo Id="KeyInfo_ID">
        <ds:KeyName>021eddcd-ebd0-4603-8b26-24b3f7fee682</ds:KeyName>
        <ds:KeyValue>
            <ds:RSAKeyValue>
                <ds:Modulus>iSEKAXeyDOq1RKCwypjN5iuU2uR//YM4ssMBGBCtfpq7eF6pXm0rU5Zz4LnmoptUyu4IcnrStgRr&#13;
JP3NPOeHgibR8i/Ef9frzd4rCwX2JpY3tztCGYByzk93ln7tzRYnMug9q0IVk6Far7JxBIuMy/eg&#13;
LOyptCZGnRU8wV6D+gydsdoFsaR+zghMtBmoZ8sArGd81rzq28B3NDdqrd4camU7viI+5mMTRGJn&#13;
UtBzU/4p7kxv2gePzUc2vJ76+8I1eUGbqc7Co12q8vS+wGpQ4a0lUiWJwj7BRXR21oPz+Qo5fiqb&#13;
a/mSo0gv11s3T2oHTTzWSyvTPb2wbwyBSFAVVaoqJ0g01UEjU2Lv2RkTi/YZpyyPPUDh4OA1KMfX&#13;
f3M7wxzS0+tJFfE4O4ELsaYlcRElVIor1y98LPKmqWgTg0olfU8H00igjbJdU37SzyqygqNadZlC&#13;
ocTtaMvveNIkDURAPPZS/Llp1KUm4YY29m+Of0JK0ZoEBLIj5R0uEIpOBe0MWhH4d8l5mxn8IKpR&#13;
chGgxgJ4P7bNpPQmPUH2rpFukV0NIPe946X7oJE/NubjePyQxpQwwE6zzavz0rf9s4OQpW7tdG/+&#13;
fyubGHXq4H/DH4ZZt0KBuIhLfqjEd3mgyzp4waihnkn4bhcRFm8s5UJEuszp6BkD0EHcPfN76Uk=</ds:Modulus>
                <ds:Exponent>AQAB</ds:Exponent>
            </ds:RSAKeyValue>
        </ds:KeyValue>
        <ds:X509Data>
            <ds:X509Certificate>MIIKkDCCCHigAwIBAgIIXjPAnc0XFeIwDQYJKoZIhvcNAQENBQAwgcIxOTA3BgNVBAMMME9wZW5f&#13;
ZVNpZ25Gb3Jtc19odHRwczovL29wZW4uZXNpZ25mb3Jtcy5jb20vZGVtbzE6MDgGA1UECgwxRGVw&#13;
bG95bWVudElEL2JiZmU5YmVkLTkxOGQtNDQ2Yi05NTE4LThlYzMwM2JhZmI4MzE8MDoGA1UECwwz&#13;
U2lnbmF0dXJlS2V5SUQvMDIxZWRkY2QtZWJkMC00NjAzLThiMjYtMjRiM2Y3ZmVlNjgyMQswCQYD&#13;
VQQGEwJVUzAeFw0xMTA0MTYwMzIxMzhaFw0yMTA0MTYwMzIxMzhaMIHCMTkwNwYDVQQDDDBPcGVu&#13;
X2VTaWduRm9ybXNfaHR0cHM6Ly9vcGVuLmVzaWduZm9ybXMuY29tL2RlbW8xOjA4BgNVBAoMMURl&#13;
cGxveW1lbnRJRC9iYmZlOWJlZC05MThkLTQ0NmItOTUxOC04ZWMzMDNiYWZiODMxPDA6BgNVBAsM&#13;
M1NpZ25hdHVyZUtleUlELzAyMWVkZGNkLWViZDAtNDYwMy04YjI2LTI0YjNmN2ZlZTY4MjELMAkG&#13;
A1UEBhMCVVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCJIQoBd7IM6rVEoLDKmM3m&#13;
K5Ta5H/9gziywwEYEK1+mrt4XqlebStTlnPgueaim1TK7ghyetK2BGsk/c0854eCJtHyL8R/1+vN&#13;
3isLBfYmlje3O0IZgHLOT3eWfu3NFicy6D2rQhWToVqvsnEEi4zL96As7Km0JkadFTzBXoP6DJ2x&#13;
2gWxpH7OCEy0GahnywCsZ3zWvOrbwHc0N2qt3hxqZTu+Ij7mYxNEYmdS0HNT/inuTG/aB4/NRza8&#13;
nvr7wjV5QZupzsKjXary9L7AalDhrSVSJYnCPsFFdHbWg/P5Cjl+Kptr+ZKjSC/XWzdPagdNPNZL&#13;
K9M9vbBvDIFIUBVVqionSDTVQSNTYu/ZGROL9hmnLI89QOHg4DUox9d/czvDHNLT60kV8Tg7gQux&#13;
piVxESVUiivXL3ws8qapaBODSiV9TwfTSKCNsl1TftLPKrKCo1p1mUKhxO1oy+940iQNREA89lL8&#13;
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&#13;
9zGxY4cvR4vn4VtWcebg9AVMJCwhV85c7l0P0uU=</ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
    <ds:Object>
        <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.4.1#" Id="QualifyingProperties_ID" Target="#OpenESignForms_Seal">
            <xades:SignedProperties>
                <xades:SignedSignatureProperties>
                    <xades:SigningTime>2019-02-16T12:40:45-08:00</xades:SigningTime>
                </xades:SignedSignatureProperties>
                <xades:SignedDataObjectProperties>
                    <xades:DataObjectFormat ObjectReference="#Payload_Reference_ID">
                        <xades:Description>W-4.html</xades:Description>
                        <xades:MimeType>text/html</xades:MimeType>
                    </xades:DataObjectFormat>
                </xades:SignedDataObjectProperties>
            </xades:SignedProperties>
        </xades:QualifyingProperties>
    </ds:Object>
    <ds:Object>
        <ds:SignatureProperties>
            <ds:SignatureProperty Id="OpenESignForms_Seal_ID" Target="#OpenESignForms_Seal">
                <OpenESignForms_XmlDigitalSignatureSeal DeploymentHostAddress="104.239.136.116" DeploymentHostName="open.esignforms.com" DeploymentId="bbfe9bed-918d-446b-9518-8ec303bafb83" SignerAddress="50-46-118-196.evrt.wa.frontiernet.net (50.46.118.196)" SignerAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15" Timestamp="2019-02-16T12:40:45-08:00" Version="19.1.19_p0215_1750"/>
            </ds:SignatureProperty>
        </ds:SignatureProperties>
    </ds:Object>
</ds:Signature>
</snapshot>
<snapshot xmlns="http://open.esignforms.com/XMLSchema/2019" timestamp="2019-02-16T12:40:45-08:00" type="data">
    <esfRecord xmlns="http://open.esignforms.com/XMLSchema/2009">
        <id>3223afb5-bd03-4b8a-84c4-62452edf2ec6</id>
        <esfname>W4</esfname>
        <encrypt>true</encrypt>
        <compress>true</compress>
        <nameValues count="18">
         <nameValue clone="false">
          <name>signature_IPOnly</name>
          <value>50.46.118.196</value>
         </nameValue>
         <nameValue>
          <name>firstName</name>
          <value>Test</value>
         </nameValue>
         <nameValue>
          <name>city</name>
          <value>Kirkland</value>
         </nameValue>
         <nameValue clone="false">
          <name>signature</name>
          <value>Test signature</value>
         </nameValue>
         <nameValue clone="false" type="datetime">
          <name>signature_Timestamp</name>
          <value>2019-02-16T20:40:45Z</value>
         </nameValue>
         <nameValue>
          <name>rbMaritalStatus</name>
          <value>Single</value>
         </nameValue>
         <nameValue clone="false" type="date">
          <name>signatureDate</name>
          <value>2019-02-16</value>
         </nameValue>
         <nameValue>
          <name>cbLastNameDiffer</name>
          <value/>
         </nameValue>
         <nameValue>
          <name>middleName</name>
          <value/>
         </nameValue>
         <nameValue type="money">
          <name>additionalAmount</name>
          <value null="true"/>
         </nameValue>
         <nameValue>
          <name>lastName</name>
          <value>Last</value>
         </nameValue>
         <nameValue>
          <name>ssn</name>
          <value>123456789</value>
         </nameValue>
         <nameValue>
          <name>zipCode</name>
          <value>98033</value>
         </nameValue>
         <nameValue>
          <name>streetAddress</name>
          <value>123 Main St.</value>
         </nameValue>
         <nameValue>
          <name>exempt</name>
          <value/>
         </nameValue>
         <nameValue>
          <name>state</name>
          <value>WA</value>
         </nameValue>
         <nameValue type="integer">
          <name>numAllowances</name>
          <value>0</value>
         </nameValue>
         <nameValue clone="false">
          <name>signature_IP</name>
          <value>50-46-118-196.evrt.wa.frontiernet.net (50.46.118.196)</value>
         </nameValue>
        </nameValues>
    </esfRecord>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="OpenESignForms_Seal">
    <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2006/12/xml-c14n11#WithComments"/>
        <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"/>
        <ds:Reference Id="Payload_Reference_ID" URI="">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>7Do65Ffl6kW/TIFOAp1S8e9ZFUestgPmyVppeCMuqky3nU4YhhRCPA/NSXfom5sPLM+7x3MFhVnW&#13;
amd426jynw==</ds:DigestValue>
        </ds:Reference>
        <ds:Reference URI="#KeyInfo_ID">
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>HnULuiA4yy72qDreCaGQXm1QZtXu8rOd4OaHZ9raXfqexEuCq1qJ0DOewHsCxQCx9kyWkB1IHCc8&#13;
m7/DAPcXbg==</ds:DigestValue>
        </ds:Reference>
        <ds:Reference URI="#QualifyingProperties_ID">
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>YJ9B8y8c0mzLZYRUsAywTXnVgPPTCsVkjo4RYuOK9wvcAFCIEbyg+JDX672bzcNAmRl9Eowwe4Rd&#13;
VkZODsVoRQ==</ds:DigestValue>
        </ds:Reference>
        <ds:Reference URI="#OpenESignForms_Seal_ID">
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>EEWzubdiWHJkKuotkoHfYYY+pgazuedJi3/1+Ir6D0bn0mKIBn9lWg8DaPY3b6m86xVevgHQNZQj&#13;
wylwUG68Hg==</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>Usqn96PqLVA41nzk+pd2HXizm0RF9dwpI3GZ89pZTG7jvvJcBBNl/TtJ8qhgOSqZ5sSQ+m8bgDXq&#13;
bDfmwtCtbJ6QqlEPC69alMhI5J2AyUYqZ17B2P7ZYpalFdcelxQ2qaGm92FAm7SW30UIRY6GkB3v&#13;
w9ev8MdRgJbuJVNdRZJw1PDM7EmbxD371tkAo40s0H5RTKC2vTlscG4goZfM1EJxKCl12l4RjHPV&#13;
lnQpu2+9MJ268EMyi9oJNxeG91hqx4Ng4U02/jtdMxQLmeEzIAC7XD0x79NSPP7rqWcwKcs9bQWt&#13;
2XiVIL+gFduncD3PXXvyBBI3neHk3Vm5djpBURVChT1jz6LowqGFkS8QNDpCifwwKWfErlH+7nZf&#13;
58e2nNOYmYiZxiIPArOfUFCcxZh9AaNvIAIcNb1t2cwL/fkPUuH/y5yKbvK/nHMGVI2zjenwmxgH&#13;
q7oSq2gNrnf+7gVg8PC2RQKt0SNVlJqfQ7nsyOCDQD1ouno0+YXrIk9B3HWT70XYF5nIgaoNUOk4&#13;
GKBCepV6rLenzXEOF52oWw8FDBEToNCBhN5TGYRLmbpdXACB/JmmGom1z6MIMbeQg7NxEHZOUVVm&#13;
1JCIb7SSZAgb0s0yRKe69pP9VD3/DwXF3QtYabechDjkeNqHyASrDk9BHFqfFpBCTEiaAvfzZSU=</ds:SignatureValue>
    <ds:KeyInfo Id="KeyInfo_ID">
        <ds:KeyName>021eddcd-ebd0-4603-8b26-24b3f7fee682</ds:KeyName>
        <ds:KeyValue><ds:RSAKeyValue>
            <ds:Modulus>iSEKAXeyDOq1RKCwypjN5iuU2uR//YM4ssMBGBCtfpq7eF6pXm0rU5Zz4LnmoptUyu4IcnrStgRr&#13;
JP3NPOeHgibR8i/Ef9frzd4rCwX2JpY3tztCGYByzk93ln7tzRYnMug9q0IVk6Far7JxBIuMy/eg&#13;
LOyptCZGnRU8wV6D+gydsdoFsaR+zghMtBmoZ8sArGd81rzq28B3NDdqrd4camU7viI+5mMTRGJn&#13;
UtBzU/4p7kxv2gePzUc2vJ76+8I1eUGbqc7Co12q8vS+wGpQ4a0lUiWJwj7BRXR21oPz+Qo5fiqb&#13;
a/mSo0gv11s3T2oHTTzWSyvTPb2wbwyBSFAVVaoqJ0g01UEjU2Lv2RkTi/YZpyyPPUDh4OA1KMfX&#13;
f3M7wxzS0+tJFfE4O4ELsaYlcRElVIor1y98LPKmqWgTg0olfU8H00igjbJdU37SzyqygqNadZlC&#13;
ocTtaMvveNIkDURAPPZS/Llp1KUm4YY29m+Of0JK0ZoEBLIj5R0uEIpOBe0MWhH4d8l5mxn8IKpR&#13;
chGgxgJ4P7bNpPQmPUH2rpFukV0NIPe946X7oJE/NubjePyQxpQwwE6zzavz0rf9s4OQpW7tdG/+&#13;
fyubGHXq4H/DH4ZZt0KBuIhLfqjEd3mgyzp4waihnkn4bhcRFm8s5UJEuszp6BkD0EHcPfN76Uk=</ds:Modulus>
            <ds:Exponent>AQAB</ds:Exponent>
        </ds:RSAKeyValue>
        </ds:KeyValue>
        <ds:X509Data>            <ds:X509Certificate>MIIKkDCCCHigAwIBAgIIXjPAnc0XFeIwDQYJKoZIhvcNAQENBQAwgcIxOTA3BgNVBAMMME9wZW5f&#13;
ZVNpZ25Gb3Jtc19odHRwczovL29wZW4uZXNpZ25mb3Jtcy5jb20vZGVtbzE6MDgGA1UECgwxRGVw&#13;
bG95bWVudElEL2JiZmU5YmVkLTkxOGQtNDQ2Yi05NTE4LThlYzMwM2JhZmI4MzE8MDoGA1UECwwz&#13;
U2lnbmF0dXJlS2V5SUQvMDIxZWRkY2QtZWJkMC00NjAzLThiMjYtMjRiM2Y3ZmVlNjgyMQswCQYD&#13;
VQQGEwJVUzAeFw0xMTA0MTYwMzIxMzhaFw0yMTA0MTYwMzIxMzhaMIHCMTkwNwYDVQQDDDBPcGVu&#13;
X2VTaWduRm9ybXNfaHR0cHM6Ly9vcGVuLmVzaWduZm9ybXMuY29tL2RlbW8xOjA4BgNVBAoMMURl&#13;
cGxveW1lbnRJRC9iYmZlOWJlZC05MThkLTQ0NmItOTUxOC04ZWMzMDNiYWZiODMxPDA6BgNVBAsM&#13;
M1NpZ25hdHVyZUtleUlELzAyMWVkZGNkLWViZDAtNDYwMy04YjI2LTI0YjNmN2ZlZTY4MjELMAkG&#13;
A1UEBhMCVVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCJIQoBd7IM6rVEoLDKmM3m&#13;
K5Ta5H/9gziywwEYEK1+mrt4XqlebStTlnPgueaim1TK7ghyetK2BGsk/c0854eCJtHyL8R/1+vN&#13;
3isLBfYmlje3O0IZgHLOT3eWfu3NFicy6D2rQhWToVqvsnEEi4zL96As7Km0JkadFTzBXoP6DJ2x&#13;
2gWxpH7OCEy0GahnywCsZ3zWvOrbwHc0N2qt3hxqZTu+Ij7mYxNEYmdS0HNT/inuTG/aB4/NRza8&#13;
nvr7wjV5QZupzsKjXary9L7AalDhrSVSJYnCPsFFdHbWg/P5Cjl+Kptr+ZKjSC/XWzdPagdNPNZL&#13;
K9M9vbBvDIFIUBVVqionSDTVQSNTYu/ZGROL9hmnLI89QOHg4DUox9d/czvDHNLT60kV8Tg7gQux&#13;
piVxESVUiivXL3ws8qapaBODSiV9TwfTSKCNsl1TftLPKrKCo1p1mUKhxO1oy+940iQNREA89lL8&#13;
uWnUpSbhhjb2b45/QkrRmgQEsiPlHS4Qik4F7QxaEfh3yXmbGfwgqlFyEaDGAng/ts2k9CY9Qfau&#13;
kW6RXQ0g973jpfugkT825uN4/JDGlDDATrPNq/PSt/2zg5Clbu10b/5/K5sYdergf8Mfhlm3QoG4&#13;
iEt+qMR3eaDLOnjBqKGeSfhuFxEWbyzlQkS6zOnoGQPQQdw983vpSQIDAQABo4IEhjCCBIIwggIz&#13;
BgNVHQ4EggIqBIICJjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIkhCgF3sgzqtUSg&#13;
sMqYzeYrlNrkf/2DOLLDARgQrX6au3heqV5tK1OWc+C55qKbVMruCHJ60rYEayT9zTznh4Im0fIv&#13;
xH/X683eKwsF9iaWN7c7QhmAcs5Pd5Z+7c0WJzLoPatCFZOhWq+ycQSLjMv3oCzsqbQmRp0VPMFe&#13;
g/oMnbHaBbGkfs4ITLQZqGfLAKxnfNa86tvAdzQ3aq3eHGplO74iPuZjE0RiZ1LQc1P+Ke5Mb9oH&#13;
j81HNrye+vvCNXlBm6nOwqNdqvL0vsBqUOGtJVIlicI+wUV0dtaD8/kKOX4qm2v5kqNIL9dbN09q&#13;
B0081ksr0z29sG8MgUhQFVWqKidINNVBI1Ni79kZE4v2Gacsjz1A4eDgNSjH139zO8Mc0tPrSRXx&#13;
ODuBC7GmJXERJVSKK9cvfCzypqloE4NKJX1PB9NIoI2yXVN+0s8qsoKjWnWZQqHE7WjL73jSJA1E&#13;
QDz2Uvy5adSlJuGGNvZvjn9CStGaBASyI+UdLhCKTgXtDFoR+HfJeZsZ/CCqUXIRoMYCeD+2zaT0&#13;
Jj1B9q6RbpFdDSD3veOl+6CRPzbm43j8kMaUMMBOs82r89K3/bODkKVu7XRv/n8rmxh16uB/wx+G&#13;
WbdCgbiIS36oxHd5oMs6eMGooZ5J+G4XERZvLOVCRLrM6egZA9BB3D3ze+lJAgMBAAEwggI3BgNV&#13;
HSMEggIuMIICKoCCAiYwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCJIQoBd7IM6rVE&#13;
oLDKmM3mK5Ta5H/9gziywwEYEK1+mrt4XqlebStTlnPgueaim1TK7ghyetK2BGsk/c0854eCJtHy&#13;
L8R/1+vN3isLBfYmlje3O0IZgHLOT3eWfu3NFicy6D2rQhWToVqvsnEEi4zL96As7Km0JkadFTzB&#13;
XoP6DJ2x2gWxpH7OCEy0GahnywCsZ3zWvOrbwHc0N2qt3hxqZTu+Ij7mYxNEYmdS0HNT/inuTG/a&#13;
B4/NRza8nvr7wjV5QZupzsKjXary9L7AalDhrSVSJYnCPsFFdHbWg/P5Cjl+Kptr+ZKjSC/XWzdP&#13;
agdNPNZLK9M9vbBvDIFIUBVVqionSDTVQSNTYu/ZGROL9hmnLI89QOHg4DUox9d/czvDHNLT60kV&#13;
8Tg7gQuxpiVxESVUiivXL3ws8qapaBODSiV9TwfTSKCNsl1TftLPKrKCo1p1mUKhxO1oy+940iQN&#13;
REA89lL8uWnUpSbhhjb2b45/QkrRmgQEsiPlHS4Qik4F7QxaEfh3yXmbGfwgqlFyEaDGAng/ts2k&#13;
9CY9QfaukW6RXQ0g973jpfugkT825uN4/JDGlDDATrPNq/PSt/2zg5Clbu10b/5/K5sYdergf8Mf&#13;
hlm3QoG4iEt+qMR3eaDLOnjBqKGeSfhuFxEWbyzlQkS6zOnoGQPQQdw983vpSQIDAQABMA4GA1Ud&#13;
DwEB/wQEAwIGwDANBgkqhkiG9w0BAQ0FAAOCAgEAaGn/Q+1fjL7N675UYMGuC5EfloDQ3Y+zuYyx&#13;
FtMrwO3GuvABTf+oKsQc5n7XDgpQVBWlgIHH+LldDhRPQ1a0MPvMzPDL3Ps1K+hJewNhcec6fqXS&#13;
t+lszt+mnuK6gGKTioTbO6Li1E41WtJ1UhK4br1lsoNkM0E4rB5KUyj0ZmTCSlYlchAzMYLr1Ymc&#13;
Q5wgAu0lFIpluhd12un9mUWWXouSC+8pI+ZKfPz2lm+PGBDTTp0TsLLWldvLcnEAgbLG4wZvb1za&#13;
3EccZWtCX0b5lGjMCajhADiz76GgYZt1fTus1fhoTe6GsJV9lM11NZTEeTPAUE9VvtNGYOaNUl2e&#13;
S9pE1myNfiBgXNNJ3L4J6d6fGPlHV9rNPzjclfAOn4a1c+7ZBIsvW1znaeaAoeNyCcRPUr9rgKBS&#13;
L+izvr6w3eYiqjQWozCi2Nw/oTKk1dC32uzD9KRrQ8pAlSDsspic7FJpFqPVuxrvs8z7tXpc6uyB&#13;
cmaNZN91xowONrPljlbW2jm5AkebDyTMPfxIRcrTybOr/K3nOYEMkV8G/tRli4SRleGr3cUusHd5&#13;
47BlUSoncDYywh+4drtCycli2mfph3hjB34qkwbzI8j8iX6PSROH+AGcC0L1MEgRq2Um9+K3iTBA&#13;
9zGxY4cvR4vn4VtWcebg9AVMJCwhV85c7l0P0uU=</ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
    <ds:Object>
        <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.4.1#" Id="QualifyingProperties_ID" Target="#OpenESignForms_Seal">
            <xades:SignedProperties>
                <xades:SignedSignatureProperties>
                    <xades:SigningTime>2019-02-16T12:40:45-08:00</xades:SigningTime>
                </xades:SignedSignatureProperties>
                <xades:SignedDataObjectProperties>
                    <xades:DataObjectFormat ObjectReference="#Payload_Reference_ID">
                        <xades:Description>W-4.xml</xades:Description>
                        <xades:MimeType>application/xml</xades:MimeType>
                    </xades:DataObjectFormat>
                </xades:SignedDataObjectProperties>
            </xades:SignedProperties>
        </xades:QualifyingProperties>
    </ds:Object>
    <ds:Object>
        <ds:SignatureProperties>
            <ds:SignatureProperty Id="OpenESignForms_Seal_ID" Target="#OpenESignForms_Seal">
                <OpenESignForms_XmlDigitalSignatureSeal DeploymentHostAddress="104.239.136.116" DeploymentHostName="open.esignforms.com" DeploymentId="bbfe9bed-918d-446b-9518-8ec303bafb83" SignerAddress="50-46-118-196.evrt.wa.frontiernet.net (50.46.118.196)" SignerAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15" Timestamp="2019-02-16T12:40:45-08:00" Version="19.1.19_p0215_1750"/>
            </ds:SignatureProperty>
        </ds:SignatureProperties>
    </ds:Object></ds:Signature>
</snapshot>
</snapshots>

This explains the XML digital signature portion in a bit more detail:

<!-- The XML digital signature encompasses everything in the 
     <snapshot> element except for the <Signature> element itself, 
     though the <KeyInfo>, <QualifyingProperties> and <SignatureProperty> are included. -->
     
<snapshot xmlns="http://open.esignforms.com/XMLSchema/2019" timestamp="2019-02-16T12:40:45-08:00" type="document">

  <!-- Standard XML Digital Signature inserted into the XML data via Open eSignForms -->
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="OpenESignForms_Seal">
    <ds:SignedInfo>
      <!-- Uniform XML formatting before signature is applied -->
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2006/12/xml-c14n11#WithComments"/> 

      <!-- We use 4096-bit RSA public/private keypairs, managed by the server, with encrypted private key storage. 
           We do use SHA-512 for data digests and the digital signature itself. -->
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"/> 

      <!-- The "empty" URI points to the root element, in this case <snapshot>, 
           and its contents in full -->
              <ds:Reference Id="Payload_Reference_ID" URI="">
            <ds:Transforms>
                <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>F8mgu0S9tyosrWPJ2yQlPwNwZb8p2SO+C0LN8M3bcqT3cbhZGFKyfa7OLug7ORh4iif8pGEx27Or&#13;
XFdBhoBt9g==</ds:DigestValue>
        </ds:Reference>
        
      <!-- We sign the KeyInfo to prevent key substitution per XAdES -->
        <ds:Reference URI="#KeyInfo_ID">
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>HnULuiA4yy72qDreCaGQXm1QZtXu8rOd4OaHZ9raXfqexEuCq1qJ0DOewHsCxQCx9kyWkB1IHCc8&#13;
m7/DAPcXbg==</ds:DigestValue>
        </ds:Reference>
        
      <!-- We sign the QualifyingProperties per XAdES -->
        <ds:Reference URI="#QualifyingProperties_ID">
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>v7ljecvM5AEIgoUoYpBqBt6UZjhFxolIN2Qpbt5/r17822tpITwiT81ONM/tx4u+/eSIiS/vsMKt&#13;
hA9ICyPrJg==</ds:DigestValue>
        </ds:Reference>
        
      <!-- We include extra deployment identifiers in our Seal regarding the generating system -->
        <ds:Reference URI="#OpenESignForms_Seal_ID">
            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512"/>
            <ds:DigestValue>EEWzubdiWHJkKuotkoHfYYY+pgazuedJi3/1+Ir6D0bn0mKIBn9lWg8DaPY3b6m86xVevgHQNZQj&#13;
wylwUG68Hg==</ds:DigestValue>
        </ds:Reference>
    </ds:SignedInfo>

    <!-- This is the actual digital signature created across the above four References -->
    <ds:SignatureValue>YvsJhtoCLEkyHYQDl6mNwnL7qOJuL7SzahVOdaEnHnZvkpHIxRC7xqqlehEKtN46f4+TH5+o8n56&#13;
f7WmBcx79cQc6Ihhl1OnwTmttLBhUWx/qSm8PCQ4bC7Pl3Pabb+9QXDCV2ph7h3aJgh2BdU3r+Ib&#13;
WSqPC/VZB3Kmd4MxPpo1BBuAkMG/BWpCsHsp3EHMYfrDWh14aZicTEXn8zQ6fZrB/3/fU6Uh3hpn&#13;
OMHzdfot9qmR4KIQ5KbumlfBRWKS44lmJLQR55LcMZI/WyWDsn3vcsITOjLYeHtj3th8cwpDauvm&#13;
oXzKoRr5XZw4dSu6/bI262pKgCGs2dFPAnDBtQIyoaT5DFrrcztUY6YVWcx9PsrRz0qo0BQGBVTu&#13;
5bYdaD8ftgMJEfLTya/XrDab+Z+6ICU6AeAmxAkBeXhCn9/f++/nh8vxHp3QLlPaM4Elkisen1e/&#13;
vCV1U/6vdnbikrdbAVlTmgTVu2UmcsMO0BiuNuhA4ch6uI0X48MMWX3OCNNSSHls5EZGAxBFTWOR&#13;
dY7XS8w20Yc8F0LGMIPBvq11AWpQPVWzMEUcU5nGxP9sv//2piQLV3bexMUO2EgBjDYkd5LKZOqz&#13;
OGask92kiPG6RSnS8bufYJrP/TB+8NAugQcxSOUoVQAhp4WFSCXxiR6iAD168A3o5ZPbHDuu4EQ=</ds:SignatureValue>

    <!-- The public key and its UUID along with the X.509 certificate
         that can be used to verify the digital signature -->
    <ds:KeyInfo Id="KeyInfo_ID">
        <ds:KeyName>021eddcd-ebd0-4603-8b26-24b3f7fee682</ds:KeyName>
        <ds:KeyValue>
            <ds:RSAKeyValue>
                <ds:Modulus>iSEKAXeyDOq1RKCwypjN5iuU2uR//YM4ssMBGBCtfpq7eF6pXm0rU5Zz4LnmoptUyu4IcnrStgRr&#13;
JP3NPOeHgibR8i/Ef9frzd4rCwX2JpY3tztCGYByzk93ln7tzRYnMug9q0IVk6Far7JxBIuMy/eg&#13;
LOyptCZGnRU8wV6D+gydsdoFsaR+zghMtBmoZ8sArGd81rzq28B3NDdqrd4camU7viI+5mMTRGJn&#13;
UtBzU/4p7kxv2gePzUc2vJ76+8I1eUGbqc7Co12q8vS+wGpQ4a0lUiWJwj7BRXR21oPz+Qo5fiqb&#13;
a/mSo0gv11s3T2oHTTzWSyvTPb2wbwyBSFAVVaoqJ0g01UEjU2Lv2RkTi/YZpyyPPUDh4OA1KMfX&#13;
f3M7wxzS0+tJFfE4O4ELsaYlcRElVIor1y98LPKmqWgTg0olfU8H00igjbJdU37SzyqygqNadZlC&#13;
ocTtaMvveNIkDURAPPZS/Llp1KUm4YY29m+Of0JK0ZoEBLIj5R0uEIpOBe0MWhH4d8l5mxn8IKpR&#13;
chGgxgJ4P7bNpPQmPUH2rpFukV0NIPe946X7oJE/NubjePyQxpQwwE6zzavz0rf9s4OQpW7tdG/+&#13;
fyubGHXq4H/DH4ZZt0KBuIhLfqjEd3mgyzp4waihnkn4bhcRFm8s5UJEuszp6BkD0EHcPfN76Uk=</ds:Modulus>
                <ds:Exponent>AQAB</ds:Exponent>
            </ds:RSAKeyValue>
        </ds:KeyValue>
        <ds:X509Data>
            <ds:X509Certificate>MIIKkDCCCHigAwIBAgIIXjPAnc0XFeIwDQYJKoZIhvcNAQENBQAwgcIxOTA3BgNVBAMMME9wZW5f&#13;
ZVNpZ25Gb3Jtc19odHRwczovL29wZW4uZXNpZ25mb3Jtcy5jb20vZGVtbzE6MDgGA1UECgwxRGVw&#13;
bG95bWVudElEL2JiZmU5YmVkLTkxOGQtNDQ2Yi05NTE4LThlYzMwM2JhZmI4MzE8MDoGA1UECwwz&#13;
U2lnbmF0dXJlS2V5SUQvMDIxZWRkY2QtZWJkMC00NjAzLThiMjYtMjRiM2Y3ZmVlNjgyMQswCQYD&#13;
VQQGEwJVUzAeFw0xMTA0MTYwMzIxMzhaFw0yMTA0MTYwMzIxMzhaMIHCMTkwNwYDVQQDDDBPcGVu&#13;
X2VTaWduRm9ybXNfaHR0cHM6Ly9vcGVuLmVzaWduZm9ybXMuY29tL2RlbW8xOjA4BgNVBAoMMURl&#13;
cGxveW1lbnRJRC9iYmZlOWJlZC05MThkLTQ0NmItOTUxOC04ZWMzMDNiYWZiODMxPDA6BgNVBAsM&#13;
M1NpZ25hdHVyZUtleUlELzAyMWVkZGNkLWViZDAtNDYwMy04YjI2LTI0YjNmN2ZlZTY4MjELMAkG&#13;
A1UEBhMCVVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCJIQoBd7IM6rVEoLDKmM3m&#13;
K5Ta5H/9gziywwEYEK1+mrt4XqlebStTlnPgueaim1TK7ghyetK2BGsk/c0854eCJtHyL8R/1+vN&#13;
3isLBfYmlje3O0IZgHLOT3eWfu3NFicy6D2rQhWToVqvsnEEi4zL96As7Km0JkadFTzBXoP6DJ2x&#13;
2gWxpH7OCEy0GahnywCsZ3zWvOrbwHc0N2qt3hxqZTu+Ij7mYxNEYmdS0HNT/inuTG/aB4/NRza8&#13;
nvr7wjV5QZupzsKjXary9L7AalDhrSVSJYnCPsFFdHbWg/P5Cjl+Kptr+ZKjSC/XWzdPagdNPNZL&#13;
K9M9vbBvDIFIUBVVqionSDTVQSNTYu/ZGROL9hmnLI89QOHg4DUox9d/czvDHNLT60kV8Tg7gQux&#13;
piVxESVUiivXL3ws8qapaBODSiV9TwfTSKCNsl1TftLPKrKCo1p1mUKhxO1oy+940iQNREA89lL8&#13;
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&#13;
9zGxY4cvR4vn4VtWcebg9AVMJCwhV85c7l0P0uU=</ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>

    <!-- QualifyingProperties per XAdES has the signing time, file name and file type -->
    <ds:Object>
        <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.4.1#" Id="QualifyingProperties_ID" Target="#OpenESignForms_Seal">
            <xades:SignedProperties>
                <xades:SignedSignatureProperties>
                    <xades:SigningTime>2019-02-16T12:40:45-08:00</xades:SigningTime>
                </xades:SignedSignatureProperties>
                <xades:SignedDataObjectProperties>
                    <xades:DataObjectFormat ObjectReference="#Payload_Reference_ID">
                        <xades:Description>W-4.html</xades:Description>
                        <xades:MimeType>text/html</xades:MimeType>
                    </xades:DataObjectFormat>
                </xades:SignedDataObjectProperties>
            </xades:SignedProperties>
        </xades:QualifyingProperties>
    </ds:Object>
    
    <!-- Standard extension for the Open eSignForms XML Digital Signature Seal.
         Includes the deployment host add, name and UUID of the instance of Open eSignForms that created the signature.
         It also includes the signer's IP address and browser type, along with the timestamp and version of the 
         software used when it was signed. -->
    <ds:Object>
        <ds:SignatureProperties>
            <ds:SignatureProperty Id="OpenESignForms_Seal_ID" Target="#OpenESignForms_Seal">
                <OpenESignForms_XmlDigitalSignatureSeal DeploymentHostAddress="104.239.136.116" DeploymentHostName="open.esignforms.com" DeploymentId="bbfe9bed-918d-446b-9518-8ec303bafb83" SignerAddress="50-46-118-196.evrt.wa.frontiernet.net (50.46.118.196)" SignerAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15" Timestamp="2019-02-16T12:40:45-08:00" Version="19.1.19_p0215_1750"/>
            </ds:SignatureProperty>
        </ds:SignatureProperties>
    </ds:Object>
    
 </ds:Signature>
</snapshot>

The Java source code that created it can be seen in com.esignforms.open.crypto.XmlDigitalSignature.

For those who care, this is simple Java code that can be used to verify such an XML digital signature. Of course, in our platform, we can also verify the public key shown is valid or not.

// Copyright (C) 2011-2019 Yozons, Inc.
// Open eSignForms - Web-based electronic contracting software
//
// This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License 
// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
// See the GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License along with this program.  
// If not, see <http://open.esignforms.com/agpl.txt> or <http://www.gnu.org/licenses/>.
// Contact information is via the public forums at http://open.esignforms.com or via private email to open-esign@yozons.com.
//
package com.esignforms.open.crypto;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.security.Key;
import java.security.KeyException;
import java.security.PublicKey;
import java.util.Iterator;
import java.util.List;

import javax.xml.crypto.AlgorithmMethod;
import javax.xml.crypto.KeySelector;
import javax.xml.crypto.KeySelectorException;
import javax.xml.crypto.KeySelectorResult;
import javax.xml.crypto.XMLCryptoContext;
import javax.xml.crypto.XMLStructure;
import javax.xml.crypto.dsig.Reference;
import javax.xml.crypto.dsig.SignatureMethod;
import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.dom.DOMValidateContext;
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
import javax.xml.crypto.dsig.keyinfo.KeyName;
import javax.xml.crypto.dsig.keyinfo.KeyValue;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;


/**
 * XmlDigitalSignatureSimpleVerifier is a simple verifier that relies on no Open eSignForms components. It includes a main so it can be run as a
 * program to validate a snapshots XML file created by Open eSignForms. Much of the code understanding came from Oracle's technotes:
 * http://download.oracle.com/javase/6/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html It's not actually used except as an example of
 * Java standard code that can verify the signatures independently of any of our platform code.
 * 
 * @author Yozons, Inc.
 */
public final class XmlDigitalSignatureSimpleVerifier {
	// This literal is supported as of Java, but not in the API yet...
	private static final String SignatureMethod_RSA_SHA512 = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512";
	
	private final static String XML_NAMESPACE_2011 = "http://open.esignforms.com/XMLSchema/2011"; // OpenESF signatures through 19.1.19 release
	private final static String XML_NAMESPACE_2019 = "http://open.esignforms.com/XMLSchema/2019"; // OpenESF signatures after 19.1.19 release


	// For the ETSI XAdES advanced signature QualifyingProperties element
	private static final String ETSI_XAdES_NAMESPACE = "http://uri.etsi.org/01903/v1.4.1#";

	private XMLSignatureFactory xmlSignatureFactory;

	public XmlDigitalSignatureSimpleVerifier() {
		xmlSignatureFactory = XMLSignatureFactory.getInstance("DOM");
	}

	public void verify(String signedXml) throws Exception {
		if (signedXml == null) {
			throw new Exception("Missing required parameter signedXml");
		}

		try {
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
			dbf.setNamespaceAware(true);
			Document document = dbf.newDocumentBuilder().parse((new BufferedInputStream(new ByteArrayInputStream(signedXml.getBytes("UTF-8")))));

			Element rootElement = document.getDocumentElement();
			String ns = rootElement.getNamespaceURI();

			if ( XML_NAMESPACE_2019.equals(ns) ) {
				NodeList qualifyingPropertiesNodeList = document.getElementsByTagNameNS(ETSI_XAdES_NAMESPACE, "QualifyingProperties");
				if (qualifyingPropertiesNodeList != null && qualifyingPropertiesNodeList.getLength() > 0) {
					for (int i = 0; i < qualifyingPropertiesNodeList.getLength(); ++i) {
						Element qualifyingPropertiesElement = (Element) qualifyingPropertiesNodeList.item(i);
						if (qualifyingPropertiesElement != null)
							qualifyingPropertiesElement.setIdAttributeNS(null, "Id", true); // mark our id as the "Id" attribute
					}
				}				
			} else if ( XML_NAMESPACE_2011.equals(ns) ) {
				NodeList qualifyingPropertiesNodeList = document.getElementsByTagName("QualifyingProperties");
				if (qualifyingPropertiesNodeList != null) {
					for (int i = 0; i < qualifyingPropertiesNodeList.getLength(); ++i) {
						Element qualifyingPropertiesElement = (Element) qualifyingPropertiesNodeList.item(i);
						if (qualifyingPropertiesElement != null)
							qualifyingPropertiesElement.setIdAttribute("Id", true); // mark our id as the "Id" attribute
					}
				}
			}

			NodeList nl = document.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
			if (nl.getLength() == 0) {
				throw new Exception("The signedXML has no Signature element");
			}

			// The embedded key must match our signatureKey's values or the validation will fail.
			DOMValidateContext valContext = new DOMValidateContext(new AcceptEmbeddedKeySelector(), nl.item(0));

			XMLSignature signature = xmlSignatureFactory.unmarshalXMLSignature(valContext);
			if (!signature.validate(valContext)) {
				boolean isSignatureValueValid = signature.getSignatureValue().validate(valContext);
				StringBuilder exceptionText = new StringBuilder();
				exceptionText.append("Invalid signature. SignatureValue ").append(isSignatureValueValid ? "VALIDATED" : "INVALID");
				Iterator<?> i = signature.getSignedInfo().getReferences().iterator();
				for (int j = 0; i.hasNext(); j++) {
					Reference ref = (Reference) i.next();
					boolean refValid = ref.validate(valContext);
					exceptionText.append("; ").append(getReferenceName(ref,j)).append(refValid ? " VALIDATED" : " INVALID");
				}
				throw new Exception(exceptionText.toString());
			}
		} catch (Exception e) {
			throw e;
		}
	}

	private static class AcceptEmbeddedKeySelector extends KeySelector {
		public AcceptEmbeddedKeySelector() {
		}

		@Override
		public KeySelectorResult select(KeyInfo keyInfo, Purpose purpose, AlgorithmMethod method, XMLCryptoContext context)
				throws KeySelectorException {
			if (keyInfo == null) {
				throw new KeySelectorException("NULL KeyInfo");
			}

			SignatureMethod sm = (SignatureMethod) method;
			List<?> list = keyInfo.getContent();

			String keyId = null;
			PublicKey publicKey = null;
			for (int i = 0; i < list.size(); i++) {
				XMLStructure xmlStructure = (XMLStructure) list.get(i);
				if (xmlStructure instanceof KeyName) {
					keyId = ((KeyName) xmlStructure).getName();
				} else if (xmlStructure instanceof KeyValue) {
					try {
						publicKey = ((KeyValue) xmlStructure).getPublicKey();
					} catch (KeyException ke) {
						throw new KeySelectorException(ke);
					}
				}
			}

			if (keyId == null || publicKey == null) {
				throw new KeySelectorException(
						"XML Signature element needs KeyName and KeyValue as these are always present when valid, even if not trusted");
			}

			if (algEquals(sm.getAlgorithm(), publicKey.getAlgorithm())) {
				return new SimpleKeySelectorResult(publicKey);
			}

			throw new KeySelectorException("KeyName and KeyValue are not correct");
		}
	}

	private static class SimpleKeySelectorResult implements KeySelectorResult {
		PublicKey publicKey;

		SimpleKeySelectorResult(PublicKey publicKey) {
			this.publicKey = publicKey;
		}

		public Key getKey() {
			return publicKey;
		}
	}

	private static boolean algEquals(String algURI, String algName) {
		return (algName.equalsIgnoreCase("DSA") && algURI.equalsIgnoreCase(SignatureMethod.DSA_SHA1)) || (algName.equalsIgnoreCase("RSA")
				&& (algURI.equalsIgnoreCase(SignatureMethod_RSA_SHA512) || algURI.equalsIgnoreCase(SignatureMethod.RSA_SHA1)));
	}

	private static String getReferenceName(Reference ref, int i) {
		String uri = ref.getURI();
		if ( uri == null )
			uri = "";
		String id = ref.getId();
		if ( id == null )
			id = "";
		return "Reference[" + i + "] (URI=" + uri + "; id=" + id + ")";
	}
	
	static void validateElement(Element e, int size) throws Exception {
		XmlDigitalSignatureSimpleVerifier verifier = new XmlDigitalSignatureSimpleVerifier();

		Writer writer = new StringWriter(size); 
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer transformer = tf.newTransformer();
		transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
		transformer.transform(new DOMSource(e), new StreamResult(writer));

		String signedSnapshotXml = writer.toString();

		verifier.verify(signedSnapshotXml);
	}

	public static void main(String[] args) throws IOException {
		if (args.length < 1) {
			System.err.println("Usage: XmlDigitalSignatureSimpleVerifier <signedXmlSnapshotFileName>...");
			System.exit(1);
		}

		for (String f : args) {
			File file = new File(f);
			if (file.exists() && file.canRead()) {
				try {
					DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
					dbf.setNamespaceAware(true);
					Document document = dbf.newDocumentBuilder().parse(new BufferedInputStream(new FileInputStream(file)));

					Element rootElement = document.getDocumentElement();
					String ns = rootElement.getNamespaceURI();

					String rootNodeName = rootElement.getNodeName();
					
					// If it's an OpenESF generated XML digital signature, it likely is the snapshots element with both a document and data snapshot
					if ( "snapshots".equals(rootNodeName) ) {
						NodeList snapshotList = rootElement.getElementsByTagNameNS(ns,"snapshot");
						for (int i=0; i < snapshotList.getLength(); ++i ) {
							Element snapshotElement = (Element)snapshotList.item(i);
							String type = snapshotElement.getAttribute("type");
							String timestamp = snapshotElement.getAttribute("timestamp");
							try {
								validateElement(snapshotElement, (int)file.length());
								System.err.println("Signature for embedded snapshot element type: " + type + "; timestamp: " + timestamp + "; validated SUCCESSFULLY from file: " + file.getAbsolutePath());
							} catch (Exception e) {
								System.err.println("Signature for embedded snapshot element type: " + type + "; timestamp: " + timestamp + "; validation FAILED from file: " + file.getAbsolutePath() + "; exception: " + e.getMessage());
							}
						}
					} else if ( "snapshot".equals(rootNodeName) ) {
						String type = rootElement.getAttribute("type");
						String timestamp = rootElement.getAttribute("timestamp");
						try {
							validateElement(rootElement, (int)file.length());
							System.err.println("Signature for standalone snapshot element type: " + type + "; timestamp: " + timestamp + "; validated SUCCESSFULLY from file: " + file.getAbsolutePath());
						} catch (Exception e) {
							System.err.println("Signature for standalone snapshot element type: " + type + "; timestamp: " + timestamp + "; validation FAILED from file: " + file.getAbsolutePath() + "; exception: " + e.getMessage());
						}
					} else {
						// This is not an OpenESF digitally signed content, so let's try to validate whatever it is!
						try {
							validateElement(rootElement, (int)file.length());
							System.err.println("Signature for '" + rootNodeName + "' element validated SUCCESSFULLY from file: " + file.getAbsolutePath());
						} catch (Exception e) {
							System.err.println("Signature for '" + rootNodeName + "' element validation FAILED from file: " + file.getAbsolutePath() + "; exception: " + e.getMessage());
						}
					}
				} catch (java.io.IOException e) {
					System.err.println("I/O Error: Could not read the XML contents from file named: " + file.getAbsolutePath());
				} catch (DOMException e) {
					System.err.println("DOM Error: Could not parse XML contents from file named: " + file.getAbsolutePath());
				} catch (Exception e) {
					System.err.println("Error: Could not parse XML contents from file named: " + file.getAbsolutePath());
				} finally {
				}

			} else {
				System.err.println("Error: Could not find a readable file named: " + file.getAbsolutePath());
			}
		}

		System.exit(0);
	}
}

Return to main page...