text:
Survive Dirk Hasslehoff
In a garage just outside of Cairo, a smaller man with a muscular build is crouched next to a sand rail,
seeming to be working on it. He's dressed in a pair of camoflauge coloured fatigues, and a tanktop to match
it. Wrench in hand, he's tightening shit here and there, putting on the last few touches to the mechanical
aspect of the desert beast he's fixing. This is definitely the place that you were supposed to meet your
partner for the mission.
Holiday approches the man slowly, her hair tied back in a kacki strip of cloth it's ends fluttering in what
small breeze there is. Taking a long drink of her water bottle she attempts to make her presense known as
unoffensivly as possible to the mechanic.
At the crinkle of the water bottle, Dirk jumps up a bit, smacking the backside of his head against the
high-bar of the sand rail, and growling, "Motherfucker.", before turning around. He states, flatly, "Oh. It's
you.", before taking a harder look at the girl and stating again, this time more smooth, "Oh. It's..you..".
Already it could be told that Dirk Hasslehoff is a male that could no less male than the most typical male in
the entire region of Cairo.
Holiday laughs, pulling a pair of obnoxious and scuffed aviators from the pocket of her sand colored cargo
pants. "It is infact, me. And you must be the man of the hour…I'm Holiday." She puts the sunglasses on and
extends a hand.
"Yeah. Dirk Hasslehoff. I just got in this morning. I guess we're going to go and check out the factory.
And see where it's weak at..". He walks past the girl, smacking her on the ass as he drops a wrench onto the
table, "Hope you brought something to protect from the sun. It's a real bitch..".
Holiday spins around and immediatly punches him in the shoulder. "Don't." The teen then looks into her
knapsack pulling out a big bottle of SPF 60 and a widebrimmed hat. "Yeah this is what I could scrounge up.
Where'd you come in from?" Definatly she seems more curious then annoyed.
"Make me.", Dirk responds, in a firm manner, but he doesn't seem mad. He takes a second to arrange the tools
on the worktable, before grabbing the top-jacket to his desert camoflauge, and slipping it on, "That'll do.
The hat isn't going to stay on. Here..". A bandana is jerked from his pocket and tossed to the girl as he
passes her, making his way over to the sand rail and removing a second, similar piece of material from it's
glove compartment.
Holiday sighs, thinking it's positivly too hot out here to fight…argue…whatever. She looks at the sand
rail, unsure. "That thing isn't going to roll over and crush us. Right?" Moving towards the vechical she
countinues to survey it. "You want to tell me a little bit about yourself? My mom always told me never to get
into dunebuggies with strangers."
"Relax. I do this all of the time. Your mom was a smart woman. I hope she was as good looking..", Dirk
states, grinning at the girl and slipping into the vehicle, where he begins to fasten himself in using a
six-point harness system, that same which has been installed in the passenger side as well, "This shouldn't
take us too long. It's fairly routine. At least for me..".
Holiday shakes her head, climbing into the sand rail. "Ok…thats good. Why's it routine? I mean you didn't
kill the actual person I was supposed to meet and this turned into a weird DeathProof thing….right?" She
sits down and begins to snap herself in besides.
Dirk Hasslehoff gives the girl a long, blank stare, before blinking. He must not be the sort to watch
movies, "..It's routine because I do this shit all of the time. Babe, I eat surveillance for breakfast. Get
in the rail. Jesus..". He starts to wrap the bandana around his head, giving it a tight knot in the back and
making sure that it won't blow off, "It's not like it's going to eat you or something. Can't say the same for
me, though.".
Holiday does the same with her bandana. "Alright Dirk. I'll trust you. Wait…what who's eating us now? I
don't want to be and I definately don't want you to be. I don't know how to drive."
"It's easy. There's a gas pedal, a brake, and a wheel. You just have to remember that the brake is
useless..", Dirk admits, clicking in the last two sections of his harness, and then reaching beneath the seat
to pull out a small canister. Inside of it is packed with thick, black grease, which he proceeds to underline
his eyes with, "Take some of this too. It'll deflect a lot of the sun. Help you see better..".
Holiday stares at it incredulusly. "Go team sneaky snake." Dipping her index finger into the goop she does
the same. Wiping the excess on the bottom of her foot she offers the can back. "Gas brake….no brake. Wheel.
I think I've got it."
"Yep. That's all there is too it. You can try when we get out away from the things that you might run over.
I don't trust women behind the wheel. At least, in close proximity to …stuff..", Dirk taunts, before
slamming his boot down into the gas. There's a horrible little second of utter stillness before the sandrail
lurches forward, going from no speed to high speed and tearing out of the garage, into the desert of Cairo.
Holiday hugs her legs in fright. "Holy shit!" She squeals her head almost smacking the metal in front of her.
After a moment of bouncing terror she looks up. "This beast shouldn't be able to do that." There is another
stretch where she just watches as the dunes fly past. "Ok…I take it back this is fucking sick."
"Yep. I love them! Work on them all the time! It's the only reason I agreed to come to Cairo!", Dirk calls
out, talking over the whipping wind of the heated desert. The ride gets a bit more smooth past the garage and
out on the dunes, not being quite so jumpy, even if it has a lot of ups and downs, "You bring a map of where
this place is?", he asks, loudly.
Holiday reaches into her knapsack and pulls out a plastic tube, filled with paper. "I DID IN FACT!" She
shouts back ducking her head so that the paper doesn't blow off.
"Well, where are we going then, sugartits?", Dirk Hasslehoff calls out, jerking the steering wheel to the
left and causing the rail to shudder and glide in that direction, throwing sand up behind it in a beautiful
wave of artwork.
Holiday squees a bit, ducking her head down once more. She then begins to yell out longitude and latitude
numbers, hoping them to be excedingly helpful. "HEY You leave the mosquito bites out of this."
"Are you kidding me? They should never be left out of anything..", Dirk teases, hitting the gas harder as
they climb up a dune, practically flying right over it's side and hurtling through the air for almost thirty
feet. Both are jerked forward when they hit, but between landing on sand and being harnessed in, it could be
worse. This finally puts the sun at their backs, and makes it a bit easier to see just where in the Hell they
are going.
Holiday screams, not being warned about this at all. "Better then freaking Disney world!" Keeping a firm grip
as she's thrown around but all matter of physics. "I'm really glad we have these super seat belts!!"
"Shit! Dirk's got more rides than Disney Land, candypants!", the Get Kinfolk calls out, cranking the wheel
again and pointing them in the direction that the Gnawer had read out, using the compass that's been velcro'd
to his small dash in order to keep them on track, "So. What got you stuck in a shit mission like this one,
out in the armpit of the world?".
Holiday raises an eyebrow, between having her head, shoulders and anything not activly strapped down rattled
and thrown about. "I….I…don't actually know. My brother might have had something to do with it, or
something. But they definatly tried to kill my Alpha because her mate blew the shit out of one of their
shipments. Taxi…lined in silver. Sniper. Land mines. You know-" Her whole front lurches forward and then is
slammed back. "The usual!"
"Yes'm! The usual!", Dirk cries, as the pair of them slide across a dune, tossing up waves, and then hit a
second one and go right over the top, "Brother, huh? What's he got to do with any of this? He work at the
Factory, or what?", he asks, knuckles going white as he grips the steering wheel of the rail.
Holiday shutters, the wind almost getting knocked out of her. "No….uh not exactly. He went a little
bonkers, if you will, apparently started dancing with some partners me and my family don't want nothing to do
with. I think Grace-of-Moonlight might have killed him. I just….don't want to know." Coughing a bit as she
gasps for breath. "Keep moving forward! You know?"
The sandrail comes to a sliding halt right on the side of a dune, and suddenly, the world of chaos and
speed is no more, replaced with the hot desert air and the sun to their back, even if it is beginning to sink
down and lose it's grip, "Ouch. Dancing, huh? That's the worst. I had an Uncle who danced. Had to kill him
myself. Not much fun..". He pulls a cigarette out of the dash, putting it between his lips, "But. Stupid
fucker shouldn't have made the decision. All his fault..".
Holiday smiles at him, head jerking forward from the sudden stop. "That's a good policy, some people tried to
blame us for what he did. But no one forced him. He killed my dad." She sheilds her eyes from the sun with
the help of her aviators, sliding them on and hooking them behind her ears. "So if he's not dead I'm hoping I
can end this myself." Her hand reaches up and wraps around the small chunk of polished amber hanging from her
neck.
"Oh, wait..", Dirk pauses, pulling a pistol from the dash and slamming a clip into it. Cigarette still
clutched between his lips, he states, "You were talking about dancing the Spiral, huh? I was just talking
about dancing..". There's a roguish grin sitting just above his manly, square jaw as he unfastens the harness
with that sudden little twisted revelation.
Holiday laughs, unable to think about anything else to do. "Yeah." She tugs at the straps uselessly for a
moment then flips the latch that ends her imprisonment in the sandrail. "Sorry, I'm more used to people using
the same code I am" She peers over the edge not quite ready to get out of the dunebuggy. "Now what?"
"Jesus. I was kidding, you sicko. I would never kill my Uncle for being a dancing faerie..", Dirk
Hasslehoff points out, throwing one leg over the rail and getting out, before he trudges through the sand and
to the 'trunk', which is essentially a really large toolbox, "We're going to be out here for a bit. You don't
need anything, do you? Coffee? Tea? Me?", he asks, flipping up the lid before flashing her a Hasslehoff grin.
Holiday smirks. "Hahah. You thought I thought you were serious. Awesome." Climbing onto the side of the rail
and leaping into the dune, her backpack falling to the side. "You're not going to stop are you?" She takes a
huge water bottle out of her bag, holding it by it's own handle. "Though I must admit it's a pleasent change
from the ever present 'WE'RE GUNNA DIE' and kinfolk sass. Not amusing kinfolk sass." She smiles at him. "Need
any help?"
"Babe. Dirk Hasslehoff does /not/ stop. There's a reason I didn't put a brake in this contraption. No use
in moving anywhere but forward..", the Get Kinfolk brags, pulling a tripod out of the large toolbox, and
starting to extend the legs, "Unless you're having sex. Then there's some backwards moving, but, you know,
that's just a part of sex. Which we could be having after we record this information..".
Holiday takes a long drink of her water bottle before staring blankly at him. "That's not going to happen. So
call me Candypants all you want." Squinting into the horizon. "I can't even see anything…is that the
point?"
"Yep. Denial. That's the first sign of having caught a case of The Dirk. Women just can't comprehend it..",
Dirk explains, seeming all too serious about the concept. He plants the tripod in the ground, before pulling
out a black case and flicking it's lid open too. Inside, there is a rather expensive looking camera, "And
yeah. That's the point. I don't want them to see us. We'll be able to see them, though. Trust me..".
Holiday shakes her head, pulling a $3 disposable camera from her pocket and snaps a picture of him. "For the
'I went to Egypt and all I did was get fleas and play in a big sandbox' scrapbook." Suddenly glad she didn't
wear a dress as originally planned she moves towards the top of one of the dunes, getting another picture of
him, the sand rail, and the tripod. "That's a keeper."
"Hey, babe. I offered more than that. You're the one who just wanted the bad parts of Cairo..", Dirk
Hasslehoff accuses, holding his hands up in an 'It isn't my fault' fashion, before going back to setting up
the camera, which doesn't seem to be as simple of a process as it should be, "It'll be dark soon. Should be
cooling off a bit.".
Holiday strolls down the hill for, oh maybe three steps before she faulters and falls/slides the rest of the
way down. ALMOST managing to not look like a total idiot. "Not really and I don't qualify this as the bad
parts of Cairo. Haven't seen the other parts. Plus I don't have to have fleas here Sieg lost our present to
the cearn in Customs coming out of Holland." Countinuing her stroll over to him she watches the man, amused.
"It's Cairo, Boobookittyfuck. It's all the bad part. It's just a fucking desert, with people who don't
speak English, are too good at haggling, and don't want to deal with you anyway. And. More tourists than
Cancun..", Dirk states, allowing his fingers to work over a button or two on the small camera, while he takes
a step back to peer at the LCD screen on the backside of it, "Fleas huh? That's sexy.".
Holiday shakes her head, brushing the sand off her ass. "Not nearly as sexy as one might expect. Why the hell
would anyone want to willingly be out here? I can understand why they built this place where it is, you can't
find it without a map and who really has a map that goes into the desert for no reason?"
"People who want to blow up the people who didn't want to get blown up..", Dirk Hasslehoff states, putting
his profuse amounts of logic together in order to come up with such a response, "And we're out here,
Huggybuns, because we are the people who are going to blow up the people that don't want to get found. But
not tonight. Tonight, we're just going to be peeping toms..". A hand is brought to his solid jaw, as he
watches the LCD screen.
Holiday moves toward the camera leaning down in the failing light to see what there is to be seen. "Thats
good. As being roadkill or kidnapp-ies wouldn't be something I'd be super fond of. What're we looking at?"
"Yep. We're not here to be roadkill. Just corporate perverts..", Dirk explains, tapping a small dot on the
LCD monitor, "That's the target, doll lips. It's way out there..". His hand works over a small knob on the
camera though and the image flashes forward until it seems as if the pair of them are just a hundred feet
off, "..And that's the target..bigger. Sexy, huh?", he asks, swatting her in the ass again.
Holiday eeps, looking at the screen still. "Uh, yeah, sure. I however doubt they will be doing any nefarious
deeds out in the open. So it's just a matter of who's standing guard out on the perimeter?" She stands up,
only half glaring at him. "And I bet your ass slapping is supposed to be ruggedly charming right?"
"Pft. I don't care if you like it, as long as I get a handful. But it does strike me as charming and
rugged. If I were a girl, I would wish that someone like me would slap my ass..", Dirk Hasslehoff states,
before fiddling with a dial on the camera some more, and allowing it to pan slowly, "You're right though.
We're just getting a look at what's on the outside. Unless you want to go in.".
Holiday hrms for a moment. "These guys don't mess around. I'm sure if they even say us coming they'd pull out
the big guns. ALL OF THEM. Well I'm not possitive but I'm reasonably certain about that." She raises and
eyebrow, crossing her arms under her chest to show off what little chest she has. "Unless, you know something
I don't?"
"Bunny Britches, there is probably a lot of shit that I know, that you don't. Such as how to bring a woman
to orgasm with a foot massage. But that's not relevant to this mission..", Dirk implies, before adding,
"Unless you want it to be. But I think we could get in. It's just a Firearms Factory, right? Can't be that
dangerous. I could call in the rest of the group. Think me, but times fifteen. We get in, blow it up, and go
have some drinks after..".
Holiday shakes her head, only a bit disgusted. "So…if you guys could do that why haven't you already? And
silver bullets might not be that dangerous but it's the little green bastards I'm really concerned about. I
can take maybe two, maybe like four and the I think I'll be down for the count." She pushes the small strands
of hair from her eyes and looks at the screen. "Are those guys getting closer? Or are they diffrent guys?"
"Give me a break. I /just/ got to Cairo. This is the first time that I've seen this place. And we just got
out of the Amazon, doing some mission work there. I'm not a miracle worker, Kitten Pants, I'm just a Kinfolk.
But we could do it..", the Get Kin explains, adjusting the camera some more and continuing to watch the LCD
screen this whole time, "You're the Fostern though. Even if you look like a Pup. So I'll leave the call to
you, Honeypot..".
Holiday shakes her head, making her decision. "Then no. I know what they have in there and while I have no
doubt in your skills in combat one of those itty bitty green bullets they have took out another fostern twice
my size. However with you're guys and my pack and this other pack. We could do it. No problem." She too
watches the screen, standing just slightly beside him. "I'm more worried about them bringing the fight to
us."
"Your call, then. Heard. Now go get me the gun that doesn't look like a gun, over from that case. It looks
like a potato launcher..", Dirk urges of the Fostern next to him, while keeping his attention on the LCD
screen and on the happenings of it, "I need to get some aerial footage of this. It'll make shit a lot
easier..".
"Yes'm. That'd be the one. Just uh. Point it in the air. Angle it bit toward the factory, and pull that
trigger. Don't hold it against your chest. Damaged goods are of no use to me..", Dirk states, giving the
order as he leaves the camera go walk over to the trunk of the sandrail and pull out a small, very odd
looking piece of black plastic with an antennae on it. This, he plugs into the side of the camera.
Holiday holds it over her shoulder, attempting to use it like she excepts it to work, like she's seen in
movies. "Like this?" She asks tenitivly, holding the thing and looking like a child.
"Yep. Just pull the trigger now. I'll grab that camera though first, and get a picture for your scrapbook.
Unless you want to hold off, and we can try it naked. That would be a picture for the grandchildren..", Dirk
taunts, walking over the Holiday and fishing the camera out of her pocket, but not before getting a bit
grabby-handed. As he stalks back through the sand then, he adjusts something on the expensive,
mission-camera, before turning around and using the cheap one to get a picture of the Gnawer.
Holiday laughs quietly, attempting to aim it but then she gives up and simply fires it. The blast not quite
shaking her.
Dirk watches the woman fire the silent, darkened flare into the air, and as she does so, he switches views
on the LCD monitor, causing it to change over to an aerial shot of the roof, "Perfect. I hope you can fuck
like you can shoot. That would be fantastic..". The Get Kinfolk seems still to be stuck in his own little
world, doing reconnaisance and daydreaming, "We should be good to get out of here soon..".
Holiday laughs, bringing the 'not a gun' back to the case. "You know I've heard of cases where people have this
type of tourettes where they can't stop talking about sex, like they want to talk about the weather but they
can't. You don't, by chance, have that do you? As that would make much more sense." Shivering slightly she
sighs. "This place is so crazy, on minute blaring heat of death the next minute sandy ice box."
"I don't talk about sex a lot. When I'm around people I don't want to have sex with. But we're in a cold
desert in the middle of the night. It's a given..", Dirk points out, removing his jacket of desert
camoflauge. He fishes the cigarettes out of the front pocket before tossing it to the girl, and then lighting
up, "I'm not sick. I'm just male. It happens..". It's dark enough now, and so far out in the desert that the
only lightsource is the small LCD screen and the glow of his cigarette cherry.
Holiday sits down next to him, swinging the jacket over her scarred shoulders. "Jeez, that place is big." She
winces for a moment at the thought of all the people in there, with guns. "I will pretend I still want to do
this. The amount of guys with guns that shoot death in there is freaking me out a little."
"Psh. It's all about planning. We have the advantage. Since we know they're here, but they don't know we're
here..", the Get Kinfolk states, thumping the side of the camera with his thumb as the aerial pictures fades
out for just a second, "Besides. You're with Dirk, babycakes. I wouldn't let you get hurt. Dirk doesn't dig
half-women..".
Holiday smiles a bit. "I don't want anyone to get hurt. We have lame kinfolk with us. And a pup. Thats the
real thing I'm worried about. But rawr Garou Nation smiting evil and what not. It'll be fine." In the dark
she smiles a bit, though there is a look of concern that falls on her features for just a second as the
picture fades out. "Is it blinking like that normal?"
"Lame Kinfolk are the worst. Turn 'em into useful Kinfolk. I wouldn't advise bringing anyone that can't
handle their own, though. That's a good way to get killed, having to watch out for other people who can't do
it themselves..", Dirk Hasslehoff brings up, thumping the camera again, "Something must be going overhead.
Getting a bit of interference. Nothing to worry about, Cuppy-Cake.".
Holiday nods looking up. "I like that one Cuppy Cake. That one is acceptable. You know you're not too bad
once I get used to you. Better then being out here alone." Her eyes countinue to stare at the skies.
"Pft. You would like the worst one of the lot..", Dirk Hasslehoff admits, taking a long drag off of his
cigarette, before pushing it into the sand to allow the dunes to hold it for him, "Don't go getting nice on
me. I hate women who don't fight it. It's just not a good sign..". His hand clicks a switch on the camera
back and forth a few times, and it flashes just once, "..This place is pretty big. We should just hit it with
missiles..".
Holiday laughs again. "You guys have missiles? I'm glad I'm on your team. I think." She stands up, taking her
camera and winding it up again. "I'm not going to get any good pictures now. Plus I'm sure the flash would
give us away."
"Flash all you want. By all means. We're about a mile off. No one is going to see it. Flash /whatever/ you
want. I don't kiss and tell..", the oversexed Get Kinfolk responds with, pulling a rather massive combat
knife from his boot, and using the very tip of it to clean some of the dirt from beneath his nails, "We've
got missiles. And a whole shitload of tactical weaponry. We /are/ mercenaries..".
Holiday laughs and takes two pictures of the sky about them, rapid fire like. "If you let us have some
missiles I'd ever flash you!" She laughs, not totally joking though.
"Well. We have the missiles. And we're working for you. So you have the missiles. But when we go to start
turning the place into a pile of rubble, I'll show you how to fire one off. Trust me. I'm an expert at
showing women how to fire weapons of mass destruction. It's just an innate talent..", Dirk Hasslehoff
explains, making it a point to watch the woman as if he expected to be flashed, "It's just a part of the
job..".
Holiday shakes her head. "After I get to blow something up. Deal?" She turns her gaze back to the LCD screen.
"So charging the place is out of the question. Popping in through the umbra with get us bumfucked by some
banes which is personally my least favorite possibily." Her tone doesn't betray any fear she might have of
the situation, it just sounds almost bored listing off non-good ideas.
"Deal. Don't be a bitch and sneak out on it though. I've got Elephant for a totem. I never fucking
forget..", the Get Kinfolk taunts, before pushing to his feet and trudging a few steps back from the sand,
"Up to me, I'd just sit back here and wipe it out. But I guess some people are concerned that there might be
people in there that need rescued. So I guess we have to go in at some point. I'll probably get us some fake
identification, and suits. It'll be easier to get in like that. When we get them out though, then..we blow
shit up. And I get to see those titties..".
Holiday laughs again, almost a bark really. "Suits. Good idea. Fake I.D.s. Even better idea. I guess that
sets me in the second wave. I'm too short to really look like I belong. Even Scully was 5'5"." Standing up
she paces up the dune, getting a better (not really at all) look first hand.
"You're going. Your pack has three Fosterns. Which are shitty odds. So you can't get out of it. We'll guss
you up like a captive, if you want. Or a prisoner. Or my pleasure slave..", Dirk Hasslehoff, Kinfolk of the
Year states, walking over to the toolbox on the back of the sandrail, and rummaging through it, "If it's the
last one though, we might have to rehearse a bit. Difficult role..".
Holiday smirks. "I can play hostage. I've been one before. It's not hard. Flail, curse, spit. Repeat." Her
gaze drifts back to the sky more for the stars then anything else. "I don't think some scary bussiness man
would be taking a pleasure slave to a weapons deal. But what do I know….right?"
"Hey. I don't know. If I was a business man though, I would definitely have a pleasure slave. But who can
tell. We'll just do the captive thing. I'll find out more about how the operation in there runs..", Dirk
admits, not seeming to find whatever he's looking for, "You ready to head back? We're going to leave the
camera here. It'll transmit back to my warehouse. We didn't have to sit out here. I was just trying to get
laid..". With that, he climbs into the passenger side instead of the driver's side.
Holiday stands up again, brushing the sand off her back again. His coat almost falls off as she does but she
holds onto it, sticking her arms through the holes allowed for them. "Sorry to dissapoint…hey…what're you
doing?"
"Pft. You didn't disappoint. You just delayed the inevitable, is all. Dirk Hasslehoff doesn't give up.",
the Get Kin states, before starting to buckle himself down into the passenger seat with the six-point
harness, "I'm putting on my safety belt. Two things I never forget around women - Condoms and Seatbelts. So
get in. I showed you how to drive earlier..".
Holiday sighs, climbing into the sand bar drivers seat. She then begins to buckle at the parts of the
harness. "I'm glad we have these…we'll need them. So gas….no brake…wheel. Right?"
"Yeah. I agree. We're going to need them. Just don't flip the thing over..", Dirk implores, reaching over
and using a hand to severely tighten the harness that is wrapped around the woman, even if he does manage to
grope her as well under the guise of 'helping', "That's the extent of it. Gas. Brake is useless. Steering
wheel. Point it back to where we came from. Don't run over the camera, naughty nipples..".
Holiday giggles, the last nickname drowned out as she guns it, steering the dunebuggie in a wide arch around
the camera and towards the rolling, bouncing, terrifying path from which they came.
"You're not going to find our tracks to follow! Wind blows 'em over! Just use the compass!", Dirk calls
out, talking over the rushing night air and the sound of the sandrail's engine, "And don't try and ramp
anything!".
Holiday holds onto the steering wheel like it's going to bite her and alternatly like it's the only thin
keeping her from bouncing out of this thing. "WEST?! RIGHT?" Gunning the engine a bit in a steady climb up a
dune. "WHAT'S RAMP MEAN?!"
Rather than responding, Dirk grabs a pair of red-lensed goggles from the glove compartment of the sandrail,
and straps them onto his face, "Never mind! Just drive!", he calls out, his knuckles straining against the
death grip he's putting on the bars of the vehicle.
Holiday squeals, foot pressing full on the gas. "You sound less then amused. We alright!?" Her head twitches
as if she wants to look behind but knows she can't. The vechial tumbles over the top of the dune, unharmed
"Nope! We're good! We'd be better if we were nak—..", Dirk starts to assure his female driver, before
something just on the other side of the dune darts out in front of the headlights. It's not massive, but it's
large enough and solid enough that being at a downward angle, the buggie hits it and does a straight flip
right over, landing on it's top in the soft sand. Whatever was hit screeches an ear-splitting sound, and
hisses in pain.
Holiday screams, flailing to get out of the restraints. "You ok? Dirk?! What the fuck was that?" Her voice
not quite edged in panic but near it. The clicking of one of the restraints is heard as she drops slightly
closer to the sand and sets to work on the next. "Get ready to drive."
"Yeah. I'm fine. Except that we're upside down, Princess..", Dirk Hasslehoff grumbles, now easily heard due
to the unnatural silence of being this far out in the desert. He grunts, also working to get out of his
six-point harness, managing to get half of it down, each click lowering him closer to the dune beneath him.
Just twelve feet or so behind the pair of stranded warriors, a shuffling can be heard in the sand, the
sounds of something getting to it's feet. There's another screeching cry of pain and anger, along with a
distinct, hard clicking noise, but neither are in a position to make it out for what it is, with their
headlights, and in fact their bodies, facing in the wrong direction.
Holiday clicks the remaining two points of her harness, falling with a soft thud to the ground. She gets up,
enough to crouch looking up at Dirk in the mostly darkness. "Working on it…" She whispers, peering through
the space between the seats as low to the ground as she can be. "Sorry about the jacket in advance."
"You take that fucking thing off if you're going to shift. Those aren't cheap, and I've got fourteen kids
to feed..", Dirk Hasslehoff orders, also managing to get his harness undone, which lands him in the soft
embrace of the sand. In just an insant, he's worked a pistol out of the glove comparment, and a large combat
knife is drawn from his boot.
The whole backside of the sandrail is shaken as the feature of a massive pincer comes into view, grasping a
steel bar and using it for leverage. That clicking sound is still ominous, so close as it is, but being
beneath the vehicle, neither of the pair can make out, still, just what sort of weird sandcreature might be
on the other side.
Holiday is already wiggling out of the jacket, tossing it on the ground beside Dirk. "….what the- I don't
even fucking care." Her form shifts, getting just before full on were-death beast. Holiday now struggles to
keep her head from smashing against the seat. "This is fucked. Crab Boil any one?" The teen asks, smirking in
"Yeah. Or whatever. Fuck it..", Dirk declares, before pushing a foot into the vehicle and using the force
to roll out from under it. As he does, a very large, very sharp scorpion's stinger barely misses him, burying
itself in the granular earth. He comes to a rest on one knee, gun whipped up and aiming, but mutters, "Holy
Mother of Hell".
Holiday rolls out from the rail as well, all humor gone from her features. "Uh, yeah that." She manages
before shifting into war form and lunging at the stinger attempting to twist it off at the end.
Dirk Hasslehoff watches the head of the thing from down the barrel of his pistol, before firing off a shot
at it, perhaps hoping to just splatter it's forehead across the desert.
With the pair of them out from under the sandrail now, Dirk and Holiday can make out the full glory of what
has been set upon them. Ranging about the size of the sandrail itself, is a scorpion with all of the typical
scorpion-esque features; minus the fact that it has the 'head' of a dog, and one of it's legs has been
replaced with the arm of a grown man. Dirk's shot seems to just ricochet right off of the armored carapace of
the beast, while Holiday gets it's stinger in a grapple, but doesn't manage to twist it off.
As the creature lets out another bloodcurdling screeching sound and darts forward with it's massive claw,
Holiday is far quicker with her war-honed reflexes of the Crinos form. She thrusts the grappled tail in the
direction of the imminent appendage, and with a snip, it severs it's own stinger right off, causing the
remainer of the tail to thrash violently. Dirk Hasslehoff, still on one knee in the sand, takes another
careful aim before squeezing off a shot at the dog-like head of the beast, taking one of it's erect ears
right off and splattering it's carapace with dark, ichor-like blood.
Using her rage to fuel her farther and faster than the Get Kinfolk could ever move, Holiday leaps upon the
back of the weird, monstrous creature and growls with a fierce sound as she stabs it's face with her massive,
Crinos talons. It's not pleased with this, and begins to thrash. It, too, moves fast enough that it would be
unnatural, but with it's stinger gone, nothing more than a stump hits the female in the back. This doesn't
hurt her at all, but is enough to shoved her off and into the sand.
In about the same instant, these things happen - Holiday springs into action, curling up into a ball and
rolling back like a drunken monkey, and digging her massive claws into the unarmored flesh of the beast's
leg. Dirk Hasslehoff does the same thing, but minus the rolling and clawing. Instead, he lunges at the head
of the thing and shoves his knife right in. It shudders again, flailing at all of the attention and
screeching with an inhumane sound. Another sickening thud is heard as it's useless tail tries to sting the
Kinfolk, before it falls over dead, and coincidentally, upon the werewolf beneath it.
Holiday roars, pushing the cooling corpse of the beast off her and rolling out from beheith it. Her form
moves toward the over turned Sand Rail, stooping out of habit. Grabbing the cage rail and the sturdier one
connected to the bottom of the frame, then attempting to right the vechical.
"Yo, sweetcheeks. Hold up. Let me help..", Dirk Hasslehoff calls out, scrambling to his feet and moving
over also to grab hold of the sandrail and help flip it over. They both manage it fairly easily, mostly due
to her, "I think I'll drive this time. I think I'd like to survive the trip back. Call me fancy..".
Holiday slips back into Homid, totally naked save for a pair of green and blue 'Incredible Hulk' underpants.
"Good plan. Hold on. I want to grab something for Charlie." Covering her breasts with one arm she moves to
grab the giant stinger, tossing it into the back of the dunebuggy. "That thing came out of nowhere…sick."
Dirk Hasslehoff moves to fasten himself into the driver's side of the sandrail, but not before letting out
a dire wolfwhistle at the sight of the half-naked Garou in her unique undergarment, "..You can grab that
jacket again. Don't worry. Yours aren't the first or last set of titties to rub inside of it..". He grins a
manly grin at the girl, not even questioning her collection of the giant stinger, "Get in. I don't want to
get caught up by anything else that looks like that..".
Holiday pulls the jacket and her sunglasses out of the sand and puts them both on. "Agreed. That thing almost
ran you threw. And that would have sucked." She says the last statement, buttoning up the jacket and then
working on her harness, getting the hang of it now. "That's going to be a sweet…fuck how am I getting THAT
through customs…"
"Ship it back. Jesus. Calm down. It's not like it's a weapon of mass destruction..", Dirk assures the
woman, pulling out a cigarette and sparking it up. He sits there for a minute, letting her get fastened it
and having a smoke. When she is secure though, he tacks on, "Those are strapped to your chest..", before
slamming his foot down on the gas and speeding them off into the desert of Cairo once more, this time with
only one functioning headlight.
SCP Alapítvány
Magyarnyelvű ágazat


Conference Table – Brothers Furniture Ltd.
The executive's tables are made of solid wood (Red Oak & Process Wood) for strength and sturdiness. Made By: Solid Wood & Process Wood Veneer, Lacquer Polish.
The executive's tables are made of solid wood (Red Oak Wood & Process Wood) for strength and sturdiness. Made By: Solid Wood & Process Wood Veneer, Lacquer Polish.


WASHINGTON — Videotapes of insurgent attacks in Iraq have become a potent propaganda tool for militant Islamists but also a handy training aid for U.S. forces, according to Army briefing documents being given to officers deploying for duty in Iraq.
Insurgents routinely videotape their attacks and sometimes post the footage on the Internet as propaganda to show tactical victories against U.S. convoys or helicopters.
A briefing report prepared by the intelligence division of the Army's Training and Doctrine Command shows how the Army is mining the insurgent tapes for ways to avoid casualties.
"Insurgent videos have grown complex and sophisticated, with detailed graphics, English subtitles, English narrators, Jihadist 'humor,' and insults directed at the coalition to weaken (coalition forces') resolve and popular support," the report says. The document warns U.S. soldiers that "any non-media or not-CF (coalition forces) personnel with a camera should be considered suspicious."
The briefing is presented in the form of PowerPoint slides that have also been shown to soldiers deployed in Iraq. It offers insights into insurgent tactics with the help of videos and photos taken by the insurgents.
One, taken Aug. 10, shows an Army supply truck passing a homemade road sign that concealed a bomb. Then the tractor-trailer is obscured by a fiery blast. The briefing warns that some roadside bombs are "victim-activated" — meaning that the motion of a passing vehicle sets off the explosive.
The thrust of the report is to show Army officers how and where Americans are dying.
The briefing report says 55 percent of U.S. military deaths in Iraq are attributed to roadside bombs and small-arms attacks. It says 59 percent of U.S. military deaths occurred in Baghdad and Sunni-dominated Anbar province, which runs from just west of Baghdad to the Syrian border.
Designed to help soldiers know what to expect and how to counter insurgent tactics, the briefing also warns that Iranian-backed Shiite militants as well as Iraqi Sunnis and foreign Sunni fighters are regularly mounting attacks.
Maj. Mark VanHout of the Training and Doctrine Command, based at Fort Monroe, Va., confirmed the authenticity of the report, which is unclassified but not released publicly.
Training commanders had asked for the report to give officers "a statistical analysis of what enemy tactics, techniques and procedures kill most soldiers," according to Gary Phillips, a threats specialist at the command's intelligence branch at Fort Leavenworth, Kan.
Phillips, a retired Army colonel who travels to military bases around the country preparing officers for duty in Iraq, says the roadside bombs are the most worrisome threat.
"They continue to move forward in how they're emplaced, how they're configured and how they're used," Phillips says.
His son, Army Capt. Dustin Phillips, deploys to Iraq later this month to train Iraqi police. The father told his son: "Don't let complacency set in. Don't think everything's copacetic. There is no safe spot."
The briefing characterizes insurgents as difficult to find, let alone defeat, and able to change their tactics.


text:
Trial Of IPOB Leader, Nnmadi Kanu, Continues As He Is Re-arrested- Justice Minister
by Online Editor | June 30, 2021 7:30 am
The Attorney-General of the Federation and Minister of Justice, Abubakar Malami (SAN), has said that the self acclaimed leader of the Indigenous People of Biafra, (IPOB) Nnamdi Kanu has been apprehended by operatives of Nigeria's security intelligence.
Nnamdi Kanu, leader of Indigenous People of Biafra (IPOB) has been re-arrested and "brought back" to the country to face trial, the jus tice minister said Tuesday.
Kanu's outlawed movement, the Indigenous People of Biafra (IPOB), which agitates for a separate state for ethnic Igbos in southeast Nigeria, is accused of fomenting violence, something which it denies.
Kanu disappeared while on bail in 2017 and his recent whereabouts had been unknown.
Justice Minister Abubakar Malami, who is also attorney general, said Kanu was arrested on Sunday but gave no details about the location.
"Nnamdi Kanu has been intercepted… He has been brought back to Nigeria, in order to continue facing trial after disappearing," he said in a statement.
He faces charges "bordering on terrorism, treasonable felony, managing an unlawful society, publication of defamatory matter, illegal possession of firearms," Malami said.
A lawyer for Kanu confirmed the arrest.
"He was brought before the Federal High Court… Tuesday on an eleven count charge, though without our knowledge," Ifeanyi Ejiofor said in a statement.
The lawyer said Kanu was entitled to a fair trial and that his client's safety should be guaranteed throughout the process.
"No matter the gravity of the offences or charge preferred against him… the Constitution still presumes him innocent," said Ejiofor.
Kanu first started launching virulent diatribes against Nigeria from London, where he settled after his studies and founded a campaigning radio station, Radio Biafra, in 2009.
He worked in real estate and campaigned on the airwaves at night. For a time he was a member of another pro-independence group, the Movement for the Actualisation of the Sovereign State of Biafra, or MASSOB.
He left that organisation and founded IPOB in 2013, saying his aim was "civil disobedience until we get a referendum (on self-determination)," calling it "the only way forward."
Two years later at the World Igbo Congress in Los Angeles, Kanu crossed a line with an apparent call to take up arms. "We need guns and we need bullets," he said.
He was arrested during a visit to Nigeria in October 2015. His detention sparked mass protests and clashes with security services.
In December that year, President Muhammadu Buhari alleged Kanu had committed "atrocities" against Nigeria.
Kanu was released on bail but disappeared in 2017, resurfacing in Israel and then in Britain.
Kanu appeared in a court in Abuja on Tuesday, where Judge Binta Nyako remanded him in custody until his trial resumes in July.
"He has, upon jumping bail, been accused of engaging in subversive activities that include inciting violence through television, radio and online broadcasts against the Nigerian state and institutions," said Malami.
Southeast Nigeria has seen a surge in attacks in recent months, with around 130 police and security officials killed and around 20 police stations attacked this year, Election offices have also been attacked.
IPOB has denied being behind the violence, accusing the government of a smear campaign.
Calls for a separate state of Biafra are a sensitive subject in Nigeria, after a unilateral declaration of independence in 1967 sparked a brutal 30-month civil war.
More than one million people died, most of them Igbos, from the effects of conflict and disease.
The pro-Biafra agitation is one of many security challenges facing Buhari, a former army general.
← Senate To Start Considering PIB Tomorrow – Senate President Chevron To Put $1bn Assets Up For Sale →

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Autohide not working well with 3 panels I have 3 panels.
When I set each of them to autohide, only one panel shows when I hover the mouse over it.
Is there a way to have it show all 3 panels?
Ubuntu-Mate 18.04

redpajama_set_name: RedPajamaStackExchange


text:
Paloma Faith sings 'Picking Up the Pieces' on The Graham Norton Show
One of the best concerts that I went to in Dublin over the past few years was Paloma Faith in the Iveagh Gardens here in the city centre. At the time she was touring with her album Do You Want the Truth or Something Beautiful? Each song was a little show in itself. She is a really great music artist to see in concert as it's all about the look and the drama of the songs and her banter was great too. At the time New York was her big song and now in 2012 her most recent single Picking Up The Pieces from her second studio album Fall To Grace is becoming just as well known.
Candi Staton sang before Paloma at that concert in the Iveagh Gardens and I always say that she co-headlined that concert because it was amazing to hear Candi sing all of her wonderful famous songs such as You Got The Love, Suspicious Minds and Young Hearts Run Free.
I always think that when Emeli Sande sang Next To Me on The Graham Norton show that that was her big career changing moment. I love the way that Graham features one big song on his show just like Michael Parkinson used to do. Picking Up The Pieces climbed back up 5 places on the UK singles chart to number 14 on Sunday and I think it was partly to do with her performance on the show.
Here is her performance of Picking Up the Pieces on The Graham Norton Show.
Here also is Paloma singing New York on the Friday Night with Jonathan Ross show in 2009.
The Thomas Donoghue Band
Black Heart (The Remixes) - Stooshe
Paloma Faith sings 'Picking Up the Pieces' on The ...


text:
"""
mobility.py: mobility helpers for moving nodes and calculating wireless range.
"""

import heapq
import logging
import math
import threading
import time
from functools import total_ordering
from pathlib import Path
from typing import TYPE_CHECKING, Callable, Dict, List, Optional, Tuple, Union

from core import utils
from core.config import (
    ConfigBool,
    ConfigFloat,
    ConfigGroup,
    ConfigInt,
    ConfigString,
    ConfigurableOptions,
    Configuration,
    ModelManager,
)
from core.emane.nodes import EmaneNet
from core.emulator.data import EventData, LinkData, LinkOptions
from core.emulator.enumerations import EventTypes, LinkTypes, MessageFlags, RegisterTlvs
from core.errors import CoreError
from core.executables import BASH
from core.nodes.base import CoreNode
from core.nodes.interface import CoreInterface
from core.nodes.network import WlanNode

logger = logging.getLogger(__name__)

if TYPE_CHECKING:
    from core.emulator.session import Session

LEARNING_DISABLED: int = 0
LEARNING_ENABLED: int = 30000

def get_mobility_node(session: "Session", node_id: int) -> Union[WlanNode, EmaneNet]:
    try:
        return session.get_node(node_id, WlanNode)
    except CoreError:
        return session.get_node(node_id, EmaneNet)

def get_config_int(current: int, config: Dict[str, str], name: str) -> Optional[int]:
    """
    Convenience function to get config values as int.

    :param current: current config value to use when one is not provided
    :param config: config to get values from
    :param name: name of config value to get
    :return: current config value when not provided, new value otherwise
    """
    value = get_config_float(current, config, name)
    if value is not None:
        value = int(value)
    return value

def get_config_float(
    current: Union[int, float], config: Dict[str, str], name: str
) -> Optional[float]:
    """
    Convenience function to get config values as float.

    :param current: current config value to use when one is not provided
    :param config: config to get values from
    :param name: name of config value to get
    :return: current config value when not provided, new value otherwise
    """
    value = config.get(name)
    if value is not None:
        if value == "":
            value = None
        else:
            value = float(value)
    else:
        value = current
    return value

class MobilityManager(ModelManager):
    """
    Member of session class for handling configuration data for mobility and
    range models.
    """

    name = "MobilityManager"
    config_type = RegisterTlvs.WIRELESS

    def __init__(self, session: "Session") -> None:
        """
        Creates a MobilityManager instance.

        :param session: session this manager is tied to
        """
        super().__init__()
        self.session: "Session" = session
        self.models[BasicRangeModel.name] = BasicRangeModel
        self.models[Ns2ScriptedMobility.name] = Ns2ScriptedMobility

    def reset(self) -> None:
        """
        Clear out all current configurations.

        :return: nothing
        """
        self.config_reset()

    def startup(self, node_ids: List[int] = None) -> None:
        """
        Session is transitioning from instantiation to runtime state.
        Instantiate any mobility models that have been configured for a WLAN.

        :param node_ids: node ids to startup
        :return: nothing
        """
        if node_ids is None:
            node_ids = self.nodes()
        for node_id in node_ids:
            logger.debug(
                "node(%s) mobility startup: %s", node_id, self.get_all_configs(node_id)
            )
            try:
                node = get_mobility_node(self.session, node_id)
                # TODO: may be an issue if there are multiple mobility models
                for model in self.models.values():
                    config = self.get_configs(node_id, model.name)
                    if not config:
                        continue
                    self.set_model(node, model, config)
                if node.mobility:
                    self.session.event_loop.add_event(0.0, node.mobility.startup)
            except CoreError:
                logger.exception("mobility startup error")
                logger.warning(
                    "skipping mobility configuration for unknown node: %s", node_id
                )

    def handleevent(self, event_data: EventData) -> None:
        """
        Handle an Event Message used to start, stop, or pause
        mobility scripts for a given mobility network.

        :param event_data: event data to handle
        :return: nothing
        """
        event_type = event_data.event_type
        node_id = event_data.node
        name = event_data.name
        try:
            node = get_mobility_node(self.session, node_id)
        except CoreError:
            logger.exception(
                "ignoring event for model(%s), unknown node(%s)", name, node_id
            )
            return

        # name is e.g. "mobility:ns2script"
        models = name[9:].split(",")
        for model in models:
            cls = self.models.get(model)
            if not cls:
                logger.warning("ignoring event for unknown model '%s'", model)
                continue
            if cls.config_type in [RegisterTlvs.WIRELESS, RegisterTlvs.MOBILITY]:
                model = node.mobility
            else:
                continue
            if model is None:
                logger.warning("ignoring event, %s has no model", node.name)
                continue
            if cls.name != model.name:
                logger.warning(
                    "ignoring event for %s wrong model %s,%s",
                    node.name,
                    cls.name,
                    model.name,
                )
                continue
            if event_type in [EventTypes.STOP, EventTypes.RESTART]:
                model.stop(move_initial=True)
            if event_type in [EventTypes.START, EventTypes.RESTART]:
                model.start()
            if event_type == EventTypes.PAUSE:
                model.pause()

    def sendevent(self, model: "WayPointMobility") -> None:
        """
        Send an event message on behalf of a mobility model.
        This communicates the current and end (max) times to the GUI.

        :param model: mobility model to send event for
        :return: nothing
        """
        event_type = EventTypes.NONE
        if model.state == model.STATE_STOPPED:
            event_type = EventTypes.STOP
        elif model.state == model.STATE_RUNNING:
            event_type = EventTypes.START
        elif model.state == model.STATE_PAUSED:
            event_type = EventTypes.PAUSE
        start_time = int(model.lasttime - model.timezero)
        end_time = int(model.endtime)
        data = f"start={start_time} end={end_time}"
        event_data = EventData(
            node=model.id,
            event_type=event_type,
            name=f"mobility:{model.name}",
            data=data,
            time=str(time.monotonic()),
        )
        self.session.broadcast_event(event_data)

class WirelessModel(ConfigurableOptions):
    """
    Base class used by EMANE models and the basic range model.
    Used for managing arbitrary configuration parameters.
    """

    config_type: RegisterTlvs = RegisterTlvs.WIRELESS
    position_callback: Callable[[CoreInterface], None] = None

    def __init__(self, session: "Session", _id: int) -> None:
        """
        Create a WirelessModel instance.

        :param session: core session we are tied to
        :param _id: object id
        """
        self.session: "Session" = session
        self.id: int = _id

    def links(self, flags: MessageFlags = MessageFlags.NONE) -> List[LinkData]:
        """
        May be used if the model can populate the GUI with wireless (green)
        link lines.

        :param flags: link data flags
        :return: link data
        """
        return []

    def update(self, moved_ifaces: List[CoreInterface]) -> None:
        """
        Update this wireless model.

        :param moved_ifaces: moved network interfaces
        :return: nothing
        """
        raise NotImplementedError

    def update_config(self, config: Dict[str, str]) -> None:
        """
        For run-time updates of model config. Returns True when position callback and
        set link parameters should be invoked.

        :param config: configuration values to update
        :return: nothing
        """
        pass

class BasicRangeModel(WirelessModel):
    """
    Basic Range wireless model, calculates range between nodes and links
    and unlinks nodes based on this distance. This was formerly done from
    the GUI.
    """

    name: str = "basic_range"
    options: List[Configuration] = [
        ConfigInt(id="range", default="275", label="wireless range (pixels)"),
        ConfigInt(id="bandwidth", default="54000000", label="bandwidth (bps)"),
        ConfigInt(id="jitter", default="0", label="transmission jitter (usec)"),
        ConfigInt(id="delay", default="5000", label="transmission delay (usec)"),
        ConfigFloat(id="error", default="0.0", label="loss (%)"),
        ConfigBool(id="promiscuous", default="0", label="promiscuous mode"),
    ]

    @classmethod
    def config_groups(cls):
        return [ConfigGroup("Basic Range Parameters", 1, len(cls.configurations()))]

    def __init__(self, session: "Session", _id: int) -> None:
        """
        Create a BasicRangeModel instance.

        :param session: related core session
        :param _id: object id
        """
        super().__init__(session, _id)
        self.session: "Session" = session
        self.wlan: WlanNode = session.get_node(_id, WlanNode)
        self.iface_to_pos: Dict[CoreInterface, Tuple[float, float, float]] = {}
        self.iface_lock: threading.Lock = threading.Lock()
        self.range: int = 0
        self.bw: Optional[int] = None
        self.delay: Optional[int] = None
        self.loss: Optional[float] = None
        self.jitter: Optional[int] = None
        self.promiscuous: bool = False

    def setlinkparams(self) -> None:
        """
        Apply link parameters to all interfaces. This is invoked from
        WlanNode.setmodel() after the position callback has been set.
        """
        with self.iface_lock:
            for iface in self.iface_to_pos:
                options = LinkOptions(
                    bandwidth=self.bw,
                    delay=self.delay,
                    loss=self.loss,
                    jitter=self.jitter,
                )
                iface.options.update(options)
                iface.set_config()

    def get_position(self, iface: CoreInterface) -> Tuple[float, float, float]:
        """
        Retrieve network interface position.

        :param iface: network interface position to retrieve
        :return: network interface position
        """
        with self.iface_lock:
            return self.iface_to_pos[iface]

    def set_position(self, iface: CoreInterface) -> None:
        """
        A node has moved; given an interface, a new (x,y,z) position has
        been set; calculate the new distance between other nodes and link or
        unlink node pairs based on the configured range.

        :param iface: network interface to set position for
        :return: nothing
        """
        x, y, z = iface.node.position.get()
        with self.iface_lock:
            self.iface_to_pos[iface] = (x, y, z)
            if x is None or y is None:
                return
            for iface2 in self.iface_to_pos:
                self.calclink(iface, iface2)

    position_callback = set_position

    def update(self, moved_ifaces: List[CoreInterface]) -> None:
        """
        Node positions have changed without recalc. Update positions from
        node.position, then re-calculate links for those that have moved.
        Assumes bidirectional links, with one calculation per node pair, where
        one of the nodes has moved.

        :param moved_ifaces: moved network interfaces
        :return: nothing
        """
        with self.iface_lock:
            while len(moved_ifaces):
                iface = moved_ifaces.pop()
                nx, ny, nz = iface.node.getposition()
                if iface in self.iface_to_pos:
                    self.iface_to_pos[iface] = (nx, ny, nz)
                for iface2 in self.iface_to_pos:
                    if iface2 in moved_ifaces:
                        continue
                    self.calclink(iface, iface2)

    def calclink(self, iface: CoreInterface, iface2: CoreInterface) -> None:
        """
        Helper used by set_position() and update() to
        calculate distance between two interfaces and perform
        linking/unlinking. Sends link/unlink messages and updates the
        WlanNode's linked dict.

        :param iface: interface one
        :param iface2: interface two
        :return: nothing
        """
        if iface == iface2:
            return
        try:
            x, y, z = self.iface_to_pos[iface]
            x2, y2, z2 = self.iface_to_pos[iface2]
            if x2 is None or y2 is None:
                return
            d = self.calcdistance((x, y, z), (x2, y2, z2))
            # ordering is important, to keep the wlan._linked dict organized
            a = min(iface, iface2)
            b = max(iface, iface2)
            with self.wlan.linked_lock:
                linked = self.wlan.is_linked(a, b)
            if d > self.range:
                if linked:
                    logger.debug("was linked, unlinking")
                    self.wlan.unlink(a, b)
                    self.sendlinkmsg(a, b, unlink=True)
            else:
                if not linked:
                    logger.debug("was not linked, linking")
                    self.wlan.link(a, b)
                    self.sendlinkmsg(a, b)
        except KeyError:
            logger.exception("error getting interfaces during calclink")

    @staticmethod
    def calcdistance(
        p1: Tuple[float, float, float], p2: Tuple[float, float, float]
    ) -> float:
        """
        Calculate the distance between two three-dimensional points.

        :param p1: point one
        :param p2: point two
        :return: distance petween the points
        """
        a = p1[0] - p2[0]
        b = p1[1] - p2[1]
        c = 0
        if p1[2] is not None and p2[2] is not None:
            c = p1[2] - p2[2]
        return math.hypot(math.hypot(a, b), c)

    def update_config(self, config: Dict[str, str]) -> None:
        """
        Configuration has changed during runtime.

        :param config: values to update configuration
        :return: nothing
        """
        self.range = get_config_int(self.range, config, "range")
        if self.range is None:
            self.range = 0
        logger.debug("wlan %s set range to %s", self.wlan.name, self.range)
        self.bw = get_config_int(self.bw, config, "bandwidth")
        self.delay = get_config_int(self.delay, config, "delay")
        self.loss = get_config_float(self.loss, config, "error")
        self.jitter = get_config_int(self.jitter, config, "jitter")
        promiscuous = config.get("promiscuous", "0") == "1"
        if self.promiscuous and not promiscuous:
            self.wlan.net_client.set_mac_learning(self.wlan.brname, LEARNING_ENABLED)
        elif not self.promiscuous and promiscuous:
            self.wlan.net_client.set_mac_learning(self.wlan.brname, LEARNING_DISABLED)
        self.promiscuous = promiscuous
        self.setlinkparams()

    def create_link_data(
        self, iface1: CoreInterface, iface2: CoreInterface, message_type: MessageFlags
    ) -> LinkData:
        """
        Create a wireless link/unlink data message.

        :param iface1: interface one
        :param iface2: interface two
        :param message_type: link message type
        :return: link data
        """
        color = self.session.get_link_color(self.wlan.id)
        return LinkData(
            message_type=message_type,
            type=LinkTypes.WIRELESS,
            node1_id=iface1.node.id,
            node2_id=iface2.node.id,
            network_id=self.wlan.id,
            color=color,
        )

    def sendlinkmsg(
        self, iface: CoreInterface, iface2: CoreInterface, unlink: bool = False
    ) -> None:
        """
        Send a wireless link/unlink API message to the GUI.

        :param iface: interface one
        :param iface2: interface two
        :param unlink: unlink or not
        :return: nothing
        """
        message_type = MessageFlags.DELETE if unlink else MessageFlags.ADD
        link_data = self.create_link_data(iface, iface2, message_type)
        self.session.broadcast_link(link_data)

    def links(self, flags: MessageFlags = MessageFlags.NONE) -> List[LinkData]:
        """
        Return a list of wireless link messages for when the GUI reconnects.

        :param flags: link flags
        :return: all link data
        """
        all_links = []
        with self.wlan.linked_lock:
            for a in self.wlan.linked:
                for b in self.wlan.linked[a]:
                    if self.wlan.linked[a][b]:
                        all_links.append(self.create_link_data(a, b, flags))
        return all_links

@total_ordering
class WayPoint:
    """
    Maintains information regarding waypoints.
    """

    def __init__(
        self,
        _time: float,
        node_id: int,
        coords: Tuple[float, float, Optional[float]],
        speed: float,
    ) -> None:
        """
        Creates a WayPoint instance.

        :param _time: waypoint time
        :param node_id: node id
        :param coords: waypoint coordinates
        :param speed: waypoint speed
        """
        self.time: float = _time
        self.node_id: int = node_id
        self.coords: Tuple[float, float, Optional[float]] = coords
        self.speed: float = speed

    def __eq__(self, other: "WayPoint") -> bool:
        return (self.time, self.node_id) == (other.time, other.node_id)

    def __ne__(self, other: "WayPoint") -> bool:
        return not self == other

    def __lt__(self, other: "WayPoint") -> bool:
        if self.time == other.time:
            return self.node_id < other.node_id
        else:
            return self.time < other.time

class WayPointMobility(WirelessModel):
    """
    Abstract class for mobility models that set node waypoints.
    """

    name: str = "waypoint"
    config_type: RegisterTlvs = RegisterTlvs.MOBILITY
    STATE_STOPPED: int = 0
    STATE_RUNNING: int = 1
    STATE_PAUSED: int = 2

    def __init__(self, session: "Session", _id: int) -> None:
        """
        Create a WayPointMobility instance.

        :param session: CORE session instance
        :param _id: object id
        :return:
        """
        super().__init__(session=session, _id=_id)
        self.state: int = self.STATE_STOPPED
        self.queue: List[WayPoint] = []
        self.queue_copy: List[WayPoint] = []
        self.points: Dict[int, WayPoint] = {}
        self.initial: Dict[int, WayPoint] = {}
        self.lasttime: Optional[float] = None
        self.endtime: Optional[int] = None
        self.timezero: float = 0.0
        self.net: Union[WlanNode, EmaneNet] = get_mobility_node(self.session, self.id)
        # these are really set in child class via confmatrix
        self.loop: bool = False
        self.refresh_ms: int = 50
        # flag whether to stop scheduling when queue is empty
        #  (ns-3 sets this to False as new waypoints may be added from trace)
        self.empty_queue_stop: bool = True

    def startup(self):
        raise NotImplementedError

    def runround(self) -> None:
        """
        Advance script time and move nodes.

        :return: nothing
        """
        if self.state != self.STATE_RUNNING:
            return
        t = self.lasttime
        self.lasttime = time.monotonic()
        now = self.lasttime - self.timezero
        dt = self.lasttime - t

        # keep current waypoints up-to-date
        self.updatepoints(now)

        if not len(self.points):
            if len(self.queue):
                # more future waypoints, allow time for self.lasttime update
                nexttime = self.queue[0].time - now
                if nexttime > (0.001 * self.refresh_ms):
                    nexttime -= 0.001 * self.refresh_ms
                self.session.event_loop.add_event(nexttime, self.runround)
                return
            else:
                # no more waypoints or queued items, loop?
                if not self.empty_queue_stop:
                    # keep running every refresh_ms, even with empty queue
                    self.session.event_loop.add_event(
                        0.001 * self.refresh_ms, self.runround
                    )
                    return
                if not self.loopwaypoints():
                    return self.stop(move_initial=False)
                if not len(self.queue):
                    # prevent busy loop
                    return
                return self.run()

        moved_ifaces = []
        for iface in self.net.get_ifaces():
            node = iface.node
            if self.movenode(node, dt):
                moved_ifaces.append(iface)

        # calculate all ranges after moving nodes; this saves calculations
        self.net.wireless_model.update(moved_ifaces)

        # TODO: check session state
        self.session.event_loop.add_event(0.001 * self.refresh_ms, self.runround)

    def run(self) -> None:
        """
        Run the waypoint mobility scenario.

        :return: nothing
        """
        self.timezero = time.monotonic()
        self.lasttime = self.timezero - (0.001 * self.refresh_ms)
        self.movenodesinitial()
        self.runround()
        self.session.mobility.sendevent(self)

    def movenode(self, node: CoreNode, dt: float) -> bool:
        """
        Calculate next node location and update its coordinates.
        Returns True if the node's position has changed.

        :param node: node to move
        :param dt: move factor
        :return: True if node was moved, False otherwise
        """
        if node.id not in self.points:
            return False
        x1, y1, z1 = node.getposition()
        x2, y2, z2 = self.points[node.id].coords
        speed = self.points[node.id].speed
        # instantaneous move (prevents dx/dy == 0.0 below)
        if speed == 0:
            self.setnodeposition(node, x2, y2, z2)
            del self.points[node.id]
            return True

        # linear speed value
        alpha = math.atan2(y2 - y1, x2 - x1)
        sx = speed * math.cos(alpha)
        sy = speed * math.sin(alpha)

        # calculate dt * speed = distance moved
        dx = sx * dt
        dy = sy * dt
        # prevent overshoot
        if abs(dx) > abs(x2 - x1):
            dx = x2 - x1
        if abs(dy) > abs(y2 - y1):
            dy = y2 - y1
        if dx == 0.0 and dy == 0.0:
            if self.endtime < (self.lasttime - self.timezero):
                # the last node to reach the last waypoint determines this
                # script's endtime
                self.endtime = self.lasttime - self.timezero
            del self.points[node.id]
            return False
        if (x1 + dx) < 0.0:
            dx = 0.0 - x1
        if (y1 + dy) < 0.0:
            dy = 0.0 - y1
        self.setnodeposition(node, x1 + dx, y1 + dy, z1)
        return True

    def movenodesinitial(self) -> None:
        """
        Move nodes to their initial positions. Then calculate the ranges.

        :return: nothing
        """
        moved_ifaces = []
        for iface in self.net.get_ifaces():
            node = iface.node
            if node.id not in self.initial:
                continue
            x, y, z = self.initial[node.id].coords
            self.setnodeposition(node, x, y, z)
            moved_ifaces.append(iface)
        self.net.wireless_model.update(moved_ifaces)

    def addwaypoint(
        self,
        _time: float,
        nodenum: int,
        x: float,
        y: float,
        z: Optional[float],
        speed: float,
    ) -> None:
        """
        Waypoints are pushed to a heapq, sorted by time.

        :param _time: waypoint time
        :param nodenum: node id
        :param x: x position
        :param y: y position
        :param z: z position
        :param speed: speed
        :return: nothing
        """
        wp = WayPoint(_time, nodenum, coords=(x, y, z), speed=speed)
        heapq.heappush(self.queue, wp)

    def addinitial(self, nodenum: int, x: float, y: float, z: float) -> None:
        """
        Record initial position in a dict.

        :param nodenum: node id
        :param x: x position
        :param y: y position
        :param z: z position
        :return: nothing
        """
        wp = WayPoint(0, nodenum, coords=(x, y, z), speed=0)
        self.initial[nodenum] = wp

    def updatepoints(self, now: float) -> None:
        """
        Move items from self.queue to self.points when their time has come.

        :param now: current timestamp
        :return: nothing
        """
        while len(self.queue):
            if self.queue[0].time > now:
                break
            wp = heapq.heappop(self.queue)
            self.points[wp.node_id] = wp

    def copywaypoints(self) -> None:
        """
        Store backup copy of waypoints for looping and stopping.

        :return: nothing
        """
        self.queue_copy = list(self.queue)

    def loopwaypoints(self) -> bool:
        """
        Restore backup copy of waypoints when looping.

        :return: nothing
        """
        self.queue = list(self.queue_copy)
        return self.loop

    def setnodeposition(self, node: CoreNode, x: float, y: float, z: float) -> None:
        """
        Helper to move a node, notify any GUI (connected session handlers),
        without invoking the interface poshook callback that may perform
        range calculation.

        :param node: node to set position for
        :param x: x position
        :param y: y position
        :param z: z position
        :return: nothing
        """
        node.position.set(x, y, z)
        self.session.broadcast_node(node)

    def setendtime(self) -> None:
        """
        Set self.endtime to the time of the last waypoint in the queue of
        waypoints. This is just an estimate. The endtime will later be
        adjusted, after one round of the script has run, to be the time
        that the last moving node has reached its final waypoint.

        :return: nothing
        """
        try:
            self.endtime = self.queue[-1].time
        except IndexError:
            self.endtime = 0

    def start(self) -> None:
        """
        Run the script from the beginning or unpause from where it
        was before.

        :return: nothing
        """
        laststate = self.state
        self.state = self.STATE_RUNNING
        if laststate == self.STATE_STOPPED or laststate == self.STATE_RUNNING:
            self.loopwaypoints()
            self.timezero = 0
            self.lasttime = 0
            self.run()
        elif laststate == self.STATE_PAUSED:
            now = time.monotonic()
            self.timezero += now - self.lasttime
            self.lasttime = now - (0.001 * self.refresh_ms)
            self.runround()

    def stop(self, move_initial: bool = True) -> None:
        """
        Stop the script and move nodes to initial positions.

        :param move_initial: flag to check if we should move nodes to initial
            position
        :return: nothing
        """
        self.state = self.STATE_STOPPED
        self.loopwaypoints()
        self.timezero = 0
        self.lasttime = 0
        if move_initial:
            self.movenodesinitial()
        self.session.mobility.sendevent(self)

    def pause(self) -> None:
        """
        Pause the script; pause time is stored to self.lasttime.

        :return: nothing
        """
        self.state = self.STATE_PAUSED
        self.lasttime = time.monotonic()

class Ns2ScriptedMobility(WayPointMobility):
    """
    Handles the ns-2 script format, generated by scengen/setdest or
    BonnMotion.
    """

    name: str = "ns2script"
    options: List[Configuration] = [
        ConfigString(id="file", label="mobility script file"),
        ConfigInt(id="refresh_ms", default="50", label="refresh time (ms)"),
        ConfigBool(id="loop", default="1", label="loop"),
        ConfigString(id="autostart", label="auto-start seconds (0.0 for runtime)"),
        ConfigString(id="map", label="node mapping (optional, e.g. 0:1,1:2,2:3)"),
        ConfigString(id="script_start", label="script file to run upon start"),
        ConfigString(id="script_pause", label="script file to run upon pause"),
        ConfigString(id="script_stop", label="script file to run upon stop"),
    ]

    @classmethod
    def config_groups(cls) -> List[ConfigGroup]:
        return [
            ConfigGroup("ns-2 Mobility Script Parameters", 1, len(cls.configurations()))
        ]

    def __init__(self, session: "Session", _id: int) -> None:
        """
        Creates a Ns2ScriptedMobility instance.

        :param session: CORE session instance
        :param _id: object id
        """
        super().__init__(session, _id)
        self.file: Optional[Path] = None
        self.autostart: Optional[str] = None
        self.nodemap: Dict[int, int] = {}
        self.script_start: Optional[str] = None
        self.script_pause: Optional[str] = None
        self.script_stop: Optional[str] = None

    def update_config(self, config: Dict[str, str]) -> None:
        self.file = Path(config["file"])
        logger.info(
            "ns-2 scripted mobility configured for WLAN %d using file: %s",
            self.id,
            self.file,
        )
        self.refresh_ms = int(config["refresh_ms"])
        self.loop = config["loop"] == "1"
        self.autostart = config["autostart"]
        self.parsemap(config["map"])
        self.script_start = config["script_start"]
        self.script_pause = config["script_pause"]
        self.script_stop = config["script_stop"]
        self.readscriptfile()
        self.copywaypoints()
        self.setendtime()

    def readscriptfile(self) -> None:
        """
        Read in mobility script from a file. This adds waypoints to a
        priority queue, sorted by waypoint time. Initial waypoints are
        stored in a separate dict.

        :return: nothing
        """
        file_path = self.findfile(self.file)
        try:
            f = file_path.open("r")
        except IOError:
            logger.exception(
                "ns-2 scripted mobility failed to load file: %s", self.file
            )
            return
        logger.info("reading ns-2 script file: %s", file_path)
        ln = 0
        ix = iy = iz = None
        inodenum = None
        for line in f:
            ln += 1
            if line[:2] != "$n":
                continue
            try:
                if line[:8] == "$ns_ at ":
                    if ix is not None and iy is not None:
                        self.addinitial(self.map(inodenum), ix, iy, iz)
                        ix = iy = iz = None
                    # waypoints:
                    #    $ns_ at 1.00 "$node_(6) setdest 500.0 178.0 25.0"
                    parts = line.split()
                    line_time = float(parts[2])
                    nodenum = parts[3][1 + parts[3].index("(") : parts[3].index(")")]
                    x = float(parts[5])
                    y = float(parts[6])
                    z = None
                    speed = float(parts[7].strip('"'))
                    self.addwaypoint(line_time, self.map(nodenum), x, y, z, speed)
                elif line[:7] == "$node_(":
                    # initial position (time=0, speed=0):
                    #    $node_(6) set X_ 780.0
                    parts = line.split()
                    nodenum = parts[0][1 + parts[0].index("(") : parts[0].index(")")]
                    if parts[2] == "X_":
                        if ix is not None and iy is not None:
                            self.addinitial(self.map(inodenum), ix, iy, iz)
                            ix = iy = iz = None
                        ix = float(parts[3])
                    elif parts[2] == "Y_":
                        iy = float(parts[3])
                    elif parts[2] == "Z_":
                        iz = float(parts[3])
                        self.addinitial(self.map(nodenum), ix, iy, iz)
                        ix = iy = iz = None
                    inodenum = nodenum
                else:
                    raise ValueError
            except ValueError:
                logger.exception(
                    "skipping line %d of file %s '%s'", ln, self.file, line
                )
                continue
        if ix is not None and iy is not None:
            self.addinitial(self.map(inodenum), ix, iy, iz)

    def findfile(self, file_path: Path) -> Path:
        """
        Locate a script file. If the specified file doesn't exist, look in the
        same directory as the scenario file, or in gui directories.

        :param file_path: file name to find
        :return: absolute path to the file
        :raises CoreError: when file is not found
        """
        file_path = file_path.expanduser()
        if file_path.exists():
            return file_path
        if self.session.file_path:
            session_file_path = self.session.file_path.parent / file_path
            if session_file_path.exists():
                return session_file_path
        if self.session.user:
            user_path = Path(f"~{self.session.user}").expanduser()
            configs_path = user_path / ".core" / "configs" / file_path
            if configs_path.exists():
                return configs_path
            mobility_path = user_path / ".coregui" / "mobility" / file_path
            if mobility_path.exists():
                return mobility_path
        raise CoreError(f"invalid file: {file_path}")

    def parsemap(self, mapstr: str) -> None:
        """
        Parse a node mapping string, given as a configuration parameter.

        :param mapstr: mapping string to parse
        :return: nothing
        """
        self.nodemap = {}
        if mapstr.strip() == "":
            return
        for pair in mapstr.split(","):
            parts = pair.split(":")
            try:
                if len(parts) != 2:
                    raise ValueError
                self.nodemap[int(parts[0])] = int(parts[1])
            except ValueError:
                logger.exception("ns-2 mobility node map error")

    def map(self, nodenum: str) -> int:
        """
        Map one node number (from a script file) to another.

        :param nodenum: node id to map
        :return: mapped value or the node id itself
        """
        nodenum = int(nodenum)
        return self.nodemap.get(nodenum, nodenum)

    def startup(self) -> None:
        """
        Start running the script if autostart is enabled.
        Move node to initial positions when any autostart time is specified.
        Ignore the script if autostart is an empty string (can still be
        started via GUI controls).

        :return: nothing
        """
        if self.autostart == "":
            logger.info("not auto-starting ns-2 script for %s", self.net.name)
            return
        try:
            t = float(self.autostart)
        except ValueError:
            logger.exception(
                "Invalid auto-start seconds specified '%s' for %s",
                self.autostart,
                self.net.name,
            )
            return
        self.movenodesinitial()
        logger.info("scheduling ns-2 script for %s autostart at %s", self.net.name, t)
        self.state = self.STATE_RUNNING
        self.session.event_loop.add_event(t, self.run)

    def start(self) -> None:
        """
        Handle the case when un-paused.

        :return: nothing
        """
        logger.info("starting script: %s", self.file)
        laststate = self.state
        super().start()
        if laststate == self.STATE_PAUSED:
            self.statescript("unpause")

    def run(self) -> None:
        """
        Start is pressed or autostart is triggered.

        :return: nothing
        """
        super().run()
        self.statescript("run")

    def pause(self) -> None:
        """
        Pause the mobility script.

        :return: nothing
        """
        logger.info("pausing script: %s", self.file)
        super().pause()
        self.statescript("pause")

    def stop(self, move_initial: bool = True) -> None:
        """
        Stop the mobility script.

        :param move_initial: flag to check if we should move node to initial
            position
        :return: nothing
        """
        logger.info("stopping script: %s", self.file)
        super().stop(move_initial=move_initial)
        self.statescript("stop")

    def statescript(self, typestr: str) -> None:
        """
        State of the mobility script.

        :param typestr: state type string
        :return: nothing
        """
        filename = None
        if typestr == "run" or typestr == "unpause":
            filename = self.script_start
        elif typestr == "pause":
            filename = self.script_pause
        elif typestr == "stop":
            filename = self.script_stop
        if filename is None or filename == "":
            return
        filename = Path(filename)
        filename = self.findfile(filename)
        args = f"{BASH} {filename} {typestr}"
        utils.cmd(args, cwd=self.session.directory, env=self.session.get_environment())

redpajama_set_name: RedPajamaGithub


Pick up your special Mooncakes.
Traditional mooncakes are generally divided into four types: Guangdong-style, Suzhou-style, Beijing-style and Chaozhou-style, and the fillings used are usually Five Kernels, lotus seed paste, sugar, sweet bean paste, bacon, jujube paste, and egg yolk. Nowadays, new ingredients and new cooking ways are introduced in making mooncakes.
Beijing-style: the representative of mooncakes in northern China, featuring soft skin, sweet fillings and the use of sesame oil.
Suzhou-style: noted for the crispy crust and sweeter tastes than other types.
Guangzhou-style: probably the most popular kind in China, loved by people for the varied choice of fillings, mostly the local products such as coconut shreds, lotus seed paste, egg yolks, sausages, roast pork and so on.
Chaozhou-style: noted for the use of various bean pastes and the rich, sweet fillings.
The production of mooncakes is undergoing a conspicuous evolution in recent years on the aspects of the ingredient choice, the cooking methods and so on, as a result of the influence of foreign cuisines and people's growing consciousness of healthy diet, giving rise to various fashionable and much favored spin-offs on the market.
Snow-skinned mooncake: the snow-skinned mooncake is not a baked produc and has become increasingly popular among younger people, kids and Westerners. It is served when chilled and is so named for the translucent skin in various colors.
Ice-cream mooncake: the chocolate coated, ice-cream stuffed pies are the favorite among the younger generations, especially those who like cold foods.
Green tea mooncake: a new option for people keen on healthy diet and novice tastes.
Most mooncakes are oily, and people prefer to drink tea, such as green tea, Oolong tea and jasmine tea to offset the effects of the salty, sweet and rich tastes.
The Mid-autumn Festival (Mooncake Festival is coming and we invite foreigners to join in the DIY creative Mid-Autumn Mooncake Party organized by GoChengdu. Participants will also get gifts.
The website gochengdu.cn will launch an event for foreigners in Chengdu at which they will learn to make mooncakes and experience traditional Chinese culture.


text:
Q: CodeIgniter calendar class won't show correct dates for +1 month I am trying to show three callendars, one for the current month and two for the next two months.
Here is my commented controller
public function index($year = null, $month = null, $day = null)
{
    if (empty($year)) {
        redirect('book/index/' . date('Y/m/d', time()));
    }

    $this->load->model('book/Booking_Model');

    // september
    $data['cal_one']   = $this->Booking_Model->generateCalendar($year, $month, $day);
    // october
    $data['cal_two']   = $this->Booking_Model->generateCalendar($year, date('m', strtotime('+1 months')), $day);
    // november
    $data['cal_three'] = $this->Booking_Model->generateCalendar($year, date('m', strtotime('+2 months')), $day);

    // to load the view
    $data['module'] = 'book';
    $data['view_file'] = 'select_date';
    $this->load->module('templates');
    $this->templates->frontend($data);
}

This is what I am getting as output

As you can see, the months are showing up correctly, however the table cells are all showing the same month, 09 (september).
If you look on the top left you can see I have var_dumped the $month variable going into the calendars and they are showing correctly, 09 ... 10 ... 11, however inside the calendar they are all the 09.
Here is my calendar model...
public function generateCalendar($year, $month, $day)
{
    var_dump($month);
    // styling the calendar
    $params = [
        'show_next_prev' => true,
        'next_prev_url'  => base_url() . 'schedule/index',
        'template'       => '
            {table_open}
{/table_open}

                {heading_row_start}
{/heading_row_start}

                    {heading_previous_cell}

                    {/heading_previous_cell}

                    {heading_title_cell}

                                {heading}

                    {/heading_title_cell}

                    {heading_next_cell}

                    {/heading_next_cell}

                {heading_row_end}
{/heading_row_end}
                {week_row_start}
{/week_row_start}

                    {week_day_cell}

                                {week_day}

                    {/week_day_cell}

                {week_row_end}
{/week_row_end}
                {cal_row_start}
{/cal_row_start}

                    {cal_cell_start}{/cal_cell_start}

                    {cal_cell_start_today}{/cal_cell_start_today}

                    {cal_cell_start_other}{/cal_cell_start_other}

                    {cal_cell_content}

                            {day} ' . $month . '

                    {/cal_cell_content}

                    {cal_cell_content_today}

                            {day} ' . $month . '

                    {/cal_cell_content_today}

                    {cal_cell_no_content}

                            {day} ' . $month . '

                    {/cal_cell_no_content}

                    {cal_cell_no_content_today}

                            {day} ' . $month . '

                    {/cal_cell_no_content_today}

                    {cal_cell_blank} {/cal_cell_blank}

                    {cal_cell_other}{day}{/cal_cel_other}

                    {cal_cell_end}	{/cal_cell_end}

                    {cal_cell_end_today}	{/cal_cell_end_today}

                    {cal_cell_end_other}	{/cal_cell_end_other}

                {cal_row_end}
{/cal_row_end}

            {table_close}
{/table_close}'
    ];

    // loading the calendar and passing the params and data
    $this->load->library('calendar', $params);
    return $this->calendar->generate($year, $month);
}

If you look at the model above you can see that I am passing the $month variable into the model and immidiately var_dumping it to make sure that it is passing '+1 month' into the model. That is working... however I am echoing that month out in the {cal_cell_content} tags and am getting only this month (september) for each of the three calendars.

A: Okay, well here's the answer for someone like me in the future.
Cause of problem
CodeIgniter loads libraries which are instantiated ONCE. So here I was trying to get the 'calendar' library three times, when in actual fact CodeIgniter saw that I instantiated it for september, so it did bother instantiating for october or november (singleton pattern?).
Solution
Thankfully CodeIgniter allows you to assign a custom class name to a library, e.g.
$this->load->library('calendar', $params, 'custom_name);
return $this->custom_name->generate($year, $month);

Pretty cool, so now all I had to do was dynamically generate a new 'name' for each of the months I wanted to display... so I made the name the $month variable like this.
$this->load->library('calendar', $params, $month);
return $this->$month->generate($year, $month);