#####################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#####################################################################

#price.length=0
#infoString.length=0
#dateFormat=EEE, d MMM yyyy HH:mm:ss z
${CENTER}${DOUBLE_HEIGHT}${BOLD}Company XYZ
${CENTER}${BOLD}7 E. 8th St. #308
${CENTER}${BOLD}New York, NY 10003
${CENTER}${BOLD}212.655.3052

${CENTER}Sale: ${orderId} Tx: ${transactionId} Dr: ${drawerNo} Clerk: ${userId}
${CENTER}${dateStamp}

${CENTER}${cardNumber} - ${expireDate}
${CENTER}${nameOnCard}
${CENTER}${authInfoString}


${CENTER}${BOLD}Amount: $${amount}




${CENTER}X___________________________________________



${CENTER}${DOUBLE_HEIGHT}${BOLD}STORE COPY

[ORDER BARCODE]
