Index: cprs/branches/tmg-cprs/CPRS-Chart/Accessibility_TLB.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Accessibility_TLB.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Accessibility_TLB.pas	(revision 729)
@@ -13,5 +13,5 @@
 
 // PASTLWTR : 1.2
-// File generated on 1/22/2010 5:46:21 PM from Type Library described below.
+// File generated on 3/29/2010 5:43:06 PM from Type Library described below.
 
 // ************************************************************************  //
Index: cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.dof
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.dof	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.dof	(revision 729)
@@ -101,5 +101,5 @@
 UsePackages=0
 [Parameters]
-RunParams=CCOW=disable s=192.168.3.97 p=9260 SPOOF-VER=1.0.26.69
+RunParams=CCOW=disable s=192.168.3.99 p=9260
 HostApplication=
 Launcher=
@@ -135,4 +135,7 @@
 ProductVersion=1.0.0.0
 Comments=1.0.26.69
+[Excluded Packages]
+c:\program files\borland\delphi7\Projects\Bpl\SXSkin_D7_D.bpl=SXSkinComponents Design Time
+C:\Program Files\Borland\Delphi7\Projects\Bpl\SXSkin_D7_R.bpl=SXSkinComponents
 [HistoryLists\hlDebugSourcePath]
 Count=1
Index: cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.dpr
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.dpr	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.dpr	(revision 729)
@@ -307,5 +307,5 @@
   fImages in 'fImages.pas' {frmImages},
   UploadImages in 'UploadImages.pas' {UploadForm},
-  UploadProgress in 'UploadProgress.pas' {UploadProgressForm},
+  frmImageTransferProgress in 'TMG_Extra\frmImageTransferProgress.pas' {ImageTransferForm},
   fProbLex in 'fProbLex.pas' {frmPLLex},
   fTIUView in 'fTIUView.pas' {frmTIUView},
@@ -323,5 +323,8 @@
   EditTextU in 'TMG_Extra\EditTextU.pas' {EditTextForm},
   ORNet in '..\CPRS-Lib\ORNet.pas',
-  fTMGPrintingAnimation in 'TMG_Extra\fTMGPrintingAnimation.pas';
+  fTMGPrintingAnimation in 'TMG_Extra\fTMGPrintingAnimation.pas',
+  uTMGOptions in 'uTMGOptions.pas',
+  fPtLabelPrint in 'TMG_Extra\fPtLabelPrint.pas' {frmPtLabelPrint},
+  uEvaluate in 'uEvaluate.pas';
 
 {$R *.TLB}
@@ -337,6 +340,5 @@
     Application.Initialize;
     frmSplash := nil;
-    if ParamSearch('SPLASH') <> 'OFF' then
-    begin
+    if ParamSearch('SPLASH') <> 'OFF' then begin
       frmSplash := TfrmSplash.Create(Application);  // show splash screen
       frmSplash.Show;                               //         "
@@ -348,9 +350,10 @@
     Application.CreateForm(TdmodShared, dmodShared);
   Application.CreateForm(TfrmFrame, frmFrame);
-  if frmframe.TMGAbort = False then begin   //kt 3/25/09
+  //kt <--- frmImages etc created here
+    Application.CreateForm(TfrmPtLabelPrint, frmPtLabelPrint);
+    if frmframe.TMGAbort = False then begin   //kt 3/25/09
       Application.CreateForm(TfrmSearchStop, frmSearchStop);
-      Application.CreateForm(TfrmImages, frmImages);
       Application.CreateForm(TUploadForm, UploadForm);
-      Application.CreateForm(TUploadProgressForm, UploadProgressForm);
+      Application.CreateForm(TImageTransferForm, ImageTransferForm);
       Application.CreateForm(TfrmODAllergy, frmODAllergy);
       Application.CreateForm(TfrmDeviceSelect, frmDeviceSelect);
@@ -364,5 +367,4 @@
       Application.CreateForm(TEditTextForm, EditTextForm);
       Application.CreateForm(TfrmTMGPrinting,frmTMGPrinting);
-      //kt Application.CreateForm(TfrmWebTab, frmWebTab);
       frmSplash.Free;                               // close & free splash screen
       Application.Run;
Index: cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.drc
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.drc	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.drc	(revision 729)
@@ -9,594 +9,596 @@
 */
 
-#define pnglang_EPNGSizeExceedsText 64928
-#define pnglang_EPNGUnknownPalEntryText 64929
-#define pnglang_EPNGUnknownCriticalChunkText 64930
-#define pnglang_EPNGUnknownCompressionText 64931
-#define pnglang_EPNGUnknownInterlaceText 64932
-#define pnglang_EPNGCannotAssignChunkText 64933
-#define pnglang_EPNGUnexpectedEndText 64934
-#define pnglang_EPNGNoImageDataText 64935
-#define pnglang_EPNGCannotChangeSizeText 64936
-#define pnglang_EPNGOutMemoryText 64937
-#define pnglang_EPNGHeaderNotPresentText 64938
-#define JConsts_sChangeJPGSize 64939
-#define JConsts_sJPEGError 64940
-#define JConsts_sJPEGImageFile 64941
-#define IdResourceStrings_RSStackETOOMANYREFS 64944
-#define IdResourceStrings_RSStackETIMEDOUT 64945
-#define IdResourceStrings_RSStackECONNREFUSED 64946
-#define IdResourceStrings_RSStackELOOP 64947
-#define IdResourceStrings_RSStackENAMETOOLONG 64948
-#define IdResourceStrings_RSStackEHOSTDOWN 64949
-#define IdResourceStrings_RSStackEHOSTUNREACH 64950
-#define IdResourceStrings_RSStackENOTEMPTY 64951
-#define IdResourceStrings_RSStackHOST_NOT_FOUND 64952
-#define pnglang_EPngInvalidCRCText 64953
-#define pnglang_EPNGInvalidIHDRText 64954
-#define pnglang_EPNGMissingMultipleIDATText 64955
-#define pnglang_EPNGZLIBErrorText 64956
-#define pnglang_EPNGInvalidPaletteText 64957
-#define pnglang_EPNGInvalidFileHeaderText 64958
-#define pnglang_EPNGIHDRNotFirstText 64959
-#define IdResourceStrings_RSStackEPROTONOSUPPORT 64960
-#define IdResourceStrings_RSStackESOCKTNOSUPPORT 64961
-#define IdResourceStrings_RSStackEOPNOTSUPP 64962
-#define IdResourceStrings_RSStackEPFNOSUPPORT 64963
-#define IdResourceStrings_RSStackEAFNOSUPPORT 64964
-#define IdResourceStrings_RSStackEADDRINUSE 64965
-#define IdResourceStrings_RSStackEADDRNOTAVAIL 64966
-#define IdResourceStrings_RSStackENETDOWN 64967
-#define IdResourceStrings_RSStackENETUNREACH 64968
-#define IdResourceStrings_RSStackENETRESET 64969
-#define IdResourceStrings_RSStackECONNABORTED 64970
-#define IdResourceStrings_RSStackECONNRESET 64971
-#define IdResourceStrings_RSStackENOBUFS 64972
-#define IdResourceStrings_RSStackEISCONN 64973
-#define IdResourceStrings_RSStackENOTCONN 64974
-#define IdResourceStrings_RSStackESHUTDOWN 64975
-#define IdResourceStrings_RSInvalidServiceName 64976
-#define IdResourceStrings_RSStackError 64977
-#define IdResourceStrings_RSStackEINTR 64978
-#define IdResourceStrings_RSStackEBADF 64979
-#define IdResourceStrings_RSStackEACCES 64980
-#define IdResourceStrings_RSStackEFAULT 64981
-#define IdResourceStrings_RSStackEINVAL 64982
-#define IdResourceStrings_RSStackEMFILE 64983
-#define IdResourceStrings_RSStackEWOULDBLOCK 64984
-#define IdResourceStrings_RSStackEINPROGRESS 64985
-#define IdResourceStrings_RSStackEALREADY 64986
-#define IdResourceStrings_RSStackENOTSOCK 64987
-#define IdResourceStrings_RSStackEDESTADDRREQ 64988
-#define IdResourceStrings_RSStackEMSGSIZE 64989
-#define IdResourceStrings_RSStackEPROTOTYPE 64990
-#define IdResourceStrings_RSStackENOPROTOOPT 64991
-#define DBConsts_SInvalidSqlTimeStamp 64992
-#define VDBConsts_SFirstRecord 64993
-#define VDBConsts_SPriorRecord 64994
-#define VDBConsts_SNextRecord 64995
-#define VDBConsts_SLastRecord 64996
-#define VDBConsts_SInsertRecord 64997
-#define VDBConsts_SDeleteRecord 64998
-#define VDBConsts_SEditRecord 64999
-#define VDBConsts_SPostEdit 65000
-#define VDBConsts_SCancelEdit 65001
-#define VDBConsts_SRefreshRecord 65002
-#define VDBConsts_SRemoteLogin 65003
-#define IdResourceStrings_RSWinsockInitializationError 65004
-#define IdResourceStrings_RSSetSizeExceeded 65005
-#define IdResourceStrings_RSWS2CallError 65006
-#define IdResourceStrings_RSWS2LoadError 65007
-#define QConsts_SSave 65008
-#define QConsts_SUnknownImageFormat 65009
-#define QConsts_SUnableToWrite 65010
-#define QConsts_SUndo 65011
-#define QConsts_SRedo 65012
-#define QConsts_SLine 65013
-#define QConsts_SCut 65014
-#define QConsts_SCopy 65015
-#define QConsts_SPaste 65016
-#define QConsts_SClear 65017
-#define QConsts_SSelectAll 65018
-#define QConsts_SNoAppInLib 65019
-#define QConsts_SDuplicateApp 65020
-#define DBConsts_SBcdOverflow 65021
-#define DBConsts_SInvalidBcdValue 65022
-#define DBConsts_SCouldNotParseTimeStamp 65023
-#define QConsts_SMsgDlgError 65024
-#define QConsts_SMsgDlgInformation 65025
-#define QConsts_SMsgDlgConfirm 65026
-#define QConsts_SUnnamed 65027
-#define QConsts_SName 65028
-#define QConsts_SSize 65029
-#define QConsts_SType 65030
-#define QConsts_SDate 65031
-#define QConsts_SAttributes 65032
-#define QConsts_SDuplicateMenus 65033
-#define QConsts_SImageIndexError 65034
-#define QConsts_SInvalidImageDimensions 65035
-#define QConsts_SInvalidImageDimension 65036
-#define QConsts_SInvalidMimeSourceStream 65037
-#define QConsts_SMimeNotSupportedForIcon 65038
-#define QConsts_SOpen 65039
-#define QConsts_SNoMDIForm 65040
-#define QConsts_SNotAnMDIForm 65041
-#define QConsts_SMDIChildNotVisible 65042
-#define QConsts_SControlParentSetToSelf 65043
-#define QConsts_SOKButton 65044
-#define QConsts_SCancelButton 65045
-#define QConsts_SYesButton 65046
-#define QConsts_SNoButton 65047
-#define QConsts_SHelpButton 65048
-#define QConsts_SCloseButton 65049
-#define QConsts_SIgnoreButton 65050
-#define QConsts_SRetryButton 65051
-#define QConsts_SAbortButton 65052
-#define QConsts_SAllButton 65053
-#define QConsts_SCannotDragForm 65054
-#define QConsts_SMsgDlgWarning 65055
-#define QConsts_SmkcCtrl 65056
-#define QConsts_SmkcAlt 65057
-#define QConsts_SInvalidPixelFormat 65058
-#define QConsts_SNoCanvasHandle 65059
-#define QConsts_SInvalidCanvasState 65060
-#define QConsts_SInvalidImageSize 65061
-#define QConsts_SInvalidColorDepth 65062
-#define QConsts_SCannotFocus 65063
-#define QConsts_SParentRequired 65064
-#define QConsts_SVisibleChanged 65065
-#define QConsts_SMenuIndexError 65066
-#define QConsts_SMenuReinserted 65067
-#define QConsts_SNoMenuRecursion 65068
-#define QConsts_SMenuNotFound 65069
-#define QConsts_SMenuSetFormError 65070
-#define QConsts_SGroupIndexTooLow 65071
-#define QConsts_SmkcBackTab 65072
-#define QConsts_SmkcEsc 65073
-#define QConsts_SmkcReturn 65074
-#define QConsts_SmkcEnter 65075
-#define QConsts_SmkcSpace 65076
-#define QConsts_SmkcPgUp 65077
-#define QConsts_SmkcPgDn 65078
-#define QConsts_SmkcEnd 65079
-#define QConsts_SmkcHome 65080
-#define QConsts_SmkcLeft 65081
-#define QConsts_SmkcUp 65082
-#define QConsts_SmkcRight 65083
-#define QConsts_SmkcDown 65084
-#define QConsts_SmkcIns 65085
-#define QConsts_SmkcDel 65086
-#define QConsts_SmkcShift 65087
-#define DKLang_SDKLangErrMsg_DuplicatePropValueID 65088
-#define DKLang_SDKLangErrMsg_ErrorLoadingTran 65089
-#define DKLang_SDKLangErrMsg_InvalidConstName 65090
-#define DKLang_SDKLangErrMsg_DuplicateConstName 65091
-#define DKLang_SDKLangErrMsg_ConstantNotFound 65092
-#define DKLang_SDKLangErrMsg_LangManagerCalledAtDT 65093
-#define DKLang_SDKLangErrMsg_StreamVersionTooHigh 65094
-#define OleConst_SCannotActivate 65095
-#define OleConst_SNoWindowHandle 65096
-#define OleConst_SInvalidLicense 65097
-#define OleConst_SNotLicensed 65098
-#define OleConst_sNoRunningObject 65099
-#define QConsts_SInvalidCreateWidget 65100
-#define QConsts_STooManyMessageBoxButtons 65101
-#define QConsts_SmkcBkSp 65102
-#define QConsts_SmkcTab 65103
-#define TeeConst_TeeMsg_DefaultFontName 65104
-#define TeeConst_TeeMsg_CheckPointerSize 65105
-#define TeeConst_TeeMsg_FunctionPeriod 65106
-#define TeeConst_TeeMsg_PieOther 65107
-#define TeeConst_TeeMsg_ValuesX 65108
-#define TeeConst_TeeMsg_ValuesY 65109
-#define TeeConst_TeeMsg_ValuesPie 65110
-#define TeeConst_TeeMsg_ValuesBar 65111
-#define TeeConst_TeeMsg_ValuesAngle 65112
-#define TeeConst_TeeMsg_ValuesGanttStart 65113
-#define TeeConst_TeeMsg_ValuesGanttEnd 65114
-#define TeeConst_TeeMsg_ValuesGanttNextTask 65115
-#define TeeConst_TeeMsg_ValuesArrowEndX 65116
-#define TeeConst_TeeMsg_ValuesArrowEndY 65117
-#define TntSystem_SBufferOverflow 65118
-#define TntSystem_SInvalidUTF7 65119
-#define TeeConst_TeeMsg_GanttSample3 65120
-#define TeeConst_TeeMsg_GanttSample4 65121
-#define TeeConst_TeeMsg_GanttSample5 65122
-#define TeeConst_TeeMsg_GanttSample6 65123
-#define TeeConst_TeeMsg_GanttSample7 65124
-#define TeeConst_TeeMsg_GanttSample8 65125
-#define TeeConst_TeeMsg_GanttSample9 65126
-#define TeeConst_TeeMsg_GanttSample10 65127
-#define TeeConst_TeeMsg_DefaultFontSize 65128
-#define TeeConst_TeeMsg_FunctionAdd 65129
-#define TeeConst_TeeMsg_FunctionSubtract 65130
-#define TeeConst_TeeMsg_FunctionMultiply 65131
-#define TeeConst_TeeMsg_FunctionDivide 65132
-#define TeeConst_TeeMsg_FunctionHigh 65133
-#define TeeConst_TeeMsg_FunctionLow 65134
-#define TeeConst_TeeMsg_FunctionAverage 65135
-#define TeeConst_TeeMsg_GalleryFastLine 65136
-#define TeeConst_TeeMsg_Rotation 65137
-#define TeeConst_TeeMsg_PieSample1 65138
-#define TeeConst_TeeMsg_PieSample2 65139
-#define TeeConst_TeeMsg_PieSample3 65140
-#define TeeConst_TeeMsg_PieSample4 65141
-#define TeeConst_TeeMsg_PieSample5 65142
-#define TeeConst_TeeMsg_PieSample6 65143
-#define TeeConst_TeeMsg_PieSample7 65144
-#define TeeConst_TeeMsg_PieSample8 65145
-#define TeeConst_TeeMsg_GalleryStandard 65146
-#define TeeConst_TeeMsg_GalleryFunctions 65147
-#define TeeConst_TeeMsg_GalleryArrow 65148
-#define TeeConst_TeeMsg_GalleryGantt 65149
-#define TeeConst_TeeMsg_GanttSample1 65150
-#define TeeConst_TeeMsg_GanttSample2 65151
-#define TeeConst_TeeMsg_MaxPointsPerPage 65152
-#define TeeConst_TeeMsg_3dPercent 65153
-#define TeeConst_TeeMsg_CircularSeries 65154
-#define TeeConst_TeeMsg_BarWidthPercent 65155
-#define TeeConst_TeeMsg_BarOffsetPercent 65156
-#define TeeConst_TeeMsg_DefaultPercentOf 65157
-#define TeeConst_TeeMsg_DefPercentFormat 65158
-#define TeeConst_TeeMsg_DefValueFormat 65159
-#define TeeConst_TeeMsg_AxisTitle 65160
-#define TeeConst_TeeMsg_AxisLabels 65161
-#define TeeConst_TeeMsg_GalleryLine 65162
-#define TeeConst_TeeMsg_GalleryPoint 65163
-#define TeeConst_TeeMsg_GalleryArea 65164
-#define TeeConst_TeeMsg_GalleryBar 65165
-#define TeeConst_TeeMsg_GalleryHorizBar 65166
-#define TeeConst_TeeMsg_GalleryPie 65167
-#define ComConst_SNoCloseActiveServer1 65168
-#define ComConst_SNoCloseActiveServer2 65169
-#define TeeConst_TeeMsg_LegendTopPos 65170
-#define TeeConst_TeeMsg_LegendFirstValue 65171
-#define TeeConst_TeeMsg_LegendColorWidth 65172
-#define TeeConst_TeeMsg_SeriesSetDataSource 65173
-#define TeeConst_TeeMsg_SeriesInvDataSource 65174
-#define TeeConst_TeeMsg_FillSample 65175
-#define TeeConst_TeeMsg_Angle 65176
-#define TeeConst_TeeMsg_AxisLogDateTime 65177
-#define TeeConst_TeeMsg_AxisLogNotPositive 65178
-#define TeeConst_TeeMsg_AxisLabelSep 65179
-#define TeeConst_TeeMsg_AxisIncrementNeg 65180
-#define TeeConst_TeeMsg_AxisMinMax 65181
-#define TeeConst_TeeMsg_AxisMaxMin 65182
-#define TeeConst_TeeMsg_AxisLogBase 65183
-#define ComStrs_sFailSetCalMaxSelRange 65184
-#define ComStrs_sFailSetCalMinMaxRange 65185
-#define ComStrs_sFailsetCalSelRange 65186
-#define WinHelpViewer_hNoKeyword 65187
-#define ComConst_SCreateRegKeyError 65188
-#define ComConst_SOleError 65189
-#define ComConst_SObjectFactoryMissing 65190
-#define ComConst_STypeInfoMissing 65191
-#define ComConst_SBadTypeInfo 65192
-#define ComConst_SDispIntfMissing 65193
-#define ComConst_SNoMethod 65194
-#define ComConst_SVarNotObject 65195
-#define ComConst_STooManyParams 65196
-#define ComConst_SDCOMNotInstalled 65197
-#define ComConst_SDAXError 65198
-#define ComConst_SAutomationWarning 65199
-#define ComStrs_sTabFailSet 65200
-#define ComStrs_sTabFailSetObject 65201
-#define ComStrs_sTabMustBeMultiLine 65202
-#define ComStrs_sInvalidIndex 65203
-#define ComStrs_sInsertError 65204
-#define ComStrs_sInvalidOwner 65205
-#define ComStrs_sRichEditInsertError 65206
-#define ComStrs_sRichEditLoadFail 65207
-#define ComStrs_sRichEditSaveFail 65208
-#define ComStrs_sUDAssociated 65209
-#define ComStrs_sPageIndexError 65210
-#define ComStrs_sInvalidComCtl32 65211
-#define ComStrs_sDateTimeMax 65212
-#define ComStrs_sDateTimeMin 65213
-#define ComStrs_sNeedAllowNone 65214
-#define ComStrs_sFailSetCalDateTime 65215
-#define ExtCtrls_clNameInactiveCaptionText 65216
-#define ExtCtrls_clNameInfoBk 65217
-#define ExtCtrls_clNameInfoText 65218
-#define ExtCtrls_clNameMenu 65219
-#define ExtCtrls_clNameMenuText 65220
-#define ExtCtrls_clNameNone 65221
-#define ExtCtrls_clNameScrollBar 65222
-#define ExtCtrls_clName3DDkShadow 65223
-#define ExtCtrls_clName3DLight 65224
-#define ExtCtrls_clNameWindow 65225
-#define ExtCtrls_clNameWindowFrame 65226
-#define ExtCtrls_clNameWindowText 65227
-#define ComStrs_sTabFailClear 65228
-#define ComStrs_sTabFailDelete 65229
-#define ComStrs_sTabFailRetrieve 65230
-#define ComStrs_sTabFailGetObject 65231
-#define ExtCtrls_clNameMedGray 65232
-#define ExtCtrls_clNameActiveBorder 65233
-#define ExtCtrls_clNameActiveCaption 65234
-#define ExtCtrls_clNameAppWorkSpace 65235
-#define ExtCtrls_clNameBackground 65236
-#define ExtCtrls_clNameBtnFace 65237
-#define ExtCtrls_clNameBtnHighlight 65238
-#define ExtCtrls_clNameBtnShadow 65239
-#define ExtCtrls_clNameBtnText 65240
-#define ExtCtrls_clNameCaptionText 65241
-#define ExtCtrls_clNameDefault 65242
-#define ExtCtrls_clNameGrayText 65243
-#define ExtCtrls_clNameHighlight 65244
-#define ExtCtrls_clNameHighlightText 65245
-#define ExtCtrls_clNameInactiveBorder 65246
-#define ExtCtrls_clNameInactiveCaption 65247
-#define ExtCtrls_clNameOlive 65248
-#define ExtCtrls_clNameNavy 65249
-#define ExtCtrls_clNamePurple 65250
-#define ExtCtrls_clNameTeal 65251
-#define ExtCtrls_clNameGray 65252
-#define ExtCtrls_clNameSilver 65253
-#define ExtCtrls_clNameRed 65254
-#define ExtCtrls_clNameLime 65255
-#define ExtCtrls_clNameYellow 65256
-#define ExtCtrls_clNameBlue 65257
-#define ExtCtrls_clNameFuchsia 65258
-#define ExtCtrls_clNameAqua 65259
-#define ExtCtrls_clNameWhite 65260
-#define ExtCtrls_clNameMoneyGreen 65261
-#define ExtCtrls_clNameSkyBlue 65262
-#define ExtCtrls_clNameCream 65263
-#define Consts_SDockedCtlNeedsName 65264
-#define Consts_SDockTreeRemoveError 65265
-#define Consts_SDockZoneNotFound 65266
-#define Consts_SDockZoneHasNoCtl 65267
-#define Consts_SMultiSelectRequired 65268
-#define Consts_SSeparator 65269
-#define Consts_SErrorSettingCount 65270
-#define Consts_SListBoxMustBeVirtual 65271
-#define Consts_SNoGetItemEventHandler 65272
-#define HelpIntfs_hNoTableOfContents 65273
-#define HelpIntfs_hNothingFound 65274
-#define HelpIntfs_hNoContext 65275
-#define HelpIntfs_hNoTopics 65276
-#define ExtCtrls_clNameBlack 65277
-#define ExtCtrls_clNameMaroon 65278
-#define ExtCtrls_clNameGreen 65279
-#define Consts_SmkcAlt 65280
-#define Consts_srNone 65281
-#define Consts_SOutOfRange 65282
-#define Consts_sAllFilter 65283
-#define Consts_SInsertLineError 65284
-#define Consts_SInvalidClipFmt 65285
-#define Consts_SIconToClipboard 65286
-#define Consts_SCannotOpenClipboard 65287
-#define Consts_SInvalidMemoSize 65288
-#define Consts_SInvalidPrinterOp 65289
-#define Consts_SNoDefaultPrinter 65290
-#define Consts_SDuplicateMenus 65291
-#define Consts_SPictureLabel 65292
-#define Consts_SPictureDesc 65293
-#define Consts_SPreviewLabel 65294
-#define Consts_SCannotOpenAVI 65295
-#define Consts_SmkcTab 65296
-#define Consts_SmkcEsc 65297
-#define Consts_SmkcEnter 65298
-#define Consts_SmkcSpace 65299
-#define Consts_SmkcPgUp 65300
-#define Consts_SmkcPgDn 65301
-#define Consts_SmkcEnd 65302
-#define Consts_SmkcHome 65303
-#define Consts_SmkcLeft 65304
-#define Consts_SmkcUp 65305
-#define Consts_SmkcRight 65306
-#define Consts_SmkcDown 65307
-#define Consts_SmkcIns 65308
-#define Consts_SmkcDel 65309
-#define Consts_SmkcShift 65310
-#define Consts_SmkcCtrl 65311
-#define Consts_SMsgDlgWarning 65312
-#define Consts_SMsgDlgError 65313
-#define Consts_SMsgDlgInformation 65314
-#define Consts_SMsgDlgConfirm 65315
-#define Consts_SMsgDlgYes 65316
-#define Consts_SMsgDlgNo 65317
-#define Consts_SMsgDlgOK 65318
-#define Consts_SMsgDlgCancel 65319
-#define Consts_SMsgDlgHelp 65320
-#define Consts_SMsgDlgAbort 65321
-#define Consts_SMsgDlgRetry 65322
-#define Consts_SMsgDlgIgnore 65323
-#define Consts_SMsgDlgAll 65324
-#define Consts_SMsgDlgNoToAll 65325
-#define Consts_SMsgDlgYesToAll 65326
-#define Consts_SmkcBkSp 65327
-#define Consts_SCancelButton 65328
-#define Consts_SYesButton 65329
-#define Consts_SNoButton 65330
-#define Consts_SHelpButton 65331
-#define Consts_SCloseButton 65332
-#define Consts_SIgnoreButton 65333
-#define Consts_SRetryButton 65334
-#define Consts_SAbortButton 65335
-#define Consts_SAllButton 65336
-#define Consts_SCannotDragForm 65337
-#define Consts_SVMetafiles 65338
-#define Consts_SVEnhMetafiles 65339
-#define Consts_SVIcons 65340
-#define Consts_SVBitmaps 65341
-#define Consts_SMaskErr 65342
-#define Consts_SMaskEditErr 65343
-#define Consts_SVisibleChanged 65344
-#define Consts_SCannotShowModal 65345
-#define Consts_SScrollBarRange 65346
-#define Consts_SPropertyOutOfRange 65347
-#define Consts_SMenuIndexError 65348
-#define Consts_SMenuReinserted 65349
-#define Consts_SMenuNotFound 65350
-#define Consts_SNoTimers 65351
-#define Consts_SNotPrinting 65352
-#define Consts_SPrinting 65353
-#define Consts_SInvalidPrinter 65354
-#define Consts_SDeviceOnPort 65355
-#define Consts_SGroupIndexTooLow 65356
-#define Consts_SNoMDIForm 65357
-#define Consts_SControlParentSetToSelf 65358
-#define Consts_SOKButton 65359
-#define Consts_SUnknownExtension 65360
-#define Consts_SUnknownClipboardFormat 65361
-#define Consts_SOutOfResources 65362
-#define Consts_SNoCanvasHandle 65363
-#define Consts_SInvalidImageSize 65364
-#define Consts_SInvalidImageList 65365
-#define Consts_SReplaceImage 65366
-#define Consts_SImageIndexError 65367
-#define Consts_SImageReadFail 65368
-#define Consts_SImageWriteFail 65369
-#define Consts_SWindowDCError 65370
-#define Consts_SWindowClass 65371
-#define Consts_SCannotFocus 65372
-#define Consts_SParentRequired 65373
-#define Consts_SParentGivenNotAParent 65374
-#define Consts_SMDIChildNotVisible 65375
-#define RTLConsts_STooManyDeleted 65376
-#define RTLConsts_SUnknownGroup 65377
-#define RTLConsts_SUnknownProperty 65378
-#define RTLConsts_SWriteError 65379
-#define RTLConsts_SThreadCreateError 65380
-#define RTLConsts_SThreadError 65381
-#define Consts_SInvalidTabPosition 65382
-#define Consts_SInvalidTabStyle 65383
-#define Consts_SInvalidBitmap 65384
-#define Consts_SInvalidIcon 65385
-#define Consts_SInvalidMetafile 65386
-#define Consts_SInvalidPixelFormat 65387
-#define Consts_SInvalidImage 65388
-#define Consts_SScanLine 65389
-#define Consts_SChangeIconSize 65390
-#define Consts_SOleGraphic 65391
-#define RTLConsts_SInvalidPropertyType 65392
-#define RTLConsts_SInvalidPropertyValue 65393
-#define RTLConsts_SInvalidRegType 65394
-#define RTLConsts_SInvalidStringGridOp 65395
-#define RTLConsts_SListCapacityError 65396
-#define RTLConsts_SListCountError 65397
-#define RTLConsts_SListIndexError 65398
-#define RTLConsts_SMemoryStreamError 65399
-#define RTLConsts_SPropertyException 65400
-#define RTLConsts_SReadError 65401
-#define RTLConsts_SReadOnlyProperty 65402
-#define RTLConsts_SRegGetDataFailed 65403
-#define RTLConsts_SRegSetDataFailed 65404
-#define RTLConsts_SResNotFound 65405
-#define RTLConsts_SSeekNotImplemented 65406
-#define RTLConsts_SSortedListError 65407
-#define RTLConsts_SDuplicateItem 65408
-#define RTLConsts_SDuplicateName 65409
-#define RTLConsts_SDuplicateString 65410
-#define RTLConsts_SFCreateErrorEx 65411
-#define RTLConsts_SFixedColTooBig 65412
-#define RTLConsts_SFixedRowTooBig 65413
-#define RTLConsts_SFOpenErrorEx 65414
-#define RTLConsts_SGridTooLarge 65415
-#define RTLConsts_SIndexOutOfRange 65416
-#define RTLConsts_SIniFileWriteError 65417
-#define RTLConsts_SInvalidImage 65418
-#define RTLConsts_SInvalidMask 65419
-#define RTLConsts_SInvalidName 65420
-#define RTLConsts_SInvalidProperty 65421
-#define RTLConsts_SInvalidPropertyElement 65422
-#define RTLConsts_SInvalidPropertyPath 65423
-#define SysConst_SShortDayNameSat 65424
-#define SysConst_SLongDayNameSun 65425
-#define SysConst_SLongDayNameMon 65426
-#define SysConst_SLongDayNameTue 65427
-#define SysConst_SLongDayNameWed 65428
-#define SysConst_SLongDayNameThu 65429
-#define SysConst_SLongDayNameFri 65430
-#define SysConst_SLongDayNameSat 65431
-#define SysConst_SCannotCreateDir 65432
-#define RTLConsts_SAncestorNotFound 65433
-#define RTLConsts_SAssignError 65434
-#define RTLConsts_SBitsIndexError 65435
-#define RTLConsts_SCantWriteResourceStreamError 65436
-#define RTLConsts_SCheckSynchronizeError 65437
-#define RTLConsts_SClassNotFound 65438
-#define RTLConsts_SDuplicateClass 65439
-#define SysConst_SLongMonthNameMar 65440
-#define SysConst_SLongMonthNameApr 65441
-#define SysConst_SLongMonthNameMay 65442
-#define SysConst_SLongMonthNameJun 65443
-#define SysConst_SLongMonthNameJul 65444
-#define SysConst_SLongMonthNameAug 65445
-#define SysConst_SLongMonthNameSep 65446
-#define SysConst_SLongMonthNameOct 65447
-#define SysConst_SLongMonthNameNov 65448
-#define SysConst_SLongMonthNameDec 65449
-#define SysConst_SShortDayNameSun 65450
-#define SysConst_SShortDayNameMon 65451
-#define SysConst_SShortDayNameTue 65452
-#define SysConst_SShortDayNameWed 65453
-#define SysConst_SShortDayNameThu 65454
-#define SysConst_SShortDayNameFri 65455
-#define SysConst_SOSError 65456
-#define SysConst_SUnkOSError 65457
-#define SysConst_SShortMonthNameJan 65458
-#define SysConst_SShortMonthNameFeb 65459
-#define SysConst_SShortMonthNameMar 65460
-#define SysConst_SShortMonthNameApr 65461
-#define SysConst_SShortMonthNameMay 65462
-#define SysConst_SShortMonthNameJun 65463
-#define SysConst_SShortMonthNameJul 65464
-#define SysConst_SShortMonthNameAug 65465
-#define SysConst_SShortMonthNameSep 65466
-#define SysConst_SShortMonthNameOct 65467
-#define SysConst_SShortMonthNameNov 65468
-#define SysConst_SShortMonthNameDec 65469
-#define SysConst_SLongMonthNameJan 65470
-#define SysConst_SLongMonthNameFeb 65471
-#define SysConst_SVarTypeNotUsableWithPrefix 65472
-#define SysConst_SVarTypeTooManyCustom 65473
-#define SysConst_SVarTypeCouldNotConvert 65474
-#define SysConst_SVarTypeConvertOverflow 65475
-#define SysConst_SVarOverflow 65476
-#define SysConst_SVarInvalid 65477
-#define SysConst_SVarBadType 65478
-#define SysConst_SVarNotImplemented 65479
-#define SysConst_SVarUnexpected 65480
-#define SysConst_SExternalException 65481
-#define SysConst_SAssertionFailed 65482
-#define SysConst_SIntfCastError 65483
-#define SysConst_SSafecallException 65484
-#define SysConst_SAssertError 65485
-#define SysConst_SAbstractError 65486
-#define SysConst_SModuleAccessViolation 65487
-#define SysConst_SExceptTitle 65488
-#define SysConst_SInvalidFormat 65489
-#define SysConst_SArgumentMissing 65490
-#define SysConst_SDispatchError 65491
-#define SysConst_SReadAccess 65492
-#define SysConst_SWriteAccess 65493
-#define SysConst_SFormatTooLong 65494
-#define SysConst_SVarArrayCreate 65495
-#define SysConst_SVarArrayBounds 65496
-#define SysConst_SVarArrayLocked 65497
-#define SysConst_SInvalidVarCast 65498
-#define SysConst_SInvalidVarOp 65499
-#define SysConst_SInvalidVarNullOp 65500
-#define SysConst_SInvalidVarOpWithHResultWithPrefix 65501
-#define SysConst_SVarTypeOutOfRangeWithPrefix 65502
-#define SysConst_SVarTypeAlreadyUsedWithPrefix 65503
-#define SysConst_SDivByZero 65504
-#define SysConst_SRangeError 65505
-#define SysConst_SIntOverflow 65506
-#define SysConst_SInvalidOp 65507
-#define SysConst_SZeroDivide 65508
-#define SysConst_SOverflow 65509
-#define SysConst_SUnderflow 65510
-#define SysConst_SInvalidPointer 65511
-#define SysConst_SInvalidCast 65512
-#define SysConst_SAccessViolationArg3 65513
-#define SysConst_SAccessViolationNoArg 65514
-#define SysConst_SStackOverflow 65515
-#define SysConst_SControlC 65516
-#define SysConst_SPrivilege 65517
-#define SysConst_SOperationAborted 65518
-#define SysConst_SException 65519
+#define IdResourceStrings_RSStackENOBUFS 64928
+#define IdResourceStrings_RSStackEISCONN 64929
+#define IdResourceStrings_RSStackENOTCONN 64930
+#define IdResourceStrings_RSStackESHUTDOWN 64931
+#define IdResourceStrings_RSStackETOOMANYREFS 64932
+#define IdResourceStrings_RSStackETIMEDOUT 64933
+#define IdResourceStrings_RSStackECONNREFUSED 64934
+#define IdResourceStrings_RSStackELOOP 64935
+#define IdResourceStrings_RSStackENAMETOOLONG 64936
+#define IdResourceStrings_RSStackEHOSTDOWN 64937
+#define IdResourceStrings_RSStackEHOSTUNREACH 64938
+#define IdResourceStrings_RSStackENOTEMPTY 64939
+#define IdResourceStrings_RSStackHOST_NOT_FOUND 64940
+#define JConsts_sChangeJPGSize 64941
+#define JConsts_sJPEGError 64942
+#define JConsts_sJPEGImageFile 64943
+#define IdResourceStrings_RSStackEDESTADDRREQ 64944
+#define IdResourceStrings_RSStackEMSGSIZE 64945
+#define IdResourceStrings_RSStackEPROTOTYPE 64946
+#define IdResourceStrings_RSStackENOPROTOOPT 64947
+#define IdResourceStrings_RSStackEPROTONOSUPPORT 64948
+#define IdResourceStrings_RSStackESOCKTNOSUPPORT 64949
+#define IdResourceStrings_RSStackEOPNOTSUPP 64950
+#define IdResourceStrings_RSStackEPFNOSUPPORT 64951
+#define IdResourceStrings_RSStackEAFNOSUPPORT 64952
+#define IdResourceStrings_RSStackEADDRINUSE 64953
+#define IdResourceStrings_RSStackEADDRNOTAVAIL 64954
+#define IdResourceStrings_RSStackENETDOWN 64955
+#define IdResourceStrings_RSStackENETUNREACH 64956
+#define IdResourceStrings_RSStackENETRESET 64957
+#define IdResourceStrings_RSStackECONNABORTED 64958
+#define IdResourceStrings_RSStackECONNRESET 64959
+#define IdResourceStrings_RSWinsockInitializationError 64960
+#define IdResourceStrings_RSSetSizeExceeded 64961
+#define IdResourceStrings_RSWS2CallError 64962
+#define IdResourceStrings_RSWS2LoadError 64963
+#define IdResourceStrings_RSInvalidServiceName 64964
+#define IdResourceStrings_RSStackError 64965
+#define IdResourceStrings_RSStackEINTR 64966
+#define IdResourceStrings_RSStackEBADF 64967
+#define IdResourceStrings_RSStackEACCES 64968
+#define IdResourceStrings_RSStackEFAULT 64969
+#define IdResourceStrings_RSStackEINVAL 64970
+#define IdResourceStrings_RSStackEMFILE 64971
+#define IdResourceStrings_RSStackEWOULDBLOCK 64972
+#define IdResourceStrings_RSStackEINPROGRESS 64973
+#define IdResourceStrings_RSStackEALREADY 64974
+#define IdResourceStrings_RSStackENOTSOCK 64975
+#define pnglang_EPNGMissingMultipleIDATText 64976
+#define pnglang_EPNGZLIBErrorText 64977
+#define pnglang_EPNGInvalidPaletteText 64978
+#define pnglang_EPNGInvalidFileHeaderText 64979
+#define pnglang_EPNGIHDRNotFirstText 64980
+#define pnglang_EPNGSizeExceedsText 64981
+#define pnglang_EPNGUnknownPalEntryText 64982
+#define pnglang_EPNGUnknownCriticalChunkText 64983
+#define pnglang_EPNGUnknownCompressionText 64984
+#define pnglang_EPNGUnknownInterlaceText 64985
+#define pnglang_EPNGCannotAssignChunkText 64986
+#define pnglang_EPNGUnexpectedEndText 64987
+#define pnglang_EPNGNoImageDataText 64988
+#define pnglang_EPNGCannotChangeSizeText 64989
+#define pnglang_EPNGOutMemoryText 64990
+#define pnglang_EPNGHeaderNotPresentText 64991
+#define DBConsts_SInvalidBcdValue 64992
+#define DBConsts_SCouldNotParseTimeStamp 64993
+#define DBConsts_SInvalidSqlTimeStamp 64994
+#define VDBConsts_SFirstRecord 64995
+#define VDBConsts_SPriorRecord 64996
+#define VDBConsts_SNextRecord 64997
+#define VDBConsts_SLastRecord 64998
+#define VDBConsts_SInsertRecord 64999
+#define VDBConsts_SDeleteRecord 65000
+#define VDBConsts_SEditRecord 65001
+#define VDBConsts_SPostEdit 65002
+#define VDBConsts_SCancelEdit 65003
+#define VDBConsts_SRefreshRecord 65004
+#define VDBConsts_SRemoteLogin 65005
+#define pnglang_EPngInvalidCRCText 65006
+#define pnglang_EPNGInvalidIHDRText 65007
+#define QConsts_SMimeNotSupportedForIcon 65008
+#define QConsts_SOpen 65009
+#define QConsts_SSave 65010
+#define QConsts_SUnknownImageFormat 65011
+#define QConsts_SUnableToWrite 65012
+#define QConsts_SUndo 65013
+#define QConsts_SRedo 65014
+#define QConsts_SLine 65015
+#define QConsts_SCut 65016
+#define QConsts_SCopy 65017
+#define QConsts_SPaste 65018
+#define QConsts_SClear 65019
+#define QConsts_SSelectAll 65020
+#define QConsts_SNoAppInLib 65021
+#define QConsts_SDuplicateApp 65022
+#define DBConsts_SBcdOverflow 65023
+#define QConsts_SCannotDragForm 65024
+#define QConsts_SMsgDlgWarning 65025
+#define QConsts_SMsgDlgError 65026
+#define QConsts_SMsgDlgInformation 65027
+#define QConsts_SMsgDlgConfirm 65028
+#define QConsts_SUnnamed 65029
+#define QConsts_SName 65030
+#define QConsts_SSize 65031
+#define QConsts_SType 65032
+#define QConsts_SDate 65033
+#define QConsts_SAttributes 65034
+#define QConsts_SDuplicateMenus 65035
+#define QConsts_SImageIndexError 65036
+#define QConsts_SInvalidImageDimensions 65037
+#define QConsts_SInvalidImageDimension 65038
+#define QConsts_SInvalidMimeSourceStream 65039
+#define QConsts_SMenuSetFormError 65040
+#define QConsts_SGroupIndexTooLow 65041
+#define QConsts_SNoMDIForm 65042
+#define QConsts_SNotAnMDIForm 65043
+#define QConsts_SMDIChildNotVisible 65044
+#define QConsts_SControlParentSetToSelf 65045
+#define QConsts_SOKButton 65046
+#define QConsts_SCancelButton 65047
+#define QConsts_SYesButton 65048
+#define QConsts_SNoButton 65049
+#define QConsts_SHelpButton 65050
+#define QConsts_SCloseButton 65051
+#define QConsts_SIgnoreButton 65052
+#define QConsts_SRetryButton 65053
+#define QConsts_SAbortButton 65054
+#define QConsts_SAllButton 65055
+#define QConsts_SmkcDel 65056
+#define QConsts_SmkcShift 65057
+#define QConsts_SmkcCtrl 65058
+#define QConsts_SmkcAlt 65059
+#define QConsts_SInvalidPixelFormat 65060
+#define QConsts_SNoCanvasHandle 65061
+#define QConsts_SInvalidCanvasState 65062
+#define QConsts_SInvalidImageSize 65063
+#define QConsts_SInvalidColorDepth 65064
+#define QConsts_SCannotFocus 65065
+#define QConsts_SParentRequired 65066
+#define QConsts_SVisibleChanged 65067
+#define QConsts_SMenuIndexError 65068
+#define QConsts_SMenuReinserted 65069
+#define QConsts_SNoMenuRecursion 65070
+#define QConsts_SMenuNotFound 65071
+#define QConsts_SmkcBkSp 65072
+#define QConsts_SmkcTab 65073
+#define QConsts_SmkcBackTab 65074
+#define QConsts_SmkcEsc 65075
+#define QConsts_SmkcReturn 65076
+#define QConsts_SmkcEnter 65077
+#define QConsts_SmkcSpace 65078
+#define QConsts_SmkcPgUp 65079
+#define QConsts_SmkcPgDn 65080
+#define QConsts_SmkcEnd 65081
+#define QConsts_SmkcHome 65082
+#define QConsts_SmkcLeft 65083
+#define QConsts_SmkcUp 65084
+#define QConsts_SmkcRight 65085
+#define QConsts_SmkcDown 65086
+#define QConsts_SmkcIns 65087
+#define TntSystem_SBufferOverflow 65088
+#define TntSystem_SInvalidUTF7 65089
+#define DKLang_SDKLangErrMsg_DuplicatePropValueID 65090
+#define DKLang_SDKLangErrMsg_ErrorLoadingTran 65091
+#define DKLang_SDKLangErrMsg_InvalidConstName 65092
+#define DKLang_SDKLangErrMsg_DuplicateConstName 65093
+#define DKLang_SDKLangErrMsg_ConstantNotFound 65094
+#define DKLang_SDKLangErrMsg_LangManagerCalledAtDT 65095
+#define DKLang_SDKLangErrMsg_StreamVersionTooHigh 65096
+#define OleConst_SCannotActivate 65097
+#define OleConst_SNoWindowHandle 65098
+#define OleConst_SInvalidLicense 65099
+#define OleConst_SNotLicensed 65100
+#define OleConst_sNoRunningObject 65101
+#define QConsts_SInvalidCreateWidget 65102
+#define QConsts_STooManyMessageBoxButtons 65103
+#define TeeConst_TeeMsg_FunctionLow 65104
+#define TeeConst_TeeMsg_FunctionAverage 65105
+#define TeeConst_TeeMsg_DefaultFontName 65106
+#define TeeConst_TeeMsg_CheckPointerSize 65107
+#define TeeConst_TeeMsg_FunctionPeriod 65108
+#define TeeConst_TeeMsg_PieOther 65109
+#define TeeConst_TeeMsg_ValuesX 65110
+#define TeeConst_TeeMsg_ValuesY 65111
+#define TeeConst_TeeMsg_ValuesPie 65112
+#define TeeConst_TeeMsg_ValuesBar 65113
+#define TeeConst_TeeMsg_ValuesAngle 65114
+#define TeeConst_TeeMsg_ValuesGanttStart 65115
+#define TeeConst_TeeMsg_ValuesGanttEnd 65116
+#define TeeConst_TeeMsg_ValuesGanttNextTask 65117
+#define TeeConst_TeeMsg_ValuesArrowEndX 65118
+#define TeeConst_TeeMsg_ValuesArrowEndY 65119
+#define TeeConst_TeeMsg_GanttSample1 65120
+#define TeeConst_TeeMsg_GanttSample2 65121
+#define TeeConst_TeeMsg_GanttSample3 65122
+#define TeeConst_TeeMsg_GanttSample4 65123
+#define TeeConst_TeeMsg_GanttSample5 65124
+#define TeeConst_TeeMsg_GanttSample6 65125
+#define TeeConst_TeeMsg_GanttSample7 65126
+#define TeeConst_TeeMsg_GanttSample8 65127
+#define TeeConst_TeeMsg_GanttSample9 65128
+#define TeeConst_TeeMsg_GanttSample10 65129
+#define TeeConst_TeeMsg_DefaultFontSize 65130
+#define TeeConst_TeeMsg_FunctionAdd 65131
+#define TeeConst_TeeMsg_FunctionSubtract 65132
+#define TeeConst_TeeMsg_FunctionMultiply 65133
+#define TeeConst_TeeMsg_FunctionDivide 65134
+#define TeeConst_TeeMsg_FunctionHigh 65135
+#define TeeConst_TeeMsg_GalleryHorizBar 65136
+#define TeeConst_TeeMsg_GalleryPie 65137
+#define TeeConst_TeeMsg_GalleryFastLine 65138
+#define TeeConst_TeeMsg_Rotation 65139
+#define TeeConst_TeeMsg_PieSample1 65140
+#define TeeConst_TeeMsg_PieSample2 65141
+#define TeeConst_TeeMsg_PieSample3 65142
+#define TeeConst_TeeMsg_PieSample4 65143
+#define TeeConst_TeeMsg_PieSample5 65144
+#define TeeConst_TeeMsg_PieSample6 65145
+#define TeeConst_TeeMsg_PieSample7 65146
+#define TeeConst_TeeMsg_PieSample8 65147
+#define TeeConst_TeeMsg_GalleryStandard 65148
+#define TeeConst_TeeMsg_GalleryFunctions 65149
+#define TeeConst_TeeMsg_GalleryArrow 65150
+#define TeeConst_TeeMsg_GalleryGantt 65151
+#define TeeConst_TeeMsg_AxisMaxMin 65152
+#define TeeConst_TeeMsg_AxisLogBase 65153
+#define TeeConst_TeeMsg_MaxPointsPerPage 65154
+#define TeeConst_TeeMsg_3dPercent 65155
+#define TeeConst_TeeMsg_CircularSeries 65156
+#define TeeConst_TeeMsg_BarWidthPercent 65157
+#define TeeConst_TeeMsg_BarOffsetPercent 65158
+#define TeeConst_TeeMsg_DefaultPercentOf 65159
+#define TeeConst_TeeMsg_DefPercentFormat 65160
+#define TeeConst_TeeMsg_DefValueFormat 65161
+#define TeeConst_TeeMsg_AxisTitle 65162
+#define TeeConst_TeeMsg_AxisLabels 65163
+#define TeeConst_TeeMsg_GalleryLine 65164
+#define TeeConst_TeeMsg_GalleryPoint 65165
+#define TeeConst_TeeMsg_GalleryArea 65166
+#define TeeConst_TeeMsg_GalleryBar 65167
+#define ComConst_SDAXError 65168
+#define ComConst_SAutomationWarning 65169
+#define ComConst_SNoCloseActiveServer1 65170
+#define ComConst_SNoCloseActiveServer2 65171
+#define TeeConst_TeeMsg_LegendTopPos 65172
+#define TeeConst_TeeMsg_LegendFirstValue 65173
+#define TeeConst_TeeMsg_LegendColorWidth 65174
+#define TeeConst_TeeMsg_SeriesSetDataSource 65175
+#define TeeConst_TeeMsg_SeriesInvDataSource 65176
+#define TeeConst_TeeMsg_FillSample 65177
+#define TeeConst_TeeMsg_Angle 65178
+#define TeeConst_TeeMsg_AxisLogDateTime 65179
+#define TeeConst_TeeMsg_AxisLogNotPositive 65180
+#define TeeConst_TeeMsg_AxisLabelSep 65181
+#define TeeConst_TeeMsg_AxisIncrementNeg 65182
+#define TeeConst_TeeMsg_AxisMinMax 65183
+#define ComStrs_sNeedAllowNone 65184
+#define ComStrs_sFailSetCalDateTime 65185
+#define ComStrs_sFailSetCalMaxSelRange 65186
+#define ComStrs_sFailSetCalMinMaxRange 65187
+#define ComStrs_sFailsetCalSelRange 65188
+#define WinHelpViewer_hNoKeyword 65189
+#define ComConst_SCreateRegKeyError 65190
+#define ComConst_SOleError 65191
+#define ComConst_SObjectFactoryMissing 65192
+#define ComConst_STypeInfoMissing 65193
+#define ComConst_SBadTypeInfo 65194
+#define ComConst_SDispIntfMissing 65195
+#define ComConst_SNoMethod 65196
+#define ComConst_SVarNotObject 65197
+#define ComConst_STooManyParams 65198
+#define ComConst_SDCOMNotInstalled 65199
+#define ComStrs_sTabFailRetrieve 65200
+#define ComStrs_sTabFailGetObject 65201
+#define ComStrs_sTabFailSet 65202
+#define ComStrs_sTabFailSetObject 65203
+#define ComStrs_sTabMustBeMultiLine 65204
+#define ComStrs_sInvalidIndex 65205
+#define ComStrs_sInsertError 65206
+#define ComStrs_sInvalidOwner 65207
+#define ComStrs_sRichEditInsertError 65208
+#define ComStrs_sRichEditLoadFail 65209
+#define ComStrs_sRichEditSaveFail 65210
+#define ComStrs_sUDAssociated 65211
+#define ComStrs_sPageIndexError 65212
+#define ComStrs_sInvalidComCtl32 65213
+#define ComStrs_sDateTimeMax 65214
+#define ComStrs_sDateTimeMin 65215
+#define ExtCtrls_clNameInactiveBorder 65216
+#define ExtCtrls_clNameInactiveCaption 65217
+#define ExtCtrls_clNameInactiveCaptionText 65218
+#define ExtCtrls_clNameInfoBk 65219
+#define ExtCtrls_clNameInfoText 65220
+#define ExtCtrls_clNameMenu 65221
+#define ExtCtrls_clNameMenuText 65222
+#define ExtCtrls_clNameNone 65223
+#define ExtCtrls_clNameScrollBar 65224
+#define ExtCtrls_clName3DDkShadow 65225
+#define ExtCtrls_clName3DLight 65226
+#define ExtCtrls_clNameWindow 65227
+#define ExtCtrls_clNameWindowFrame 65228
+#define ExtCtrls_clNameWindowText 65229
+#define ComStrs_sTabFailClear 65230
+#define ComStrs_sTabFailDelete 65231
+#define ExtCtrls_clNameSkyBlue 65232
+#define ExtCtrls_clNameCream 65233
+#define ExtCtrls_clNameMedGray 65234
+#define ExtCtrls_clNameActiveBorder 65235
+#define ExtCtrls_clNameActiveCaption 65236
+#define ExtCtrls_clNameAppWorkSpace 65237
+#define ExtCtrls_clNameBackground 65238
+#define ExtCtrls_clNameBtnFace 65239
+#define ExtCtrls_clNameBtnHighlight 65240
+#define ExtCtrls_clNameBtnShadow 65241
+#define ExtCtrls_clNameBtnText 65242
+#define ExtCtrls_clNameCaptionText 65243
+#define ExtCtrls_clNameDefault 65244
+#define ExtCtrls_clNameGrayText 65245
+#define ExtCtrls_clNameHighlight 65246
+#define ExtCtrls_clNameHighlightText 65247
+#define ExtCtrls_clNameMaroon 65248
+#define ExtCtrls_clNameGreen 65249
+#define ExtCtrls_clNameOlive 65250
+#define ExtCtrls_clNameNavy 65251
+#define ExtCtrls_clNamePurple 65252
+#define ExtCtrls_clNameTeal 65253
+#define ExtCtrls_clNameGray 65254
+#define ExtCtrls_clNameSilver 65255
+#define ExtCtrls_clNameRed 65256
+#define ExtCtrls_clNameLime 65257
+#define ExtCtrls_clNameYellow 65258
+#define ExtCtrls_clNameBlue 65259
+#define ExtCtrls_clNameFuchsia 65260
+#define ExtCtrls_clNameAqua 65261
+#define ExtCtrls_clNameWhite 65262
+#define ExtCtrls_clNameMoneyGreen 65263
+#define Consts_SPreviewLabel 65264
+#define Consts_SCannotOpenAVI 65265
+#define Consts_SDockedCtlNeedsName 65266
+#define Consts_SDockTreeRemoveError 65267
+#define Consts_SDockZoneNotFound 65268
+#define Consts_SDockZoneHasNoCtl 65269
+#define Consts_SMultiSelectRequired 65270
+#define Consts_SSeparator 65271
+#define Consts_SErrorSettingCount 65272
+#define Consts_SListBoxMustBeVirtual 65273
+#define Consts_SNoGetItemEventHandler 65274
+#define HelpIntfs_hNoTableOfContents 65275
+#define HelpIntfs_hNothingFound 65276
+#define HelpIntfs_hNoContext 65277
+#define HelpIntfs_hNoTopics 65278
+#define ExtCtrls_clNameBlack 65279
+#define Consts_SmkcShift 65280
+#define Consts_SmkcCtrl 65281
+#define Consts_SmkcAlt 65282
+#define Consts_srNone 65283
+#define Consts_SOutOfRange 65284
+#define Consts_sAllFilter 65285
+#define Consts_SInsertLineError 65286
+#define Consts_SInvalidClipFmt 65287
+#define Consts_SIconToClipboard 65288
+#define Consts_SCannotOpenClipboard 65289
+#define Consts_SInvalidMemoSize 65290
+#define Consts_SInvalidPrinterOp 65291
+#define Consts_SNoDefaultPrinter 65292
+#define Consts_SDuplicateMenus 65293
+#define Consts_SPictureLabel 65294
+#define Consts_SPictureDesc 65295
+#define Consts_SMsgDlgYesToAll 65296
+#define Consts_SmkcBkSp 65297
+#define Consts_SmkcTab 65298
+#define Consts_SmkcEsc 65299
+#define Consts_SmkcEnter 65300
+#define Consts_SmkcSpace 65301
+#define Consts_SmkcPgUp 65302
+#define Consts_SmkcPgDn 65303
+#define Consts_SmkcEnd 65304
+#define Consts_SmkcHome 65305
+#define Consts_SmkcLeft 65306
+#define Consts_SmkcUp 65307
+#define Consts_SmkcRight 65308
+#define Consts_SmkcDown 65309
+#define Consts_SmkcIns 65310
+#define Consts_SmkcDel 65311
+#define Consts_SMaskErr 65312
+#define Consts_SMaskEditErr 65313
+#define Consts_SMsgDlgWarning 65314
+#define Consts_SMsgDlgError 65315
+#define Consts_SMsgDlgInformation 65316
+#define Consts_SMsgDlgConfirm 65317
+#define Consts_SMsgDlgYes 65318
+#define Consts_SMsgDlgNo 65319
+#define Consts_SMsgDlgOK 65320
+#define Consts_SMsgDlgCancel 65321
+#define Consts_SMsgDlgHelp 65322
+#define Consts_SMsgDlgAbort 65323
+#define Consts_SMsgDlgRetry 65324
+#define Consts_SMsgDlgIgnore 65325
+#define Consts_SMsgDlgAll 65326
+#define Consts_SMsgDlgNoToAll 65327
+#define Consts_SControlParentSetToSelf 65328
+#define Consts_SOKButton 65329
+#define Consts_SCancelButton 65330
+#define Consts_SYesButton 65331
+#define Consts_SNoButton 65332
+#define Consts_SHelpButton 65333
+#define Consts_SCloseButton 65334
+#define Consts_SIgnoreButton 65335
+#define Consts_SRetryButton 65336
+#define Consts_SAbortButton 65337
+#define Consts_SAllButton 65338
+#define Consts_SCannotDragForm 65339
+#define Consts_SVMetafiles 65340
+#define Consts_SVEnhMetafiles 65341
+#define Consts_SVIcons 65342
+#define Consts_SVBitmaps 65343
+#define Consts_SMDIChildNotVisible 65344
+#define Consts_SVisibleChanged 65345
+#define Consts_SCannotShowModal 65346
+#define Consts_SScrollBarRange 65347
+#define Consts_SPropertyOutOfRange 65348
+#define Consts_SMenuIndexError 65349
+#define Consts_SMenuReinserted 65350
+#define Consts_SMenuNotFound 65351
+#define Consts_SNoTimers 65352
+#define Consts_SNotPrinting 65353
+#define Consts_SPrinting 65354
+#define Consts_SPrinterIndexError 65355
+#define Consts_SInvalidPrinter 65356
+#define Consts_SDeviceOnPort 65357
+#define Consts_SGroupIndexTooLow 65358
+#define Consts_SNoMDIForm 65359
+#define Consts_SOleGraphic 65360
+#define Consts_SUnknownExtension 65361
+#define Consts_SUnknownClipboardFormat 65362
+#define Consts_SOutOfResources 65363
+#define Consts_SNoCanvasHandle 65364
+#define Consts_SInvalidImageSize 65365
+#define Consts_SInvalidImageList 65366
+#define Consts_SReplaceImage 65367
+#define Consts_SImageIndexError 65368
+#define Consts_SImageReadFail 65369
+#define Consts_SImageWriteFail 65370
+#define Consts_SWindowDCError 65371
+#define Consts_SWindowClass 65372
+#define Consts_SCannotFocus 65373
+#define Consts_SParentRequired 65374
+#define Consts_SParentGivenNotAParent 65375
+#define RTLConsts_SSortedListError 65376
+#define RTLConsts_STooManyDeleted 65377
+#define RTLConsts_SUnknownGroup 65378
+#define RTLConsts_SUnknownProperty 65379
+#define RTLConsts_SWriteError 65380
+#define RTLConsts_SThreadCreateError 65381
+#define RTLConsts_SThreadError 65382
+#define Consts_SInvalidTabPosition 65383
+#define Consts_SInvalidTabStyle 65384
+#define Consts_SInvalidBitmap 65385
+#define Consts_SInvalidIcon 65386
+#define Consts_SInvalidMetafile 65387
+#define Consts_SInvalidPixelFormat 65388
+#define Consts_SInvalidImage 65389
+#define Consts_SScanLine 65390
+#define Consts_SChangeIconSize 65391
+#define RTLConsts_SInvalidPropertyPath 65392
+#define RTLConsts_SInvalidPropertyType 65393
+#define RTLConsts_SInvalidPropertyValue 65394
+#define RTLConsts_SInvalidRegType 65395
+#define RTLConsts_SInvalidStringGridOp 65396
+#define RTLConsts_SListCapacityError 65397
+#define RTLConsts_SListCountError 65398
+#define RTLConsts_SListIndexError 65399
+#define RTLConsts_SMemoryStreamError 65400
+#define RTLConsts_SPropertyException 65401
+#define RTLConsts_SReadError 65402
+#define RTLConsts_SReadOnlyProperty 65403
+#define RTLConsts_SRegGetDataFailed 65404
+#define RTLConsts_SRegSetDataFailed 65405
+#define RTLConsts_SResNotFound 65406
+#define RTLConsts_SSeekNotImplemented 65407
+#define RTLConsts_SDuplicateClass 65408
+#define RTLConsts_SDuplicateItem 65409
+#define RTLConsts_SDuplicateName 65410
+#define RTLConsts_SDuplicateString 65411
+#define RTLConsts_SFCreateErrorEx 65412
+#define RTLConsts_SFixedColTooBig 65413
+#define RTLConsts_SFixedRowTooBig 65414
+#define RTLConsts_SFOpenErrorEx 65415
+#define RTLConsts_SGridTooLarge 65416
+#define RTLConsts_SIndexOutOfRange 65417
+#define RTLConsts_SIniFileWriteError 65418
+#define RTLConsts_SInvalidImage 65419
+#define RTLConsts_SInvalidMask 65420
+#define RTLConsts_SInvalidName 65421
+#define RTLConsts_SInvalidProperty 65422
+#define RTLConsts_SInvalidPropertyElement 65423
+#define SysConst_SShortDayNameFri 65424
+#define SysConst_SShortDayNameSat 65425
+#define SysConst_SLongDayNameSun 65426
+#define SysConst_SLongDayNameMon 65427
+#define SysConst_SLongDayNameTue 65428
+#define SysConst_SLongDayNameWed 65429
+#define SysConst_SLongDayNameThu 65430
+#define SysConst_SLongDayNameFri 65431
+#define SysConst_SLongDayNameSat 65432
+#define SysConst_SCannotCreateDir 65433
+#define RTLConsts_SAncestorNotFound 65434
+#define RTLConsts_SAssignError 65435
+#define RTLConsts_SBitsIndexError 65436
+#define RTLConsts_SCantWriteResourceStreamError 65437
+#define RTLConsts_SCheckSynchronizeError 65438
+#define RTLConsts_SClassNotFound 65439
+#define SysConst_SLongMonthNameFeb 65440
+#define SysConst_SLongMonthNameMar 65441
+#define SysConst_SLongMonthNameApr 65442
+#define SysConst_SLongMonthNameMay 65443
+#define SysConst_SLongMonthNameJun 65444
+#define SysConst_SLongMonthNameJul 65445
+#define SysConst_SLongMonthNameAug 65446
+#define SysConst_SLongMonthNameSep 65447
+#define SysConst_SLongMonthNameOct 65448
+#define SysConst_SLongMonthNameNov 65449
+#define SysConst_SLongMonthNameDec 65450
+#define SysConst_SShortDayNameSun 65451
+#define SysConst_SShortDayNameMon 65452
+#define SysConst_SShortDayNameTue 65453
+#define SysConst_SShortDayNameWed 65454
+#define SysConst_SShortDayNameThu 65455
+#define SysConst_SModuleAccessViolation 65456
+#define SysConst_SOSError 65457
+#define SysConst_SUnkOSError 65458
+#define SysConst_SShortMonthNameJan 65459
+#define SysConst_SShortMonthNameFeb 65460
+#define SysConst_SShortMonthNameMar 65461
+#define SysConst_SShortMonthNameApr 65462
+#define SysConst_SShortMonthNameMay 65463
+#define SysConst_SShortMonthNameJun 65464
+#define SysConst_SShortMonthNameJul 65465
+#define SysConst_SShortMonthNameAug 65466
+#define SysConst_SShortMonthNameSep 65467
+#define SysConst_SShortMonthNameOct 65468
+#define SysConst_SShortMonthNameNov 65469
+#define SysConst_SShortMonthNameDec 65470
+#define SysConst_SLongMonthNameJan 65471
+#define SysConst_SVarTypeAlreadyUsedWithPrefix 65472
+#define SysConst_SVarTypeNotUsableWithPrefix 65473
+#define SysConst_SVarTypeTooManyCustom 65474
+#define SysConst_SVarTypeCouldNotConvert 65475
+#define SysConst_SVarTypeConvertOverflow 65476
+#define SysConst_SVarOverflow 65477
+#define SysConst_SVarInvalid 65478
+#define SysConst_SVarBadType 65479
+#define SysConst_SVarNotImplemented 65480
+#define SysConst_SVarUnexpected 65481
+#define SysConst_SExternalException 65482
+#define SysConst_SAssertionFailed 65483
+#define SysConst_SIntfCastError 65484
+#define SysConst_SSafecallException 65485
+#define SysConst_SAssertError 65486
+#define SysConst_SAbstractError 65487
+#define SysConst_SException 65488
+#define SysConst_SExceptTitle 65489
+#define SysConst_SInvalidFormat 65490
+#define SysConst_SArgumentMissing 65491
+#define SysConst_SDispatchError 65492
+#define SysConst_SReadAccess 65493
+#define SysConst_SWriteAccess 65494
+#define SysConst_SFormatTooLong 65495
+#define SysConst_SVarArrayCreate 65496
+#define SysConst_SVarArrayBounds 65497
+#define SysConst_SVarArrayLocked 65498
+#define SysConst_SInvalidVarCast 65499
+#define SysConst_SInvalidVarOp 65500
+#define SysConst_SInvalidVarNullOp 65501
+#define SysConst_SInvalidVarOpWithHResultWithPrefix 65502
+#define SysConst_SVarTypeOutOfRangeWithPrefix 65503
+#define SysConst_SInvalidInput 65504
+#define SysConst_SDivByZero 65505
+#define SysConst_SRangeError 65506
+#define SysConst_SIntOverflow 65507
+#define SysConst_SInvalidOp 65508
+#define SysConst_SZeroDivide 65509
+#define SysConst_SOverflow 65510
+#define SysConst_SUnderflow 65511
+#define SysConst_SInvalidPointer 65512
+#define SysConst_SInvalidCast 65513
+#define SysConst_SAccessViolationArg3 65514
+#define SysConst_SAccessViolationNoArg 65515
+#define SysConst_SStackOverflow 65516
+#define SysConst_SControlC 65517
+#define SysConst_SPrivilege 65518
+#define SysConst_SOperationAborted 65519
 #define SysConst_SInvalidInteger 65520
 #define SysConst_SInvalidFloat 65521
@@ -604,31 +606,21 @@
 #define SysConst_SInvalidTime 65523
 #define SysConst_SInvalidDateTime 65524
-#define SysConst_STimeEncodeError 65525
-#define SysConst_SDateEncodeError 65526
-#define SysConst_SOutOfMemory 65527
-#define SysConst_SInOutError 65528
-#define SysConst_SFileNotFound 65529
-#define SysConst_SInvalidFilename 65530
-#define SysConst_STooManyOpenFiles 65531
-#define SysConst_SAccessDenied 65532
-#define SysConst_SEndOfFile 65533
-#define SysConst_SDiskFull 65534
-#define SysConst_SInvalidInput 65535
+#define SysConst_SInvalidBoolean 65525
+#define SysConst_STimeEncodeError 65526
+#define SysConst_SDateEncodeError 65527
+#define SysConst_SOutOfMemory 65528
+#define SysConst_SInOutError 65529
+#define SysConst_SFileNotFound 65530
+#define SysConst_SInvalidFilename 65531
+#define SysConst_STooManyOpenFiles 65532
+#define SysConst_SAccessDenied 65533
+#define SysConst_SEndOfFile 65534
+#define SysConst_SDiskFull 65535
 STRINGTABLE
 BEGIN
-	pnglang_EPNGSizeExceedsText,	"This \"Portable Network Graphics\" image is not supported because either it's width or height exceeds the maximum size, which is 65535 pixels length."
-	pnglang_EPNGUnknownPalEntryText,	"There is no such palette entry."
-	pnglang_EPNGUnknownCriticalChunkText,	"This \"Portable Network Graphics\" image contains an unknown critical part which could not be decoded."
-	pnglang_EPNGUnknownCompressionText,	"This \"Portable Network Graphics\" image is encoded with an unknown compression scheme which could not be decoded."
-	pnglang_EPNGUnknownInterlaceText,	"This \"Portable Network Graphics\" image uses an unknown interlace scheme which could not be decoded."
-	pnglang_EPNGCannotAssignChunkText,	"The chunks must be compatible to be assigned."
-	pnglang_EPNGUnexpectedEndText,	"This \"Portable Network Graphics\" image is invalid because the decoder found an unexpected end of the file."
-	pnglang_EPNGNoImageDataText,	"This \"Portable Network Graphics\" image contains no data."
-	pnglang_EPNGCannotChangeSizeText,	"The \"Portable Network Graphics\" image can not be resize by changing width and height properties. Try assigning the image from a bitmap."
-	pnglang_EPNGOutMemoryText,	"Some operation could not be performed because the system is out of resources. Close some windows and try again."
-	pnglang_EPNGHeaderNotPresentText,	"This operation is not valid because the current image contains no valid header."
-	JConsts_sChangeJPGSize,	"Cannot change the size of a JPEG image"
-	JConsts_sJPEGError,	"JPEG error #%d"
-	JConsts_sJPEGImageFile,	"JPEG Image File"
+	IdResourceStrings_RSStackENOBUFS,	"No buffer space available."
+	IdResourceStrings_RSStackEISCONN,	"Socket is already connected."
+	IdResourceStrings_RSStackENOTCONN,	"Socket is not connected."
+	IdResourceStrings_RSStackESHUTDOWN,	"Cannot send or receive after socket is closed."
 	IdResourceStrings_RSStackETOOMANYREFS,	"Too many references, cannot splice."
 	IdResourceStrings_RSStackETIMEDOUT,	"Connection timed out."
@@ -640,11 +632,11 @@
 	IdResourceStrings_RSStackENOTEMPTY,	"Directory not empty"
 	IdResourceStrings_RSStackHOST_NOT_FOUND,	"Host not found."
-	pnglang_EPngInvalidCRCText,	"This \"Portable Network Graphics\" image is not valid because it contains invalid pieces of data (crc error)"
-	pnglang_EPNGInvalidIHDRText,	"The \"Portable Network Graphics\" image could not be loaded because one of its main piece of data (ihdr) might be corrupted"
-	pnglang_EPNGMissingMultipleIDATText,	"This \"Portable Network Graphics\" image is invalid because it has missing image parts."
-	pnglang_EPNGZLIBErrorText,	"Could not decompress the image because it contains invalid compressed data.\r\n Description: "
-	pnglang_EPNGInvalidPaletteText,	"The \"Portable Network Graphics\" image contains an invalid palette."
-	pnglang_EPNGInvalidFileHeaderText,	"The file being readed is not a valid \"Portable Network Graphics\" image because it contains an invalid header. This file may be corruped, try obtaining it again."
-	pnglang_EPNGIHDRNotFirstText,	"This \"Portable Network Graphics\" image is not supported or it might be invalid.\r\n(IHDR chunk is not the first)"
+	JConsts_sChangeJPGSize,	"Cannot change the size of a JPEG image"
+	JConsts_sJPEGError,	"JPEG error #%d"
+	JConsts_sJPEGImageFile,	"JPEG Image File"
+	IdResourceStrings_RSStackEDESTADDRREQ,	"Destination address required."
+	IdResourceStrings_RSStackEMSGSIZE,	"Message too long."
+	IdResourceStrings_RSStackEPROTOTYPE,	"Protocol wrong type for socket."
+	IdResourceStrings_RSStackENOPROTOOPT,	"Bad protocol option."
 	IdResourceStrings_RSStackEPROTONOSUPPORT,	"Protocol not supported."
 	IdResourceStrings_RSStackESOCKTNOSUPPORT,	"Socket type not supported."
@@ -659,8 +651,8 @@
 	IdResourceStrings_RSStackECONNABORTED,	"Software caused connection abort."
 	IdResourceStrings_RSStackECONNRESET,	"Connection reset by peer."
-	IdResourceStrings_RSStackENOBUFS,	"No buffer space available."
-	IdResourceStrings_RSStackEISCONN,	"Socket is already connected."
-	IdResourceStrings_RSStackENOTCONN,	"Socket is not connected."
-	IdResourceStrings_RSStackESHUTDOWN,	"Cannot send or receive after socket is closed."
+	IdResourceStrings_RSWinsockInitializationError,	"Winsock Initialization Error."
+	IdResourceStrings_RSSetSizeExceeded,	"Set Size Exceeded."
+	IdResourceStrings_RSWS2CallError,	"Error on call Winsock2 library function %s"
+	IdResourceStrings_RSWS2LoadError,	"Error on loading Winsock2 library (%s)"
 	IdResourceStrings_RSInvalidServiceName,	"%s is not a valid service."
 	IdResourceStrings_RSStackError,	"Socket Error # %d\r\n%s"
@@ -675,8 +667,22 @@
 	IdResourceStrings_RSStackEALREADY,	"Operation already in progress."
 	IdResourceStrings_RSStackENOTSOCK,	"Socket operation on non-socket."
-	IdResourceStrings_RSStackEDESTADDRREQ,	"Destination address required."
-	IdResourceStrings_RSStackEMSGSIZE,	"Message too long."
-	IdResourceStrings_RSStackEPROTOTYPE,	"Protocol wrong type for socket."
-	IdResourceStrings_RSStackENOPROTOOPT,	"Bad protocol option."
+	pnglang_EPNGMissingMultipleIDATText,	"This \"Portable Network Graphics\" image is invalid because it has missing image parts."
+	pnglang_EPNGZLIBErrorText,	"Could not decompress the image because it contains invalid compressed data.\r\n Description: "
+	pnglang_EPNGInvalidPaletteText,	"The \"Portable Network Graphics\" image contains an invalid palette."
+	pnglang_EPNGInvalidFileHeaderText,	"The file being readed is not a valid \"Portable Network Graphics\" image because it contains an invalid header. This file may be corruped, try obtaining it again."
+	pnglang_EPNGIHDRNotFirstText,	"This \"Portable Network Graphics\" image is not supported or it might be invalid.\r\n(IHDR chunk is not the first)"
+	pnglang_EPNGSizeExceedsText,	"This \"Portable Network Graphics\" image is not supported because either it's width or height exceeds the maximum size, which is 65535 pixels length."
+	pnglang_EPNGUnknownPalEntryText,	"There is no such palette entry."
+	pnglang_EPNGUnknownCriticalChunkText,	"This \"Portable Network Graphics\" image contains an unknown critical part which could not be decoded."
+	pnglang_EPNGUnknownCompressionText,	"This \"Portable Network Graphics\" image is encoded with an unknown compression scheme which could not be decoded."
+	pnglang_EPNGUnknownInterlaceText,	"This \"Portable Network Graphics\" image uses an unknown interlace scheme which could not be decoded."
+	pnglang_EPNGCannotAssignChunkText,	"The chunks must be compatible to be assigned."
+	pnglang_EPNGUnexpectedEndText,	"This \"Portable Network Graphics\" image is invalid because the decoder found an unexpected end of the file."
+	pnglang_EPNGNoImageDataText,	"This \"Portable Network Graphics\" image contains no data."
+	pnglang_EPNGCannotChangeSizeText,	"The \"Portable Network Graphics\" image can not be resize by changing width and height properties. Try assigning the image from a bitmap."
+	pnglang_EPNGOutMemoryText,	"Some operation could not be performed because the system is out of resources. Close some windows and try again."
+	pnglang_EPNGHeaderNotPresentText,	"This operation is not valid because the current image contains no valid header."
+	DBConsts_SInvalidBcdValue,	"%s is not a valid BCD value"
+	DBConsts_SCouldNotParseTimeStamp,	"Could not parse SQL TimeStamp string"
 	DBConsts_SInvalidSqlTimeStamp,	"Invalid SQL date/time values"
 	VDBConsts_SFirstRecord,	"First record"
@@ -691,8 +697,8 @@
 	VDBConsts_SRefreshRecord,	"Refresh data"
 	VDBConsts_SRemoteLogin,	"Remote Login"
-	IdResourceStrings_RSWinsockInitializationError,	"Winsock Initialization Error."
-	IdResourceStrings_RSSetSizeExceeded,	"Set Size Exceeded."
-	IdResourceStrings_RSWS2CallError,	"Error on call Winsock2 library function %s"
-	IdResourceStrings_RSWS2LoadError,	"Error on loading Winsock2 library (%s)"
+	pnglang_EPngInvalidCRCText,	"This \"Portable Network Graphics\" image is not valid because it contains invalid pieces of data (crc error)"
+	pnglang_EPNGInvalidIHDRText,	"The \"Portable Network Graphics\" image could not be loaded because one of its main piece of data (ihdr) might be corrupted"
+	QConsts_SMimeNotSupportedForIcon,	"Mime format not supported for TIcon"
+	QConsts_SOpen,	"Open"
 	QConsts_SSave,	"Save"
 	QConsts_SUnknownImageFormat,	"Image format not recognized"
@@ -709,6 +715,6 @@
 	QConsts_SDuplicateApp,	"Fatal error: Cannot create more than one TApplication instance"
 	DBConsts_SBcdOverflow,	"BCD overflow"
-	DBConsts_SInvalidBcdValue,	"%s is not a valid BCD value"
-	DBConsts_SCouldNotParseTimeStamp,	"Could not parse SQL TimeStamp string"
+	QConsts_SCannotDragForm,	"Cannot drag a form"
+	QConsts_SMsgDlgWarning,	"Warning"
 	QConsts_SMsgDlgError,	"Error"
 	QConsts_SMsgDlgInformation,	"Information"
@@ -725,6 +731,6 @@
 	QConsts_SInvalidImageDimension,	"Invalid image dimension"
 	QConsts_SInvalidMimeSourceStream,	"MimeSource format must have an associated data stream"
-	QConsts_SMimeNotSupportedForIcon,	"Mime format not supported for TIcon"
-	QConsts_SOpen,	"Open"
+	QConsts_SMenuSetFormError,	"TMenu.SetForm: argument must be TCustomForm"
+	QConsts_SGroupIndexTooLow,	"GroupIndex cannot be less than a previous menu item's GroupIndex"
 	QConsts_SNoMDIForm,	"Cannot create form. No MDI forms are currently active"
 	QConsts_SNotAnMDIForm,	"Invalid MDIParent for class %s"
@@ -741,6 +747,6 @@
 	QConsts_SAbortButton,	"Abort"
 	QConsts_SAllButton,	"&All"
-	QConsts_SCannotDragForm,	"Cannot drag a form"
-	QConsts_SMsgDlgWarning,	"Warning"
+	QConsts_SmkcDel,	"Del"
+	QConsts_SmkcShift,	"Shift+"
 	QConsts_SmkcCtrl,	"Ctrl+"
 	QConsts_SmkcAlt,	"Alt+"
@@ -757,6 +763,6 @@
 	QConsts_SNoMenuRecursion,	"Menu insertion recursion not allowed"
 	QConsts_SMenuNotFound,	"Sub-menu is not in menu"
-	QConsts_SMenuSetFormError,	"TMenu.SetForm: argument must be TCustomForm"
-	QConsts_SGroupIndexTooLow,	"GroupIndex cannot be less than a previous menu item's GroupIndex"
+	QConsts_SmkcBkSp,	"Backspace"
+	QConsts_SmkcTab,	"Tab"
 	QConsts_SmkcBackTab,	"BackTab"
 	QConsts_SmkcEsc,	"Esc"
@@ -773,6 +779,6 @@
 	QConsts_SmkcDown,	"Down"
 	QConsts_SmkcIns,	"Ins"
-	QConsts_SmkcDel,	"Del"
-	QConsts_SmkcShift,	"Shift+"
+	TntSystem_SBufferOverflow,	"Buffer overflow"
+	TntSystem_SInvalidUTF7,	"Invalid UTF7"
 	DKLang_SDKLangErrMsg_DuplicatePropValueID,	"Duplicate property value translation ID (%d)"
 	DKLang_SDKLangErrMsg_ErrorLoadingTran,	"Loading translations failed.\r\nLine %d: %s"
@@ -789,6 +795,6 @@
 	QConsts_SInvalidCreateWidget,	"Class %s could not create QT widget"
 	QConsts_STooManyMessageBoxButtons,	"Too many buttons specified for message box"
-	QConsts_SmkcBkSp,	"Backspace"
-	QConsts_SmkcTab,	"Tab"
+	TeeConst_TeeMsg_FunctionLow,	"Low"
+	TeeConst_TeeMsg_FunctionAverage,	"Average"
 	TeeConst_TeeMsg_DefaultFontName,	"Arial"
 	TeeConst_TeeMsg_CheckPointerSize,	"Pointer size must be greater than zero"
@@ -805,6 +811,6 @@
 	TeeConst_TeeMsg_ValuesArrowEndX,	"EndX"
 	TeeConst_TeeMsg_ValuesArrowEndY,	"EndY"
-	TntSystem_SBufferOverflow,	"Buffer overflow"
-	TntSystem_SInvalidUTF7,	"Invalid UTF7"
+	TeeConst_TeeMsg_GanttSample1,	"Design"
+	TeeConst_TeeMsg_GanttSample2,	"Prototyping"
 	TeeConst_TeeMsg_GanttSample3,	"Development"
 	TeeConst_TeeMsg_GanttSample4,	"Sales"
@@ -821,6 +827,6 @@
 	TeeConst_TeeMsg_FunctionDivide,	"Divide"
 	TeeConst_TeeMsg_FunctionHigh,	"High"
-	TeeConst_TeeMsg_FunctionLow,	"Low"
-	TeeConst_TeeMsg_FunctionAverage,	"Average"
+	TeeConst_TeeMsg_GalleryHorizBar,	"Horiz. Bar"
+	TeeConst_TeeMsg_GalleryPie,	"Pie"
 	TeeConst_TeeMsg_GalleryFastLine,	"Fast Line"
 	TeeConst_TeeMsg_Rotation,	"Rotation"
@@ -837,6 +843,6 @@
 	TeeConst_TeeMsg_GalleryArrow,	"Arrow"
 	TeeConst_TeeMsg_GalleryGantt,	"Gantt"
-	TeeConst_TeeMsg_GanttSample1,	"Design"
-	TeeConst_TeeMsg_GanttSample2,	"Prototyping"
+	TeeConst_TeeMsg_AxisMaxMin,	"Axis Maximum Value must be >= Minimum"
+	TeeConst_TeeMsg_AxisLogBase,	"Axis Logarithmic Base should be >= 2"
 	TeeConst_TeeMsg_MaxPointsPerPage,	"MaxPointsPerPage must be >= 0"
 	TeeConst_TeeMsg_3dPercent,	"3D effect percent must be between %d and %d"
@@ -853,6 +859,6 @@
 	TeeConst_TeeMsg_GalleryArea,	"Area"
 	TeeConst_TeeMsg_GalleryBar,	"Bar"
-	TeeConst_TeeMsg_GalleryHorizBar,	"Horiz. Bar"
-	TeeConst_TeeMsg_GalleryPie,	"Pie"
+	ComConst_SDAXError,	"DAX Error"
+	ComConst_SAutomationWarning,	"COM Server Warning"
 	ComConst_SNoCloseActiveServer1,	"There are still active COM objects in this application.  One or more clients may have references to these objects, so manually closing "
 	ComConst_SNoCloseActiveServer2,	"this application may cause those client application(s) to fail.\r\n\r\nAre you sure you want to close this application?"
@@ -869,6 +875,6 @@
 	TeeConst_TeeMsg_AxisIncrementNeg,	"Axis increment must be >= 0"
 	TeeConst_TeeMsg_AxisMinMax,	"Axis Minimum Value must be <= Maximum"
-	TeeConst_TeeMsg_AxisMaxMin,	"Axis Maximum Value must be >= Minimum"
-	TeeConst_TeeMsg_AxisLogBase,	"Axis Logarithmic Base should be >= 2"
+	ComStrs_sNeedAllowNone,	"You must be in ShowCheckbox mode to set to this date"
+	ComStrs_sFailSetCalDateTime,	"Failed to set calendar date or time"
 	ComStrs_sFailSetCalMaxSelRange,	"Failed to set maximum selection range"
 	ComStrs_sFailSetCalMinMaxRange,	"Failed to set calendar min/max range"
@@ -885,6 +891,6 @@
 	ComConst_STooManyParams,	"Dispatch methods do not support more than 64 parameters"
 	ComConst_SDCOMNotInstalled,	"DCOM not installed"
-	ComConst_SDAXError,	"DAX Error"
-	ComConst_SAutomationWarning,	"COM Server Warning"
+	ComStrs_sTabFailRetrieve,	"Failed to retrieve tab at index %d"
+	ComStrs_sTabFailGetObject,	"Failed to get object at index %d"
 	ComStrs_sTabFailSet,	"Failed to set tab \"%s\" at index %d"
 	ComStrs_sTabFailSetObject,	"Failed to set object at index %d"
@@ -901,6 +907,6 @@
 	ComStrs_sDateTimeMax,	"Date exceeds maximum of %s"
 	ComStrs_sDateTimeMin,	"Date is less than minimum of %s"
-	ComStrs_sNeedAllowNone,	"You must be in ShowCheckbox mode to set to this date"
-	ComStrs_sFailSetCalDateTime,	"Failed to set calendar date or time"
+	ExtCtrls_clNameInactiveBorder,	"Inactive Border"
+	ExtCtrls_clNameInactiveCaption,	"Inactive Caption"
 	ExtCtrls_clNameInactiveCaptionText,	"Inactive Caption Text"
 	ExtCtrls_clNameInfoBk,	"Info Background"
@@ -917,6 +923,6 @@
 	ComStrs_sTabFailClear,	"Failed to clear tab control"
 	ComStrs_sTabFailDelete,	"Failed to delete tab at index %d"
-	ComStrs_sTabFailRetrieve,	"Failed to retrieve tab at index %d"
-	ComStrs_sTabFailGetObject,	"Failed to get object at index %d"
+	ExtCtrls_clNameSkyBlue,	"Sky Blue"
+	ExtCtrls_clNameCream,	"Cream"
 	ExtCtrls_clNameMedGray,	"Medium Gray"
 	ExtCtrls_clNameActiveBorder,	"Active Border"
@@ -933,6 +939,6 @@
 	ExtCtrls_clNameHighlight,	"Highlight Background"
 	ExtCtrls_clNameHighlightText,	"Highlight Text"
-	ExtCtrls_clNameInactiveBorder,	"Inactive Border"
-	ExtCtrls_clNameInactiveCaption,	"Inactive Caption"
+	ExtCtrls_clNameMaroon,	"Maroon"
+	ExtCtrls_clNameGreen,	"Green"
 	ExtCtrls_clNameOlive,	"Olive"
 	ExtCtrls_clNameNavy,	"Navy"
@@ -949,6 +955,6 @@
 	ExtCtrls_clNameWhite,	"White"
 	ExtCtrls_clNameMoneyGreen,	"Money Green"
-	ExtCtrls_clNameSkyBlue,	"Sky Blue"
-	ExtCtrls_clNameCream,	"Cream"
+	Consts_SPreviewLabel,	"Preview"
+	Consts_SCannotOpenAVI,	"Cannot open AVI"
 	Consts_SDockedCtlNeedsName,	"Docked control must have a name"
 	Consts_SDockTreeRemoveError,	"Error removing control from dock tree"
@@ -965,6 +971,6 @@
 	HelpIntfs_hNoTopics,	"No topic-based help system installed"
 	ExtCtrls_clNameBlack,	"Black"
-	ExtCtrls_clNameMaroon,	"Maroon"
-	ExtCtrls_clNameGreen,	"Green"
+	Consts_SmkcShift,	"Shift+"
+	Consts_SmkcCtrl,	"Ctrl+"
 	Consts_SmkcAlt,	"Alt+"
 	Consts_srNone,	"(None)"
@@ -981,6 +987,6 @@
 	Consts_SPictureLabel,	"Picture:"
 	Consts_SPictureDesc,	" (%dx%d)"
-	Consts_SPreviewLabel,	"Preview"
-	Consts_SCannotOpenAVI,	"Cannot open AVI"
+	Consts_SMsgDlgYesToAll,	"Yes to &All"
+	Consts_SmkcBkSp,	"BkSp"
 	Consts_SmkcTab,	"Tab"
 	Consts_SmkcEsc,	"Esc"
@@ -997,6 +1003,6 @@
 	Consts_SmkcIns,	"Ins"
 	Consts_SmkcDel,	"Del"
-	Consts_SmkcShift,	"Shift+"
-	Consts_SmkcCtrl,	"Ctrl+"
+	Consts_SMaskErr,	"Invalid input value"
+	Consts_SMaskEditErr,	"Invalid input value.  Use escape key to abandon changes"
 	Consts_SMsgDlgWarning,	"Warning"
 	Consts_SMsgDlgError,	"Error"
@@ -1013,6 +1019,6 @@
 	Consts_SMsgDlgAll,	"&All"
 	Consts_SMsgDlgNoToAll,	"N&o to All"
-	Consts_SMsgDlgYesToAll,	"Yes to &All"
-	Consts_SmkcBkSp,	"BkSp"
+	Consts_SControlParentSetToSelf,	"A control cannot have itself as its parent"
+	Consts_SOKButton,	"OK"
 	Consts_SCancelButton,	"Cancel"
 	Consts_SYesButton,	"&Yes"
@@ -1029,6 +1035,5 @@
 	Consts_SVIcons,	"Icons"
 	Consts_SVBitmaps,	"Bitmaps"
-	Consts_SMaskErr,	"Invalid input value"
-	Consts_SMaskEditErr,	"Invalid input value.  Use escape key to abandon changes"
+	Consts_SMDIChildNotVisible,	"Cannot hide an MDI Child Form"
 	Consts_SVisibleChanged,	"Cannot change Visible in OnShow or OnHide"
 	Consts_SCannotShowModal,	"Cannot make a visible window modal"
@@ -1041,10 +1046,10 @@
 	Consts_SNotPrinting,	"Printer is not currently printing"
 	Consts_SPrinting,	"Printing in progress"
+	Consts_SPrinterIndexError,	"Printer index out of range"
 	Consts_SInvalidPrinter,	"Printer selected is not valid"
 	Consts_SDeviceOnPort,	"%s on %s"
 	Consts_SGroupIndexTooLow,	"GroupIndex cannot be less than a previous menu item's GroupIndex"
 	Consts_SNoMDIForm,	"Cannot create form. No MDI forms are currently active"
-	Consts_SControlParentSetToSelf,	"A control cannot have itself as its parent"
-	Consts_SOKButton,	"OK"
+	Consts_SOleGraphic,	"Invalid operation on TOleGraphic"
 	Consts_SUnknownExtension,	"Unknown picture file extension (.%s)"
 	Consts_SUnknownClipboardFormat,	"Unsupported clipboard format"
@@ -1062,5 +1067,5 @@
 	Consts_SParentRequired,	"Control '%s' has no parent window"
 	Consts_SParentGivenNotAParent,	"Parent given is not a parent of '%s'"
-	Consts_SMDIChildNotVisible,	"Cannot hide an MDI Child Form"
+	RTLConsts_SSortedListError,	"Operation not allowed on sorted list"
 	RTLConsts_STooManyDeleted,	"Too many rows or columns deleted"
 	RTLConsts_SUnknownGroup,	"%s not in a class registration group"
@@ -1078,5 +1083,5 @@
 	Consts_SScanLine,	"Scan line index out of range"
 	Consts_SChangeIconSize,	"Cannot change the size of an icon"
-	Consts_SOleGraphic,	"Invalid operation on TOleGraphic"
+	RTLConsts_SInvalidPropertyPath,	"Invalid property path"
 	RTLConsts_SInvalidPropertyType,	"Invalid property type: %s"
 	RTLConsts_SInvalidPropertyValue,	"Invalid property value"
@@ -1094,5 +1099,5 @@
 	RTLConsts_SResNotFound,	"Resource %s not found"
 	RTLConsts_SSeekNotImplemented,	"%s.Seek not implemented"
-	RTLConsts_SSortedListError,	"Operation not allowed on sorted list"
+	RTLConsts_SDuplicateClass,	"A class named %s already exists"
 	RTLConsts_SDuplicateItem,	"List does not allow duplicates ($0%x)"
 	RTLConsts_SDuplicateName,	"A component named %s already exists"
@@ -1110,5 +1115,5 @@
 	RTLConsts_SInvalidProperty,	"Invalid property value"
 	RTLConsts_SInvalidPropertyElement,	"Invalid property element: %s"
-	RTLConsts_SInvalidPropertyPath,	"Invalid property path"
+	SysConst_SShortDayNameFri,	"Fri"
 	SysConst_SShortDayNameSat,	"Sat"
 	SysConst_SLongDayNameSun,	"Sunday"
@@ -1126,5 +1131,5 @@
 	RTLConsts_SCheckSynchronizeError,	"CheckSynchronize called from thread $%x, which is NOT the main thread"
 	RTLConsts_SClassNotFound,	"Class %s not found"
-	RTLConsts_SDuplicateClass,	"A class named %s already exists"
+	SysConst_SLongMonthNameFeb,	"February"
 	SysConst_SLongMonthNameMar,	"March"
 	SysConst_SLongMonthNameApr,	"April"
@@ -1142,5 +1147,5 @@
 	SysConst_SShortDayNameWed,	"Wed"
 	SysConst_SShortDayNameThu,	"Thu"
-	SysConst_SShortDayNameFri,	"Fri"
+	SysConst_SModuleAccessViolation,	"Access violation at address %p in module '%s'. %s of address %p"
 	SysConst_SOSError,	"System Error.  Code: %d.\r\n%s"
 	SysConst_SUnkOSError,	"A call to an OS function failed"
@@ -1158,5 +1163,5 @@
 	SysConst_SShortMonthNameDec,	"Dec"
 	SysConst_SLongMonthNameJan,	"January"
-	SysConst_SLongMonthNameFeb,	"February"
+	SysConst_SVarTypeAlreadyUsedWithPrefix,	"Custom variant type (%s%.4x) already used by %s"
 	SysConst_SVarTypeNotUsableWithPrefix,	"Custom variant type (%s%.4x) is not usable"
 	SysConst_SVarTypeTooManyCustom,	"Too many custom variant types have been registered"
@@ -1174,5 +1179,5 @@
 	SysConst_SAssertError,	"%s (%s, line %d)"
 	SysConst_SAbstractError,	"Abstract Error"
-	SysConst_SModuleAccessViolation,	"Access violation at address %p in module '%s'. %s of address %p"
+	SysConst_SException,	"Exception %s in module %s at %p.\r\n%s%s\r\n"
 	SysConst_SExceptTitle,	"Application Error"
 	SysConst_SInvalidFormat,	"Format '%s' invalid or incompatible with argument"
@@ -1190,5 +1195,5 @@
 	SysConst_SInvalidVarOpWithHResultWithPrefix,	"Invalid variant operation (%s%.8x)\n%s"
 	SysConst_SVarTypeOutOfRangeWithPrefix,	"Custom variant type (%s%.4x) is out of range"
-	SysConst_SVarTypeAlreadyUsedWithPrefix,	"Custom variant type (%s%.4x) already used by %s"
+	SysConst_SInvalidInput,	"Invalid numeric input"
 	SysConst_SDivByZero,	"Division by zero"
 	SysConst_SRangeError,	"Range check error"
@@ -1206,5 +1211,4 @@
 	SysConst_SPrivilege,	"Privileged instruction"
 	SysConst_SOperationAborted,	"Operation aborted"
-	SysConst_SException,	"Exception %s in module %s at %p.\r\n%s%s\r\n"
 	SysConst_SInvalidInteger,	"'%s' is not a valid integer value"
 	SysConst_SInvalidFloat,	"'%s' is not a valid floating point value"
@@ -1212,4 +1216,5 @@
 	SysConst_SInvalidTime,	"'%s' is not a valid time"
 	SysConst_SInvalidDateTime,	"'%s' is not a valid date and time"
+	SysConst_SInvalidBoolean,	"'%s' is not a valid boolean value"
 	SysConst_STimeEncodeError,	"Invalid argument to time encode"
 	SysConst_SDateEncodeError,	"Invalid argument to date encode"
@@ -1222,5 +1227,4 @@
 	SysConst_SEndOfFile,	"Read beyond end of file"
 	SysConst_SDiskFull,	"Disk full"
-	SysConst_SInvalidInput,	"Invalid numeric input"
 END
 
Index: cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.dsk
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.dsk	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart.dsk	(revision 729)
@@ -1,36 +1,25 @@
 [Closed Files]
-File_0=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\Options\fOptionsReportsCustom.pas',0,1,676,42,670,0,0
-File_1=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\Consults\fEditConsult.pas',0,1,714,1,718,0,0
-File_2=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\Consults\fConsults.pas',0,1,4875,1,4882,0,0
-File_3=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\fPtSel.pas',0,1,1069,12,1061,0,0
-File_4=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\rHTMLTools.pas',0,1,51,17,58,0,0
-File_5=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\Templates\mTemplateFieldButton.pas',0,1,104,12,111,0,0
-File_6=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\Consults\fODConsult.pas',0,1,1472,38,1360,0,0
-File_7=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\fNotePrt.pas',0,1,303,43,310,0,0
-File_8=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\fPtSelOptns.pas',0,1,223,15,230,0,0
+File_0=SourceModule,'P:\Vista\tmg-cprs\CPRS-Lib\ORNet.pas',0,1,345,1,357,0,0
+File_1=SourceModule,'c:\program files\borland\delphi7\source\rtl\common\classes.pas',0,1,4192,1,4214,0,0
+File_2=SourceModule,'P:\Vista\tmg-cprs\dklang-package-3.01\DKLang.pas',0,1,826,1,840,0,0
+File_3=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\uTMGOptions.pas',0,1,62,19,73,0,0
+File_4=SourceModule,'P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',0,1,1290,20,1298,0,0
 
 [Modules]
-Module0=P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas
-Module1=P:\vista\tmg-cprs\CPRS-Chart\fFrame.pas
-Module2=P:\vista\tmg-cprs\CPRS-Chart\Templates\fTemplateDialog.pas
-Module3=P:\vista\tmg-cprs\CPRS-Chart\fOptionsNotes.pas
-Module4=P:\vista\tmg-cprs\CPRS-Chart\TMG_Extra\HTMLEdit\TMGHTML2.pas
-Module5=P:\vista\tmg-cprs\CPRS-Chart\fDrawers.pas
-Module6=P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplateFields.pas
-Module7=P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplates.pas
-Module8=P:\vista\tmg-cprs\CPRS-Chart\uReminders.pas
-Module9=P:\vista\tmg-cprs\CPRS-Chart\Templates\rTemplates.pas
-Module10=c:\program files\borland\delphi7\source\vcl\Controls.pas
-Module11=P:\vista\tmg-cprs\CPRS-Chart\fReports.pas
-Count=12
+Module0=P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplateFields.pas
+Module1=P:\vista\tmg-cprs\CPRS-Chart\Templates\fTemplateDialog.pas
+Module2=P:\vista\tmg-cprs\CPRS-Chart\uEvaluate.pas
+Module3=c:\program files\borland\delphi7\source\rtl\Sys\system.pas
+Module4=c:\program files\borland\delphi7\source\rtl\Sys\sysutils.pas
+Module5=c:\program files\borland\delphi7\source\rtl\common\StrUtils.pas
+Module6=P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplates.pas
+Module7=P:\vista\tmg-cprs\CPRS-Chart\Templates\rTemplates.pas
+Module8=C:\PROGRA~1\VISTA\BDK32\Source\Trpcb.pas
+Module9=C:\PROGRA~1\VISTA\BDK32\Source\Wsockc.pas
+Count=10
 EditWindowCount=1
 TypeLibWindowCount=1
 
-[P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas]
-ModuleType=SourceModule
-FormState=1
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\fFrame.pas]
+[P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplateFields.pas]
 ModuleType=SourceModule
 FormState=0
@@ -39,23 +28,23 @@
 [P:\vista\tmg-cprs\CPRS-Chart\Templates\fTemplateDialog.pas]
 ModuleType=SourceModule
-FormState=1
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\fOptionsNotes.pas]
-ModuleType=SourceModule
-FormState=0
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\TMG_Extra\HTMLEdit\TMGHTML2.pas]
-ModuleType=SourceModule
-FormState=0
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\fDrawers.pas]
-ModuleType=SourceModule
-FormState=0
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplateFields.pas]
+FormState=0
+FormOnTop=0
+
+[P:\vista\tmg-cprs\CPRS-Chart\uEvaluate.pas]
+ModuleType=SourceModule
+FormState=0
+FormOnTop=0
+
+[c:\program files\borland\delphi7\source\rtl\Sys\system.pas]
+ModuleType=SourceModule
+FormState=0
+FormOnTop=0
+
+[c:\program files\borland\delphi7\source\rtl\Sys\sysutils.pas]
+ModuleType=SourceModule
+FormState=0
+FormOnTop=0
+
+[c:\program files\borland\delphi7\source\rtl\common\StrUtils.pas]
 ModuleType=SourceModule
 FormState=0
@@ -67,9 +56,4 @@
 FormOnTop=0
 
-[P:\vista\tmg-cprs\CPRS-Chart\uReminders.pas]
-ModuleType=SourceModule
-FormState=0
-FormOnTop=0
-
 [P:\vista\tmg-cprs\CPRS-Chart\Templates\rTemplates.pas]
 ModuleType=SourceModule
@@ -77,10 +61,10 @@
 FormOnTop=0
 
-[c:\program files\borland\delphi7\source\vcl\Controls.pas]
-ModuleType=SourceModule
-FormState=0
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\fReports.pas]
+[C:\PROGRA~1\VISTA\BDK32\Source\Trpcb.pas]
+ModuleType=SourceModule
+FormState=0
+FormOnTop=0
+
+[C:\PROGRA~1\VISTA\BDK32\Source\Wsockc.pas]
 ModuleType=SourceModule
 FormState=0
@@ -99,27 +83,7 @@
 FormOnTop=0
 
-[P:\vista\tmg-cprs\CPRS-Chart\fHSplit.pas]
-FormState=0
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\fPage.pas]
-FormState=0
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\Orders\fODBase.pas]
-FormState=0
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\fAutoSz.pas]
-FormState=0
-FormOnTop=0
-
-[P:\vista\tmg-cprs\CPRS-Chart\dShared.pas]
-FormState=0
-FormOnTop=0
-
 [EditWindow0]
-ViewCount=12
-CurrentView=0
+ViewCount=10
+CurrentView=3
 View0=0
 View1=1
@@ -132,6 +96,4 @@
 View8=8
 View9=9
-View10=10
-View11=11
 CodeExplorer=CodeExplorer@EditWindow0
 MessageView=MessageView@EditWindow0
@@ -139,102 +101,88 @@
 Visible=1
 State=0
-Left=3
-Top=125
-Width=1009
-Height=731
-MaxLeft=-136
-MaxTop=126
-ClientWidth=1001
-ClientHeight=697
+Left=7
+Top=130
+Width=1005
+Height=623
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=997
+ClientHeight=589
 LeftPanelSize=140
-LeftPanelClients=CodeExplorer@EditWindow0
-LeftPanelData=00000400000000008C000000000000000250010000000000000100000000000000000000000001000000008C0000000C000000436F64654578706C6F726572FFFFFFFF
+LeftPanelClients=CodeExplorer@EditWindow0,DockSite1
+LeftPanelData=00000400010000000C000000436F64654578706C6F7265728C0000000000000002E10100000000000001000000008C00000009000000446F636B536974653101000000000000000000000000FFFFFFFF
 RightPanelSize=0
-BottomPanelSize=358
-BottomPanelClients=MessageView@EditWindow0,DockSite1
-BottomPanelData=0000040000000000660100000000000001E90300000000000001000000002A00000000000000010000000266010000000000000200000001E9030000000000000300000000900000000B0000004D6573736167655669657703000000006601000009000000446F636B5369746531020000000000040000000000000200000000000400000000000002000000000004000000000000FFFFFFFF
+BottomPanelSize=105
+BottomPanelClients=MessageView@EditWindow0
+BottomPanelData=000004000000000000000000000000000000000000000000000100000000000000000B0000004D65737361676556696577FFFFFFFF
 
 [View0]
-Module=P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas
-CursorX=1
-CursorY=4156
-TopLine=4149
-LeftCol=1
-
-[View1]
-Module=P:\vista\tmg-cprs\CPRS-Chart\fOptionsNotes.pas
-CursorX=1
-CursorY=292
-TopLine=285
-LeftCol=1
-
-[View2]
-Module=P:\vista\tmg-cprs\CPRS-Chart\TMG_Extra\HTMLEdit\TMGHTML2.pas
-CursorX=1
-CursorY=180
-TopLine=173
-LeftCol=1
-
-[View3]
-Module=P:\vista\tmg-cprs\CPRS-Chart\fReports.pas
-CursorX=1
-CursorY=2966
-TopLine=2959
-LeftCol=1
-
-[View4]
-Module=c:\program files\borland\delphi7\source\vcl\Controls.pas
-CursorX=1
-CursorY=6245
-TopLine=6232
-LeftCol=1
-
-[View5]
 Module=P:\vista\tmg-cprs\CPRS-Chart\Templates\fTemplateDialog.pas
 CursorX=1
-CursorY=269
-TopLine=256
-LeftCol=1
-
-[View6]
-Module=P:\vista\tmg-cprs\CPRS-Chart\fFrame.pas
-CursorX=1
-CursorY=3959
-TopLine=3952
-LeftCol=1
-
-[View7]
-Module=P:\vista\tmg-cprs\CPRS-Chart\Templates\rTemplates.pas
-CursorX=1
-CursorY=161
-TopLine=152
-LeftCol=1
-
-[View8]
-Module=P:\vista\tmg-cprs\CPRS-Chart\uReminders.pas
-CursorX=1
-CursorY=4507
-TopLine=4543
-LeftCol=1
-
-[View9]
+CursorY=281
+TopLine=269
+LeftCol=1
+
+[View1]
 Module=P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplates.pas
 CursorX=1
-CursorY=1956
-TopLine=1949
-LeftCol=1
-
-[View10]
+CursorY=2167
+TopLine=2157
+LeftCol=1
+
+[View2]
+Module=P:\vista\tmg-cprs\CPRS-Chart\Templates\rTemplates.pas
+CursorX=25
+CursorY=103
+TopLine=90
+LeftCol=1
+
+[View3]
 Module=P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplateFields.pas
-CursorX=58
-CursorY=515
-TopLine=509
-LeftCol=1
-
-[View11]
-Module=P:\vista\tmg-cprs\CPRS-Chart\fDrawers.pas
-CursorX=29
-CursorY=208
-TopLine=202
+CursorX=26
+CursorY=1098
+TopLine=1082
+LeftCol=1
+
+[View4]
+Module=c:\program files\borland\delphi7\source\rtl\common\StrUtils.pas
+CursorX=1
+CursorY=264
+TopLine=250
+LeftCol=1
+
+[View5]
+Module=c:\program files\borland\delphi7\source\rtl\Sys\system.pas
+CursorX=1
+CursorY=11719
+TopLine=11701
+LeftCol=1
+
+[View6]
+Module=c:\program files\borland\delphi7\source\rtl\Sys\sysutils.pas
+CursorX=1
+CursorY=10667
+TopLine=10652
+LeftCol=1
+
+[View7]
+Module=C:\PROGRA~1\VISTA\BDK32\Source\Wsockc.pas
+CursorX=1
+CursorY=1479
+TopLine=1464
+LeftCol=1
+
+[View8]
+Module=C:\PROGRA~1\VISTA\BDK32\Source\Trpcb.pas
+CursorX=1
+CursorY=52
+TopLine=40
+LeftCol=1
+
+[View9]
+Module=P:\vista\tmg-cprs\CPRS-Chart\uEvaluate.pas
+CursorX=5
+CursorY=303
+TopLine=292
 LeftCol=1
 
@@ -254,10 +202,21 @@
 
 [Watches]
-Count=5
-Watch0='frmPtSel',256,0,18,1,0,'Watches'
-Watch1='FRealType',256,0,18,1,0,'Watches'
-Watch2='FDialog',256,0,18,1,0,'Watches'
-Watch3='TmpSL.Text',256,0,18,1,0,'Watches'
-Watch4='SL.text',256,0,18,1,0,'Watches'
+Count=16
+Watch0='Txt',256,0,18,1,0,'Watches'
+Watch1='i',256,0,18,1,0,'Watches'
+Watch2='NumStr',256,0,18,1,0,'Watches'
+Watch3='p1',256,0,18,1,0,'Watches'
+Watch4='SL.Text',256,0,18,1,0,'Watches'
+Watch5='Temp',256,0,18,1,0,'Watches'
+Watch6='Txt[i]',256,0,18,1,0,'Watches'
+Watch7='CloseMatchesNeeded',256,0,18,1,0,'Watches'
+Watch8='FnObjStr',256,0,18,1,0,'Watches'
+Watch9='str1',256,0,18,1,0,'Watches'
+Watch10='st1',256,0,18,1,0,'Watches'
+Watch11='en1',256,0,18,1,0,'Watches'
+Watch12='str1',256,0,18,1,0,'Watches'
+Watch13='val1',256,0,18,1,0,'Watches'
+Watch14='val2',256,0,18,1,0,'Watches'
+Watch15='pos2',256,0,18,1,0,'Watches'
 
 [WatchWindow]
@@ -269,10 +228,10 @@
 Left=0
 Top=0
-Width=981
-Height=185
-MaxLeft=-1
-MaxTop=-1
-ClientWidth=981
-ClientHeight=185
+Width=769
+Height=407
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=769
+ClientHeight=407
 TBDockHeight=264
 LRDockWidth=421
@@ -280,33 +239,39 @@
 
 [Breakpoints]
-Count=28
-Breakpoint0='P:\vista\tmg-cprs\CPRS-Chart\rCover.pas',315,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint1='P:\vista\tmg-cprs\TMG_Extra\HTMLEdit\EmbeddedED\EmbeddedED.pas',1516,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint2='P:\vista\tmg-cprs\TMG_Extra\HTMLEdit\EmbeddedED\EmbeddedED.pas',1540,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint3='P:\vista\tmg-cprs\CPRS-Chart\TMG_Extra\fPtDemoEdit.pas',1710,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint4='P:\vista\tmg-cprs\CPRS-Chart\TMG_Extra\fPtDemoEdit.pas',1787,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint5='P:\vista\tmg-cprs\CPRS-Chart\fDrawers.pas',1068,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint6='P:\vista\tmg-cprs\CPRS-Chart\fPtSelOptns.pas',286,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint7='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4424,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint8='P:\vista\tmg-cprs\CPRS-Chart\fFrame.pas',3692,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint9='P:\vista\tmg-cprs\CPRS-Chart\fFrame.pas',1059,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint10='P:\vista\tmg-cprs\CPRS-Chart\fFrame.pas',1076,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint11='P:\vista\tmg-cprs\CPRS-Chart\Templates\fTemplateDialog.pas',375,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint12='P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplates.pas',2167,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint13='P:\vista\tmg-cprs\CPRS-Chart\fOptionsNotes.pas',292,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint14='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',3281,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint15='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',3287,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint16='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4423,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint17='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4381,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint18='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4783,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint19='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4803,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint20='P:\vista\tmg-cprs\CPRS-Chart\fLabs.pas',2419,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint21='P:\vista\tmg-cprs\CPRS-Chart\fReports.pas',2966,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint22='P:\vista\tmg-cprs\CPRS-Chart\Consults\fConsults.pas',4882,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint23='P:\vista\tmg-cprs\CPRS-Chart\Consults\fEditConsult.pas',718,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint24='P:\vista\tmg-cprs\CPRS-Chart\Encounter\fEncounterFrame.pas',846,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint25='P:\vista\tmg-cprs\CPRS-Chart\fFrame.pas',3959,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint26='P:\vista\tmg-cprs\CPRS-Chart\Templates\rTemplates.pas',161,'',0,1,'',1,0,0,'',1,'','',''
-Breakpoint27='P:\vista\tmg-cprs\CPRS-Chart\Templates\fTemplateDialog.pas',264,'',0,1,'',1,0,0,'',1,'','',''
+Count=34
+Breakpoint0='P:\vista\tmg-cprs\CPRS-Chart\TMG_Extra\fPtDemoEdit.pas',1710,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint1='P:\vista\tmg-cprs\CPRS-Chart\TMG_Extra\fPtDemoEdit.pas',1787,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint2='P:\vista\tmg-cprs\CPRS-Chart\fDrawers.pas',1068,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint3='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4424,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint4='P:\vista\tmg-cprs\CPRS-Chart\fOptionsNotes.pas',291,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint5='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',3281,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint6='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',3287,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint7='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4423,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint8='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4381,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint9='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4783,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint10='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4803,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint11='P:\vista\tmg-cprs\CPRS-Chart\fLabs.pas',2419,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint12='P:\vista\tmg-cprs\CPRS-Chart\fReports.pas',2966,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint13='P:\vista\tmg-cprs\CPRS-Chart\Consults\fConsults.pas',4882,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint14='P:\vista\tmg-cprs\CPRS-Chart\Consults\fEditConsult.pas',718,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint15='P:\vista\tmg-cprs\CPRS-Chart\Encounter\fEncounterFrame.pas',846,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint16='P:\vista\tmg-cprs\CPRS-Chart\fImages.pas',584,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint17='P:\vista\tmg-cprs\CPRS-Chart\fImages.pas',599,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint18='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',1298,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint19='P:\vista\tmg-cprs\CPRS-Chart\fReview.pas',1350,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint20='P:\vista\tmg-cprs\CPRS-Chart\fPtDemo.pas',63,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint21='P:\vista\tmg-cprs\CPRS-Chart\rCover.pas',439,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint22='P:\vista\tmg-cprs\CPRS-Chart\fVitals.pas',204,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint23='P:\vista\tmg-cprs\CPRS-Chart\fFrame.pas',2922,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint24='P:\vista\tmg-cprs\CPRS-Chart\fNotes.pas',4550,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint25='P:\vista\tmg-cprs\CPRS-Chart\rHTMLTools.pas',163,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint26='P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplates.pas',2545,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint27='P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplates.pas',2842,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint28='P:\vista\tmg-cprs\CPRS-Chart\Templates\fTemplateFields.pas',143,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint29='P:\vista\tmg-cprs\CPRS-Chart\Templates\fTemplateDialog.pas',281,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint30='P:\vista\tmg-cprs\CPRS-Chart\Templates\fTemplateDialog.pas',267,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint31='P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplateFields.pas',1094,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint32='P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplateFields.pas',1138,'',0,1,'',1,0,0,'',1,'','',''
+Breakpoint33='P:\vista\tmg-cprs\CPRS-Chart\Templates\uTemplateFields.pas',1133,'',0,1,'',1,0,0,'',1,'','',''
 
 [AddressBreakpoints]
@@ -316,14 +281,12 @@
 Create=1
 Visible=1
-State=2
-Left=0
-Top=0
-Width=1024
+State=0
+Left=8
+Top=7
+Width=988
 Height=112
 MaxLeft=-1
 MaxTop=-1
-MaxWidth=1032
-MaxHeight=112
-ClientWidth=1024
+ClientWidth=980
 ClientHeight=78
 
@@ -364,6 +327,6 @@
 Visible=0
 State=0
-Left=78
-Top=201
+Left=81
+Top=152
 Width=731
 Height=488
@@ -396,17 +359,17 @@
 Left=0
 Top=0
-Width=425
-Height=349
-MaxLeft=-1
-MaxTop=-1
-ClientWidth=425
-ClientHeight=349
+Width=132
+Height=440
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=132
+ClientHeight=440
 TBDockHeight=492
 LRDockWidth=190
 Dockable=1
-SplitPos=65
+SplitPos=82
 ArrangeBy=Name
-SelectedItem=Caption
-ExpandedItems=CalColors,EdgeBorders,Options
+SelectedItem=
+ExpandedItems=Anchors,CalColors,Constraints,EdgeBorders,Font,Options
 HiddenCategories=Legacy
 
@@ -415,12 +378,12 @@
 Visible=0
 State=0
-Left=20
-Top=265
-Width=737
-Height=350
-MaxLeft=-1
-MaxTop=-1
-ClientWidth=729
-ClientHeight=324
+Left=1164
+Top=203
+Width=539
+Height=395
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=531
+ClientHeight=369
 TBDockHeight=197
 LRDockWidth=737
@@ -435,14 +398,14 @@
 [CallStackWindow]
 Create=1
-Visible=1
-State=0
-Left=1226
-Top=182
-Width=338
-Height=416
-MaxLeft=-1
-MaxTop=-1
-ClientWidth=330
-ClientHeight=390
+Visible=0
+State=0
+Left=357
+Top=154
+Width=553
+Height=521
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=545
+ClientHeight=495
 TBDockHeight=411
 LRDockWidth=155
@@ -475,10 +438,10 @@
 Left=0
 Top=0
-Width=425
-Height=349
-MaxLeft=-1
-MaxTop=-1
-ClientWidth=425
-ClientHeight=349
+Width=132
+Height=440
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=132
+ClientHeight=440
 TBDockHeight=175
 LRDockWidth=108
@@ -491,10 +454,10 @@
 Left=0
 Top=0
-Width=981
-Height=185
-MaxLeft=-1
-MaxTop=-1
-ClientWidth=981
-ClientHeight=185
+Width=769
+Height=407
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=769
+ClientHeight=407
 TBDockHeight=291
 LRDockWidth=417
@@ -595,15 +558,15 @@
 [CodeExplorer@EditWindow0]
 Create=1
-Visible=1
+Visible=0
 State=0
 Left=0
 Top=12
 Width=140
-Height=324
+Height=439
 MaxLeft=-1
 MaxTop=-1
 ClientWidth=140
-ClientHeight=324
-TBDockHeight=324
+ClientHeight=439
+TBDockHeight=305
 LRDockWidth=140
 Dockable=1
@@ -615,11 +578,11 @@
 Left=12
 Top=0
-Width=989
-Height=140
-MaxLeft=-1
-MaxTop=-1
-ClientWidth=989
-ClientHeight=140
-TBDockHeight=140
+Width=985
+Height=105
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=985
+ClientHeight=105
+TBDockHeight=105
 LRDockWidth=443
 Dockable=1
@@ -633,13 +596,33 @@
 Visible=1
 State=0
-Left=232
-Top=77
-Width=441
-Height=404
-MaxLeft=-1
-MaxTop=-1
-ClientWidth=433
-ClientHeight=378
-TBDockHeight=552
+Left=-803
+Top=210
+Width=785
+Height=462
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=777
+ClientHeight=436
+TBDockHeight=233
+LRDockWidth=283
+Dockable=1
+TabPosition=0
+ActiveTab=Watch List
+TabDockClients=WatchWindow,DebugLogView
+
+[DockSite1]
+DockSiteType=1
+Create=1
+Visible=1
+State=0
+Left=0
+Top=12
+Width=140
+Height=469
+MaxLeft=-1
+MaxTop=-1
+ClientWidth=140
+ClientHeight=469
+TBDockHeight=469
 LRDockWidth=140
 Dockable=1
@@ -648,22 +631,2 @@
 TabDockClients=PropertyInspector,ObjectTree
 
-[DockSite1]
-DockSiteType=1
-Create=1
-Visible=1
-State=0
-Left=12
-Top=144
-Width=989
-Height=214
-MaxLeft=-1
-MaxTop=-1
-ClientWidth=989
-ClientHeight=214
-TBDockHeight=214
-LRDockWidth=283
-Dockable=1
-TabPosition=0
-ActiveTab=Watch List
-TabDockClients=WatchWindow,DebugLogView
-
Index: cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart_TLB.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart_TLB.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/CPRSChart_TLB.pas	(revision 729)
@@ -13,5 +13,5 @@
 
 // PASTLWTR : 1.2
-// File generated on 1/22/2010 5:46:21 PM from Type Library described below.
+// File generated on 3/29/2010 5:43:06 PM from Type Library described below.
 
 // ************************************************************************  //
Index: cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBase.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBase.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBase.dfm	(revision 729)
@@ -45,5 +45,5 @@
     NumGlyphs = 2
   end
-  object DKLanguageController2: TDKLanguageController
+  object DKLanguageController: TDKLanguageController
     Left = 552
     Top = 48
Index: cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBase.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBase.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBase.pas	(revision 729)
@@ -24,5 +24,5 @@
     btnOK: TBitBtn;
     btnCancel: TBitBtn;
-    DKLanguageController2: TDKLanguageController;
+    DKLanguageController: TDKLanguageController;
     procedure FormCreate(Sender: TObject);
     procedure btnCancelClick(Sender: TObject);
Index: cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBaseGrid.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBaseGrid.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBaseGrid.dfm	(revision 729)
@@ -46,5 +46,5 @@
     end
   end
-  inherited DKLanguageController1: TDKLanguageController
+  inherited DKLanguageController: TDKLanguageController
     LangData = {
       0E0066726D504345426173654772696401010000000100000007004361707469
Index: cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBaseMain.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBaseMain.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCEBaseMain.dfm	(revision 729)
@@ -163,5 +163,5 @@
     end
   end
-  inherited DKLanguageController1: TDKLanguageController
+  inherited DKLanguageController: TDKLanguageController
     LangData = {
       0E0066726D504345426173654D61696E01010000000100000007004361707469
Index: cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCELex.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCELex.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Encounter/fPCELex.dfm	(revision 729)
@@ -1,5 +1,5 @@
 inherited frmPCELex: TfrmPCELex
-  Left = 639
-  Top = 480
+  Left = 388
+  Top = 221
   BorderIcons = []
   BorderStyle = bsDialog
Index: cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptions.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptions.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptions.dfm	(revision 729)
@@ -1,5 +1,5 @@
 object frmOptions: TfrmOptions
-  Left = 334
-  Top = 229
+  Left = 321
+  Top = 155
   Width = 435
   Height = 397
@@ -87,5 +87,5 @@
       Height = 323
       HelpContext = 9999
-      ActivePage = tsNotes
+      ActivePage = tsAppearance
       Align = alClient
       TabOrder = 0
@@ -1793,4 +1793,5 @@
           State = cbChecked
           TabOrder = 1
+          OnClick = cbSkinAtStartupClick
         end
         object btnMoreSkins: TButton
Index: cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptions.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptions.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptions.pas	(revision 729)
@@ -172,5 +172,6 @@
     procedure FormShow(Sender: TObject);
     procedure lbSkinsKeyPress(Sender: TObject; var Key: Char);
-    procedure btnDisableSkinClick(Sender: TObject);  //kt added 6/29/07
+    procedure btnDisableSkinClick(Sender: TObject);
+    procedure cbSkinAtStartupClick(Sender: TObject);  //kt added 6/29/07
   private
     { Private declarations }
@@ -209,7 +210,7 @@
        rOptions, rCore, uCore, uOptions, UBACore, fFrame,
        //fTestDialog;
-
     //kt mod 6/29/07 -----
     ShellAPI, //kt 9/8/08
+    uTMGOptions, //kt 2/10/10
     ORNet, //allows access to RPCBrokerV
     TntForms, TntSystem, TntSysUtils;
@@ -340,5 +341,4 @@
 
     //kt begin modification 6/29/07 ---------------
-
     // Fill cbLanguage with available languages
     // Note: LangManager was populated at form creation of fFrame
@@ -347,7 +347,5 @@
     cbLanguage.ItemIndex := LangManager.LanguageIndex;
     //kt end modification 6/29/07 ---------------
-
     cbSkinAtStartup.Checked := frmFrame.SkinAtStartup; //kt 9/8/08
-
   end;
 
@@ -867,5 +865,4 @@
   procedure TfrmOptions.cbLanguageChange(Sender: TObject);  //kt added 6/29/07
   var iIndex: Integer;
-  CPRSChartINI: TINIFile;
   begin
     iIndex := cbLanguage.ItemIndex;
@@ -881,7 +878,5 @@
     frmFrame.RenameTabs;  //Resets names of tabs to correct translation  //kt
     frmFrame.mnuFileRefreshClick(self); //elh 6/23/08
-    CPRSChartINI := TINIFile.Create(ExtractFilePath(ParamStr(0)) + 'CPRSChart.ini');  // Write to INI  elh  6/23/08
-    CPRSChartINI.WriteInteger('Options','Language',LangManager.LanguageID);
-    CPRSChartINI.Free;
+    uTMGOptions.WriteInteger('Language',LangManager.LanguageID);
   end;
 
@@ -945,4 +940,10 @@
   end;
 
+  procedure TfrmOptions.cbSkinAtStartupClick(Sender: TObject);
+  begin
+    frmFrame.SkinAtStartup := cbSkinAtStartup.Checked;
+    uTMGOptions.WriteBool('Load Skin At Startup',frmFrame.SkinAtStartup);  //kt 9/11/08
+  end;
+
 end.
 
Index: cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptionsOther.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptionsOther.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptionsOther.dfm	(revision 729)
@@ -1,4 +1,4 @@
 object frmOptionsOther: TfrmOptionsOther
-  Left = 517
+  Left = 522
   Top = 143
   Hint = 'Use system default settings'
@@ -9,5 +9,5 @@
   Caption = 'Other Parameters'
   ClientHeight = 463
-  ClientWidth = 391
+  ClientWidth = 386
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
@@ -89,5 +89,5 @@
     Left = 0
     Top = 430
-    Width = 391
+    Width = 386
     Height = 33
     HelpContext = 9110
@@ -99,5 +99,5 @@
       Left = 0
       Top = 0
-      Width = 391
+      Width = 386
       Height = 2
       Align = alTop
Index: cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptionsOther.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptionsOther.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Options/fOptionsOther.pas	(revision 729)
@@ -70,4 +70,5 @@
   public
     { Public declarations }
+    procedure SaveTabColors(ColorsList : TStringList); //kt
   end;
 
@@ -80,5 +81,5 @@
 
 procedure DialogOptionsOther(topvalue, leftvalue, fontsize: integer; var actiontype: Integer);
-procedure SetTabPosition(Position : TTabPosition);
+procedure SetTabPosition(Position : TTabPosition); //kt
 
 implementation
@@ -87,5 +88,7 @@
 
 uses
-  rOptions, uOptions, rCore, rSurgery, uConst, fMeds, fFrame;
+  rOptions, uOptions, rCore, rSurgery, uConst, fMeds, fFrame,
+  uTMGOptions //kt
+  ;
 
 procedure DialogOptionsOther(topvalue, leftvalue, fontsize: integer; var actiontype: Integer);
@@ -124,9 +127,9 @@
 begin
   cboTabColors.Items.Assign(frmFrame.tabPage.Tabs);  //kt 8/09
-  //cboTabColors.Items.Assign(uTabColorsList);       //kt added8808
+  //cboTabColors.Items.Assign(TabColorsList);       //kt added8808
   cboTabColors.ItemIndex := 0;                       //kt
   cboTab.Items.Assign(rpcGetOtherTabs);              //kt
   cboTabColorsChange(nil);                           //kt
-  cbEnableTabColors.Checked := uTabColorsEnabled;    //kt 8/09
+  cbEnableTabColors.Checked := TabColorsEnabled;    //kt 8/09
 //if (cboTab.Items.IndexOf('Surgery') > -1) and (not ShowSurgeryTab) then  <-- original line.  //kt 8/8/2007
   if (cboTab.Items.IndexOf(DKLangConstW('fOptionsOther_Surgery')) > -1) and (not ShowSurgeryTab) then //kt added 8/8/2007
@@ -199,5 +202,5 @@
 procedure TfrmOptionsOther.FormCreate(Sender: TObject);
 begin
-  cbEnableTabColors.checked := uTabColorsEnabled;
+  cbEnableTabColors.checked := TabColorsEnabled;
   FStartDT  := 0;
   FStopDT   := 0;
@@ -313,4 +316,6 @@
 
 procedure SetTabPosition(Position : TTabPosition);
+//NOTE: Don't make this a member function of TFrmOptionsOther, becuase frmFrame needs
+//      to be able to call it, even if the OtionsOther form is not instantiated.
 //kt added 8/8/08
 begin
@@ -322,4 +327,15 @@
     tpRight : frmFrame.tabPage.Align := alRight;
   end; {case}
+  uTMGOptions.WriteInteger('Tab Location',integer(frmFrame.tabPage.TabPosition));
+end;
+
+procedure TfrmOptionsOther.SaveTabColors(ColorsList : TStringList);
+//kt added 8/8/08  Entire function
+var i : integer;
+begin
+  for i := 0 to ColorsList.Count-1 do begin
+    uTMGOptions.WriteInteger('Tab '+IntToStr(i)+' Color',longword(ColorsList.Objects[i]));
+  end;
+  uTMGOptions.WriteBool('TAB_COLORS ENABLE',TabColorsEnabled); //kt 8/09
 end;
 
@@ -345,5 +361,6 @@
     if selIndex < 0 then exit;
     cboTabColors.Items.Objects[selIndex] := pointer(ColorDialog.Color);
-    uTabColorsList.Objects[selIndex] := pointer(ColorDialog.Color);
+    TabColorsList.Objects[selIndex] := pointer(ColorDialog.Color);
+    uTMGOptions.WriteInteger('Tab '+IntToStr(selIndex)+' Color',longword(TabColorsList.Objects[selIndex]));
   end;
 end;
@@ -352,10 +369,11 @@
 //kt added
 begin
-  uTabColorsEnabled := cbEnableTabColors.Checked;          //elh 01/12/10
+  TabColorsEnabled := cbEnableTabColors.Checked;          //elh 01/12/10
   frmFrame.tabPage.OwnerDraw := cbEnableTabColors.Checked; //elh 01/12/10
-  //cboTabColors.Enabled    := uTabColorsEnabled;
-  //lblEditTabColor.Enabled := uTabColorsEnabled;
-  //lblTabColors.Enabled    := uTabColorsEnabled;
-  //pnlShowColor.Enabled    := uTabColorsEnabled;
+  cboTabColors.Enabled    := TabColorsEnabled;
+  lblEditTabColor.Enabled := TabColorsEnabled;
+  lblTabColors.Enabled    := TabColorsEnabled;
+  pnlShowColor.Enabled    := TabColorsEnabled;
+  uTMGOptions.WriteBool('TAB_COLORS ENABLE',TabColorsEnabled); //kt 3/8/10
 end;
 
Index: cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/fPtLabelPrint.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/fPtLabelPrint.dfm	(revision 729)
+++ cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/fPtLabelPrint.dfm	(revision 729)
@@ -0,0 +1,584 @@
+object frmPtLabelPrint: TfrmPtLabelPrint
+  Left = 312
+  Top = 247
+  ActiveControl = PrintButton
+  BorderIcons = [biMinimize, biMaximize]
+  BorderStyle = bsSingle
+  Caption = 'Print Patient Label'
+  ClientHeight = 312
+  ClientWidth = 430
+  Color = clBtnFace
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  OldCreateOrder = False
+  Position = poScreenCenter
+  OnCreate = FormCreate
+  OnDestroy = FormDestroy
+  OnResize = FormResize
+  OnShow = FormShow
+  DesignSize = (
+    430
+    312)
+  PixelsPerInch = 96
+  TextHeight = 13
+  object NameLabel: TLabel
+    Left = 29
+    Top = 84
+    Width = 28
+    Height = 13
+    Caption = 'Name'
+  end
+  object AuthorLabel: TLabel
+    Left = 26
+    Top = 116
+    Width = 31
+    Height = 13
+    Caption = 'Author'
+  end
+  object NoteTypeLabel: TLabel
+    Left = 33
+    Top = 148
+    Width = 24
+    Height = 13
+    Caption = 'Type'
+  end
+  object PrinterLabel: TLabel
+    Left = 27
+    Top = 211
+    Width = 30
+    Height = 13
+    Caption = 'Printer'
+  end
+  object DateLabel: TLabel
+    Left = 20
+    Top = 240
+    Width = 37
+    Height = 26
+    Caption = 'Date Of Service'
+    WordWrap = True
+  end
+  object LocationLabel: TLabel
+    Left = 16
+    Top = 177
+    Width = 41
+    Height = 13
+    Caption = 'Location'
+  end
+  object Image1: TImage
+    Left = 8
+    Top = 8
+    Width = 89
+    Height = 65
+    Picture.Data = {
+      0A544A504547496D616765DF120000FFD8FFE000104A46494600010101004800
+      480000FFDB004300080606070605080707070909080A0C140D0C0B0B0C191213
+      0F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F2739
+      3D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232
+      3232323232323232323232323232323232323232323232323232323232323232
+      32323232323232323232323232FFC0001108009600C803012200021101031101
+      FFC4001C0001000202030100000000000000000000000506040702030801FFC4
+      004110000103030202060705040B010100000001000203040511062112310713
+      415161811422327191A1B1234252C1D10882B2F0151624333443446292A2C253
+      72FFC400190101000301010000000000000000000000000102040305FFC40022
+      1101010003000203000203000000000000000102031112210431322251134171
+      FFDA000C03010002110311003F00DFE8888088880888808BAA79E1A685D34F2B
+      2289A32E7C8E0D03DE4AA55D3A55D3D44E922A191D71998784F51B301EE2F3F9
+      6511DE2F5945A6ABBA52BDD5170A58E9A8987910DEB1C3CCEDF250751AAEFB56
+      499AF35A73D91C9D58F8370ADE355F38F401200DCAF81ED3B070F8AF38BEB669
+      8932D4D43C9E65D33CFE6B8B6670396CB334F84AEFD53C51E6F4922F3C437BBA
+      518CD3DE6BA103B3AE247C0A9EB6F48FA9291EDEB445728B91059C2FF221478A
+      D32EB74A280D39AAA0D430E5B45594B28F69B340E0DCF83B182A7D42C2222022
+      2202222022220222202222022220F8ABFAC356D0E8EB1BAE15B97C8E77574F03
+      4FAD34879347E67F3C05615A27545D3FAC1AB2A2E2E3C5052B9D4B42D2721AC6
+      9C3E41D997B81DFF00086F8ABE185CEF1CF66C984EA95AA2FF00A9B53CA6B6ED
+      4D30A71931C5D5FD9C43C1BB91EF3BAADD3CAEA1267847D8F39621D83F137DDD
+      A16D06432E01E1F2CEEAA57DB63286B23ACA7670C32BB864681B35DFA15D7669
+      F19D8E3AB7F9DF1C9CA1A91246D7B487348C823B5778932A16887A155BE84E7A
+      A23AD809FC279B7C8A956E1567B89CBD5E2D1A3E7B19BBB696FD48D9609F0D8E
+      63239BD53FB33820709EFECDBB32B6EB342E998CE5B69889FF00739CEFA95E7D
+      18C2DD9D19EA375DECAEA0A9938AAA870D0E3CDF11F64FBC608F21DEAB94FF00
+      6BE194BEAA620B759681FC4CB45053981DC3248636831E7D939237073DEB39B5
+      ED8BAC696B2164248980C0EAB996BFB8B48FAF815C2F6D7430B2BD9075DE8F9E
+      B62ED7C47DA1B9C7603BF778A849A59A8AB1D50E89AEA5A367594EE8FD61353B
+      87ACDE107981B8ECC02B9BAF19B71BA5DA3B455C7451C4EBC53B3AD899D571B2
+      A99F89838DB8CF220BBD53CF20B5CEAC5374A1D70A3922632BFD1DFD55E21A08
+      2591F4C31FDF72F61A5AE0E038BC0BB1BDC6B684B6D50545B78A5A8A31D6D29E
+      3C991BDB1F11E61CDF577CE0F0BB9B42CEA534570A28AAA064724150C6CAD716
+      7B408C83BFBD12C98A564D132589C1F1BDA1CD70E441E4573444044440444404
+      44404444044440444410DAA6E2FB5698B85644FE099B096C4E3D923BD569FF00
+      910B49D0C2C670B58311C4D0D68F01B05B37A4EAAEAAC14D4C1DBCF523233CDA
+      D05DF5E1F92D6D4A71093DE56BF8F3D7587E4DEE5C66B0E4858977A1655D1C91
+      B87AB28E127B9DD87E2B2A22B24C7D740E6778DBDEB4D9D9C6499732EB595646
+      F75A9959C389E864CBC7FB793C7E7E4BB63A80E6820E411B2967C2D65E2A29E4
+      6FD955B38C8F9387F3DEA994B3BE8EA26B7CE7ED29DE6304F680560FCDE3D3CB
+      F963324E4D5ED81D87071CF2C29AD09AB1F67D6741339C1B4D34829E6076C31E
+      40C93E0784F92A855BCBE2CE7D9587B387AC7CF3C945AE53D5EBDABCC286BB5B
+      E7EA685B6DA780B2199AD96120343A0C16B9A3BB63B2693BB7F4EE92B5DCCB83
+      9F514CC748472E3030FF00FB02A69736A886B048631576C3EA8A197AA898E690
+      EEAB84161DC9E21CC0776F09E44103ED9BFB2565C6D648C43375F08CE4F552E5
+      DF2789401D81A149B608593C9336263659000F903471380CE013DB8C9F8A8DAB
+      6FA3EA5B7D4F106B6A229295C00DDEE189199F00192F3E5C5B7344A5D1110111
+      1011110111101111011110111106B3E95A5709AD517DDE195D8F1F502A50F500
+      6770562E94DDD6EA6A68DCE2E6C54AC731A5C70D717BF247764019EFC055564E
+      263C63993823B8F685BB4FE63CFDF7F954844548427928D84A91817763AAD6A2
+      87D1EB61A868DA3941FDD7EDF5C2A2EB7A3F44D42DA960C32AE16C808FC4363F
+      41F15B3B52D299E8C639BDAE60F7F36FCD53358C1E9DA32DF736B72EA69831E7
+      B9AF1FA80B1FC8C79975E97C6CBCB5F3FA5460ADE36F03FDAEFEF5C811B83C82
+      8B0566B1F96B493CC6EB375D2E2F4C74237115DD1F8807FA3AA92103C0E1FF00
+      FB3F05B25696FD9EEA4BE86FD4C41019344F1E6D70FF00CADD28E98FD0A2AF83
+      869E92A0025D05640E1838D9CF11927C035EE3E4A5545EA28C4BA7EB4171686C
+      65E4B4E0E1BEB1FA22C922E6B48CB80C9C0C9E6B92C5AC95B0885CF8849999AD
+      19FBA4ED9F9AEBB54A1F6EA70480F2CE5C5C5B038CE7B7F9E48339154E6D52DA
+      2E93A2D3552F023AEB736A29B3FF00D5AF78737CDA01FDCF156C404444044440
+      444404444044441A63A4F783AB8B47653440FF00C9CAA25AF1275D091D663D66
+      B8FAAF1E3DC7C559BA4B38D6553BFF009517D156227E4ADDABF31E6EEFD54951
+      5547338B3764ADF6A37ECE1FA8F11B29880A826C515435A246E4B776B81C39A7
+      C08DC2CF81F574D8FF00571F93641F91F92D0CB523738F8ED52B8738C878F23F
+      A2AA328FD3F4C6A1B481973617CB10F16FDA37E815BE96AE9AB9B25309386473
+      4B4C520E178C8EE2ABB619453EA98049EC4EC0C78F712D3F2C2CFBE7AEB5FC3C
+      BDD8D2A1D9683D8B26177A847715F6E747FD1B76ADA13FE9AA2487FE2E23F25D
+      113F1263B08C2C15BAB7CFECEE4BA6D45DCD6D37CFADFD16F55A27F675049D44
+      FF00BA3D1DA7DFEBADEC9169F428BD499FEABDDF1CFD0A6FE02A5143EA891D16
+      9BAD2C6F1973433833ED07383481E273852977564D0CD37A2C8CE231490BC7BC
+      BF6E7DD8CFF233896631FA4C6D8A612B453643B71C5991D9201DC72DFC9744A6
+      47EA49039CC1189A16B463B1B1C8F3E7BFD3B977D83AC05B13E764A61A481A4C
+      6ECB4B8F1127B8EDC3B8E7F041A43A79B8D55ABA4AB1DC28DE59514B44C9627F
+      7384AF23E8B7BE9BBE536A5D3B4179A43F655710938739E0772734F88208F25A
+      E7A59E8E65D5D506E34357236E30C0D8E1A69183AA9B84B9DC21FF0075C788F6
+      E0EC3C57CE8423B858EDB53A7AECC314CFFEDF4AC2F0EFB3761AE1B7220F0923
+      3F7FDE886DC4444488888088880888808888348F4A8CE0D592B87DEA589DF370
+      FC95329E43B64ABE74B3111A9227E369289B83E21EFF00D42D751396ED5F98F3
+      777EEA7A9E4E4A529E45014F2F25294F2725DD9AA759053D580DA889923472E2
+      1B8F71E6154AEF1CF68D401F046E9A28E7F522691D60E200EC49008C0EDDF2AD
+      1472EE145EAC8F86A9938FBD1B1FE6D760FC8AA6D9DC6BA68BCD9146D5FA66F1
+      77D5574B85B2C7727432C91CCE6BA988730BD81C49ECC678B7CAD85A4FA21B64
+      F6781D5B46E9EB7AB6BE62E790039C33C23040D95A69EA9B6CB6D0DF657F0D0D
+      4D3B686B9C7D988B5C5D0CAEEE682E7B1C7B03DA7934AC7BDE9EA7BCFA2B27AC
+      AEA48E11C1F6333991C8DDB1C58DB380067BBDEBCEB1EA5FB5A34469BA0D350D
+      C21A3A414C5F2B7AC1C59CE1BB1E67BD5A1D3C4D0E2E958034E1D970D8AD6341
+      A1EC74D6F7501B84AEA57CBD73A0648F2C73F007110D0327006E7B94A51E89D3
+      74ECC456A9256E73FE1F209FDE2553DAD2A765D75A561A9F4775FA83ACC90436
+      50E008E6091B02B0AE3AB74F5C69D90C75157501B3C530F44A591F931C8D7819
+      E1C6096807C16452D8A869B7A6B2F091CB25ACFA2E75957496D2D156FB6D2B9D
+      ECB679727DFBAB4C6DF511965319DAC276A6A79DEF753E9AB94CE7B8B899591C
+      60B8B7873EB3F3ECEDCB92EE82E77E730368F4E52D2B701A3ACA93B0030061AC
+      C600F1599555F4F416696EB5174822A0899C6E9608C104671818CE493B003727
+      65539B59D6D411E85A56F538EC370AB8A95BF00E7387C32A39FDA65EFB8EC3A6
+      B54CFA91B73B96AC7454A65E3340C21B0B5BB61A076E319C9DD476A6B845A675
+      0E99BAF5819C75752646EE3FB23DE01711DC38D847B82E4FBB6B09C9EA2934F5
+      B233DA5B255C83CCF0050376B254D5C7555573AE9AE35F3C6192544C0370D19C
+      318C1B31A092703993924A94C8DE60E42FAAB3A06E6FBAE8BB74B2926785869A
+      624E4974678727DE003E6ACC808888088880888808888358F4BB4E782D35607A
+      AD74B11F30D70FE12B5139BD54A5BD9D9EE5BEBA4EA1357A22AA6630BE4A2736
+      A9A073C34E1DFF0042E5A418D8EA616904398E196B82D7A2F71E307C8C79975F
+      217EE148D3CBC944BA3929DE03C6C7938722B2E091698C9561A49B046EB9EA26
+      FA45BE02399E38FE2DDBE6146D34BB8DD67D64A24B7341FBB2B08F8E132FA31F
+      594AB669C905C7A2EAC89C03BAB69383EE0A9966AABE5A9BD4D9AEF253400ED4
+      D3C2DA88983B9A1DBB4780701E0ACDD1FCC3FA997985C76119C7C0854913DE63
+      B9B1B410B64A57432710735A007F0BB84F1139078B846318C672BCEAF662E115
+      7EB1A81F69AADF134FDDA5B740CF9B838AFA6CD709887576A6D45303CC7A7985
+      A7CA30D5548EDFA9AA20639D7AA8A395B1461D9A86BF8A5CE24700D661ADE12E
+      0D6EFEB709DB0BECBA3E19EB65927BB549A474EC95B4DC4E763AB77A99717672
+      185CD27BDC5DCC0545972B2D6C361BDD30B7DE26A863EA594D5B47357BAA7024
+      70607E1CE716383DCCEE041208CE08AF5CEEB749AEB7D0CB652D6CD255C90092
+      688492C6DDDA1ACC9E400EC0464EFD8BA696C143454FD5B6AEA247B697D12094
+      B6369819C5C608E168E270780EE2764923DEA4A7B95BEB5EFACAAB90B0DDE403
+      D2D92523E6A5A9780075B116F22401B139EC236C9D1A36CD77B67597E568BB64
+      92F1876292AA3D3378A3A863A26D1D750CC29DEE2434F5D11037DF7C9F9772BA
+      3A48C123C552A1969990FA3514B513D33EA1B59575D551752FAC959FDD864670
+      5B13480EC90092D680300ACE75C4FE25CF6E7E795C9DB4EBFF001E131594CF1E
+      FC96255CB1BA370DB928075C0FE25D325717672E5CDD575E8C27E075EA846385
+      B3B2A1BFBEDC1FE0F9AD84B537471525BAB278C1F566A6208F10411F9ADB288A
+      222220444404444044441D53C115553CB4F3B04914AC2C7B1C367348C107C979
+      7EF36EAAD15A9AAED550D7BE99AFE28C91BBA33ECBDBDFB6C47783DA17A9553F
+      5FE898358DA31196C572A605D4D31E5E2C77FB4FC8EFDE0DB1CAE37B15CB1994
+      E569C81D0D5C0D734B6489FB823915D72503E225F0E5EDED6F68FD5577370D3D
+      739A9A689D05444FE19E9E4E44FF003C88F98569B5DD29AE0008DDC33019744E
+      E63DDDE3C42DBAF6CC9E76DD3961FF001D74F2EE165CF3E228D99D8BC38FB86E
+      BBEA29E27B78CB70FF00C43B543D748190B867D67FD9B7F3F97D42E99DE4EB96
+      BC7CB29168D275269B49DC37DE566160D047298E673065B0B3AC90938E16E40C
+      FC481E6BAE96714D65107E2E6170A7BC4B474F3C113612D99CD738BD81C4169C
+      8C799CAF3ED7B1271391DB6E72C45EDA5901F54B58E1C2E7876402D0798DB759
+      94BA7EAAA46249E38A43235A1A087021C700F1038DCE401DE0F2DD5665D4B719
+      0E7D2DCDF5FACFB301A43B20E720679807DFBA8E96E12CA4F592BDFF00FE9C4F
+      7FEA7E255565C4DBE8A3E3335C981AD8DA76201E22DCEDBEE3978E1C0F3D961D
+      5496BA3999145573D4B4BCB659232D1C2D18C9681B1277C6FB78AA99A9C72D97
+      0353BF3417B9351D9E173FD1A85FC249C16B1AD2D20618F693939E477E472772
+      5572B2E4EABAC9AA5FC2D7CD239E5ADE40939C05086A7C5759A9F1412CEA9F15
+      D6EA9F15166A7C5193873837B4A0D8FD17C6F9F544B281EAC34EE24FBC8016E2
+      549E8DB4ECF65B2CB5559198EAAB1C1DC0EE6C60F641EE3B93E615D942A22220
+      22220222202222022220A8EB6D036DD654A1D21F46B8C4310D5B1B9207E170FB
+      CDFA7676E7CF37ED3D76D29736D2DD29DD0C99CC3330FA9263EF31DDBD9E23B4
+      2F5A2C1B9DAA82F541250DCA963A9A69061CC9067CC771F11B84978879869B51
+      D618C4533639F1FE613C2EF3C0C1F92E713DD55542491D93F203B82BCEA4E852
+      B696692AB4CD4B6784EE28EA5DC2F6F835FC8FEF63DE55469F4A6AE8AA9D4F26
+      9CB807722EEAF2D1FBC363E4574BB32B396AB8EAC71BD91CEA2AF60C0792C274
+      E55960E8E35654E08B5F560F6CB331BF2CE7E4A560E876FF00211E915D6F8467
+      7E173DE7F842A3A282673DEB819CF7ADB14DD0A423FC65F657F8434E19F52E53
+      54BD10E968037AE6565510724CB50467C3D5E15075A29D3E3995F69D9515D208
+      E9209AA242701B0C65E4F900BD2345A234C5034082C745B76C91890FC5D92A75
+      91B23686B18D68EE68C21D79C68F41EACAFC18ACB3B1A7EF4EE6C581EE7107E4
+      AC543D0DDF2739AEB8515337BA3E295DF403E6B77A221AD283A19B44203ABAE1
+      5954E0770CE189A7CB04FCD5BAD3A374F592412D05AE18E56F295F991E3DCE71
+      2429D44044440444404444044440444404444044440444404444044440444404
+      444044440444404444044441FFD9}
+    Stretch = True
+    Transparent = True
+  end
+  object SpeedButton1: TSpeedButton
+    Left = 390
+    Top = 208
+    Width = 27
+    Height = 22
+    Anchors = [akTop, akRight]
+    Glyph.Data = {
+      76010000424D7601000000000000760000002800000020000000100000000100
+      04000000000000010000120B0000120B00001000000000000000000000000000
+      800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
+      FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00370777033333
+      3330337F3F7F33333F3787070003333707303F737773333373F7007703333330
+      700077337F3333373777887007333337007733F773F333337733700070333333
+      077037773733333F7F37703707333300080737F373333377737F003333333307
+      78087733FFF3337FFF7F33300033330008073F3777F33F777F73073070370733
+      078073F7F7FF73F37FF7700070007037007837773777F73377FF007777700730
+      70007733FFF77F37377707700077033707307F37773F7FFF7337080777070003
+      3330737F3F7F777F333778080707770333333F7F737F3F7F3333080787070003
+      33337F73FF737773333307800077033333337337773373333333}
+    NumGlyphs = 2
+    OnClick = SpeedButton1Click
+  end
+  object PtNameLabel: TLabel
+    Left = 114
+    Top = 12
+    Width = 37
+    Height = 13
+    Caption = 'Name:'
+    Font.Charset = DEFAULT_CHARSET
+    Font.Color = clWindowText
+    Font.Height = -11
+    Font.Name = 'MS Sans Serif'
+    Font.Style = [fsBold]
+    ParentFont = False
+  end
+  object PtDOBLabel: TLabel
+    Left = 120
+    Top = 28
+    Width = 31
+    Height = 13
+    Caption = 'DOB:'
+    Font.Charset = DEFAULT_CHARSET
+    Font.Color = clWindowText
+    Font.Height = -11
+    Font.Name = 'MS Sans Serif'
+    Font.Style = [fsBold]
+    ParentFont = False
+  end
+  object PtSSNLabel: TLabel
+    Left = 121
+    Top = 44
+    Width = 30
+    Height = 13
+    Caption = 'SSN:'
+    Font.Charset = DEFAULT_CHARSET
+    Font.Color = clWindowText
+    Font.Height = -11
+    Font.Name = 'MS Sans Serif'
+    Font.Style = [fsBold]
+    ParentFont = False
+  end
+  object PtName: TLabel
+    Left = 160
+    Top = 12
+    Width = 3
+    Height = 13
+  end
+  object PtDOB: TLabel
+    Left = 160
+    Top = 28
+    Width = 3
+    Height = 13
+  end
+  object PtSSN: TLabel
+    Left = 160
+    Top = 44
+    Width = 3
+    Height = 13
+  end
+  object Label1: TLabel
+    Left = 108
+    Top = 60
+    Width = 43
+    Height = 13
+    Caption = 'Barcode:'
+  end
+  object BarcodeLabel: TLabel
+    Left = 160
+    Top = 60
+    Width = 3
+    Height = 13
+  end
+  object Label2: TLabel
+    Left = 235
+    Top = 240
+    Width = 110
+    Height = 13
+    Anchors = [akTop, akRight]
+    Caption = '# Pages in Scan Batch'
+  end
+  object PrinterComboBox: TComboBox
+    Left = 64
+    Top = 208
+    Width = 325
+    Height = 21
+    Anchors = [akLeft, akTop, akRight]
+    ItemHeight = 13
+    TabOrder = 4
+    OnChange = PrinterComboBoxChange
+  end
+  object PrintButton: TBitBtn
+    Left = 300
+    Top = 270
+    Width = 119
+    Height = 32
+    Anchors = [akTop, akRight]
+    Caption = '&Print Label'
+    TabOrder = 8
+    OnClick = PrintButtonClick
+    Glyph.Data = {
+      C4060000424DC406000000000000360400002800000020000000180000000100
+      0800010000008E020000110B0000110B000000010000000100000C1106000B0F
+      0C000D110F0010140B0012160D0017170B00131C1200161F15001C2114001922
+      180020251800252B16002A2B1A002D2F16002B30220032341B0032302C00383A
+      210036343000423F22003A3834003E3C38004944360049433B004C4833004C47
+      3900534937004F48410047484C004C5243004A4C5000504D4F0057504900524E
+      50004E4F5400545052005D5A3C0061583F00685A3C00565254005F5C3E007861
+      2D007A632F00595557005A575300725F3B00816629005F565500665B49006C5C
+      4600685E45005C5A56005C585A0064604A00685C51006A6147005D595C008569
+      2E00595C5A007A683B00856838005F5C5E0066615200615D60005E625A007565
+      4F00846D3A008B6F350064606200706653006D6953006662640087703D008F73
+      3900686466008F7142008A7340006F686000756B58007E6F51006B6769008A72
+      49007D6B5C0094773E0068696E009679400086715600746D65006F6B6D008975
+      520082725B00987B420097794A009A7D4400726E7100927951007A746500997B
+      4C008B765B00947D4B00767274009E81490097804E00907C5900977E5500A184
+      4C009A805800A3864D0095815D0096845700787E6E00777A780082797800837B
+      7400847E6F00A58850009F875500A78A520099856200807E7900807C7E007B7C
+      810081817500888273007C7D8200AA8C5400A7895B00AC8E570084808200A68E
+      5C00AC8D5F00AE905900818287008783850083887F00B0925B00AA9261008985
+      870084858A00B0916300B2945D0086878C0091888700B4965F0087888D008F8E
+      82008E8A8C00B19867008A8D8B00B99D5C008A8B9100908E8900B89A6300918B
+      9400B99C6400AD9A6E008D908E00938F9200BEA16000B7A06500B69D6C008F91
+      9600C0A36200C1A46300A59B80009793950099988C0093988F00BBA469009A96
+      980094969B009B999400C3A56E00979A98009D999B0098999E009F9E9200A69E
+      9600A1A09400A09C9E00CBAE6D00A29EA100CDB06F00A4A0A300D1B47300AEA8
+      9800A3A6A400AAA7A200ABA9A400A6A9A700A6A7AD00AFACA700AAABB000ABAE
+      AC00B2ADB000B5B4A800B4B2AD00BBB5A500AAB4AE00BBB1B100B0B1B600B7B7
+      AA00B8B3B600BFB9A900B5B6BC00B9BEB400C6BFAF00B9BCBA00C7C0B000BABB
+      C000C0BEB800C0BCBE00BCBFBD00C4C1BC00BEC2C000CAC0C000D4CCA700CDC7
+      B700BBC4C400C7C2C500C4C8C500C7CBC900D7D1C000CBCECC00CFD2D000CFD0
+      D600D0D3D100DFD7CE00D3D7D500DAD8D200DADEDC00DDE0DE00DFE2E000E0E5
+      DB00E0E4E100E8E5E000E2E5E300EAE9DC00E4E8E600E6E9E700E7EAE800EAEE
+      EB00F1ECEF00F4F2EC00EFF2F000F1F5F300F9F7F200F4F8F600FCFAF400F7FA
+      F800F8FBF900F9FCFA00FAFDFB00FBFFFC00FFFDFF00FCFFFE0006FF0005F8FF
+      FEFFFF0003FE0005FFFEFFFEFE000DFF000007FF000FFEF8FCDB505084A9C0D1
+      EBF4FEFFF80004FF01F805FF000008FF0011F378141B3F3823231F1C225E96C0
+      E1F2FC0003FE04FF000005FF000BFEFFF13A1A665F365E503F00033800082223
+      23221E58C8FC05FF000005FF0010FEF62F26746B5D2D8E859D96785E5047033F
+      00033838EB0005FF000005FF0011F8AB315F4B537467B3708599B5B7AEA9B500
+      035E015401CF05FF000005FF0016FB5A432A43557D6DC74A5E8080928E85928D
+      8A8578D305FF000004FF0017F8ED3B2D39537E8F6AD777A5AA9499A45CB5C2C2
+      BEA1E10005FF000004FF0017FEDE2929486583B662D597B7BDBBD3D89EBFC8CF
+      CC92F20005FF000004FF0017F8D02D3C5B759AB65AD2C6A7C1DAD1E4E9EAD4C2
+      AD84FC0005FF000004FF0016FECE2D4B6987ACA34E1286CFFBF9EAE6D6DCDFBB
+      DDC206FF000003FF0017FEF8CB425C7383958871010007FAFFFEFEDCE0EBEA77
+      F00006FF000005FF0015CB5155659AB67657010406FBFFFFFCE4E1EE9633FE00
+      06FF000004FF0015FED04C638CA2B6562F010808FAFFFFFEEAEBF297DF0007FF
+      000005FF000BD95F6A8FA3AC521202080E0003FF0005FEEBF2F9E00008FF0000
+      04FF0012FEE36A7587A38B50050A0B1DFCFFFEFAEAFA0AFF000005FF0010ED68
+      828FAC671F0C110D7AF8FBF9F4F20BFF000005FF0010F86D8B8F9F36171A130F
+      C6F8FEF2EBF70BFF000006FF000FA4819A88201A252424F3F6E1EBEAFC000BFF
+      000004FF0011FEF8D26A752615283235BCF7E1DDEFF0FE000BFF000005FF0011
+      FCFE7B1A101C303071F6F3EBEBE1B3DBFC000AFF000007FF000DFEBF40354546
+      607A91ABBCE2FB000CFF000008FF000BFCFBEBD5BCB0A6B2C4E5FB000DFF0000
+      09FF01FE16FF0001}
+  end
+  object DoneButton: TBitBtn
+    Left = 172
+    Top = 270
+    Width = 112
+    Height = 32
+    Anchors = [akTop, akRight]
+    Caption = '&Done'
+    TabOrder = 7
+    OnClick = DoneButtonClick
+    Glyph.Data = {
+      36010000424D3601000000000000760000002800000014000000100000000100
+      040000000000C000000000000000000000001000000000000000000000000000
+      8000008000000080800080000000800080008080000080808000C0C0C0000000
+      FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00EEEEEEEEE000
+      00000EEE0000EEEEEEEEE0BBFFBB0EEE0000EEEEEEEEE07F90F70EEE0000EEEE
+      EEEEE08F990F0EEE0000EEEEEEEEE0F9990F0EEE0000EEEEEEEEEF799990FEEE
+      0000EEEEEEEEF7990990FEEE0000EEEEEEEF990FF7990FEE0000EEEEEEEEFFFE
+      EF990FEE0000EEEEEEEEEEEEEEF990FE0000EEEEEEEEEEEEEEF790FE0000EEEE
+      EEEEEEEEEEEF790F0000EEEEEEEEEEEEEEEEF7900000EEEEEEEEEEEEEEEEEFFF
+      0000EEEEEEEEEEEEEEEEEEEE0000EEEEEEEEEEEEEEEEEEEE0000}
+  end
+  object cboAuthor: TORComboBox
+    Left = 65
+    Top = 115
+    Width = 355
+    Height = 21
+    Anchors = [akLeft, akTop, akRight]
+    Style = orcsDropDown
+    AutoSelect = True
+    Caption = 'Author'
+    Color = clWindow
+    DropDownCount = 7
+    ItemHeight = 13
+    ItemTipColor = clWindow
+    ItemTipEnable = True
+    ListItemsOnly = False
+    LongList = True
+    LookupPiece = 2
+    MaxLength = 0
+    ParentShowHint = False
+    Pieces = '2,3'
+    ShowHint = True
+    Sorted = False
+    SynonymChars = '<>'
+    TabOrder = 1
+    OnChange = cboAuthorChange
+    OnNeedData = cboAuthorNeedData
+  end
+  object calDOS: TORDateBox
+    Left = 64
+    Top = 239
+    Width = 137
+    Height = 21
+    TabOrder = 5
+    Text = 'NOW'
+    OnChange = calDOSChange
+    OnExit = calDOSExit
+    DateOnly = False
+    RequireTime = True
+    Caption = 'Date/Time of Note:'
+  end
+  object cboLocation: TORComboBox
+    Left = 64
+    Top = 176
+    Width = 357
+    Height = 21
+    Anchors = [akLeft, akTop, akRight]
+    Style = orcsDropDown
+    AutoSelect = True
+    Caption = 'Visit Location'
+    Color = clWindow
+    DropDownCount = 7
+    ItemHeight = 13
+    ItemTipColor = clWindow
+    ItemTipEnable = True
+    ListItemsOnly = True
+    LongList = True
+    LookupPiece = 0
+    MaxLength = 0
+    Pieces = '2'
+    Sorted = False
+    SynonymChars = '<>'
+    TabOrder = 3
+    OnChange = cboLocationChange
+    OnNeedData = cboLocationNeedData
+  end
+  object cboNoteTitle: TORComboBox
+    Left = 64
+    Top = 147
+    Width = 357
+    Height = 21
+    Anchors = [akLeft, akTop, akRight]
+    Style = orcsDropDown
+    AutoSelect = True
+    Caption = 'Progress Note Title'
+    Color = clWindow
+    DropDownCount = 7
+    ItemHeight = 13
+    ItemTipColor = clWindow
+    ItemTipEnable = True
+    ListItemsOnly = True
+    LongList = True
+    LookupPiece = 0
+    MaxLength = 0
+    ParentShowHint = False
+    Pieces = '2'
+    ShowHint = True
+    Sorted = False
+    SynonymChars = '<>'
+    TabOrder = 2
+    OnChange = cboNoteTitleChange
+    OnNeedData = cboNoteTitleNeedData
+  end
+  object cboPatient: TORComboBox
+    Left = 65
+    Top = 83
+    Width = 355
+    Height = 21
+    Hint = 'Enter name or use "Last 4" (x1234) format'
+    Anchors = [akLeft, akTop, akRight]
+    Style = orcsDropDown
+    AutoSelect = True
+    Caption = 'CY'
+    Color = clWindow
+    DropDownCount = 7
+    ItemHeight = 13
+    ItemTipColor = clWindow
+    ItemTipEnable = True
+    ListItemsOnly = True
+    LongList = True
+    LookupPiece = 2
+    MaxLength = 0
+    ParentShowHint = False
+    ShowHint = True
+    Sorted = False
+    SynonymChars = '<>'
+    TabOrder = 0
+    OnChange = cboPatientChange
+    OnNeedData = cboPatientNeedData
+  end
+  object BatchNumComboBox: TComboBox
+    Left = 355
+    Top = 238
+    Width = 65
+    Height = 21
+    Anchors = [akTop, akRight]
+    ItemHeight = 13
+    TabOrder = 6
+    Text = '<ANY>'
+    OnChange = BatchNumComboBoxChange
+    Items.Strings = (
+      '<ANY>'
+      '1'
+      '2'
+      '3'
+      '4'
+      '5'
+      '6'
+      '7'
+      '8'
+      '9'
+      '10'
+      '11'
+      '12'
+      '13'
+      '14'
+      '15'
+      '16'
+      '17'
+      '18'
+      '19'
+      '20')
+  end
+  object PrinterSetupDialog: TPrinterSetupDialog
+    Left = 8
+    Top = 96
+  end
+end
Index: cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/fPtLabelPrint.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/fPtLabelPrint.pas	(revision 729)
+++ cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/fPtLabelPrint.pas	(revision 729)
@@ -0,0 +1,477 @@
+unit fPtLabelPrint;
+//kt added this entire unit and form 12/2007
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, Spin, StdCtrls, Buttons, jpeg, ExtCtrls, ORCtrls, ORDtTm,
+  Printers, uCore,ORFn;
+
+type
+  TfrmPtLabelPrint = class(TForm)
+    NameLabel: TLabel;
+    AuthorLabel: TLabel;
+    NoteTypeLabel: TLabel;
+    PrinterComboBox: TComboBox;
+    PrinterLabel: TLabel;
+    DateLabel: TLabel;
+    LocationLabel: TLabel;
+    PrintButton: TBitBtn;
+    DoneButton: TBitBtn;
+    Image1: TImage;
+    cboAuthor: TORComboBox;
+    calDOS: TORDateBox;
+    cboLocation: TORComboBox;
+    cboNoteTitle: TORComboBox;
+    cboPatient: TORComboBox;
+    PrinterSetupDialog: TPrinterSetupDialog;
+    SpeedButton1: TSpeedButton;
+    PtNameLabel: TLabel;
+    PtDOBLabel: TLabel;
+    PtSSNLabel: TLabel;
+    PtName: TLabel;
+    PtDOB: TLabel;
+    PtSSN: TLabel;
+    Label1: TLabel;
+    BarcodeLabel: TLabel;
+    BatchNumComboBox: TComboBox;
+    Label2: TLabel;
+    procedure DoneButtonClick(Sender: TObject);
+    procedure PrintButtonClick(Sender: TObject);
+    procedure FormCreate(Sender: TObject);
+    procedure FormShow(Sender: TObject);
+    procedure cboLocationNeedData(Sender: TObject; const StartFrom: String;
+      Direction, InsertAt: Integer);
+    procedure cboAuthorNeedData(Sender: TObject; const StartFrom: String;
+      Direction, InsertAt: Integer);
+    procedure cboNoteTitleNeedData(Sender: TObject; const StartFrom: String;
+      Direction, InsertAt: Integer);
+    procedure FormDestroy(Sender: TObject);
+    procedure cboPatientNeedData(Sender: TObject; const StartFrom: String;
+      Direction, InsertAt: Integer);
+    procedure calDOSChange(Sender: TObject);
+    procedure calDOSExit(Sender: TObject);
+    procedure FormResize(Sender: TObject);
+    procedure SpeedButton1Click(Sender: TObject);
+    procedure cboPatientChange(Sender: TObject);
+    procedure cboAuthorChange(Sender: TObject);
+    procedure cboNoteTitleChange(Sender: TObject);
+    procedure cboLocationChange(Sender: TObject);
+    procedure PrinterComboBoxChange(Sender: TObject);
+    procedure BatchNumComboBoxChange(Sender: TObject);
+  private
+    { Private declarations }
+    FInitPtIEN : int64;
+    FPrinter : TPrinter;
+    initPatientName : string;
+    //FDateTime: TFMDateTime;
+    //FDateTimeText : string;
+    function CompileBarcodeNumber: String;
+    procedure BarcodeChange(Sender: TObject);
+  public
+    { Public declarations }
+    procedure PrepDialog(Patient : TPatient);
+  end;
+
+var
+  frmPtLabelPrint: TfrmPtLabelPrint;
+
+implementation
+
+{$R *.dfm}
+
+uses rCore,rTIU,uConst, 
+      IniFiles // for IniFile
+      , fImages;
+
+const
+  ANY_NUM_PAGES = '<ANY>';
+      
+procedure TfrmPtLabelPrint.PrepDialog(Patient : TPatient);
+begin
+  initPatientName := Patient.Name;
+  FInitPtIEN := StrToInt(Patient.DFN);
+end;
+
+procedure TfrmPtLabelPrint.DoneButtonClick(Sender: TObject);
+begin
+  ModalResult := mrOK;  //to close form.
+end;
+
+
+function TfrmPtLabelPrint.CompileBarcodeNumber: String;
+var
+  DateOfService: string;
+  PtIEN, AuthorIEN, NoteTypeIEN, LocIEN : int64;
+  BCLine,BatchFlag: string;
+  PtIDInfo : TPtIDInfo;
+begin
+  PtIEN := cboPatient.ItemIEN;  //check this
+  PtIDInfo := rCore.GetPtIDInfo(IntToStr(PtIEN));
+  DateOfService := FormatFMDateTime('mm"-"dd"-"yyyy', calDOS.FMDateTime);
+  AuthorIEN := cboAuthor.ItemIEN;
+  LocIEN := cboLocation.ItemIEN;
+  NoteTypeIEN :=  cboNoteTitle.ItemIEN;
+  BatchFlag := BatchNumComboBox.Text;
+  if BatchFlag = ANY_NUM_PAGES then BatchFlag := '*';
+  
+  // 70685-12-31-2008-73-6-1302-0
+  //Note: *** If this changes, then change format in UploadImages.ScanAndHandleImages
+  BCLine := IntToStr(PtIEN) + '-' + DateOfService + '-' +
+            IntToStr(AuthorIEN) + '-' + 
+            IntToStr(LocIEN) + '-' + IntToStr(NoteTypeIEN) + '-' +
+            BatchFlag;
+
+  Result := BCLine;            
+end;
+
+procedure TfrmPtLabelPrint.PrintButtonClick(Sender: TObject);
+var
+  DateOfService: string;
+  PtIEN, AuthorIEN, NoteTypeIEN, LocIEN : int64;
+  BCLine : string;
+  NameLine,DOBLine,ProvLine,LocLine,TitleLine : string;
+  //BatchFlag: string;
+  YPos,XPos : integer;    
+  PtIDInfo : TPtIDInfo;
+  FNamePath : AnsiString;
+  pic : TPicture;
+  SrcRec,DestRec :TRect; 
+  DestPos : TPoint;
+  barcodeWidth,barcodeHeight : integer;
+
+Const
+   BarCodeSize=310;
+   LMargin = 1;
+   TMargin = 1;
+     
+begin
+  PtIEN := cboPatient.ItemIEN;  //check this
+  PtIDInfo := rCore.GetPtIDInfo(IntToStr(PtIEN));
+  //DateOfService := FormatFMDateTime('mm"-"dd"-"yyyy', calDOS.FMDateTime);
+  
+  //AuthorIEN := cboAuthor.ItemIEN;
+  //LocIEN := cboLocation.ItemIEN;
+  //NoteTypeIEN :=  cboNoteTitle.ItemIEN;
+  //if BatchCB.Checked = true then begin
+  //  BatchFlag := '1'; 
+  //end else begin
+  //  BatchFlag := '0'; 
+  //end;  
+  
+  YPos := TMargin+25;
+  XPos := LMargin+BarCodeSize+10;
+  BCLine := CompileBarcodeNumber;
+
+  //TEST,KILLME
+  //DOB: 04-02-1956
+  NameLine := PtIDInfo.Name;
+  DOBLine :=  'DOB: ' + PtIDInfo.DOB;
+  //DOBLine := DOBLine + BatchNumComboBox.Text;
+  ProvLine := Trim(piece(cboAuthor.Text,'-',1));
+  LocLine :=  cboLocation.Text;
+  if Pos('<',cboNoteTitle.Text)>0 then begin
+    TitleLine := piece(cboNoteTitle.Text,'<',2);
+    TitleLine := piece(TitleLine,'>',1)
+  end else begin
+    TitleLine := cboNoteTitle.Text;
+  end;
+
+  FPrinter.PrinterIndex := PrinterComboBox.ItemIndex;
+  FPrinter.Orientation := poLandscape;
+  FPrinter.Title := 'Patient Label -- ' + PtIDInfo.Name;
+  //FPrinter.Copies := StrToInt(QuantitySpinEdit.Text);
+
+  try
+    pic := TPicture.Create;
+    FNamePath := frmImages.CreateBarcode(BCLine,'png');
+    pic.LoadFromFile(FNamePath);  
+    //barcodeWidth := pic.Bitmap.Width;
+    //barcodeHeight := pic.Bitmap.Height;
+    SrcRec.Top := 0;
+    SrcRec.Left := 0;
+    SrcRec.Right := 32;
+    SrcRec.Bottom := 32;
+
+    DestPos.X := LMargin;
+    DestPos.Y := TMargin;
+    DestRec.TopLeft := DestPos;
+    DestRec.Right := DestPos.X+BarCodeSize;
+    DestRec.Bottom := DestPos.Y+BarCodeSize;
+           
+    FPrinter.BeginDoc; //start print job.
+
+    //copy barcode bitmap to printer canvas.
+    FPrinter.Canvas.CopyMode := cmSrcCopy;
+    FPrinter.Canvas.StretchDraw(DestRec,pic.Graphic);
+    
+    FPrinter.Canvas.Font.Name := 'Arial';
+    FPrinter.Canvas.Font.Size := 10;  //# point
+      
+    //Print out Name line      
+    FPrinter.Canvas.TextOut(XPos,YPos,NameLine);
+    YPos := YPos + FPrinter.Canvas.TextHeight(NameLine)+5;
+  
+    FPrinter.Canvas.Font.Size := 8;  //# point
+    //Print out DOB line      
+    FPrinter.Canvas.TextOut(XPos,YPos,DOBLine);
+    YPos := YPos + FPrinter.Canvas.TextHeight(DOBLine)+5;
+  
+    //Print out Provider/Author line      
+    FPrinter.Canvas.TextOut(XPos,YPos,ProvLine);
+    YPos := YPos + FPrinter.Canvas.TextHeight(ProvLine)+5;
+
+    //Print out Location line      
+    FPrinter.Canvas.TextOut(XPos,YPos,LocLine);
+    YPos := YPos + FPrinter.Canvas.TextHeight(LocLine)+5;
+
+    //Print out Note Title line      
+    FPrinter.Canvas.TextOut(XPos,YPos,TitleLine);
+    YPos := YPos + FPrinter.Canvas.TextHeight(TitleLine)+5;
+  
+    //Print out clear-text of barcode data line 
+    FPrinter.Canvas.Font.Size := 8;  //x point
+    FPrinter.Canvas.TextOut(XPos,YPos,BCLine);
+    YPos := YPos + FPrinter.Canvas.TextHeight(BCLine)+5;
+    
+  finally
+    FPrinter.EndDoc;  //close and launch print job
+    pic.Free;
+    DeleteFile(FNamePath);
+  end;  
+
+end;
+
+
+procedure TfrmPtLabelPrint.FormCreate(Sender: TObject);
+var  IniFile : TIniFile;
+     defPrinter : string;
+
+begin
+  FPrinter := TPrinter.Create;
+end;
+
+
+procedure TfrmPtLabelPrint.FormShow(Sender: TObject);
+var
+  uTIULocationName: string;
+  uTIULocation: integer;
+  //temp : string;
+  
+  IniFile : TIniFile;
+  defPrinter : string;
+
+begin
+  cboAuthor.InitLongList(User.Name);
+  cboAuthor.SelectByIEN(User.DUZ);
+
+  uTIULocation := DfltTIULocation;
+  if uTIULocation <> 0 then uTIULocationName := ExternalName(uTIULocation, FN_HOSPITAL_LOCATION);
+  
+  cboLocation.InitLongList(uTIULocationName);
+  cboLocation.SelectByIEN(uTIULocation);
+  
+  cboNoteTitle.InitLongList('');
+  if cboNoteTitle.Items.Count>0 then cboNoteTitle.ItemIndex := 0;
+
+  // Assign list box TabPosition, Pieces properties according to type of list to be displayed.
+  // (Always use Piece "2" as the first in the list to assure display of patient's name.)
+  cboPatient.pieces := '2,3'; // This line and next: defaults set - exceptions modifield next.
+  cboPatient.tabPositions := '20,28';
+  cboPatient.InitLongList(initPatientName);
+  cboPatient.SelectByIEN(FInitPtIEN);
+ // temp := cboPatient.Text;
+  cboPatientChange(self);
+
+
+  IniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.INI'));
+  try
+    defPrinter := IniFile.ReadString('Label Printing','Default Printer','');
+  finally
+    IniFile.Free;
+  end;
+
+  PrinterComboBox.Items.Clear  ;
+  PrinterComboBox.Items.Assign(FPrinter.Printers);
+  if PrinterComboBox.Items.IndexOf(defPrinter) > -1 then begin
+    PrinterComboBox.ItemIndex := PrinterComboBox.Items.IndexOf(defPrinter);
+  end else if PrinterComboBox.Items.Count > 0 then begin
+    PrinterComboBox.ItemIndex := 0;
+  end;  
+  
+end;
+
+
+
+procedure TfrmPtLabelPrint.cboLocationNeedData(Sender: TObject;
+                                               const StartFrom: String; 
+                                               Direction, InsertAt: Integer);
+begin
+  inherited;
+  cboLocation.ForDataUse(SubSetOfNewLocs(StartFrom, Direction));
+end;
+
+
+procedure TfrmPtLabelPrint.cboAuthorNeedData(Sender: TObject;
+                                             const StartFrom: String; 
+                                             Direction, InsertAt: Integer);
+begin
+  (Sender as TORComboBox).ForDataUse(SubSetOfPersons(StartFrom, Direction));
+end;
+
+
+procedure TfrmPtLabelPrint.cboNoteTitleNeedData(Sender: TObject;
+                                               const StartFrom: String;
+                                               Direction, InsertAt: Integer);
+var  FIDNoteTitlesOnly : boolean;  
+begin
+  FIDNoteTitlesOnly := false;
+  cboNoteTitle.ForDataUse(SubSetOfNoteTitles(StartFrom, Direction, FIDNoteTitlesOnly));
+end;
+
+
+procedure TfrmPtLabelPrint.FormDestroy(Sender: TObject);
+begin
+  FPrinter.free;
+end;
+
+procedure TfrmPtLabelPrint.cboPatientNeedData(Sender: TObject;
+                                              const StartFrom: String; 
+                                              Direction, InsertAt: Integer);
+var
+  i: Integer;
+  NoAlias, Patient: String;
+  PatientList: TStringList;
+const
+  AliasString = ' -- ALIAS';
+  
+begin
+  //NOTICE: for now I am taking out restrictions regarding restricted
+  //        patient lists.  User will be able to *print a label* for
+  //        any patient (but not open their chart)
+
+
+  NoAlias := StartFrom;
+  with Sender as TORComboBox do begin
+    if Items.Count > ShortCount then begin
+      NoAlias := Piece(Items[Items.Count-1], U, 1) + U + NoAlias;
+    end;  
+  end;  
+  if pos(AliasString, NoAlias)> 0 then begin
+    NoAlias := Copy(NoAlias, 1, pos(AliasString, NoAlias)-1);
+  end;  
+  PatientList := TStringList.Create;
+  try
+    begin
+      PatientList.Assign(SubSetOfPatients(NoAlias, Direction));
+      for i := 0 to PatientList.Count-1 do begin  // Add " - Alias" to alias names:
+        Patient := PatientList[i];
+        // Piece 6 avoids display problems when mixed with "RPL" lists:
+        if (Uppercase(Piece(Patient, U, 2)) <> Uppercase(Piece(Patient, U, 6))) then begin
+          SetPiece(Patient, U, 2, Piece(Patient, U, 2) + AliasString);
+          PatientList[i] := Patient;
+        end;
+      end;
+      cboPatient.ForDataUse(PatientList);
+    end;
+  finally
+    PatientList.Free;
+  end;  
+end;
+
+
+
+procedure TfrmPtLabelPrint.calDOSChange(Sender: TObject);
+begin
+  //FDateTime := calDOS.FMDateTime;
+  BarcodeChange(self);
+end;
+
+procedure TfrmPtLabelPrint.calDOSExit(Sender: TObject);
+begin
+//  FDateTimeText := FormatFMDateTime('mmm dd,yyyy', FDateTime);
+end;
+
+procedure TfrmPtLabelPrint.FormResize(Sender: TObject);
+begin
+  //if Width < 375 then Width := 375;
+  //if Width > 500 then Width := 500;
+  //if Height <> 345 then Height := 345;
+end;
+
+procedure TfrmPtLabelPrint.SpeedButton1Click(Sender: TObject);
+begin
+  PrinterSetupDialog.Execute;
+end;
+
+procedure TfrmPtLabelPrint.cboPatientChange(Sender: TObject);
+var
+  PtIDInfo : TPtIDInfo;
+  PtIEN : int64;
+begin
+  PtIEN := cboPatient.ItemIEN;  
+  PtIDInfo := rCore.GetPtIDInfo(IntToStr(PtIEN));
+  PtName.Caption := PtIDInfo.Name;
+  PtDOB.Caption :=  PtIDInfo.DOB;
+  PtSSN.Caption := PtIDInfo.SSN;
+  BarcodeChange(self);
+end;
+
+procedure TfrmPtLabelPrint.BarcodeChange(Sender: TObject);
+begin
+  BarcodeLabel.Caption := CompileBarcodeNumber;
+end;
+
+
+procedure TfrmPtLabelPrint.cboAuthorChange(Sender: TObject);
+begin
+  BarcodeChange(self);
+end;
+
+procedure TfrmPtLabelPrint.cboNoteTitleChange(Sender: TObject);
+begin
+  BarcodeChange(self);
+end;
+
+procedure TfrmPtLabelPrint.cboLocationChange(Sender: TObject);
+begin
+  BarcodeChange(self);
+end;
+
+procedure TfrmPtLabelPrint.PrinterComboBoxChange(Sender: TObject);
+var  IniFile : TIniFile;
+     defPrinter : string;
+begin
+  FPrinter := TPrinter.Create;
+  IniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.INI'));
+  defPrinter := PrinterComboBox.Items.Strings[PrinterComboBox.ItemIndex];
+  try
+    IniFile.WriteString('Label Printing','Default Printer',defPrinter);
+  finally
+    IniFile.Free;
+  end;
+end; 
+
+procedure TfrmPtLabelPrint.BatchNumComboBoxChange(Sender: TObject);
+var temp : integer;
+begin
+  if BatchNumComboBox.Text <> ANY_NUM_PAGES then begin
+    temp := 0;
+    try
+      temp := StrToInt(BatchNumComboBox.Text);
+    except
+      on E:EConvertError do begin
+        temp := 0;
+      end;
+    end;
+    if temp < 1 then begin
+      MessageDlg('Invalid Number.',mtError,[mbOK],0);
+      BatchNumComboBox.Text := '1';
+    end;
+  end;
+  BarcodeChange(self);
+end;
+
+end.
+
+
Index: cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/frmImageTransferProgress.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/frmImageTransferProgress.dfm	(revision 729)
+++ cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/frmImageTransferProgress.dfm	(revision 729)
@@ -0,0 +1,288 @@
+object ImageTransferForm: TImageTransferForm
+  Left = 348
+  Top = 212
+  BorderStyle = bsToolWindow
+  Caption = 'Image Transfer Progress'
+  ClientHeight = 86
+  ClientWidth = 276
+  Color = clBtnFace
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  OldCreateOrder = False
+  Position = poScreenCenter
+  PixelsPerInch = 96
+  TextHeight = 13
+  object Label1: TLabel
+    Left = 56
+    Top = 8
+    Width = 101
+    Height = 13
+    Caption = 'Transfer Progress'
+    Font.Charset = DEFAULT_CHARSET
+    Font.Color = clWindowText
+    Font.Height = -11
+    Font.Name = 'MS Sans Serif'
+    Font.Style = [fsBold]
+    ParentFont = False
+  end
+  object Image1: TImage
+    Left = 210
+    Top = 12
+    Width = 48
+    Height = 48
+    AutoSize = True
+    Picture.Data = {
+      07544269746D6170361B0000424D361B00000000000036000000280000003000
+      0000300000000100180000000000001B0000120B0000120B0000000000000000
+      0000FFFFFFD4CDC9D3CDC9D3CDC9D3CDC9D1C9C7CBBFC1BDB1B4B4A2ACB19EA9
+      A890A18871834D4B4CDBDBDBF1F1F166D98C89D5A2F1F1F19D9999A59999AB99
+      99B39999877373453F3F3735363735363836373E3A3C4842455E525A8A7385AC
+      97A4BEB4B5CBC1C2D4CBCBE3DFDDF3F1F0FDFCFCFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF93847C93837C93837C907B
+      7B7F676C6449583F3339332D2E322E2E322E2F4848489B9B9BEBEBEBEBEBEBC1
+      CBC4CFCFCFE0E0E0ACAAAAA59999AB9999B39999B99999C199998F73737B7575
+      7A7A7A5F5F5F3332322E2C2C2F2A2B332A2B43343A674A5A846B75A99D9DD8D1
+      D3F4F0F3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFF584236574236573D394C2E3A443E3F8A8A89909090656565636363
+      7777779A9A9AD9D9D9E5E5E5E3E3E3DCDCDCD5D5D5D0D0D0CACACAC1C0C0B3A7
+      A7B39B9BB99999C19999C79999CF9999846666747070BDBDBDB2B2B298989857
+      5756292626241D1E271C1D46373D8A7285C5B4C3E5E0E4F5F1F5FBF8FBFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF925F5F905D5D8D595C614149B3B3
+      B3DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEE1E1E1E1E1E1DFDFDFDBDBDBD5
+      D5D5D9D3CCE9E0D7EAEAEAD0CCC8BABABAB5B4B4B5A5A5BE9B9BC79999CF9999
+      D59999D293938B66667A7575E1E1E1FAFAFAE1E1E1A2A2A25857572D2B2B3B37
+      38534E5270666FA490A4CDBECDE6E2E6F5F1F5FBF8FBFFFFFFFFFFFFFFFFFFFF
+      FFFF946161F2CCCCFAC6C9876A73D8D8D8D8D8D8D8D8D8D8D8D8DCDCDCE2E2E2
+      E8E8E8E4E4E4E0E0E0E2E1E0E6DFD5F2D2ADFFD9B3FFEFE0FFFFFFFFECD9F6D0
+      AAD3BCA5B0ACA8A6A6A6AF9D9DC59999D59999DD9999E49999DE93939A6D6DA0
+      9A9AE9E9E9F5F5F5F5F5F5DDDDDDA0A0A0575757393838454345575357706770
+      A490A4CDBECDE6E2E6F5F1F5FBF8FBFFFFFF946161CCCCCCFAE3D0A59393D1D1
+      D1D1D1D1E0E0E0E9E9E9EFEFEFEAEAEAE4E2DCE6DFD2F3EBE0FDFBF9F3E7D5F5
+      D3AAFFD9B3FFEFE0FFFFFFFFECD9FFD3A6FDC893EDB57DD3AB83AB9E91979797
+      A39393C39494E49999EA9999F29999ED9393986C6CCDCDCDF1F1F1F1F1F1DBDB
+      DBDBDBDBC3C3C3929292626262393839454345575357706770A490A4CDBECDE8
+      E3E8956262CDCDCDFAE4D1B5A5A3E8E8E8F6F6F6F4F4F4E8E5E2F4DEC7FBD1A8
+      F3CEA0EDDCBFF6ECE0FDFBF9F3E7D5F5D3AAFFD9B3FFEFE0FFFFFFFFECD9FFD3
+      A6FDC893F6BA7EF1B170EAA35BD6985AAC8D6E8C86818F8585C18E8EEB9797F9
+      9999CC8080BEBEBEC5C5C5A1A1A19C9C9C9C9C9C9C9C9C9C9C9CB1B1B1D7D7D7
+      A7A7A76D6D6D393839454345595459847A84976464CECECEFEE8D5D8BFB7A697
+      93B4ADABB5B5B5D3CFCCC5B5A5D5B595DFC199EDDCBFF6ECE0FDFBF9F3E7D5F5
+      D3AAFFD9B3FFEFE0FFFFFFFFECD9FFD3A6FDC893F6BA7EF1B170EAA35BE6994D
+      DF8B38D5822FAD794482766A7B7575B38383D286869A9A9AA1A1A1A1A1A1A1A1
+      A1939393858585A1A1A1A1A1A1A6A6A6D2D2D2E8E8E8DCDCDCA4A4A456565651
+      4B51986565D0D0D0FFECD8FEE8D5FAE4D1FBE4D0ECD3C3B19A94AC9F9CA9A5A3
+      ACACACBAB7B2C4C0BBD7D6D4F3E7D5F5D3AAFFD9B3FFEFE0FFFFFFFFECD9FFD3
+      A6FDC893F6BA7EF1B170EAA35BE6994DDF8B38DA8229C77522A16931776A5D5E
+      5E5E997373858585AAAAAA8B8B8B4242423939394040403636365F5F5FA2A2A2
+      ADADADD9D9D9E3E3E3E3E3E3CDCDCD3B393B996666D1D1D1FFECDAFFECD8FFEB
+      D6FFEAD5FFE8D3FBE3CEFBE2CCFBE1CBDBBFB2AB9792A29893959595A0A09EB6
+      AA9DCFB8A1ECDED1FFFFFFFFECD9FFD3A6FDC893F6BA7EF1B170EAA35BC68C53
+      9F7A567F6E5E5C5C5C6E5D5DB47A7AED9393FA99997D77779090903636365B5B
+      5B6161615A5A5A6161615555554646469F9F9FB5B5B5E0E0E0E0E0E0E0E0E05A
+      595A9C6967D2D2D2FFEDDCFFECDAFFECD8FFEBD6FFEAD5FFE9D3FFE8D1FFE7D0
+      FEE4CDFAE0C9FBE1C8FBDFC7B39991A08F8B99928F898989A3A3A3B9B1A8D9B7
+      96F4C291C09B76A48C746F6B675A5A5A4F4B4B745959C48686E89999E89999D3
+      8C8C967070A19C9C4343436262624C4C4C3333333333333333334C4C4C626262
+      545454B6B6B6CDCDCDDADADADADADA6362639E6B68D3D3D3FFEEDEFFEDDCFFEC
+      DAEBEAD0B3C096ACB78FACB891ADB892ADB993ADB994AEBA96AEBB97ACB496A8
+      AF94A4AA92474743AEAEAE8484847575756767675353533D3D3D5B4D4D987373
+      CD9393D89999D89999C48C8C866C6C8F8F8FBCBCBC9191914747476464643333
+      335050506363635959593D3D3D5353534C4C4C919191C4C4C4D7D7D7D7D7D763
+      6263A16E6AD5D5D5FFEFDFFFEEDEF4EBD580CE8481CF8881D08A82D28E83D391
+      83D49484D39683CF987EC59577B48E6F9584566D663337356B6B6B3C3C3C3333
+      333C3939736060B58C8CC99999C99999C99999A480808E7E7EC6C6C68E8E8EC8
+      C8C8C4C4C47C7C7C5656564D4D4D464646696360894320804D33606060373737
+      6C6C6C606060C4C4C4D2D2D2D2D2D2616061A3706BD6D6D6FFF0E1FFF0E0C7E1
+      B982D18C82D28F83D49384D29481CB947CC29176AF8B6B907F4B5F5833423A31
+      38343333333333334646466C6C6C7B7676B69999B69999B69999B69999968080
+      736A6A868686C4C4C4F7F7F78D8D8DCBCBCBCACACA7E7E7E5959594646464D4D
+      4D8E6139C05A00C05A007366593D3D3D6C6C6C595959CACACACECECECECECE5E
+      5D5EA5726CD7D7D7FFF1E3FFF0E2A0C49441984942994A408C49407B493C5F45
+      2C40312634292E332F3333335151517A7A7A989898C0C0C0D3D3D3D3D3D3C4C2
+      C2A79999A799997D7373787474BCBCBCAAAAAAC4C4C4E1E1E1F7F7F78C8C8CCE
+      CECED1D1D18282825B5B5B5151514646467E6B53EC8600E383066E68603D3D3D
+      6F6F6F3D3D3DD1D1D1CCCCCCCACACA5A5A5AA8756ED8D8D8FFF2E5FFF1E37FA2
+      71005400034D03152D151F2A1F2D2F2D6060608D8D8DACACACD7D7D7E2E2E2E2
+      E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E27171717D7D7D9F9F9FECECECECECEC
+      AAAAAAB5B5B5DDDDDDF7F7F78A8A8ACDCDCDD8D8D8B9B9B94949497575753636
+      365C5C5C796C59796C595C5C5C3333337F7F7F5C5C5CD8D8D8C5C5C5C5C5C557
+      5757AB786FDADADAFFF3E6FFF2E57F9D71004800454E45919191BFBFBFECECEC
+      ECECECECECECECECECECECECECECECECECECECECECECECECE0E0E09A9A9A8080
+      80D7D7D7D9D9D9AEAEAEEEEEEEEEEEEEAAAAAAA4A4A4CCCCCCF7F7F7898989C4
+      C4C4DEDEDEDEDEDE4949497878785656563636364949494949493636365C5C5C
+      6C6C6C7E7E7EDCDCDCC1C1C1C1C1C1565656AE7B70DBDBDBFFF4E8FFF3E77F97
+      73013E01586F58F9F9F9F9F9F9F9F9F9F9F9F9EACACAD78A8AD99393E7C1C1E0
+      E0E0A1A1A16F726F9E9E9EBCBCBCC5C5C5F1F1F1DBDBDBAFAFAFF1F1F1F1F1F1
+      AAAAAAC4C4C4E1E1E1F7F7F7919191BCBCBCDBDBDBE6E6E6B9B9B93F3F3F8888
+      886464644C4C4C4C4C4C646464828282393939D0D0D0D6D6D6BCBCBCBCBCBC55
+      5555B07D71DCDCDCFFF5EAFFF4E97F9573024402477447758775999999999999
+      A39C9CA659599C5656744B415541351E311E115311324232F3F3F3C6C6C6C6C6
+      C6F3F3F3DCDCDCAFAFAFF3F3F3F3F3F3AAAAAAC4C4C4E1E1E1B3B3B39F9F9FB8
+      B8B8BEBEBEE8E8E8EBEBEBA6A6A63939396666668080808080806C6C6C393939
+      A6A6A6EBEBEBBEBEBEB8B8B8B8B8B8545454B27F73DDDDDDFFF5ECFFF5EA7F9B
+      74035F034EA04E01600100390000380000380000380000380001370102370202
+      47020263023B4B3BF5F5F5D2D2D2DEDEDEEFEFEFC7C7C7B0B0B0F5F5F5F5F5F5
+      9393939E9E9EA3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C6C6C6F2F2F2F2F2F2CFCF
+      CF7C7C7C3F3F3F3F3F3F707070C3C3C3F2F2F2CECECEB3B3B3B3B3B3B3B3B353
+      5353B68374DFDFDFFFF6EEFFF6ED7FAD75359035409940006600004200003800
+      003800003E00004700004200003B00006200036803646464F1F1F1D4D4D4B6B6
+      B69F9F9FBCBCBCDFDFDFF7F7F7F7F7F76E6E6EB0B0B0B0B0B0B0B0B0B0B0B0B0
+      B0B0B0B0B0B0B0B0BDBDBDF0F0F0F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+      D3D3D3B0B0B0B0B0B0B0B0B0B0B0B0525252B88575E0E0E0FFF7F0FFF6EEBBDE
+      B37CC97C6EBD6E117411005900003800003800005F0000620000440000540007
+      6D073D9E3D616561A5A5A5C3C3C3DBDBDBF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9
+      A5A5A5A3A3A3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2A2A2919191BDBD
+      BDE4E4E4E9E9E9E9E9E9ADADAD989898A3A3A3AAAAAAAAAAAAAAAAAAAAAAAA51
+      5151BB8877E1E1E1FFF8F2FFF7F0BEE1B67ACA7A77C877429F42006300003B00
+      005500006400006600005D000066001A811A4BB34B535B40FBFBFBFBFBFBFBFB
+      FBFBFBFBFBFBFBD5D5D59797977171716565654949496E6E6E8A8A8AA7A7A7A7
+      A7A7A7A7A7A7A7A7969696666666666666666666A7A7A7A7A7A77676765C5C5C
+      5656565B5B5B646464717171989898505050BE8B78E2E2E2FFF9F3FFF8F2B0DC
+      A961C0615CBE5C2C932C00660000400000620038A33800660000660000660042
+      8719C26D06985218CBCBCBFEFEFEFEFEFEFEFEFED8D8D8333333A9A9A9C0C0C0
+      C0C0C0C0C0C0A9A9A9333333B5B5B5A6A6A69898989090908E8E8E9292928B8B
+      8B838383A2A2A2A2A2A26B6B6B6363636666666666666666665959598686864F
+      4F4FC08D79E4E4E4FFFAF5FFF9F3A5D89E4BB74B45B54536A636036A03006300
+      076F072095200269020066004B6903C76100C76100C35D057D512DB3B3B3A6A6
+      A6CCCCCCD8D8D8B1B1B1BEBEBECCCCCCCCCCCCE4E4E4C9C9C9ABABABF2F2F2F0
+      F0F0EFEFEFEDEDEDE0E0E0BCBCBCA9A9A99B9B9B9898988A8A8A686868474747
+      3939394343434D4D4D4D4D4D8383834E4E4EC3907BE5E5E5FFFBF7FFFAF599D3
+      9334AE342EAB2E2AAA2A15891500660004710450B944408E330E6E0BBC8C3EBD
+      5700BD5700BF5900BC5603AA500D964918714021593B277D6B5D7E7E7E979797
+      C8C8C8DFDFDFF6F6F6F5F5F5F3F3F3F2F2F2F0F0F0EFEFEFEDEDEDECECECD9D9
+      D9B7B7B7A6A6A6B5B5B5A0A0A0B0B0B0A2A2A280808066666660606080808042
+      4042C5927DE6E6E6FFFCF8FFFBF78FD08B1CA41C17A21713A113078407006600
+      B1C87EFFF5B8BFD1893F892CF0EDADFCF0B2DAA159C16A1DC36B1DBF6619B64F
+      02B55002B65001B95401BA54029C491189431B6F3E22583A277C6F687B7B7B93
+      9393C2C2C2D8D8D8EFEFEFB2B2B2888888666666666666666666666666666666
+      8D8D8DBABABAD4D4D4888888474647BAB0BAC8957EE7E7E7FFFCFAFFFCF884CC
+      81059B0527A51872BB44DBD98586A950FFE79CFFE79CFFE79CF7E397FFE79CFF
+      E79CFFE79CFFE79CFFE79CFFE79CE8BA70AC4600AD4600AF4800AF4800AF4802
+      AF4902AE4902B14B01C4754BFCE0C7C0A59BA27E81895F674B3E406A67677979
+      798F8F8FA3A3A39696969A9A9A848484888688868186928992BCB0BCE8E1E8FB
+      F8FBCA977FE9E9E9FFFEFCFFFDFBFFEABBFFD87EFFD87EFFD87EFFD87EFFD87E
+      FFD87EFFD87EFFD87EFFD87EFFD87EFFD87EFFD87EFFD87EFFD87EFFD87EFFD8
+      7EF7CB73F0BE68EBB660D38A3AB85C15A84100A84100AA4300C1714BFFE5CBFC
+      E0C7FAC8BCFAA4A79F726F7F7067C6BDBBB7AEB5A196A18A818AB9AEB9EAE3EA
+      FAF8FAFBF9FBFAF8FAFCFAFCFFFEFFFFFFFFCD9A80EAEAEAFFFFFEFFFEFCFFE3
+      ADFFC95FFFC95FFFC95FFFC95FFEC85FFDC75EFEC85FFFC95FFFC95FFFC95FFF
+      C95FFFC95FFFC95FFFC95FFFC95FFFC95FFFC95FFFCA62FFE292FFF4B7FFFDCB
+      D4A772B4642DA03900BC6D4CFFE6CCFFE5CBFFCDBFFFA8A8A27572827168C8C1
+      BDEFEBECF9F6F8FAF8FAFCFAFCFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFD09D81EBEBEBFFFFFFFFFEFEFFDCA0FFBB43F7B541F5B440EBAC3EEBAC3E
+      DFA43BF1B13FF6B441FFBB43FFBB43FFBB43FFBB43FFBB43FFBB43FFBB43FFC1
+      50FFF1AFFFFFCCFFFFCCFFFFCCFFFFCCFFFFCCFFFFCCFCF9C6E3BEA1FFE7CEFF
+      E6CCFFCDBFFFA7A7A37773827168C8C1BDF2F0EFFEFDFDFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3A082ECECECFFFFFFFFFFFEFEF4
+      D4C8B987D6B872B67B1D9D6B19895D15865E15916217C6861FEEA125FBAA27FF
+      AD28FFAD28FFAD28FEAF2CFDD176FDF3BEFDF5C2FDF5C2FDF5C2FDF5C2FDF5C2
+      FDF5C2FDF5C2FDF5C2EACBADFFE7D0FFE7CEFFCCBFFFA5A5A57974827168C8C1
+      BDF2F0EFFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFD5A284EEEEEEFFFFFFFFFFFFFCF3DABEB18A928B6A605C2D4A4C0E3F5514
+      3753163D5E1C5453349A8F70E4D4A6F3D99BFBC361FACF7EF9E7B5F9E7B5F9E7
+      B5F9E7B5F9E7B5F9E7B5F9E7B5F9E7B5F9E7B5F9E7B5F9E7B5E8C4A7FFE8D2FF
+      E7D0FFCCBEFFA4A4A67A76827168C8C1BDF2F0EFFEFDFDFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8A585EFEFEFFFFFFFFFFFFFF3E7
+      CFC3B9877C965D3A91424ECD6E4ED17255E68142BF6033A848507B4698896AE2
+      CB9DF6DDABF6DDABF6DDABF6DDABF6DDABF6DDABF6DDABF6DDABF6DDABF6DDAB
+      F6DDABF6DDABF6DDABE7BFA2FFE9D4FFE8D2FFCBBEFFA2A3A87B77827168C8C1
+      BDF2F0EFFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFDAA786F0F0F0FFFFFFFFFFFFF9E7CEC9BB8282A2586EBA6540C76151E37D
+      5CF58F5AF38D4EE17B35B552508943BEAA7BEDCA99F0CD9BE5C394E7C495ECC9
+      99F3CF9DF3CF9DF3CF9DF3CF9DF3CF9DF3CF9DF3CF9DF3CF9DE5B89CFFEAD5FF
+      E9D4FFCBBFFFA0A0A97D78827168C8C1BDF2F0EFFEFDFDFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDAA88F1F1F1FFFFFFFFFFFFFBF1
+      E6EFC290DEBC86D0B67DAFB67653C16551E78153EC8651EA844FE7813BA84F88
+      8053B4936CAE8E699F8160A38462D1AA7EEEC18FEFC290EFC290EFC290EFC290
+      EFC290EFC290EFC290E5B7A2FFEBD7FFEAD5FFCABEFFA09FAA7F79827168C9C1
+      BDF2F0EFFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFE0AD8AF3F3F3FFFFFFFFFFFFFEFDFBF5DAC2EEC198ECBF97CBAD82668C49
+      3DC15F4CE57F4AE37D48E07A39C66138763661583E564A374E5134607743B79F
+      73EEBF95EEBF95EEBF94EEBF94EEBF94EEBF93EEBF93EDCAB9FFEDDAFFECD8FF
+      EBD6FFCABEFF9E9DAB807B837269CAC2BEF2F0EFFEFDFDFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3B08BF4F4F4FFFFFFFFFFFFFEFE
+      FEF9F9F9EAEAEADEDEDEC1C1C1818E823AA75442DA7442DB7540D9733DD56F2E
+      9848297435308B452C9B484DAC5FFFF5ECFFF5EAFFF4E8FFF3E6FFF2E5FFF1E3
+      FFF0E1FFEFDFFFEEDEFFEDDCFFECDAFFECD8FFC9BEFF9C9DAC827D88776FCCC5
+      C1F3F1F0FEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFE5B28CF5F5F5FFFFFFFFFFFFFAFAFADEDEDEA7A7A77E7E7E636D64426045
+      1F842F37CC6639D26C38D16B36CF6930C45E31C86131C86031CA626DAE6FFFF6
+      EEFFF5ECFFF5EAFFF4E8FFF3E6FFF2E5FFF1E3FFBCBDFFB8B7FFB3B3FFAEAEFF
+      A9A9FFA4A4FFA09FAE837E9A8C85D6D0CDF6F4F3FFFEFEFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7B48EF6F6F6FFFFFFFFFFFFFEFE
+      FED3D8D36A816C3E6D47226E2D26903D27A64931C76134CD6632CB6431CA612F
+      C85E2DC65A2BC45754B766FFF8F1FFF7F0FFF6EEFFF5ECFFF5EAFFF4E8FFF3E6
+      BA918AB98F88B68C86B58A85B38884B28783B18681B070709B6A69BDB4AFE8E4
+      E2FBFAF9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFEAB78FF8F8F8FFFFFFFFFFFFFFFFFFE4ECE52D943B239C3D2FC35D2FC55D
+      30C9612FC85F2EC75B2BC45629C25227C04E25BE4A36B952FFFAF5FFF9F3FFF8
+      F1FFF7F0FFF6EEFFF5ECFFF5EAFFF4E8A5726CFFB452FF9900F58F00EB8500E0
+      7A00D67000BF6619A27D7CDFDBD8F6F4F3FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDBA90F9F9F9FFFFFFFFFFFFFFFF
+      FFFFFFFFE7F3E96DBE7C1B9F3626B74B29C25227C04F25BE4B23BC4621BA421F
+      B83E1DB63B62AE68FFFBF7FFFAF5FFF9F3FFF8F1FFF7F0FFF6EEFFF5ECFFF5EA
+      A8756EFFCC99FFB452FFB044FFAB36FFA82DD98C39A3807EDFDAD8F5F3F3FDFD
+      FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFF0BD91FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3DCBA34A145
+      18A1311EB53D1DB63B1AB33619B23217B02E42AE4EFFFCFAFFFBF8FFFBF7FFFA
+      F5FFF9F3FFF8F1FFF7F0FFF6EEFFF5ECAB786FFFD6A3FFB75BFFB452FFB044DB
+      9349A5817FDFDAD8F5F3F3FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C092FBFBFBFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFC7BC1830D8F1B12A12313AC2511AA211D
+      A92A76AC76FFFEFCFFFCFAFFFBF8FFFBF7FFFAF5FFF9F3FFF8F1FFF7F0FFF6EE
+      AE7B70FFE0ADFFBB67FFB75BDD9B5BA88581DFDAD8F5F3F3FCFCFCFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFF5C293FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFFC5E3C840A246088F10089D1153AA58FFFFFFFFFFFEFFFEFCFFFCFAFFFB
+      F8FFFBF7FFFAF5FFF9F3FFF8F1FFF7F0B07D71FFEBB8FFC074DEA16AAC8882DF
+      DAD8F5F3F3FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C495FEFEFEFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8BC68D339635FF
+      FFFFFFFFFFFFFFFFFFFFFEFFFEFCFFFCFAFFFBF8FFFBF7FFFAF5FFF9F3FFF8F1
+      B27F73FFF5C2E0A87BAF8C84DED9D7F5F3F3FCFCFCFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFAC797FFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFCFCFCFBFBFBFAFAFAFAFAFA
+      F9F9F9F8F8F8F7F7F7F7F7F7E4ECE4F5F5F5F5F5F5F4F4F4F3F3F3F3F2F2F2F1
+      F0F1F0EFF0EEECF0EDEBEFECE9EEEBE8B68374ECDFB6AD887ED9D5D1F4F2F1FC
+      FCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECB99FCD6B1FAD4B0F8D1AEF5CF
+      ADF3CDABF1CBAAEEC8A9ECC5A8EAC3A6E8C1A5E5BFA4E3BDA2E0BAA1DEB79FDB
+      B59EDAB39DD7B19BD5AE9AD2AC99D0AA98CEA796CBA595C9A394C6A092C49E91
+      B88575D1B1A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+      FFFF}
+  end
+  object ProgressMsg: TLabel
+    Left = 24
+    Top = 56
+    Width = 162
+    Height = 20
+    Caption = 'Prepairing to upload'
+    Font.Charset = DEFAULT_CHARSET
+    Font.Color = clWindowText
+    Font.Height = -16
+    Font.Name = 'MS Sans Serif'
+    Font.Style = [fsBold]
+    ParentFont = False
+  end
+  object ProgressBar: TProgressBar
+    Left = 8
+    Top = 32
+    Width = 193
+    Height = 9
+    Smooth = True
+    TabOrder = 0
+  end
+  object DKLanguageController1: TDKLanguageController
+    Left = 176
+    Top = 8
+    LangData = {
+      1100496D6167655472616E73666572466F726D01010000000100000007004361
+      7074696F6E010400000006004C6162656C310101000000020000000700436170
+      74696F6E000600496D6167653100000B0050726F67726573734D736701010000
+      0003000000070043617074696F6E000B0050726F67726573734261720000}
+  end
+end
Index: cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/frmImageTransferProgress.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/frmImageTransferProgress.pas	(revision 729)
+++ cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/frmImageTransferProgress.pas	(revision 729)
@@ -0,0 +1,80 @@
+//kt -- Modified with SourceScanner on 8/29/2007
+unit frmImageTransferProgress;
+//kt Added this entire form.
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, ExtCtrls, StdCtrls, ComCtrls, DKLang;
+
+type
+  TImageTransferForm = class(TForm)
+    ProgressBar: TProgressBar;
+    Label1: TLabel;
+    Image1: TImage;
+    ProgressMsg: TLabel;
+    DKLanguageController1: TDKLanguageController;
+  private
+    { Private declarations }
+    //startTime:  TDateTime;
+    //procedure DetermineIntervalTimes();
+  public
+    { Public declarations }
+    //procedure ResetStartTime;
+    procedure setMax(Max : integer);
+    procedure updateProgress(Current: integer);
+  end;
+
+var
+  ImageTransferForm: TImageTransferForm;
+
+implementation
+
+{$R *.dfm}
+
+  //uses DateUtils,Math;
+
+  {
+  procedure TUploadProgressForm.ResetStartTime();
+  begin
+    startTime := Now;
+  end;
+  }
+
+  procedure TImageTransferForm.setMax(Max : integer);
+  begin
+    ProgressBar.Max := Max;
+  end;
+
+
+  procedure TImageTransferForm.updateProgress(Current: integer);
+  begin
+    ProgressBar.Position := Current;
+    //DetermineIntervalTimes();
+  end;
+
+  {
+  procedure TUploadProgressForm.DetermineIntervalTimes();
+  var
+    elapsedSec: int64;
+
+    elapsedTime : TDateTime;
+    remaining : integer;
+    rate : real;
+    remainSec : int64;
+
+  begin
+    elapsedSec := SecondsBetween(Now,startTime);
+    if elapsedSec < 1 then elapsedSec := 1;
+    elapsedTime := IncSecond(0,elapsedSec);
+//  DecodeDateTime(elapsedTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
+    ElapsedTimeLabel.Caption := TimeToStr(elapsedTime);
+
+    rate := ProgressBar.Max / elapsedSec;
+    remainSec := floor ((ProgressBar.Max-ProgressBar.Position) / rate);
+    RemainingTimeLabel.Caption := TimeToStr(IncSecond(0,remainSec));
+  end;
+  }
+
+end.
Index: cprs/branches/tmg-cprs/CPRS-Chart/Templates/fTemplateDialog.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Templates/fTemplateDialog.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Templates/fTemplateDialog.pas	(revision 729)
@@ -47,4 +47,7 @@
     FAnswerOpenTag : string; //kt added 12/28/09
     FAnswerCloseTag : string; //kt added 12/28/09
+    NameToObjID : TStringList; //kt added 3/26/10
+    Formulas  : TStringList; //kt added 3/26/10
+    TxtObjects  : TStringList; //kt added 3/28/10
     procedure SizeFormToCancelBtn();
     procedure ChkAll(Chk: boolean);
@@ -81,10 +84,4 @@
   frmTemplateDialog: TfrmTemplateDialog;
 
-const
-  HTMLBEGINNINGTAG = '{HTML:';   //kt
-  HTMLENDINGTAG = '}';       //kt
-  HTMLBEGINNINGTAGLEN = length(HTMLBEGINNINGTAG);  //kt
-  HTMLENDINGTAGLEN = length(HTMLENDINGTAG);   //kt
-
 implementation
 
@@ -153,9 +150,10 @@
   i, j, idx, Indent: integer;
   DlgProps, Txt: string;
+  Temp : string; //kt
+  Changed : boolean; //kt
   DlgIDCounts: TStringList;
   DlgInt: TIntStruc;
   CancelDlg: Boolean;
   CancelMsg: String;
-
 
   procedure IncDlgID(var id: string); //Appends an item count in the form of id.0, id.1, id.2, etc
@@ -221,5 +219,7 @@
     frmTemplateDialog.HTMLAnswerOpenTag := '<I>'; //kt 12/28/09
     //SL.Text := RemoveHTMLTags(SL.Text);  //elh
-    AssignFieldIDs(SL);
+    AssignFieldIDs(SL,frmTemplateDialog.NameToObjID);   //kt  added NameToObjID param 3/26/10
+    HideFormulas(SL,frmTemplateDialog.Formulas); //kt added 3/26/10
+    HideTxtObjects(SL,frmTemplateDialog.TxtObjects); //kt added 3/28/10
     frmTemplateDialog.SL := SL;
     frmTemplateDialog.Index := '';
@@ -231,17 +231,13 @@
     repeat
       i := pos(ObjMarker, Txt);
-      if(i > 1) then
-      begin
+      if(i > 1) then begin
         j := pos(DlgPropMarker, Txt);
-        if(j > 0) then
-          begin
+        if(j > 0) then begin
           DlgProps := copy(Txt, j + DlgPropMarkerLen, (i - j - DlgPropMarkerLen));
           CountDlgProps(DlgProps);
-          end
-        else
-          begin
+        end else begin
           DlgProps := '';
           j := i;
-          end;
+        end;
         inc(frmTemplateDialog.Count);
         frmTemplateDialog.Index := frmTemplateDialog.Index +
@@ -249,14 +245,14 @@
         inc(idx,i+ObjMarkerLen-1);
         Indent := StrToIntDef(Piece(DlgProps, ';', 5),0);
-        if(frmTemplateDialog.FirstIndent > Indent) then
+        if(frmTemplateDialog.FirstIndent > Indent) then begin
           frmTemplateDialog.FirstIndent := Indent;
-      end;
-      if(i > 0) then
+        end;
+      end;
+      if(i > 0) then begin
         delete(txt, 1, i + ObjMarkerLen - 1);
+      end;
     until (i = 0);
-    if(frmTemplateDialog.Count > 0) then
-    begin
-      if(frmTemplateDialog.OneOnly) then
-      begin
+    if(frmTemplateDialog.Count > 0) then begin
+      if(frmTemplateDialog.OneOnly) then begin
         frmTemplateDialog.btnNone.Visible := FALSE;
         frmTemplateDialog.btnAll.Visible := FALSE;
@@ -264,42 +260,53 @@
       frmTemplateDialog.BuildAllControls;
       repeat
-         if (assigned(frmNotes)) and (frmTemplateDialog.HTMLMode) then frmNotes.HTMLEditor.SetMsgActive(False);  //kt 2-1-10
-         frmTemplateDialog.ShowModal;
-         if (assigned(frmNotes)) and (frmTemplateDialog.HTMLMode) then frmNotes.HTMLEditor.SetMsgActive(True);   //kt 2-1-10
-         if(frmTemplateDialog.ModalResult = mrOK) then begin
-           GetText(SL, TRUE);     {TRUE = Include embedded fields}
-           {
-           if uTemplates.bUsingHTMLMode then begin
-              SL.Text := FormatHTMLTags(SL.Text);
-           end else begin
-              SL.Text := RemoveHTMLTags(SL.Text);
-           end;
-           }
-         end else begin
-          if (not PreviewMode) and (not frmTemplateDialog.Silent) and (not uInit.TimedOut) then
-            begin
-//            CancelMsg := 'If you cancel, your changes will not be saved.  Are you sure you want to cancel?';  <-- original line.  //kt 8/8/2007
-              CancelMsg := DKLangConstW('fTemplateDialog_If_you_cancelx_your_changes_will_not_be_savedx__Are_you_sure_you_want_to_cancelx'); //kt added 8/8/2007
-//            if (InfoBox(CancelMsg, 'Cancel Dialog Processing', MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) = ID_YES) then   <-- original line.  //kt 8/8/2007
-              if (InfoBox(CancelMsg, DKLangConstW('fTemplateDialog_Cancel_Dialog_Processing'), MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) = ID_YES) then  //kt added 8/8/2007
-                begin
-                  SL.Clear;
-                  Result := TRUE;
-                  CancelDlg := TRUE;
-                end
-              else
-                CancelDlg := FALSE;
-            end
-          else
-            begin
+        if (assigned(frmNotes)) and (frmTemplateDialog.HTMLMode) then frmNotes.HTMLEditor.SetMsgActive(False);  //kt 2-1-10
+        frmTemplateDialog.ShowModal;
+        if (assigned(frmNotes)) and (frmTemplateDialog.HTMLMode) then frmNotes.HTMLEditor.SetMsgActive(True);   //kt 2-1-10
+        if(frmTemplateDialog.ModalResult = mrOK) then begin
+          //kt -- begin mod --  3/27/10
+          Changed := RestoreTransformTxtObjects(SL, frmTemplateDialog.TxtObjects, frmTemplateDialog.NameToObjID);
+          Changed := RestoreTransformFormulas(SL, frmTemplateDialog.Formulas, frmTemplateDialog.NameToObjID) or Changed;
+          if Changed then begin //kt 3/27/10
+            Txt := SL.Text;
+            i := pos(ObjMarker, Txt);
+            if(i > 1) then begin
+              j := pos(DlgPropMarker, Txt);
+              if (j <= 0) then j := i;
+              Temp := frmTemplateDialog.Index;
+              SetPiece(Temp,'~',2,IntToStr(j-1));
+              frmTemplateDialog.Index := Temp;
+            end;
+          end;
+          //kt -- end mod --
+          GetText(SL, TRUE);     {TRUE = Include embedded fields}
+          {
+          if uTemplates.bUsingHTMLMode then begin
+             SL.Text := FormatHTMLTags(SL.Text);
+          end else begin
+             SL.Text := RemoveHTMLTags(SL.Text);
+          end;
+          }
+        end else begin
+          if (not PreviewMode) and (not frmTemplateDialog.Silent) and (not uInit.TimedOut) then begin
+//          CancelMsg := 'If you cancel, your changes will not be saved.  Are you sure you want to cancel?';  <-- original line.  //kt 8/8/2007
+            CancelMsg := DKLangConstW('fTemplateDialog_If_you_cancelx_your_changes_will_not_be_savedx__Are_you_sure_you_want_to_cancelx'); //kt added 8/8/2007
+//          if (InfoBox(CancelMsg, 'Cancel Dialog Processing', MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) = ID_YES) then   <-- original line.  //kt 8/8/2007
+            if (InfoBox(CancelMsg, DKLangConstW('fTemplateDialog_Cancel_Dialog_Processing'), MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) = ID_YES) then begin  //kt added 8/8/2007
               SL.Clear;
               Result := TRUE;
               CancelDlg := TRUE;
+            end else begin
+              CancelDlg := FALSE;
             end;
-         end;      
+          end else begin
+            SL.Clear;
+            Result := TRUE;
+            CancelDlg := TRUE;
+          end;
+        end;
       until CancelDlg or (frmTemplateDialog.ModalResult = mrOK)
-    end
-    else
+    end else begin
       SL.Clear;
+    end;
   finally
     //frmTemplateDialog.Free;    v22.11e RV
@@ -324,5 +331,5 @@
   tempString := Txt;
   //here we will strip out all HTML formatting tags  //elh
-  beginning := pos(HTMLBEGINNINGTAG, tempString);
+  beginning := pos(HTML_BEGIN_TAG, tempString);
   if beginning = 0 then begin
      Result := Txt;
@@ -331,9 +338,9 @@
     begin
       tempResult := tempResult + Leftstr(tempString,beginning-1);
-      tempString := Rightstr(tempString,length(tempString)-beginning-HTMLBEGINNINGTAGLEN);
-      ending := pos(HTMLENDINGTAG, tempString);
+      tempString := Rightstr(tempString,length(tempString)-beginning-HTML_BEGIN_TAGLEN);
+      ending := pos(HTML_ENDING_TAG, tempString);
       tempString := Rightstr(tempString,length(tempString)-ending);
-      beginning := pos(HTMLBEGINNINGTAG, tempString);
-  //    tempString := Midstr(Txt,i,HTMLBEGINNINGTAGLEN);
+      beginning := pos(HTML_BEGIN_TAG, tempString);
+  //    tempString := Midstr(Txt,i,HTML_BEGIN_TAGLEN);
     end;
     Result := tempResult + tempString;
@@ -348,5 +355,5 @@
   tempString := Txt;
   //here we will strip out all HTML formatting tags  //elh
-  beginning := pos(HTMLBEGINNINGTAG, tempString);
+  beginning := pos(HTML_BEGIN_TAG, tempString);
   if beginning = 0 then begin
      Result := Txt;
@@ -355,10 +362,10 @@
     begin
       tempResult := tempResult + Leftstr(tempString,beginning-1);
-      tempString := Rightstr(tempString,length(tempString)-beginning-HTMLBEGINNINGTAGLEN+1);
-      ending := pos(HTMLENDINGTAG, tempString);
+      tempString := Rightstr(tempString,length(tempString)-beginning-HTML_BEGIN_TAGLEN+1);
+      ending := pos(HTML_ENDING_TAG, tempString);
       tempResult := tempResult + Leftstr(tempString,ending-1);
       tempString := Rightstr(tempString,length(tempString)-ending);
-      beginning := pos(HTMLBEGINNINGTAG, tempString);
-  //    tempString := Midstr(Txt,i,HTMLBEGINNINGTAGLEN);
+      beginning := pos(HTML_BEGIN_TAG, tempString);
+  //    tempString := Midstr(Txt,i,HTML_BEGIN_TAGLEN);
     end;
     Result := tempResult + tempString;
@@ -565,5 +572,5 @@
   end;
   tmp := copy(SL.Text, p1, p2);
-  tmp := RemoveHTMLTags(tmp);
+  tmp := RemoveHTMLTags(tmp);  //kt
   if(copy(tmp, length(tmp)-1, 2) = CRLF) then
     delete(tmp, length(tmp)-1, 2);
@@ -747,4 +754,7 @@
   Entries := TStringList.Create;
   NoTextID := TStringList.Create;
+  NameToObjID := TStringList.Create ; //kt
+  Formulas  := TStringList.Create ; //kt
+  TxtObjects  := TStringList.Create; //kt added 3/28/10
   FOldHintEvent := Application.OnShowHint;
   Application.OnShowHint := AppShowHint;
@@ -774,4 +784,7 @@
   Entries.Free;
   BuildIdx.Free;
+  NameToObjID.Free; //kt
+  Formulas.Free; //kt
+  TxtObjects.Free; //kt
 end;
 
Index: cprs/branches/tmg-cprs/CPRS-Chart/Templates/uTemplateFields.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/Templates/uTemplateFields.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/Templates/uTemplateFields.pas	(revision 729)
@@ -6,5 +6,5 @@
 uses
   Forms, SysUtils, StrUtils, Classes, Dialogs, StdCtrls, ExtCtrls, Controls, Contnrs,
-  Graphics, ORClasses, ComCtrls, ORDtTm;
+  Graphics, ORClasses, ComCtrls, ORDtTm, uEvaluate;
 
 type
@@ -166,7 +166,14 @@
 function GetDialogEntry(AParent: TWinControl; AID, AText: string): TTemplateDialogEntry;
 procedure FreeEntries(SL: TStrings);
-procedure AssignFieldIDs(var Txt: string); overload;
-procedure AssignFieldIDs(SL: TStrings); overload;
+//kt 3/26/10 --> original  procedure AssignFieldIDs(var Txt: string); overload;
+procedure AssignFieldIDs(var Txt: string; NameToObjID : TStringList=nil); overload;  //kt 3/26/10
+//kt 3/26/10 --> original procedure AssignFieldIDs(SL: TStrings); overload;
+procedure AssignFieldIDs(SL: TStrings; NameToObjID : TStringList=nil); overload; //kt 3/26/10
+procedure HideFormulas(SL : TStrings; Formulas : TStringList); //kt added 3/26/10
+procedure HideTxtObjects(SL : TStrings; TxtObjects : TStringList); //kt added 3/28/10
+//function RestoreTransformFormulas(var Txt : string; Formulas, NameToObjID : TStringList) : boolean; overload; //kt added 3/26/10
+function RestoreTransformFormulas(SL : TStrings; Formulas, NameToObjID : TStringList) : boolean; {overload; }//kt added 3/26/10
 //kt 12/28/09 originial --> function ResolveTemplateFields(Text: string; AutoWrap: boolean; Hidden: boolean = FALSE; IncludeEmbedded: boolean = FALSE): string;
+function RestoreTransformTxtObjects(SL : TStrings; TxtObjects, NameToObjID : TStringList) : boolean;
 function ResolveTemplateFields(Text: string;
                                AutoWrap: boolean;
@@ -190,12 +197,52 @@
 procedure ConvertCodes2Text(sl: TStrings; Short: boolean);
 function StripEmbedded(iItems: string): string;
+function CloseCharPos(OpenChar, CloseChar : char; var Txt : string; StartingPos : integer=1) : integer; //kt added
+
+type
+  TMGExtension = (tmgeFN,tmgeOBJ);
+  TMGExtMatch = record
+    Signature : string;
+    SigLen : integer;
+    EndTag : char;
+  end;
+  TMGExtArray = array[tmgeFN..tmgeOBJ] of TMGExtMatch;
 
 const
   TemplateFieldBeginSignature = '{FLD:';
   TemplateFieldEndSignature = '}';
-  HTMLBEGINNINGTAG = '{HTML:';
-  HTMLENDINGTAG = '}';
-  HTMLBEGINNINGTAGLEN = length(HTMLBEGINNINGTAG);
-  HTMLENDINGTAGLEN = length(HTMLENDINGTAG);
+  HTML_BEGIN_TAG = '{HTML:';                      //kt
+  HTML_ENDING_TAG = '}';                          //kt
+  HTML_BEGIN_TAGLEN = length(HTML_BEGIN_TAG);     //kt
+  HTML_ENDING_TAGLEN = length(HTML_ENDING_TAG);   //kt
+  FN_BEGIN_SIGNATURE = '{FN:';                    //kt
+  FN_BEGIN_TAG = '{';                             //kt
+  FN_END_TAG = '}';                               //kt
+  FN_BEGIN_SIGNATURE_LEN = length(FN_BEGIN_SIGNATURE);//kt
+  FN_END_TAGLEN = length(FN_END_TAG);             //kt
+  FN_SHOW_TEXT = '{%_____%-#';                    //kt
+  FN_SHOW_TEXT_END = '}';                         //kt
+  FN_SHOW_TEXT_LEN = length(FN_SHOW_TEXT);        //kt
+  FN_SHOW_TEXT_END_LEN = length(FN_SHOW_TEXT_END);//kt
+  FN_FIELD_TAG = '[FLD:';                         //kt
+  FN_FIELD_TAG_LEN = length(FN_FIELD_TAG);        //kt
+  FN_OBJ_TAG = '[OBJ:';                           //kt
+  FN_OBJ_TAG_LEN = length(FN_OBJ_TAG);            //kt
+  FLD_OBJ_SIGNATURE = '{OBJ:';                    //kt
+  FLD_OBJ_END_TAG = '}';                          //kt
+  FLD_OBJ_SIG_LEN = length(FLD_OBJ_SIGNATURE);    //kt
+  OBJ_SHOW_TEXT = '{OBJ%_____%-#';                //kt
+  OBJ_SHOW_TEXT_END = '}';                        //kt
+  OBJ_SHOW_TEXT_LEN = length(OBJ_SHOW_TEXT);      //kt
+  TMG_MATCH : TMGExtArray =
+   (  (Signature : FN_BEGIN_SIGNATURE;
+       SigLen    : FN_BEGIN_SIGNATURE_LEN;
+       EndTag    : FN_END_TAG),
+
+      (Signature : FLD_OBJ_SIGNATURE;
+       SigLen    : FLD_OBJ_SIG_LEN;
+       EndTag    : FLD_OBJ_END_TAG)
+   );
+
+
   //MissingFieldsTxt = 'One or more required fields must still be entered.';  <-- original line.  //kt 8/8/2007
   function MissingFieldsTxt : string;  //kt added
@@ -289,4 +336,6 @@
 uses
   ORFn, rTemplates, ORCtrls, mTemplateFieldButton, dShared, uConst, uCore, rCore, Windows,
+  ORNet,  //kt
+  TRPCB, //kt
   DKLang; //kt
 
@@ -296,5 +345,4 @@
   TemplateFieldSignatureEndLen = length(TemplateFieldEndSignature);
 
-
 var
   uTmplFlds: TList = nil;
@@ -305,4 +353,6 @@
 
   uInternalFieldIDCount: integer = 0;
+  uInternalFormulaCount: integer = 0;  //kt
+  uInternalTxtObjCount : integer = 0; //kt
 
 const
@@ -416,29 +466,38 @@
     if(uEntries.Count = 0) then
       uInternalFieldIDCount := 0;
-  end;
-end;
-
-procedure AssignFieldIDs(var Txt: string);
+      uInternalFormulaCount := 0; //kt
+      uInternalTxtObjCount := 0; //kt
+  end;
+end;
+
+//kt original line --> procedure AssignFieldIDs(var Txt: string);
+procedure AssignFieldIDs(var Txt: string; NameToObjID : TStringList); //kt
 var
   i: integer;
+  p2 : integer; //kt
+  FldName : string; //kt
+  FldID : string; //kt
 
 begin
   i := 0;
-  while (i < length(Txt)) do
-  begin
+  while (i < length(Txt)) do begin
     inc(i);
-    if(copy(Txt,i,TemplateFieldSignatureLen) = TemplateFieldBeginSignature) then
-    begin
+    if copy(Txt,i,TemplateFieldSignatureLen) = TemplateFieldBeginSignature then begin
       inc(i,TemplateFieldSignatureLen);
-      if(i < length(Txt)) and (copy(Txt,i,1) <> FieldIDDelim) then
-      begin
+      if(i < length(Txt)) and (copy(Txt,i,1) <> FieldIDDelim) then begin
+        p2 := PosEx(TemplateFieldEndSignature,Txt,i);           //kt
+        FldName := '';                                          //kt
+        if p2 > 0 then FldName := Trim(copy(Txt,i,(p2-i)));  //kt
         insert(GetNewFieldID, Txt, i);
         inc(i, FieldIDLen);
-      end;
-    end;
-  end;
-end;
-
-procedure AssignFieldIDs(SL: TStrings);
+        if (FldName <> '') and Assigned(NameToObjID) then begin                                      //kt
+          NameToObjID.AddObject(FldName,Pointer(uInternalFieldIDCount)); //kt
+        end;                                                             //kt
+      end;
+    end;
+  end;
+end;
+
+procedure AssignFieldIDs(SL: TStrings; NameToObjID : TStringList);
 var
   i: integer;
@@ -449,8 +508,377 @@
   begin
     txt := SL[i];
-    AssignFieldIDs(txt);
+    //kt AssignFieldIDs(txt);
+    AssignFieldIDs(txt, NameToObjID); //kt
     SL[i] := txt;
   end;
 end;
+
+function CloseCharPos(OpenChar, CloseChar : char; var Txt : string; StartingPos : integer=1) : integer;
+//kt added function
+//Return the position of a closing character, ignoring all intervening nested open and close chars
+//NOTE: It is expected that StartingPos is pointing to the first opening character.
+var i : integer;
+    CloseMatchesNeeded : integer;
+begin
+  Result := 0;
+  CloseMatchesNeeded := 1;
+  for i := StartingPos to Length(Txt) do begin
+    if (Txt[i] = OpenChar) and (i <> StartingPos) then Inc(CloseMatchesNeeded);
+    if Txt[i] = CloseChar then Dec(CloseMatchesNeeded);
+    if CloseMatchesNeeded = 0 then begin
+      Result := i;
+      break;
+    end;
+  end;
+end;
+
+
+procedure HideFormulas(SL : TStrings; Formulas : TStringList);
+//kt added function
+//NOTE: formulas will not be allowed to use the '}' character
+var p1,p2 : integer;
+    FnStr : string;
+    SubStrA,SubStrB : string;
+    Txt : String;
+begin
+  Txt := SL.Text;
+  p1 := Pos(FN_BEGIN_SIGNATURE,Txt);
+  while (p1>0) do begin
+    SubStrA := MidStr(Txt,1,p1-1);
+    p1 := p1 + FN_BEGIN_SIGNATURE_LEN;
+    //p2 := PosEx(FN_END_TAG,Txt,p1);
+    p2 := CloseCharPos(FN_BEGIN_TAG, FN_END_TAG, Txt, p1);
+    SubStrB := MidStr(Txt,p2+1,999);
+    FnStr := MidStr(Txt,p1, (p2-p1));
+    FnStr := AnsiReplaceText(FnStr,#9,'');
+    FnStr := AnsiReplaceText(FnStr,#10,'');
+    FnStr := AnsiReplaceText(FnStr,#13,'');
+    //FnStr := AnsiReplaceText(FnStr,' ','');
+    inc(uInternalFormulaCount);
+    Formulas.AddObject(FnStr,Pointer(uInternalFormulaCount));
+    Txt := SubStrA + FN_SHOW_TEXT + IntToStr(uInternalFormulaCount) + FN_SHOW_TEXT_END + SubStrB;
+    p1 := PosEx(FN_BEGIN_SIGNATURE,Txt,p1);
+  end;
+  SL.Text := Txt;
+end;
+
+procedure HideTxtObjects(SL : TStrings; TxtObjects : TStringList); //kt added 3/28/10
+//kt added function
+var p1,p2 : integer;
+    FnStr : string;
+    SubStrA,SubStrB : string;
+    Txt : String;
+begin
+  Txt := SL.Text;
+  p1 := Pos(FLD_OBJ_SIGNATURE,Txt);
+  while (p1>0) do begin
+    SubStrA := MidStr(Txt,1,p1-1);
+    p1 := p1 + FN_OBJ_TAG_LEN;
+    p2 := CloseCharPos(FN_BEGIN_TAG, FN_END_TAG, Txt, p1);
+    SubStrB := MidStr(Txt,p2+1,999);
+    FnStr := MidStr(Txt,p1, (p2-p1));
+    FnStr := AnsiReplaceText(FnStr,#9,'');
+    FnStr := AnsiReplaceText(FnStr,#10,'');
+    FnStr := AnsiReplaceText(FnStr,#13,'');
+    inc(uInternalTxtObjCount);
+    TxtObjects.AddObject(FnStr,Pointer(uInternalTxtObjCount));
+    Txt := SubStrA + OBJ_SHOW_TEXT + IntToStr(uInternalTxtObjCount) + OBJ_SHOW_TEXT_END + SubStrB;
+    p1 := PosEx(FLD_OBJ_SIGNATURE,Txt,p1);
+  end;
+  SL.Text := Txt;
+end;
+
+function InsideMarkers(var S : string; MarkerCh : char; P : integer) : boolean;
+//Function returns if position P is inside characters MarkerCh.
+//e.g. S =  'xxx|xxxxx|xxxxx'  MarkerCh='|'
+//     P = 2  ==> result is false
+//     P = 5  ==> result is true
+//     P = 12 ==> result is false
+
+var p1,p2 : integer;
+    Inside : boolean;
+begin
+  Inside := false;
+  p1 := Pos(MarkerCh,S);
+  while (p1 > 0) do begin
+    if (p1 >= P) then break;
+    p1 := PosEx(MarkerCh,S,p1+1);
+    if (p1 > 0) and (p1 > P) then Inside := not Inside;
+  end;
+  Result := Inside;
+end;
+
+function SubstuteIDs(Txt : string; NameToObjID : TStringList) : string;
+//kt added function
+//Prefix any field names with their FldID's, in format of FieldIDDelim+FldID
+// E.g. [FLD:1:NUM1-16] --> `00001NUM1-16`
+//Note: Field ID's are started with character FieldIDDelim, and are of a fixed length (FieldIDLen)
+
+(*  Syntax examples:
+
+ {FN:[FLD:1:NUMB1-16]-[FLD:2:NUMB1-16]-[FLD:3:NUMB1-16]}, or
+ {FN:[OBJ:TABLE1]-[FLD:2:NUMB1-16]-[FLD:3:NUMB1-16]}, or
+ {FN:[OBJ:TABLE2("POTASSIUM")]-[FLD:2:NUMB1-16]-[FLD:3:NUMB1-16]}, or
+ {FN:[OBJ:TABLE2([FLD:1:NUMB1-16])]-[FLD:2:NUMB1-16]-[FLD:3:NUMB1-16]}
+ {FN:[OBJ:TABLE2((5+3)/2)]-[FLD:2:NUMB1-16]-[FLD:3:NUMB1-16]}
+ (arbitrary deep nesting)
+ Note: arguments should be round by matching [ ]'s
+       An argument will start with a TYPE (so far, FLD or OBJ) and ':'
+
+       If TYPE is FLD, there will be :number:, with number being same
+       as number in old format (i.e. ...]#2).
+       If number not provided, then default value is 1
+
+       If TYPE is OBJ, then this indicates that the parameter name (e.g. TABLE) is
+       the name of a TIU TEXT object, that will be processed on the server.
+       Parameters should be resolved before passing to the server.
+*)
+
+var i,j,p1,p2 : integer;
+    SubStrA,SubStrB, NumStr : string;
+    FldIDNum,CountofSimilar : integer;
+    FldIDNumStr : string;
+    CountOfSimStr : string;
+    Temp,FldName : string;
+    Skip : boolean;
+begin
+  for i := 0 to NameToObjID.Count-1 do begin
+    CountofSimilar := 0;
+    FldName := NameToObjID.Strings[i];
+    for j := 0 to i do begin
+      if NameToObjID.Strings[i] = FldName then inc(CountofSimilar);
+    end;
+    CountOfSimStr := IntToStr(CountofSimilar);
+    FldIDNum := Integer(NameToObjID.Objects[i]);
+    FldIDNumStr := IntToStr(FldIDNum);
+    FldIDNumStr := FieldIDDelim + StringOfChar('0', FieldIDLen-1-Length(FldIDNumStr)) + FldIDNumStr;
+    p1 := 1;
+    p1 := PosEx(FldName,Txt,p1);
+    while InsideMarkers(Txt, FieldIDDelim, p1) do begin //Ignore included fieldnames from prior cycle.
+      p2 := PosEx(FieldIDDelim,Txt,p1+1);
+      if p2 >0 then begin
+         p1 := p2+1;
+         p1 := PosEx(FldName,Txt,p1);
+      end else p1 := 999;  //error condition.
+    end;
+    while (p1>0) and (p1 < 999) do begin
+      Skip := false;
+      SubStrA := MidStr(Txt,1,p1-1);
+      SubStrB := MidStr(Txt, p1+Length(FldName), 999);
+      if (LeftStr(SubStrB,1)=']') and (Pos(FN_FIELD_TAG,SubStrA) > 0) then begin
+        NumStr := piece(RightStr(SubStrA,7),':',2);
+        SubStrA := LeftStr(SubStrA,Length(SubStrA)-7);
+        p2 := 2;
+        SubStrB := MidStr(SubStrB,p2,999);
+        if NumStr <> CountOfSimStr then begin
+          Skip := true;
+          Inc(p1);
+        end;
+      end else begin
+         Skip := true;
+         Inc(p1);
+      end;
+      if not Skip then begin
+        Txt := SubStrA + FldIDNumStr +FldName + FieldIDDelim;
+        p1 := Length(Txt);
+        Txt := Txt + SubStrB;
+      end;
+      p1 := PosEx(FldName,Txt,p1);
+    end;
+  end;
+  Result := Txt;
+end;
+
+
+function RestoreTransformFormulas(SL : TStrings; Formulas, NameToObjID : TStringList) : boolean;
+//kt added 3/26/10
+//Returns if any changes made
+//Replace formula text back in, and change field names into FldID's
+
+  function GetFormula(NumStr : string) : string;
+  //Return formula text based on provided index number of formula
+  var num, i : integer;
+      PtrNum : Pointer;
+  begin
+    Result := '';
+    try
+      Num := StrToInt(NumStr);
+      PtrNum := Pointer(Num);
+      for i := 0 to Formulas.Count-1 do begin
+        if Formulas.Objects[i] = PtrNum then begin
+          Result := Formulas.Strings[i];
+          break;
+        end;
+      end;
+    except
+      on EConvertError do Result := '??';
+    end;
+  end;
+
+var p1,p2 : integer;
+    count : integer;
+    FnStr : string;
+    Txt : string;
+    SubStrA,SubStrB : string;
+begin
+  Txt := SL.Text;
+  Result := false;
+  p1 := Pos(FN_SHOW_TEXT,Txt);
+  while (p1>0) do begin
+    SubStrA := MidStr(Txt,1,p1-1);
+    p1 := p1 + FN_SHOW_TEXT_LEN;
+    p2 := PosEx(FN_SHOW_TEXT_END,Txt,p1);
+    SubStrB := MidStr(Txt,p2+1,999);
+    FnStr := MidStr(Txt,p1, (p2-p1));
+    FnStr := GetFormula(FnStr);
+    FnStr := SubstuteIDs(FnStr,NameToObjID);
+    Txt := SubStrA + FN_BEGIN_SIGNATURE + FnStr + FN_END_TAG + SubStrB;
+    Result := true;
+    p1 := PosEx(FN_SHOW_TEXT,Txt,p1);
+  end;
+  SL.Text := Txt;
+end;
+
+{
+function RestoreTransformFormulas(SL : TStrings; Formulas, NameToObjID : TStringList) : boolean; overload;
+//kt added 3/26/10
+//Returns if any changes made
+var
+  i: integer;
+  Changed : boolean;
+  txt: string;
+
+begin
+  Result := false;
+  for i := 0 to SL.Count-1 do begin
+    txt := SL[i];
+    Changed := RestoreTransformFormulas(txt, Formulas, NameToObjID);
+    Result := Result or Changed;
+    SL[i] := txt;
+  end;
+end;
+}
+
+function RestoreTransformTxtObjects(SL : TStrings; TxtObjects, NameToObjID : TStringList) : boolean;
+//kt added 3/28/10
+//Returns if any changes made
+//Replace formula text back in, and change field names into FldID's
+
+  function GetTxtObjects(NumStr : string) : string;
+  //Return TxtObject text based on provided index number of formula
+  var num, i : integer;
+      PtrNum : Pointer;
+  begin
+    Result := '';
+    try
+      Num := StrToInt(NumStr);
+      PtrNum := Pointer(Num);
+      for i := 0 to TxtObjects.Count-1 do begin
+        if TxtObjects.Objects[i] = PtrNum then begin
+          Result := TxtObjects.Strings[i];
+          break;
+        end;
+      end;
+    except
+      on EConvertError do Result := '??';
+    end;
+  end;
+
+var p1,p2 : integer;
+    count : integer;
+    ObjStr : string;
+    SubStrA,SubStrB : string;
+    Txt : string;
+begin
+  Txt := SL.Text;
+  Result := false;
+  p1 := Pos(OBJ_SHOW_TEXT,Txt);
+  while (p1>0) do begin
+    SubStrA := MidStr(Txt,1,p1-1);
+    p1 := p1 + OBJ_SHOW_TEXT_LEN;
+    p2 := PosEx(OBJ_SHOW_TEXT_END,Txt,p1);
+    SubStrB := MidStr(Txt,p2+1,999);
+    ObjStr := MidStr(Txt,p1, (p2-p1));
+    ObjStr := GetTxtObjects(ObjStr);
+    ObjStr := SubstuteIDs(ObjStr,NameToObjID);
+    Txt := SubStrA + FLD_OBJ_SIGNATURE + ObjStr + FLD_OBJ_END_TAG + SubStrB;
+    Result := true;
+    p1 := PosEx(OBJ_SHOW_TEXT,Txt,p1);
+  end;
+  SL.Text := Txt;
+end;
+
+
+function GetRPCTIUObj(TIUObjName : string) : string;
+//kt added entire function 3/28/10
+//Based on rTemplates.GetTemplateText(BoilerPlate: TStrings);
+begin
+  TIUObjName := AnsiReplaceText(TIUObjName,'|','');
+  with RPCBrokerV do begin
+    ClearParameters := True;
+    RemoteProcedure := 'TIU TEMPLATE GETTEXT';
+    Param[0].PType := literal;
+    Param[0].Value := Patient.DFN;
+    Param[1].PType := literal;
+    Param[1].Value := Encounter.VisitStr;
+    Param[2].PType := list;
+    Param[2].Mult[IntToStr(1)+',0'] := '|' + TIUObjName + '|';
+    CallBroker;
+    RPCBrokerV.Results.Delete(0);
+    if RPCBrokerV.Results.count > 0 then begin
+      Result := RPCBrokerV.Results.Strings[0];
+    end else Result := '';
+    RPCBrokerV.Results.Clear;
+  end;
+end;
+
+
+Procedure EvalTIUObjects(var Formula : string);
+//kt added entire function 3/28/10
+var p1,p2 : integer;
+    OP1,OP2 : integer;
+    Problem : boolean;
+    SubStrA, SubStrB : string;
+    TIUObj,Argument,s : string;
+begin
+  p1 := Pos(FN_OBJ_TAG, Formula);
+  while (p1 > 0) do begin
+    p2 := CloseCharPos('[',']',Formula, p1+1);
+    if p2=0 then begin
+      Formula := 'ERROR.  Matching "]" not found after ' + FN_OBJ_TAG + '.';
+      Exit;
+    end;
+    SubStrA := MidStr(Formula,1,p1-1);
+    p1 := p1+FN_OBJ_TAG_LEN;
+    TIUObj := Trim(MidStr(Formula, p1, (p2-p1)));
+    SubStrB := MidStr(Formula,p2+1,999);
+    OP1 := Pos('{',TIUObj);
+    if (OP1 > 0) then begin
+      OP2 := CloseCharPos('{','}', TIUObj, OP1+1);
+      if OP2=0 then begin
+        Formula := 'ERROR.  Matching ")" not found after "(".';
+        Exit;
+      end;
+      Argument := MidStr(TIUObj,OP1+1,(OP2-(OP1+1)));
+      if Pos(FN_OBJ_TAG,Argument)>0 then begin
+        EvalTIUObjects(Argument)
+      end;
+      Problem := false;
+      s := FloatToStr(StringEval(Argument,Problem));
+      if Problem then begin
+        Formula := 'ERROR evaluating argument: [' + s + '].';
+        Exit;
+      end else begin
+        Argument := s;
+      end;
+      TIUObj := MidStr(TIUObj,1,OP1-1) + '{' + Argument + '}';
+    end;
+    TIUObj := GetRPCTIUObj(TIUObj);
+    Formula := SubStrA + TIUObj + SubStrB;
+    p1 := Pos(FN_OBJ_TAG, Formula);
+  end;
+end;
+
+
 
 procedure WordWrapText(var Txt: string; HTMLMode : boolean);
@@ -561,7 +989,11 @@
   Entry: TTemplateDialogEntry;
   iField, Temp, NewTxt, Fld: string;
-  FoundEntry: boolean;
+  FoundEntry,Problem: boolean;
   TmplFld: TTemplateField;
   tempSL : TStringList;
+  SubStrA, SubStrB : string;  //kt
+  ExtMode : TMGExtension; //kt
+  TempStr, FnObjStr,Argument : string; //kt
+  FnP1,FnP2,p1,p2 : integer; //kt
 
   procedure AddNewTxt;
@@ -648,4 +1080,77 @@
     end;
   until(i = 0);
+
+  //kt -- begin mod ---  Entire section added.
+  Temp := Result;
+  for ExtMode := tmgeFN to tmgeOBJ do begin
+    repeat
+      i := pos(TMG_MATCH[ExtMode].Signature, Temp);
+      if(i > 0) then begin
+        FnP1 := i;
+        FnP2 := CloseCharPos('{', TMG_MATCH[ExtMode].EndTag, Temp, i);
+        //FnP2 := Pos(TMG_MATCH[ExtMode].EndTag,Temp);    //Should use CloseCharPos function
+        p1 := FnP1 + TMG_MATCH[ExtMode].SigLen;
+        FnObjStr := MidStr(Temp, p1, FnP2-p1);
+        p1 := Pos(FieldIDDelim,FnObjStr);
+        while (p1 > 0) do begin
+          SubStrA := MidStr(FnObjStr,1,p1-1);
+          p2 := PosEx(FieldIDDelim,FnObjStr,p1+1);
+          Argument := MidStr(FnObjStr,p1+1,(p2-p1)-1);
+          SubStrB := MidStr(FnObjStr,p2+1,999);
+          CtrlID := StrToIntDef(MidStr(Argument,1,FieldIDLen-1), 0);
+          Fld := MidStr(Argument,FieldIDLen,999);
+          if(CtrlID > 0) then begin
+            FoundEntry := FALSE;
+            for j := 0 to uEntries.Count-1 do begin
+              Entry := TTemplateDialogEntry(uEntries.Objects[j]);
+              if(assigned(Entry)) then begin
+                if IncludeEmbedded then
+                  iField := Fld
+                else
+                  iField := '';
+                NewTxt := Entry.GetControlText(CtrlID, FALSE, FoundEntry, AutoWrap, iField);
+                TmplFld := GetTemplateField(Fld, FALSE);
+                if (assigned(TmplFld)) and (TmplFld.DateType in DateComboTypes) then {if this is a TORDateBox}
+                   NewTxt := Piece(NewTxt,':',1);          {we only want the first piece of NewTxt}
+                Argument := Trim(NewTxt);
+              end;
+            end;
+          end else Argument := '??';
+          FnObjStr := SubStrA + Argument + SubStrB;
+          p1 := Pos(FieldIDDelim,FnObjStr);
+        end;
+        if (ExtMode = tmgeOBJ) then begin
+          FnObjStr := FN_OBJ_TAG + FnObjStr + ']';
+        end;
+        if (Pos(FN_OBJ_TAG,FnObjStr)>0) then begin
+          EvalTIUObjects(FnObjStr);
+        end;
+        if ExtMode = tmgeFN then begin
+          Problem := false;
+          TempStr := AnsiReplaceText(FnObjStr,' ','');
+          TempStr := FloatToStr(StringEval(TempStr,Problem));
+          if not Problem then FnObjStr := TempStr;
+        end;
+        SubStrA := MidStr(Temp,1,FnP1-1);
+        SubStrB := MidStr(Temp,FnP2+1,999);
+        if (HTMLMode=true) and (FnObjStr <> '') then begin
+          FnObjStr := HTMLAnswerOpenTag + FnObjStr + HTMLAnswerCloseTag;
+        end;
+        Temp := SubStrA + FnObjStr + SubStrB;
+      end else begin
+        if HTMLMode=true then begin
+          tempSL := TStringList.create;
+          tempSL.Text := Result;
+          if tempSL.Count < 3 then begin
+            Result := HTMLAnswerOpenTag + Result + HTMLAnswerCloseTag;
+          end;
+          tempSL.Free;
+        end;
+      end;
+    until(i = 0);
+  end;
+  Result := Temp;
+  //kt -- end mod --
+
   if not AutoWrap then
     WordWrapText(Result,HTMLMode);
@@ -660,4 +1165,5 @@
   Temp, NewTxt, FldName: string;
   FoundEntry: boolean;
+  SubStrA,SubStrB : string;
 
 begin
@@ -2510,4 +3016,9 @@
 end;
 
+function EvaluateFormula(formula : string): string;
+begin
+//CloseCharPos(OpenChar, CloseChar : char; var Txt : string; StartingPos : integer=1) : integer;
+end;
+
 initialization
 
Index: cprs/branches/tmg-cprs/CPRS-Chart/UploadImages.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/UploadImages.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/UploadImages.dfm	(revision 729)
@@ -1,6 +1,6 @@
 object UploadForm: TUploadForm
-  Left = 224
-  Top = 126
-  Width = 800
+  Left = 170
+  Top = 169
+  Width = 776
   Height = 493
   Caption = 'Upload Images to Server'
@@ -18,5 +18,5 @@
   OnShow = FormShow
   DesignSize = (
-    792
+    768
     459)
   PixelsPerInch = 96
@@ -28,4 +28,723 @@
     Height = 229
     AutoSize = True
+    Picture.Data = {
+      0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000008500
+      0000E508060000010A2904F000000006624B474400FF00FF00FFA0BDA7930000
+      00097048597300000B1300000B1301009A9C180000000774494D450000000000
+      00000973942E000059374944415478DAEC5D077C8DD71B7EEEBDB937F3668A0C
+      318384182146EDBDA955B4B46A46516A548D9A358A524A51A3AA46112BC42646
+      891D249188C81291BDF7B8F77EFFF37E37374D22914DE29FD7EFF8BE7CE3DCF3
+      3DE739EF79CF7A8F00652082BC177EFFFDF7B8B367CFEA5DB87001919191E8DC
+      B973E376EDDA7D221008F6B27B080D0DC59C39732E9F3E7DBA4F81919C3A758A
+      4B4949414646063B3F83376F82F0C9279FA05BB76E68D6AC19AE5EBD8A3FFFFC
+      133D7B7E8175EBBE17E41B09899D9D5D84BDFD0CE3E3C71D70E5CA7975762983
+      8561EEEEEE271C1C6E62D5AA198DD8DFDE05A644253EE77A730D075CCE75FFC5
+      99AE9CD5A737DE7A27BF484CB38E9B58989DEB618974399791F8073B0DCBBA14
+      F6CE94942A77F24A870BB5383ABAF40B12942892414E769C9595AE128F170970
+      1AE42A287624AA88E8585004E58F09C7848E693260EE3F01D8FE75BDE2A78493
+      6572E991C18893D641421A2360B356C68921AE51C58A64278BC7C6CE148D1B19
+      6267B73F31798835B475F5317FD1515C72FEA7F98BC767DC0B8DE4DF0DF3B927
+      CF3C317EE127D8F864386A37D083545F9FBFF768EF19AC5BFDB9A0D048562FBB
+      CA690993F1752F17AC0E9A85DFFEAD0B59DC25405D1DDFEA7AE1F7DF26161EC9
+      A3474A6055D27AB618426B0E2F366CC2EA39C05F7FCE2C3C929CE213C57109E9
+      404C8A1C297211FE59B60E0E4717142F12CBE6FDFFE0A0804241D9A680502088
+      F3F7B8B4A05891C09E95E65D7CA9CE570A8D64F49DA63C36FFECF3D8CE229A5E
+      EC48742DECDACE73AD798FCED7DB060D4B0C7DEC481F54A448BA76FD823B756A
+      3BA64DBB8073B77EEDCF293875C6D6D3F945506024F6F68FB88C8C68A4A747E3
+      F0E1D1B99EE96CDDF9C72FE77CB9CADEDEFEDDB93368D072EEC48945F8FAEBE3
+      D9910CC220F523C947D2AE5DBB066767676CDEBCF908BBFCC55B919C3B778E6B
+      D3A60D5EBD7A0556CFE0E2C5CBACCA88C7F6ED6B051DD1D1CC6050ED90EFBE1B
+      8F152B5620E656CC4A4F782ECD2F253ABEBEBE89BB77EF66A79A4848C8C08E1D
+      6BB4FCFDFD53629233E17A27067DFB9A6374EDD1DD5DE072BDC8595C14A9C091
+      BC78F182AB56AD1A643219222222D0B46953013B72E9E9E93034348444228158
+      2C161418C94F3FFDC4B17A182D5BB644545414AB87AF4057571775EAD4E10355
+      F2BFFEFA2BACACBA62DEBC2FDFC9133DF672DC82050BE0EAEA4A856E0E5DDCB7
+      6F1FB775EB56F8F9F93D8C8B8B6B53244CDC4FF6E19A0DBB94EBBEA7830D6733
+      D2B3D00ADD34C7F95B157A9E6B610545F296F4D81DD0D879725DAF62E54E2EB1
+      C7930E436BD9BEAB327F672406F5ECF43AFE8638AAD0A932BF3E55619314FCC4
+      AB589164A5841B34C80E37A6088624863C3A5DB2CF29A2E41B895C2EE7844221
+      AFC6A81EB66ADB4727DCFD7272B122494C4CE4B4132390A46980588101AE9E04
+      264E1014CF2A080F0FE7967FD50BDF66C641DF4003B747BDC08891CA54F53E0B
+      3C182110141A49404000E7F0D30CF46B668E4C8936C2EAFC8A14EB54FE5E231D
+      4D3431592102962BDE1989A7A72777EE5820BA367A065DAD3484E92EC5D287CE
+      F8F7A9042E6B3AA143AD2244F2E85102C3549AFDB72B0B53E60BE0B8671DD465
+      3FA05F83224492573CC29515BA2A8C6A528248EA35EFFB07ABCF21E714028E59
+      7341CFAE4C458E8AACF00278D492731EE5A77CAEDD080DDC3D9656A42CCE1141
+      AA494D2D0D3AFFA7BD47C9EC58A959CBA13F3CAD7572C91247E89E6FD53F21F8
+      D185224572EF1EC7A5A5DDE41B4A1A1A1A42A9B9DD608150905E5004F94672F1
+      22C79D3CE90A1F9F8DB871E370AEFBFDD04F6CBBD036E3A6E3CD5FEF3CBF33B7
+      C048FEF987E31C1C2EA07AF5EAD8B5AB55F67D5695722E2E2E68D2A409828383
+      59A53FE86D6DCF3439470FE8335B554B4B0B4E4E4EECAA11BEFF7E3CFFCCBC79
+      F3B8FAF527B288C7E0B7DF7E43C78E1DF3AF3258AB3398455663FEFCA558B264
+      3533765AEC66914DA60624ABD470FCB81B4E9FDCE01A1E15DEAA28B9439C4F44
+      11E5FD57E89F7DF6D990BA75EBAEFAE5975F9A14F6ECFCF9F3DDEEDCB933EDD6
+      AD5B2EA54E88A3A323479CA3E6536060201A366CC81B06642C9035A6A6A6CEAE
+      87E2FAF57368DEBC396AD5AAC59A0FEA484A4A024B30FF5E5858187FFDEEDD30
+      B8B99DC19327DED8BB776B919AD639A5F1E2C58B3DC78C198365CB9661FCF8F1
+      2CC2FB78F9F2056F68181B1B233A5A8DB166914BCD9A3553CF9E3DDBF3F5EBD7
+      3C194C4C4CB072E54AB46FDF9E7F8EE8191696203B73E6C82F2CDE45A5CD5F01
+      B38015BB76ED624D27F47DD7833FFFFC3377E4C81186821BE991F45265CD3FAC
+      24E6BDF645571F5CFC7B13626BEF7867C47D6D5D6160618EC367CD725D5FBE7C
+      39D30E3EC5CE9AF726A54F883D5CAA75D26ADF3CCD53C40C324549A3297942EC
+      7166FCA41683F25E0E723B69C01214F7BE1242558861E240D7C8B56B47645F5C
+      D338E06B4EC89D4F34484B602645C6FB41A48CA57226242D2D8D23CD4942E53A
+      5DA60C6972D626D99D02B3E70F60E8B25DDDD3F358B1B2A5D809898989E10C56
+      F446865006492D63C0D210B01D0E789FC1B694B9D04FB245DF7E713032D4CF4E
+      E8E2554E703AB3CBD6E7C959B7324B0853D39CE2E42CCC3AE4895D636B432CC8
+      80744817449E7C80BF4CD6C04ADC8C190871D0D1D3CF464A85DA81ED27B072E9
+      B35C86668913C23422F7E0D835DC7B650653ED78746C188C2E9F71B8725C0357
+      7587A067F57AD88B38A8EB2A7BE0442C767D3F4F8CEE62837F361DC0AFBFF897
+      4D429E3E7DCA89CC9A2BBF927D6D865CD9A3999EF5E5B51280F6DF89C1D59661
+      CCD4317814D8152F2286E3DAE70638BA7E2776EE082B9B84181AB6D5CDD49049
+      F2BB77CBE56AE4D9E00DA86EA8013D7535E88845D09508F9E3ABA85938B6FA57
+      1C3A90583609799750C323272F22A262A1A96B90CD9193CB5732FB4651FE09C9
+      4FAA7598208D72D95B249BB3D409A1C64F8C660A7FFEE46C683BECC2BD92C453
+      E284F43EDE906BDCD824DF7B9B37DFBAC112D4AD5C12626767A7BF70E1C279CC
+      445C646565037BFB53D40529DA963941AE7A66FAF4BD6009603C40B1CD812225
+      E4C60D8E5BBE7C34D6AF9FCD8F70C9E56A9834C9E1AD0ED5D24891223A758AE3
+      F6EE5D014BCB361838500207077D2426FAE49B90711827D9ABD89B7EECD831FE
+      EFD8D858EA33E15B01999999F873D79F87E4907F59A484CC9933E7AF0D1B368C
+      A31729383868B3C4AC00F50AB3F60AFAF7EF0F66B563D3A64D893B77EED463AF
+      70F5EBD57FB176FDDA86D4F94B42EDC5F8F878FEFDB163C7F24D11D62280B5B5
+      7576CF71A10959B26449FCE8D1A375131212101717C7072B2B2B5CBE7C19E1E1
+      B1D8B8F167FEB9B3677DF1E0C115BC79F9686BF72F27CCE8D0B6053CA23591C8
+      EADE734F2311EE750BDDA50D50A3C613FEF90E1D3A6054FD51935DE1BAA72459
+      23608DAAED03070EFC66D8B0F99831A36F006BBB4C20EAE47C680666881F583C
+      98B9C971C3861387AFC071E3A135E630BF740BB7FE2D338EBC0FA94A48891351
+      D4D67D717A0C0A4D046B6C8F5FB76EDD5EEA9CA771162323A35C2D7BF663D963
+      FE3447A057AF5E7ADF7DF71D0E1D3A94ABB7203C3C1C23468C68ECEDEDFDBC58
+      89D8B8712357D4EE859A356BA0285D16FBF6EDC7962D6B9AB1E83D8A94883D7B
+      F6704F9E3CC1D0A14379BD616B6B0B8542C10F9EDCB871038F1F3F06DDFFFCF3
+      D9484DF5A7C1147E00859EEDDEBD3B2E5EBC8856AD5AE1C71F97A26BD74E3C3A
+      4B971EC4E0C18D7AB0E8AF15393B1A376E7CC9C9C9A97711FA37FE621A727251
+      FA4C18A2BD58D4A92521E6B07DFBF69DA01120FA817EFDC6310E2CA1C19AB1C8
+      31FB82891EAB8D5FAE5DBBD6D8DFFF0D76EDDACAB2C584666ED0900A0DCDE6DB
+      AE2956E92846074B913B6D8A9D089A3A224B8B447EA34D7985A69EA4A50B9077
+      B4AAD889C8DB1B54500F4F5E496196F0C43EFEF9F61AB18A925E0ECB79ADB054
+      9AE6F97B7ED6B5757922AACE4284EA0F91415D6D796CC0AAAC3FF30EB985E5FD
+      91F253DB5D97ABE1C67259511E2DB74418B61DA31B73FF50C27B4944B5035A5C
+      73895982F3283FBD5C37ECEC4570DD252F4A1CA54A846A9612894682F8224B48
+      BF92C453E2448C7FD0E2AD7ED4A080846496109DF79208D5EC28D5542B121AA1
+      2571727295B1B60935B4B9A2C657A244508B3E439CAAB1F8B955B8EADA8205C7
+      A073BA998950AC2D4B08BE1B53EE4864899021924D3C8640F9B6CECA5BAA1251
+      A244A866ECA92453AEECE77261056342879E9F87F8381F7DAF89502580BA8EEC
+      AF0327EFBC82D9B1F1C3435F5E3F59FE8908F3879C25255D2442AA4EEDEC8450
+      DF56DBE6AD1C13435C87967B223267B686585F1DA86F0458B22061A53220066E
+      5D4E60EDC2EF7178EF865C48AD3DF50A2E7F8C1333E3B8C01AB55889C89473DC
+      6C3B2BD81BA623312605B5EAE843475782B0374948F83B109B9628139137AB42
+      BD7D60717FB1DAB163C7E4A54E44623AC7C5EF1A86A3AE3E18DFBA06D40DD4A1
+      9068203E5406FF4F4F62FBF2EF7160CF0665C76C8ECED9C097C0E4A903FAF93D
+      3E7FB1D489884EE138EFEDDF63CFC5EB98D9BF0D6AB431849A8E045E5793913A
+      743D96CE9F8D39EBD6BCF59E518C26264DEA33C8DFEDF2D95227E24D02C7FDFB
+      FB0E5CF0AE83E18D3DD1A865264C6BCA70E6A409F43FB3C79CF9DFA3DDC20DD9
+      CF7F6E03F4EBF537AEFFFE35264E28A344F8C770DCD1DF2E4322CC80589089F6
+      D62F61671584D52786A1D1E7DD31C1BE31EA0F3381EBFD258058CC6A17465A56
+      8A6ECC6C8B09E3CA28115E91CAAE660A198AFF862154793F614C7DA4B5F643A7
+      4E9D50CDBC1A4E3DDACD1221C48DFE06183BBACFA0A067659088BC5371F34AC7
+      D19648ABE90FD464BFCD8AEEB375BF425B4D08B7906F317D781925426A6E572D
+      EF354EA1108C1A3A35A2EF377511947E1BD5990EA1D100A958C882F2E815F61D
+      E68C2CA3441424F6F63BB959ABED95D994357692770C65E1E89E2C11CEE59788
+      F1E37FE766AE999E6B10272E3903023549F6B5E55FB04478976322485493A449
+      F889D2749EC5208582838EB6C656AF874E9EE59A88D248E9C745760758DE1535
+      F44D999059E2B84A950896009B1893F6CFB2FE543CF93454F45E13C112606462
+      F3E95B4B18DE35C3AD4C136158BF9FE6D833492905DDDFDD3B433339F87E5A51
+      E32B191236361269AC66BFC4818F1C57AE1C927D797D8BD76BD9E1BE5C8CFB29
+      AF5C43CB3C11E3C68DEB396AD4A8653D7AF4E8387FBE37366D6A561BF678B56D
+      DB84EC6716D4761BCACC3BC7E27E53911241F3FB3FFB2C861F7CA1BECA75EB62
+      69565F27ADDA767EA24CB4553D575C048A9D8851A3E2F9A983D4533B7DBA1B9F
+      0876EB76717FB05489509D87869E8599D9C042134163645248B9BBB6776F7F37
+      F7BB364F1F3FF5F13DE2DBF774E8E980122762DE3C0B3C7D7A0B3D7BF6C4FCF9
+      7E0526E2E1C3879C542AE5FBBF939393F99E609ACB7FFBF66DBE7777D1A245C5
+      9FC73572E4C82DFAFA3FCC68D62C0863C674032D0458BA34385722E8ABF7615F
+      465774959C4B3E97EEEEEECE6C8F47FC8F76E9D285667EF2133B6FDEBC996B16
+      E83B1371E5CA15AE6BD7AEFCE81E75A87FFFBD0F56ACA88B949438EA78E73BDD
+      69D6E8881123A6B9B9B9EDA8833AA65DC7750DFDE9A79FF8F769650775B8538F
+      FFF5EBD7A16F698B864612F4EEDD9B06E78A96086767678E7AEBE92B2811B4C6
+      9112A4ADAD4D431098366D1A8E1C398BE87697B17BF0BFD9BDF6D3304DB3E7C9
+      9E29D4A3DFB5EB22961597F0F2E54D585858F0631EBFFCF20B1A356A54B444FC
+      F9E79FFC920A1AEBA4C4A4A6A6A26DDBB6F8F9E7B50CD2DB2C4B9269581B3366
+      EC42AFAEA6DD1DCF395E0BD6698C8E0DABA1B1A90E965D49C565B770748AD8C3
+      4A5443D5645C1A01483B75EA9466713831947DD1491A78A184DCBE7D170B16CC
+      A32FC1B66D37F1C5174DBDD8D74D1A81118FD7F9AFE355B45C2E879E9E1ECBCE
+      87484AAA83BE7D75F0C30F3FC82E1EBDF8672BB4FAC119CEF9F66B16A574580C
+      1830E0F5E79F8FC3E9D34E387E7CFF41766D0A0BB9EA8EAFF095C6D093435323
+      2363F1FDAC59D7EBA5D6BB540DD57614F4C3C54D844A08C6D4C21EA2C41CC081
+      22575EC54D44B94955222A54222A8A9419185F7EF9A53E53B05BFAF7EFFF1569
+      68316B986B6A6AF281D686D3F8EEDEBD7BA91A597CE7CE1D1A3C2A744CA63CE2
+      2C7330366DDAC4D9DBDBF3CA9D26B4D0B02D29739A0043336CD4D4D4F8EB7913
+      4E812A7B030303BE668A8E8E66B593067C7C9C11121282B28E9355B149E7CE9D
+      FB81AADA720363F1E2C55CAF5EBD7823232D2D8D3F9221DAA041037EE1205526
+      54FDD2641D4A2C55429450EA0FA5590052A92E3FE07EE3C66D766E0C73F35A10
+      0AE351D671D6AFDF8C5DBB8DAD5B57BE35505F66607CF6D967BB585360728B16
+      2DF884938F05CA3DFA18320128D0C790954EB946FE16683A43EDDAB5A1A3A3C3
+      E72C1DC906219932E56766C7FA80A6DD95659C4D9BD2CC8575ECD9E5ADD9A547
+      E502461E3163AD8269CC8A9BBF64C912319917F431A74F9F86B7B73733479AC2
+      D1F1383F2985684E1F20146AC1CAAA0D8E1EDD12E6E7E747B3A3688E18ADEB8D
+      2BC7380B95F2A84D686CB069BD7AF5763113B9E58001C370F2E4455CBC7838DD
+      D7D7973A9028D02AABE80F1CE77B01235B76EEDCC991D54B663B0BF9CE10AC08
+      71961A8C80788ECBF932971599AA314BE77A4957A1AFAB035698716D736FD49B
+      1052AC04E58D934EF4938B17679FD6563491FEAD0925650A46C3860D0B1D2677
+      D92D463233C9154CE3BBDD7989F947EA96F4E77891410C973F0448CFE48A1567
+      B983F1A144B3D1B006A9CF4FF8B2A41779CE4251A5D281C14BB3AFB4E17E20B9
+      F411E5968A01863DDC7AF4B0AC8D84ABD59D27D72D7C6D92CD081D781E4BFAB8
+      C0B0C76BABDE4616392F59C8F5FD9D47F9597E88E47C1830ECF1CFE031D6EFAC
+      1293C232A319532C1953E23F4E30EC11387DFA27B58BF38AB77764FCFD05BA2D
+      93029EF87F3460642D119BC64E69FD863071A0EBE065CB06E6FBEC8A1567213D
+      6B771FCAEA9063FF12040A6C4F08777D8062CC7CABB060E4112163897CF3E6AF
+      F2BD396BD6010283C67CCEA00493DE2A1B18025D0BBB36ACF93D1D9C40FAF65D
+      2E9135BEB62504972F132A0A181552AAC0C821E50606A7147E49091D739EFF77
+      E420A7252772E5F171920293FB8F9E9621D43B10590E46D5070323232383A30E
+      DC7C81624126073F1F52463E8114CAE38557C0295681A606F8C26DEB379FCB35
+      4467DFE516AAD280919C9CCC512F542E10B8FF00C809828C539E7B33759992CA
+      428AF23867E92707E50AE177C59DC75DE1C0888B8BE3A8BB0EB35AFF77518B31
+      C55013306020E9A903521634C44A249233D94BA9D8A1BB1C9DDBD982FC25FD79
+      6A26BE9CF42D3419A8F28C4C286432C833E998C91F29BC7E93805F7EEC5B719C
+      F7E5279191919C9151350866B7865338CBE91AA118A5554709862181C18E462C
+      D82E01BCD640119E84370E9E3835643F3AB46F81973781D397BFC7EF1B16F3FE
+      1C48F22B5ECB579D426AD7A1480AF4C7A31DB39B9BE92678BD6B56EF07012324
+      248433303683632D1D248A25B85ED3028332436092C608A12B81B68E185A8C29
+      12290384E5707ABA0229C9329C1979185D7AB645182B32C7CE29C13034D0577E
+      3CF776F1DAFFE715C832658C2D725E09870547C0F9E1454B9F872702504C1BA5
+      DCC078F5EA15A757BD1682FE9802A1408E0507FF85B59936BEE9D998FF5B0439
+      F49B9941DAA21664B1C988BCF706B1A10A9CAA311B1D5BDB20D10358B5672606
+      DBCF85B6AE5EA1BFD7A7913E42D9E75F39770C471DF70DF2776B73BE20C70AEF
+      1D0C5F5F5F4E6A6A8987BFAF83887D3C01B0C1E13CAAE969634ABF36A8D95402
+      75A918867535A0A92EC38BDB69F07F21C16D8BCFD0A9550308FC80AF367F0FFD
+      2F1643A4A39F1DAF9A90C3969E1C3BE6FE3DDD042162DF00E74EFC8393E7FF66
+      60B4AF38603C7FFE9CD336B786D36FC718100A44A5EBC3501C072D512AACEB45
+      424B5B81865649D0D0542036460D1CA3FA43F71AB8AC31009D5BD586340498B7
+      E31B8C5DB1163A06FAB9E27EE6118ECD1B5C580B47C8CF6FA6E3FD1D03911201
+      381EFC1B4ECEFF542C30DCDDDD390DF3A67CB94ECBE41091988984543914DC7F
+      55A92247B5AAC8AA76CD0D34797D601E0BF49A591FE936AFC06929F5A19AD66D
+      A640F5942050D2B38020B9F96D03707180C39E3DB878E3D820FF6715080C5757
+      574E62D1325F7B4291D7D6E0FE7B46F5B71553B45D4633300C1918A2ACCAA119
+      B078E262A4A6A7425D431DA9B254A4CA539190A18EF1753643C2CCB303BF6FC7
+      E53BA70705552430A4E676B426B94D117E23FB7E2D8BFA831B5859C037F4397C
+      C3BCA1D04D41865924A09EB5EC8426F7D29819334FD64CFF12C35BB586BA4800
+      0963876BF0749E5927D7FE861B8FCE572C304A22DF4CDFCBFDB0723CCF90ABCF
+      CE22332D9DFC7033052C6047E43AE63CE714D5203669C7B3EAD4EA0DB8E371A5
+      F2833169D20E6ECECFDFE42E32398A11E57C4858240C8D8CF9F3BC76071D4FAF
+      5A8387DED718189D2A37185F7FBD85A37918D4AA553950A0D62D5D5309B56F52
+      64E9D016ABBFF5BEEA39775F9701AF9E77B858A9C12896D419A781C07DC59A4F
+      58985418307AEC0EA8EFFCB0EE8FD885F14579BE38CBE42B0D180C842ED0ED79
+      E3852232FB5AF0F5846F1928DBDEFDE60896F66365DA3FFAC1C06020183210A2
+      8546053E9276C5C16F0D0365E5FB4AD37B078381D08C81E06669A95FE47776ED
+      72FD9D8132E3A30243AF565383F8BE1EB97AAD162EEC9DEFB33FFF7CF9AD6BDA
+      67EDFA2487B85E45398DA57C886222C80A349094B971E3E87C1F9A3BF71F489D
+      5AD2AE214E393E9E43651851A3C5AC3B76DC829FDF0EFCF5D71A7E36AF4824E2
+      27B3D294455A0B32678EB7CA7D1D2D4EB943A36AEF8A53F74CAB0109618F2EE2
+      3D8DAA951918B76F73DCFEFD4AC7ED3FFE38819FA86A6A6A0A7373737EF62FB9
+      C2A2455339C02893855315128CAB57C901BD128CE5CBA7E0DA3517B8B8F83346
+      D8C2C8A85DF673E509C6088C503785A9622BB6667E50309C9C388E3CA44447DF
+      6566F103F4EDDB9D853E78F8D0859FD74D1E1E4B0AC6A7F8542BA541CAE038AD
+      B849FD07F7EF4EF3C995EE2BE5D981F67C717575E5A756D3961CB4F88C587962
+      F9894E1EF028D26F951918C78E71DC952BAEFCF2BD39733EC74F3F3D61C5C598
+      9F0C4F4BB8BEFDD6BDA460080E1D3AA4204F94E4698EE4F8F1E3C8394045B387
+      6BD4A8C1AF6124106892BDCA9DF3C891238B3C57B444607CFDF5D7436D6C6C36
+      0F1F3EBC16AD39A346D5B1631A2C214A30860D6BC78A8916FEFCB32DB977E6E7
+      806FDA948CB8B8A70808F827EDE1C36BDD593477F3C6BB60EE822B2BD6ACE849
+      E7BFFDE68FB66DF511187899CF79F29A497B4050B874E912BF44CDD1D1915F75
+      E0EFEFCF4FA22720484F797A7AF25BFA91AEEAD9B367D983F1CB2FBF700C00DE
+      D71F79C3A3F9DA04828AA6274F1AB11A45A9334C4D397E5520E5240D2451A0D6
+      27AD08D8B56B171F478F1E3D70E7CE3DDCBC79870179307B9EA63DECD5EEE2AE
+      B116B43A855984CDAF6652AD25CD11B7B56D0D4BCB0E7C5ADCDC9C317AF450DC
+      BF7F9FF7F7B069D3267EA58193742EBED0718291249DF75F4A3559B796DDF6C4
+      237E72998241D3945BB76E9DBDFC818EAA736B6B6B7E3904AD15218068F1E8FE
+      FDFBF9EBB4E0F4CC1927762D8651B90E4BA016634B2CCBE9160C3C17686848B0
+      61C3027E09C4722C17DCC00DB1B8AED8A6C3980EEB6BD5AFD35364DA1C63FBD8
+      E2F033C03B34157EE149C87C7E0E92206706F6E7A85DBB375253B7D3C2551E70
+      5A86416CA18D1F4906D41990BD7B5759161311A3E892EEDDBB2F9A3B77AE9836
+      A7222054C0A89640D0C655B4042235550E1D1D03383B5F62B5CA7F4B3DCE9E7D
+      C95F8F8E8EC0BA7513931E3CB87BD50846B3AEB95D0B54B1283A31196A9A7A48
+      9601FE093A18D8103C18CF8362502DFC1A84C9699048E86375E1E1F10F56AFFE
+      82F74A4999C08A87ECC2D90B6E6951698F9AA0C9D15EE87583815C2443AD340A
+      949FE9DFA04183AD23468C683771E2447E0904150563E31A4C815930C5495BB5
+      E8333DE185BD7B57A4797979DD90C96464673BB04093BEB313F90DBED1BFA77E
+      EF9B375A6FFAE9EAEBD658B06881E5902143F825A82F5FFA31BDC3F11FEFE3E3
+      C5E28EA4F528B290D721D91FAD010DD7A22CD42C2F30F213AA3F87346AD4E897
+      C0C0400FC6962BECEF032CD052F82279C7CB299FE013D334F5B4710CA001FAB1
+      FA8E8DD068EF199C892DE334971B18955AAAC0C8215560E4902A30B2A40A882C
+      293720860E1DBAA54B972E332E5FBEFCC7F9F3E7A9ABAE54AB90CB2BCE320762
+      CC98317C1B8599DE7C1B85D696AA965692794C56E1D1A3471FB8BBBB7FF7E0C1
+      8322ED4F511E7196391093264DD267A6EE962FBEF8E2AB3E7DFAE0E0C183B4DB
+      2DB50AA9E1F656A2C9F822A1E63B2DBE5DBB762D7DC4A2A74F9FAE4796CD511E
+      71962B1034E9845A8AD4E8F9F7DF7F797FE93366CCA0BD0CF9A6B26A7DFABB12
+      4DADD6706A5364C6F12B92C78D1B87B28E9359B7C79C9C9CBE4611BC7B940808
+      DACE98DA1CB41E9D12418D304A08B501A83D429D27D457F1AE447B7905B1069C
+      36BBF798B54B2EA14F9FEE28CB38CF9FBFCA1A6C4DB06AD5AC73313131030BFB
+      A61201C194153FC357B50E9D7A8FA8D54A6BD1A965481F41FB8D504B95068855
+      0BF5FF9B082B8093D379763F91E5B602AD5A7D023BBBBA28CB387BF51ACCEEE9
+      E1BBEF86DD624CE95C2E4030EA72D457403945FD05AA162905EA5BA08E156A25
+      060404F01FA2DACBC0C1E1384B64326B56D76239763E3BBE050B76C3C4240965
+      1D27B57E478F6E597E404C9B368D9B3E7D3A5F9E2931DBB76FE73B62A8A32667
+      5F0675F4FCFDF7DF34AB8FEFCB50519B8EAADD6A487EFDF50A53728B51D6710A
+      042274EEAC7782FDF959B900C184265C0E66D5DA96B973E7EAD5AB578FCF41DA
+      4082B641275F589470BA76F7AE2B9E3D7BCC0F01E44C34E57E9D3A8D597130C0
+      89133BC86301ED1712CCE21C578671DE80D20BC2E9C23EA8B47604F95B6A636B
+      6BBB63FCF8F18D060C18C0E79A8787075FF591BF2EB95C9751F6103F304494A6
+      72DEA9D34856BC4E323BE0CE7D56D6A937E72F166896AEAC9CE22C54CACAA0A2
+      A964F54C4D4D57313A8F24AF04E4A68B3EC0D5350C3B762C46A346AD99E6AF07
+      47C73D513E3E3EE4A782FC54D3E857DC7B8CB3DC81C829C6ACEE1F6F6565B5EC
+      D75F7FD57AFD5A84DDBB97E2C50BAF675151513400FC370BB4E3797176502C8F
+      38CB1D0895E8EC3E7C3A71DFEFEB79C5161E1EDE985D7B5E01E32C77201018CF
+      71B7CE1CE4BD2315D5F5C28788B35C81703FDC80D3D46F88CCD47070F20CD88C
+      706FC12E3FAD6871960A081AFFE8FDB9FD5B117039FE4EBE6A87C6FD77339D9D
+      81C4F830444B87BC33CECB4776A1ACE324A9AB27D88CB777BC293B20684CE35D
+      D242B214D69D270099E948888BC639B7F6EF7C9EAAC077C5999E29436BCD9F60
+      D3B5E871928C1E3DBA48C3822502A2286E619C7E8E8544DB189C80838E3A878E
+      F6A59B23C2B1A4EE5F920C5363DD62C5C9F448F9019125A645B83F3FC7DFA4D4
+      D615F24EAE0D9DF28AA486DDA08C374F7B28273617394ED573E506C48711AB09
+      52BC28DAD6AFC5914A078466FD7EDAA9BE173E52BF38254BF7C73183B7A4A263
+      3DB47A9277F3A8E2CEE8AFF040F4D81DD006BA3D6F3A3BFBEDC62ECC2CEC79CD
+      8643CC537D1C6990F9E3610403A1260321C82D43E9473EEA56CA7406C6F60F91
+      960F39B9BD2F03E142B028578B997B7139BA1B03E3E6FF05100C04330642489A
+      6EBED327335D4E0511182EC58DB75201C140D0A5650E3AA662B5773C263B7DC8
+      9B3648EFF55102C140A8C14008AC555757AD28CFFFB5E7C97A06C6FCA23C5B69
+      809036196ADA66897BA8B5B571B1DEDBB6EDDE2106C697C57AA90203C1FBC51A
+      34C82EFB42CE2D31F38A6A8B4C955C9FCAAD104B046B63FD5DCB7481DC870042
+      A06B62D78613621AFB455D0838F5390FCC0BDC15F5D736A1AC3EE59EB266266D
+      784CF6C203719ADAF69898FB65BA38EE4300C16FCDA31BAFABC329328410880C
+      7FF4A8FDA2A0475737F53F0F88668393F3AB851808190C04F28A546EEB3D3E48
+      F5499BACADF46D1C59D0FD25F5BD68BBA0C98921AE51C588B67202D175270A04
+      E2C6149C6207FB8F1E883CDE16F3A6E1BDE8840A014445942A20B2A40A882CA9
+      02224BAA80C892720162C7DD0CEE9B4FC4F9B891CCED6252AEE020932B8FBFEC
+      B88BA000EF374F9E3AF77AF9B8F58BB2EE8AFB20406CFD3799FBB693D63B9FE1
+      5DAEE4F07BB77CF569887A0C46D09FBFBCB8F3E8CAA0E0E71DFCDE2718E502C4
+      6FCE71DCCCEE05BB73CB0B02F99D59F1D3714475F90CE1AC75A1FBCFAA170F3C
+      FE7DAF60940B109B2E4470B3FAE6DFDCCE0F0472D4F3D3927FF0BBD568202A8A
+      5C2FE2D35747BC1FB9DDE913E27FF535DE8373E2720162C39937DCDC41E6F982
+      90EDA5280708AAF3677781D414A583519F8053D8BA737DFFD8E07B97F01E16D7
+      970B10EB4F0472F38665396E0F533A62E7DDBD09045941880C69AD5C20E40426
+      84BDE27CFE38B6EC5AFBDE7C77970B106B0EFB700B3F6F006C9E00047A208D15
+      050DEA9C2387A2069A809E06A0CF8EDA62A56FBBB44C20912987D854780D3987
+      8857C0A5330E50E8ABA389AD1D6B8DCB955E5565322878EFAAB26C4FABAF83E3
+      F76D583AA0480E7FDE3B10ABF67B723F7ED518583B923122000B0238AC6D2002
+      8CB494415F43E9729640D1A80EC4BDE141404C2A3CFA9E46543070F1E46174EA
+      6486FEBD3BF3D391559257C7B8B1F3BDF376DEF1B8EFDCDFD5F5588937472817
+      2056FCF9945B3AA139B89F4742101E8029EE02EC6C29508240AE66F5B3DCCD1A
+      48D9B55640F02DA43C0E41D4E350C4AC73475C0870D6E120BA76B5C805447E8A
+      F67A0470F239FB1087CD779EBBDF293118E502C4B21D0FB825535AE344131BC4
+      7979E14EE716F8AA5934CC03C408F38D859E8106F459D0D195408395998C7439
+      1213D2111F970ED9B160248503A7FFD98F1E3D6A650351506D738A81C05E4178
+      1A607366DD9D972F5C4B0446B900B1648B0BB7785A7B5CE9DE1A892F9FE34CBD
+      7A68D930153677A2785FBB3A5231B4987ED032D283282395FF405A5A9D9C2C43
+      FABE40A44702270EEC43EFDE75D08F0101A65CF30381CEF7EFB9ACD4194C8F44
+      872B70FAFA1F5F89CC1B1CF3BDB035FD8303B170E30D6EC98C2E883E3A8795FD
+      57587BD68FA9800CAC1D5E8BE9470E228102428908EAF5CDA1608A32D92F0A19
+      9C04990A095E0F3906590CCBE53FFF449FFE96E8DBAB33AB32846FD52CF9D536
+      2E8E8C8D1B7B1DD0D33798E579F758B17C7A970B10F3D75EE17E9CD513C14756
+      4011F71A318929587FFA113A3630C4C87675D96729A0AE2F81D4AA3AB4AD4D11
+      FB2818E11EF10C0C75C40EDD09411C7078D72E282C6BC0DAAE5D2E65999F1826
+      A7C0CECE1C0FCE038BD7F570904AF5A6793F3855AC1DE9CA0588EF579EE716CD
+      ED079F239B58EE86F23E76B7395D457D23630CEED030DBFBB2E92726306A5A0D
+      0197DE202250A164C5B09FA196041CDAFE07AAB5AD0BDB8E1D0B052235281EB6
+      8D4CE1761958F073050262F612476EE182C1703BF42732622389D8D87BE11AE2
+      9252B070544F563464A8DD5203C6563AD0D2057B2695E5268798380D687C368F
+      9F4F7F74C336389BDB40A36967A622FE03E2D3FA0A0CAC9FFBF722BDA251D7C2
+      18CFAF013FACAA40407CB7E01837FFC7CF70F7E071A4C546E3558C0E7C220D98
+      7EC840F77AFED0D74D87449D43DB01E0D9E2F35888A76E06C8648C301E315109
+      C42F5B11D2A229CC5AE7064225766640BB1AC08429E7505B5303CB16F480DF2D
+      60EE8A0A04C4B7730E71F3978D86F3812B488989650A4D88880C63D4D00881A6
+      3015B6361110308BB259F378DEF68E8D11C1C7571F4FFD6AC27C18B33D580D71
+      74FD26F8D7F4C3B8A95B9832CC80584D233BFE495F9F600832038D99EBE44F76
+      4013632CFEB61D82EF01B396766740E8570C20A6CDFC9B9BB7622C5C6FFAE0E5
+      9357BC4E20054945826A0C03AD4458D70A85916E2AAAE925415723197F5CE985
+      88244334FDA20B848C110E6B37C2217115BA4CED827B17AE2339FC94D2CD34FF
+      F1C22C20C09FF7AFA38545E39A21DC1598F963050262CAD43DDCBC5513B3FDE0
+      C6A4C8109190995DD5C973F8C7CD3E67C1584F9D8126849031C2E1E7F538F1F2
+      67D8CDB0C27D97FB30ABDB1DA16F7ECBFA7811CF041528FD9995FEC388068877
+      6399309F01A1574180983CF90F6EEECF53DE72109CD319703628799C07D3B988
+      8058BD168E2FD641661BC73B66516FA48E914347228315931466409D7BF23B2B
+      55CA465B3F9D14CCED5F03695E2C13E61210420684F3870762C2846DDCDCB5D3
+      0AF492FC2E102888597058B51A675E6E804C334E994A0360E2B71371D7E32E86
+      F718CE3B212750923393218DEC8D7E2D4642E1C3F4C7EC0A04C4F8F1BFF3CB21
+      4B232B57FE84736F981D228DA3D915BC18D81A30E32B16C3C775C3E41EFD5057
+      571D1256445E7A594266D81FA2409609332A1010BA16766D0BDC1F2C8F088502
+      9142C151C70BD7A583DD10350D292E3E61B6B29A0C99E651904B9395CBDC48A8
+      E288628C3110C16DD346A8AB0979205E785A2245AF1FB458E36BECF4EE0EBA15
+      05885C73218A21974E6C8FD4346D08A7D71BA02E16425B4B0DDAAC75AACE14A2
+      84773FAF0C04803A9D8B9440BCF2AE8F4CC301300803C64C6140081910DE1501
+      88128A878707A769DE0449F2285C77BDF99FDB79F61F21AAFC5B90E5925E5971
+      A8D1B9D10028586D63C23EFDF3491F01106E6E6E9C7A8D66B96A9B9CCA35839D
+      C85992159C205F455B2B011831BE2B0342AD7203F1F8F1634EDDA2C55BB58D22
+      EB3C352313990C19353549BEB54D835460D8D8AE0E0206C49BCA0CC4A3478F38
+      B1855DBEB99D21E777A7C3AB57C130AD61C13323D7D0007BD6260318FCE54700
+      C4575F6DE6541B13A83629A02301A092E8A438E8B326AB284F434CB589C1E397
+      FF1E12AA4966067B5EFAF01D332515CB16FDFF508D60703987321439073614A4
+      235865C165E41CFF52D0F2374E20D750973CD211088EBABA3AA5545A208A2A52
+      AB116A892F8EC9518643819514886192C417CD646539405C7180F846EF480FBB
+      A7739C27D70D291488869F354AF46952A673282A0610F6B8A7F589B86D3BED5A
+      B49DB70903E39D3EA474EA0F9724F99EA0C51E1F51D1B047804537DD3AAA3FAD
+      84C6A1CEA3FCCC4B11632504C21EFE2D069AD5CD7BD93055EB2E03A3F085DF1F
+      0510F638DE6BA4E5F0826E2BA2E1CA8A491F564C8A6518552E20EC7168F4B8A6
+      A30B7B2CFC35330512AE6A31300A75B156F980B087B7BDBD9D55511FF7F38B8B
+      6060746460BCFC7880B047DCAC599D0ADF34348F787884A43D98A3DF26F18DAB
+      C7C7008430EF8624056D5B439277EB1AE959BB3D42B58C1FE2833CCAC53DF4FB
+      0442A055DBCE544D2EB0E5149CBA402090CE7B6CB1BFA087D7B77C7D5F00C136
+      D6984A04B522845C58825EDA13787A96D8C552450142F57BFC6FEA9834ABB6C2
+      B74978410F2EB77A719A9367DA2785BBAB16AF548EBD7B54D2B265CB6EB367CF
+      6ED9A4499316161616CD84426153F2253767CE26D64CEE0D27A741AB43434397
+      49CDED0CD6BE6A5EE02A9E05B5DDDEEB72A6320162F1E26D2B4343CD178B4435
+      F1C51752D4ABA7916B1323DA8763F2E4A568D8702E8E1DEB456E157BEA5AB4D3
+      49E87FB7401B417ACE6EBF4020995DA936715FB060CB9A57AFAA2D944A1BE2AB
+      AFF4F9DD578C8D8D79378BC406DA4266C2841F7301011B1BE8C66BB4E0140253
+      C6F83CE9287F9D502E40FCF0C39635AF5F2B811837AE1AE2E39F83BC16D7AE5D
+      9B77C7FAE6CD1BCC9FBF393710A5F02B576181F8FEFB2D6BDEBC510231614275
+      C86441D9DB5951F1A062D2BDFB988F1F883973B6AC090D55023170A0115EBF76
+      86BBBB1B828234F9EDACE8BA4ACA0B881998210E4398D006361945DD70A4CC81
+      98356BCB9AF0702510798536298A8870E6CFCB8211EC23D53CE129F287BF5C6A
+      251D92A696D6A37987E603AD1B595BD08E4DA4989FDC7B722EFE79FC91A67E4D
+      8F6DC2A6224D332C132066CEDCB226325209046D56646B5B0BA3470FE727813D
+      7FFE1C6969363874E8971203D1C7B24FB378CDF8296DBBB5ED66DDD8BA51DFBE
+      7D791FDA39F7F422AFE9D4EB4D1E939F3E7D8AC0C040787B7927367BD0CC7017
+      7615EAE5B44C80F8F6DB2D6BA2A395404C9C6882274FC2989E88839E5E18BF9F
+      979F9F3E366E9C5B22203A36EA38E95FCF7F77D339B987DEB871237F7DEEDCB9
+      7C2047C10438B98926E57CF3E64D5E2F91EF3B722C7EFAF4E922B97A2C1320A6
+      4DDBB226365609C4ECD9F53169D26974EAA485B1636DD0A851239C381188DF7F
+      5F542220C68F1B1F3F61E2045DDAD84C250E0E0ED91B979130030DC3870FE795
+      F2A953A77857D124870F1FA6BFDF0F10A3478F1E52AD5AD32D9191B56B1210FD
+      FAC9B173E71B0C19521353A6B4E2AB4F27A710ECD9F353A140304547E55FA63A
+      6F8CC6225F5BDFDB7FEFFFBB15D92494DBBD7AF522FFF8FC4793F35FF2994D3B
+      BBAD5FBF1EB76EDDC2AA55AB788FC85465EFDBB78F65C289F20162C28409BCA3
+      7F06C057E4B79ACAE5C58B4F58E202F8DAC1D63618376EE860CC186B74ED2A45
+      747434AE5E8DC581032BA1A969C112FBE7F9D4D4D4A17981E8877E62C77447FE
+      9A9B5B3CEEDF8FC5A041EAD8B2654B6AFFFEFD35A9585CBB768D55C3DD798FC8
+      54E45C5C5CD0B8716366CD7EC1BB9A27F7F2C49C4F3FFD9437E276EEDC49BEB2
+      CB16886DDBB6C58D1C39524FE5D73EE7B0DCE5CBEE387EFC150FC4C8915AE8D1
+      A311CF04A2E9A3478FD0A2450B3EA194836469D2076CDAB4C9813DF39DBFBF7F
+      7622EBEBD7DFAE5D4B7BDCD8AFC76AD2866494B32AA1DDDB68D343F2864CFEAF
+      09102F2F2FFE83AF5EBDCA170FB97E4DF8DCBDCC17C7A953A71288C49EB20582
+      7D14471B0C92536EFA989C605CB9F20C8E8EC1FC735A5AB79821558D77F14EA0
+      D18667B42302F9B9276AD35E7D34AD88DE7376BE8DBFFEFA63576464E414D5EF
+      0CC000692422EB476B474F115B88076BEB689BB66BD70E4D9BF6E7EF87860642
+      228963BA68369E3D7BC68A9D13EEDDBB87C41A7D7137BD253ABD5EC25BB5F3E6
+      CDC3EA55ABE3AE9DBC66158BD888C2BEAF48408C1D3BB6C7C48913AFAAB6B4A3
+      8FA0FDFAC87A5481419B8DD191763AA09D0DC87137FD4D5B445CB87081D52CDF
+      22393999D1FB364C4CEAE2C0F90D5044EA203C3CA840DFF6433154FF95ED2B97
+      619F0D6BFCFAF56B9E016DDA9085DA95D50A51AC7678C8D71854548819B4ED04
+      6D89D9B973677EAFC1E5CB96C7F83BF8377888878536DC8ACA08357777F7CCBC
+      DBD8D139696F2A9794E3748D3E9E729E1CFACF9C3993FFF873E72E314D6E0A33
+      B39A8C05973160C018A62BAE60D8B0C9AC6DD23E1B88711827094738576D70B5
+      E59FF4FE649186715DB46AD5061ABA46B8ECABE0F7F87BFDD213DA4197C0C5C6
+      B2DF5DC6326033AE5FBFC4FBD4272125F9DD77DFF17FCFF876464CD8D9B03205
+      82AAA2EC0D0F73869C9B1F52EE10283E3E3EFC1677128936B321FC1910A7F838
+      BA76ED4A9341F0C71F8EAC756ACD8A912E7AF634BED8C9B8D3B2D1CB466F69D2
+      D2AEEDFD10211A5B99A27D6D7D9CF64E431B0B2DA4CB910D845F583282C263D1
+      21E904CCA42D18BB42F9CC209D44C550D9AEE9CEEB8DA9E3A65E6C236B33AA28
+      DBDD15A7D668D1AA55ABBF5811694EB4CB09840A8CCB972FF3BAC1C5E53EBFB7
+      1FED75B163C786EC08EEDFF76126B7067FEFC8915F9946DFE1151E1E7E76DA98
+      6906537E9832998A1A15ADB06419AC2C4CDE0222EEB517AA45DD66AC6BC23ED8
+      8A150311DAB70F44FDFAF579C38A8AE096DFB68405F905B958C1EA9608A2134F
+      F134B8281F57DCEA9326FA59B03A7D7D9F3E7D462E5CB8902F932A308805E4E4
+      FFDE3D4F2C5B3687AFF36917C8458B16B3323B99DFC474F3E6EFD298D9EDCCAA
+      60D5868761ED1BB75F77F0ECC11FB27F845986A47BC832146AB3667D5428A2C2
+      DE3045A9C9AE1BF00004051DC1EAD5CB19A047F0D38A9FB23F3E094927876048
+      4451DB18250522A71831E53491558DCB56AF5EADB56EDD3AFEC349513D7CF89A
+      DFED445BDB80DFEC8372FFCA95133E212121B4332CED72F00079F6C56985566D
+      C30DC397C8257293A6CD9B363F78F0A0F845A0172C8C6BB39A86FCF7E9F2C1D7
+      F732CBFD60B8DC7629F5C79715102A21B7009DADADADB775EBD6AD1ED9FF4F9E
+      C4E3C58B27CC14DE92F6F2E5CB3B4CB952EE1F449EED2EF30A6D8A1A8D683556
+      7DEAEA4ED4F5FA76B17D752BF3A6CC423CCEF4CAA630AF271ECE4DD1F4A118E2
+      58D6E4BE5EDA8F2F6B2054426B7D1B9A9B9B6F65CACB322020E016945B5EDE61
+      21A9B89151FFC25DDC6D196316B39E194BC1F551FFD7E118FE948155ECED33DF
+      371039855A3DB4F6B2D48956B1A4A47B877F68202A9D54019125554064491510
+      595205449654019125554054C95B52458A2A794B2A3C293EFFFCF33A1CC70DD3
+      D1D1E9DAAC59B341D4154C5DB42626267C570CCDC2A0EEDB274F9EE0C1830789
+      CF9E3DBB101D1D7D232626E694BBBB3BCDCB2977975E95299D45910A418A71E3
+      C6D9CAE5F2EE666666432C2D2D3BD12E86D46D4E42BD34B44C878055050238E7
+      397598520F110D80AA7A8BE89CEED33DCA085F5FDFD09B376F9E0D0B0BBBEEEA
+      EA4ABB2016BB1D5F59D2595A796FA4B0B7B7EFAA5028863130BBD4A953A79995
+      95153F084403B7D4034E3B443310F8BF49D873FCB05ECB962DF991AD92824DE3
+      2BD4E54F477A56D5234F99F8F26508CB88DBD49DF8E2F6EDDB376532D9E956AD
+      5A65B0E73EADE8E9649A8676B8ACDCD32ED7AD5BC71178A44E691C5705127D3C
+      9DEBE9E9F1A303D44B4F40508F3D81A572925A1E6047448859DC5288443E7076
+      76E6DFA37EE4CA904E1A0A0E0808C4A9538EAC3ABA3731363696FAC58BDD31F8
+      4149F1DB6FBF714D9B36E541A0713255A0910D1A35A58900346C4C7FAB3CE5AA
+      826AFB749A1E42994699A27A96868E296368A081E2A640E714373D47259ADE89
+      8D4D62D7687C4202A95487819EC04ADE33787BBF44787804ACAD5BB0CCA0C907
+      0254F4741A1898B0B4AA432251C7D3A77770F4E86E1A3F5CC25E2A93DD8CDE1B
+      29962E5DCA1110545AC8002370090415E8745D9511744EC3F0B48FB66A488C4A
+      0DDDCBE95A396FA6E4BD47471A31F6F27A0E4F4F2F848484424747CAE24FE733
+      223A3A9605E5D4E8214326A3468D7A080CBC8D8A9ECEDAB5AD9876D164A4D080
+      8BCB39FCF5D70622C57276FB5AA522C5B66DDB38DA2D9EE6452D5AB4881F3DA7
+      41643737371E1032DAA8FE26559AB794AA3282328726B75A5B5BF3A58EA60F50
+      A04CA10CA1997D34972228288865960E2B4D4230A39057CB142F4D61A070E8D0
+      A1B7D2F7F5D73FA27E7D5BA6922FA032A453225192E2F2E5434C0B2F74669A66
+      15BB7DA35291828994C90456FAC63103AE61FBF6EDB53A76ECC8AB6415A074A4
+      190504184D81A0E90F54BF93EACDAF94D2D1D3D3137171F1AC5EBD8F6AD5AAF1
+      93EDA8DECF09AEAA6ECF0B36A9DF3A759AB08CD345B76E4359020D71F1E27E56
+      6F1F4F974AB5396644AA75EAD449AD22A6F3DAB5A32CAE4B49AF5EF907858787
+      D3802391A24893022A122972FE26CD21A341C316B56BD71EC1546F075602EBD0
+      84834F3EF98457A92A154E80B2763C3FBD8CB654A7924A5355689B65BAF7F4A9
+      0733BC043877CEA150B0294E06207BAE0141CD322982B5281C939806088A8989
+      0960F76908FB190B0F590804EF5C109A153C9D01500EBE96D982D10AD14FC17F
+      39A0C3426D56477765E07FCAD46F1B06BE56870E1D78754DC04E9A34899FA431
+      70E040667879E3EEDDBBF0F30B42DFBE5FE0EFBF7F792B520D0D6D66A5F760AD
+      083366AC79B066DDCD3402362222C29FC5471D466E2C3C66C18705DA8792764C
+      E33E8274964A2A0A29F24B17F92A236D62C54ADB0066F00DA95EBD7ACDFEFDFB
+      8BFBF5EBC7D7BF54A2EEDD7BCAD46A6DA66A37A0458B6E0C602D96110F59A9BD
+      93C68CAF50066E0033FE5425EB3E0BB4EA98D697A69601B095259DC5FEA8CA22
+      D44E231779B47F7B1B56D7FF2D93731033238D8C416ACF5337725C5C5C20BB7F
+      184AA3CB0BCA9245C096CB849C4A9CCE02A532912297ECDCB993EB32F82B6444
+      F8F233C1A91EA78E1D763CCA6ECF4211A6AC57A5337FA9D4A4E8F3B93D24C9A1
+      D95DCF34AD9F351F8FB0DBB35141C0AE2CE9CC29EF9514045059C4D3A5E65998
+      B4DE087DDE3AFF4F52623D717F7F37BCD45CF53E3FEB83A773CA9429455ACC53
+      5479EFA4A0D54BA595B83BBD60D66206F48DF459A33143F9153A5224BEF6C3C3
+      331BD1E873D752C54F25B934E9546D649774BF0FCC5BCE2CB77492D06A91B2D6
+      3AEF9D14D43B585A99F48903AAD76B0D750D09B3E8D578DB3C339343465A126E
+      9DBD8C1BF1D34A153F2DEE2A4D3AE58C14C9E90A4CEBE8889A0DEDA0A1593EE9
+      24298FAAE87DDB146491CFCF3A96588EFE20F83C23F3BF0F10907B65A1F23C23
+      83C3D8DFB81BA504889A998DB2CE9F43D92F500C114020D6D0D838493244579C
+      0C8950C6BB7D2E8774AA84E258574671555E43138513EB831A7092FE1B8512BF
+      6B3DD35263926411016F901656D06499FF6F43F3FF55A4D643F513BD9B27BCEF
+      4D714B2A55A4780FC2FB7D4ED75643E03ED21615662E664152458AF720E4035B
+      BD9ABE7A944BADE4CAA02DAA4891253D7607D47776B55D05457C6A8FD6013F16
+      C5CF775185FC818B0DD4DFC4DC6F9054458A4A208C0C96CE0FEB1EEAD1C3B2ED
+      DDE420FE1AF93C7776F65BCDC8B1A530BFE74511DE37BA316B77DC3D56557D54
+      646164E8C2C8B08F91A1CE0B45FEDE4A791FF08C1CD8856DA5FFC5110CEB6315
+      9E1024FF77A46064B06164706264A81BA359A4CD4D1486A95AF71939E63072DC
+      FBD0E97F1FF27F430A46064346865D8C0CC38546258A224D110D4F468ED3AC5A
+      D9FEBEF609F810F2D1938291C18891610B23C330939A5A1AA58F51B9670223C7
+      76468EEFDFC7BE09EF5B3E5A523032346364706064B0B2B4D42F97DFA03D2418
+      391CB20CD272DD47E27DCA47470AC3FAFD3463BA5F08EDDDBBA15EE3C626EFE5
+      37694F0D468E7BD27376331502B597C9C1F78B395652B1E463238550AF5653BD
+      F8BE1EEFF486F8AE7D430A92BCFB89E427B4C788823531D4D4321EC60779D00C
+      EB0ADF27919F7C6CA410C0C646AC95A461A426472DF6A721A7A019D81CADF113
+      0884429D84018FF6AF5C39A4D8112F59E2489B48DC0787EB0281C08B53289220
+      10643531695F055AECCBC5C844084AD1496326A96799EED9F67E41FC384590E7
+      4822D43169669834D83D7CE3C642F7DF7A4BE6CEFD8734C16946AEBF3985CC25
+      29DC9DB4515E4DC0E539564AF95849919F08A5E6768689035D23B76D9B50EC97
+      A74FDF4BA4A07D77FE66E17662886B7EA4F828E4FF8A14BA16EDF4DFB5C75061
+      C2EF4124171C859AF85E42F05D9A925F458A2AF9FF902A5254C95B52458A2A79
+      4BAA4851256F491529AAE42DA954A4D8F950C1996A2BC0D1EE43723A2AB762A2
+      BF39B99C05C57F7FABEED1764D59CF720A7225A47C4EF9B722C73D3A571E8343
+      93E8BD7D1B960E18FFA1BFF94348A522C5B6DBA9DCD4F6EABC8BA0D208F52C31
+      7E3082288FD97F67859F7E76C2E01F06E192D32BF85E3AF9F2CEBD8B4B39485C
+      33C51921E1EEED532BC394BAD248A522C5961B89DCD40E4A97822591C2C8C0A9
+      48B1FA143A4D1E8ACB2F8124F26513EC8FF4EB0E2FEE3CBABA4C28123ECE140B
+      3E6A72542A526CBE1CCD4DEDA2DC93AD38525432F081DD5BB5FC286C468DC2A5
+      302081912221134895033AC13E30B97BF8C583A7379609A1EEAAD0978484B8DA
+      A57D6CE4A854A4F8F56C28F74D773DDE3B4C5184CBCAE4A29241757E70EF15F6
+      0E976563704A1B855C1BB2101BC1213D2312C72FEC5B23E4C44E72F54CCFA817
+      2EE4D4B4528F77E4944A458A5F1C5F73537B1AE4DA8B333F519181CB43007921
+      64C8753D9FE742FC80000F2030E40436EF5C7B92D1603F7BCAE5631B07A954A4
+      58EBE0C74DED538DDF4C914471751F84177701B27C76D25217019A6240434D79
+      A455DF742E1129CFE9281202420138912632D54D94ACC994430E2D648AABE191
+      CC0606369DA0C99E2562840702AFBC009F8063F87DF7BA8F7670AC529162F521
+      6F6E5A7F13DEB5312F6B47026101D9F72FA4A6A19FA6069FD13C11B4C4CA231F
+      D4946450114545122206EF2380E56906331CD2991191C6426A261FB61BAD4497
+      76B63C29A25E036F9E03CF5E1C45E09BFBF87C787FB46DD50CFA7AD2EC1691CA
+      9B6ECE73A5C6519E93DF8A9C7F6FF8E31EBA7FD90647379C787CF7B1D3547591
+      EE4B23B590C41B376E14BAFD7A7949A522C54FFB3CB86903CD7847EA241C2385
+      208B14A1CCDC5BE9AB8679AD235137D3283721B4B288A021CE4D16BD9A80CD72
+      96F92180E772251988142999D9A4F85D6F053A31525046C6BD6155C80BE0C9B3
+      7F101CF61863460E44BB36B630D0D7E5DD25E795A218B82BD69C469F998371D5
+      93FDECAB0024DE3E77E781EB95A93A02F557526964F2872047A522C5F25DAEDC
+      B4213551CDD898073569E16028DEF8F1F77E095347B84C80BA351230CB541B3A
+      EA5AD9991FFC221AF1C1091089045067E450675A43D7A63A44EC5C2416F2BE23
+      E4AFE3911E9D82B4D834A43372A4A5CA90CA8E17C71F438FBE9FF01998C45A23
+      E1AC99FAC0F50042A2DC0A2445715A3B2B571E47ABB19FE1E22B650B875A3BE2
+      D7BED0BF7FEACE63AFDB1F841C958A144BB7DDE3A60EAB0D2363531EE8534D6D
+      10FFDC8BBF176C6E8C807AE6FC79F7163190EC0DE309A0A94924104183C84041
+      5D7514418D1182FC620B854A8FFC72665364B22A248385F434DA864186CB934F
+      F2A4A00C4C8B645508E3E0EDBB7F233CD6E32D5214B7E94BC7554BFF4148F7D1
+      38C9B4105252942139993F9AA584A363FCDD3BAEBEB7BF11AA19BCF2EDD72009
+      CBCBBFF95BA948F1E3E65BDCB411F56058DD5C59728F4D07625FB18F50F0D325
+      A71D7CCD3F57A39A02ADEA0931C8CA0442BAC7B287EE0B9909C99F6B6B40AD46
+      75C0C080E59402F2A010C8C262999D494FA8B1A31A7B8B9D7322FC6DBA1A1DDA
+      34E73358160D44B3DAEAFACDBD884AF0E249F10991428F19BE448AAC164E61AD
+      98BCD77D1E327346A6B497337306762DE0F529EC3BB2FD17B158DD51A0AEFFCC
+      F7FEC1449A135A9E38572A522CF8E51A376D547D1898D4E4018D705804456CB0
+      92142CDBCEB8BEC64DEF08FED93696EAB0AD6988E6350DB2EE93FDA9C87E566C
+      A005F5BAA62C5407979A8124CF60C8654C5BA473488E48E309A18008C7CDE7A3
+      639B267CE691FBD3F840E0D2D53D781CE48E569D7BA3AE551368EA304333A74D
+      C1E5EEB4E0F29CE477AFA13687BA9686D984215329E019E01F741CFB8EFE7154
+      5D5DE3804422B9E7FDA0796C797796552A52CC5B7D919B3EC61AFA26B5F912F7
+      EAF05A64C686666536C78735C7AF23392D03350DA5A8C63442BF56F5602455CF
+      A12D980E900860D0D81842567D901F2A4D0B3D08991D1AEB1983D8C054A4C42B
+      B235C6450B7B746ED388D7006A494C3B05014EE776C223FC395AF7EC837A8D9B
+      424B9ABFA1595CE1C213D0AEA5520B46B2DF79C58C4F6F3F071C38BED3415DA2
+      7640A2AE7DB78A147964EEB233DCB4B136D033ADC793C2FBF076A4C744646736
+      895020C7CBE060686B48988D294275A6DAE9BE80AF3A00096BB14A34C1372195
+      D739A8EB8A6164ADC3CE85087E9686C4380112E3457C7572BBD617E8DCBA215F
+      7A35A8CA0F064E386EC7517F7FA0C540546FD41CF54C7430D012A8AFA72CF711
+      A9C0BF6F84A8A9C3A1AD69D1357D825F2C6CEA9BF0BF15432D1D6FC0DDEB300E
+      9DDA53458A8264D68F27B9E9E39A426A569F2F4DAEFF1C425A4C149FB1A42D48
+      19DFF5AB06EF703DFEF97A4689B0AB19C134465A76D5A16B08D46D2E84B6911A
+      DF9FA16D20525A86329932B08A3C219AC3730F6DBC0A96E2499D7EE8D2DA92FF
+      3D216B1D0898D972E4E8565C0D7F05E38E03A1D3D0166ADABAB9AB8F7C442A01
+      BEB6056AEAE67F9F8CDB972EA168DAC88227456228AB427C80474F0FE2C899BF
+      AA485190CC9C77849B36D11652732B3E936E1D3C8B94D898ECAA8348119BA605
+      FF386388840A9868C6439F156F43F5C46C6D221229A02395A39E753A6B857090
+      8815A86E96095F1F4D3CF7D265CD5035A4A48959C688F8EAC3A75E7B746D5587
+      CF28F62AD44380FD077F837BF26B34EE3310359ADA42435A3829489213D35848
+      475A5A267C9E85E1A5FB1B44BE8953DE64EF0F686682E5DF77E67F2B85994611
+      ACF97BF7E17E1C3BB78F91425C458AFC64FAAC03DC747B3B689B37E22970E9C0
+      4D24C524E631249504C96E69F05584F27ACDEA715097C8209566B2A6A852AD4B
+      C472585B4681CCCAD414213C7C4DE1156486E8245D76450D6F2C6DD0AD754D3E
+      A3D498A690B266E99EBDBFC2D1FF0FA41B4562F6B73BD0ADDD4878F8FF8B0317
+      9763C5A4D3108B7470F8B43F6EDF0F25279F4CF9C81146758A6A1E8848F4DF47
+      A9C8C4EE0DA8AF8BC553ECF8DFCA8C622D1D5643DD70D9879317F75791A220F9
+      66FA5E6EFA37ADA15D43D91AC8CC54C0F5FA7304FA2620334396A37591BBA5A1
+      224B4DA328D46219490FF036054853C8D0AC7620D4982D42D54844BC1EDC5ED7
+      434CB20EA21442E8741805A9A658490A9615462C4BB6EFD880D33E7F20D32C1A
+      228B0C98DA18E3B5D76B7E1697483400F2B4C559E80AFF23424E4D921F2998F4
+      AF21C6A22F95462DC714486C2070D5F94F385E3D54458A82C4DE7E27377DFA27
+      D0ACD12CBBBD5F509FC05B1D47787BC4942BA42F216FDCACA681196B81FCB665
+      1DCEBCD80D19A221AF9304CE48A6DCE5833C553023D6BC86395AB46981D088E6
+      48483665EF2A90986286A8B896E0146A4A22E443967E0699983FA40EFFFBA278
+      D6FC652D90F31777C1C9F98883BA989142AB8A146FC9A4493BB869D3DA42A366
+      8B777710E5C858A0F46450BD2761A1761AF0CB863538E7BE17320D460A75460A
+      0D460A2DF6320DD692AB332B96A91211268F980C6D2D6D642A3291A1C8805C21
+      67F1C89126E3E013D515818C2499ECC5349914E9725DF4538FC7DCDED5F9DF13
+      27331B8419B58E4E7FE0FC75070711238596969C91A253152972CAF8F1BFF39A
+      42BDA65DA164C87B5DA6500E9E96840CBC099BA5291AB0FC5FBD66252E7AFC0D
+      9976162984B2DC4892D6680434AEDF98D9313571E9DE2574B4ED889E6D7AE6FA
+      1E7E0495FD9371329E2CDAE1CDD1B6F117D9BF2D643685C3F16DB874EB441529
+      0A92AFBFDEC215B4F92B5DA740927323D8B2929C71923D7225701F647AB190E9
+      B022AD96557DE414FA9BA69292FB12EA643507460FEA88AF3A748295A919442C
+      0E11439F3F0A95E71EEEF590A2DF375B9B69304D71E81FD6FCBD73AA8A140589
+      566D3BB3B7FC4E949508595C8AFFC614BA75FCF454BF5EF5A06168C1AB8A0741
+      D7E01A749D278448CCB486A6005AFA4248B48510D27C1D96ABBCA77E2835123D
+      47C7B69656D0D5D2407D132511E89A9A8A08007F54132AC9E1E369890C83FED9
+      9A4B8F355EFEFA7B13AEDD7572506386A6968C91C2BB8A141F4CA6CDFC9B9B3E
+      A515B4CC1BF3A536559E8C53AF37F019CA672C5FBAB34A7B564957CBFA9BEE11
+      4154CFF2199F43331009FE7BFF3FA2F87AB6859A49BBECEAC398354B77EDDA88
+      1B0FCF5591A222C894A97BB8E953DB40AB46D302ED0EAE08F608D5689C20FF77
+      E579E2C8FB8C056B96FEBE7D3D6EB99E67A45063A44015293EA44C9EFC076FD4
+      6A58342F7C526F8E266FCECC4E494B4706B3703534680193B0C8645085FACC5C
+      D9B8692DEEB85DAC224545900913B6294951B365919ABE5C3EDA432693233C22
+      12EA9A5AAC69AA933DE7A23032A89E69C49AB7EBD6AFC63D8F2B3C29E48C146F
+      AA48F1E144D9FC1D0BE5BEB3259794B43478FBBF44BD9AB5A1A3A9C3CFF42AAA
+      D0B673E757FE8487CFAF39A809192950458A0F2ED5EB77F2CD3525A6C42D5C0E
+      72D66611709C5C983DBFBB2822908B45A2688944F2404D207294A9693C0D7C6A
+      5BEE3B0C5591E21D62D36164375609FC77A1C45367952F66C8390D914894496B
+      CF8A1217B3433808B80C3591309613A8851BABDB24DCB8B1BCDC27F05691E27D
+      4BB3AFB4E17E80B60F28D77996A5912A5214203D760734769E5CD7AB2CE3D4B1
+      1E5A5DA2A79556D17708AA22450E614468E3FCB0EEEE1E3D2C1BB23FD39D9DFD
+      F66779EACF288BF8351B0E314F158B13E0798C3536AB3445851646869A8C0C47
+      1819DABB6584E6BAD75C6296C0C8B19091E30F468ED2976E3B7B115C77957A0B
+      AAF294FF6B523032F4CDD20C16C1A2B8773DCA59C8F50318392660176E7EE874
+      97B7FC5F928291C18C91E13C23836D9A6E66715ECDD448103B3372AC62E470F9
+      D0DF515EF27F450A46065D46863F181946E8988A4BE6234929B2A4B0CC78468E
+      27AC5AF98C552BF11FFADBCA52FE2F48C1C850839161072343BF5A75754B4386
+      B7242820219991631B23C7CF8C1C71A58FF1C3CB474D0A6993A1A689ED4FDD63
+      64A86D6D6D5CAEBFE5ED1D499AE3ACCE95164B93029EF87FE86F2F8D7CACA410
+      1AD4B393C6F6748D1B34C8AEC087ACAC748B11A5525EBC4878E77D27275799CE
+      F996AB996DEA209608FD63FD5D2BC506B539E5632585C0D0B0AD54269635E244
+      E8C6B2A411FB5269D6F70A20E02489031EF75BB66C60B1235EB1E22C6DF110CA
+      E20C62F1C48013501F862AD369CA252D44792E90E3BA5AA6DAF39898FB89A822
+      458511216C6CD40C437534645A42354E91C10F4F72F24CA1404D433F71C08317
+      6BD78E2876A40B161C23529CA77D3F3891F01E274B8B1388C4D9FD1702A144A1
+      96A290C59825A5C1D393C6292A6CCF6541F2D190C2CECEAEAB5C2E579B387155
+      9DF0F0C03AD6D66DF53332526BDFBB77DEF3E6CD53FB5F30618F51A751F60E41
+      9B377F55ECDF9935EBC047BF43508522C5175FD877B5B5FD7A76545482A1BEBE
+      792D8522B396A56528BA77EF063D3D11323232F88167994C3950989999C9BB00
+      C8194422113EFD740A1A369CCB3F9398E8834B97BEBD1C1313B31CCA290A3215
+      29DE656F1424CC6620529C62D0FDFD31BA4B24A950A458B870CB9AA143672CDC
+      B4E930A4D286FC351F9F8DAC1EFF0975EA4810171707A60D909090C013233E3E
+      1E29292950575787582C86A9A9299A376F8EFEFD27E622C5C58BD36FC5C6C62E
+      627F3E602193B737B498BDA160F686806BCCEC029D22624143D949EC792F8190
+      D90C2995D366284C2A1429E6CFDFB266F0E0190BB76ECD4D8A55AB56A3664D11
+      CBE0445E3BD091C8408188616060C0BB6626AF79B6B6B6E8D367DCBB48512683
+      5B1FB3542852CC9BB765CDA0413316EED8919B143FFFBC16868669BC96888E8E
+      E6894164484E4EE6B5848E8E0EBB6FC83B5DB5B2B262D5CD982A5294422A1429
+      E6CEDDB266C080190B77EFCE4D8AF5EBD7C3D2522BDB6650D90F515189F0F5F5
+      E583BF7F305EBD8A4144441CB4B46AC2CC4CD9DCAC2245F1A5429162F6EC2D6B
+      FAF59BB1F0AFBFFE23C5EBD70EFC515DDD089A9A3559865B3062681539CE8A4C
+      8A1998210E4318DF54F68297DC139E1CBB26F4B0F218AC1028AC64229985469A
+      C65DFD54FD9BA210515824223963180B4C61AA3082916C3996978B2D53A148F1
+      DD775BD6F4E93363E18103FF9122A7646444333BE2355253835966BF60D58590
+      D91152F6AC0E6F642627774064A498D72E1FA2FA6099248A46B490323A09498A
+      084470833008B71ADCEA2C17C8ADD325E94D32459956ED3AB533D3D5D36DA432
+      8CAB57AF0E131313DCBA750B5E5E5E4CEBBDDD4B4ED562D3A64D616E6E8EB367
+      CFE2FCB9F349990199F67D82FB38B2DF4D2DCBEFA850A4983163CB9A9E3D672C
+      3C7224B7A69830613C3A7532E06D070D0D0DDEAE78FDFA35020202909696C6AA
+      0A331E2C777731AE5D8B7FEFA4188DD1D2B85E711BA7CE9C3A998CE0860D1BF2
+      69A5AE11A9549AED609E48F0E6CD1B0405053163B84FF682653AD27B540DD2B7
+      51EB4AD5CA2282D077D2B99696161F48DAB46983870F1FE2CE993BEBD4A1BEF1
+      0DDE4496D5F75428524C9FBE654DF7EE33161E3FFE1F294243CF62F5EAE9484F
+      4FC7D4A9E779C3B24D1B115AB6E4B2C9404772E2EEE414C24A51E87B25453FF4
+      13CBBAC9CE9DBF7CBE57DE7B3E3E3EF8F7DF7FF963525212828383D1A0410358
+      5858B0D654CD5CCFB2F4E1E9D3A7D97F77EBD68D3F3E79F2042121217C1F0D35
+      BB69AF13221A698E8B172FC2D1D1F1087B6C360B6165F54D158A1453A76E59D3
+      A5CB8C85A74FE726C5C2855FF3C06CDB16C493A26B57293EFDB4463619A83592
+      9A9A8A0B17223E88A698346912B771E3465E7B9116080F0FE733DDD2D292D70E
+      24F3E7CF67ADA2EE05C641196D676757E00637442C3F3FBF5CD7F6EFDF8F9327
+      4F7E1CA4183B76AC2D538FDD19105D9B356B36C8DADA1A2D5AB46075AA0F5393
+      6D70EE5C6E52F4EB67CB97B43B770CF9FE88E1C3EB60E448CB6C3250A03E8B7F
+      FF4D66CFA4979A14E3304E22EB231BDF7E60FB712289E813BA46C6ADB3B388A9
+      F514C832521E65248786C505DD7A244D965E8DAC16B9F9FAADEBAD3C3C3CF8F7
+      A9EE2762D0DF3D7B2A1D955CB87081D76A4416777777D6728AE2494DDFD3B871
+      63BE5575E5CA156CDDBA35DB7620A1E75C5D5D59D53A03BD7AF5E2E324AD41B2
+      67CF1E1C3F7EBCF29082951E5B56570E6325A56B93264D3A513D4B814A427E0E
+      47E878F9B23B23453B5CBA949B145F7ED983DF0DE8E8D164065835F4EF5F9D81
+      AB964D06AA5AA8FEBE71E3055EBEF462469B8807BA56AD5ABC866175750C53CD
+      5718C0DBBCBDBDEFA2F0653DA24F077D1AD8A3670F0B465A3E930A1322EDE5CB
+      97F9DF1B356A14DF64F6F4F4645AAD2B7FFFEAD5AB7C665201B0B1B1C1962D5B
+      D0A14387ECCC9F3E7D3A6F74920D11181898BD7D05D918841B6944EA8B61058A
+      B74B48B66DFB5F7B571F13751DC61F84FB5DBC1DC89B2390372145A3D4C62014
+      7459935CCEDACAC8B955BA9A2D6BAD65FD53CB517FD5D6CBB2E56CAED2360D7A
+      997F50B93185A252385E8E40E082E00095E0C7C17172489CD0E7F3BD8E0E11D7
+      1F99F7C73DDB77BFBB1FDCEFE5FB7C9ECFF3799E1F7CEF43292B2BF37F50E066
+      674893F1F1F10A00BE205868151AEFCF2A2B5BC5E15887889C0B8AD2D26764F5
+      EA04397DFAB49C3D7B564D1C273D3D3D5D0038955238782E0A51461F238F628D
+      830E63B47130F2E80CE675523D947C2D54FF16CEFFD5F7922339899076496E71
+      AF1E8E1ADE341339B3C2146D4AD78C5A1401979D9DAD8047477B9D3832E290B6
+      36CFC2F156EB39090A9A92E2E27BC56EB7CF3205AB0D3A94F3C4EB3C71E28402
+      3501CE865C6456BE7C95F4BC68572664C7F9B7A5ABB5111A6AAD343434C88103
+      07144372BE90B2DCE55F94974FCBF48B7E0B8ADDBB77AF86931A394974069F4F
+      F0068870B6A25976D1699C085F30D0F8BAAAEA17A40EE6CE1A38D825A9A9A94A
+      98656666CE71BCF7359D4F70789736E2849ACDE639CE67DB9B0EE3FBF6F60EB1
+      D92EE2BA82A4A5C582895E0727FE010AFEF414D2CBEBB88C9AEBDDDFD3F27408
+      00A259C4121124410980FC6DBAA6AF352C373C57585468B2582C8ABD342D1442
+      300F80BD07E08E9BFDFCC58BBFE13A0701927C3973E68C141414A839A260A466
+      E067C97AB72E5D26553D69121B362139B13D00599BE4E6E62A70838167AB9937
+      4ADFB0377DD974285AA2DFAE933ABB5F8202B499BB61C3865A0A26828280F005
+      87EF3E3A342E2E4E450ECB37EEF33E05BDDEBA56DC7A9DCF31343424EBD7AF57
+      9A84CE67F4373559B07F04E708C3B1A3D5C2219191D150EFA1D0186352D6542A
+      395B97CA54C59D2A7A8F1C799F9A633F6EE1D442F7C61E44ABB486B0FFB04496
+      04FDBEE2F7C757E5AD2A4CCE4CBE2B440B59C9E3184C0962D7D2642A3C49CE77
+      9865DAD12FCEEE3A718E0C8101C7E1CC2CA4A207719D99EA984EE7102A921F01
+      9E703976EC880A82C1C14180E79FFF3DA1EE20B3B024DDB56B970A2C8A52DA6B
+      AFBE666F296BF9106CF69EDF828276F8F0E119526A7979B9ECDDBB7716140B81
+      C3BB8F0EE79693909494A42682EFABABABE5F8F1E3EAD8743E69D4EB7C46A6CD
+      D60B8A36C0F926E5FCCE4E2BA2AE4DD2D296CAFEFD6FC937DF7C27B5B5D51068
+      6654006F62FF5A80E31615CDDC9E3AF5851C3C58AA4001C757D3F1EC1C46A444
+      C48F858D3DB079FBE6CD89A989B9A62853B2166E025385496242AC042D4E9656
+      7D91840278390922A9D148174840F5F0E7F0F8B40C8D4DCAD8C49467EB72ABAD
+      03EF279DC31275C92AB70721B55CBA8834BB0E4CAA2B46B4D96C4A909231C884
+      4C274C519B3679341553A5B74F41F0946C2FB960EC321E02637DE0D7A0C8CFCF
+      BF0B37F019C4D92AD22359C3FB3710BEE0F0BEBE1E9BB0C3C72D73AFB7240B09
+      3128876ADA3F8E2D2D7DF99AD7929797275BB73E846BB80F298B5F46A7CD7E86
+      E76B6EFE11F9FC237765E5B75F874BF85BFB5EDAF7E49E97F63C4B7A2648ED8E
+      4B727E32426C4EA35CBE7259524D7F4A7A74A8244619A55377FD6B50CC8CEB12
+      377E4E62277B24642618C05A8BB112A9CF0456F8558A8AC61408D8BCE2BDFB1A
+      B51985267B18353535EE93DF9FD49D0EE77987EEE8C6355BB324EBF362296EFF
+      2F5BDE37AAFAE0C26F5C4A3F05630DD0BE13D4988F1C1FC64E1C358297197C81
+      723538A8E6B92D2C2C042BFC8AC8B9A2A2A7B6F66708B373323A7AEDE060E9B6
+      71E37DF8DCA3385EA83AA6D95C095638EEEEEEEED0512E76213F530D76639CC5
+      687A441E19E85FD9FFC1275F7FF294EFB1F815DA4C751C5E307379E5F1E91069
+      774688668C9C030A4BFF844CE95D123CDA25D37FBA10F53C3F7E4108CA5B308C
+      2A4D5AAD9548259A6CDB76BF4A9FB48181011508151515EEC68646E5FC117DA4
+      074CA0A7484A9B494CCD17E44267866438EE903B26DF9577276F84F3FECF3E05
+      BB32311859109DC51919190FA37A48414A30901E2920BD937EF4E85161294876
+      2028E8E4868666FC2C0C6068467A89C784E663720D481D7C74EE82904D458E5E
+      0431E690C6C66AA9AB3B892AA56300259D6D7474B417E7E5F81983CD04B684F9
+      ADC3734AD39DB233B637BEF789E0ECE03D5BB66E4935C0585612C0D43F6C4641
+      332927721F452107414C47BB5C1388FC315C031740D3FE0681675B5F5F01EA1F
+      0573DDAF34114B575453EE7A73FD4D73BE3F80E26A239B50312DC1588312F131
+      50E5DDD00CF1D40E454545A8105A54095A525202766842D426FD4DFF4625223D
+      00A802B556436374E9C8B3DD00400F8ED72F9E4615FBC62CD5B81EC4BFEE64B2
+      CA80AE88E894CE183828265882B545B268B1C3E858155310F3CAC1430763A879
+      3E1ED82709EE65B22D790F74CF97E20B02ABB505515FE1D0872E38507185BBC6
+      5DA313AE093B9CDFEB2FCE5FC8FCAACD2DE4564FDA59861CBB11A2F351B0CA4A
+      680AC3F2E5D948213D00C00FA82C0674D4FD7D2833F9389169C0221E00F035FF
+      3CEE863D097D415E884049BAA62FBAEFF1C5CB16DFB3BD647BF28E1D3B0CEFBC
+      F31E447195DED1D27E6EEAF25477BAA49B0D62F80900E88F93B8CB8332684893
+      B4C9644976FB8BF317327F03C5B5AE8F5F6CCECED09D182B30748C46F1A403A6
+      809B36C15E46E993BE7838FF56243F57A444DA0AA46018C2CFAF971BB89EF93B
+      280276132C008A80CDB300280236CF02A008D83C0B802260F32C008A80CDB3BF
+      000A42C0ADF7B459210000000049454E44AE426082}
   end
   object Label1: TLabel
@@ -110,5 +829,5 @@
     Left = 120
     Top = 136
-    Width = 153
+    Width = 145
     Height = 41
     Caption = '&Pick Image(s)'
@@ -578,7 +1297,7 @@
   end
   object ClearImagesButton: TBitBtn
-    Left = 400
+    Left = 408
     Top = 136
-    Width = 73
+    Width = 65
     Height = 41
     Caption = 'C&lear'
@@ -633,7 +1352,7 @@
   end
   object PickOtherButton: TBitBtn
-    Left = 280
+    Left = 272
     Top = 136
-    Width = 113
+    Width = 129
     Height = 41
     Caption = 'Pick &Other'
@@ -740,8 +1459,8 @@
       00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
   end
-  object Panel1: TPanel
+  object pnlIEHolder: TPanel
     Left = 480
     Top = 16
-    Width = 305
+    Width = 281
     Height = 433
     Anchors = [akLeft, akTop, akRight, akBottom]
@@ -751,10 +1470,10 @@
       Left = 1
       Top = 1
-      Width = 303
+      Width = 279
       Height = 431
       Align = alClient
       TabOrder = 0
       ControlData = {
-        4C000000511F00008C2C00000000000000000000000000000000000000000000
+        4C000000D61C00008C2C00000000000000000000000000000000000000000000
         000000004C000000000000000000000001000000E0D057007335CF11AE690800
         2B2E126208000000000000004C0000000114020000000000C000000000000046
@@ -768,5 +1487,5 @@
     Width = 125
     Height = 20
-    Caption = 'Move Files to Server'
+    Caption = '&Move Files to Server'
     Checked = True
     State = cbChecked
@@ -784,12 +1503,18 @@
   object OpenDialog: TOpenPictureDialog
     Options = [ofHideReadOnly, ofAllowMultiSelect, ofEnableSizing]
-    Left = 80
-    Top = 24
+    Left = 64
+    Top = 8
+  end
+  object PolTimer: TTimer
+    Interval = 5000
+    OnTimer = PolTimerTimer
+    Left = 24
+    Top = 48
   end
   object DKLanguageController1: TDKLanguageController
-    Left = 384
-    Top = 232
+    Left = 64
+    Top = 48
     LangData = {
-      0A0055706C6F6164466F726D010100000001000000070043617074696F6E0116
+      0A0055706C6F6164466F726D010100000001000000070043617074696F6E0117
       0000000600496D61676531000006004C6162656C310101000000020000000700
       43617074696F6E0006004C6162656C3201010000000300000007004361707469
@@ -806,11 +1531,11 @@
       6573546F55706C6F61644C697374000008004E6F74654564697400000F005069
       636B4F74686572427574746F6E01010000000D000000070043617074696F6E00
-      060050616E656C3100000A0057656242726F7773657200000C004D6F76654368
-      65636B426F7801010000000E000000070043617074696F6E000E004F70656E46
-      696C654469616C6F6701010000000F000000060046696C746572000A004F7065
-      6E4469616C6F670001050000000C005069637475726550616E656C00000C0050
-      6963747572654C6162656C00000D0050726576696577427574746F6E01010000
-      0010000000040048696E74000A005061696E7450616E656C000008005061696E
-      74426F780000}
+      0B00706E6C4945486F6C64657200000A0057656242726F7773657200000C004D
+      6F7665436865636B426F7801010000000E000000070043617074696F6E000E00
+      4F70656E46696C654469616C6F6701010000000F000000060046696C74657200
+      0A004F70656E4469616C6F670001050000000C005069637475726550616E656C
+      00000C00506963747572654C6162656C00000D0050726576696577427574746F
+      6E010100000010000000040048696E74000A005061696E7450616E656C000008
+      005061696E74426F7800000800506F6C54696D65720000}
   end
 end
Index: cprs/branches/tmg-cprs/CPRS-Chart/UploadImages.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/UploadImages.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/UploadImages.pas	(revision 729)
@@ -7,15 +7,17 @@
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, Buttons, ExtCtrls, pngimage, ExtDlgs, OleCtrls,
+  uCore,
   SHDocVw, DKLang;
 
 type
-  TUploadImageInfo = class
+
+  TImageInfo = class
     private
     public
-      TIUIEN :             int64;    //IEN in file# 8925
-      DFN :                AnsiString;    //IEN in Patient File (#2)
-      UploadDUZ :          int64;
+      TIUIEN :             int64;      //IEN in file# 8925
+      DFN :                AnsiString; //IEN in Patient File (#2)
+      UploadDUZ :          int64;      //IEN in NEW PERSON file
       ThumbFPathName :     AnsiString; // local file path name
-      ImageFPathName :     AnsiString;
+      ImageFPathName :     AnsiString; // local file path name
       ServerPath :         AnsiString;
       ServerFName :        AnsiString;
@@ -25,10 +27,36 @@
       ImageDateTime :      AnsiString;
       UploadDateTime:      AnsiString;
-      ObjectType :         Integer;  //pointer to file 2005.02
-      ProcName :           String[10];  //server limit is 10 chars.
-      //AcquisitionSite
-      pLongDesc :          TStrings;
-    published
-  end;
+      ObjectType :         int64;      //pointer to file 2005.02
+      ProcName :           String[10]; //server limit is 10 chars.
+      pLongDesc :          TStrings;  //Won't be owned by this list
+      procedure Assign(Source : TImageInfo);
+      procedure Clear;
+  end;
+
+  TAutoUploadNote = class
+    private
+    public
+      TIUIEN :       int64;      //IEN in file# 8925
+      ErrMsg :       AnsiString;
+      NoteTitle :    AnsiString; //Title of note to be associated with image
+      Patient :      TPatient;
+      ImageInfo :    TImageInfo;
+      Location :     AnsiString; //Location that image if from
+      DOS :          AnsiString; //Date of service
+      Provider :     AnsiString;
+      CurNoteImages: TStringList;
+      UploadError :  Boolean;
+      procedure SetDFN(var ChartNum,Location,FName,LName,MName,DOB,Sex : string);
+      Procedure SetInfo(var DOS,Provider,Location,Title : string);
+      function SameAs(OtherNote: TAutoUploadNote): boolean;
+      procedure MakeNewBlankNote(DFN,DOS,Provider,Location,Title : string);
+      procedure InitFrom(OtherNote: TAutoUploadNote);
+      function IsValid : boolean;
+      procedure Clear;
+      constructor Create();
+      destructor Destroy;  override;
+  end;
+
+
 
 
@@ -54,8 +82,9 @@
     NoteEdit: TEdit;
     PickOtherButton: TBitBtn;
-    Panel1: TPanel;
+    pnlIEHolder: TPanel;
     WebBrowser: TWebBrowser;
     Label6: TLabel;
     MoveCheckBox: TCheckBox;
+    PolTimer: TTimer;
     DKLanguageController1: TDKLanguageController;
     procedure UploadButtonClick(Sender: TObject);
@@ -69,18 +98,31 @@
     procedure PickOtherButtonClick(Sender: TObject);
     procedure FormRefresh(Sender: TObject);
-
+    procedure PolTimerTimer(Sender: TObject);
   private
     { Private declarations }
     Bitmap : TBitmap;
     Picture : TPicture;
-    function MakeThumbNail(Info: TUploadImageInfo): boolean;
+    FScanDir : String;
+    function MakeThumbNail(Info: TImageInfo): boolean;
 
     procedure LoadNotesEdit();
     //procedure LoadNotesList();
-    function UploadFile(Info: TUploadImageInfo): boolean;
+    function UploadFile(Info: TImageInfo; DelOrig : boolean): boolean;
     procedure UploadChosenFiles();
-
+    function ProcessOneLine(Line : string) : string;
+    function ProcessOneFile(FileName : string) : boolean;
+    procedure ScanAndHandleImgTxt;
+    procedure ScanAndHandleImages;
+    procedure DecodeImgTxt(Line : string; out ChartNum, Location,
+                           FName, LName, MName, Sex, DOB, DOS, Provider,
+                           Title : string; FilePaths : TStrings);
+    function EncodeImgTxt(ChartNum, Location, FName, LName, MName, Sex, DOB,
+                           DOS, Provider, Title : string; FilePaths : TStrings) : AnsiString;
+    procedure FinishDocument(UploadNote : TAutoUploadNote);
   public
     { Public declarations }
+    procedure SetScanDir(NewDir : string);
+  published
+    property ScanDir : String read FScanDir write SetScanDir;
   end;
 
@@ -95,9 +137,10 @@
         StrUtils, //for MidStr etc.
         ORFn,  //for PIECE etc.
-        uCore, // for User.DUZ etc
         Trpcb, //for .PType enum
         fImages, //for upload/download files etc.
         //Targa,  //for TGA graphic save
-        ORNet //for RPCBrokerV
+        ORNet, //for RPCBrokerV
+        rTIU,
+        uTMGOptions
         ;
 
@@ -105,6 +148,24 @@
 //  DefShortDesc = '(Short Image Description)';  <-- original line.  //kt 8/7/2007
 
+  type
+    TFileInfo = class
+    private
+    public
+      SrcRec : TSearchRec;
+      STimeStamp : String;
+      SBarCode : String;
+      FPath : String;
+      MetaFileName : String;
+      MetaFileExists : boolean;
+      BatchCount : integer;
+      procedure Assign(Source: TFileInfo);
+      procedure Clear;
+    end;
+
   var
     DefShortDesc : string; //kt
+    PolInterval : integer;
+    AutoUploadNote : TAutoUploadNote;
+
 
   procedure SetupVars;
@@ -115,5 +176,231 @@
   //-------------------------------------------------------------------------
   //-------------------------------------------------------------------------
-  function TUploadForm.MakeThumbNail(Info: TUploadImageInfo) : boolean;
+
+  function NumPieces(const s: string; ADelim : Char) : integer;
+  var List : TStringList;
+  begin
+    List := TStringList.Create;
+    PiecesToList(S, ADelim, List);
+    Result := List.Count;
+  end;
+
+  //-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+  procedure TFileInfo.Assign(Source: TFileInfo);
+  begin
+    SrcRec := Source.SrcRec;
+    STimeStamp := Source.STimeStamp;
+    SBarCode := Source.SBarCode;
+    FPath := Source.FPath;
+    BatchCount := Source.BatchCount;
+    MetaFileName := Source.MetaFileName;
+    MetaFileExists := Source.MetaFileExists;
+  end;
+
+  procedure TFileInfo.Clear;
+  begin
+    //SrcRec := ...   //Note sure how to clear this.  Will leave as is...
+    STimeStamp := '';
+    SBarCode := '';
+    FPath := '';
+    BatchCount := 0;
+    MetaFileName := '';
+    MetaFileExists := false;
+  end;
+
+  //-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+  procedure TImageInfo.Assign(Source : TImageInfo);
+  begin
+    TIUIEN := Source.TIUIEN;
+    DFN := Source.DFN;
+    UploadDUZ := Source.UploadDUZ;
+    ThumbFPathName := Source.ThumbFPathName;
+    ImageFPathName := Source.ImageFPathName;
+    ServerPath := Source.ServerPath;
+    ServerFName := Source.ServerFName;
+    ServerThumbFName := Source.ServerThumbFName;
+    ShortDesc := Source.ShortDesc;
+    Extension := Source.Extension;
+    ImageDateTime := Source.ImageDateTime;
+    UploadDateTime := Source.UploadDateTime;
+    ObjectType := Source.ObjectType;
+    ProcName := Source.ProcName;
+    pLongDesc := Source.pLongDesc;  //this is only a pointer to object owned elsewhere
+  end;
+
+  procedure TImageInfo.Clear;
+  begin
+    TIUIEN := 0;
+    DFN := '';
+    UploadDUZ := 0;
+    ThumbFPathName := '';
+    ImageFPathName := '';
+    ServerPath := '';
+    ServerFName := '';
+    ServerThumbFName := '';
+    ShortDesc := '';
+    Extension := '';
+    ImageDateTime := '';
+    UploadDateTime:= '';
+    ObjectType :=0;
+    ProcName := '';
+    pLongDesc := nil
+  end;
+
+  //-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+  procedure TAutoUploadNote.SetDFN(var ChartNum,Location,FName,LName,MName,DOB,Sex : string);
+  var RPCResult : AnsiString;
+      PMS : AnsiString;
+  begin
+    //Notice: ChartNum, and PMS are optional.  If PMS is 1,2,or 3, then ChartNum
+    //        is used to look up patient.  Otherwise a lookup is based on just
+    //        Name, DOB, Sex.
+    //        To NOT use ChartNum, just set the values to ''
+    //
+    //Note: If LName is in form: `12345, then LName is used for DFN, and call
+    //      to server for lookup is bypassed, and the values for FName,DOB etc
+    //      are ignored
+
+    if MidStr(LName,1,1)='`' then begin
+      Self.Patient.DFN := MidStr(LName,2,999);
+    end else begin
+      //**NOTE**: site-specific code
+      if Location ='Laughlin_Office' then PMS :='2'
+      else if Location ='Peds_Office' then PMS :='3'
+      else PMS := ''; //default
+
+      RPCBrokerV.ClearParameters := true;
+      RPCBrokerV.remoteprocedure := 'TMG GET DFN';
+      RPCBrokerV.param[0].value := ChartNum;  RPCBrokerV.param[0].ptype := literal;
+      RPCBrokerV.param[1].value := PMS;       RPCBrokerV.Param[1].ptype := literal;
+      RPCBrokerV.param[2].value := FName;     RPCBrokerV.Param[2].ptype := literal;
+      RPCBrokerV.param[3].value := LName;     RPCBrokerV.Param[3].ptype := literal;
+      RPCBrokerV.param[4].value := MName;     RPCBrokerV.Param[4].ptype := literal;
+      RPCBrokerV.param[5].value := DOB;       RPCBrokerV.Param[5].ptype := literal;
+      RPCBrokerV.param[6].value := Sex;       RPCBrokerV.Param[6].ptype := literal;
+      RPCBrokerV.Call;
+      RPCResult := RPCBrokerV.Results[0]; //returns: success: DFN;  or  error: -1^ErrMsg
+      if piece(RPCResult,'^',1) <> '-1' then begin
+        self.Patient.DFN := RPCResult;
+      end else begin
+        self.Patient.DFN := '';
+      end;
+    end;
+  end;
+
+  Procedure TAutoUploadNote.SetInfo(var DOS,Provider,Location,Title : string);
+  //Just loads values into structure.  No validation done.
+  begin
+    Self.DOS := DOS;
+    Self.Provider := Provider;
+    Self.Location := Location;
+    Self.NoteTitle := Title;
+  end;
+
+  procedure TAutoUploadNote.InitFrom(OtherNote: TAutoUploadNote);
+  //Will create a blank note for itself.
+  begin
+    Patient.Assign(OtherNote.Patient);
+    ImageInfo.Assign(OtherNote.ImageInfo);
+    Location := OtherNote.Location;
+    DOS := OtherNote.DOS;
+    Provider := OtherNote.Provider;
+    NoteTitle := OtherNote.NoteTitle;
+    CurNoteImages.Assign(OtherNote.CurNoteImages);
+    MakeNewBlankNote(Patient.DFN,DOS,Provider,Location,NoteTitle);
+  end;
+  
+  procedure TAutoUploadNote.MakeNewBlankNote(DFN,DOS,Provider,Location,Title : string);
+  var RPCResult : string;
+  begin
+    RPCResult := '';
+    Self.ErrMsg := '';    //default to no error messages
+    
+    RPCBrokerV.ClearParameters := true;
+    RPCBrokerV.remoteprocedure := 'TMG GET BLANK TIU DOCUMENT';
+    RPCBrokerV.param[0].value := DFN;       RPCBrokerV.param[0].ptype := literal;
+    RPCBrokerV.param[1].value := Provider;  RPCBrokerV.Param[1].ptype := literal;
+    RPCBrokerV.param[2].value := Location;  RPCBrokerV.Param[2].ptype := literal;
+    RPCBrokerV.param[3].value := DOS;       RPCBrokerV.Param[3].ptype := literal;
+    RPCBrokerV.param[4].value := Title;     RPCBrokerV.Param[4].ptype := literal;
+    RPCBrokerV.Call;
+    RPCResult := RPCBrokerV.Results[0];
+    try
+      TIUIEN := StrToInt64(Piece(RPCResult,'^',1));    //returns:  success: TIU IEN;  or  error: -1
+    except
+      on E: EConvertError do begin
+        Self.ErrMsg := 'WHILE CREATING BLANK NOTE FOR UPLOAD, ' + 
+                       'ERROR CONVERTING: ' + RPCBrokerV.Results[0] + ' to document record #.';
+        TIUIEN := -1;
+      end  
+    end;  
+    If TIUIEN <> -1 then begin
+      Self.Patient.DFN := DFN;
+      Self.Provider := Provider;
+      Self.Location := Location;
+      Self.DOS := DOS;
+    end else begin
+      Self.ErrMsg := 'FAILED TO CREATE A BLANK NOTE FOR UPLOAD' +
+                     '  ' + Piece(RPCResult,'^',2);
+      Self.UploadError := true;      
+    end;
+  end;
+
+  function TAutoUploadNote.IsValid : boolean;      
+  begin
+    Result := true;  //default to success.
+    if (Patient.DFN='') {or (TIUIEN < 1)} or (ErrMsg <> '') or (NoteTitle = '')
+    or (Location = '') or (DOS = '') or (Provider = '') then begin
+      Result := false
+    end;
+  end;
+
+  procedure TAutoUploadNote.Clear;
+  begin
+    TIUIEN := 0;
+    if Patient <> nil then Patient.Clear;
+    if ImageInfo <> nil then ImageInfo.Clear;
+    Location := '';
+    DOS := '';
+    Provider := '';
+    NoteTitle := '';
+    UploadError := False;
+    if CurNoteImages <> nil then CurNoteImages.Clear;
+  end;  
+
+  function TAutoUploadNote.SameAs(OtherNote: TAutoUploadNote): boolean;
+  begin
+    Result := true;
+    if (OtherNote = nil) or (OtherNote.Patient = nil)
+    or (Patient.DFN <> OtherNote.Patient.DFN)
+    or (DOS <> OtherNote.DOS)
+    or (Provider <> OtherNote.Provider)
+    or (Location <> OtherNote.Location)
+    or (NoteTitle <> OtherNote.NoteTitle) then begin
+      Result := false;
+    end;      
+  end;
+  
+  constructor TAutoUploadNote.Create;
+  begin
+    Self.TIUIEN := 0;
+    Self.Patient := TPatient.Create;
+    Self.CurNoteImages := TStringList.Create;
+    Self.ImageInfo := TImageInfo.Create;
+    Self.Clear;
+  end;
+
+  destructor TAutoUploadNote.Destroy;
+  begin
+    self.patient.free;
+    Self.CurNoteImages.Free;
+    Self.ImageInfo.Free;
+  end;
+
+  //-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+  function TUploadForm.MakeThumbNail(Info: TImageInfo) : boolean;
   //This takes Info.ImageFPathName and creates a 64x64 .bmp file with
   //this same name, and saves in cache directory.
@@ -141,5 +428,5 @@
 
 
-  function TUploadForm.UploadFile(Info: TUploadImageInfo): boolean;
+  function TUploadForm.UploadFile(Info: TImageInfo; DelOrig : boolean): boolean;
   //result: true if success, false if failure
   var
@@ -196,5 +483,5 @@
       Info.ServerPath := Piece(RPCResult,'^',2);
       Info.ServerFName := Piece(RPCResult,'^',3);
-      result := frmImages.UploadFile(Info.ImageFPathName,Info.ServerPath,Info.ServerFName);
+      result := frmImages.UploadFile(Info.ImageFPathName,Info.ServerPath,Info.ServerFName,1,1);
       if result=false then begin
 //      ErrorMsg :='Error uploading image to server';  <-- original line.  //kt 8/7/2007
@@ -227,5 +514,5 @@
       if result then begin
         if MakeThumbNail(Info) then begin;
-          result := frmImages.UploadFile(Info.ThumbFPathName,Info.ServerPath,Info.ServerThumbFName);
+          result := frmImages.UploadFile(Info.ThumbFPathName,Info.ServerPath,Info.ServerThumbFName,1,1);
           if result=false then begin
 //          ErrorMsg :='Error sending thumbnail image to server.';  <-- original line.  //kt 8/7/2007
@@ -234,4 +521,7 @@
           end;
         end;
+        if DelOrig=true then begin
+          DeleteFile(Info.ImageFPathName);
+        end;
       end;
     end;
@@ -243,9 +533,9 @@
   procedure TUploadForm.UploadChosenFiles();
   var i : integer;
-      Info: TUploadImageInfo;
-
-  begin
-    SetupVars; 
-    Info := TUploadImageInfo.Create();
+      Info: TImageInfo;
+
+  begin
+    SetupVars;
+    Info := TImageInfo.Create();
     Info.pLongDesc := nil;
 
@@ -269,5 +559,5 @@
       Info.Extension := MidStr(Info.Extension,2,17); //remove '.'
 
-      if not UploadFile(Info) then begin   //Upload function passes back filename info in Info class
+      if not UploadFile(Info,MoveCheckBox.Checked) then begin   //Upload function passes back filename info in Info class
         //Application.MessageBox('Error uploading image file!','Error');
       end;
@@ -376,4 +666,24 @@
     Bitmap.Width := 64;
     Picture := TPicture.Create;
+
+    AutoUploadNote := TAutoUploadNote.Create;
+    FScanDir := uTMGOptions.ReadString('Pol Directory','??');
+    if FScanDir='??' then begin
+      FScanDir := ExtractFileDir(Application.ExeName);
+      uTMGOptions.WriteString('Pol Directory',FScanDir);
+    end;
+    PolInterval := uTMGOptions.ReadInteger('Pol Interval (milliseconds)',0);
+    if PolInterval=0 then begin
+      PolInterval := 60000;
+      uTMGOptions.WriteInteger('Pol Interval (milliseconds)',PolInterval);
+    end;
+  end;
+
+  procedure TUploadForm.SetScanDir(NewDir : string);
+  begin
+    if DirectoryExists(NewDir) then begin
+      FScanDir := NewDir;
+      uTMGOptions.WriteString('Pol Directory',FScanDir);
+    end;
   end;
 
@@ -412,3 +722,540 @@
   end;
 
+  procedure TUploadForm.DecodeImgTxt(Line : string; out ChartNum, Location,
+                           FName, LName, MName, Sex, DOB, DOS, Provider,
+                           Title : string; FilePaths : TStrings);
+  //format of line is as follows:
+  //ChartNum^Location^FName^LName^MName^Sex^DOB^DOS^Provider^Title^FilePath(s)
+  //NOTE: To provide patient IEN instead of FName etc, use this format:
+  //      ^Location^^`1234567^^^^DOS^Provider^Title^FilePath(s)
+  //      i.e. `IEN  (note ` is not an appostrophy ('))
+  //      `IEN in place of LName, and leave blank: ChartNum,FName,FName,Sex,DOB
+                           
+  var Files: String;                           
+      FileName : String;
+      num,i : integer;
+  begin
+    if Pos('}',Line)>0 then begin
+      Line := Piece(Line,'}',2);  //If error message is present, still allow parse.
+    end;
+    ChartNum := Piece(Line,'^',1);
+    Location := Piece(Line,'^',2);
+    FName := Piece(Line,'^',3);
+    LName := Piece(Line,'^',4);
+    MName := Piece(Line,'^',5);
+    Sex := Piece(Line,'^',6);
+    DOB := Piece(Line,'^',7);
+    DOS := Piece(Line,'^',8);
+    Provider := Piece(Line,'^',9);
+    Title := Piece(Line,'^',10);
+    Files := Piece(Line,'^',11); //may be list of multiple files separated by ;
+    if Pos(';',Files)>0  then begin
+      num := NumPieces(Files,';');
+      for i := 1 to num do begin
+        FileName := piece(files,';',i);
+        if FileName <> '' then FilePaths.Add(FileName);
+      end;  
+    end else begin
+      FilePaths.Add(Files);
+    end;
+      
+  end;  
+
+  function TUploadForm.EncodeImgTxt(ChartNum, Location, FName, LName, MName, Sex, DOB, 
+                           DOS, Provider, Title : string; FilePaths : TStrings) : AnsiString;
+  //format of line is as follows:
+  //ChartNum^Location^FName^LName^MName^Sex^DOB^DOS^Provider^Title^FilePath(s)
+  //NOTE: To provide patient IEN instead of FName etc, use this format:
+  //      ^Location^^`1234567^^^^DOS^Provider^Title^FilePath(s)
+  //      i.e. `IEN  (note ` is not an appostrophy ('))
+  //      `IEN in place of LName, and leave blank: ChartNum,FName,FName,Sex,DOB
+  var i : integer;
+  begin
+    Result := ChartNum + '^' + Location + '^' + FName + '^' + LName + '^' +
+              MName + '^' + Sex + '^' + DOB + '^' + DOS + '@01:00' + '^' + Provider + '^' +
+              Title + '^';    //added time of 1:00    elh   7/8/08
+    for i:= 0 to FilePaths.Count-1 do begin
+      Result := Result + FilePaths.Strings[i];
+      if i <> FilePaths.Count-1 then Result := Result + ';';
+    end;
+  end;                           
+
+  
+  procedure TUploadForm.FinishDocument(UploadNote : TAutoUploadNote);
+  var Text : TStringList;
+      ErrMsg : String;
+      RPCResult : String;
+      i : integer;
+      oneImage: string;
+      //TIUIEN : int64;
+        
+  begin
+    if (UploadNote.TIUIEN>0) and (UploadNote.CurNoteImages.Count>0) 
+    and (UploadNote.UploadError = False) then begin
+      //Add text for note: "See scanned image" -- 
+      //   or later, some HTML code to show note in CPRS directly....
+      Text := TStringList.Create;
+      Text.Add('<!DOCTYPE HTML PUBLIC>');
+      Text.Add('<html>');
+      Text.Add('<head>');
+      Text.Add('<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">');
+      Text.Add('<title>VistA HTML Note</title>');
+      Text.Add('</head>');
+      Text.Add('<body>');
+      Text.Add('<p>');
+      Text.Add('Note created automatically from imported media.');
+      Text.Add('<p>');
+      for i := 0 to UploadNote.CurNoteImages.Count-1 do begin
+        // note: $CPRSDIR$ will be replaced at runtime with directory of CPRS
+        // This will be done as page is passed to TWebBrowser (in rHTMLTools)
+        oneImage := '$CPRSDIR$\Cache\' + UploadNote.CurNoteImages.Strings[i];  
+        //oneImage := CacheDir + '\' + CurNoteImages.Strings[i];
+        Text.Add('<img WIDTH=640 src="'+oneImage+'">');
+        Text.Add('<p>');
+      end;
+      //Text.Add('<small>');
+      //Text.Add('If images don''t display, first view them in IMAGES tab.<br>');
+      //Text.Add('Then return here, click on note and press [F5] key to refresh.');
+      //Text.Add('</small>');
+      //Text.Add('<p>');
+      Text.Add('</body>');
+      Text.Add('</html>');
+      Text.Add(' ');
+      rTIU.SetText(ErrMsg,Text,UploadNote.TIUIEN,1);  //1=commit data, do actual save.
+      Text.Free;
+      //Here I autosign  -- later make this optional?
+      RPCBrokerV.ClearParameters := true;
+      RPCBrokerV.remoteprocedure := 'TMG AUTOSIGN TIU DOCUMENT';
+      RPCBrokerV.param[0].value := IntToStr(UploadNote.TIUIEN);  
+      RPCBrokerV.param[0].ptype := literal;
+      RPCBrokerV.Call;
+      RPCResult := RPCBrokerV.Results[0];    //returns:  error: -1;  success=1
+      if RPCResult='-1' then begin
+        MessageDlg('Unable to set status for scanned document to SIGNED',mtError,[mbOK],0);
+      end;     
+      UploadNote.TIUIEN := 0;
+    end;  
+    UploadNote.Clear;
+  end;
+
+
+  function TUploadForm.ProcessOneLine(Line : string) : string;
+  //Returns: if success, '';  if failure, returns reason
+
+  //format of line is as follows:
+  //ChartNum^Location^FName^LName^MName^Sex^DOB^DOS^Provider^Title^FilePath(s)
+  //NOTE: To provide patient IEN instead of FName etc, use this format:
+  //      ^Location^^`1234567^^^^DOS^Provider^Title^FilePath(s)
+  //      i.e. `IEN  (note ` is not an appostrophy ('))
+  //      `IEN in place of LName, and leave blank: ChartNum,FName,FName,Sex,DOB
+    
+  var
+    ChartNum,FName,LName,MName,Sex,DOB  : String;
+    DOS,Provider,Title : String;
+    ThisNote : TAutoUploadNote;
+    FilePaths : TStringList;
+    i : integer;
+    Location : string;
+   
+  begin
+    Result := '';  //default to success for function
+    ThisNote := TAutoUploadNote.Create;
+    FilePaths := TStringList.Create();
+    DecodeImgTxt(Line, ChartNum, Location, FName, LName, MName, Sex, DOB, DOS, Provider, Title, FilePaths);
+      
+    ThisNote.SetDFN(ChartNum,Location,FName,LName,MName,DOB,Sex);
+    ThisNote.SetInfo(DOS,Provider,Location,Title);
+    if Pos('//Failed',Line)>0 then ThisNote.UploadError := true;
+    if ThisNote.IsValid then begin  //A note can be 'Valid' and still have an 'UploadError'
+      if ThisNote.SameAs(AutoUploadNote)= false then begin
+        ThisNote.TIUIEN := AutoUploadNote.TIUIEN;
+        FinishDocument(AutoUploadNote);  // Close and clear any existing note 
+        AutoUploadNote.InitFrom(ThisNote);
+        Result := AutoUploadNote.ErrMsg; //'' if no error
+      end;  
+      if ThisNote.UploadError then AutoUploadNote.UploadError := true;
+      if (AutoUploadNote.UploadError=false) then for i := 0 to FilePaths.Count-1 do begin
+        AutoUploadNote.ImageInfo.pLongDesc := nil;
+        //Load up info record with data for upload
+        AutoUploadNote.ImageInfo.ShortDesc := 'Scanned document';
+        AutoUploadNote.ImageInfo.UploadDUZ := User.DUZ;
+        AutoUploadNote.ImageInfo.ObjectType := 1; //type 1 is Still Image (jpg).  OK to use with .bmp??
+        AutoUploadNote.ImageInfo.ProcName := 'Scanned'; //max length is 10 characters
+        AutoUploadNote.ImageInfo.ImageDateTime := DOS;
+        AutoUploadNote.ImageInfo.TIUIEN := AutoUploadNote.TIUIEN;
+        AutoUploadNote.ImageInfo.UploadDateTime := 'NOW';
+        AutoUploadNote.ImageInfo.DFN := AutoUploadNote.Patient.DFN;
+        AutoUploadNote.ImageInfo.ImageFPathName := FilePaths.Strings[i];
+        AutoUploadNote.ImageInfo.Extension := ExtractFileExt(AutoUploadNote.ImageInfo.ImageFPathName); //includes '.'
+        AutoUploadNote.ImageInfo.Extension := MidStr(AutoUploadNote.ImageInfo.Extension,2,17); //remove '.'
+        if not UploadFile(AutoUploadNote.ImageInfo,true) then begin   //Upload function passes back filename info in Info class
+          Result := 'ERROR UPLOADING IMAGE FILE';
+        end;    
+        AutoUploadNote.CurNoteImages.Add(AutoUploadNote.ImageInfo.ServerFName);
+      end else begin
+        If Result='' then Result := '(Error found in earlier file entry in batch)';
+      end;
+    end else begin
+      Result := 'NOTE INFO INVALID (Probably: PATIENT NOT FOUND)';
+    end;
+    FilePaths.Free;
+    ThisNote.Free;
+  end;
+
+  
+  function TUploadForm.ProcessOneFile(FileName : string) : boolean;
+  //This will process image(s) indicated in textfile FileName
+  //After uploading image to server, textfile and specified images are deleted
+  //Returns Success
+  //Note: To upload multiple images into one document, one may add multiple
+  //      lines to the ImgTxt text file.  As long as the info is the same
+  //      (i.e. same provider, patient, note type, DOS etc) then they
+  //      will be appended to current note.
+  //      OR, add multiple image file names to one line.
+  //        -- the problem with multiple images on one line is that errors
+  //        can not be reported for just one image.  It will be ONE for any/all
+  //      OR, if the next file in process-order is still has the same info as
+  //        the prior file, then it will be appended.
+  var
+    Lines : TStringList;
+    i : integer;
+    ResultStr : string;
+    OneLine : string;
+  begin 
+    Result := true;  //default is Success=true
+    Lines := TStringList.Create;
+    Lines.LoadFromFile(FileName);
+    //FinishDocument(AutoUploadNote);  //will save and clear any old data.
+    for i := 0 to Lines.Count-1 do begin
+      OneLine := Lines.Strings[i];
+      ResultStr := ProcessOneLine(OneLine);  //Even process with //failed markeers (to preserve batches)
+      if Pos('//Failed',OneLine)> 0 then begin  //If we already have //Failed, don't duplicate another Error Msg
+        Result := false;  //prevent deletion of file containing //Failed//      
+      end else begin
+        if ResultStr <> '' then begin
+          Lines.Strings[i] := '//Failed: '+ResultStr+'}'+Lines.Strings[i];
+          Lines.SaveToFile(FileName);
+          Result := false;
+        end;  
+      end;
+    end;
+    //Temp, for debugging
+    //Lines.SaveToFile(ChangeFileExt(FileName,'.imgtxt-bak'));
+    //end temp    
+    Lines.free;
+  end;
+
+  
+  procedure TUploadForm.ScanAndHandleImgTxt;
+  var
+    FoundFile : string;
+    Found : TSearchRec;
+    FilesList : TStringList;
+    i         : integer;
+    result : boolean;
+  begin
+    //NOTE: Later I may make this spawn a separate thread, so that
+    //  user doesn't encounter sudden unresponsiveness of CPRS
+    //I can use BeginThread, then EndTread
+    //Issues: ProcessOneFile would probably have to be a function
+    //  not in a class/object...
+      
+    FilesList := TStringList.Create;
+
+    //scan for new *.ImgTxt file
+    //FindFirst may not have correct order, so collect all names and then sort.
+    if FindFirst(FScanDir+'*.imgtxt',faAnyFile,Found)=0 then repeat
+      FilesList.Add(FScanDir+Found.Name);
+    until FindNext(Found) <> 0;   
+    FindClose(Found);  
+    FilesList.Sort;  //puts filenames in alphanumeric order 
+
+    //Now process images in correct order.
+    for i := 0 to FilesList.Count-1 do begin
+      FoundFile := FilesList.Strings[i];
+      if ProcessOneFile(FoundFile) = true then begin  {process *.imgtxt file}
+        DeleteFile(FoundFile); 
+        FoundFile := ChangeFileExt(FoundFile,'.barcode.txt');
+        DeleteFile(FoundFile);
+      end; //Note: it is OK to continue, to get other non-error notes afterwards.
+    end;
+    FinishDocument(AutoUploadNote);  // Close and clear any existing note 
+    FilesList.Free
+  end;
+
+  
+  procedure TUploadForm.ScanAndHandleImages;
+  (*  Overview of mechanism of action of automatically uploading images.
+      =================================================================
+    -- For an image to be uploaded, it must first be positively identified.  
+       This can occur 1 of two ways:
+         -- the image contains a datamatrix barcode.
+         -- the image is part of a batch, and the first image of the batch
+            contains a barcode for the entire batch.
+    -- At our site, the scanner program automatically names the files numerically
+       so that sorting on the name will put them in proper order when working
+       with batches.
+    -- The decoding of the barcode requires a special program.  I was not 
+       able to find a way to run this on the Windows client.  I found the
+       libdmtx that does this automatically.  It currently is on unix only.
+       It was too complicated for me to compile it for windows.  I initially
+       wanted everything to run through the RPC broker.  This involved
+       uploading the image to the linux server, running the decoder on the
+       server, then passing the result back.  The code for this is still avail
+       in this CPRS code.  However, the process was too slow and I had to 
+       come up with something faster.  So the following arrangement was setup
+        -- scanned images are stored in a folder that was shared by both the
+           windows network (and thus is available to CPRS), and the linux server.
+        -- At our site, we used a copier/scanner unit that created only TIFF 
+           files.  These are not the needed format for the barcode decoder, so...
+        -- a cron job runs on the linux server that converts the .tif files
+           to .png.  Here is that script:
+             <removed due to frequent changes...>
+           ---------------------------------
+        -- Next the .png files must be checked for a barcode.  Another cron
+           task scans a directory for .png files and creates a metafile for
+           the file giving its barcode reading, or a marker that there is
+           no barcode available for that image.  The file name format is:
+           *.barcode.txt, with the * coorelating to filename of the image.
+           -- The decoding process can take some time (up to several minutes
+              per image.
+           -- A flag file named barcodeRead.working.txt is created when the
+              script is run, and deleted when done.  So if this file is present
+              then the decoding process is not complete.
+           -- if a *.barcode.txt file is present, then no attempts will be made
+              to decode the image a second time.
+           -- CPRS still contains code to upload an image to look for a barcode.
+              At this site, only png's will contain barcodes, so I have commented
+              out support for automatically uploading other file formats.
+           -- Here is the unix bash script that decodes the barcodes.  It is 
+              launched by cron:
+           ---------------------------------
+             <removed due to frequent changes...>
+           ---------------------------------
+    -- After the *.png images are available, and no flag files are present
+       to indicate that the server is working with the files, then the images
+       are processed, using the barcode metafiles.  This is triggered by a 
+       timer in CPRS.  It essentially converts imagename + barcode data -->
+       --> *.imgtxt.
+    -- For each *.png image, there will be a *.imgtxt metafile created.  This
+       will contain information needed by the server, in a special format for
+       the RPC calls.  When an *.imgtxt file is present, this is a flag that
+       the image is ready to be uploaded.
+    -- A timer in CPRS scans for *.imgtxt files.  When found, it uploads the
+       image to the server and creates a container progress note for displaying
+       it in CPRS.
+ *)
+  
+    procedure ScanOneImageType(ImageType : string);
+    //Scan directory for all instances of images of type ImageType
+    //For each one, create a metadata file (if not already present)
+
+    //Note: Batch mode only works for a batch of file ALL OF THE SAME TYPE.
+    //I.e. There can't be a batch of .jpg, then .gif, then .bmp.  This is
+    //because a scanner, if it is scanning a stack of documents for a given
+    //patient will produce all files in the same ImageType
+
+      function DeltaMins(CurrentTime,PriorTime : TDateTime) : integer;
+        //Return ABSOLUTE difference in minutes between Current <--> Prior.
+        //NOTE: if value is > 1440, then 1440 is returned
+      var DeltaDays,FracDays : double;  
+      begin
+        DeltaDays := abs(CurrentTime-PriorTime);
+        FracDays := DeltaDays - Round(DeltaDays);
+        if DeltaDays>1 then FracDays := 1;
+        Result := Round((60*24)*FracDays);
+      end;
+
+    var
+      FoundFile : string;
+      MetaFilename : string;
+      Found : TSearchRec;
+      BarCodeData : AnsiString;
+      DFN,DOS,AuthIEN,LocIEN,NoteTypeIEN : string;
+      OneLine : string;
+      FilePaths : TStringList;
+      AllFiles : TStringList;
+      OutFileLines : TStringList;
+      BatchS : string;
+      tempCount : integer;
+      BatchFInfo : TFileInfo;
+      LastFileTimeStamp,CurFileTimeStamp : TDateTime;
+      DeltaMinutes : integer;
+      pFInfo : TFileInfo;
+      i : integer;
+    Label AbortPoint;      
+
+    const
+      ALLOWED_TIME_GAP = 2;  //time in minutes
+
+    begin    
+      FilePaths := TStringList.Create;
+      OutFileLines := TStringList.Create;
+      AllFiles := TStringList.Create;
+      BatchFInfo := TFileInfo.Create;
+      
+      //NOTE: Later I may make this spawn a separate thread, so that
+      //  user doesn't encounter sudden unresponsiveness of CPRS
+      //I can use BeginThread, then EndTread
+      //Issues: ProcessOneFile would probably have to be a function
+      //  not in a class/object...
+
+      //scan for all instances *.ImageType Image file
+      //Store info for processesing after loop
+      //Do this as a separate step, so files can be processed in proper order
+      if FindFirst(FScanDir+'*.'+ImageType,faAnyFile,Found)=0 then repeat
+        FoundFile := FScanDir+Found.Name;
+        if FileExists(ChangeFileExt(FoundFile,'.imgtxt')) then continue;
+        MetaFilename := ChangeFileExt(FoundFile,'.barcode.txt');
+        pFInfo := TFileInfo.Create;  //will be owned by AllFiles
+        pFInfo.MetaFileName := MetaFilename;
+        pFInfo.FPath := FoundFile;
+        pFInfo.SrcRec := Found;
+        pFInfo.STimeStamp := FloatToStr(FileDateToDateTime(Found.Time));
+        pFInfo.MetaFileExists := FileExists(MetaFilename);
+        pFInfo.SBarCode := '';  //default to empty.
+        pFInfo.BatchCount := 0;        
+        if pFInfo.MetaFileExists = false then begin
+          //Call server via RPC to decode Barcode
+          //This is too slow and buggy.  Will remove for now...
+          //BarCodeData := frmImages.DecodeBarcode(FoundFile,ImageType);
+          //pFInfo.SBarCode := BarCodeData;
+          pFInfo.SBarCode := '';
+          //Here I could optionally create a Metafile for processing below.
+        end;
+        if pFInfo.MetaFileExists then begin  //Retest in case RPC changed status.
+          if FileExists(FScanDir+'barcodeRead.working.txt') then goto AbortPoint;
+          OutFileLines.LoadFromFile(pFInfo.MetaFileName);
+          if OutFileLines.Count>0 then begin
+            pFInfo.SBarCode := OutFileLines.Strings[0];
+            //convert 'No Barcode message into an empty string, to match existing code.            
+            if Pos('//',pFInfo.SBarCode)=1 then pFInfo.SBarCode := '';  
+            if NumPieces(pFInfo.SBarCode,'-') <> 8 then pFInfo.SBarCode := '';  
+          end else begin
+            pFInfo.MetaFileExists := false;  //set empty file to Non-existence status
+          end;
+        end;
+        AllFiles.AddObject(pFInfo.FPath,pFInfo);  //Store filename, to allow sorting on this.
+      until FindNext(Found) <> 0;   
+      AllFiles.Sort; // Sort on timestamp --> put in ascending alpha filename order
+
+      //-------- Now, process files in name order ------------
+      LastFileTimeStamp := 0;
+      BatchFInfo.BatchCount := 0;
+      for i := 0 to AllFiles.Count-1 do begin
+        pFInfo := TFileInfo(AllFiles.Objects[i]);
+        if pFInfo.MetaFileExists = false then continue;
+        CurFileTimeStamp := FileDateToDateTime(pFInfo.SrcRec.Time);
+        DeltaMinutes := DeltaMins(CurFileTimeStamp,LastFileTimeStamp);
+        // *.barcode.txt file exists at this point
+        if pFInfo.SBarCode <> '' then begin  //Found a new barcode
+          LastFileTimeStamp := CurFileTimeStamp;
+          //Note: The expected format of barcode must be same as that 
+          //      created by TfrmPtLabelPrint.PrintButtonClick:
+          //      70685-12-31-2008-73-6-1302-0
+          //      PtIEN-DateOfService-AuthorIEN-LocIEN-NoteTypeIEN-BatchFlag
+          //      THUS there should be 8 pieces in the string.        
+          DFN := piece(pFInfo.SBarCode,'-',1);
+          DOS := pieces(pFInfo.SBarCode,'-',2,4);
+          AuthIEN := piece(pFInfo.SBarCode,'-',5);
+          LocIEN := piece(pFInfo.SBarCode,'-',6);
+          NoteTypeIEN := piece(pFInfo.SBarCode,'-',7);
+          BatchS := piece(pFInfo.SBarCode,'-',8);
+          if BatchS = '*' then begin
+            pFInfo.BatchCount := 9999
+          end else begin
+            try
+              pFInfo.BatchCount := StrToInt(BatchS);
+            except
+              on E:EConvertError do begin
+                pFInfo.BatchCount := 1;
+              end;
+            end;
+          end;
+          //BatchFInfo.SBarCode := pFInfo.SBarCode;
+        end else if (BatchFInfo.BatchCount > 0) then begin
+          if (DeltaMinutes > ALLOWED_TIME_GAP) then begin
+            pFInfo.Clear;
+            BatchFInfo.Clear;
+          end else begin
+            //Apply barcode from last image onto this one (from same batch)
+            pFInfo.SBarCode := BatchFInfo.SBarCode;  
+          end;
+        end;
+        if pFInfo.SBarCode <> '' then begin
+          //Success --> write out ImgTxt file...
+          FilePaths.Add(pFInfo.FPath);
+          OneLine := EncodeImgTxt('', '`'+LocIEN,'', '`'+DFN, '', '', '', 
+                                  DOS,'`'+AuthIEN, '`'+NoteTypeIEN, FilePaths);
+          if pFInfo.BatchCount>0 then begin
+            //A BATCH marker has been found on current barcode.  This means that
+            //Batchmode should be turned on.  This will apply current barcode
+            //data to any subsequent images, providing there is not a gap in 
+            //time > ALLOWED_TIME_GAP
+            BatchFInfo.Assign(pFInfo);  //reset Batch info to current
+          end;  
+          //Decrease use count of Batch Info
+          Dec(BatchFInfo.BatchCount);
+        end else begin
+          OneLine := '';
+        end;
+        OutFileLines.Clear;
+        if OneLine <> '' then begin
+          OutFileLines.Add(OneLine);                                        
+          OutFileLines.SaveToFile(ChangeFileExt(pFInfo.FPath,'.imgtxt'));
+        end;  
+        FilePaths.Clear;
+        OutFileLines.Clear;
+        LastFileTimeStamp := CurFileTimeStamp;
+      end;
+AbortPoint:
+      FindClose(Found);  
+      BatchFInfo.Free;
+      FilePaths.Free;
+      for i := 0 to AllFiles.Count-1 do begin  //free owned objects
+        pFInfo := TFileInfo(AllFiles.Objects[i]);
+        pFInfo.Free;
+      end;
+      AllFiles.Free;
+      OutFileLines.Free;
+    end;
+
+  var flag1Filename,flag2Filename : string;
+  begin
+    flag1Filename := FScanDir+'barcodeRead.working.txt';
+    flag2Filename := FScanDir+'convertTif2Png.working.txt';
+    //if linux server is in middle of a conversion or barcode decode, then skip.
+    if (FileExists(flag1Filename)=false) and (FileExists(flag2Filename)=false) then begin
+      (* Remove {}'s to be able to have jpg's etc that contain barcodes
+        In our site, only png's will have barcodes, and thus these are the
+        only images that can be uploaded automatically.  Uploading jpg's, bmp's
+        etc to look for (nonexistent) barcodes will just waste time and bandwidth. *)
+      {
+      ScanOneImageType('jpg');
+      ScanOneImageType('jpeg');
+      ScanOneImageType('gif');
+      ScanOneImageType('bmp');
+      }
+      //ScanOneImageType('tif');   {Tiff was not showing up in IE for some reason}
+      //ScanOneImageType('tiff');  {Tiff was not showing up in IE for some reason}
+      ScanOneImageType('png');
+    end;
+  end;
+
+  procedure TUploadForm.PolTimerTimer(Sender: TObject);
+  begin
+    PolTimer.Enabled := false;
+    try
+      if Assigned(frmImages) and frmImages.AutoScanUpload.Checked then begin
+        ScanAndHandleImages;  //create metadata for images (if not done already)
+        ScanAndHandleImgTxt;  //process upload file, based on metadata
+      end;
+    finally
+      PolTimer.Enabled := true;
+      PolTimer.Interval := PolInterval;
+    end;
+  end;
+
+
+
 end.
Index: cprs/branches/tmg-cprs/CPRS-Chart/fFrame.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fFrame.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fFrame.dfm	(revision 729)
@@ -1,5 +1,5 @@
 object frmFrame: TfrmFrame
-  Left = 164
-  Top = 193
+  Left = 1140
+  Top = 281
   Width = 684
   Height = 487
@@ -756,4 +756,8 @@
         OnClick = mnuFilePrintClick
       end
+      object PrintLabels1: TMenuItem
+        Caption = 'Print Labels...'
+        OnClick = PrintLabels1Click
+      end
       object mnuFileExit: TMenuItem
         Caption = 'E&xit'
@@ -1056,5 +1060,5 @@
     Top = 66
     LangData = {
-      080066726D4672616D65010100000001000000070043617074696F6E01740000
+      080066726D4672616D65010100000001000000070043617074696F6E01750000
       001400706E6C4E6F50617469656E7453656C6563746564010100000002000000
       070043617074696F6E001200706E6C50617469656E7453656C65637465640000
@@ -1158,5 +1162,6 @@
       65727452656E6577010100000059000000070043617074696F6E000900417070
       4576656E7473000010004564697444656D6F677261706869637301010000005A
-      000000070043617074696F6E00}
+      000000070043617074696F6E000C005072696E744C6162656C73310101000000
+      5B000000070043617074696F6E00}
   end
 end
Index: cprs/branches/tmg-cprs/CPRS-Chart/fFrame.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fFrame.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fFrame.pas	(revision 729)
@@ -143,4 +143,5 @@
     DKLanguageController1: TDKLanguageController;
     EditDemographics: TMenuItem;
+    PrintLabels1: TMenuItem;
     procedure tabPageChange(Sender: TObject);
     procedure FormCreate(Sender: TObject);
@@ -231,4 +232,5 @@
       Shift: TShiftState; X, Y: Integer);
     procedure pnlFlagClick(Sender: TObject);
+    procedure mnuViewDemoClick(Sender: TObject);
     procedure mnuFilePrintSelectedItemsClick(Sender: TObject);
     procedure mnuAlertRenewClick(Sender: TObject);
@@ -255,4 +257,5 @@
     procedure tabPageDrawTab(Control: TCustomTabControl; TabIndex: Integer;
       const Rect: TRect; Active: Boolean);
+    procedure PrintLabels1Click(Sender: TObject);
   private
     //kt Begin Mod (change Consts to Vars) 7/17/2007
@@ -324,6 +327,6 @@
     procedure ClearPatient;
     procedure ChangeFont(NewFontSize: Integer);
-    procedure LoadTabColors(INIFile : TIniFile; ColorsList : TStringList);  //kt added 8/8/08
-    procedure SaveTabColors(INIFile : TIniFile; ColorsList : TStringList);
+    procedure LoadTabColors(ColorsList : TStringList);  //kt added 8/8/08
+    procedure SaveTabColors(ColorsList : TStringList);
     //procedure CreateTab(var AnInstance: TObject; AClass: TClass; ATabID: integer; ALabel: string);
     procedure CreateTab(ATabID: integer; ALabel: string);
@@ -407,6 +410,6 @@
   frmFrame: TfrmFrame;
   uTabList: TStringList;
-  uTabColorsList : TStringList;  //kt added 8/8/08
-  uTabColorsEnabled : Boolean;   //kt 8/09
+  TabColorsList : TStringList;  //kt added 8/8/08
+  TabColorsEnabled : Boolean;   //kt 8/09
   uRemoteType : string;
   FlaggedPTList: TStringList;
@@ -440,9 +443,10 @@
   fAlertForward, UBAGlobals, fBAOptionsDiagnoses, UBACore, fOrdersSign, uVitals, fOrdersRenew, uFormMonitor,
   fImages    //kt 8/19/05
+  , uTMGOptions //kt 2/10/10
   {$IFDEF CCOWBROKER}
   , CCOW_const
   {$ENDIF}
   , fPtDemoEdit
-  , fOptionsOther;
+  , fOptionsOther, fPtLabelPrint;
 
 var                                 //  RV 05/11/04
@@ -747,5 +751,4 @@
   tempS : string; //kt
   i : integer;  //kt added 6/29/07
-  CPRSChartINI: TINIFile;  //elh 6/23/08
   tempPosition : TTabPosition; //kt
 begin
@@ -831,8 +834,9 @@
   Application.OnDeActivate := AppDeActivated;
 
+  User := TUser.Create;
+
   // load language ini settings   //elh added
-  CPRSChartINI := TINIFile.Create(ExtractFilePath(ParamStr(0)) + 'CPRSChart.ini');  // Read from INI  elh  6/23/08
-  LangManager.LanguageID := CPRSChartINI.ReadInteger('Options','Language',1033);
-  tempPosition := TTabPosition(CPRSChartINI.ReadInteger('TAB_POSITION','Tab Location',0));
+  LangManager.LanguageID := uTMGOptions.ReadInteger('Language',1033);
+  tempPosition := TTabPosition(uTMGOptions.ReadInteger('Tab Location',0));
   if tempPosition > tpRight then tempPosition := tpBottom;
   fOptionsOther.SetTabPosition(tempPosition);
@@ -841,6 +845,6 @@
   {$ENDIF}
   SkinChanged := false;
-  SkinAtStartup := CPRSChartINI.ReadBool('Skin','Load At Startup',false);
-  CurrentSkinFile := CPRSChartINI.ReadString('Skin','Default Skin','TMG_Extra\Skins\ICQ_Longhorn_v.1.2.ipz');
+  SkinAtStartup := uTMGOptions.ReadBool('Load Skin At Startup',false);
+  CurrentSkinFile := uTMGOptions.ReadString('Default Skin','TMG_Extra\Skins\ICQ_Longhorn_v.1.2.ipz');
   if SkinAtStartup then ActivateCurrentSkin;
   //kt -- end mod --
@@ -851,5 +855,5 @@
   // create initial core objects
   FCreateProgress := FCP_OBJECTS;
-  User := TUser.Create;
+  //User := TUser.Create;  moved elh 2/12/10
 
   // make sure we're using the matching server version
@@ -937,5 +941,5 @@
   RemoteReports := TRemoteReportList.Create;
   uTabList := TStringList.Create;
-  uTabColorsList := TStringList.Create;  //kt added 8/8/08
+  TabColorsList := TStringList.Create;  //kt added 8/8/08
   FlaggedPTList := TStringList.Create;
   HasFlag  := False;
@@ -970,11 +974,15 @@
   //kt original line --> CreateTab(CT_COVER,    'Cover Sheet');
 
+  //kt original line --> CreateTab(CT_IMAGES,   'Images');
+  CreateTab(CT_IMAGES, DKLangConstW('fFrame_Images'));    //kt
+  SetATabVisibility(CT_IMAGES, uTMGOptions.ReadBool('EnableImages',false));
+
   for i := CT_WEBTAB1 to CT_LAST_WEBTAB do begin
     CreateTab(i, IntToStr(i-CT_WEBTAB1+1));  //kt
     SetATabVisibility(i, false); //kt hide until activated by RPC
   end;
-  //kt replace later... CreateTab(CT_IMAGES,   'Images');   //kt  8/19/05
-  LoadTabColors(CPRSChartINI,uTabColorsList);  //kt added 8/8/08
-  TabPage.OwnerDraw := uTabColorsEnabled;
+
+  LoadTabColors(TabColorsList);  //kt added 8/8/08
+  TabPage.OwnerDraw := TabColorsEnabled;
   ShowHideChartTabMenus(mnuViewChart);
   //  We defer calling LoadUserPreferences to UMInitiate, so that the font sizing
@@ -1013,5 +1021,4 @@
 //  if WindowState = wsMinimized then WindowState := wsNormal;
   SetFormMonitoring(true);
-  CPRSChartINI.Free;  //kt added 8/8/08
 end;
 
@@ -1226,7 +1233,4 @@
 procedure TfrmFrame.FormDestroy(Sender: TObject);
 { free core objects used by CPRS }
-var
-  CPRSChartINI: TINIFile;  //kt 8/8/08
-
 begin
   Application.OnActivate := FOldActivate;
@@ -1235,10 +1239,9 @@
   uTabList.Free;
   //kt --- 8/8/08 start mod ---
-  CPRSChartINI := TINIFile.Create(ExtractFilePath(ParamStr(0)) + 'CPRSChart.ini');
-  CPRSChartINI.WriteInteger('Options','Language',LangManager.LanguageID);
-  SaveTabColors(CPRSChartINI,uTabColorsList);
-  uTabColorsList.Free;
-  CPRSChartINI.WriteInteger('TAB_POSITION','Tab Location',integer(tabPage.TabPosition));
-  CPRSChartINI.WriteBool('Skin','Load At Startup',SkinAtStartup);  //kt 9/11/08
+  //kt uTMGOptions.WriteInteger('Language',LangManager.LanguageID);
+  //ktSaveTabColors(TabColorsList);
+  TabColorsList.Free;
+  //kt uTMGOptions.WriteInteger('Tab Location',integer(tabPage.TabPosition));
+  //kt uTMGOptions.WriteBool('Load Skin At Startup',SkinAtStartup);  //kt 9/11/08
   //kt --- end mod ---
 
@@ -1568,6 +1571,9 @@
     //kt -- start addition
     //below taken out 6/29/07 to achieve compile.  Fix later...
-    //if NewForm.Name = frmImages.Name then frmImages.Align := alClient
-    //  else frmImages.Align := alNone;
+    if Assigned (frmImages) and (NewForm.Name = frmImages.Name) then begin
+      frmImages.Align := alClient;
+    end else begin
+      frmImages.Align := alNone;
+    end;
     //kt -- end addition
     NewForm.BringToFront;                    // to cause tab switch to happen immediately
@@ -1591,5 +1597,4 @@
   TabID : integer; //kt added.
 begin
-
   if (not User.IsReportsOnly) then
   begin
@@ -1609,10 +1614,9 @@
       CT_REPORTS:  SwitchToPage(frmReports);
       CT_WEBTAB1..CT_LAST_WEBTAB:  SwitchToPage(frmWebTabs[TabID-CT_WEBTAB1]);  //kt added 8/6/08
-      //kt CT_IMAGES:   SwitchToPage(frmImages);     //kt 8/19/05
+      CT_IMAGES:   SwitchToPage(frmImages);     //kt 8/19/05
     end; {case}
   end
   else // Reports Only tab.
     SwitchToPage(frmReports);
-
 end;
 
@@ -3796,11 +3800,8 @@
                     frmWebTabs[ATabID-CT_WEBTAB1] := TempFrmWebTab
                   end;                                     //kt 6/6/08
-
-    { //kt replace later
-    CT_IMAGES  : begin                                     //kt 8/19/05
-                    frmImages := TfrmImages.Create(Self);  //kt 8/19/05
-                    frmImages.Parent := pnlPage;           //kt 8/19/05
-                  end;                                     //kt 8/19/05
-     }  //kt
+    CT_IMAGES  : begin                                     //kt 8/19/05, 3/8/10
+                    frmImages := TfrmImages.Create(Self);  //kt 8/19/05, 3/8/10
+                    frmImages.Parent := pnlPage;           //kt 8/19/05, 3/8/10
+                  end;                                     //kt 8/19/05, 3/8/10
   else
     Exit;
@@ -3817,20 +3818,36 @@
       tabPage.Tabs.Add(ALabel);
     end;
-  uTabColorsList.Add(IntToStr(ATabID));  //will put colors in later...  //kt
-  {if uTabColorsList.IndexOf(ALabel) < 0 then                    //kt added 8/8/08
-    uTabColorsList.Add(ALabel);  //will put colors in later...  //kt  }
-end;
-
-procedure TfrmFrame.LoadTabColors(INIFile : TIniFile; ColorsList : TStringList);
+  TabColorsList.Add(IntToStr(ATabID));  //will put colors in later...  //kt
+  {if TabColorsList.IndexOf(ALabel) < 0 then                    //kt added 8/8/08
+    TabColorsList.Add(ALabel);  //will put colors in later...  //kt  }
+end;
+
+procedure TfrmFrame.LoadTabColors(ColorsList : TStringList);
 //kt added 8/8/08  Entire function
 var i : integer;
     sValue : string;
     value : longword;
+    DefColor : integer;
+const
+  DEF_COLORS : array[0..11] of integer =
+    (255,
+     33023,
+     16711935,
+     65280,
+     65535,
+     65535,
+     8388736,
+     16776960,
+     16512,
+     65535,
+     65535,
+     65535 );
 begin
   value :=0;
-  uTabColorsEnabled := INIFile.ReadBool('TAB_COLORS','ENABLE',true);
+  TabColorsEnabled := uTMGOptions.ReadBool('TAB_COLORS ENABLE',true);
   for i := 0 to ColorsList.Count-1 do begin
-    //sValue := INIFile.ReadString('TAB_COLORS',ColorsList.Strings[i],IntToStr($00FFFF));
-    sValue := INIFile.ReadString('TAB_COLORS','Tab '+IntToStr(i),IntToStr($00FFFF));
+    if i <= 11 then DefColor := DEF_COLORS[i]
+    else DefColor := ($00FFFF);
+    sValue := uTMGOptions.ReadString('Tab '+IntToStr(i)+' Color',inttostr(DefColor));
     try
       value := StrToInt(sValue)
@@ -3842,13 +3859,12 @@
 end;
 
-procedure TfrmFrame.SaveTabColors(INIFile : TIniFile; ColorsList : TStringList);
+procedure TfrmFrame.SaveTabColors(ColorsList : TStringList);
 //kt added 8/8/08  Entire function
 var i : integer;
 begin
   for i := 0 to ColorsList.Count-1 do begin
-    //INIFile.WriteInteger('TAB_COLORS',ColorsList.Strings[i],longword(ColorsList.Objects[i]));
-    INIFile.WriteInteger('TAB_COLORS','Tab '+IntToStr(i),longword(ColorsList.Objects[i]));
-  end;
-  INIFile.WriteBool('TAB_COLORS','ENABLE',uTabColorsEnabled); //kt 8/09
+    uTMGOptions.WriteInteger('Tab '+IntToStr(i)+' Color',longword(ColorsList.Objects[i]));
+  end;
+  uTMGOptions.WriteBool('TAB_COLORS ENABLE',TabColorsEnabled); //kt 8/09
 end;
 
@@ -4016,5 +4032,6 @@
 procedure TfrmFrame.pnlPatientClick(Sender: TObject);
 begin
-  ViewInfo(mnuViewDemo);
+  //ViewInfo(mnuViewDemo);
+  mnuViewDemoClick(Self);
 end;
 
@@ -4977,18 +4994,18 @@
     color : TColor;
 begin
-  if uTabColorsEnabled then begin
+  if TabColorsEnabled then begin
     ALabel := TTabControl(Control).Tabs[TabIndex];
     {
-    colorIndex := uTabColorsList.IndexOf(ALabel);
+    colorIndex := TabColorsList.IndexOf(ALabel);
     if colorIndex < 0 then color := clYellow
-    else color := TColor(uTabColorsList.Objects[colorIndex]);
+    else color := TColor(TabColorsList.Objects[colorIndex]);
     }
-    color := TColor(uTabColorsList.Objects[TabIndex]);
+    color := TColor(TabColorsList.Objects[TabIndex]);
     DrawTab(Control,TabIndex,Rect,color,Active);
   end else begin
     //this isn't working... This is not what I want.  Fix later...
-    //For now, uTabColorsEnabled should always be TRUE.
+    //For now, TabColorsEnabled should always be TRUE.
     //Control.Canvas.FillRect(Rect);   //elh   we will try to alter the OwnerDraw property here
-    //TabPage.OwnerDraw := uTabColorsEnabled;
+    //TabPage.OwnerDraw := TabColorsEnabled;
   end;
 end;
@@ -5108,5 +5125,26 @@
   end;
 
-  initialization
+procedure TfrmFrame.PrintLabels1Click(Sender: TObject);
+begin
+  if frmPtLabelPrint <> nil then begin
+    frmPtLabelPrint.PrepDialog(Patient);
+    frmPtLabelPrint.ShowModal;
+  end;
+end;
+
+procedure TfrmFrame.mnuViewDemoClick(Sender: TObject);
+{ displays patient inquiry report (which optionally allows new patient to be selected) }
+var
+  SelectNew: Boolean;
+begin
+  StatusText(TX_PTINQ);
+  PatientInquiry(SelectNew);
+  if Assigned(FLastPage) then
+    FLastPage.FocusFirstControl;
+  StatusText('');
+  if SelectNew then mnuFileOpenClick(mnuViewDemo);
+end;
+
+initialization
 
 finalization
Index: cprs/branches/tmg-cprs/CPRS-Chart/fImages.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fImages.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fImages.dfm	(revision 729)
@@ -1,7 +1,7 @@
 inherited frmImages: TfrmImages
-  Left = 160
-  Top = 70
-  Width = 711
-  Height = 528
+  Left = 228
+  Top = 119
+  Width = 781
+  Height = 565
   HelpContext = 5000
   Caption = 'Images Page'
@@ -14,26 +14,26 @@
   TextHeight = 13
   inherited shpPageBottom: TShape
-    Top = 469
-    Width = 703
+    Top = 506
+    Width = 773
   end
-  object Splitter1: TSplitter [1]
+  object HorizSplitter: TSplitter [1]
     Left = 0
     Top = 77
-    Width = 703
+    Width = 773
     Height = 3
     Cursor = crVSplit
-    Align = alBottom
+    Align = alTop
     MinSize = 1
   end
-  object Panel1: TPanel [2]
+  object pnlTop: TPanel [2]
     Left = 0
     Top = 0
-    Width = 703
+    Width = 773
     Height = 77
-    Align = alClient
+    Align = alTop
     BevelOuter = bvNone
     TabOrder = 0
     object ButtonPanel: TPanel
-      Left = 530
+      Left = 600
       Top = 0
       Width = 173
@@ -52,4 +52,5 @@
         Anchors = [akTop, akRight]
         Caption = 'Upload Images'
+        Enabled = False
         TabOrder = 0
         OnClick = UploadImagesButtonClick
@@ -278,5 +279,5 @@
       Left = 0
       Top = 0
-      Width = 530
+      Width = 600
       Height = 77
       Align = alClient
@@ -303,5 +304,5 @@
         Left = 241
         Top = 0
-        Width = 289
+        Width = 359
         Height = 77
         Align = alClient
@@ -318,11 +319,10 @@
     end
   end
-  object Panel2: TPanel [3]
+  object pnlBottom: TPanel [3]
     Left = 0
     Top = 80
-    Width = 703
-    Height = 389
-    Align = alBottom
-    Anchors = [akLeft, akTop, akRight, akBottom]
+    Width = 773
+    Height = 426
+    Align = alClient
     BevelOuter = bvNone
     TabOrder = 1
@@ -331,5 +331,5 @@
       Top = 0
       Width = 80
-      Height = 389
+      Height = 426
       Align = alLeft
       Images = ThumbsImageList
@@ -347,10 +347,10 @@
       Left = 80
       Top = 0
-      Width = 623
-      Height = 389
+      Width = 693
+      Height = 426
       Align = alClient
       TabOrder = 1
       ControlData = {
-        4C00000064400000342800000000000000000000000000000000000000000000
+        4C000000A0470000072C00000000000000000000000000000000000000000000
         000000004C000000000000000000000001000000E0D057007335CF11AE690800
         2B2E126208000000000000004C0000000114020000000000C000000000000046
@@ -362,33 +362,36 @@
     LangData = {
       090066726D496D61676573010200000001000000070043617074696F6E020000
-      00080048656C7046696C6501220000000D0073687050616765426F74746F6D00
-      00090053706C6974746572310000060050616E656C3100000B00427574746F6E
-      50616E656C0000120055706C6F6164496D61676573427574746F6E0101000000
-      03000000070043617074696F6E000A004D656D6F7350616E656C000009005370
-      6C6974746572320000100043757272656E74496D6167654D656D6F00000F0043
-      757272656E744E6F74654D656D6F0000060050616E656C3200000A0054616243
-      6F6E74726F6C00000A0057656242726F77736572000008006D6E754E6F746573
-      000007006D6E7556696577010100000004000000070043617074696F6E000C00
-      6D6E75566965774368617274010100000005000000070043617074696F6E000D
-      006D6E754368617274436F766572010100000006000000070043617074696F6E
-      000D006D6E75436861727450726F627301010000000700000007004361707469
-      6F6E000C006D6E7543686172744D656473010100000008000000070043617074
-      696F6E000E006D6E7543686172744F7264657273010100000009000000070043
-      617074696F6E000D006D6E7543686172744E6F74657301010000000A00000007
-      0043617074696F6E000D006D6E75436861727443736C747301010000000B0000
-      00070043617074696F6E000F006D6E7543686172745375726765727901010000
-      000C000000070043617074696F6E000E006D6E754368617274444353756D6D01
-      010000000D000000070043617074696F6E000C006D6E7543686172744C616273
-      01010000000E000000070043617074696F6E000F006D6E754368617274526570
-      6F72747301010000000F000000070043617074696F6E0002005A3300000D006D
-      6E7549636F6E4C6567656E64010100000010000000070043617074696F6E0006
-      006D6E75416374010100000011000000070043617074696F6E00150055706C6F
-      6164496D616765734D6E75416374696F6E010100000012000000070043617074
-      696F6E000A006D6E754F7074696F6E7301010000001300000007004361707469
-      6F6E0002004E3300000D0074696D4C6F6164496D6167657300000F005468756D
-      6273496D6167654C697374000011004F70656E506963747572654469616C6F67
-      0001050000000C005069637475726550616E656C00000C00506963747572654C
-      6162656C00000D0050726576696577427574746F6E0101000000140000000400
-      48696E74000A005061696E7450616E656C000008005061696E74426F780000}
+      00080048656C7046696C6501250000000D0073687050616765426F74746F6D00
+      000D00486F72697A53706C697474657200000600706E6C546F7000000B004275
+      74746F6E50616E656C0000120055706C6F6164496D61676573427574746F6E01
+      0100000003000000070043617074696F6E000A004D656D6F7350616E656C0000
+      090053706C6974746572320000100043757272656E74496D6167654D656D6F00
+      000F0043757272656E744E6F74654D656D6F00000900706E6C426F74746F6D00
+      000A00546162436F6E74726F6C00000A0057656242726F77736572000008006D
+      6E754E6F746573000007006D6E75566965770101000000040000000700436170
+      74696F6E000C006D6E7556696577436861727401010000000500000007004361
+      7074696F6E000D006D6E754368617274436F7665720101000000060000000700
+      43617074696F6E000D006D6E75436861727450726F6273010100000007000000
+      070043617074696F6E000C006D6E7543686172744D6564730101000000080000
+      00070043617074696F6E000E006D6E7543686172744F72646572730101000000
+      09000000070043617074696F6E000D006D6E7543686172744E6F746573010100
+      00000A000000070043617074696F6E000D006D6E75436861727443736C747301
+      010000000B000000070043617074696F6E000F006D6E75436861727453757267
+      65727901010000000C000000070043617074696F6E000E006D6E754368617274
+      444353756D6D01010000000D000000070043617074696F6E000C006D6E754368
+      6172744C61627301010000000E000000070043617074696F6E000F006D6E7543
+      686172745265706F72747301010000000F000000070043617074696F6E000200
+      5A3300000D006D6E7549636F6E4C6567656E6401010000001000000007004361
+      7074696F6E0006006D6E75416374010100000011000000070043617074696F6E
+      00150055706C6F6164496D616765734D6E75416374696F6E0101000000120000
+      00070043617074696F6E000A006D6E754F7074696F6E73010100000013000000
+      070043617074696F6E0002004E3300000D0074696D4C6F6164496D6167657300
+      000F005468756D6273496D6167654C697374000011004F70656E506963747572
+      654469616C6F670001050000000C005069637475726550616E656C00000C0050
+      6963747572654C6162656C00000D0050726576696577427574746F6E01010000
+      0014000000040048696E74000A005061696E7450616E656C000008005061696E
+      74426F7800000E004175746F5363616E55706C6F616401010000001500000007
+      0043617074696F6E000E005069636B5363616E466F6C64657201010000001600
+      0000070043617074696F6E000A004F70656E4469616C6F670000}
   end
   object mnuNotes: TMainMenu
@@ -482,4 +485,12 @@
       object N3: TMenuItem
         Caption = '-'
+      end
+      object AutoScanUpload: TMenuItem
+        Caption = '&Enable Auto-Scan/Upload'
+        OnClick = EnableAutoScanUploadClick
+      end
+      object PickScanFolder: TMenuItem
+        Caption = '&Pick Scan Folder'
+        OnClick = PickScanFolderClick
       end
     end
@@ -6845,3 +6856,10 @@
     Top = 16
   end
+  object OpenDialog: TOpenDialog
+    DefaultExt = '*.*'
+    Filter = '*.*'
+    Options = [ofPathMustExist, ofCreatePrompt, ofEnableSizing]
+    Left = 64
+    Top = 16
+  end
 end
Index: cprs/branches/tmg-cprs/CPRS-Chart/fImages.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fImages.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fImages.pas	(revision 729)
@@ -64,6 +64,6 @@
     ThumbsImageList: TImageList;
     CurrentNoteMemo: TMemo;
-    Panel1: TPanel;
-    Splitter1: TSplitter;
+    pnlTop: TPanel;
+    HorizSplitter: TSplitter;
     Splitter2: TSplitter;
     UploadImagesButton: TBitBtn;
@@ -73,7 +73,10 @@
     MemosPanel: TPanel;
     UploadImagesMnuAction: TMenuItem;
-    Panel2: TPanel;
+    pnlBottom: TPanel;
     TabControl: TTabControl;
     WebBrowser: TWebBrowser;
+    AutoScanUpload: TMenuItem;
+    PickScanFolder: TMenuItem;
+    OpenDialog: TOpenDialog;
     procedure mnuChartTabClick(Sender: TObject);
     procedure mnuActNewClick(Sender: TObject);
@@ -89,4 +92,6 @@
       var ImageIndex: Integer);
     procedure TabControlResize(Sender: TObject);
+    procedure EnableAutoScanUploadClick(Sender: TObject);
+    procedure PickScanFolderClick(Sender: TObject);
   private
     ImageInfoList : TList;
@@ -94,4 +99,6 @@
     CurImageToLoad : integer;
     InTimerFn : Boolean;
+    DropBoxDir : string;
+    UseDropBox : boolean;
     procedure EnsureImageListLoaded();
     procedure ClearImageList();
@@ -102,4 +109,5 @@
     procedure UpdateNoteInfoMemo();
     procedure UpdateImageInfoMemo(Rec: TImageInfo);
+    function FileSize(fileName : wideString) : Int64;
   public
     CacheDir : AnsiString;
@@ -107,6 +115,8 @@
     function Decode(input: AnsiString) : AnsiString;
     function Encode(input: AnsiString) : AnsiString;
-    function DownloadFile(FPath,FName,LocalSaveFNamePath: AnsiString): boolean;
-    function UploadFile(LocalFNamePath,FPath,FName: AnsiString): boolean;
+    function DownloadFileViaDropbox(FPath,FName,LocalSaveFNamePath: AnsiString;CurrentImage,TotalImages: Integer): boolean;
+    function DownloadFile(FPath,FName,LocalSaveFNamePath: AnsiString;CurrentImage,TotalImages: Integer): boolean;
+    function UploadFileViaDropBox(LocalFNamePath,FPath,FName: AnsiString;CurrentImage,TotalImages: Integer): boolean;
+    function UploadFile(LocalFNamePath,FPath,FName: AnsiString;CurrentImage,TotalImages: Integer): boolean;
     procedure SplitLinuxFilePath(FullPathName : AnsiString;
                                  var Path : AnsiString;
@@ -114,4 +124,6 @@
     procedure GetImageList();
     procedure NewNoteSelected(EditIsActive : boolean);
+    function CreateBarcode(MsgStr: AnsiString; ImageType: AnsiString): AnsiString;
+    function DecodeBarcode(LocalFNamePath,ImageType: AnsiString): AnsiString;
   published
   end;
@@ -134,6 +146,7 @@
      mshtml,  {//kt added 5-2-05}
      UploadImages, {//kt added 9/25/05}
-     UPloadProgress, {//kt 10-1-05}
-     rHTMLTools, fNotes;  {//kt added 5-27-05 for IsHTMLDocument}
+     //ImageTransferForm, {//kt 10-1-05}
+     uTMGOptions,  //kt 3/10/10
+     rHTMLTools, fNotes, frmImageTransferProgress;  {//kt added 5-27-05 for IsHTMLDocument}
 
 
@@ -146,4 +159,8 @@
     if CurImageToLoad <> -1 then begin //-1 means RPC-> no avail images.
       if CurImageToLoad < ImageInfoList.Count then begin
+        ImageTransferForm.ProgressMsg.Caption := 'Downloading Images';
+        //if ImageTransferForm.Visible = false then begin
+        //   ImageTransferForm.Show;
+        //end;
         DownloadToCache(CurImageToLoad); //Only load 1 image per timer firing.
         SetupTab(CurImageToLoad);
@@ -153,4 +170,7 @@
       end else begin
         timLoadImages.Enabled := false;
+        //ImageTransferForm.ProgressBar.Position := 100;
+        //Sleep(1000);
+        //ImageTransferForm.Hide;
       end;
     end;
@@ -193,4 +213,12 @@
   NullImageName := ExtractFilePath(ParamStr(0)) + 'images\blank.htm';
   if not DirectoryExists(CacheDir) then ForceDirectories(CacheDir);
+
+  UseDropBox := uTMGOptions.ReadBool('Use dropbox directory for transfers',false);
+  DropBoxDir := uTMGOptions.ReadString('Dropbox directory','??');
+  if DropBoxDir='??' then begin  //just on first run.
+    uTMGOptions.WriteBool('Use dropbox directory for transfers',false);
+    uTMGOptions.WriteString('Dropbox directory','');
+  end;
+  AutoScanUpload.Checked := uTMGOptions.ReadBool('Scan Enabled',false);
 end;
 
@@ -206,5 +234,5 @@
 var
   TIUIEN : AnsiString;
-
+                                                          
 begin
   inherited;
@@ -396,65 +424,70 @@
   try
     TIUIEN := IntToStr(frmNotes.lstNotes.ItemID);
-    StatusText('Retrieving images information...');
-    CallV('MAG3 CPRS TIU NOTE', [TIUIEN]);
-    for i:=0 to (RPCBrokerV.Results.Count-1) do begin
-      s :=RPCBrokerV.Results[i];
-      if i=0 then begin
-        if piece(s,'^',1)='0' then break //i.e. abort due to error signal
-        else continue;   //ignore rest of header (record #0)
-      end;
-      Rec := TImageInfo.Create; // ImageInfoList will own this.
-      Rec.LongDesc := nil;
-      Rec.TabIndex := -1;
-      Rec.TabImageIndex := 0;
-      s2 := piece(s,'^',2); if s2='' then s2 := '0'; //IEN
-      Rec.IEN := StrToInt(s2);
-      ImageFPathName := piece(s,'^',3);       //Image FullPath and name
-      ThumbnailFPathName := piece(s,'^',4);   //Abstract FullPath and Name
-      Rec.ShortDesc := piece(s,'^',5);            //SHORT DESCRIPTION field
-      s2 := piece(s,'^',6); if s2='' then s2 := '0'; //PROCEDURE/ EXAM DATE/TIME field
-      Rec.DateTime := s2;
-      s2 := piece(s,'^',7); if s2='' then s2 := '0';  //OBJECT TYPE
-      Rec.ImageType := StrToInt(s2);
-      Rec.ProcName := piece(s,'^',8);                 //PROCEDURE field
-      Rec.DisplayDate := piece(s,'^',9);              //Procedure Date in Display format
-      s2 := piece(s,'^',10); if s2='' then s2 := '0'; //PARENT DATA FILE image pointer
-      Rec.ParentDataFileIEN := StrToInt(s2);
-      Rec.AbsType := piece(s,'^',11)[1];              //the ABSTYPE :  'M' magnetic 'W' worm  'O' offline
-      Rec.Accessibility := piece(s,'^',12)[1];        //Image accessibility   'A' accessable  or  'O' offline
-      s2 := piece(s,'^',13); if s2='' then s2 := '0'; //Dicom Series number
-      Rec.DicomSeriesNum := StrToInt(s2);
-      s2 := piece(s,'^',14); if s2='' then s2 := '0'; //Dicom Image Number
-      Rec.DicomImageNum := StrToInt(s2);
-      s2 := piece(s,'^',15); if s2='' then s2 := '0'; //Count of images in the group, or 1 if a single image
-      Rec.GroupCount := StrToInt(s2);
-
-      SplitLinuxFilePath(ImageFPathName,ServerPathName,ServerFName);
-      Rec.ServerPathName := ServerPathName;
-      Rec.ServerFName := ServerFName;
-      Rec.CacheFName := CacheDir + '\' + ServerFName;
-      SplitLinuxFilePath(ThumbnailFPathName,ServerPathName,ServerFName);
-      Rec.ServerThumbPathName := ServerPathName;
-      Rec.ServerThumbFName := ServerFName;
-      Rec.CacheThumbFName := CacheDir + '\' + ServerFName;
-      ImageInfoList.Add(Rec);  // ImageInfoList will own Rec.
-    end;
-    for i:= 0 to ImageInfoList.Count-1 do begin
-      Rec := TImageInfo(ImageInfoList.Items[i]);
-      ImageIEN := Rec.IEN;
-      CallV('TMG GET IMAGE LONG DESCRIPTION', [ImageIEN]);
-      for j:=0 to (RPCBrokerV.Results.Count-1) do begin
-        if (j>0) then begin
-          if Rec.LongDesc = nil then Rec.LongDesc := TStringList.Create;
-          Rec.LongDesc.Add(RPCBrokerV.Results.Strings[j]);
-        end else begin
-          if RPCBrokerV.Results[j]='' then break;
-        end;
-      end;
-    end;
+
   except
     //Error occurs after note is signed, and frmNotes.lstNotes.ItemID is "inaccessible"
     on E: Exception do exit;
   end;
+  //----MOVED
+  StatusText('Retrieving images information...');
+  CallV('MAG3 CPRS TIU NOTE', [TIUIEN]);
+  for i:=0 to (RPCBrokerV.Results.Count-1) do begin
+    s :=RPCBrokerV.Results[i];
+    if i=0 then begin
+      if piece(s,'^',1)='0' then break //i.e. abort due to error signal
+      else continue;   //ignore rest of header (record #0)
+    end;
+    if Pos('-1~',s)>0 then continue;  //abort if error signal.
+    Rec := TImageInfo.Create; // ImageInfoList will own this.
+    Rec.LongDesc := nil;
+    Rec.TabIndex := -1;
+    Rec.TabImageIndex := 0;
+    s2 := piece(s,'^',2); if s2='' then s2 := '0'; //IEN
+    Rec.IEN := StrToInt(s2);
+    ImageFPathName := piece(s,'^',3);       //Image FullPath and name
+    ThumbnailFPathName := piece(s,'^',4);   //Abstract FullPath and Name
+    Rec.ShortDesc := piece(s,'^',5);            //SHORT DESCRIPTION field
+    s2 := piece(s,'^',6); if s2='' then s2 := '0'; //PROCEDURE/ EXAM DATE/TIME field
+    Rec.DateTime := s2;
+    s2 := piece(s,'^',7); if s2='' then s2 := '0';  //OBJECT TYPE
+    Rec.ImageType := StrToInt(s2);
+    Rec.ProcName := piece(s,'^',8);                 //PROCEDURE field
+    Rec.DisplayDate := piece(s,'^',9);              //Procedure Date in Display format
+    s2 := piece(s,'^',10); if s2='' then s2 := '0'; //PARENT DATA FILE image pointer
+    Rec.ParentDataFileIEN := StrToInt(s2);
+    Rec.AbsType := piece(s,'^',11)[1];              //the ABSTYPE :  'M' magnetic 'W' worm  'O' offline
+    s2 := piece(s,'^',12); if s2='' then s2 :='O';
+    Rec.Accessibility := s2[1];                     //Image accessibility   'A' accessable  or  'O' offline
+    s2 := piece(s,'^',13); if s2='' then s2 := '0'; //Dicom Series number
+    Rec.DicomSeriesNum := StrToInt(s2);
+    s2 := piece(s,'^',14); if s2='' then s2 := '0'; //Dicom Image Number
+    Rec.DicomImageNum := StrToInt(s2);
+    s2 := piece(s,'^',15); if s2='' then s2 := '0'; //Count of images in the group, or 1 if a single image
+    Rec.GroupCount := StrToInt(s2);
+
+    SplitLinuxFilePath(ImageFPathName,ServerPathName,ServerFName);
+    Rec.ServerPathName := ServerPathName;
+    Rec.ServerFName := ServerFName;
+    Rec.CacheFName := CacheDir + '\' + ServerFName;
+    SplitLinuxFilePath(ThumbnailFPathName,ServerPathName,ServerFName);
+    Rec.ServerThumbPathName := ServerPathName;
+    Rec.ServerThumbFName := ServerFName;
+    Rec.CacheThumbFName := CacheDir + '\' + ServerFName;
+    ImageInfoList.Add(Rec);  // ImageInfoList will own Rec.
+  end;
+  for i:= 0 to ImageInfoList.Count-1 do begin
+    Rec := TImageInfo(ImageInfoList.Items[i]);
+    ImageIEN := Rec.IEN;
+    CallV('TMG GET IMAGE LONG DESCRIPTION', [ImageIEN]);
+    for j:=0 to (RPCBrokerV.Results.Count-1) do begin
+      if (j>0) then begin
+        if Rec.LongDesc = nil then Rec.LongDesc := TStringList.Create;
+        Rec.LongDesc.Add(RPCBrokerV.Results.Strings[j]);
+      end else begin
+        if RPCBrokerV.Results[j]='' then break;
+      end;
+    end;
+  end;
+   //----END MOVED
   StatusText('');
 end;
@@ -473,10 +506,10 @@
   ServerPathName := Rec.ServerPathName;
   if not FileExists(Rec.CacheFName) then begin
-    DownloadFile(ServerPathName,ServerFName,Rec.CacheFName);
+    DownloadFile(ServerPathName,ServerFName,Rec.CacheFName,(ImageIndex*2)-1,ImageInfoList.Count*2);
   end;
   ServerFName := Rec.ServerThumbFName;
   ServerPathName := Rec.ServerThumbPathName;
   if not FileExists(Rec.CacheThumbFName) then begin
-    DownloadFile(ServerPathName,ServerFName,Rec.CacheThumbFName);
+    DownloadFile(ServerPathName,ServerFName,Rec.CacheThumbFName,ImageIndex*2,ImageInfoList.Count*2);
   end;
   Application.ProcessMessages;
@@ -502,5 +535,33 @@
 
 
-function TfrmImages.UploadFile(LocalFNamePath,FPath,FName: AnsiString): boolean;
+function TfrmImages.UploadFileViaDropBox(LocalFNamePath,FPath,FName: AnsiString;CurrentImage,TotalImages: Integer): boolean;
+var
+  DropboxFile : AnsiString;
+begin
+  //First copy LocalFileNamePath --> DropBox\FileName
+  DropboxFile := ExcludeTrailingBackslash(DropboxDir) + '\' + FName;
+  if CopyFile(pchar(LocalFNamePath),pchar(DropboxFile),false)=false then begin
+    MessageDlg('Dropbox file transfer failed.  Code='+InttoStr(GetLastError),
+               mtError,[mbOK],0);
+    result := false;
+    exit;
+  end;
+
+  // CallV('TMG UPLOAD FILE DROPBOX', ...);
+  RPCBrokerV.ClearParameters := true;
+  RPCBrokerV.remoteprocedure := 'TMG UPLOAD FILE DROPBOX';
+  RPCBrokerV.param[0].PType := literal;
+  RPCBrokerV.param[0].Value := FPath;
+  RPCBrokerV.Param[1].PType := literal;
+  RPCBrokerV.Param[1].Value := FName;
+  RPCBrokerV.Param[2].PType := literal;
+  RPCBrokerV.Param[2].Value := '1'; //see comments in UploadFile re '1' hardcoding
+
+  RPCBrokerV.Call;  //Move file into dropbox.
+  Result := (Piece(RPCBrokerV.Results[0],'^',1)='1');  //1=success, 0=failure
+end;
+
+
+function TfrmImages.UploadFile(LocalFNamePath,FPath,FName: AnsiString;CurrentImage,TotalImages: Integer): boolean;
 const
   RefreshInterval = 500;
@@ -523,4 +584,8 @@
   result := false;  //default of failure
   if not FileExists(LocalFNamePath) then exit;
+  if UseDropBox then begin
+    Result := UploadFileViaDropBox(LocalFNamePath,FPath,FName,CurrentImage,TotalImages);
+    exit;
+  end;
   try
     InFile := TFileStream.Create(LocalFNamePath,fmOpenRead or fmShareCompat);
@@ -529,8 +594,8 @@
     // the RPC call, and I can't make a progress bar change during that...
     // (or I could, but I'm not going to change the RPC broker...)
-    UploadProgressForm.setMax(InFile.Size);
-    //UploadProgressForm.ResetStartTime;
-    UploadProgressForm.ProgressMsg.Caption := 'Prepairing to upload...';
-    UploadProgressForm.Show;
+    ImageTransferForm.setMax(InFile.Size);
+    //ImageTransferForm.ResetStartTime;
+    ImageTransferForm.ProgressMsg.Caption := 'Preparing to upload...';
+    ImageTransferForm.Show;
     totalReadCount := 0;
   except
@@ -567,5 +632,5 @@
     LocalOutFile.Write(Buffer,ReadCount); //for local copy
     totalReadCount := totalReadCount + ReadCount;
-    UploadProgressForm.updateProgress(totalReadCount);
+    ImageTransferForm.updateProgress(totalReadCount);
     OneLine := '';
     if ReadCount > 0 then begin
@@ -588,5 +653,5 @@
   SavedCursor := Screen.Cursor;
   Screen.Cursor := crHourGlass;
-  UploadProgressForm.ProgressMsg.Caption := 'Uploading file to server...';
+  ImageTransferForm.ProgressMsg.Caption := 'Uploading file to server...';
   Application.ProcessMessages;
 
@@ -595,5 +660,5 @@
   RPCResult := RPCBrokerV.Results[0];
   result := (Piece(RPCResult,'^',1)='1');
-  UploadProgressForm.Hide;
+  ImageTransferForm.Hide;
   if result=false then begin
     Application.MessageBox('Error uploading file','Error');
@@ -606,5 +671,43 @@
 
 
-function TfrmImages.DownloadFile(FPath,FName,LocalSaveFNamePath: AnsiString): boolean;
+function TfrmImages.DownloadFileViaDropbox(FPath,FName,LocalSaveFNamePath: AnsiString;CurrentImage,TotalImages: Integer): boolean;
+var
+  DropboxFile : AnsiString;
+  CurrentFileSize : Integer;
+begin
+  // CallV('TMG DOWNLOAD FILE DROPBOX', ...);
+  RPCBrokerV.ClearParameters := true;
+  RPCBrokerV.remoteprocedure := 'TMG DOWNLOAD FILE DROPBOX';
+  RPCBrokerV.param[0].PType := literal;
+  RPCBrokerV.param[0].Value := FPath;
+  RPCBrokerV.Param[1].PType := literal;
+  RPCBrokerV.Param[1].Value := FName;
+  RPCBrokerV.Param[2].PType := literal;
+  RPCBrokerV.Param[2].Value := '1'; //see comments in UploadFile re '1' hardcoding
+
+  RPCBrokerV.Call;  //Move file into dropbox.
+  Result := (Piece(RPCBrokerV.Results[0],'^',1)='1');  //1=success, 0=failure
+  CurrentFileSize := strtoint(Piece(RPCBrokerV.Results[0],'^',3));  //Piece 3 = file size
+
+  if Result=true then begin
+    DropboxFile := ExcludeTrailingBackslash(DropboxDir) + '\' + FName;
+    if ImageTransferForm.visible = False then ImageTransferForm.show;
+    while FileSize(DropboxFile) <> CurrentFileSize do sleep(1000);   //elh
+    ImageTransferForm.ProgressBar.Max := TotalImages;                //elh
+    ImageTransferForm.ProgressBar.Position := CurrentImage+2;          //elh
+    if TotalImages = (CurrentImage+2) then begin
+       Sleep(1000);
+       ImageTransferForm.hide;
+    end;
+    //Now move DropBox\FileName --> LocalFileNamePath
+    if MoveFile(pchar(DropboxFile),pchar(LocalSaveFNamePath))=false then begin
+      MessageDlg('Dropbox file transfer failed.  Code='+InttoStr(GetLastError),
+                 mtError,[mbOK],0);
+    end;
+  end;
+end;
+
+
+function TfrmImages.DownloadFile(FPath,FName,LocalSaveFNamePath: AnsiString;CurrentImage,TotalImages: Integer): boolean;
 var
   i,count                       : integer;
@@ -621,4 +724,8 @@
   if FileExists(LocalSaveFNamePath) then begin
     DeleteFile(LocalSaveFNamePath);
+  end;
+  if UseDropBox then begin
+    Result := DownloadFileViaDropBox(FPath,FName,LocalSaveFNamePath,CurrentImage,TotalImages);
+    exit;
   end;
   Result := true; //default to success;
@@ -916,4 +1023,196 @@
 end;
 
+function TfrmImages.CreateBarcode(MsgStr: AnsiString; ImageType: AnsiString): AnsiString;
+//Create a local barcode file, in .png format, from MsgStr
+//ImageType is optional, default ='png'.  It should NOT contain '.'
+//Returns file path on local client of new barcode image.
+//Note: this function is not related to uploading or downloading images
+//      to the server for attaching to progress notes.  It is included
+//      in this unit because the functionality used is nearly identical to
+//      the other code.
+  function UniqueFName : AnsiString;
+    var  FName,tempFName : AnsiString;
+         count : integer;
+  begin
+    FName := 'Barcode-Image';
+    count := 0;
+    repeat
+      tempFName := CacheDir + '\' + FName + '.' + ImageType;
+      FName := FName + '1';
+      count := count+1;
+    until (fileExists(tempFName)=false) or (count> 32);
+    result := tempFName;
+  end;
+
+var
+  i,count                       : integer;
+  j                             : word;
+  OutFile                       : TFileStream;
+  s                             : AnsiString;
+  Buffer                        : array[0..1024] of byte;
+  LocalSaveFNamePath            : AnsiString;
+
+begin
+  StatusText('Getting Barcode...');
+  LocalSaveFNamePath := UniqueFName;
+  Result := LocalSaveFNamePath;  //default to success;
+
+  // CallV('TMG BARCODE ENCODE', [MsgStr]);
+  RPCBrokerV.ClearParameters := true;
+  RPCBrokerV.remoteprocedure := 'TMG BARCODE ENCODE';
+  RPCBrokerV.param[0].Value := MsgStr;
+  RPCBrokerV.param[0].PType := literal;
+  RPCBrokerV.Param[1].Value := '.X';  //<-- is this needed or used?
+  RPCBrokerV.Param[1].PType := list;
+  RPCBrokerV.Param[1].Mult['"IMAGE TYPE"'] := ImageType;
+  RPCBrokerV.Call;
+
+  Application.ProcessMessages;
+  //Note:RPCBrokerV.Results[0]=1 if successful load, =0 if failure
+  if (RPCBrokerV.Results.Count>0) and (RPCBrokerV.Results[0]='1') then begin
+    OutFile := TFileStream.Create(LocalSaveFNamePath,fmCreate);
+    for i:=1 to (RPCBrokerV.Results.Count-1) do begin
+      s :=Decode(RPCBrokerV.Results[i]);
+      count := Length(s);
+      if count>1024 then begin
+        Result := ''; //failure of load.
+        break;
+      end;
+      for j := 1 to count do Buffer[j-1] := ord(s[j]);
+      OutFile.Write(Buffer,count);
+    end;
+    OutFile.Free;
+  end else begin
+    result := '';
+  end;
+  StatusText('');
+end;
+
+
+function TfrmImages.DecodeBarcode(LocalFNamePath,ImageType: AnsiString): AnsiString;
+//Decode data from barcode on image, or return '' if none
+//Note: if I could find a cost-effective way of decoding this on client side,
+//      then that code be done here in the function, instead of uploading image
+//      to the server for decoding.
+const
+  RefreshInterval = 500;
+  BlockSize = 512;
+
+var
+  ReadCount                     : Word;
+  ParamIndex                    : LongWord;
+  j                             : word;
+  InFile                        : TFileStream;
+  Buffer                        : array[0..1024] of byte;
+  RefreshCountdown              : integer;
+  OneLine                       : AnsiString;
+  RPCResult                     : AnsiString;
+  SavedCursor                   : TCursor;
+  totalReadCount                : integer;
+begin
+  result := '';  //default of failure
+  if not FileExists(LocalFNamePath) then exit;
+  try
+    InFile := TFileStream.Create(LocalFNamePath,fmOpenRead or fmShareCompat);
+    //Note: I may well cut this out.  Most of the delay occurs during
+    // the RPC call, and I can't make a progress bar change during that...
+    // (or I could, but I'm not going to change the RPC broker...)
+    ImageTransferForm.setMax(InFile.Size);
+    //ImageTransferForm.ResetStartTime;
+    ImageTransferForm.ProgressMsg.Caption := 'Preparing to upload...';
+    ImageTransferForm.Show;
+    totalReadCount := 0;
+  except
+    // catch failure here...  on eError...
+    exit;
+  end;
+
+  StatusText('Checking image for barcodes...');
+  Application.ProcessMessages;
+
+  RPCBrokerV.ClearParameters := true;
+  RPCBrokerV.Param.Clear;
+  RPCBrokerV.Param[0].PType := list;
+  ParamIndex := 0;
+  RefreshCountdown := RefreshInterval;
+  //Put image data into parameter 0 (ARRAY parameter of RPC on server side)
+  repeat
+    ReadCount := InFile.Read(Buffer,BlockSize);
+    OneLine := '';
+    totalReadCount := totalReadCount + ReadCount;
+    ImageTransferForm.updateProgress(totalReadCount);
+    if ReadCount > 0 then begin
+      SetLength(OneLine,ReadCount);
+      for j := 1 to ReadCount do OneLine[j] := char(Buffer[j-1]);
+      RPCBrokerV.Param[0].Mult[IntToStr(ParamIndex)] := Encode(OneLine);
+      Inc(ParamIndex);
+      Dec(RefreshCountdown);
+      if RefreshCountdown < 1 then begin
+        Application.ProcessMessages;
+        RefreshCountdown := RefreshInterval;
+      end;
+    end;
+  until (ReadCount < BlockSize);
+  RPCBrokerV.Param[1].PType := literal;
+  RPCBrokerV.Param[1].Value := ImageType;
+
+  RPCBrokerV.remoteprocedure := 'TMG BARCODE DECODE';
+
+  SavedCursor := Screen.Cursor;
+  Screen.Cursor := crHourGlass;
+  ImageTransferForm.ProgressMsg.Caption := 'Uploading file to server...';
+  Application.ProcessMessages;
+
+  CallBroker;  //this is the slow step, pass to server and get response.
+
+  Screen.Cursor := SavedCursor;
+  ImageTransferForm.Hide;
+  //Get result: 1^DecodedMessage, or 0^Error Message
+  RPCResult := RPCBrokerV.Results[0];
+  if Piece(RPCResult,'^',1)='0' then begin
+    MessageDlg(Piece(RPCResult,'^',2),mtError,[mbOK],0);
+  end else begin
+    result := Piece(RPCResult,'^',2);
+  end;
+
+  InFile.Free;
+  StatusText('');
+end;
+
+
+procedure TfrmImages.EnableAutoScanUploadClick(Sender: TObject);
+begin
+  inherited;
+  AutoScanUpload.Checked := not AutoScanUpload.Checked;
+  uTMGOptions.WriteBool('Scan Enabled',AutoScanUpload.Checked);
+end;
+
+
+procedure TfrmImages.PickScanFolderClick(Sender: TObject);
+var
+  CurScanDir : string;
+begin
+  inherited;
+  CurScanDir := UploadForm.ScanDir;
+  OpenDialog.InitialDir := CurScanDir;
+  MessageDlg('Please pick ANY file in the desired directory.',mtInformation,[mbOK],0);
+  if OpenDialog.Execute then begin
+    UploadForm.SetScanDir(ExtractFilePath(OpenDialog.FileName));
+  end;
+  AutoScanUpload.Checked := true;
+end;
+
+function TfrmImages.FileSize(fileName : wideString) : Int64;
+var
+  sr : TSearchRec;
+begin
+  if FindFirst(fileName, faAnyFile, sr ) = 0 then
+     result := Int64(sr.FindData.nFileSizeHigh) shl Int64(32) +  Int64(sr.FindData.nFileSizeLow)
+  else
+     result := -1;
+
+  FindClose(sr) ;
+end;
+
 initialization
   //put init code here
Index: cprs/branches/tmg-cprs/CPRS-Chart/fNotes.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fNotes.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fNotes.pas	(revision 729)
@@ -399,5 +399,5 @@
      //fImages, {//kt added 9-20-05}
      fOptionsNotes, //kt 8/09
-     rHTMLTools;  {//kt added 5-27-05 for IsHTMLDocument}
+     rHTMLTools, fImages;  {//kt added 5-27-05 for IsHTMLDocument}
 
 const
@@ -1745,5 +1745,5 @@
   //kt 8/09 memNote.Repaint;
   NotifyOtherApps(NAE_REPORT, 'TIU^' + lstNotes.ItemID);
-  //kt RESTORE LATER... frmImages.NewNoteSelected(Editing);  //kt 9/05
+  frmImages.NewNoteSelected(Editing);  //kt 9/05
   DisplayPCE;                          //kt 5-31-05 (move down from above)
   BroadcastImages(Note);               //kt 8/09
@@ -4548,5 +4548,5 @@
     begin
       with frmNotes do begin
-        //ScanForSubs(MemNote.Lines);
+        
         pnlHtmlViewer.Visible := true;
         //memNote.Visible := false;
Index: cprs/branches/tmg-cprs/CPRS-Chart/fOptionsNotes.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fOptionsNotes.dfm	(revision 729)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fOptionsNotes.dfm	(revision 729)
@@ -0,0 +1,208 @@
+object frmOptionsNotes: TfrmOptionsNotes
+  Left = 315
+  Top = 258
+  HelpContext = 9210
+  BorderIcons = [biSystemMenu, biHelp]
+  BorderStyle = bsSingle
+  Caption = 'Notes'
+  ClientHeight = 226
+  ClientWidth = 398
+  Color = clBtnFace
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  HelpFile = 'CPRSWT.HLP'
+  OldCreateOrder = False
+  Position = poScreenCenter
+  OnCreate = FormCreate
+  OnShow = FormShow
+  PixelsPerInch = 96
+  TextHeight = 13
+  object lblAutoSave1: TLabel
+    Left = 9
+    Top = 14
+    Width = 97
+    Height = 13
+    Caption = 'Interval for autosave'
+  end
+  object lblCosigner: TLabel
+    Left = 9
+    Top = 75
+    Width = 80
+    Height = 13
+    Caption = 'Default cosigner:'
+  end
+  object lblAutoSave2: TLabel
+    Left = 9
+    Top = 28
+    Width = 67
+    Height = 13
+    Caption = 'of notes (sec):'
+  end
+  object lblHTMLViewSize: TLabel
+    Left = 8
+    Top = 144
+    Width = 159
+    Height = 13
+    Caption = 'Formatted Text (HTML) View Size'
+  end
+  object txtAutoSave: TCaptionEdit
+    Left = 9
+    Top = 42
+    Width = 42
+    Height = 21
+    HelpContext = 9213
+    TabOrder = 0
+    Text = '5'
+    OnChange = txtAutoSaveChange
+    OnExit = txtAutoSaveExit
+    OnKeyPress = txtAutoSaveKeyPress
+  end
+  object spnAutoSave: TUpDown
+    Left = 51
+    Top = 42
+    Width = 15
+    Height = 21
+    HelpContext = 9213
+    Associate = txtAutoSave
+    Max = 10000
+    Increment = 5
+    Position = 5
+    TabOrder = 1
+    Thousands = False
+    OnClick = spnAutoSaveClick
+  end
+  object chkVerifyNote: TCheckBox
+    Left = 177
+    Top = 59
+    Width = 169
+    Height = 17
+    HelpContext = 9214
+    Caption = 'Verify note title'
+    TabOrder = 3
+  end
+  object chkAskSubject: TCheckBox
+    Left = 177
+    Top = 30
+    Width = 217
+    Height = 17
+    HelpContext = 9215
+    Caption = 'Ask subject for progress notes'
+    TabOrder = 2
+  end
+  object cboCosigner: TORComboBox
+    Left = 9
+    Top = 88
+    Width = 297
+    Height = 21
+    HelpContext = 9216
+    Style = orcsDropDown
+    AutoSelect = True
+    Caption = 'Default cosigner'
+    Color = clWindow
+    DropDownCount = 8
+    ItemHeight = 13
+    ItemTipColor = clWindow
+    ItemTipEnable = True
+    ListItemsOnly = False
+    LongList = True
+    LookupPiece = 2
+    MaxLength = 0
+    Pieces = '2,3'
+    Sorted = True
+    SynonymChars = '<>'
+    TabOrder = 4
+    OnExit = cboCosignerExit
+    OnNeedData = cboCosignerNeedData
+    CharsNeedMatch = 1
+  end
+  object pnlBottom: TPanel
+    Left = 0
+    Top = 193
+    Width = 398
+    Height = 33
+    HelpContext = 9110
+    Align = alBottom
+    BevelOuter = bvNone
+    ParentColor = True
+    TabOrder = 5
+    object bvlBottom: TBevel
+      Left = 0
+      Top = 0
+      Width = 398
+      Height = 2
+      Align = alTop
+    end
+    object btnOK: TButton
+      Left = 240
+      Top = 7
+      Width = 75
+      Height = 22
+      HelpContext = 9996
+      Caption = 'OK'
+      Default = True
+      ModalResult = 1
+      TabOrder = 0
+      OnClick = btnOKClick
+    end
+    object btnCancel: TButton
+      Left = 321
+      Top = 7
+      Width = 75
+      Height = 22
+      HelpContext = 9997
+      Cancel = True
+      Caption = 'Cancel'
+      ModalResult = 2
+      TabOrder = 1
+    end
+  end
+  object cboHTMLViewSize: TComboBox
+    Left = 8
+    Top = 162
+    Width = 153
+    Height = 21
+    ItemHeight = 13
+    TabOrder = 6
+    Text = '<View Size>'
+    OnChange = cboHTMLViewSizeChange
+    Items.Strings = (
+      'Smallest'
+      'Small'
+      'Medium'
+      'Large'
+      'Largest')
+  end
+  object cbDefaultHTMLMode: TCheckBox
+    Left = 8
+    Top = 120
+    Width = 225
+    Height = 17
+    Caption = 'Start notes in Formatted (HTML) Mode'
+    TabOrder = 7
+    OnClick = cbDefaultHTMLModeClick
+  end
+  object DKLanguageController1: TDKLanguageController
+    Left = 352
+    Top = 88
+    LangData = {
+      0F0066726D4F7074696F6E734E6F746573010200000001000000070043617074
+      696F6E02000000080048656C7046696C65010F0000000C006C626C4175746F53
+      61766531010100000003000000070043617074696F6E000B006C626C436F7369
+      676E6572010100000004000000070043617074696F6E000C006C626C4175746F
+      5361766532010100000005000000070043617074696F6E000B00747874417574
+      6F5361766500000B0073706E4175746F5361766500000D0063686B5665726966
+      794E6F7465010100000006000000070043617074696F6E000D0063686B41736B
+      5375626A656374010100000007000000070043617074696F6E000B0063626F43
+      6F7369676E6572010100000008000000070043617074696F6E000900706E6C42
+      6F74746F6D0000090062766C426F74746F6D0000050062746E4F4B0101000000
+      09000000070043617074696F6E00090062746E43616E63656C01010000000A00
+      0000070043617074696F6E000F006C626C48544D4C5669657753697A65010100
+      00000B000000070043617074696F6E000F0063626F48544D4C5669657753697A
+      6501020000000D00000005004974656D730C0000000400546578740011006362
+      44656661756C7448544D4C4D6F646501010000000E000000070043617074696F
+      6E00}
+  end
+end
Index: cprs/branches/tmg-cprs/CPRS-Chart/fOptionsNotes.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fOptionsNotes.pas	(revision 729)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fOptionsNotes.pas	(revision 729)
@@ -0,0 +1,336 @@
+//kt -- Modified with SourceScanner on 8/8/2007
+unit fOptionsNotes;
+
+interface
+
+{ //kt 8/09  The following objects were addeded to the *FORM* of this unit
+
+  object lblHTMLViewSize: TLabel
+    Left = 8
+    Top = 144
+    Width = 159
+    Height = 13
+    Caption = 'Formatted Text (HTML) View Size'
+  end
+  object cboHTMLViewSize: TComboBox
+  Left = 8
+  Top = 162
+  Width = 153
+  Height = 21
+  ItemHeight = 13
+  TabOrder = 6
+  Text = '<View Size>'
+  OnClick = cboHTMLViewSizeClick
+  Items.Strings = (
+    'Smallest'
+    'Small'
+    'Medium'
+    'Large'
+    'Largest')
+  end
+  object cbDefaultHTMLMode: TCheckBox
+    Left = 8
+    Top = 112
+    Width = 225
+    Height = 17
+    Caption = 'Start notes in Formatted (HTML) Mode'
+    TabOrder = 7
+    OnClick = cbDefaultHTMLModeClick
+}
+
+
+uses
+  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+  StdCtrls, ExtCtrls, ORCtrls, ORFn, ComCtrls, DKLang;
+
+type
+  TfrmOptionsNotes = class(TForm)
+    lblAutoSave1: TLabel;
+    lblCosigner: TLabel;
+    txtAutoSave: TCaptionEdit;
+    spnAutoSave: TUpDown;
+    chkVerifyNote: TCheckBox;
+    chkAskSubject: TCheckBox;
+    cboCosigner: TORComboBox;
+    pnlBottom: TPanel;
+    bvlBottom: TBevel;
+    btnOK: TButton;
+    btnCancel: TButton;
+    lblAutoSave2: TLabel;
+    cboHTMLViewSize: TComboBox;   //kt 8/09
+    lblHTMLViewSize: TLabel;      //kt 8/09
+    cbDefaultHTMLMode: TCheckBox; //kt 8/09
+    DKLanguageController1: TDKLanguageController; //kt
+    procedure FormShow(Sender: TObject);
+    procedure btnOKClick(Sender: TObject);
+    procedure txtAutoSaveChange(Sender: TObject);
+    procedure txtAutoSaveKeyPress(Sender: TObject; var Key: Char);
+    procedure txtAutoSaveExit(Sender: TObject);
+    procedure spnAutoSaveClick(Sender: TObject; Button: TUDBtnType);
+    procedure cboCosignerNeedData(Sender: TObject; const StartFrom: String;
+      Direction, InsertAt: Integer);
+    procedure cboCosignerExit(Sender: TObject);
+    procedure FormCreate(Sender: TObject);              //kt 8/09
+    procedure cbDefaultHTMLModeClick(Sender: TObject);  //kt 8/09
+    procedure cboHTMLViewSizeChange(Sender: TObject);   //kt 8/09
+  private
+    { Private declarations }
+  public
+    { Public declarations }
+  end;
+
+var
+  frmOptionsNotes: TfrmOptionsNotes;
+  DefaultEditHTMLMode : boolean;   //kt 8/09
+  FHTMLEditTextSize   : integer;   //kt 8/09
+
+procedure DialogOptionsNotes(topvalue, leftvalue, fontsize: integer; var actiontype: Integer);
+procedure SetDefaultEditHTMLMode(Value : boolean);  //kt 8/09
+procedure Loaded;                                   //kt 8/09
+
+implementation
+
+{$R *.DFM}
+
+uses
+  uCore,    //kt 8/09
+  Registry, //kt 8/09
+  uTMGOptions, //kt 2/10/10
+  rOptions, uOptions, rCore, rTIU, rDCSumm, uTemplates;
+
+const
+  DEFAULT_HTML_EDIT_MODE = 'Edit-in-HTML default mode';       //kt 8/09
+  DEFAULT_HTML_TEXT_SIZE = 'Edit-in-HTML default text size';  //kt 8/09
+
+procedure SetRegHTMLViewSize(Size : integer); forward;        //kt 8/09
+
+procedure DialogOptionsNotes(topvalue, leftvalue, fontsize: integer; var actiontype: Integer);
+// create the form and make it modal, return an action
+var
+  frmOptionsNotes: TfrmOptionsNotes;
+begin
+  frmOptionsNotes := TfrmOptionsNotes.Create(Application);
+  actiontype := 0;
+  try
+    with frmOptionsNotes do
+    begin
+      if (topvalue < 0) or (leftvalue < 0) then
+        Position := poScreenCenter
+      else
+      begin
+        Position := poDesigned;
+        Top := topvalue;
+        Left := leftvalue;
+      end;
+      ResizeAnchoredFormToFont(frmOptionsNotes);
+      ShowModal;
+      actiontype := btnOK.Tag;
+    end;
+  finally
+    frmOptionsNotes.Release;
+  end;
+end;
+
+procedure TfrmOptionsNotes.FormShow(Sender: TObject);
+// displays defaults
+// opening tab^use last tab^autosave seconds^verify note title
+var
+  autosave, verify: integer;
+  cosigner: Int64;
+  values, cosignername: string;
+begin
+  values := rpcGetOther;
+  autosave := strtointdef(Piece(values, '^', 3), -1);
+  verify := strtointdef(Piece(values, '^', 4), 0);
+  chkVerifyNote.Checked := verify = 1;
+  chkVerifyNote.Tag := verify;
+  spnAutoSave.Position := autosave;
+  spnAutoSave.Tag := autosave;
+
+  values := rpcGetDefaultCosigner;
+  cosigner := strtoint64def(Piece(values, '^', 1), 0);
+  cosignername := Piece(values, '^', 2);
+  cboCosigner.Items.Add('0^<none>');
+  cboCosigner.InitLongList(cosignername);
+  cboCosigner.SelectByIEN(cosigner);
+  cboCosigner.Tag := cosigner;
+  chkAskSubject.Checked := rpcGetSubject;
+  if chkAskSubject.Checked then chkAskSubject.Tag := 1;
+  cbDefaultHTMLMode.Checked := DefaultEditHTMLMode; //kt
+end;
+
+procedure TfrmOptionsNotes.btnOKClick(Sender: TObject);
+// only saves values if they have been changed
+// opening tab^use last tab^autosave seconds^verify note title
+var
+  values: string;
+begin
+  values := '';
+  values := values + '^';
+  values := values + '^';
+  if spnAutoSave.Position <> spnAutoSave.Tag then
+    values := values + inttostr(spnAutoSave.Position);
+  values := values + '^';
+  if chkVerifyNote.Checked then
+    if chkVerifyNote.Tag <> 1 then
+      values := values + '1';
+  if not chkVerifyNote.Checked then
+    if chkVerifyNote.Tag <> 0 then
+      values := values + '0';
+  rpcSetOther(values);
+  with chkAskSubject do
+  if (Checked and (Tag = 0)) or (not Checked and (Tag = 1)) then
+    rpcSetSubject(Checked);
+  with cboCosigner do
+    if Tag <> ItemIEN then
+      rpcSetDefaultCosigner(ItemIEN);
+  ResetTIUPreferences;
+  ResetDCSummPreferences;
+end;
+
+procedure TfrmOptionsNotes.txtAutoSaveChange(Sender: TObject);
+var
+  maxvalue: integer;
+begin
+  maxvalue := spnAutoSave.Max;
+  with txtAutoSave do
+  begin
+    if strtointdef(Text, maxvalue) > maxvalue then
+    begin
+      beep;
+//    InfoBox('Number must be < ' + inttostr(maxvalue), 'Warning', MB_OK or MB_ICONWARNING);  <-- original line.  //kt 8/8/2007
+      InfoBox(DKLangConstW('fOptionsNotes_Number_must_be_x')+' ' + inttostr(maxvalue), DKLangConstW('fOptionsNotes_Warning'), MB_OK or MB_ICONWARNING); //kt added 8/8/2007
+      if strtointdef(Text, 0) > maxvalue then
+        Text := inttostr(maxvalue);
+    end;
+  end;
+  spnAutoSaveClick(self, btNext);
+end;
+
+procedure TfrmOptionsNotes.txtAutoSaveKeyPress(Sender: TObject;
+  var Key: Char);
+begin
+  if Key = #13 then
+  begin
+    Perform(WM_NextDlgCtl, 0, 0);
+    exit;
+  end;
+  if not (Key in ['0'..'9', #8]) then
+  begin
+    Key := #0;
+    beep;
+  end;  
+end;
+
+procedure TfrmOptionsNotes.txtAutoSaveExit(Sender: TObject);
+begin
+  with txtAutoSave do
+  begin
+    if Text = '' then
+    begin
+      Text := '0';
+      spnAutoSaveClick(self, btNext);
+    end
+    else if (Copy(Text, 1, 1) = '0') and (length(Text) > 1) then
+    begin
+      Text := inttostr(strtointdef(Text, 0));
+      spnAutoSaveClick(self, btNext);
+    end;
+  end;
+end;
+
+procedure TfrmOptionsNotes.spnAutoSaveClick(Sender: TObject;
+  Button: TUDBtnType);
+begin
+  txtAutoSave.SetFocus;
+  txtAutoSave.Tag := strtointdef(txtAutoSave.Text, 0);
+end;
+
+procedure TfrmOptionsNotes.cboCosignerNeedData(Sender: TObject;
+  const StartFrom: String; Direction, InsertAt: Integer);
+begin
+  cboCosigner.ForDataUse(rpcGetCosigners(StartFrom, Direction));
+end;
+
+procedure TfrmOptionsNotes.cboCosignerExit(Sender: TObject);
+begin
+  with cboCosigner do
+  if (Text = '') or (ItemIndex = -1) then
+  begin
+    ItemIndex := 0;
+    Text := DisplayText[0];
+  end;
+end;
+
+
+procedure SetRegHTMLViewSize(Size : integer);
+//kt added entire function 8/09
+//NOTE: The only way to affect the view size of the HTML renderer (IE) is to
+//      change a system-wide setting in the registry.  Then CPRS has to be
+//      restarted for changes to take effect.
+var
+  FontSizeData : array[0..3] of byte;
+  ZoomReg      : TRegistry;
+begin
+  if (Size < 0) or (Size > 255) then exit;
+  ZoomReg := TRegistry.Create;
+  FontSizeData[0] := Lo(Size); FontSizeData[1] := 0; FontSizeData[2] := 0; FontSizeData[3] := 0;
+  try
+    ZoomReg.Rootkey := HKEY_CURRENT_USER;
+    if ZoomReg.OpenKey('\Software\Microsoft\Internet Explorer\International\Scripts\3', False) then begin
+      ZoomReg.WriteBinaryData('IEFontSize',FontSizeData,SizeOf(FontSizeData));
+    end;
+  finally
+    ZoomReg.Free;
+  end;
+end;
+
+procedure SetDefaultEditHTMLMode(Value : boolean);
+//kt added entire function 8/09
+begin
+  if Value <> DefaultEditHTMLMode then begin
+    uTMGOptions.WriteBool(DEFAULT_HTML_EDIT_MODE,Value);
+    DefaultEditHTMLMode := Value;
+  end;
+  uTemplates.bUsingHTMLMode := Value;    //test line  //elh 1/22/10
+end;
+
+procedure TfrmOptionsNotes.cbDefaultHTMLModeClick(Sender: TObject);
+//kt added entire function 8/09
+begin
+  SetDefaultEditHTMLMode(cbDefaultHTMLMode.Checked);
+end;
+
+procedure TfrmOptionsNotes.cboHTMLViewSizeChange(Sender: TObject);
+//kt added entire function 8/09
+begin
+  SetRegHTMLViewSize(cboHTMLViewSize.ItemIndex);
+  uTMGOptions.WriteInteger(DEFAULT_HTML_TEXT_SIZE,cboHTMLViewSize.ItemIndex);
+  MessageDlg('Formated text size change will take '+#10+#13+
+             'effect next time CPRS is restarted.',mtInformation,[mbOK],0);
+end;
+
+procedure Loaded;
+//kt added entire function 8/09
+begin
+  //Code was put in global access space because object is not instantiated until
+  //after user shows options (which could be never)
+  DefaultEditHTMLMode := uTMGOptions.ReadBool(DEFAULT_HTML_EDIT_MODE,false);
+  uTemplates.bUsingHTMLMode := DefaultEditHTMLMode;
+  FHTMLEditTextSize := uTMGOptions.ReadInteger(DEFAULT_HTML_TEXT_SIZE,2);
+  SetRegHTMLViewSize(FHTMLEditTextSize);
+end;
+
+procedure TfrmOptionsNotes.FormCreate(Sender: TObject);
+//kt added entire function 8/09
+//NOTE: form is not created until first time needed.
+begin
+  //NOTE: FHTMLEditTextSize is set in Loaded function (has to be called after sign on (so User.Name is available)
+  if (FHTMLEditTextSize > -1) and (FHTMLEditTextSize < cboHTMLViewSize.Items.Count) then begin
+    cboHTMLViewSize.ItemIndex := FHTMLEditTextSize;
+    cboHTMLViewSize.Text := cboHTMLViewSize.Items[FHTMLEditTextSize];
+    SetRegHTMLViewSize(cboHTMLViewSize.ItemIndex);
+  end;
+end;
+
+end.
Index: cprs/branches/tmg-cprs/CPRS-Chart/fPtDemo.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fPtDemo.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fPtDemo.dfm	(revision 729)
@@ -1,6 +1,6 @@
 object frmPtDemo: TfrmPtDemo
-  Left = 169
-  Top = 320
-  Width = 590
+  Left = 285
+  Top = 185
+  Width = 613
   Height = 300
   BorderIcons = [biSystemMenu]
@@ -34,5 +34,5 @@
     Left = 0
     Top = 0
-    Width = 582
+    Width = 605
     Height = 229
     Align = alClient
@@ -58,5 +58,5 @@
     Left = 0
     Top = 229
-    Width = 582
+    Width = 605
     Height = 37
     Align = alBottom
@@ -70,4 +70,5 @@
       Caption = 'Select New Patient'
       TabOrder = 0
+      WordWrap = True
       OnClick = cmdNewPtClick
     end
@@ -97,6 +98,9 @@
       Width = 145
       Height = 21
+      BiDiMode = bdRightToLeftNoAlign
       Caption = '&Edit Patient Demographics'
+      ParentBiDiMode = False
       TabOrder = 3
+      WordWrap = True
       OnClick = EditaPtButtonClick
     end
Index: cprs/branches/tmg-cprs/CPRS-Chart/fReview.dfm
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fReview.dfm	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fReview.dfm	(revision 729)
@@ -1,5 +1,5 @@
 object frmReview: TfrmReview
-  Left = 359
-  Top = 137
+  Left = -681
+  Top = 207
   AutoScroll = False
   BorderIcons = [biMaximize]
@@ -322,4 +322,15 @@
     end
   end
+  object TMGAutoPrintCKBox: TCheckBox
+    Left = 443
+    Top = 435
+    Width = 142
+    Height = 17
+    Anchors = [akRight, akBottom]
+    Caption = 'Print note(s) after signing'
+    Checked = True
+    State = cbChecked
+    TabOrder = 9
+  end
   object poBACopyPaste: TPopupMenu
     Left = 384
@@ -351,5 +362,5 @@
     Top = 248
     LangData = {
-      090066726D526576696577010100000001000000070043617074696F6E011900
+      090066726D526576696577010100000001000000070043617074696F6E011A00
       00000B006C61446961676E6F736973010100000002000000070043617074696F
       6E000C00706E6C5369676E6174757265000009006C626C4553436F6465010100
@@ -392,5 +403,6 @@
       6173746531010100000024000000070043617074696F6E000A00446961676E6F
       73697331010100000025000000070043617074696F6E00050045786974310101
-      00000026000000070043617074696F6E00}
+      00000026000000070043617074696F6E001100544D474175746F5072696E7443
+      4B426F78010100000027000000070043617074696F6E00}
   end
 end
Index: cprs/branches/tmg-cprs/CPRS-Chart/fReview.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fReview.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fReview.pas	(revision 729)
@@ -41,4 +41,5 @@
     lblSig: TStaticText;
     DKLanguageController1: TDKLanguageController;
+    TMGAutoPrintCKBox: TCheckBox;
     procedure FormCreate(Sender: TObject);
     procedure lstReviewDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
@@ -104,5 +105,5 @@
     procedure SetCheckBoxStatus(thisOrderID: string);
     function GetCheckBoxStatus(sourceOrderID : string) : string; overload;
-    function GetCheckBoxStatus(gridItemIndex : smallint) : string; overload; 
+    function GetCheckBoxStatus(gridItemIndex : smallint) : string; overload;
     function GetNonNilItemCount : integer; //CQ5172
   end;
@@ -163,5 +164,5 @@
 //TX_NO_DX      =  'A Diagnosis must be selected prior to signing any of the following order types:'  <-- original line.  //kt 8/7/2007
 //                 + CRLF + 'Outpatient Lab,Radiology, Outpatient Medications, Prosthetics.';  <-- original line.  //kt 8/7/2007
-
+  DONT_SIGN = 'Don''t Sign';  //kt
 var
   TXT_ENCNT     : string;  //kt
@@ -867,6 +868,35 @@
 
 procedure TfrmReview.txtESCodeChange(Sender: TObject);
-begin
-  if(not pnlSignature.Visible) then
+var  HasDocToSign, ShowAutoPrint : boolean; //kt
+     i : integer; //kt
+begin
+  //kt --- Begin Mod ---
+  ShowAutoPrint := false;   //kt  Only show when button caption = 'Sign'
+  HasDocToSign := false;
+  for i := 0 to lstReview.Items.Count - 1 do begin  
+    if lstReview.Items.Objects[i] = nil then continue;
+    if (TChangeItem(lstReview.Items.Objects[i]).ItemType = CH_DOC) and (lstReview.Checked[i]) then begin 
+      HasDocToSign := true;
+      break;
+    end; 
+  end;
+  //kt --- End Mod ---
+  
+  if(not pnlSignature.Visible) then begin
+    cmdOK.Caption := 'OK';
+  end else begin
+    if Length(txtESCode.Text) > 0 then begin
+      cmdOK.Caption := 'Sign';
+      if HasDocToSign then ShowAutoPrint := true; //kt
+    end else begin
+      //kt if FCouldSign then cmdOK.Caption := 'Don''t Sign' else cmdOK.Caption := 'OK';
+      if FCouldSign then begin
+        //cmdOK.Caption := DONT_SIGN
+        cmdOK.Caption := DKLangConstW('fReview_Donxxt_Sign')
+      end else begin
+        cmdOK.Caption := 'OK'; //kt added 8/7/2007
+      end;  
+{ Original Line  
+if(not pnlSignature.Visible) then
     cmdOK.Caption := 'OK'
   else
@@ -876,6 +906,8 @@
 //    if FCouldSign then cmdOK.Caption := 'Don''t Sign' else cmdOK.Caption := 'OK';  <-- original line.  //kt 8/7/2007
       if FCouldSign then cmdOK.Caption := DKLangConstW('fReview_Donxxt_Sign') else cmdOK.Caption := 'OK'; //kt added 8/7/2007
+}
     end;
   end;
+  TMGAutoPrintCKBox.Visible := ShowAutoPrint;  //kt
 end;
 
@@ -1315,4 +1347,7 @@
                   //  PrintNote(StrToInt(ChangeItem.ID), ChangeItem.Text);
                   //end;
+                  if TMGAutoPrintCKBox.Visible and TMGAutoPrintCKBox.Checked then begin
+                    PrintNote(StrToInt(ChangeItem.ID), ChangeItem.Text);
+                  end;
                   {--- End K. Toppenberg's modificaton //kt --}
                 end else frmNotes.SaveSignItem(ChangeItem.ID, '');
Index: cprs/branches/tmg-cprs/CPRS-Chart/fVitals.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/fVitals.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/fVitals.pas	(revision 729)
@@ -177,4 +177,13 @@
   GMV_FName,
   GMV_LibName: String;
+  //kt start -------------
+  aDFN, aLocation,
+  DateStart, DateStop,
+  aSignature,
+  aContextIn,aContextOut,
+  aName,anInfo,
+  aDynamicParameter {HospitolName^Vital Type Abbreviation} :String;
+  //kt end ------------------
+
 begin
  { Availble Forms:
@@ -192,5 +201,5 @@
     begin
      @VLPtVitals := GetProcAddress(VitalsDLLHandle,PChar(GMV_FName));
-     if assigned(VLPtVitals) then
+     if assigned(VLPtVitals) then begin
        VLPtVitals(RPCBrokerV,Patient.DFN,FloatToStr(Encounter.Location),
                   getVitalsStartDate(),FormatDateTime('mm/dd/yy',Now),
@@ -200,5 +209,5 @@
                   frmFrame.lblPtSSN.Caption + '    ' + frmFrame.lblPtAge.Caption,
                   Encounter.LocationName +U+ VitalType)
-     else
+     end else
 //     MessageDLG('Can''t find function "'+GMV_FName+'".',mtError,[mbok],0);  <-- original line.  //kt 8/17/2007
        MessageDLG(DKLangConstW('fVitals_Canxxt_find_function_x')+GMV_FName+'".',mtError,[mbok],0); //kt added 8/17/2007
Index: cprs/branches/tmg-cprs/CPRS-Chart/rHTMLTools.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/rHTMLTools.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/rHTMLTools.pas	(revision 729)
@@ -37,4 +37,5 @@
   procedure RestoreIEPrinting;
   function ExtractDateOfNote(Lines : TStringList) : string;
+  Procedure ScanForSubs(Lines : TStrings);
 
 implementation
@@ -46,4 +47,5 @@
        fTMGPrintingAnimation,
        ExtCtrls,
+       uTemplateFields,
        fTemplateDialog,
        StrUtils; 
@@ -160,4 +162,5 @@
 
     try
+      rHTMLTools.ScanForSubs(Lines);    //Added to correct Printing issue  elh
       frmNotes.SetDisplayToHTMLvsText([vmView,vmHTML],Lines);  //ActivateHtmlViewer(Lines);
       if frmNotes.HtmlViewer.WaitForDocComplete = false then begin
@@ -280,4 +283,6 @@
         //Ensure images are downloaded before passing page to web browser        
         frmImages.timLoadImagesTimer(nil);
+        //NOTE: This often doesn't get the job completed before passing to browser
+        //      ?? check for completion?
       end;
     end;
@@ -297,5 +302,5 @@
       or (Pos('<HTML>',Line) > 0)
       or (Pos('<BR>',Line) > 0)
-      or (Pos(fTemplateDialog.HTMLBEGINNINGTAG,Line) > 0)
+      or (Pos(HTML_BEGIN_TAG,Line) > 0)
       or (Pos('<P>',Line) > 0)
       or (Pos('&NBSP',Line) > 0)
Index: cprs/branches/tmg-cprs/CPRS-Chart/uConst.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/uConst.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/uConst.pas	(revision 729)
@@ -53,4 +53,5 @@
   CT_WEBTAB2  = 13;                             // chart tab - web browser //kt added
   CT_WEBTAB3  = 14;                             // chart tab - web browser //kt added
+  CT_IMAGES   = 15;                             // chart tab - images      //kt added
   //kt Option: add more CT_WEBTAB#'s here.  But set CT_LAST_WEBTAB= to last one...
   CT_LAST_WEBTAB = CT_WEBTAB3;                  // Last web chart tab //kt added
Index: cprs/branches/tmg-cprs/CPRS-Chart/uCore.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/uCore.pas	(revision 717)
+++ cprs/branches/tmg-cprs/CPRS-Chart/uCore.pas	(revision 729)
@@ -108,4 +108,5 @@
   public
     procedure Clear;
+    procedure Assign(Source : TPatient);  //kt added 1/8/08
     property DFN:              string      read FDFN write SetDFN;  //*DFN*
     property ICN:              string      read FICN;
@@ -687,4 +688,10 @@
 end;
 
+procedure TPatient.Assign(Source : TPatient);  //kt added 1/8/08
+begin
+  DFN := Source.DFN;
+  {Note: other properties are read only, determined by DFN}
+end;
+
 function TPatient.GetDateDied: TFMDateTime;
 begin
Index: cprs/branches/tmg-cprs/CPRS-Chart/uEvaluate.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/uEvaluate.pas	(revision 729)
+++ cprs/branches/tmg-cprs/CPRS-Chart/uEvaluate.pas	(revision 729)
@@ -0,0 +1,347 @@
+unit uEvaluate;
+//kt and Eddie added entire unit 3/28/10
+{
+ This unit was created by Josh Code
+ and uploaded to Planet Source Code.com
+ All changed are noted.
+ Reformatting for code appearance applied.
+
+ -----------------------------------------------------------------
+ The expression must follow the following rules:
+    There can''t be any spaces.
+    The only operators supported are: ^,*,/,+,-
+    There must be the same number of begin and end brackets.
+    Only the round brackets can be used.
+    All values must be valid constants.
+    A "valid constant," for this program, is defined as a string with:
+         - no characters besides "0".."9," up to one ".",
+         up to one "-" at the beginning
+         - the string must be at least one character in length
+         - Exponential sections are not supported, however, the "E" character
+         is supported by "StrToFloat."  ie. "3.14E-10" is not supported by this
+         program, but it is for Delphi's "StrToFloat" function.
+ -----------------------------------------------------------------
+
+ The purpose of the program is to show how to evaluate a string
+ The program evaluates an expression contained in a string to a single real number
+ using order of operation.
+ The program supports powers, multiplication, division, adding, and subtraction.
+
+ You are free to copy and paste this code for educational use.
+ If you want it for commercial use, contact me.
+ If you find some bugs, contact me.
+ If you make any good improvements, contact me.  I'd like to know if the code can be reduced.
+ My email address is greijos@hotmail.com.
+
+ A string is evaluated by finding the first simple expression to evaluate using order of operation
+ (B.E.D.M.A.S.)
+ Each operation is evaluated by looking at the operator character and getting
+ the values on the left and right side of it.  These values are found by scanning
+ the characters to the left and right of the operator.  After an operation is evaluated,
+ the new value is substituted into the string and the next operation will then be evaluated.
+ After evaluating all of the operations in the string, a single real number should remain.
+
+}
+
+{$O-}
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
+  StdCtrls,Math, StrUtils;
+
+
+function StringEval(str1: string;var problem: boolean): real;
+
+implementation
+
+function LastIndexOf(ch: char;str1: string): integer;
+var c: integer;
+begin
+  result:=-1; // if the loop doesn't get a match then this is the result
+  for c:=Length(str1) downto 1 do begin
+    if str1[c]=ch then begin // if the character matches the character in the string
+      result:=c;
+      break; // don't continue the loop
+    end;
+  end;
+end;
+
+function GetClosingBracket(start1: integer; str1: string;var done: boolean): integer;
+var
+  x: integer;
+  ch: char;
+  BCount: integer;
+begin
+  done:=true;
+  result:=0;
+  BCount:=1;
+  for x:=start1+1 to length(str1) do begin
+    ch:=str1[x];
+    if (ch=')') or (ch='(') then begin
+      case ch of
+        '(': inc(BCount);
+        ')': dec(BCount);
+      end;
+      if BCount=0 then begin
+        done:=false;
+        result:=x;
+        break;
+      end;
+    end;
+  end;
+end;
+
+function GetHigherBracket(const str1: string;var done,problem: boolean;var start1,end1: integer): string;
+var
+   pos1,pos2: integer;
+begin // problem getting the higherbracket information when str1='(-1)*(-2)'
+  result:=''; // initial value
+  pos1:=pos('(',str1);
+  start1:=pos1-1;
+  pos2:=GetClosingBracket(pos1,str1,done);
+  inc(pos2);
+  end1:=pos2;
+  if done then
+    result:=str1
+  else if (pos1>0) xor (pos2>0) then begin
+    ShowMessage('problem with getting brackets out of this string: "'+str1+'"');
+    problem:=true;
+  end
+  // there has to be a match between the number of end and beginning brackets
+  else if Pos1>0 then
+    result:=copy(str1,pos1+1,pos2-pos1-2)
+  else begin // if there was no brackets in the string
+    done:=true;
+    result:=str1;
+  end;
+end;
+
+//kt original --> function GetLeftNum(index1: integer;str1: string;var start1: integer; problem: boolean): real;
+function GetLeftNum(index1: integer;str1: string;var start1: integer; var problem: boolean): real;
+var
+   c: integer;
+   ch1: char;
+   decimaled: boolean; // true after a decimal was added to NumStr
+   NumStr: string;
+// a string to contain the number in string form until it is comletely copied
+begin // get the number left of a certain character by looping down the string
+  result:=0;
+  if index1=1 then begin
+    result:=0;
+    exit;
+  end;
+  NumStr:=''; // initialize string
+  Decimaled:=false;
+  for c:=index1-1 downto 1 do begin // loop down the string
+    ch1:=str1[c];
+    if (ch1>='0')and(ch1<='9') then
+       NumStr:=ch1+NumStr
+    else if ch1='.' then begin
+      if Decimaled then begin
+        Problem:=true;
+        Break;
+      end else begin
+        NumStr:=ch1+NumStr;
+      end;
+      Decimaled:=true;
+    end else if ch1='-' then begin
+      if c>1 then begin // avoid error when referring to a character that doesn't exist
+        if (str1[c-1]<'0')or(str1[c-1]>'9') then begin
+          // make sure the '-' is not supposed to be a subtraction operator
+          NumStr:=NumStr+ch1;
+        end;
+      end else begin// first character of the string is added
+        NumStr:=ch1+NumStr;
+      end;
+      Break;
+    end else Break;
+  end;
+  start1:=c;
+  {  //kt
+  if NumStr='' then
+    problem:=true
+  else
+    result:=strtofloat(NumStr);
+  }
+  if NumStr='' then problem:=true;
+  if not problem then begin
+    result:=strtofloat(NumStr);
+  end;
+end;
+
+//kt original --> function GetRightNum(index1: integer;str1: string;var end1: integer;problem: boolean): real;
+function GetRightNum(index1: integer;str1: string;var end1: integer; var problem: boolean): real;
+var
+   c: integer;
+   ch1: char;
+   decimaled: boolean; // true after a decimal was added to NumStr
+   NumStr: string;
+// a string to contain the number in string form until it is comletely copied
+begin // get the number left of a certain character by looping down the string
+  NumStr:=''; // initialize string
+  Decimaled:=false;
+  for c:=index1+1 to Length(str1) do begin // loop down the string
+    ch1:=str1[c];
+    if (ch1>='0')and(ch1<='9')or((c=index1+1)and(ch1='-')) then begin
+      NumStr:=NumStr+ch1
+    end else if ch1='.' then begin
+      if Decimaled then begin
+        Problem:=true;
+        Break;
+      end else begin
+        NumStr:=NumStr+ch1;
+      end;
+      Decimaled:=true;
+    end else Break;
+  end;
+  if NumStr='' then problem:=true;
+  if not problem then begin
+    result:=strtofloat(NumStr);
+  end else begin
+    result := 0;
+  end;
+  end1:=c;
+  {  //kt
+  if NumStr='' then
+    problem:=true
+  else
+    result:=strtofloat(NumStr);
+  end1:=c;
+  }
+end;
+
+procedure SubstituteStr(StartIndex,EndIndex: integer;var str1: string;const SubStr: string);
+// substitute a substring into another string, replacing a certain index range
+var s1: string;
+begin
+  s1:='';
+  if startindex<>1 then begin
+    s1:=copy(str1,1,StartIndex);
+  end;
+  s1:=s1+SubStr;
+  if EndIndex<Length(str1) then begin
+    s1:=s1+copy(str1,EndIndex,999);
+  end;
+  str1:=s1;
+end;
+
+procedure StoreOpVals(ChIndex: integer;str1: string; var problem: boolean;var val1,val2: real;var start1,end1: integer);
+// store the values left and right of the operation character
+begin
+  Val1:=GetLeftNum(ChIndex,str1,start1,problem);
+  Val2:=GetRightNum(ChIndex,str1,end1,problem);
+end;
+
+function StringEval(str1: string;var problem: boolean): real;
+var
+  pos1,pos2: integer;
+  parEval: string;
+  parPos1,parPos2: integer;
+  stopping: boolean;
+  st1,en1: integer; // used for substituing strings
+  val1,val2: real; // constant values used to evaluate an operation
+  s: string;
+
+  function StorePos(ch: char): integer;
+  begin // store the position of the character into pos1 and return it too
+    pos1:=pos(ch,str1);
+    result:=pos1;
+  end;
+
+begin
+  stopping:=false;
+  while not stopping do begin// loop through the brackets using recursion
+   s:=GetHigherBracket(str1,stopping,problem,st1,en1);
+   if not (stopping or problem) then // there are still smaller brackets to evaluate
+     SubstituteStr(st1,en1,str1,floattostr(StringEval(s,problem)))
+   else
+     stopping:=true;
+  end;
+  if problem then begin
+    result:=0;
+    Exit;
+  end;
+  // now to actually evaluate something
+  //kt added "and (not problem)" below
+  while (StorePos('^')>0) and (not problem) do begin// there is an adding operation to evaluate
+    StoreOpVals(pos1,str1,problem,val1,val2,st1,en1);
+    SubstituteStr(st1,en1,str1,floattostr(power(val1,val2)));
+  end;
+  while (Pos('*',str1)>0)or(Pos('/',str1)>0) and (not problem) do begin
+    pos2:=Pos('*',str1);
+    pos1:=Pos('/',str1);
+    if (pos1<pos2)and(pos1>1)or(pos2<1) then begin
+      StoreOpVals(pos1,str1,problem,val1,val2,st1,en1);
+      SubstituteStr(st1,en1,str1,floattostr(val1/val2));
+    end else begin
+      StoreOpVals(pos2,str1,problem,val1,val2,st1,en1);
+      SubstituteStr(st1,en1,str1,floattostr(val1*val2));
+    end;
+  end;
+  while (Pos('+',str1)>0)or(Pos('-',str1)>0) and (not problem) do begin
+    pos2:=pos('-',str1);
+    if pos2=1 then // ie. str1 = '-4-4'
+      pos2:=pos('-',copy(str1,2,999))+1;
+    pos1:=Pos('+',str1);
+    if pos2=1 then // ie. str1 = '+4-4'
+      pos1:=pos('+',copy(str1,2,999))+1;
+    if ((pos1<pos2) and (pos1>1) or (pos2<1)) then begin
+      StoreOpVals(pos1,str1,problem,val1,val2,st1,en1);
+      SubstituteStr(st1,en1,str1,floattostr(val1+val2));
+    end else if pos2>1 then begin// don't evaluate something like '-3423'
+      StoreOpVals(pos2,str1,problem,val1,val2,st1,en1);
+      SubstituteStr(st1,en1,str1,floattostr(val1-val2));
+    end else break;
+  end;
+  if (str1<>'') and not problem then begin  //kt added problem check
+    try
+      result:=StrToFloat(str1);
+    except
+      on EConvertError do begin
+        result := 0;
+        problem := true;
+      end;
+    end;
+  end else begin
+    result := 0;
+    problem := true;
+  end;
+end;
+
+{
+procedure TForm1.Button1Click(Sender: TObject);
+var // Evaluate Expression
+  s: string;
+  problem: boolean; // used to hold information on a problem
+begin
+     Problem:=false;
+     s:=edit1.text;
+     s:=floattostr(StringEval(s,problem));
+     if problem then
+        edit1.text:='error'
+     else
+         edit1.text:=s;
+end;
+
+procedure TForm1.Button2Click(Sender: TObject);
+begin // Expression Guidelines
+     // the character, #13, creates a new line.
+     ShowMessage('The expression must follow the following rules:'+#13+
+                 '   There can''t be any spaces.'+#13+
+                 '   The only operators supported are: ^,*,/,+,-'+#13+
+                 '   There must be the same number of begin and end brackets.'+#13+
+                 '   Only the round brackets can be used.'+#13+
+                 '   All values must be valid constants.'+#13+
+                 '   A "valid constant," for this program, is defined as a string with:'+#13+
+                 '        - no characters besides "0".."9," up to one ".", '+#13+
+                 '        up to one "-" at the beginning'+#13+
+                 '        - the string must be atleast one character in length'+#13+
+                 '        - Exponential sections are not supported, however, the "E" character'+#13+
+                 '        is supported by "StrToFloat."  ie. "3.14E-10" is not supported by this program,'+#13+
+                 '        but it is for Delphi''s "StrToFloat" function.'
+                      );
+end;
+}
+end.
Index: cprs/branches/tmg-cprs/CPRS-Chart/uTMGOptions.pas
===================================================================
--- cprs/branches/tmg-cprs/CPRS-Chart/uTMGOptions.pas	(revision 729)
+++ cprs/branches/tmg-cprs/CPRS-Chart/uTMGOptions.pas	(revision 729)
@@ -0,0 +1,190 @@
+unit uTMGOptions;
+//kt Added entire unit.  2/10/10
+
+interface
+
+uses
+  IniFiles, SysUtils, Forms, uCore, ORFn,  ORNet, Trpcb;
+
+var
+  USE_SERVER_INI : boolean;
+  Initialized : boolean;
+
+  Procedure WriteBool(const Key: String; Value: Boolean; AsDefault : boolean = false);
+  Procedure WriteInteger(const Key: String; Value: Integer; AsDefault : boolean = false);
+  Procedure WriteString(const Key: String; Value: String; AsDefault : boolean = false);
+  Function ReadBool(const Key: String; Default: Boolean): Boolean;
+  Function ReadInteger(const Key: String; Default: Integer): Integer;
+  Function ReadString(const Key: String; Default: String): String;
+
+implementation
+
+uses
+  Classes;
+
+const
+  DEFAULT_SECTION = 'DEFAULT';
+
+var
+  StrList : TStringList;
+  OptionsIniFile : TIniFile;  //kt 8/09
+  
+  procedure TMGOptionsInitialize;
+  begin
+    OptionsIniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.INI'));  //kt
+    StrList := TStringList.Create;
+
+    //if RPC exists, use in lieu of INI file
+    RPCBrokerV.remoteprocedure := 'XWB IS RPC AVAILABLE';
+    RPCBrokerV.Param[0].Value := 'TMG INIFILE GET';
+    RPCBrokerV.Param[0].ptype := literal;
+    RPCBrokerV.Param[1].Value := 'R';
+    RPCBrokerV.Param[1].ptype := literal;
+    //RPCResult := RPCBrokerV.StrCall;   {returns 1 if available, 0 if not available}
+    USE_SERVER_INI := StrToBool(RPCBrokerV.StrCall);
+  end;
+
+  procedure WriteRPCStr(const Section, Key: String; Value: String);
+  begin
+    RPCBrokerV.remoteprocedure := 'TMG INIFILE SET';
+    RPCBrokerV.Param[0].Value := Section;
+    RPCBrokerV.Param[0].ptype := literal;
+    RPCBrokerV.Param[1].Value := Key;
+    RPCBrokerV.Param[1].ptype := literal;
+    RPCBrokerV.Param[2].Value := Value;
+    RPCBrokerV.Param[2].ptype := literal;
+    RPCBrokerV.Call;
+  end;
+
+  function ReadRPCStr(const Section, Key, Default: String) : string;
+  begin
+    RPCBrokerV.remoteprocedure := 'TMG INIFILE GET';
+    RPCBrokerV.param[0].ptype := literal;
+    RPCBrokerV.param[0].value := Section;
+    RPCBrokerV.Param[1].ptype := literal;
+    RPCBrokerV.param[1].value := Key;
+    RPCBrokerV.Param[2].ptype := literal;
+    RPCBrokerV.param[2].value := Default;
+    Result := Piece(RPCBrokerV.StrCall,'^',2);
+  end;
+
+
+  Procedure WriteBool(const Key: String; Value: Boolean; AsDefault : boolean = false);
+  begin
+    if Initialized = False then TMGOptionsInitialize;
+    if AsDefault then begin
+      if USE_SERVER_INI then begin
+        WriteRPCStr(DEFAULT_SECTION,Key,BoolToStr(Value));
+      end else begin
+        OptionsIniFile.WriteBool(DEFAULT_SECTION,Key,Value);
+      end;
+    end else begin
+      if USE_SERVER_INI then begin
+        WriteRPCStr(User.Name,Key,BoolToStr(Value));
+      end else begin
+        OptionsIniFile.ReadSection(DEFAULT_SECTION,StrList);
+        if (StrList.IndexOf(Key)=-1) or (OptionsIniFile.ReadBool(DEFAULT_SECTION,Key,false)<>Value) then begin
+          OptionsIniFile.WriteBool(User.Name,Key,Value);  //Only write user value if differs from default value
+        end;
+      end;
+    end;
+  end;
+
+  Procedure WriteInteger(const Key: String; Value: Integer; AsDefault : boolean = false);
+  begin
+    if Initialized = False then TMGOptionsInitialize;
+    if AsDefault then begin
+      if USE_SERVER_INI then begin
+        WriteRPCStr(DEFAULT_SECTION,Key,IntToStr(Value));
+      end else begin
+        OptionsIniFile.WriteInteger(DEFAULT_SECTION,Key,Value);
+      end;
+    end else begin
+      if USE_SERVER_INI then begin
+        WriteRPCStr(User.Name,Key,IntToStr(Value));
+      end else begin
+        OptionsIniFile.ReadSection(DEFAULT_SECTION,StrList);
+        if (StrList.IndexOf(Key)=-1) or (OptionsIniFile.ReadInteger(DEFAULT_SECTION,Key,-999)<>Value) then begin
+          OptionsIniFile.WriteInteger(User.Name,Key,Value);  //Only write user value if differs from default value
+        end;
+      end;
+    end;
+  end;
+
+  Procedure WriteString(const Key: String; Value: String; AsDefault : boolean = false);
+  begin
+    if Initialized = False then TMGOptionsInitialize;
+    if AsDefault then begin
+      if USE_SERVER_INI then begin
+        WriteRPCStr(DEFAULT_SECTION,Key,Value);
+      end else begin
+        OptionsIniFile.WriteString(DEFAULT_SECTION,Key,Value);
+      end;
+    end else begin
+      if USE_SERVER_INI then begin
+        WriteRPCStr(User.Name,Key,Value);
+      end else begin
+        OptionsIniFile.ReadSection(DEFAULT_SECTION,StrList);
+        if (StrList.IndexOf(Key)=-1) or (OptionsIniFile.ReadString(DEFAULT_SECTION,Key,'xxx')<>Value) then begin
+          OptionsIniFile.WriteString(User.Name,Key,Value);  //Only write user value if differs from default value
+        end;
+      end;
+    end;
+  end;
+
+  Function ReadBool(const Key: String; Default: Boolean): Boolean;
+  begin
+    if Initialized = False then TMGOptionsInitialize;
+    if USE_SERVER_INI then begin
+      Result := StrToBool(ReadRPCStr(User.Name,Key,BoolToStr(Default)));
+    end else begin
+      OptionsIniFile.ReadSection(User.Name,StrList);
+      if StrList.IndexOf(Key) > -1 then begin
+        Result := OptionsIniFile.ReadBool(User.Name,Key,Default);
+      end else begin
+        Result := OptionsIniFile.ReadBool(DEFAULT_SECTION,Key,Default);
+      end;
+    end;
+  end;
+
+  Function ReadInteger(const Key: String; Default: Integer): Integer;
+  begin
+    if Initialized = False then TMGOptionsInitialize;
+    if USE_SERVER_INI then begin
+      Result := StrToInt(ReadRPCStr(User.Name,Key,IntToStr(Default)));
+    end else begin
+      OptionsIniFile.ReadSection(User.Name,StrList);
+      if StrList.IndexOf(Key) > -1 then begin
+        Result := OptionsIniFile.ReadInteger(User.Name,Key,Default);
+      end else begin
+        Result := OptionsIniFile.ReadInteger(DEFAULT_SECTION,Key,Default);
+      end;
+    end;
+  end;
+
+  Function ReadString(const Key: String; Default: String): String;
+  begin
+    if Initialized = False then TMGOptionsInitialize;
+    if USE_SERVER_INI then begin
+      Result := ReadRPCStr(User.Name,Key,Default);
+    end else begin
+      OptionsIniFile.ReadSection(User.Name,StrList);
+      if StrList.IndexOf(Key) > -1 then begin
+        Result := OptionsIniFile.ReadString(User.Name,Key,Default);
+      end else begin
+        Result := OptionsIniFile.ReadString(DEFAULT_SECTION,Key,Default);
+      end;
+    end;
+  end;
+
+
+initialization
+  Initialized := false;
+
+
+finalization
+  OptionsIniFile.Free;  //kt 8/09
+  StrList.Free;
+
+end.
+
