The sun was out and a way of being able to sleep in it needed to be found. This inside has quite deep windows and the curtains assisted me in being able to lie in the sun for an hour or so. I don't think anyone spotted me there, it was quite comfortable and it may become a favourite spot, like all the others.
Late morning Kath, the last of Mick's sisters, came to meet Oleanna. She had a full guided tour excluding the engine bay. It's much easier when there is only one person to show round rather than four, so she got more information about everything. We still are not up to Leckenby standard though. As a hobby my Dad used to design conversions of vans into motor caravans. His guided tours could take hours and as a child I was occasionally sent by my Mum to try to rescue someone after a couple of hours who had shown a small amount of interest, this was extremely hard as Dad was in his stride and very proud of his creation.
We had a bit of a walk around the Paddington Central area. To our surprise a lot of boats had left the basin today and there was space that hadn't been filled immediately. Kath hasn't explored this part of London so it was all new to her. After donating my crutches to St Mary's we walked under Bishop's Bridge Road where there is an artwork 'Message from the unseen world' (United Visual Artists) which is a tribute to the life of Alan Turing, known for his work breaking the enigma machine in WW2. Large panels with LEDs light up using algorithms and displays extracts from a commissioned poem by Nick Drake. Alan Turning was born close to Paddington.
Further on is the sculpture Two Figures by Sean Henry. Affectionately nicknamed Walking Man and Standing Man, the two figures face one another from either end of a concrete path. They are a favourite of mine and if ever I'm walking here I have to say hello to the larger than life men. We carried on walking up into Little Venice were Rembrandt Gardens had one boat moored there. There was a very long queue for the water buses and there seemed to be a queue at the water point under the bridge. So much so that a boat had pulled up in the narrow section and a chap was rushing to the elsan to empty a cassette as quickly as he could before moving on and out of the way.
This evening we've had a visit from Frank and his 'friend' Helen. Frank is now standing out from everyone else as this is his second visit to Oleanna, he likes all the oak. It took a while for them to actually get to the boat, but they arrived after being delayed a couple of times and getting lost around St Mary's hospital. This brought back reassuringly familiar memories of when I used to work with Frank. But as they arrived with a bottle of wine in hand it was alright. After Helen had a chance to look around Oleanna and we'd drunk the wine we all headed out to Pizza Express for some food just before they closed the kitchen.
0 locks, 0 miles, 1 hammock, 2 Stafford crutches donated to London, 3 more visitors, 4th sister, 1 afternoon beer, 1 late lunch, 1 widebeam that can moor anywhere, 6pm, 7.30pm, 8pm, 8.35pm, 2nd visit for Frank, 4 pizzas, 2 bottles of wine, 1 looney cat.
are there no Bears for friends, Tilly?
I think that may have been locked out of reach over the long weekend that the cafe has been closed. But he may be lucky and end up standing next to the small plastic pots of marmalade in the morning when they open again. I just hope that bear paws can pull the lids off!


text:
WILD 'N' WOOLLY COOPWORTHS & WILDLIFE
* 36Yrs.-Coopworth Sheep! 20Yrs.-Highland Coos!
Wool from Our Sheep to Ewe WALKABOUT
COOPWORTHS!
HIGHLAND COOS!
GIRLIWHIGS!
PUBLISHED STUFF
Sheep Shearers
Wool-in-the-Wind
Dye for Fun and Profit
Lambing With-Ease
Lambing Laissez Faire
"Wool-in-the-Wind"
by Hope Allen Yankey, appearing in The Shepherd, Vol. 42, No. 5, May 1997
Our much loved, but terribly ineffective Border Collie, Noni, was dying from cancer. We knew she wasn't going to last through the summer. It was especially hard, despite her being cross-eyed and unable to do a decent job of gathering sheep. We'd just lost our only other not-so-well-bred Border Collie, Bee, whom we loved equally as much some months prior to Noni becoming ill. Unfortunately, Bee has never expressed any interest whatsoever in sheep or sheep gathering. Nonetheless, we had Sam, our Golden Lab, but he was facing his 11th birthday, and the only sheep gathering thing he knew was retrieving sticks thrown in a direction that would create mass confusion and stampede- like behavior on the pad of the sheep, which actually helped in some situations to get sheep moving.
I'd wanted a REAL Border Collie for years, but three dogs was all I'd really ever needed here in the mountains of West Virginia on cold, chilly, winter nights (i.e., "3-dog nights") It was hard convincing myself or my husband otherwise. So, I waited. Noni was failing. It would soon be time to look for a puppy to fill the void, and this time, hopefully, I'd end up with a puppy that would grow up loving sheep, and wanting nothing more than to gather them for me from hither and yon. I'd been thinking puppy when ''Wool-in-the-Wind'' showed up.
Mind you, "Wool-in-the-Wind" does NOT, however, fit the description of a puppy. In fact, "Wool-in-the-Wind'' fits the description of a critter we'd all most likely avoid no matter what the circumstances. Black and white, yes—like most Border Collies; cute, sometimes playful, yes—like most Border Collies; the smell, however, which we most associated with this black and white critter, is one to run from. A friend and I had been dyeing wool on an outdoor stove near our garden one lovely, but very windy, spring afternoon and noticed near our garden fence what she thought to be "Wool-in-the-Wind.'' As we approached, I yelled out, "Oh no, not Wool, but Skunk-in-the-Wind!!!'' This little skunk, whose back leg was injured but seemed otherwise healthy and quite intelligent I might add, had been visiting us all spring to take what remnants he could gather from our compost heap. And on those March/April nights we slept in our barn loft during lambing, he had made himself a home underneath our porch! We thought he might leave once we moved back to the house, but he seemed to like not only what we had to offer, but was willing to share to the extent that he never sprayed anything or anyone nearby. Still, "Wool-in-the-Wind'' had an unpleasant odor, and despite my tolerance of all critters, wasn't the most welcomed of visitors. His little black nose and the white tuft of fur that stood "straight up'' right between his eyes stayed with me, long after our repeated attempts to discourage his living under our house and porch had driven him, at least, to take refuge under one of the old barns up-the-hollow from the house.
It wasn't long after "Wool-in-the-Wind'' "moved'' that I dreamed of a puppy that wanted to come to live here at the farm. Seems we never get to pick our animals. They always pick us first! This puppy was the biggest bully and the fattest of his litter mates and he looked just like "Wool-in-the-Wind.'' The Maryland Sheep and Wool Festival was the following weekend and there had always been puppies of the Border Collie variety there for the picking, but I dared not say anything to my husband, Bev. Noni was still with us, and we both agreed "NO MORE DOGS 'TIL NONI WAS GONE." Every day I would see this little puppy in my daydreams and in my nightdreams. Still, I just kept quiet, but all the time, thought to myself, "Oh no, I'm not really ready for a PUPPY . . . and the PUPPY do's and PUPPY don'ts . . . HELP!'' But, still, I said nothing.
We drove down the following Friday afternoon to West Friendship, Maryland, to set up our Wild 'n' Woolly booth for the Maryland Sheep and Wool Festival. Still, not one word about PUPPY from me; my husband helped unload the truck and then took off to park in our usual camping spot in the back little field next to the stream where almost no one ever marks. In 30 minutes or so, he returned to tell me we had neighbors this year; a camper parked just 30 yards away. A camper whose owners had apparently brought their three Border Collies and what he thought might be a litter of pups because he'd heard them when he'd gotten out of the truck—hadn't actually seen them, but . . .
And yes, the rest is history! The pups were there for the picking, the fattest was the bully of the litter, and he looked just like ''Wool-in-the-Wind.'' His eyes said, "Please take me home." We both said yes and later that night I told Bev about my dream. We'd have called him "Wool . . . ,'' but that's a bit much when you're working sheep and wanting an exuberant, most intelligent, not cross-eyed, wanting-more-than-anything-else-in-the-world-to-chase-sheep less than novice Border Collie pup to listen. So, we named him "Mr. Kohl," or "Kohl'' for short, after Mr. Kohl, our farm sitter and godparent back at the farm that weekend.
Well, Kohl is everything I'd asked for in a Border Collie and more—herds any and everything that moves, and some things that don't. Is intelligent enough to know the difference and still bull-headed enough not to care. Loves attention, but chooses to eat alone and in the peace and quiet of his domain with no one looking over his shoulder or attempting to share his meal. And with a grin that would shake Godzilla himself, looks the pad of the most handsome, Gargoyle-style SHEEP DOG! He obviously has my number and will require schooling this year to learn techniques that I either don't know or haven't learned myself from having had less-than-working Border Collies in the past.
Noni passed on in the latter part of the summer . . . she had ignored Kohl to our surprise. Sam, on the other hand, would have gladly made a meal of the Border Collie had he had the chance initially to nail Kohl firsthand. Once for no other reason than the sheer fact that Kohl was barking (I was feeding hay to the horse and he wanted desperately to be with, not near me). Sam attacked him from afar and, had I not intervened, may have had an afternoon doggie treat for certain. That taught Kohl some respect and, needless to say, he's less inclined to bark when Sam's around, let alone, do anything other than "grin and bear'' his teeth and belly in submission.
I'd really like to have been home or had a video camera on the day both Bev and I were away the last of September during the Virginia State Fair. Sam was in the house, but had access to the porch and yard through the front door which we left open for him. Kohl was tied outside—otherwise, he'd have eventually decided to chase or gather sheep to his satisfaction! Sometime during the day, Kohl came out of his collar and decided to join his big brother, Sam, on the porch—the door's open, remember?! Bev got home earlier than I did that day to find both dogs peaceably lying on the porch. Sam and Kohl had apparently come to an agreement as far as they were concerned about appropriate behaviors and were tolerating each other nicely. The surprise came when Bev entered the house and found. First, my Lambchop's puppet, which we call "Chopper,'' lying in a basket which had held only a few papers and some of those "pipe cleaner sheep'' we sheep people make and sell at fairs and festivals. It seemed odd—my things are usually in order even if the floors in our house remind you of pioneer days—that the Little Red Wagon which Chopper and all other 20 or so various stuffed sheep, bears, dogs, and pigs occupy was empty! Bev rechecked the basket in which Chopper laid and found only a few pipe cleaner sheep, fewer yet, in fact, although Chopper was not chewed or torn apart. An investigation soon led to the discovery that Kohl had been investigating things earlier himself and had rounded up all the stuffed sheep, bears, dogs, and pigs to include a few pipe cleaner sheep or their various parts, and herded them to the bed we kept on our front porch during the summer. Nothing was too badly damaged, although "Tallulah Baahead'' needed cosmetic surgery on her right eye, and ''Angela Lamb'' an intestinal hernia repaired. Apparently, Kohl had gotten a whiff of the real thing—wool wrapped around pipe cleaners—when he walked past the basket on the bench and dropped Chopper in the basket to retrieve and gather the pipe cleaner sheep to the porch. Chopper was forgotten! When I returned later that night and heard about this, all I could think about was what went through Sam's mind as he watched Kohl in the act of herding the "Inside Flock'' to the porch. Sam has always been the model dog, never chewed anything, ran away only when no one paid him the attention he thought he deserved, and NEVER touched even ONE of my toys or inside critters (stuffed sheep, bears, dogs, or pigs), NEVER! (He had his own stuffed toys and he knew the difference. I suspect Kohl may never know that difference, however.)
So, today, I chuckle. Surely, that incident would have been great material for TV's "World's Funniest Videos.'' Surely, one day Kohl will grow up and gain both Sam's respect and ours, as well, as we watch him retrieve sheep from the back 240. Returning home with that same Gargoyle grin, that same tuft of white wool that stands "straight up'' right between his eyes, at a speed not wholly different from that of the speed of light, looking much like that ball of fur my friend and I mistook one windy afternoon last spring for 'Wool-in-the-Wind.''
Good Day All Critters! Join Us...
"NOW"
Tackling Taxes
"About the Dogs..."
Lambing @ Beginning March
Calving Shortly Thereafter
...read all about it!
MD SHEEP & WOOL
FIRST WEEKEND MAY
2nd and 3rd
Recent Photos on FB
:)We take PayPal!
Thanks for Lookin'!
Check out our friend's YARN
http://www.dyepot.com
my brother's BOAT CHARTERING
http://calypsoendeavors.com
our nephew's SOLAR/REMODELING
http://www.carolinagreenbuilding.com
Barbara's TEACHING ENGLISH
http://learnenglish2day.org
PHOTO ALBUMS SOON
...posted here/not on Facebook!
Copyright ©2019 Wild 'n' Woolly Farm // This website is Spontaneously Maintained by Hope & Friends--2 and 4 Legged--now & then!

redpajama_set_name: RedPajamaCommonCrawl


Catalog, upcoming releases, message board, and company profile. Specializes in original master tape reissues on 180 gram vinyl Survival China Travel Tips and Tricks. These China Travel Tips, Survival Techniques, will help you get around and make your trip to China easier Essayneems schrieb am 30.04.2017 um 00:47 We write high-quality sample essays, term papers, research papers, thesis papers, dissertations, book reviews.
Ultimate Classic Rock counts down the Top 10 bootleg albums by the Beatles. The Beatles in Mono — бокс-сет с полным комплектом ремастированных монофонических записей группы The Beatles, выпущенный лейблами UpdateStar is compatible with Windows platforms. UpdateStar has been tested to meet all of the technical requirements to be compatible with Windows 10, 8.1, Windows. Sep 2, 2014 As Beatles followers worldwide know by now, The Beatles in Mono LP box set is releasing September 9. For the past few days I've been. Buy Anthology 3 (LP) by The Beatles (LP .98). Amoeba Music. Ships The Beatles Please Please Me album was rush-released by Parlophone on 22nd March, 1963 to capitalise on the enormous success of the title track which had. Complete your The Beatles record collection. Discover The Beatles's full discography. Shop new and used Vinyl A collection of Beatles related informational, sound and picture files, made available for study by Beatles fans and scholars all over the world to explore the behind.
Best Cd Dvd - rare CDs, live concert DVDs, mp3 collection disks, rare video collections. Pink Floyd, Dave Clark Sep 13, 2014 The latest round of Beatles LPs are pure, unadulterated analog -- and sound better for it! rs139the-beatles-mono-on-vinyl-packshot-lpr.jpg. NY area Beatles-themed music festival announces 2017 line-up New Sgt. Pepper s book to be celebrated at Beatles symposium Stella causing a Hard Day s Night Lost piece. ROXY MUSIC is a Crossover Prog / Progressive Rock artist from United Kingdom. This page includes ROXY MUSIC s : biography, official website, pictures, videos. Feb 16, 2013 Ultimate Classic Rock counts down the Top 10 bootleg albums by the Beatles.


text:
These Top 2020 Movies and TV Shows Got Us Through This Wild Year
In a year like no other, 2020 became a time for staying home, getting comfy, and watching every single movie and TV show the entertainment industry had to offer. While many of us stayed in to avoid the coronavirus (COVID-19) pandemic, we found ourselves watching dramas, comedies, documentaries, and, of course, a little show on Netflix called Tiger King.
Google put together a list of the top movies and TV shows of 2020, based on what people were watching and what they were searching, and one thing is very clear—streaming services reigned supreme. Ahead, see the top 10 movies of 2020 and the top 10 TV shows of 2020, according to Google searches. If you haven't yet checked them all off your own viewing list, we have a suggestion for how you should spend your next free weekend.
Movie: 'Parasite'
Credit: Neon
The Academy Award winner for Best Picture was a bit of a sleeper hit that picked up more steam as it won more awards. Korean film Parasite is one of those comedic thrillers that can make you laugh, even in the darkest of times. It features a family that infiltrates the home of the elite, only to end with a wild twist that will leave you wanting more.
Movie: '1917'
Inspired by real stories of World War I, 1917 follows two British soldiers during the war. The film is directed by Academy Award winner Sam Mendes, who used the stories from his own grandfather—a runner in the war—to write the harrowing script. Mendes produced the project as well, and it took home three Oscars and two Golden Globes this year.
Movie: 'Black Panther'
Though Black Panther originally premiered in 2018, it saw a boost in search and views in 2020 after the tragic passing of its star Chadwick Boseman. The Marvel film has been widely lauded for featuring admirable Black characters, most especially superhero Black Panther himself. Boseman even had a hand in crafting the story behind the film, which director Ryan Coogler shared after Boseman's death.
Movie: 'Birds of Prey'
The first DC movie to come out in 2020, Birds of Prey, gave the quirky-yet-strong character of Harley Quinn a story all her own. Margot Robbie reprises her role as Harley in this film that checks in with her after her disastrous breakup with the Joker. But she forms a badass girl group that doesn't need any men to get shit done—and that's exactly what they do.
Movie: 'Little Women'
Credit: Columbia Pictures
The latest take on the beloved story of Little Women may have been released at the tail end of 2019, but it's gotten a lot of love in 2020. It has an all-star cast and crew—Florence Pugh, Saoirse Ronan, Emma Watson, Timothee Chalamet, Meryl Streep, Greta Gerwig, to name just a few—that was able to convince just about anyone to give the classic story about the March sisters a chance.
Movie: 'Just Mercy'
Based on the non-fiction book of the same name, Just Mercy stars Michael B. Jordan as the lawyer trying to help Walter McMillian (Jamie Foxx) get his murder conviction appealed. It's a heart-wrenching story that delves in to the failures of the justice system that will undoubtedly leave a mark on any viewer.
Movie: 'Bad Boys for Life'
If there was one thing 2020 needed, it was another installment of the Bad Boys trilogy—and that's exactly what we got. Will Smith and Martin Lawrence reprised their roles in the film, which comes almost two decades after Bad Boys II. The two detective lieutenants are funny as ever in this action film and keep up *pretty* well, despite being a little older than they were last time around.
Movie: 'Sonic the Hedgehog'
Credit: Paramount Pictures
Much of the hubbub around this film had to do with the early trailer depicting a Sonic character that viewers were not happy with. After a redesign—and delayed release—Sonic the Hedgehog made its debut, many years after being conceptualized. Ben Schwartz voices the title character, with James Marsden and Jim Carrey also starring in this fun film.
Movie: 'Contagion'
This 2011 film unsurprisingly saw a resurgence in 2020. It's all about a deadly virus transmitted by respiratory droplets that's befuddled medical professionals—sound familiar? People everywhere searched this film and watched it out of, perhaps, morbid curiosity? Irony? Nevertheless, Contagion was big this year as we also searched for our own answer to a deadly virus.
Movie: 'Fantasy Island'
Blumhouse's Fantasy Island is a little bit like Lost, a little bit like Survivor, and a little bit like the most intense horror scene you can imagine for yourself. After a group of people find themselves on Fantasy Island, they quickly realize that even though their wildest fantasies are coming true, they're coming with a price—and it's a nightmare.
TV: 'Tiger King'
Tiger King really kicked off the COVID-19 lockdown. The docuseries landed on Netflix in March, featuring Tiger King himself Joe Exotic. The show went behind the scenes of his controversial big-cat zoo and followed him through the ups and downs of his life—including his never-ending fight with fellow big-cat-lover Carole Baskin. Netflix even tacked on a special, hosted by Joel McHale, the following month.
TV: 'Cobra Kai'
Netflix snagged this popular series this year after the first two seasons aired on YouTube Red. The lighthearted series takes inspiration from the iconic Karate Kid films, even bringing its stars, Ralph Macchio and William Zabka, into the show. It's gained popularity on Netflix this year thanks to its perfect marriage of new-school actors with the nostalgia of the original Karate Kid, making it a series that spans generations.
TV: 'Ozark'
Season 3 of Ozark landed on Netflix this year—just months before Julia Garner's Emmy win for Outstanding Supporting Actress in a Drama Series at this year's award show. (She won last year, too, NBD.) The series also stars award-winner Jason Bateman, who directs and executive produces as well. As a crime drama about a family embroiled in a money-laundering scheme, it feels right at home on Netflix among the streamer's other intense shows.
TV: 'The Umbrella Academy'
My Chemical Romance frontman Gerard Way originally penned the comics The Umbrella Academy series is based on before Netflix picked it up for streaming. The scifi story follows a family of ragtag superheroes as they try to figure out who killed their dad. Season 2 dropped on Netflix this year, and Season 3 is already in the works.
TV: 'The Queen's Gambit'
The Netflix drama based on the book of the same name, The Queen's Gambit, is a dark and twisty tale of a chess prodigy who also dabbles in drugs and alcohol. The show—which aired as a one-season miniseries— stars Anya Taylor-Joy in a role that's catapulted her to fame and has everyone begging for the series to continue.
TV: 'Little Fires Everywhere'
Based on the book of the same name, Hulu's Little Fires Everywhere stars Reese Witherspoon and Kerry Washington as moms from two very different walks of life. Despite their children forging a friendship, nothing can make these women see eye to eye and soon it all comes to a head when Elena (Witherspoon) outs Mia (Washington) for her past transgressions.
TV: 'Outer Banks'
There's only been one season of Outer Banks so far on Netflix, but viewers are already hooked. We head down to the coast of the Outer Banks in North Carolina to meet these teens who are forever caught in a class war. It's a battle between the Kooks and the Pogues as they fall in and out of love and try to figure out the mystery of who killed John B.'s (Chase Stokes) dad.
TV: 'Ratched'
Loosely based on the character Nurse Ratched from the book One Flew Over the Cuckoo's Nest, this Netflix Original Series stars Sarah Paulson in the title role. Ratched has all the vibes of creeptastic American Horror Story, which makes sense, considering it's helmed by AHS creator Ryan Murphy. This thriller follows Nurse Ratched as she cons her way into a mental hospital, in hopes of doing things her own way.
TV: 'All-American'
All-American found a whole new life on Netflix in 2020, with Seasons 1 and 2 available to stream. The CW show follows the story of high school football player Spencer Paysinger, inspired by his real life. Daniel Ezra plays the main character, who's recruited from a rough Los Angeles neighborhood to play in prestigious Beverly Hills. Of course there are clashes among all the characters, but at its core, it's an inspiring story of finding your way.
TV: 'The Last Dance'
Credit: ESPN
ESPN's The Last Dance gave viewers an inside look at the Chicago Bulls amazing 1997-1998 season, which also happened to be Michael Jordan's last with the team. The docuseries paired footage from the Bulls in the '90s with present-day interviews with its biggest names—Jordan, Scottie Pippen, Dennis Rodman, and more—and showed what it was really like behind the scenes of perhaps the most famous and beloved NBA team in history.
1 of 20 Movie: 'Parasite'
2 of 20 Movie: '1917'
3 of 20 Movie: 'Black Panther'
4 of 20 Movie: 'Birds of Prey'
5 of 20 Movie: 'Little Women'
6 of 20 Movie: 'Just Mercy'
7 of 20 Movie: 'Bad Boys for Life'
8 of 20 Movie: 'Sonic the Hedgehog'
9 of 20 Movie: 'Contagion'
10 of 20 Movie: 'Fantasy Island'
11 of 20 TV: 'Tiger King'
12 of 20 TV: 'Cobra Kai'
13 of 20 TV: 'Ozark'
14 of 20 TV: 'The Umbrella Academy'
15 of 20 TV: 'The Queen's Gambit'
16 of 20 TV: 'Little Fires Everywhere'
17 of 20 TV: 'Outer Banks'
18 of 20 TV: 'Ratched'
19 of 20 TV: 'All-American'
20 of 20 TV: 'The Last Dance'


text:
package com.smartling.keycloak.provider;

import org.jboss.logging.Logger;
import org.keycloak.Config.Scope;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.UserFederationProvider;
import org.keycloak.models.UserFederationProviderFactory;
import org.keycloak.models.UserFederationProviderModel;
import org.keycloak.models.UserFederationSyncResult;

import java.util.Collections;
import java.util.Date;
import java.util.Set;

/**
 * Remote user federation provider factory.
 *
 * @author Scott Rossillo
 */
public class RemoteUserFederationProviderFactory implements UserFederationProviderFactory {

    public static final String PROVIDER_NAME = "User Migration API Provider";
    public static final String PROP_USER_VALIDATION_URL = "User Validation Host Base URI";

    private static final Logger LOG = Logger.getLogger(RemoteUserFederationProviderFactory.class);

    @Override
    public UserFederationProvider getInstance(KeycloakSession session, UserFederationProviderModel model) {
        return new RemoteUserFederationProvider(session, model, model.getConfig().get(PROP_USER_VALIDATION_URL));
    }

    @Override
    public Set<String> getConfigurationOptions() {
        LOG.warn("Returning configuration options");
        return Collections.singleton(PROP_USER_VALIDATION_URL);
    }

    @Override
    public String getId() {
        return PROVIDER_NAME;
    }

    @Override
    public UserFederationProvider create(KeycloakSession session) {
        return null;
    }

    @Override
    public void init(Scope config) {
        // no-op
    }

    @Override
    public void postInit(KeycloakSessionFactory factory) {
        // no-op
    }

    @Override
    public void close() {
        // no-op
    }

    @Override
    public UserFederationSyncResult syncAllUsers(KeycloakSessionFactory sessionFactory, String realmId, UserFederationProviderModel model)
    {
        throw new UnsupportedOperationException("This federation provider doesn't support syncAllUsers()");
    }

    @Override
    public UserFederationSyncResult syncChangedUsers(KeycloakSessionFactory sessionFactory, String realmId, UserFederationProviderModel model, Date lastSync)
    {
        throw new UnsupportedOperationException("This federation provider doesn't support syncChangedUsers()");
    }
}

redpajama_set_name: RedPajamaGithub


Westgarth Primary School's acclaimed music program helps build learning skills and well-rounded intelligence as well as developing lifelong interest in music.
Every class has one 50-minute session a week for music. During this time classes participate actively in a sequential program which includes movement, singing, games, development of listening skills and use of tuned and untuned percussion instruments, giving children experiences in rhythm and beat, pitch, form, expression, style and harmony.
The aim in the first three years of school is to develop basic musicianship and the beginnings of an understanding of how music is notated.
At Year Three and Year Four level this knowledge is developed further into more formal notation skills, and enhanced by offering recorder classes – which can continue to Year Six - as well as a Junior Choir. Children from Grade 4 upwards also have the opportunity to participate in after-school guitar tuition.
At Year Five and Year Six level, these experiences are developed into more creative work, whether it be using traditional percussion instruments or voice. There are also opportunities to study flute and clarinet after school, to sing in the Senior Choir and play in the Senior Band.
The music room is situated in the Clarke Street building opposite the gym.
The school's music program also contributes to its well-known performance program, which includes the school's triennial musical.
After school user pays Music lessons are endorsed by School Council as a fee-for-service activity. The school engages a guitar and violin tutor and a woodwind tutor. Students from Year 3 can participate in violin lessons. Students from Year 4 up can participate in guitar and violin. Students are able to start woodwind from Year 5. For further information please click here.
Parents can help children improve their musical abilities in many ways. The most obvious of these are to expose them to a wide variety of musical experiences, from pop to orchestral music, and by making music as well as listening to it.
You can also enrol in a wide variety of independent children's musical programs and tuition in Northcote and surrounding suburbs.


Please welcome Dan Koboldt to The Qwillery as part of the 2016 Debut Author Challenge Interviews. The Rogue Retrieval was published on January 19th by Harper Voyager Impulse.
Dan: Unlike many authors, I haven't been writing fiction my whole life. I started on January 9th, 2008, which was the first day of the "Fiction Writing" night class I took at my university. Even though I'd been a voracious reader for most of my life, and a somewhat-prolific blogger, I had no idea how to write prose.
I was, by most accounts, very bad at it. But books have always been my escape, and the idea of getting one published enchanted me. I took another course the following year, and I wrote my first novel in 2009 during NaNoWriMo.
Dan: I used to be a discovery writer (pantser) and still use that method when I'm stuck. However, I discovered Larry Brooks's Story Structure a couple of years ago, and now I use it to outline my books before I write. It's usually not a detailed outline, but I think the structure helps a lot.
Dan: Getting words on the page. I'm a fast editor, and I've finished the 50k mark for the last seven NaNoWriMos. Outside of November, however, I find it hard to keep that pace. I have a family and a job and far too many distractions.
Dan: Twenty five years of reading sci-fi and fantasy gave me the foundation to write in this genre. Lord of the Rings and the original Star Wars movies taught me to love the trilogy. I read a lot of work by modern SF/F authors, and it's hard not to be influenced by the likes of Rothfuss, Abercrombie, and Lynch. But the strongest influences on my own writing by far are my critique partners and editors. They've been vital in helping me improve my book and grow as a writer.
TQ: Describe The Rogue Retrieval in 140 characters or less.
Dan: A Vegas magician uses high-tech illusions of magic to save his bacon in a medieval world where they have the real thing (magic, not bacon).
TQ: Tell us something about The Rogue Retrieval that is not found in the book description.
Dan: It's the first book in a planned trilogy about the fight to control the fate of a pristine medieval world.
TQ: What inspired you to write The Rogue Retrieval? What appeals to you about writing Fantasy?
Dan: I love illusionists and high-tech stuff, but I'm also a fan of the escape that second-world epic fantasy offers to the reader. Once I figured out a way to have both in the same book, I just had to write it. My favorite thing about writing fantasy is the world-building. I start with a map of the world, and I build it as I go along. Alissia is the third such world I've created, and I think it's probably the most compelling, too.
TQ: What sort of research did you do for The Rogue Retrieval?
Dan: I've done a fair amount of research into modern illusions and how they're performed, which never ceases to amaze me. I also researched high-tech drones, surveillance equipment, automatic weapons, graphene, and horse doping.
Dan: Quinn Bradley, the Vegas illusionist, was the easiest to write because I pictured myself as him. Veena Chaudri, the cultural expert, was the hardest because I didn't have much experience writing from the female point of view.
TQ: Why have you chosen to include or not chosen to include social issues in The Rogue Retrieval?
Dan: I think the most obvious social issue addressed in my book is the problem of corporate exploitation. In the real world, large corporations get away with murder in the name of profits because they're so much more powerful than their victims. Their money lets them exert heavy influence over the legal system and the media. An entity like the U.S. Government might have the authority to intervene, but corporations use political donations and lobbyists to make sure that doesn't happen. It's a shame, but it's how the world works.
Dan: No one has yet asked me if *I* can do any magic along the lines of my main character. The answer is yes! I've been working on a few little tricks that I might break out at future book events.
TQ: Give us one or two of your favorite non-spoilery quotes from The Rogue Retrieval.
Dan: My favorite quote is from the first page, and it's about the two types of illusionists you find in Las Vegas: "One was the quick-fingered hack, the kind that copied everyone's tricks to use on drunken tourists. The second class, the true illusionist, ran less common. Illusionists were magic's elite, masters of distraction and misdirection. The Strip drew both classes from all over the world, just as its game tables and bright lights drew ill-fated gamblers."
Dan: Right now I'm finishing up the sequel to The Rogue Retrieval, tentatively entitled THE ISLAND DECEPTION.
Dan: Thank you so much for having me. I love the Qwillery!
Scientist and blogger Dan Koboldt weaves wonder, humor, and heart into this debut novel, The Rogue Retrieval. Fans of Terry Brooks and Terry Pratchett will find this a thrilling read.
Dan Koboldt is a genetics researcher and fantasy/science fiction author.. He has co-authored more than 60 publications in Nature, Human Mutation, Genome Research, The New England Journal of Medicine, Cell, and other scientific journals. Dan is also an avid hunter and outdoorsman. He lives with his wife and children in St. Louis, where the deer take their revenge by eating the flowers in his backyard.
The Rogue Retrieval is his first novel. You can find him online at http://dankoboldt.com/ and on Twitter at https://twitter.com/DanKoboldt.


Everyone maintains their own truth. I didn't get an email from my parents today. To be black is better than to be gay. If you were born black, at least you don't have to think about how to tell your mother about this. Follow your heart, for it never lies. I did my best. Frankly speaking, I don't want to work with him. The heavy rain prevented me from going out. Do you know what kind of thing that is? I'm only a newbie. Lin is going to town.
Sometimes, life is so unjust. Kate always shows off the big diamond ring she got from her fiance. Newspaper advertising works well for us because we get the best bang for the buck. We must promote commerce with neighboring countries. You have to have a lot of stamina to be an Olympic athlete. To write a love letter in English is not easy. I'm glad Ralf was punished. Please let us know if we can help in other ways. I would like you to know how important you are to me. He is shivering on the brink.
Please let me know about it. The dentist pulled out my decayed tooth by force. I'm going to be gone soon. They sought to prove her guilt. I knew I'd forgotten something. Ariel watched for a moment. Look at that cat. It is Mr. Brown's. How happy are you? Existence precedes essence. Van talked Tuna into taking the job.
I am recruiting drivers. Bryan doesn't like clubs where there is loud music. I made him do so. He doesn't care if his car is dirty. Cliff walked up to the counter and ordered a drink. The house is five hundred years old. She poured out all that stuff without stopping. Her car has a nice polish. The dog seems sick. This knife doesn't cut well.
All-Russian Public Opinion Research Center conducts weekly measurements of Russians trust politicians She assured him that everything was OK. She does not cook well. As far as I know, he has not arrived yet. I'm going to tell them. What's taking so long? Is it just me, or is Tatoeba extremely slow today? The train had already left by the time I got to the station. We are calling the police. I haven't done any of the things you've asked me to do.
The regime was overthrown by rebel militias. Some deny that there is a link between concussions received playing football and brain damage, so maybe if you decide to play football you're already brain damaged. Why didn't you just call? As you climb higher, the air becomes colder. Leung was lonely. Do you remember our first date? Evan kept smiling. Who did you have in mind when you made those remarks? I don't want to lose you ever again. Blayne doesn't need to bring a lunch. I'll make something for him to eat.
Carsten wanted to turn himself in to the police. Would you like a drink? You're going about this all wrong. Sundar solved the problem. Does Kazuhiro seem like he's afraid of anyone? The curtains were taken down. Saiid was satisfied with the result. I really do love your tie. You only live twice. Kimmo was stumped by the problem.
I'm still not sure what this is about. Let's start with this bottle of wine. You are not watching TV now. He likes to boast about his father's successful automobile business. Your name, please. I get paid more than most people here do. I'm three hours away. The last time I saw Dale, he had a beard. Do you really care that much? We will not add more pictures to our magazine.
Dalton stayed with us for several days. As soon as I have a dog, I'll start going for walks frequently. What would you like to drink? Coffee? No other creatures can fly as far as fast or as long as birds. Did you see that small mouse? I can't get them out of my mind. If you don't tell her, I will. I have a few ideas. You don't remember me, do you? Lenny's kids are going on a field trip to the zoo tomorrow.
She was washing the dishes. You misled me. I'm in good shape. No two are alike. Randell isn't good at telling jokes. I speak French a little, but I'm not good at it yet. I don't think we should be fighting. Are there any stores with "going out of business" sales? Pizza, please. Arthur talked Roxie into going.


As we inch closer to a stage musical adaptation of the beloved comedy "Mean Girls," executive producer and the film's screenwriter Tina Fey said a new creative force has joined the team.
"There's a secret director," Fey told the crowd at Produced By: New York, an annual east coast conference held by the Producers Guild of America.
During a featured discussion about her triple-threat status as writer-producer-star, Fey tipped her hand about the anticipated project she's been developing with her husband, composer Jeff Raymond.
"We're assisting Nell Benjamin, he's doing the lyrics this time," she said of the musical's latest book.
The musical will be mounted in Washington, D.C. in Fall 2017, an individual familiar with the project recently told Playbill.
Fey also told Playbill she's had ample time to focus on the musical, given her day job has been pushed thanks to Ellie Kemper's pregnancy. Fey and her business partner Robert Carlock are waiting for the "Unbreakable Kimmy Schmidt" star to give birth before resuming production on a third season of the Netflix original series.
"Mean Girls" was released by Paramount in 2007, and went on to gross nearly $130 million worldwide on a $17 million budget. It's also become deeply rooted in the pop culture canon, along with its stars Lindsay Lohan, Rachel McAdams, Lacey Chabert and Amanda Seyfried.
Fey also serves as executive producer for the upcoming NBC series "Great News," about a network news producer (Briga Heelan) whose mother (Andrea Martin) joins the staff as an intern.
The series will also star John Michael Higgins and Nicole Richie.


The Kansas City Chiefs traveled to Oakland to take on the scuffling Raiders for this week's Thursday Night Football contest. Oakland's season was on the line, and the Raiders played with an itchiness and edge that showed that they wanted to rise to the occasion but couldn't quite get there, right up until their last-minute comeback bid came to fruition with a massive, massive pass to Jared Cook for a touchdown! But then it was called back to the one. This set up a short touchdown pass to Crabtree… BUT IT WAS PASS INTERFERENCE! This turned the Raiders' season into first and goal from the eleven. Derek Carr threw the ball to an open Jared Cook, who had it bounce off his hands. But there was defensive holding! This put the ball at the five yard line… and the Raiders couldn't pull it off, as Patterson caught the ball.. out of bounds.
But another defensive holding! The Raiders had their 100,000th goal-to-go play. Crabtree finally, FINALLY! Caught it for a touchdown to tie the game. The point after sailed through the uprights, ending the game.
The Raiders took the game down to move to 3-4, salvaging their year. The Chiefs dropped to 5-2.
There were a ton of ups-and-downs, and enough farcical occurrences to make my life easy. Like every week (except last week because it was a legitimately good game), we highlight five of the most absurd, nonsensical and farcical things that happened in Thursday Night Football (except the ending!). All-in-all, it was a great and entertaining game of football.
Tracy Wolfson of CBS says Michael Crabtree and Donald Penn were pushing and shoving on the sideline. Mike Tice broke it up.
Things didn't go great for the Raiders in the first half tonight. There was a lot of frustration to go around as they watched their season circle the drain before pulling it out of the fire. Multiple reports of Michael Crabtree fighting with people on the sidelines only underscore that point.
The Raiders unloaded a flea flicker to great results in the first quarter. Also on the play: clear offensive pass interference, almost out of bounds, almost not a touchdown, Amari Cooper: back?
Four days after the Chiefs lost on a fluke play to Antonio Brown, they get their own long fluky touchdown to pull ahead of the Raiders.
Literally, everything he says is a gem.
Marshawn Lynch came storming off the sidelines in a scuffle and the main beneficiary of his ire was a referee. The Bay Area native redefined going stupid AND going dumb.
Out of here! Marshawn Lynch just left the locker room upset. He left in street clothes and is heading to his car.
All-in-all it was a great game! Enough nonsense going around to make Thursday Night Farceball worth it, and enough great football going around to make Thursday Night Football worth it. I'm looking forward next week to… hold on… *checks schedule* … really? This isn't a joke? Fine. Tune in next week for… ugh, Dolphins at Ravens.
Fantasy Football Week 16: Start or Sit Mack, Carson, or Damien Williams?
Next Article Fantasy Football: Start or Sit Tevin Coleman in Week Seven?


text:
Thieves stealing checks from mailboxes in Kennebunkport, nationally. What you should know.
Shawn P. Sullivan
KENNEBUNKPORT, Maine — Keep an eye on your mailbox: According to the Kennebunkport Police Department, mail thieves are back in the area.
The department is actively investigating complaints from residents about people who are stealing outgoing mail from their mailboxes. The incidents are in step with media reports of similar thefts being on the rise across the country.
How thieves use stolen checks and avoid detection
According to Kennebunkport police Detective Cory Tardif, thieves tend to go through envelopes residents leave in their mailboxes for their mail carriers to take away and deliver. The thieves take personal and business checks and then use computer software and other pieces of equipment to duplicate the checks, fill them out as they wish, and cash them.
"People should be mindful of online banking and keep track of the checks they're writing," Tardif said.
More Maine news:Kennebunk named safest community in Maine
That can be tricky, Tardif added, as thieves often will keep the dollar amount on a check the same, "in order not to raise red flags."
That means a victim could visit their bank online, see that dollar amount and mistakenly believe that their check has been processed. Then problems begin when the intended recipient of the original check — a utility company, for example — marks a bill overdue and reaches out to the victim for a payment they think they already have made.
Banks often help cover amounts stolen, making them victims, as well, Tardif said.
Thieves also are stealing identities and using the personal information to set up credit card accounts, according to Tardif.
Wanted fugitive caught:Man wanted in NH arrested after breaking into York, Maine, home
Tardif said Kennebunk has experienced several of these thefts in recent years. In the spring of 2022, Kennebunkport police arrested and charged one suspected thief.
The thefts have happened throughout the community, Tardif added, but many of them seem concentrated on rural areas where multiple mailboxes are alongside each other.
"That seems to be the type of areas they're targeting," Tardif said.
Anyone who sees anything suspicious is urged to call their local police department.
"It is recommended that you check your financial activity on a regular basis as well as (use) locked mailboxes when sending checks of any type," the Kennebunkport Police Department urged in a recent Facebook post.
Purses in cars also being targeted by thieves
While you're keeping an eye on your mailbox, keep one on your car, too.
Earlier this month, the Kennebunk Police Department reported on its Facebook page that Kennebunk and surrounding communities received reports of burglarized vehicles — incidents in which suspects targeted purses left behind in parked cars in public spaces.
According to the police, this type of crime is often described as "Felony Lane Gang" activity, a reference to a group of Florida-based thieves who travel throughout the country, stealing identification and checkbooks from unattended vehicles. Some of the acts are "smash and grabs," which means the burglar will outright break a car window, reach quickly into the car to snatch items, and then flee.
"With the stolen checkbooks and driver's licenses, the gang uses female accomplices to cash checks using the drive-through lane of banks," the Police Department stated.
More:Ex-Kennebunk police officer pleads not guilty to sexual abuse charges
The term "felony lane" derives from the lane at banks farthest from surveillance cameras and tellers, considered the easiest one for using stolen identities and cashing checks.
Dog parks, fitness centers, tennis courts and walking trails are examples of spots often targeted by the group, according to police.
"Please help us help you and secure your vehicle at all times — and do not leave valuables in plain view," the department posted.


text:
Important employee info | COVID-19 resources | Latest updates
MyMRU
Indigenous Mount Royal
Esports from basements to billion$
Spring/Summer 2021 issue
Words by ZACHARY WORDEN
Since the global lockdowns began in response to COVID-19, one industry has flourished.
According to the World Economic Forum, in 2020 the global gaming industry generated $159 billion in revenue, an increase of 9.3 per cent from the previous year. During the pandemic, gaming has offered consumers a way to escape from the real world or connect via online gaming communities.
Esports, one component of the larger global gaming industry, has offered both experienced gamers and newcomers "a chance to remain socially close while maintaining physical distancing," Vic Ly says.
Ly is the co-founder of the Alberta Esports Association (AESA) and an instructor for Mount Royal University's Esports Management Extension Certificate. The AESA provides support by promoting gaming events and connecting communities and players with resources in Alberta.
Esports has grown from just a few friends hanging out in their parents' basements into a burgeoning billion-dollar industry, Ly says. "Fifteen years ago, we didn't think about esports growing to where it is today."
Gaming on a whole new level
One visual indication of the growth of esports is the rising demand for locations and dedicated gaming venues such as the Gaming Stadium, which opened in Richmond, B.C. in 2019. The first venue of its kind in Canada and the title sponsor for the AESA, the Stadium represents the rising cultural presence of esports. With physical forums in place, esports is becoming a known entity among the general public. In 2019, Newzoo.com reported that 1.5 million Canadians were watching esports at least once a month.
"That's a huge cultural shift," says Ryan Coutts, a two-time graduate of MRU certificate programs and the business development executive for the AESA. Coutts says that esports is now starting to occupy the social space currently filled by traditional sport. "So it's a very long-term thing, but as populations get younger and younger, gaming will only become more prevalent."
Coutts and Ly think esports in Alberta is in an earlier stage of development compared with other regions in Canada and the rest of the world.
"It's an incredible opportunity to be starting out from an initial, emerging level and we can see where esports has gone in other parts of the world," Ly says. "It's only a matter of elevating ourselves here in Alberta and Canada to get esports to the level found in Asia, Europe and the U.S."
2020 Global Games Market
Per device and segment with year-on-year growth rates
Graph describing the breakdown of money in 2020 for each kind of gaming device. 2020 total $159.3 billion US +9.3%YoY CONSOLE $45.2 billion US 28% 28% PC $36.9 billion US 23% 2% BROWSER $3.0 billion US NON-BROWSER $33.9 billion US 21% MOBILE $77.2 billion US 48% TABLET $13.7 billion US 9% 40% SMARTPHONE $63.6 billion US
U.S. Esports Digital ad revenue
% change Esports digital revenue eMarketer.com Source: eMarketer, June 2020 39% million US $143 2018 23% million US $175 2019 12% million US $196 2020 15% million US $226 2021
MRU's Esports Management Extension Certificate
In 2020, the Faculty of Continuing Education at MRU introduced its Esports Management Extension Certificate, which is offered in partnership with the Continuing Education Division of the University of California, Irvine. The program gives students a chance to explore an esports organization's structure to gain an understanding of the industry and its operations.
With esports teams and opportunities popping up all over the country, aspiring players and managers now have a variety of paths to follow to get involved in the industry. Christopher Howgate recently graduated with a Bachelor of Health and Physical Education — Sport and Recreation Management and is one of the first cohort of the Esports Management Extension Certificate program. Calling himself "slightly more than a casual gamer," Howgate says the certificate is the perfect complement to his degree and that the career pathways in esports are seemingly endless.
"This is the first program of its kind to be offered in Alberta...It's a significant milestone in both legitimizing esports as an industry but also preparing the industry through academia, which is deeply critical."
Vic Ly, MRU instructor and co-founder, Alberta Esports Association
"Given that we are living in a COVID world and have been for some time, I knew I was going to have a more-than-normal amount of free time to try something new," Howgate says.
"This time of lockdown has really given the casual esports market the push it needs to take off," he says, adding that the support and mentorship he has received through the program has been exceptional.
"There's so much more to esports than just playing the game," Coutts says. "Like in hockey, there's not just the players. There are the coaches, there's the physical therapist, there are managers, marketers and the list goes on and on. The same thing exists within esports."
The certificate offers practical communications and project management skills tailored to planning and executing an esports event.
"The great thing about the certificate is that it's about how to get involved in the industry from the back end of the business. I think it will help a lot of people get in on the ground floor," Coutts says.
"This is the first program of its kind to be offered in Alberta," Ly adds. "It's a significant milestone in both legitimizing esports as an industry but also preparing the industry through academia, which is deeply critical."
As MRU jumps to the front of the line of esports education in Western Canada, three faculty members have put together a textbook exploring the industry and its impact on global marketing, business and society.
Dr. David Finch, PhD, professor of marketing, Dr. Brad Clark, PhD, associate professor of broadcast media studies and Dr. David Legg, PhD, professor of health and physical education, are part of the group responsible for Implications and Impacts of eSports on Business and Society: Emerging Research and Opportunities, published in 2019.
"The global gaming market today exceeds two billion participants and $150 billion. Esports is an extension of this market and offers enormous potential for future growth," Finch says.
Varsity recruiters are sniffing around the prospects
One league that emerged in 2020 was another first-of-its-kind in Alberta. In November, a collegiate competition sponsored by the AESA and the Alberta Colleges Athletic Conference (ACAC) took place. The ACAC Collegiate Esport Kick-Off saw 32 participants from eight ACAC institutions: Ambrose University, Concordia University of Edmonton, Keyano College, Lethbridge College, the Northern Alberta Institute of Technology, Portage College, the Southern Alberta Institute of Technology and St. Mary's University punch it out playing Super Smash Bros. Ultimate. A player from Concordia took home the title.
"The initiative of developing collegiate level esports is certainly happening and being discussed," Ly says. "Although it started with the ACAC at the college level, we've been in discussions with universities to help elevate esports to the varsity level as well."
There haven't been many sanctioned esports competitions among U Sports member universities as of yet. In July 2020, students were able to sign up to represent U Sports and their school at the International University Sport Federation's Esports Challenge Football (soccer). A 32-participant tournament for men and women from universities around the world played the Electronic Arts-produced video game FIFA 20 over 10 days. Two University of Windsor students were the only Canadians who participated in the tournament.
"Esports is such a great community ... Whatever esports looks like at MRU going forward, whether that is hosting in-person tournaments or having a varsity team, I want the identity to stay the same: a community of people who want to play video games, improve and face off against others."
Juan Rincon, community esports manager MRU N3rd Club
Gamers are mostly competing through student clubs at their universities or among groups of friends. Earlier this year, 10 students playing under the moniker of the MRU Royals participated in the College League of Legends Mountain West Conference tournament from January to March, when playoffs began.
Juan Rincon is the community esports manager at MRU's N3rd Club, a student-run club with the mission to "foster a community for people with nerdy and geeky interests, such as video games, card games, streaming and anime." He picked up his controllers for the League of Legends tournament, serving as team manager.
"Esports is such a great community," Rincon says. "Getting the chance to meet new people and talk about video games with people who are just like you is amazing."
Club N3rd is open to playing any game someone feels a community can be built around.
"I really want anyone who thinks that a game that has a shot at being a competitive esport to come and try it," Rincon says, adding that esports should offer a place where anyone and everyone can try out competitive gaming in a supportive environment.
"Whatever esports looks like at MRU going forward, I want the identity to stay the same: a community of people who want to play video games, improve and face off against others," he says.
Howgate agrees, saying the esports' friendly and inviting community makes it something he sees himself being involved with for the long term.
"This is a community I would recommend any gamer in Alberta to join. I believe that these e-leagues and competitions will be here to stay."
Howgate would like to see boundaries continue to be pushed for competitive university esports in Alberta and throughout Canada. He dreams of the next annual Crowchild Classic as having an esports component. He even sees an industry where talented esports athletes could be trained in their chosen game, and then go on to be drafted or signed by professional teams.
"MRU has a great partner in the AESA," Howgate says, and he predicts that the University is perfectly poised to become a pioneer and industry leader in the esports field.
Read more Summit
Quest for knowledge
Gamification evens the playing field in classrooms.
Health, Community & Education
A - Z Student Services
A - Z Programs
Critical Dates
ESL Programs
The Office of Safe Disclosure
Event & Theatre Services
4825 Mount Royal Gate SW
T3E 6K6
Mount Royal University is located in the traditional territories of the Niitsitapi (Blackfoot) and the people of the Treaty 7 region in Southern Alberta, which includes the Siksika, the Piikani, the Kainai, the Tsuut'ina, and the Iyarhe Nakoda. The City of Calgary is also home to the Métis Nation.
© Copyright 2022 Mount Royal University


Conveniently located right in Hoi An Ancient Town , This Hotel is just 300 m from the renowned Hoi An Ancient Town and Hoi An Market. While Japanese Covered Bridge is 500 m away, and Da Nang International Airport is accessible within a 30 km drive.
Silk Luxury Hotel & Spa is designed in modern , elegant and convenient accommodation. The hotel houses a restaurant serving a delectation of local and international cuisines .Offers free WiFi access in whole area of property. It features an outdoor pool, a fully-equipped gym ,business center and Spa therapy. or guest can be approached the 24-hour front desk for assistance with transport and tour arrangements.


YouTube vloggers are increasingly seeing the power of affiliate marketing. Become a member of our Uber or Munchery CPA Program to make great money with your popular social media and more. Members get paid for activations. So every time someone uses your promo code, you get paid. Lifestyle influencers cover a wide range of the Internet influencers that find success. But pretty much all influencers who allow their audience a peek into their life is a Lifestyle influencer. These vloggers casually mention brands and products that they use or want to promote and their audience responds in a big way!
The PromoAffiliates roster of amazing companies now includes the Munchery CPA program. Of all of our brands, you will definitely want to consider promoting Munchery. If you have an engaging following on social media or represent influencers, contact Aaron@promoaffiliates.com at PromoAffiliates headquarters. We partner with popular bloggers. The Munchery CPA program is just one of the programs we have. The feedback proves that Munchery reviews are good. People are searching for promo codes in really high numbers and sites that rank high on Google search results get more promo code activations.
I'm going to focus on lifestyle influencers as some of our ideal partnerships.
What is our Munchery CPA Program?
CPA typically means cost per action. In our Munchery CPA program, we pay our affiliates for every new person that uses their unique promo code. So for example, our top influencers make content for their platforms to give their audience an opportunity to try apps for free or discount. With a Munchery promo code, lifestyle influencers allow people to get their first delivery free. Every time someone uses the promo code this is called an activation. All of the activations for every brand are tallied and we pay out the second week of every month. It's a pretty simple program and we have a lot of success stories!
If you've been around tech and using apps for a while then you know about referral codes. There is a big difference between referral and affiliate promo codes. Payment comes when someone uses your code. So with referral programs, it usually just means that you get credit.
For example, if you are someone who uses Uber, then you have a promo code or a link that you can share with friends and family. If someone uses your rider referral code, you get credit for your Uber account. Sometimes these credits expire or are able to roll over or whatever.
Your activations are also tracked. I know it's something that I may not need to explain over and over but we have questions on this all the time. Influencers tell us that they don't make content for credit. So I just want to spell it out as clear as possible.
We are a collection of tech nerds, writers, content creators, etc based in Hollywoodland in Los Angeles, CA. Nerds have been cool for a long time but writers are always cool! The best content creators are really context enforcers. Content has to be contextual and relevant to the times and the audiences that are using the content. I have been with the company for over two years and have seen so much growth and success. We have an epic history promoting Uber and have brought the company 500,000 new users! PromoAffiliates is pretty good at pumping people up. We believe that changing your paradigm and your perspective will make you free. Understanding freedom completely means analyzing your purpose.
Our purpose as a digital marketing agency is to provide our clients with the exposure they need. Customer acquisition is a pretty simple thing if you apply the right tactics. That's how we plan to find success with this Munchery CPA program. It's going to be easy since the Munchery reviews are not bad! The digital landscape is wide open and ready for your success. True freedom means making a life and having complete faith in your passions.
In this post I plan to re-educate you a little bit on what it means to be free. We think that we're free but independence isn't as powerful as interdependence. The truth is is that we need each other. The power of community may never truly be felt because we live in a society that is so dog eat dog. We gotta take care of number 1 right? Everyone is only trying to protect for themselves. The interesting thing about the Munchery CPA program and others is that it's based on people.
You're the influencer who is powered by affiliate marketing. The data will show that affiliate marketing is only as good as the activations that are coming in. Companies love it because they pay us after the new customers have tried their services. We love it because people are paid for their work and their efforts. If you are a YouTube influencer making great content, people will respond. The Munchery CPA program is just one of many that we facilitate for you. Relevancy is key!
There are so many benefits to food delivery services like Munchery. The Munchery reviews are consistently high. As part of the Munchery CPA program, it will be helpful that you mention some of these benefits. I'm going to go over a few basic ones here, but you will find which ones you like the best. On this note, I always suggest to our affiliates that they try the service themselves. Once you try Munchery and some of our other brands, you will excel in the promotion of those brands. You can use screenshots or videos of you actually ordering. Another idea is to order the meal cooking kits and have an unboxing. Viewers love to be part of your journey. Any unboxings allow viewers to be a part of the excitement.
Differing from restaurant delivery apps, Munchery works with local chefs to make delicious meals available at a great cost. They also prepare boxes called shipping kits that allows customers to be the chef. The kits come with portioned out vegetables that just need chopping and maybe sautéing. What's great is that the recipe in the box is complete for you and the sauces are already made.
Some people don't have time to shop and prepare meals. These are the people that also benefit most from meals that just need to be heated up. You hear about these meals on the Munchery reviews. The Munchery app has a great menu that changes daily. People are pretty overwhelmed by restaurant delivery apps because there's so many options. Options are great but to be honest customers nowadays like to be told what to buy. As the Munchery menu changes daily with only a few options it feels as though there's a big selection.
Being a member and affiliate with our Munchery CPA program, you will need to know what type of customers your advertising too. Obviously if you have a certain demographic that follows you online, you will only be speaking to them. But most likely, there are a few different types of followers on your platforms. In general, millennials Love the on-demand culture. Getting whatever you want delivered, when you want it, and brought to wherever you are is pretty freakin great. Other sectors and age groups are catching on quick. Even baby boomers use on demand apps and services. They really do cross all age groups because the services are for most adults. It wouldn't make much sense to have an app just for young people.
Choi is right on this point. There have actually been laws put out in Los Angeles where no more traditionally fast food places are allowed. Areas in South Los Angeles especially have few grocery stores and no restaurants other that fast food. What makes our App and Munchery CPA programs so great is that these apps are making a difference. Munchery chef inspired meals are $7.99 delivered.
After you sign up to work with us, you will be creating content to promote Munchery. If you have YouTube popularity, you will make videos that feature the code. You have a lot of freedom to make the kind of video that you want. We can help with production if you are in Los Angeles. We have a lot of production experience and you can see some of our videos here.
Most likely, it will best to promote your code on multiple social media platforms. I'm going to detail below but you don't post the same things on all social media accounts. Snap is more intimate while Instagram is kind of like a resume that you don't just post anything. Obviously Facebook is losing showing a lack in usage.
Also, if you have a big email list, we can send out an email about the promotions. All of this should be relevant to the content that you already put out on the internet.
One way that you might want to interact with some of our clients is with their social media. Stick with what you know! You can get to know more about our brands by checking out their social media. Munchery is a great example of this because of their activity on Twitter.Content inspired by news is great for our Munchery CPA program.
Munchery just tweeted about a 5% discount for recurring orders. So even though the menu changes frequently, you can order the same thing sometimes. Another recent tweet was announcing lobster here in the Los Angeles menu. With a great picture, Munchery is already making great content.
If you are popular enough, you could just retweet or share content from the client directly sometimes. Sharing the brands own content and adding your own sentence with your promo code.
It's been mentioned a lot in here, but all the Munchery reviews are good! A few years ago, Geekwire.com gave Munchery and 9.3 out of 10. Taylor Soper, a contributor for Geekwire.com, tested 7 meal delivery services to get a sense of what options were out there for the person who is too busy or too lazy to get out and pick up their own food. Munchery reviews came in at the highest out of the group.
So the experiment focused on two categories. First was the delivery process which was about how easy it was to order the meal and also customer service. Second was also the quality of the food. With Munchery, they partner with chefs so they do control the food.
In this report, Soper gave Munchery a 4.8/5 for the food rating and 4.5/5 for the delivery service rating. Even with being a little disappointed in the soup that came with the meal, they were extremely impressed with the rest of the meal. They were testing the service in Seattle where Chef Bo Maisano was featured at the time.
Aside from restaurant delivery apps there's the services that let users do some of the cooking themselves. Mostly dominated by Blue Apron, Munchery is coming up in the ranks. Munchery delivers boxed meals that just need to be heated up. The company's ready-to-cook meal kits really spiced things up. I've mentioned these kits a lot in this post.
So awhile back, Munchery gave Business Insider a peak into these meal kits just before releasing them as an option to users. Use press to your advantage. In the Munchery CPA Program, you are promoting the app so see what others have said about it. See the next section for exactly what the cooking kits have inside them.
A contributor to BusinessInsider.com, Biz Carson, was shocked at the quality meal that the kits allows users to prepare in only 15 minutes. One secret is that the kits already have sauces prepared which is where most of the recipes flavor lies. Carson was also impressed by the schedule that came with the kits. She was also into the small touches like the box of toothpicks that was included.
The veggies were pre-sliced and the rice was pre-cooked. The meat in her meal was fresh and took the bulk of her cooking time. Even oil for the pan was included! After the meat was done, she added the veggies to be cooked. When it was all done, Carson had only used a bowl to warm the rice, a skillet and spatula, and a paper plate to spice the meat. A lot let dishes than if she had chopped the veggies herself and cooked the rice.
Lastly, dessert was part of her meal kit. It was a simple recipe that only took some simple prep. It was a chocolate fondant which is like fruit compote on a cookie with sliced almonds. After prepping the fruit and sauce, it was just a quick 3 seconds in the microwave. I think that the point of Carson's article is that, Munchery empowers you to be a part of your meal.
With recent reductions in staff people are wondering what the future holds for the company that raised $85 million not long ago. Chief executive officer James Beriker was quoted in Eater.com as saying that the company's small reduction (30 employees) was "a normal course adjustment." He went on to say that Munchery's business grew 60% in 2016 compared to 2015. There's something to be said about tricking people into cooking their own meal. Plus there's a lot of problems when just delivering for restaurants. Food can be the wrong order, it can be cold, it can have bad presentation, or even be delivered very late.
So Beriker says that Munchery is poised with the ability to delivery ready-to-eat meals to about one-third of the United States population. This is a lot of people! Munchery gets ingredients on a national and local level. Bloomberg, Munchery prepared more that 643,000 meals that were not sold between September 2014 and July 2016. This waste cost Munchery $5 million a month as is not good for business.
Tri Tran, Munchery's co-founder grew up in Vietnam. His story of moving to the United States when he was 11 and also pursuing the American dream is part of what helped Munchery reach the heights it has. Last year the company had a valuation between $250-$275 million. The company was losing money with some aggressive marketing campaigns. With our Munchery CPA program, the company only pays out when new customers have ordered their first delivery. So the Munchery brand was awarded so much money by investors because venture capitalists have been looking for a service that can also make and delivery food profitably.
The reports talks about how Munchery is also having a hard time keeping customers. This makes sense seeing as how it's easy to lure someone in with free delivery and also promo codes. The hard part is to have customers coming back over and over.
Thank you for checking out this Munchery CPA program article. I hope that it was informative enough that you also choose to work with PromoAffiliates. Contact aaron@promoaffiliates to get your unique promo code. You will promote this promo code on your social media in the manner that you wish as long as it is within the guidelines outlined by Aaron. We have a long history promoting services with promo codes and you can make great money with our programs. Our support staff will also help with content ideas if need be. Whether it's Uber or Postmates or Munchery, it's all about getting people to try the services once. After that, it's up to the company to keep the customer.
This entry was posted in Marketing News, PromoAffiliates News and tagged munchery delivery, munchery meal, munchery promo code, PromoAffiliates, seanturtle. Bookmark the permalink.


I'm always looking to try new pasta recipes with my family. We love pasta and hearty flavorful pasta sauce, so I was really excited to try the new Mezzetta sauces. At the same time I tried eggplant parmesan for the first time. It was the perfect combination of flavors and textures and we all thought it was very tasty. Be sure to scroll all the way down as I've got details for an amazing giveaway too, you could win $500!
I precooked the eggplant just slightly, so it was soft in the middle and crunchy on the outside. Mixed with the amazing flavors of the Tomato and Sweet Basil Mezzetta sauce, this is a meal I will be making again soon! Okay, enough of me talking about how amazing this is, let's make some!
First, start with fresh ingredients. Mezzetta Sauces are a real food you can feel good about eating with no added sugar and quality ingredients, the 80 years of family owned business speaks for itself. You will also need your favorite style of pasta, an eggplant, panko breadcrumbs, Parmesan cheese, paprika and garlic salt.
Slice your eggplant about 1/4″ thick and sautee with a dash of olive oil in a pan. 1 min. on each side should do it. This will soften the eggplant just enough.
Use an eggwash to coat each slice, then cover with the bread crumb mixture. Shallow fry in olive oil for a perfectly crispy and delicious eggplant parm.
So good you won't want to share, so make sure to cook up a big batch! Serve with your favorite noodles and flavor of Mezzetta sauce and your dinner is ready in about 15 min.
In a pan over med-high heat cook eggplant in a dash of olive oil. Cook 1 min. each side, remove from pan. Add enough oil to shallow fry and heat. Mix all dry ingredients together in a bow. Egg coat each slice of eggplant and dip in crumb mix Generously coat each side. Shallow fry eggplant. Should be about a min. on each side, but watch closely, it cooks fast. The coating should brown, but not too dark. remove and place on a paper towel to drain. Heat sauce and place a generous amount on a plate. Place the eggplant on top of sauce and serve with pasta.
To celebrate the launch of Napa Valley Homemade Mezzetta is giving away some amazing prizes. You can head over to the site HERE and enter your e-mail to win!!
I'm not a huge eggplant fan but that really looks good!
This looks super easy and perfect for dinner!
I'm always looking for eggplant recipes since I usually grow them in my garden. Thank you for sharing your recipe on #HomeMattersParty!


text:
(angular => {
    'use strict';

    angular.module('tubular.directives')
        .controller('tbGridController',
        [
            '$scope',
            'tubularPopupService',
            'tubularModel',
            '$http',
            'tubularConfig',
            '$window',
            'tubularLocalPager',
            'modelSaver',
            'compareOperators',
            'sortDirection',
            function (
                $scope,
                tubularPopupService,
                TubularModel,
                $http,
                tubularConfig,
                $window,
                tubularLocalPager,
                modelSaver,
                compareOperators,
                sortDirection) {
                const $ctrl = this;
                const prefix = tubularConfig.localStorage.prefix();
                const storage = $window.localStorage;

                $ctrl.$onInit = () => {
                    $ctrl.isInLocalMode = angular.isDefined($ctrl.gridDatasource);

                    if ($ctrl.isInLocalMode && angular.isDefined($ctrl.serverUrl))
                        throw 'Cannot define gridDatasource and serverUrl at the same time.';

                    $ctrl.tubularDirective = 'tubular-grid';

                    $ctrl.name = $ctrl.name || 'tbgrid';
                    $ctrl.rows = [];
                    $ctrl.columns = [];

                    $ctrl.savePage = angular.isUndefined($ctrl.savePage) ? true : $ctrl.savePage;
                    $ctrl.currentPage = $ctrl.savePage ? (parseInt(storage.getItem(`${prefix + $ctrl.name}_page`)) || 1) : 1;
                    $ctrl.savePageSize = angular.isUndefined($ctrl.savePageSize) ? true : $ctrl.savePageSize;
                    $ctrl.pageSize = $ctrl.pageSize || 20;
                    $ctrl.saveSearchText = angular.isUndefined($ctrl.saveSearchText) ? true : $ctrl.saveSearchText;
                    $ctrl.totalPages = 0;
                    $ctrl.totalRecordCount = 0;
                    $ctrl.filteredRecordCount = 0;
                    $ctrl.requestedPage = $ctrl.currentPage;
                    $ctrl.hasColumnsDefinitions = false;
                    $ctrl.requestCounter = 0;
                    $ctrl.requestMethod = $ctrl.requestMethod || 'POST';
                    $ctrl.serverSaveMethod = $ctrl.serverSaveMethod || 'POST';
                    $ctrl.currentRequest = null;
                    $ctrl.autoSearch = $ctrl.saveSearchText ? (storage.getItem(`${prefix + $ctrl.name}_search`) || '') : '';
                    $ctrl.search = {
                        Text: $ctrl.autoSearch,
                        Operator: $ctrl.autoSearch === '' ? compareOperators.NONE : compareOperators.AUTO
                    };

                    $ctrl.isEmpty = false;
                    $ctrl.tempRow = new TubularModel($ctrl, {});
                    $ctrl.editorMode = $ctrl.editorMode || 'none';
                    $ctrl.canSaveState = false;
                    $ctrl.showLoading = angular.isUndefined($ctrl.showLoading) ? true : $ctrl.showLoading;
                    $ctrl.autoRefresh = angular.isUndefined($ctrl.autoRefresh) ? true : $ctrl.autoRefresh;
                    $ctrl.serverDeleteUrl = $ctrl.serverDeleteUrl || $ctrl.serverSaveUrl;

                    // Emit a welcome message
                    $scope.$emit('tbGrid_OnGreetParentController', $ctrl);
                };

                $scope.columnWatcher = () => {
                    if ($ctrl.hasColumnsDefinitions === false || $ctrl.canSaveState === false) {
                        return;
                    }

                    storage.setItem(`${prefix + $ctrl.name}_columns`, angular.toJson($ctrl.columns));
                };

                $scope.$watch('$ctrl.columns', $scope.columnWatcher, true);

                $scope.serverUrlWatcher = (newVal, prevVal) => {
                    if ($ctrl.hasColumnsDefinitions === false || $ctrl.currentRequest || newVal === prevVal || $ctrl.isInLocalMode) {
                        return;
                    }

                    $ctrl.retrieveData();
                };

                $scope.$watch('$ctrl.serverUrl', $scope.serverUrlWatcher);

                $scope.gridDatasourceWatcher = (newVal, prevVal) => {
                    if ($ctrl.hasColumnsDefinitions === false || $ctrl.currentRequest || newVal === prevVal || angular.isDefined($ctrl.serverUrl)) {
                        return;
                    }

                    $ctrl.retrieveData();
                };

                $scope.$watch('$ctrl.gridDatasource', $scope.gridDatasourceWatcher);

                $scope.hasColumnsDefinitionsWatcher = newVal => {
                    if (newVal !== true) {
                        return;
                    }

                    $ctrl.retrieveData();
                };

                $scope.$watch('$ctrl.hasColumnsDefinitions', $scope.hasColumnsDefinitionsWatcher);

                $scope.pageSizeWatcher = () => {
                    if ($ctrl.hasColumnsDefinitions && $ctrl.requestCounter > 0) {
                        if ($ctrl.savePageSize) {
                            storage.setItem(`${prefix + $ctrl.name}_pageSize`, $ctrl.pageSize);
                        }

                        $ctrl.retrieveData();
                    }
                };

                $scope.$watch('$ctrl.pageSize', $scope.pageSizeWatcher);

                $scope.requestedPageWatcher = () => {
                    if ($ctrl.hasColumnsDefinitions && $ctrl.requestCounter > 0) {
                        $ctrl.retrieveData();
                    }
                };

                $scope.$watch('$ctrl.requestedPage', $scope.requestedPageWatcher);

                $ctrl.saveSearch = () => {
                    if (!$ctrl.saveSearchText) {
                        return;
                    }

                    if ($ctrl.search.Text === '') {
                        storage.removeItem(`${prefix + $ctrl.name}_search`);
                    } else {
                        storage.setItem(`${prefix + $ctrl.name}_search`, $ctrl.search.Text);
                    }
                };

                $ctrl.addColumn = item => {
                    if (item.Name == null) {
                        return;
                    }

                    if ($ctrl.hasColumnsDefinitions !== false) {
                        throw 'Cannot define more columns. Column definitions have been sealed';
                    }

                    $ctrl.columns.push(item);
                };

                $ctrl.newRow = (template, popup, size, data) => {
                    $ctrl.tempRow = new TubularModel($ctrl, data || {});
                    $ctrl.tempRow.$isNew = true;
                    $ctrl.tempRow.$isEditing = true;

                    if (angular.isDefined(template) && angular.isDefined(popup) && popup) {
                        tubularPopupService.openDialog(template, $ctrl.tempRow, $ctrl, size);
                    }
                };

                $ctrl.deleteRow = row => {
                    const urlparts = $ctrl.serverDeleteUrl.split('?');
                    let url = `${urlparts[0]}/${row.$key}`;

                    if (urlparts.length > 1) {
                        url += `?${urlparts[1]}`;
                    }

                    $ctrl.currentRequest = $http.delete(url, {
                        requireAuthentication: getRequiredAuthentication()
                    })
                        .then(response => $scope.$emit('tbGrid_OnRemove', response.data),
                        error => $scope.$emit('tbGrid_OnConnectionError', error))
                        .then(() => {
                            $ctrl.currentRequest = null;
                            $ctrl.retrieveData();
                        });
                };

                function getRequiredAuthentication() {
                    return $ctrl.requireAuthentication ? ($ctrl.requireAuthentication === 'true') : true;
                }

                $ctrl.remoteSave = (row, forceUpdate) => {
                    if (!forceUpdate && !row.$isNew && !row.$hasChanges()) {
                        row.$isEditing = false;
                        return null;
                    }

                    $ctrl.currentRequest = modelSaver.save($ctrl.serverSaveUrl, $ctrl.serverSaveMethod, row)
                        .then(data => {
                            $scope.$emit('tbForm_OnSuccessfulSave', data);
                            row.$isLoading = false;
                            row.$isEditing = false;
                            $ctrl.currentRequest = null;
                            $ctrl.retrieveData();

                            return data;
                        }, error => {
                            $scope.$emit('tbForm_OnConnectionError', error);
                            row.$isLoading = false;
                            $ctrl.currentRequest = null;

                            return error;
                        });

                    return $ctrl.currentRequest;
                }

                $ctrl.saveRow = (row, forceUpdate) => {
                    if (!$ctrl.isInLocalMode) {
                        return $ctrl.remoteSave(row, forceUpdate);
                    }

                    if (row.$isNew) {

                        if (angular.isUndefined($ctrl.onRowAdded)) {
                            throw 'Define a Save Function using "onRowAdded".';
                        }

                        $ctrl.onRowAdded(row);
                    }
                    else {
                        if (angular.isUndefined($ctrl.onRowUpdated)) {
                            throw 'Define a Save Function using "onRowUpdated".';
                        }

                        $ctrl.onRowUpdated(row, forceUpdate);
                    }
                };

                $ctrl.verifyColumns = () => {
                    const columns = angular.fromJson(storage.getItem(`${prefix + $ctrl.name}_columns`));
                    if (columns == null || columns === '') {
                        // Nothing in settings, saving initial state
                        storage.setItem(`${prefix + $ctrl.name}_columns`, angular.toJson($ctrl.columns));
                        return;
                    }

                    angular.forEach(columns, column => {
                        const current = $ctrl.columns.find(el => el.Name === column.Name);

                        if (!current) {
                            return;
                        }

                        // Updates visibility by now
                        current.Visible = column.Visible;

                        // Update sorting
                        if ($ctrl.requestCounter < 1) {
                            current.SortOrder = column.SortOrder;
                            current.SortDirection = column.SortDirection;
                        }

                        // Update Filters
                        if (current.Filter != null && current.Filter.Text != null) {
                            return;
                        }

                        if (column.Filter != null &&
                            column.Filter.Text != null &&
                            column.Filter.Operator !== compareOperators.NONE) {
                            current.Filter = column.Filter;
                        }
                    });
                };

                $ctrl.getRequestObject = skip => {
                    if (skip === -1) {
                        skip = ($ctrl.requestedPage - 1) * $ctrl.pageSize;
                        if (skip < 0) skip = 0;
                    }

                    if ($ctrl.isInLocalMode) {
                        return {
                            requireAuthentication: getRequiredAuthentication(),
                            data: {
                                Count: $ctrl.requestCounter,
                                Columns: $ctrl.columns,
                                Skip: skip,
                                Take: parseInt($ctrl.pageSize),
                                Search: $ctrl.search,
                                TimezoneOffset: new Date().getTimezoneOffset()
                            }
                        }
                    }

                    return {
                        url: $ctrl.serverUrl,
                        method: $ctrl.requestMethod || 'POST',
                        requireAuthentication: getRequiredAuthentication(),
                        data: {
                            Count: $ctrl.requestCounter,
                            Columns: $ctrl.columns,
                            Skip: skip,
                            Take: parseInt($ctrl.pageSize),
                            Search: $ctrl.search,
                            TimezoneOffset: new Date().getTimezoneOffset()
                        }
                    };
                };

                $ctrl.retrieveLocalData = (request) => {
                    if (angular.isArray($ctrl.gridDatasource)) {
                        $ctrl.currentRequest = tubularLocalPager.process(request, $ctrl.gridDatasource)
                            .then($ctrl.processPayload, $ctrl.processError)
                            .then(() => $ctrl.currentRequest = null);
                    }
                };

                $ctrl.retrieveRemoteDataServerside = (request) => {
                    $ctrl.currentRequest = $http(request)
                        .then($ctrl.processPayload, $ctrl.processError)
                        .then(() => $ctrl.currentRequest = null);
                };

                $ctrl.retrieveRemoteDataClientside = (request) => {
                    $ctrl.currentRequest = $http(request)
                        .then(response => tubularLocalPager.process(request, response.data), $ctrl.processError)
                        .then($ctrl.processPayload, $ctrl.processError)
                        .then(() => $ctrl.currentRequest = null);
                };

                $ctrl.retrieveData = () => {
                    // If the ServerUrl is empty skip data load
                    if ((!$ctrl.isInLocalMode && !$ctrl.serverUrl) || $ctrl.currentRequest !== null) {
                        return;
                    }

                    if ($ctrl.columns.length === 0) {
                        throw 'You need to define at least one column';
                    }

                    $ctrl.canSaveState = true;
                    $ctrl.verifyColumns();

                    if ($ctrl.savePageSize) {
                        $ctrl.pageSize = (parseInt(storage.getItem(`${prefix + $ctrl.name}_pageSize`)) || $ctrl.pageSize);
                    }

                    $ctrl.pageSize = $ctrl.pageSize < 10 ? 20 : $ctrl.pageSize; // default

                    const newPages = Math.ceil($ctrl.totalRecordCount / $ctrl.pageSize);
                    if ($ctrl.requestedPage > newPages) $ctrl.requestedPage = newPages;

                    const request = $ctrl.getRequestObject(-1);

                    if (angular.isDefined($ctrl.onBeforeGetData)) {
                        $ctrl.onBeforeGetData(request);
                    }

                    $scope.$emit('tbGrid_OnBeforeRequest', request, $ctrl);

                    if ($ctrl.isInLocalMode) {
                        $ctrl.retrieveLocalData(request);
                    }
                    else if ($ctrl.localPaging) {
                        $ctrl.retrieveRemoteDataClientside(request);
                    }
                    else {
                        $ctrl.retrieveRemoteDataServerside(request);
                    }
                };

                $ctrl.processError = error => {
                    $ctrl.requestedPage = $ctrl.currentPage;
                    $scope.$emit('tbGrid_OnConnectionError', error);
                };

                $ctrl.processPayload = response => {
                    $ctrl.requestCounter += 1;

                    if (!response || !response.data || !response.data.Payload) {
                        $scope.$emit('tbGrid_OnConnectionError', {
                            statusText: `tubularGrid(${$ctrl.$id}): response is invalid.`,
                            status: 0
                        });
                        return;
                    }

                    const data = response.data;

                    $ctrl.dataSource = data;

                    $ctrl.rows = data.Payload.map(el => {
                        const model = new TubularModel($ctrl, el);

                        model.editPopup = (template, size) => {
                            tubularPopupService.openDialog(template, new TubularModel($ctrl, el), $ctrl, size);
                        };

                        return model;
                    });

                    $scope.$emit('tbGrid_OnDataLoaded', $ctrl);

                    $ctrl.aggregationFunctions = data.AggregationPayload;
                    $ctrl.currentPage = data.CurrentPage;
                    $ctrl.totalPages = data.TotalPages;
                    $ctrl.totalRecordCount = data.TotalRecordCount;
                    $ctrl.filteredRecordCount = data.FilteredRecordCount;
                    $ctrl.isEmpty = $ctrl.filteredRecordCount === 0;

                    if ($ctrl.savePage) {
                        storage.setItem(`${prefix + $ctrl.name}_page`, $ctrl.currentPage);
                    }
                };

                $ctrl.sortColumn = (columnName, multiple) => {
                    const filterColumn = $ctrl.columns.filter(el => el.Name === columnName);

                    if (filterColumn.length === 0) {
                        return;
                    }

                    const column = filterColumn[0];

                    if (column.Sortable === false) {
                        return;
                    }

                    // need to know if it's currently sorted before we reset stuff
                    const currentSortDirection = column.SortDirection;
                    const toBeSortDirection = currentSortDirection === sortDirection.NONE
                        ? sortDirection.ASCENDING
                        : currentSortDirection === sortDirection.ASCENDING ? sortDirection.DESCENDING : sortDirection.NONE;

                    // the latest sorting takes less priority than previous sorts
                    if (toBeSortDirection === sortDirection.NONE) {
                        column.SortOrder = -1;
                        column.SortDirection = sortDirection.NONE;
                    } else {
                        column.SortOrder = Number.MAX_VALUE;
                        column.SortDirection = toBeSortDirection;
                    }

                    // if it's not a multiple sorting, remove the sorting from all other columns
                    if (multiple === false) {
                        angular.forEach($ctrl.columns.filter(col => col.Name !== columnName),
                            col => {
                                col.SortOrder = -1;
                                col.SortDirection = sortDirection.NONE;
                            });
                    }

                    // take the columns that actually need to be sorted in order to re-index them
                    const currentlySortedColumns = $ctrl.columns.filter(col => col.SortOrder > 0);

                    // re-index the sort order
                    currentlySortedColumns.sort((a, b) => a.SortOrder === b.SortOrder ? 0 : a.SortOrder > b.SortOrder);

                    angular.forEach(currentlySortedColumns, (col, index) => col.SortOrder = index + 1);

                    $scope.$broadcast('tbGrid_OnColumnSorted');
                    $ctrl.retrieveData();
                };

                $ctrl.getFullDataSource = () => {
                    const request = $ctrl.getRequestObject(0);
                    request.data.Take = -1;
                    request.data.Search = {
                        Text: '',
                        Operator: compareOperators.NONE
                    };

                    $ctrl.currentRequest = $http(request)
                        .then(response => {
                            $ctrl.currentRequest = null;
                            return response.data.Payload;
                        }, error => {
                            $scope.$emit('tbGrid_OnConnectionError', error);
                            $ctrl.currentRequest = null;
                        });

                    return $ctrl.currentRequest;
                };

                $ctrl.visibleColumns = () => $ctrl.columns.filter(el => el.Visible).length;
            }
        ]);
})(angular);