attachment-0002

<html><head><base href="x-msg://809/"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Pete,<div><br></div><div>Thanks for this; like Ira I don't have time right now to go through all of this, although from a quick skim it looks like this fills in some of the gaps of what we defined in the past BOFs.</div><div><br></div><div>More good material that can be dropped into a preliminary draft of the Cloud Imaging Model and Semantics document by someone other than the current document editors...</div><div>(don't make be break out that poster again... :)</div><div><br></div><div><br></div><div><br><div><div>On Dec 13, 2011, at 5:33 AM, Zehler, Peter wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: 'Andale Mono'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div lang="EN-US" link="blue" vlink="purple"><div class="WordSection1" style="page: WordSection1; "><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">All,<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">I would like to see an IPP binding for Cloud printing.&nbsp; I see a significant advantage to an IPP based solution given the maturity of the protocol and the industry wide support.&nbsp; I experimented with a cloud based print service back in 2009.&nbsp; I based my experiments on a WS-Print binding but an IPP binding would also work.&nbsp; I switched the binding from WS-Print to PWG SM and included it in v1.160 of the PWG SM Schema.&nbsp; It is easier for me to write Schema than IPP and easier to display.&nbsp; It is not difficult to move between the two mappings.&nbsp; The issues I did not address include an environment agnostic registration and a common security model.&nbsp;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">For clarity I will refer to the Cloud based Printers as Queues and the devices as Printers even though in the IPP model they are both implementation of IPP Printers.&nbsp; In v1.160 of the PWG Semantic Model Schema I included two files (i.e., PwgCloudPrintQueue.wsdl and PwgCloudPrintQueueMsg.xsd) that have some of the operations fleshed out a bit.&nbsp; (I dropped a couple things moving from WS-Print to PWG SM.)<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">I had a couple of assumptions going in.<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">I believe that Queues and Printers contain Jobs and are stateful.&nbsp; There is an association between the Jobs in a Queue and the Jobs being printed on a Printer.&nbsp; A mapping between them should be maintained on both sides and carried explicitly in the protocol.&nbsp; I do not believe we should be implementing “remote markers” where Jobs only reside in the Cloud.&nbsp; It should be possible for either side to use IPP operations to query the state of the Printer/Queue and their Jobs.<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">I believe it is a requirement that the Cloud Print model must support both Fan Out and Fan In.&nbsp; In other words it should be possible for a single Cloud Queue to act as a proxy for other Cloud Queues.&nbsp; This will allow a Printer to interact with a single Cloud Queue but still service jobs in multiple Cloud Queues.&nbsp;&nbsp; Taking this approach allows you to do things such as set different default behaviors for Queues that all map to the same Printer.&nbsp; (The User does not need a Job Ticket since the intent is associated with the various Queues.) This approach also allows you to enforce different capabilities for different users.&nbsp; Users have permission to use specific Queues.&nbsp; The Queues could prohibit color printing or limit the size of a Job.&nbsp;<span class="Apple-converted-space">&nbsp;</span><br>&nbsp;It should also be possible for one Printer to interact with a Queue and forward Jobs to other Printers.&nbsp; For example a Printer in an enterprises DMZ could forward jobs to internal Printers or a software only Printer could front end legacy devices (i.e., proxy).<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">The way I broke the processing of Cloud Jobs up was; Check for Work, Lock the Job, Update the Job Status, Retrieve the Document(s), and Finish the Job.&nbsp; I also had another group of things that include; synchronization of Printer and Job state, Firewall Traversal, Moving from Poll Driven to Event Driven, and Eventing.<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Check for work:<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">The Printer should be event driven when processing Jobs.&nbsp; See below for a discussion on eventing.&nbsp; The printer should query the Queue for available work.&nbsp;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">The Operation IsThereAnyWork&nbsp;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1036" style="color: blue; text-decoration: underline; ">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1036</a>&gt;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">is used by the Printer to ask a Queue to see if any work is available.&nbsp; The request contains a list of DestinationServiceUuids (i.e. printer-uuid) where the Jobs will be printed.&nbsp; The response will have a list of work entries.&nbsp; Each entry contains the SourceServiceUuid, DestinationServiceUuid (missing in schema) and a list of Job ids.&nbsp; I used a UUID instead of an ID but as long as the source Queue is identified either would work.<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Lock the Job:<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Once a Printer has determined the job it will process, it sends a DeQueuePrintJob operation<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1035" style="color: blue; text-decoration: underline; ">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1035</a>&gt;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">&nbsp;to the Queue.&nbsp; This operates a little differently than CreateJob in that the Printer Job identifier needs to be reserved until the operation succeeds.&nbsp; If the operation fails or times out the identifier and any allocated resources are discarded.&nbsp; The request includes the identifiers for the source and destination Queue/Printer and Jobs.&nbsp; The response contains the number of documents in the job as well as some job information such as the job name and owner.&nbsp; Although not included a JobTicket should be passed in the response as well.&nbsp; The payload of the response should closely match a CreateJob operation.&nbsp; We may also want to consider passing a JobTicket by reference which IPP does not permit at this time.<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Update the Job Status:<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Event notifications are used to keep the state of the Job, Document and Service updated.&nbsp; I used WS-Eventing but an IPP notification method can be substituted.&nbsp; See eventing discussion below.<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Retrieve the Document:<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">The Printer retrieves the documents to process using the Retrieve Document operation<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1038" style="color: blue; text-decoration: underline; ">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1038</a>&gt;.&nbsp;&nbsp;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">The request identified the source Service, Job and Document number.&nbsp; The response includes the document number and a flag to indicate if it is the last document.&nbsp; Other information such as a Document Ticket or the DocumentFormat can also be included.&nbsp; Since the Printer does not know if the document will be pushed or pulled it must be ready to accept a DocumentUri or Document Content in the response.&nbsp; I used MTOM but IPP already has an acceptable encoding.&nbsp; It is most efficient to use print by reference whenever possible.&nbsp;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Finish the Job:<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Once the Job has been printed the final update of the Job is done.&nbsp; Note that events are used to handle updates as the Job is being processed.&nbsp; The CompleteDequeuePrintJob operation<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1034" style="color: blue; text-decoration: underline; ">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1034</a>&gt;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">request contains the Source and destination Queue/Printer and Jobs and the details of the Destination Job.&nbsp; Included is The JobState, any JobStateReasons, DateTimeAtCompletion and the ImpressionsCompleted.&nbsp; The PrintJobReceipt can also be included.<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Synchronize Printer/Queue state,<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Synchronize Job state,<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Moving from Polling to Event Driven<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Firewall traversal<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Eventing:<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">This nice thing about outbound (i.e., Printer to Queue) eventing in a Cloud environment is that no event subscription needs to be sent.&nbsp; The Printer knows the Queue is interested in Printer and Job events.&nbsp; Either a well-known listener port can be used or the location can be part of registration.&nbsp; Since the Printer knows which jobs came from the Cloud it can filter the Job events.&nbsp; Whenever a Printer is initialized a printer state event should be sent to its registered Queues.&nbsp; If the content of the event is insufficient then a one way message that looks like a GetPrinterAttributes operation response could be used.<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">In order to move from a poll model to an event driven model we need a mechanism to traverse the firewall.&nbsp; I originally used a hacked together HTTP trickle protocol.&nbsp; A standardized protocol such as XMPP can be used instead.&nbsp; The PWG can create PWG specific stanzas that map to existing IPP operations such as GetPrinterAttributes, GetJobs or GetJobAttributes. A new stanza would be needed to let the Printer know it’s time to send an IsThereAnyWork operation to a Queue.<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Registration:<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">I did not do anything with registration other than put in a place holder.&nbsp; &nbsp;The RegisterPrinter operation<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">&lt;<a href="http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1037" style="color: blue; text-decoration: underline; ">http://www.pwg.org/mfd/navigate/PwgSmRev1-160_ServiceOperations.html#Link1037</a>&gt;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">request contains some Printer information such as the identifier for the Queue and the Printer.&nbsp;&nbsp; It was not clear to me if the existence of a Queue is a prerequisite or a result of the operation.&nbsp; The Printer information would also include the PrinterCapabilities that we recently defined in the Job Ticket work.&nbsp; This contains the defaults, capabilities and document generation information.&nbsp; I included some “Agent” information.&nbsp; I assumed there would be some security information exchanged so I just put a placeholder there.&nbsp; &nbsp;&nbsp;&nbsp;<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; ">Comments?<o:p></o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="color: rgb(31, 73, 125); "><o:p>&nbsp;</o:p></span></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-family: Impact, sans-serif; color: navy; ">Peter Zehler</span><span style="color: rgb(31, 73, 125); "><br><br></span><span style="font-size: 10pt; font-family: Tahoma, sans-serif; color: navy; ">Xerox Research Center Webster<br></span><span style="font-size: 10pt; font-family: Arial, sans-serif; color: navy; ">Email:<span class="Apple-converted-space">&nbsp;</span></span><a href="mailto:Peter.Zehler@Xerox.com" style="color: blue; text-decoration: underline; "><span style="font-size: 10pt; font-family: Arial, sans-serif; color: blue; ">Peter.Zehler@Xerox.com</span></a><span style="color: rgb(31, 73, 125); "><br></span><span style="font-size: 10pt; font-family: Arial, sans-serif; color: navy; ">Voice: (585) 265-8755</span><span style="color: rgb(31, 73, 125); "><br></span><span style="font-size: 10pt; font-family: Arial, sans-serif; color: navy; ">FAX: (585) 265-7441</span><span style="color: rgb(31, 73, 125); "><br></span><span style="font-size: 10pt; font-family: Arial, sans-serif; color: navy; ">US Mail: Peter Zehler</span><span style="color: rgb(31, 73, 125); "><br></span><span style="font-size: 10pt; font-family: Arial, sans-serif; color: navy; ">Xerox Corp.</span><span style="color: rgb(31, 73, 125); "><br></span><span style="font-size: 10pt; font-family: Arial, sans-serif; color: navy; ">800 Phillips Rd.</span><span style="color: rgb(31, 73, 125); "><br></span><span style="font-size: 10pt; font-family: Arial, sans-serif; color: navy; ">M/S 128-25E</span><span style="color: rgb(31, 73, 125); "><br></span><span style="font-size: 10pt; font-family: Arial, sans-serif; color: navy; ">Webster NY, 14580-9701</span><span style="color: rgb(31, 73, 125); "><o:p></o:p></span></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><span style="font-size: 12pt; font-family: 'Times New Roman', serif; color: rgb(31, 73, 125); "><o:p>&nbsp;</o:p></span></div><div style="margin-top: 0in; margin-right: 0in; margin-left: 0in; margin-bottom: 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div></div><br>--<span class="Apple-converted-space">&nbsp;</span><br>This message has been scanned for viruses and<span class="Apple-converted-space">&nbsp;</span><br>dangerous content by<span class="Apple-converted-space">&nbsp;</span><a href="http://www.mailscanner.info/" style="color: blue; text-decoration: underline; "><b>MailScanner</b></a>, and is<span class="Apple-converted-space">&nbsp;</span><br>believed to be clean. _______________________________________________<br>cloud mailing list<br><a href="mailto:cloud@pwg.org" style="color: blue; text-decoration: underline; ">cloud@pwg.org</a><br><a href="https://www.pwg.org/mailman/listinfo/cloud" style="color: blue; text-decoration: underline; ">https://www.pwg.org/mailman/listinfo/cloud</a><br></div></span></blockquote></div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Andale Mono'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Andale Mono'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">_________________________________________________________<br>Michael Sweet, Senior Printing System&nbsp;Engineer, PWG Chair</div></span></span>
</div>
<br></div><br />-- 
<br />This message has been scanned for viruses and
<br />dangerous content by
<a href="http://www.mailscanner.info/"><b>MailScanner</b></a>, and is
<br />believed to be clean.
</body></html>