|
Thatched roof surveys,
Thatching talks, Thatch demonstrations
Over 40 years of thatching experience
available to you without any bias
as I am not looking for work myself or acting as an agent for any one, No Sales pitch,
just passionate about fair standards
and free information. Now
semi retired, and only thatching very
small items. I may however be able to assist you with thatch related
questions or problems you may have, contact details are at the end of this
page
Experienced in Long Straw, Combed
Wheat, Norfolk Reed and Sedge and other more exotic materials working
for house owners, museums, breweries, exhibitions display and local
authorities in the UK and Abroad
Some of the 'thatched
roof surveyors' either know little or nothing about thatch or are thinly disguised
Thatch salesmen. One thatching firm will do it for you for £250
on a pre printed tick box form. They will also arrange the thatching
you will be surprised to learn! Ask for a quotation for the survey
before agreeing
and ask if they can do the work that they will inevitably say is needed!
Any advice I give is based upon what I would do if your property was
mine.

I have been thatching since 1963, Served a
traditional indentured 7 year
apprenticeship followed by two years as a journeyman and have
continued as a master thatcher in my own right since, including
training young thatchers. Attending residential courses supplied by
the then CoSIRA (now the Countryside Agency) and many other seminars. I have been an executive
member of both of the national bodies representing thatching.
Currently the chairman of the R&LMTA and a (founder) member of the
steering committee for formulation of National Vocational
Qualifications with CITB and City & Guilds. I have surveyed many properties in the UK and abroad and arbitrated on
disputes, so far without recourse to any expensive legal action. My
approach is simple and direct, like this site
An opportunity to
get an unbiased opinion of your roof, or that on a house you may be
thinking of buying

Talks on thatching
Can be given in the form of a
power point LCD projected presentation on my own 4 foot screen, or using your own
screen or equipment.
Plus samples
of thatching materials, tools and a 1/12 scale
model. A professional informative display. Approximately 1 1/2 hours
duration -
£20 plus 40p per mile, estate agents surveyors schools and architects
among others have
found this invaluable. Talks targeted to your requirements.

Thatching
demonstrations and tool/materiel displays at shows and events are also
undertaken - distance no object
|
 |
 |
 |
 |
 |
|
|
|
|
|
Tool display in caravan awning |
General view of the display left hand side |
View of the working area: right hand side |
A view as seen from the walk way click on the photos
for full size |
Even if it is a bit wet! |
|
|
|
|
Steam rallies and
conservation groups among others attended, even inside events (large
brush required!) Sharps are barricaded
or out of reach for safety! £10,000.000 insurance coverage.
Enquire
early, limited dates. Usually set up Friday and go early on Monday as it
takes a long time to arrange and load, I have managed to re organise so I
can do it now in one trip so I can set up a display like this for 40p a mile plus £20 a
show day
for your event, I have to re coup my/your public indemnity insurance
costs, damaged materials used demonstrating and fuel. I do not sell items other
than my book and even this is very discrete, this display is for the information
and entertainment of the public and is a hobby of mine, basic bee skep making,
spar and ancient cord making, adze & side axe included together with
thatching tools ancient & modern.. Email me your event address for a
quotation with no obligation
Outside 'pitch' minimum 30 X 20 Feet or bigger
(see photo's) caravan and awning used in display, extra space for 1
car would be appreciated

TUITION CAN ALSO BE GIVEN ON YOUR
OWN OR A COMMUNITY PROJECT, INCLUDING WORKSHOPS, THIS IS NOT AN OPPORTUNITY TO LEARN THATCHING AS
A CAREER, IT IS ONLY APPLICABLE TO A PARTICULAR ROOF USING A PARTICULAR
MATERIAL AND IT WOULD PROBABLY BE CHEAPER / QUICKER EMPLOYING A SKILLED
THATCHER TO DO THE WORK FOR YOU RATHER THAN DOING IT YOURSELF. QUITE HAPPY
TO DISCUSS YOUR NEEDS OBLIGATION FREE
Hands on help, teaching,
material acquisition for your project, distance no object, Spain, France,
Czech Republic, Madeira, Sweden, Slovenia, Scottish Highlands and of
course the rest of the UK covered so far. Warmer countries in our winter
welcome! a full example at
http://www.hollowellsteam.com/dome.htm
Not a project for
dreamers, It can be hard and dirty and is time consuming, It may be possible however and particularly
suitable for the out of the way places using strange local materials, my costs are
that - at cost, as ever you will be quoted as your requirements are known in
advance.
I may also tell you it is impractical, thatching is not rocket science but
it does have a steep learning curve. I can attend at your premise with
caravan and tools, UK and close Europe.
http://www.derventio.org/
will find this Iron Age Reconstruction of a round house, a Viking
house is also being thatched, one turf roof, a cedar shingle, and
shiplap one is also planned |
This
work is being carried out after three days thatching instruction,
a testament to the hard work and rapidly acquired skills of the
staff |
A
very determined lady! I see many roof's when surveying thatched by
professionals that are not as good as thisWell done Carina !!! |
Sweden,
after one weeks instruction and help the lady owner who wanted an
English ridge completed this job by herself, I must admit this
probably is the maximum that DIY can run too! |

From this: A reconstructed Yorkshire barn : see
http://www.craven-cruckbarn.co.uk/cruckbarn.htm
A spectacular building |

To this now (Ridge finish artists impression) in heather - ling -
again all this work building and thatching is down to the owners.
From hand split cruck frame, lime plaster and gathering materials
to the thatching of the roof. |
|
Thatched
in water reed this 'round house' demonstrates the poured on
fluidity of thatch is not created by the material but by the way
it is applied. No other roofing material is capable of adapting to
such shapes |
The only real restrictions is the steeper the
pitch the longer it will last. Thatched properly the wind will
have no detrimental effect. Frequently in Holland pan tiled barn
roofs have the hip ends thatched because it is more efficient even
with the gales that sweep across such a flat countryside. Round
houses like this have been used for thousands of years
particularly in the United Kingdom |
SCOTTISH CROFT
BEFORE
WORK STARTED
See
http://thethatchedcroft.co.uk
for more details. This derelict croft is nearly transformed by the
current owners into a Scottish Highland 'Villa' open to rent
for all from mid March. |
CROFT
NEARLY
FINISHEDThey cannot say it but the owners of this Holiday Let
have finished to property to the highest professional standard. I
work all around Europe and this property is stunning, the owners
delightful and the quiet local area totally unspoilt. If you are
looking at Scotland for a holiday this will not disappoint. I
would advise early booking as dates will not remain available for
long. These Photo's are a little out of date, see the web
site opposite for more details
|

SURVEYS
As well as a survey of the roof,
assistance with insurance claims / assessment / planning consents and
general information can also be given. If you know of a local trusted thatcher they may
well be
able to assist you for less or even free. This very modest outlay now may save you thousands of pounds
in unforeseen or unnecessary thatching bills, or at least set your mind at rest. For
example a recent roof viewed by me involved an architect quoting to
arrange thatching for £80,000, the actual cost was £20,000
Email free! most enquiries are
resolved this way. If needed a site visit and verbal
report will cost you £20 plus 50 pence a mile return car traveling
expense plus ferry - air costs if applicable
Weekends preferred. Located centrally near the M1 M6 A14
intersection to help you with rough pricing. I will email you back an
accurate firm quote with no obligation. In addition, if a written comprehensive
report/survey is required (see sample report)
suitable for mortgage, planning, and insurance assessments, this can
be supplied at an extra £20 plus costs as above
Full cost will be confirmed with you for any services that requires my presence before any visit and is inclusive, no hidden 'extras' any excess over
my costs help
keep this site independent
Initial contact is
preferred by email, it is constantly monitored and also gives me a
chance to be prepared Telephone Leo Wood 01858-575-782
Mobile 077-25-05-95-15 (I get poor to zero reception at home,
voice messages may not be answered for days - I only use in the car)
'Nuthatch' 16 West End, Welford,
Northampton, NN6 6HJ, Great Britain
Replace {url_of_img}
Sorry for the strange format you will have to enter this by hand into your emailer - Fed up with spam !!!
<%@ LANGUAGE="VBSCRIPT" %>
<%
' PROJECT HONEY POT ADDRESS DISTRIBUTION SCRIPT
' For more information visit: http://www.projecthoneypot.org/
' Copyright (C) 2004-2010, Unspam Technologies, Inc.
'
' This program is free software; you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation; either version 2 of the License, or
' (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program; if not, write to the Free Software
' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
' 02111-1307 USA
'
' If you choose to modify or redistribute the software, you must
' completely disconnect it from the Project Honey Pot Service, as
' specified under the Terms of Service Use. These terms are available
' here:
'
' http://www.projecthoneypot.org/terms_of_service_use.php
'
' The required modification to disconnect the software from the
' Project Honey Pot Service is explained in the comments below. To find the
' instructions, search for: *** DISCONNECT INSTRUCTIONS ***
'
' Generated On: Mon, 05 Apr 2010 10:36:05 -0400
' For Domain: www.thatch.org
'
'
' *** DISCONNECT INSTRUCTIONS ***
'
' You are free to modify or redistribute this software. However, if
' you do so you must disconnect it from the Project Honey Pot Service.
' To do this, you must delete the lines of code below located between the
' *** START CUT HERE *** and *** FINISH CUT HERE *** comments. Under the
' Terms of Service Use that you agreed to before downloading this software,
' you may not recreate the deleted lines or modify this software to access
' or otherwise connect to any Project Honey Pot server.
'
' *** START CUT HERE ***
'
REQUEST_HOST = "hpr9.projecthoneypot.org"
REQUEST_PORT = "80"
REQUEST_SCRIPT = "/cgi/serve.php"
'
' *** FINISH CUT HERE ***
'
HPOT_TAG1 = "aaf6547f93ee80f7e839b3a36de9ba77"
HPOT_TAG2 = "1ba06cb928e0765870fcdffc90cda6df"
HPOT_TAG3 = "e5eff424859078ea08098d130e430833"
CLASS_STYLE_1 = "crog"
CLASS_STYLE_2 = "duthiyarenic"
DIV1 = "trep"
VANITY_L1 = "MEMBER OF PROJECT HONEY POT"
VANITY_L2 = "Spam Harvester Protection Network"
VANITY_L3 = "provided by Unspam"
DOC_TYPE1 = "\n"
HEAD1 = "\n \n"
HEAD2 = "http://www.thatch.org\n\n"
ROBOT1 = "\n\n\n"
NOCOLLECT1 = "\n"
TOP1 = "\n\n\n\n"
Function getLegalContent()
getLegalContent = "\n\n o The w to yo other Websi read agent them. non-t Websi
o p g Speci Non-H spide ptonguetied current staircase happyrogr autom
Email It is alone haswankys a stora value stori agree
Each again (""Jud their sucha and p of fe any a Servi the a
h Youdc may a abuse Visit
VISIT PARfriendly filthy tame recipe schoolTY SUBSE
| \nd
ebsit u sub term te yo them s of The ransf te.
al re uman rs, b ams d atica
addr reco . You valu ge, a of t ng th ment
party st th icial egist laws erfor deral ction ce. Y bove
onsstyle foundation adenoidal gownen ppear . The ors a
ORS A kOR S QUENT
| \n o
e fro jectf s gov u acc caref the i acces erabl
stric Visit ots, esign lly.
esses gnize ackn e not nd/or hesek is We andse
agre e oth Acti ered are a medie and brou oukco agree
t to some dIden gree
GREE ENDIN iBREA
| \n o
m whi to th ernsensation chief conceptual actors steamin ept t ullyelevated human subsonic striped. ndivi serig e wit
SPECI
tions ors. index ed to
on t d tha owled less dist addre bsite xpres
e
es th er in onrainbow"")k Admin pplie ntire state ght a nsent mendisadvantage devil tremendous backed reducedt.
e
hsharp piffle fairyavin where tifie not t
THAT G ANY CH OF
| \n t
ch yo etfol g acc hese Any dual( hts g hout
ALgLI
on a Non-H ers, acce
his s t the ge an othan ribencounterut sses. 's em sly p
at an conn shall istra d toa ly wi cour gains to e
f R
g you on t r is opuse
HARVE MESS THES
| \n fTp sassyER
u acc lowin esslions liquid banking collectivept terms Non-H s)cwh rante the e
CENSE
visi uman robot ss, r
itega se em d agr USbreast telephone many cowardly overt $ ion o Intestaunch woman freedom brief equine ail a rohib
APPLI
y sui ectio be g tive agree thing ts wi t him lectr
ECORD
r Int his p uniqu this
STING AGE(S E TER
| \nMS AN
essed g con o the and uman oocon d to xpres
fREST
tor's Visit s, cr eadsequential supporting hire rustic air,
retcsubjunctive illegalo ail a ee th 50. Y f the ntion ddres ited.
CABLE
t, ac ntwit ovnaked tacky chemistryern Conta ments the A thin gin c onicd
S OF
ernet age ( elypm paddr
, GAT ) TO MS OF
| \nD CON
this ditio Webs condi Visit trols you u s wri
RICTI
lice ors i awler compi
nside ddres at ea ou fu se ad aheritage lawnl co seseveryday duodecimal unstudied ulteriorgi
LAW
tion hoor edsby ct (t cbetw dmin the A omovie boys shoulder balletnnec servi
VISIT
Prot the "" atche ess f
HERIN THE I SERV
| \nDITIO
agre ns. T ite. tions ors t , aut nder ttnosy step secretive lorry adequateen
ONS F
nse t nclud s, ha le or
red p sesoa chrise inimical em rther dress llect s rec
AND J
or pr arisi the he ""A een A State dmin tion ce of
OR US
ocol Ident d to or an
G,kST DENTI ICE.
| \nNS OF
ement hese Bydvi (the o the hors the T permi
OR NO
o acc e, bu rvest gath
ropri re pr ail a agre es su ion, ogniz
URISD
oceed ng fr law o dmins dmin . You State with proc
E AND
addre ififox regimenter your y rea
Owiry composer encausticRscandalous followup vat weeING FIERg
| \n USE
(""th terms sitin ""Ter Webs orvideotaped disastrous ot ermcolleague canal career orientations ssion
N-HUM
ess t t are ers, er co
etary ovide ddres egtha bstan harve ed as
ICTIO
ing b om th f the State State cons . You breac escyberspace odd folks r
ABUS
ss re "") if Inter son.
, TRA CONST
| \n
e Web are gf(icautiousn ms of ite s herwi of Se of t
AN VI
he We not oroan ntent
dinte d for ssacrilegious malicious candidate the t the tiall sting ka vi
Ni
roleading bonfire holder redundancyugh e Ter stat "") fo fresi ent t cons hes o egard
E
corde weas net P
NSFER ITUTE
| \n
site"" inpad any Serv hall sesma rvice he ow
SITOR
bsite limit y oth from
llect huma Webs comp y dim , gat olati
t by msaof e of r the dents o the ent t f the ing a
d. An uspec rotoc
RING ShAN
| \n
) iso ditio manne ice"") be co kesiu are ner o
S
appl ed to er co the
ual p n vis ite c ilati inish herinsergeant serpentine premium renaissance pedate onaof
suche Serv resid Webs ente juri o the se Te ction
etroop darkhorse lovable syllabic penaltymai t pot ol ad
TOsA ACCEPmonarchy stuck
| \n
provi n tok r) th . Ple nside se of
f the
yato , web mpute Websi
roper itors ontai on, es th g, an this
plack brilliant sided cylinder periodicarty ice ence ite a red i sdict venu rms o s und
l add entia dtestateress
THIRD TANCE
| \n
ded any e aseunflappable red
r te
ty.
ns
e d/or
of s ntoevasive classy ion e in f er
ress l .
AND
| \n \n \n "
End Function
Private Const BITS_TO_A_BYTE = 8
Private Const BYTES_TO_A_WORD = 4
Private Const BITS_TO_A_WORD = 32
Private m_lOnBits(30)
Private m_l2Power(30)
m_lOnBits(0) = CLng(1)
m_lOnBits(1) = CLng(3)
m_lOnBits(2) = CLng(7)
m_lOnBits(3) = CLng(15)
m_lOnBits(4) = CLng(31)
m_lOnBits(5) = CLng(63)
m_lOnBits(6) = CLng(127)
m_lOnBits(7) = CLng(255)
m_lOnBits(8) = CLng(511)
m_lOnBits(9) = CLng(1023)
m_lOnBits(10) = CLng(2047)
m_lOnBits(11) = CLng(4095)
m_lOnBits(12) = CLng(8191)
m_lOnBits(13) = CLng(16383)
m_lOnBits(14) = CLng(32767)
m_lOnBits(15) = CLng(65535)
m_lOnBits(16) = CLng(131071)
m_lOnBits(17) = CLng(262143)
m_lOnBits(18) = CLng(524287)
m_lOnBits(19) = CLng(1048575)
m_lOnBits(20) = CLng(2097151)
m_lOnBits(21) = CLng(4194303)
m_lOnBits(22) = CLng(8388607)
m_lOnBits(23) = CLng(16777215)
m_lOnBits(24) = CLng(33554431)
m_lOnBits(25) = CLng(67108863)
m_lOnBits(26) = CLng(134217727)
m_lOnBits(27) = CLng(268435455)
m_lOnBits(28) = CLng(536870911)
m_lOnBits(29) = CLng(1073741823)
m_lOnBits(30) = CLng(2147483647)
m_l2Power(0) = CLng(1)
m_l2Power(1) = CLng(2)
m_l2Power(2) = CLng(4)
m_l2Power(3) = CLng(8)
m_l2Power(4) = CLng(16)
m_l2Power(5) = CLng(32)
m_l2Power(6) = CLng(64)
m_l2Power(7) = CLng(128)
m_l2Power(8) = CLng(256)
m_l2Power(9) = CLng(512)
m_l2Power(10) = CLng(1024)
m_l2Power(11) = CLng(2048)
m_l2Power(12) = CLng(4096)
m_l2Power(13) = CLng(8192)
m_l2Power(14) = CLng(16384)
m_l2Power(15) = CLng(32768)
m_l2Power(16) = CLng(65536)
m_l2Power(17) = CLng(131072)
m_l2Power(18) = CLng(262144)
m_l2Power(19) = CLng(524288)
m_l2Power(20) = CLng(1048576)
m_l2Power(21) = CLng(2097152)
m_l2Power(22) = CLng(4194304)
m_l2Power(23) = CLng(8388608)
m_l2Power(24) = CLng(16777216)
m_l2Power(25) = CLng(33554432)
m_l2Power(26) = CLng(67108864)
m_l2Power(27) = CLng(134217728)
m_l2Power(28) = CLng(268435456)
m_l2Power(29) = CLng(536870912)
m_l2Power(30) = CLng(1073741824)
Private Function LShift(lValue, iShiftBits)
If iShiftBits = 0 Then
LShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And 1 Then
LShift = &H80000000
Else
LShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If
If (lValue And m_l2Power(31 - iShiftBits)) Then
LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
Else
LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
End If
End Function
Private Function RShift(lValue, iShiftBits)
If iShiftBits = 0 Then
RShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And &H80000000 Then
RShift = 1
Else
RShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If
RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)
If (lValue And &H80000000) Then
RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
End If
End Function
Private Function RotateLeft(lValue, iShiftBits)
RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
End Function
Private Function AddUnsigned(lX, lY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim lResult
lX8 = lX And &H80000000
lY8 = lY And &H80000000
lX4 = lX And &H40000000
lY4 = lY And &H40000000
lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)
If lX4 And lY4 Then
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And &H40000000 Then
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
Else
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
End If
Else
lResult = lResult Xor lX8 Xor lY8
End If
AddUnsigned = lResult
End Function
Private Function F(x, y, z)
F = (x And y) Or ((Not x) And z)
End Function
Private Function G(x, y, z)
G = (x And z) Or (y And (Not z))
End Function
Private Function H(x, y, z)
H = (x Xor y Xor z)
End Function
Private Function I(x, y, z)
I = (y Xor (x Or (Not z)))
End Function
Private Sub FF(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Private Sub GG(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Private Sub HH(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Private Sub II(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Private Function ConvertToWordArray(sMessage)
Dim lMessageLength
Dim lNumberOfWords
Dim lWordArray()
Dim lBytePosition
Dim lByteCount
Dim lWordCount
Const MODULUS_BITS = 512
Const CONGRUENT_BITS = 448
lMessageLength = Len(sMessage)
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
ReDim lWordArray(lNumberOfWords - 1)
lBytePosition = 0
lByteCount = 0
Do Until lByteCount >= lMessageLength
lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
lByteCount = lByteCount + 1
Loop
lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)
lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)
ConvertToWordArray = lWordArray
End Function
Private Function WordToHex(lValue)
Dim lByte
Dim lCount
For lCount = 0 To 3
lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)
WordToHex = WordToHex & Right("0" & Hex(lByte), 2)
Next
End Function
Public Function MD5(sMessage)
Dim x
Dim k
Dim AA
Dim BB
Dim CC
Dim DD
Dim a
Dim b
Dim c
Dim d
Const S11 = 7
Const S12 = 12
Const S13 = 17
Const S14 = 22
Const S21 = 5
Const S22 = 9
Const S23 = 14
Const S24 = 20
Const S31 = 4
Const S32 = 11
Const S33 = 16
Const S34 = 23
Const S41 = 6
Const S42 = 10
Const S43 = 15
Const S44 = 21
x = ConvertToWordArray(sMessage)
a = &H67452301
b = &HEFCDAB89
c = &H98BADCFE
d = &H10325476
For k = 0 To UBound(x) Step 16
AA = a
BB = b
CC = c
DD = d
FF a, b, c, d, x(k + 0), S11, &HD76AA478
FF d, a, b, c, x(k + 1), S12, &HE8C7B756
FF c, d, a, b, x(k + 2), S13, &H242070DB
FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE
FF a, b, c, d, x(k + 4), S11, &HF57C0FAF
FF d, a, b, c, x(k + 5), S12, &H4787C62A
FF c, d, a, b, x(k + 6), S13, &HA8304613
FF b, c, d, a, x(k + 7), S14, &HFD469501
FF a, b, c, d, x(k + 8), S11, &H698098D8
FF d, a, b, c, x(k + 9), S12, &H8B44F7AF
FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1
FF b, c, d, a, x(k + 11), S14, &H895CD7BE
FF a, b, c, d, x(k + 12), S11, &H6B901122
FF d, a, b, c, x(k + 13), S12, &HFD987193
FF c, d, a, b, x(k + 14), S13, &HA679438E
FF b, c, d, a, x(k + 15), S14, &H49B40821
GG a, b, c, d, x(k + 1), S21, &HF61E2562
GG d, a, b, c, x(k + 6), S22, &HC040B340
GG c, d, a, b, x(k + 11), S23, &H265E5A51
GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA
GG a, b, c, d, x(k + 5), S21, &HD62F105D
GG d, a, b, c, x(k + 10), S22, &H2441453
GG c, d, a, b, x(k + 15), S23, &HD8A1E681
GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8
GG a, b, c, d, x(k + 9), S21, &H21E1CDE6
GG d, a, b, c, x(k + 14), S22, &HC33707D6
GG c, d, a, b, x(k + 3), S23, &HF4D50D87
GG b, c, d, a, x(k + 8), S24, &H455A14ED
GG a, b, c, d, x(k + 13), S21, &HA9E3E905
GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8
GG c, d, a, b, x(k + 7), S23, &H676F02D9
GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A
HH a, b, c, d, x(k + 5), S31, &HFFFA3942
HH d, a, b, c, x(k + 8), S32, &H8771F681
HH c, d, a, b, x(k + 11), S33, &H6D9D6122
HH b, c, d, a, x(k + 14), S34, &HFDE5380C
HH a, b, c, d, x(k + 1), S31, &HA4BEEA44
HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
HH c, d, a, b, x(k + 7), S33, &HF6BB4B60
HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
HH a, b, c, d, x(k + 13), S31, &H289B7EC6
HH d, a, b, c, x(k + 0), S32, &HEAA127FA
HH c, d, a, b, x(k + 3), S33, &HD4EF3085
HH b, c, d, a, x(k + 6), S34, &H4881D05
HH a, b, c, d, x(k + 9), S31, &HD9D4D039
HH d, a, b, c, x(k + 12), S32, &HE6DB99E5
HH c, d, a, b, x(k + 15), S33, &H1FA27CF8
HH b, c, d, a, x(k + 2), S34, &HC4AC5665
II a, b, c, d, x(k + 0), S41, &HF4292244
II d, a, b, c, x(k + 7), S42, &H432AFF97
II c, d, a, b, x(k + 14), S43, &HAB9423A7
II b, c, d, a, x(k + 5), S44, &HFC93A039
II a, b, c, d, x(k + 12), S41, &H655B59C3
II d, a, b, c, x(k + 3), S42, &H8F0CCC92
II c, d, a, b, x(k + 10), S43, &HFFEFF47D
II b, c, d, a, x(k + 1), S44, &H85845DD1
II a, b, c, d, x(k + 8), S41, &H6FA87E4F
II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
II c, d, a, b, x(k + 6), S43, &HA3014314
II b, c, d, a, x(k + 13), S44, &H4E0811A1
II a, b, c, d, x(k + 4), S41, &HF7537E82
II d, a, b, c, x(k + 11), S42, &HBD3AF235
II c, d, a, b, x(k + 2), S43, &H2AD7D2BB
II b, c, d, a, x(k + 9), S44, &HEB86D391
a = AddUnsigned(a, AA)
b = AddUnsigned(b, BB)
c = AddUnsigned(c, CC)
d = AddUnsigned(d, DD)
Next
MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
End Function
Function getFileContents(ByRef Filepath)
Const ForReading = 1
Const TristateUseDefault = -2
Dim FSO
set FSO = server.createObject("Scripting.FileSystemObject")
if FSO.FileExists(Filepath) Then
Set TextStream = FSO.OpenTextFile(Filepath, ForReading, False, TristateUseDefault)
Dim Contents
Contents = TextStream.ReadAll
'Response.write("" & Contents & " ")
TextStream.Close
Set TextStream = nothing
Else
Response.Write("WARNING: File " & Filepath & " could not be read!")
getFileContents = nothing
exit function
End If
Set FSO = nothing
getFileContents = Contents
End Function
Function getDocType()
getDocType = DOC_TYPE1
End Function
Function getHeadHTML1()
getHeadHTML1 = HEAD1
End Function
Function getRobotHTML()
getRobotHTML = ROBOT1
End Function
Function getNoCollectHTML()
getNoCollectHTML = NOCOLLECT1
End Function
Function getHeadHTML2()
getHeadHTML2 = HEAD2
End Function
Function getTopHTML()
getTopHTML = TOP1
End Function
Function getEmailHTML(Method, Email)
Select Case Method
Case 0:
getEmailHTML = ""
Case 1:
getEmailHTML = EMAIL1A & Email & EMAIL1B & Email & EMAIL1C
Case 2:
getEmailHTML = EMAIL2A & Email & EMAIL2B & Email & EMAIL2C
Case 3:
getEmailHTML = EMAIL3A & Email & EMAIL3B & Email & EMAIL3C
Case 4:
getEmailHTML = EMAIL4A & Email & EMAIL4B & Email & EMAIL4C
Case 5:
getEmailHTML = EMAIL5A & Email & EMAIL5B & Email & EMAIL5C
Case 6:
getEmailHTML = EMAIL6A & Email & EMAIL6B & Email & EMAIL6C
Case 7:
getEmailHTML = EMAIL7A & Email & EMAIL7B & Email & EMAIL7C
Case 8:
getEmailHTML = EMAIL8A & Email & EMAIL8B & Email & EMAIL8C
Case 9:
getEmailHTML = EMAIL9A & Email & EMAIL9B & Email & EMAIL9C
case Else:
getEmailHTML = EMAIL10A & Email & EMAIL10B & Email & EMAIL10C
End Select
End Function
Function getLegalHTML
getLegalHTML = LEGAL1 & getLegalContent() & LEGAL2
End Function
Function getStyleHTML
getStyleHTML = STYLE1
End Function
Function getVanityHTML
getVanityHTML = VANITY1
End Function
Function getBottomHTML
getBottomHTML = BOTTOM1
End Function
Function performRequest(Request)
ResponseStr = ""
URL = ""
Set srvXmlHttp = Server.CreateObject("MICROSOFT.XMLHTTP")
URL = "http://" & REQUEST_HOST & REQUEST_SCRIPT
srvXmlHttp.open "POST", URL, false
srvXmlHttp.setRequestHeader "Cache-Control", "no-cache"
srvXmlHttp.setRequestHeader "User-Agent", "PHPot " & HPOT_TAG2
srvXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
srvXmlHttp.setRequestHeader "Connection", "close"
srvXmlHttp.send Request
performRequest = srvXmlHttp.responseText
End Function
Function prepareRequest()
Set postvars = CreateObject("Scripting.Dictionary")
postvars.Add "tag1", HPOT_TAG1
postvars.Add "tag2", HPOT_TAG2
postvars.Add "tag3", HPOT_TAG3
postvars.Add "tag4", md5(getFileContents(Request.ServerVariables("PATH_TRANSLATED")))
postvars.Add "ip", Server.URLEncode(Request.ServerVariables("REMOTE_ADDR"))
postvars.Add "svrn", Server.URLEncode(Request.ServerVariables("SERVER_NAME"))
postvars.Add "svp", Server.URLEncode(Request.ServerVariables("SERVER_PORT"))
postvars.Add "svip", Server.URLEncode(Request.ServerVariables("SERVER_ADDR"))
postvars.Add "rquri", Server.URLEncode(Request.ServerVariables("URL"))
postvars.Add "sn", Replace(Server.URLEncode(Request.ServerVariables("SCRIPT_NAME")), " ", "%20")
postvars.Add "ref", Server.URLEncode(Request.ServerVariables("HTTP_REFERER"))
postvars.Add "uagnt", Server.URLEncode(Request.ServerVariables("HTTP_USER_AGENT"))
Set prepareRequest = postvars
End Function
Function transcribeResponse(ByVal response)
Set settings = CreateObject("Scripting.Dictionary")
Arr = Split(URLDecode(response), Chr(10))
isParam = false
For j = 0 to UBound(Arr)
If Arr(j) = "" Then isParam = false
If isParam Then
pieces = Split(Arr(j), "=", 2)
If UBound(pieces) = 1 Then
settings.Add pieces(0), pieces(1)
End If
End If
If Arr(j) = "" Then isParam = true
Next
If settings.Exists("directives") Then
settings.Item("directives") = Split(settings.Item("directives"), ",")
End If
Set transcribeResponse = settings
End Function
Function URLDecode(ByRef str)
Set re = New RegExp
str = Replace(str, "+", " ")
re.Pattern = "%([0-9a-fA-F]{2})"
re.Global = True
URLDecode = re.Replace(str, GetRef("URLDecodeHex"))
End Function
Function URLDecodeHex(match, hex_digits, pos, source)
URLDecodeHex = chr("&H" & hex_digits)
End Function
Function formatHTML(ByRef str)
formatHTML = Replace(str, "\n", VBCrLf)
End Function
Function echo(ByRef str)
Response.Write(formatHTML(str))
End Function
RequestText = ""
ResponseText = ""
Set Post = prepareRequest
Items = Post.Items
Keys = Post.Keys
For j = 0 to Post.Count -1
RequestText = RequestText & "&" & Keys(j) & "=" & Items(j)
Next
RequestText = Mid(RequestText, 2)
ResponseText = performRequest(RequestText)
Set settings = transcribeResponse(ResponseText)
directives = settings.Item("directives")
email = settings.Item("email")
emailmethod = settings.Item("emailmethod")
Response.AddHeader "Cache-Control", "no-cache"
%>
<% If directives(0) And directives(0) = "1" Then echo(getDocType)%>
<% If settings("injDocType") Then echo(settings("injDocTypeMsg"))%>
<% If directives(1) And directives(1) = "1" Then echo(getHeadHTML1)%>
<% If settings("injHead1HTML") Then echo(settings("injHead1HTMLMsg"))%>
<% If directives(8) And directives(8) = "1" Then echo(getRobotHTML)%>
<% If settings("injRobotHTML") Then echo(settings("injRobotHTMLMsg"))%>
<% If directives(9) And directives(9) = "1" Then echo(getNoCollectHTML)%>
<% If settings("injNoCollectHTML") Then echo(settings("injNoCollectHTMLMsg"))%>
<% If directives(1) And directives(1) = "1" Then echo(getHeadHTML2)%>
<% If settings("injHead2HTML") Then echo(settings("injHead2HTMLMsg"))%>
<% If directives(2) And directives(2) = "1" Then echo(getTopHTML)%>
<% If settings("injTopHTML") Then echo(settings("injTopHTMLMsg"))%>
<%
IF settings("actMsgOn") <> "" Then echo(settings("actMsg"))
IF settings("errMsgOn") <> "" Then echo(settings("errMsg"))
IF settings("customMsgOn") <> "" Then echo(settings("customMsg"))
%>
<% If directives(3) And directives(3) = "1" Then echo(getLegalHTML)%>
<% If settings("injLegalHTML") Then echo(settings("injLegalHTMLMsg"))%>
<%
IF settings("altLegalOn") <> "" Then echo(settings("altLegalMsg"))
%>
<% If directives(4) And directives(4) = "1" Then echo(getEmailHTML(emailmethod, email))%>
<% If settings("injEmailHTML") Then echo(settings("injEmailHTMLMsg"))%>
<% If directives(5) And directives(5) = "1" Then echo(getStyleHTML)%>
<% If settings("injStyleHTML") Then echo(settings("injStyleHTMLMsg"))%>
<% If directives(6) And directives(6) = "1" Then echo(getVanityHTML)%>
<% If settings("injVanityHTML") Then echo(settings("injVanityHTMLMsg"))%>
<%
IF settings("altVanityOn") <> "" Then echo(settings("altVanityMsg"))
%>
<% If directives(7) And directives(7) = "1" Then echo(getBottomHTML)%>
<% If settings("injBottomHTML") Then echo(settings("injBottomHTMLMsg"))%>
________________
Specimen
Basic
Estimate Sample Report
Specification
|