Veritas-bu

[Veritas-bu] Completely clean Databases

2005-09-21 11:48:43
Subject: [Veritas-bu] Completely clean Databases
From: tlewick AT hrblock DOT com (Lewick, Taylor)
Date: Wed, 21 Sep 2005 10:48:43 -0500
This is a multi-part message in MIME format.

------_=_NextPart_001_01C5BEC3.F18842BC
Content-Type: multipart/alternative;
        boundary="----_=_NextPart_002_01C5BEC3.F18842BC"


------_=_NextPart_002_01C5BEC3.F18842BC
Content-Type: text/plain;
        charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

You know, that's a good idea, I have been sending it out via bulk email
requests, so here goes...

I am attaching it as a text file, if that doesn't work on the mail list
email me back and Ill just email the code in the message...

=20

Okay, here is netbackup consistency checker,  it's a perl script, no
add-on modules needed, just perl 5.x, doesn't need to be the latest.

Its only running 3 system commands, vmquery -a, bpmedialist -l and
bpimmedia so as long as those switches don't change in different OS
versions, it should be totally OS agnostic.

Again, as far as I know it should work in a 5.x environment, but we are
still on 4.5 until next month, so if someone would confirm with me that
would be great.

=20

Run this on your master server (Mine is Unix based, this should work
with some slight changes on Windows provided you have perl.  Don't ask
me for help converting it to Windows though, that's against my morals)
when there is no activity on your system.  Also, I try to run it after I
think the database (images cleanup) has ran.  i.e., when NetBackup is
done wiping out images that have expired and cleaning stuff out of the
volume and media database.  If that's not possible, just run it every
day at about the same time and diff the output and you will start to get
a good feel for how many tapes are in transition, meaning being cleaned
up every day.  In this case, the tapes that show up in the script output
repeatedly day after day, aren't being cleaned up and are the problem
tapes.=20

=20

Depending on the size of your environment and backup window, I know this
may not be easy to run it at a time when there is zero activity, so just
pick the lightest time possible.

=20

Again, take the output and watch it over a couple of days and at
different times.  When I first ran it I probably had a hundred tapes
that showed up, and gradually got it down to below 15, and finally got
it down to 0...

=20

I run mine in /var/nbcc/nbcc.pl and all the output dumps to /var/nbcc,
in our environment, which is 9 media servers and say 5000 tapes or so,
it runs in about 2-3 minutes.

=20

Feel free to email with comments/questions, I'll help if I can.=20

=20

Also, I know its not commented the best, so if you need help no problem.
The script is completely non-invasive, but look it over of course just
so you are comfortable with running it.

=20

Finally, there is one section of the code that could be site specific...

=20

Where the code says... (it does this 4 times)

=20

foreach $tapeid (keys %Have_Media_No_Image) {

 if ( $tapeid !~ /(DB\d\d\d\d)/ ) {

 print OUT "$tapeid\n"; }

 }

=20

In the line that has the DB\d\d\d\d regular expression I am excluding
tapes that have a barcode of DB1234 because that is how we label our
Catalog Backup tapes.

So in your environment, if you label your tapes CA#### for Catalog or
NB#### for NetBackup then change the DB and if you use letters then you
need to change the \d which is perl regular expression for a digit 0-9.
That should be the only part of the code that is site specific.

=20

If anyone has any questions/complaints/improvements, etc email to the
list and I'll respond as best I can...

=20

Taylor


------_=_NextPart_002_01C5BEC3.F18842BC
Content-Type: text/html;
        charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
<meta http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 10 (filtered)">

<style>
<!--
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
p
        {margin-right:0in;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman";}
span.emailstyle17
        {font-family:Arial;
        color:navy;}
span.EmailStyle19
        {font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=3DEN-US link=3Dblue vlink=3Dpurple>

<div class=3DSection1>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>You know, that&#8217;s a good idea, =
I have
been sending it out via bulk email requests, so here =
goes&#8230;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>I am attaching it as a text file, =
if that
doesn&#8217;t work on the mail list email me back and =
</span></font><font
  size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial;
  color:navy'>Ill</span></font><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy'> just email the =
code in
the message&#8230;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Okay, here is netbackup consistency
checker, &nbsp;it&#8217;s a perl script, no add-on modules needed, just =
perl
5.x, doesn&#8217;t need to be the latest.</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Its only running 3 system commands, =
vmquery
&#8211;a, bpmedialist -l and &nbsp;bpimmedia so as long as those =
switches don&#8217;t
change in different OS versions, it should be totally OS =
agnostic.</span></font></p>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'>Again, as far as I know it should work in a 5.x environment, but =
we are
still on 4.5 until next month, so if someone would confirm with me that =
would
be great.</span></font></p>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Run this on your master server =
(Mine is Unix
based, this should work with some slight changes on Windows provided you =
have perl.&nbsp;
Don&#8217;t ask me for help converting it to Windows though, =
that&#8217;s against
my morals) when there is no activity on your system.&nbsp; Also, I try =
to run
it after I think the database (images cleanup) has ran.&nbsp; i.e., when
NetBackup is done wiping out images that have expired and cleaning stuff =
out of
the volume and media database.&nbsp; If that&#8217;s not possible, just =
run it
every day at about the same time and diff the output and you will start =
to get
a good feel for how many tapes are in transition, meaning being cleaned =
up
every day.&nbsp; In this case, the tapes that show up in the script =
output
repeatedly day after day, aren&#8217;t being cleaned up and are the =
problem
tapes. </span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Depending on the size of your =
environment
and backup window, I know this may not be easy to run it at a time when =
there
is zero activity, so just pick the lightest time =
possible.</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>Again, take the output and watch =
it over a
couple of days and at different times.&nbsp; When I first ran it I =
probably had
a hundred tapes that showed up, and gradually got it down to below 15, =
and
finally got it down to 0&#8230;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>I run mine in /var/nbcc/nbcc.pl and =
all
the output dumps to /var/nbcc, in our environment, which is 9 media =
servers and
say 5000 tapes or so, it runs in about 2-3 minutes.</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Feel free to email with
comments/questions, I&#8217;ll help if I can.&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Also, I know its not commented the =
best,
so if you need help no problem.&nbsp; The script is completely =
non-invasive,
but look it over of course just so you are comfortable with running =
it.</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>Finally, there is one section of =
the code
that could be site specific&#8230;</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>Where the code says&#8230; (it =
does this 4
times)</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>foreach $tapeid (keys =
%Have_Media_No_Image)
{</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>&nbsp;if ( $tapeid !~ =
/(DB\d\d\d\d)/ ) {</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>&nbsp;print OUT =
&quot;$tapeid\n&quot;; }</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>&nbsp;}</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>In the line that has the =
DB\d\d\d\d regular
expression I am excluding tapes that have a barcode of DB1234 because =
that is
how we label our Catalog Backup tapes.</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>So in your environment, if you =
label your
tapes CA#### for Catalog or NB#### for NetBackup then change the DB and =
if you
use letters then you need to change the \d which is perl regular =
expression for
a digit 0-9.&nbsp; That should be the only part of the code that is site
specific.</span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>If anyone has any
questions/complaints/improvements, etc email to the list and I&#8217;ll =
respond
as best I can&#8230;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>&nbsp;</span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
  10.0pt;font-family:Arial;color:navy'>Taylor</span></font></p>

</div>

</body>

</html>

------_=_NextPart_002_01C5BEC3.F18842BC--
------_=_NextPart_001_01C5BEC3.F18842BC
Content-Type: text/plain;
        name="nbcc.pl.txt"
Content-Transfer-Encoding: base64
Content-Description: nbcc.pl.txt
Content-Disposition: attachment;
        filename="nbcc.pl.txt"

IyEvb3B0L3BlcmwvYmluL3BlcmwNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMNCiMgSSB0YWtlIG5vIHJlc3BvbnNpYmlsaXR5IGlmIHRoaXMgY2F1c2VzICMNCiMg
YW55IHByb2JsZW1zIG9uIHlvdXIgc3lzdGVtLiAgVGhhdCAgICAgICMNCiMgc2hvdWxkIG5vdCBi
ZSBhIHByb2JsZW0sIGJ1dCBJIGhhdmUgdG8gICMNCiMgY292ZXIgbXkgcmVhci4gIFRheWxvciBM
ZXdpY2sgMy8xNi8wNCAgICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMNCiMgJElEQl90YXBlaWQ9aW1hZ2UgZGF0YWJhc2UgdGFwZSBJRCAgICAgICMNCiMgJE1E
Ql90YXBlaWQ9bWVkaWEgZGF0YWJhc2UgdGFwZSBJRCAgICAgICMNCiMgJFZEQl90YXBlaWQ9dm9s
dW1lIGRhdGFiYXNlIHRhcGUgSUQgICAgICMNCiMgUnVuICB2bXF1ZXJ5IC1hLCBicG1lZGlhbGlz
dCAtbCwgYW5kICAgICMNCiMgYnBpbW1lZGlhIHdoZW4gdGhlcmUgaXMgbGl0dGxlIHRvIG5vICAg
ICMNCiMgYmFja3VwIGFjdGl2aXR5IGdvaW5nIG9uIGFuZCByZWRpcmVjdCAgICMNCiMgb3V0cHV0
IHRvIHRoZSAgdGV4dCBmaWxlcyBsaXN0ZWQgYmVsb3cuICMNCiMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KJGZkYXRlPWBkYXRlICslbSVkJVlgOw0KDQpgdm1x
dWVyeSAtYSA+L3Zhci9uZXRiYWNrdXAvbmJjYy92bXF1ZXJ5LnR4dGA7DQpgYnBtZWRpYWxpc3Qg
LWwgPi92YXIvbmV0YmFja3VwL25iY2MvYnBtZWRpYWxpc3QudHh0YDsNCmBicGltbWVkaWEgPi92
YXIvbmV0YmFja3VwL25iY2MvYnBpbW1lZGlhLnR4dGA7DQoNCiRNRURJQV9JTl9GSUxFICA9ICIv
dmFyL25ldGJhY2t1cC9uYmNjL2JwbWVkaWFsaXN0LnR4dCI7DQokSU1BR0VfSU5fRklMRSAgPSAi
L3Zhci9uZXRiYWNrdXAvbmJjYy9icGltbWVkaWEudHh0IjsNCiRWT0xVTUVfSU5fRklMRSAgPSAi
L3Zhci9uZXRiYWNrdXAvbmJjYy92bXF1ZXJ5LnR4dCI7DQokT1VUX0ZJTEUgPSAiL3Zhci9uZXRi
YWNrdXAvbmJjYy9uYmNjXyRmZGF0ZSI7DQoNCm9wZW4oTUVESUFfSU4sICRNRURJQV9JTl9GSUxF
KQ0KICAgIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiAkTUVESUFfSU5fRklMRTogJCEgXG4iOw0KDQpv
cGVuKElNQUdFX0lOLCAkSU1BR0VfSU5fRklMRSkNCiAgICBvciBkaWUgIkNvdWxkbid0IG9wZW4g
JElNQUdFX0lOX0ZJTEU6ICQhIFxuIjsNCg0Kb3BlbihWT0xVTUVfSU4sICRWT0xVTUVfSU5fRklM
RSkNCiAgICBvciBkaWUgIkNvdWxkbid0IG9wZW4gJElNQUdFX0lOX0ZJTEU6ICQhIFxuIjsNCg0K
b3BlbihPVVQsICI+PiRPVVRfRklMRSIpDQogICAgb3IgZGllICJDb3VsZG4ndCBvcGVuICRPVVRf
RklMRTogJCEgXG4iOw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQp3aGlsZSAo
PElNQUdFX0lOPikNCiB7DQogICAgbmV4dCBpZiAobm90IC9eRlJBRy8pOyANCiAgICAoJElEQl90
YXBlaWQpPShzcGxpdClbOF07DQogICAgJEhhdmVfSW1hZ2V7JElEQl90YXBlaWR9Kys7DQogfQ0K
Y2xvc2UgKElNQUdFX0lOKTsNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIHdo
aWxlICg8TUVESUFfSU4+KQ0KIHsNCiAgKCRNREJfdGFwZWlkKT0oc3BsaXQpWzBdOw0KICAkSGF2
ZV9NZWRpYXskTURCX3RhcGVpZH0rKzsNCiB9DQpjbG9zZSAoTUVESUFfSU4pOw0KDQojIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogd2hpbGUgKDxWT0xVTUVfSU4+KQ0KIHsNCiAgaWYg
KC9ebWVkaWEgSUQ6XHMrKFx3KykvKSB7DQogICAgICRtZWRpYWlkID0gJDE7IH0NCiAgaWYgKC9e
YXNzaWduZWQ6XHMrKC0tLSkvKSB7DQogICAgICRVbmFzc2lnbmVkeyRtZWRpYWlkfSsrOyB9DQog
IGlmICgvXmFzc2lnbmVkOlxzKyhcdyspLiovKSB7DQogICAgICRBc3NpZ25lZHskbWVkaWFpZH0r
KyB9DQogfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQolSGF2ZV9JbWFnZV9O
b19NZWRpYSA9ICVIYXZlX0ltYWdlOw0KJUhhdmVfSW1hZ2VfVW5hc3NpZ25lZCA9ICVIYXZlX0lt
YWdlOw0KJUhhdmVfTWVkaWFfTm9fSW1hZ2UgPSAlSGF2ZV9NZWRpYTsNCiVIYXZlX01lZGlhX1Vu
YXNzaWduZWQgPSAlSGF2ZV9NZWRpYTsNCiVBc3NpZ25lZF9Ob19JbWFnZSA9ICVBc3NpZ25lZDsN
CiVBc3NpZ25lZF9Ob19NZWRpYSA9ICVBc3NpZ25lZDsNCg0KIyMjIyMjIyMjIEltYWdlcyBEQiBh
bmQgTWVkaWEgREIgaW5jb25zaXN0ZW5jaWVzICMjIyMjIyMjIyMNCiBmb3JlYWNoICR0YXBlaWQg
KGtleXMgJUhhdmVfSW1hZ2VfTm9fTWVkaWEpIHsNCiAgIGlmICgkSGF2ZV9NZWRpYV9Ob19JbWFn
ZXskdGFwZWlkfSkgew0KICAgICAgZGVsZXRlICRIYXZlX0ltYWdlX05vX01lZGlheyR0YXBlaWR9
Ow0KICAgICAgZGVsZXRlICRIYXZlX01lZGlhX05vX0ltYWdleyR0YXBlaWR9Ow0KICAgfQ0KIH0N
Cg0KIyMjIyMjIyMjIEltYWdlcyBEQiBhbmQgVm9sdW1lIERCIGluY29uc2lzdGVuY2llcyAjIyMj
IyMjIyMjDQogZm9yZWFjaCAkdGFwZWlkIChrZXlzICVIYXZlX0ltYWdlX1VuYXNzaWduZWQpIHsN
CiAgIGlmICgkQXNzaWduZWRfTm9fSW1hZ2V7JHRhcGVpZH0pIHsNCiAgICAgIGRlbGV0ZSAkSGF2
ZV9JbWFnZV9VbmFzc2lnbmVkeyR0YXBlaWR9Ow0KICAgICAgZGVsZXRlICRBc3NpZ25lZF9Ob19J
bWFnZXskdGFwZWlkfTsNCiAgIH0NCiB9DQoNCiMjIyMjIyMjIyBNZWRpYSBEQiBhbmQgVm9sdW1l
IERCIGluY29uc2lzdGVuY2llcyAjIyMjIyMjIyMjDQogZm9yZWFjaCAkdGFwZWlkIChrZXlzICVI
YXZlX01lZGlhX1VuYXNzaWduZWQpIHsNCiAgIGlmICgkQXNzaWduZWRfTm9fTWVkaWF7JHRhcGVp
ZH0pIHsNCiAgICAgIGRlbGV0ZSAkSGF2ZV9NZWRpYV9VbmFzc2lnbmVkeyR0YXBlaWR9Ow0KICAg
ICAgZGVsZXRlICRBc3NpZ25lZF9Ob19NZWRpYXskdGFwZWlkfTsNCiAgIH0NCiB9DQoNCiMjIyMj
IyMjIyBNZWRpYSBpbiBWb2x1bWUgREIgYnV0IG5vdCBpbiBJbWFnZXMgb3IgTWVkaWEgREIgICMj
IyMjIyMjIyMNCiBmb3JlYWNoICR0YXBlaWQgKGtleXMgJUFzc2lnbmVkX05vX01lZGlhKSB7DQog
ICBpZiAoJEFzc2lnbmVkX05vX0ltYWdleyR0YXBlaWR9KSB7DQogICAgICAkVm9sdW1lX05vX0lt
YWdlX01lZGlheyR0YXBlaWR9Kys7DQogICB9DQogfQ0KDQojcHJpbnQgT1VUICJNZWRpYSBJRCAg
IFZvbHVtZSBEQiAgIE1lZGlhIERCICAgSW1hZ2UgREJcbiI7DQojcHJpbnQgT1VUICItLS0tLS0t
LSAgIC0tLS0tLS0tLSAgIC0tLS0tLS0tICAgLS0tLS0tLS1cbiI7DQoNCnByaW50IE9VVCAiIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iOw0KcHJpbnQgT1VUICJNZWRpYSBJRCdzIHRoYXQgc2hv
dyB1cCBpbiB0aGUgSW1hZ2VzIGFuZCBWb2x1bWUgREIgYnV0IG5vdCBpbiB0aGUgTWVkaWEgRGF0
YWJhc2VcbiI7DQpwcmludCBPVVQgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIjsNCiBmb3Jl
YWNoICR0YXBlaWQgKGtleXMgJUhhdmVfSW1hZ2VfTm9fTWVkaWEpIHsNCiBpZiAoICR0YXBlaWQg
IX4gLyhEQlxkXGRcZFxkKS8gKSB7DQogcHJpbnQgT1VUICIkdGFwZWlkXG4iOyB9DQogfQ0KDQpw
cmludCBPVVQgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIjsNCnByaW50IE9VVCAi
TWVkaWEgSUQncyB0aGF0IHNob3cgdXAgaW4gdGhlIFZvbHVtZSBhbmQgTWVkaWEgRGF0YWJhc2Ug
YnV0IG5vdCBpbiB0aGUgSW1hZ2VzIERhdGFiYXNlXG4iOw0KcHJpbnQgT1VUICIjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7DQogZm9yZWFjaCAkdGFwZWlkIChrZXlzICVIYXZlX01l
ZGlhX05vX0ltYWdlKSB7DQogaWYgKCAkdGFwZWlkICF+IC8oREJcZFxkXGRcZCkvICkgew0KIHBy
aW50IE9VVCAiJHRhcGVpZFxuIjsgfQ0KIH0NCg0KcHJpbnQgT1VUICJcbiMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iOw0KcHJpbnQgT1VUICJNZWRpYSBJRCdzIHRoYXQgc2hv
dyB1cCBpbiB0aGUgSW1hZ2VzIGFuZCBNZWRpYSBEQiBidXQgYXJlIG5vdCBhc3NpZ25lZCBpbiB0
aGUgVm9sdW1lIERhdGFiYXNlXG4iOw0KcHJpbnQgT1VUICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjXG4iOw0KIGZvcmVhY2ggJHRhcGVpZCAoa2V5cyAlSGF2ZV9JbWFnZV9V
bmFzc2lnbmVkKSB7DQogaWYgKCAkdGFwZWlkICF+IC8oREJcZFxkXGRcZCkvICkgew0KIHByaW50
IE9VVCAiJHRhcGVpZFxuIjsgfQ0KIH0NCg0KcHJpbnQgT1VUICJcbiMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7DQpwcmludCBP
VVQgIk1lZGlhIElEJ3MgdGhhdCBhcmUgYXNzaWduZWQgaW4gdGhlIFZvbHVtZSBEYXRhYmFzZSBi
dXQgYXJlIG5vdCBpbiB0aGUgTWVkaWEgb3IgSW1hZ2VzIERhdGFiYXNlLCBhbmQgY2FuIGJlIGRl
YXNzaWduZWRcbiI7DQpwcmludCBPVVQgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiI7DQogZm9yZWFjaCAkdGFwZWlkIChrZXlz
ICVWb2x1bWVfTm9fSW1hZ2VfTWVkaWEpIHsNCiBpZiAoICR0YXBlaWQgIX4gLyhEQlxkXGRcZFxk
KS8gKSB7DQogcHJpbnQgT1VUICIkdGFwZWlkXG4iOyB9DQogfQ0K

------_=_NextPart_001_01C5BEC3.F18842BC--

<Prev in Thread] Current Thread [Next in Thread>