text:
Svejstrup is a Danish surname. Notable people with the surname include:

Jesper Qualmann Svejstrup (born 1963), Danish biochemist and molecular biologist
Søren Svejstrup (born 1937), Danish diver

Danish-language surnames

redpajama_set_name: RedPajamaWikipedia


text:
Q: LinQ Aggregate Error - Sequence contains no elements Please help me here. I have a LinQ Query with many filter conditions.
Below is my query:
var Aggregate = linqkb.Where(s => s.Status.Equals("Approved")).Select(s => s.Approver)
    .Distinct()
    .Aggregate((i, j) => i + ";" + j)
    .Split(';')
    .Distinct();

In some cases, i am getting the error:
Error Message : Sequence contains no elements
Stack Trace   : at System.Linq.Enumerable.Aggregate[TSource](IEnumerable`1 source, Func`3 func)

I am new to linQ. Please suggest.
I have googled and tried using  **.DefaultIfEmpty()** before Aggregator as shown below:
var Aggregate = linqkb.Where(s => s.Status.Equals("Approved")).Select(s => s.Approver)
    .Distinct()
    .DefaultIfEmpty()
    .Aggregate((i, j) => i + ";" + j)
    .Split(';')
    .Distinct();

But this doesnt work.
Any suggestions?

A: Aggregate uses the first item in the sequence as the accumulator if none is provided. This can't be done if there are no items in the sequence, so in that case an exception is thrown. You can provide an explicit initial value i.e.
.Aggregate(string.Empty, (i, j) => i + ";" + j)

Be aware that this method of joining strings is inefficient and creates a lot of intermediate garbage. You could use string.Join although it's not clear why you immediately split the result on ";" in the next line.

A: Direct solution for the issue is as follows:
var Aggregate = linqkb
    .Where(s => s.Status.Equals("Approved"))
    .Select(s => s.Approver)
    .Distinct()
    .Aggregate(string.Empty, (i, j) => i + ";" + j)
    .Split(';')
    .Distinct();

i.e. you should use overload of Aggregate with seed parameter.
However yours query looks quite wired. In case if you just want distinct values of Approver field it is enough to use following construct:
var Aggregate = linqkb
    .Where(s => s.Status.Equals("Approved"))
    .Select(s => s.Approver)
    .Distinct();

In case if Approver field contains values separated with ";" and you want to extract them and get distinct list then you should use:
var Aggregate = linqkb
    .Where(s => s.Status.Equals("Approved"))
    .SelectMany(s => s.Approver.Split(";"))
    .Distinct();

A: The error is what is says, there are no elements. linqkb.Where(s => s.Status.Equals("Approved")) returns empty set. Aggregation can't run over it. You can use Any() for check. Also your joining with ';' and later doing Distinct doesn't do anything really.
var Aggregate = linqkb.Where(s => s.Status.Equals("Approved"))                                                                               .Select(s => s.Approver)
   .Distinct();

if (!Aggreate.Any())
return ...;

redpajama_set_name: RedPajamaStackExchange


Located in the heart of the North York Moors National Park with a river running just ½-mile away and a short walk from the famous Cropton Brewery, this lovely cottage, one of eleven holiday cottages surrounded by 80 acres of open countryside and is set on a working equestrian farm. Daisy Cottage is a semi-detached cottage set in a rural location. Guests are welcome to visit the Friesian mares and foals wandering at their leisure. Landscaped gardens dotted with seating areas are an ideal place in which to relax and enjoy the peace and quiet. An ideal base from which to explore the surrounding area, as the market town of Pickering is just 5 miles away, where guests can board the NYM steam train - sit back and enjoy the stunning scenery as it meanders its way through the Esk Valley into Grosmont and Goathland. Cropton Forest is ideal for cycling and walking enthusiasts, which is just minutes away from the farm. With quaint little villages dotted around the National Park, guests will be spoilt for choice. The ancient port of Whitby is an easy 18-mile drive, with Sandsend a little further along the coastline and a 3-mile stretch of sandy beach joining the two together. Take a step back in time and visit the smugglers coves of Robin Hood's Bay and Runswick Bay - children will love fossil hunting here. Further south, the elegant seaside town of Scarborough, with a colourful promenade and two sandy bays, is perfect for family days out. For a more sophisticated day out, the minster city of York is an easy 40-mile drive and home to art galleries, museums and theatres.
Shop 5 miles, pub and restaurant ½ mile.
Oil central heating, electricity, bed linen, towels, Wi-Fi and logs for wood burners included.
Large lawned garden with patio, sitting-out area and furniture. Shared 80-acre landscaped grounds with sitting-out area and furniture.
This property can be booked together with Honeysuckle (29763) and Daisy (29762) to accommodate up to 12 guests.


If you submit an application for an insurance product offered by us, then we will disclose your personal information to your chosen insurance company to process your application. If you submit a request for information or an application for an insurance product offered through an insurance agent, agency or other business partner with whom we associate or contract, then we may disclose your personal information to that agent, agency or business partner to process your request for information or application or to otherwise provide you with information about insurance products (including contacting you by telephone, email, or otherwise to discuss insurance products in which you may be interested). If you complete an application with us that is processed through a government-run exchange or other government-run entity, we will disclose your personal information to that government-run exchange or entity. Please be assured that these partners are only allowed to use your personal information to process your requested quote, application or enrollment form and are legally obligated to maintain strict confidentiality.
If Calyx Advantage Insurance Services is involved in a merger, acquisition, or sale of all or a portion of its assets, you will be notified via email and/or a prominent notice on our website of any change in ownership or uses of your personal information, as well as any choices you may have regarding your personal information.
If you provide us an indication of your consent to disclose, share or use your personal information in connection with a third party, we may disclose, share or use your personal information in that manner. For example, if you opt in to our social media mailing lists and promotional updates, then we may disclose your relevant personal information to social media platforms where Calyx Advantage Insurance Services has a corporate account for the purpose of adding you to Calyx Advantage Insurance Services's social media mailing and promotional update lists. Generally in such a situation, the social media platforms are not allowed to use your personal information for their own purposes unless you have a direct account on such social media platforms, in which case your personal information would be handled by the social media platforms in accordance with the social media platforms' privacy policies.


Learning to drive can be a daunting experience: there's a lot to learn about controlling your car, road rules and behaviour, identifying hazards and general safe driving techniques. You'll probably also begin planning what type of car you want to drive in the future, and the choice of whether to get manual or automatic driving lessons will come up.
That last bit is important because how comfortable you feel behind the wheel will influence your overall learning experience, from how fast and how well you learn and retain knowledge to how confident you are when you eventually begin driving solo.
If you don't need to learn how to drive manual, then learning to drive in an automatic car can simplify your learning experience and make for a smoother and more enjoyable time.
While there are advantages to learning manual, in this article we'll go over 5 advantages of getting driving lessons in an automatic car.
The main advantage of driving a car with automatic transmission is how much simpler the experience is right from the moment you get in the car, including the process of actually starting your car up.
In a manual you have to hold the clutch down while you start the ignition, and then while driving you have to spend your time juggling clutch and gear shifts whenever increasing or decreasing speed. In an automatic car this process is handled by the car itself, which lets you focus more on the road, traffic, communicating with your driving instructor, and identifying potential hazards.
In other parts of the world, manual transmission is still more common, and some vehicles such as vans with manual transmission are still more popular. However, cars with automatic transmission are far more common in Australia than manual cars, and it's far more likely your family owns an automatic car - especially if the car is only a few years old.
You will also find far more driving instructors offering automatic driving lessons, and depending on the driving school you may even find that getting your driving lessons in a manual will cost you extra due to their limited supply of manual driving instructors.
One of the largest factors that delays learner drivers from taking those first steps and getting driving lessons to begin with is the thought of stalling the car in busy traffic. This can feel especially scary if you're learning to drive in Sydney, Melbourne, or another large city with lots of traffic, or in an area that requires lots of stopping and starting on hills.
It is not possible for you to stall an automatic car (usually), as the way an automatic car transfers power from the engine to the wheel drive is different and doesn't rely on manual input from the driver using the clutch.
Automatic cars don't require as much coordination as driving a manual, since you're not trying to divide your attention between external things like traffic and hazards, and internal things such as engine sounds, clutch and gear shift timings, or even successfully getting the stick into the correct gear.
Automatic driving lessons allow the learner driver to give the road, other traffic, and hazard identification that little bit more focus, and many beginner drivers find it easier to learn when they can give their full attention to communicating with their driving instructor.
Some people genuinely enjoy driving manual and feel like an automatic isn't as engaging, or they will argue that learning manual will make you a better driver and you should learn in one from the beginning. While it's true that learning in a manual teaches you advanced skills, learning in an automatic will not impact your ability to learn the most important elements of driving which will keep you safe on the road - and you may find that it helps you pay that extra bit of attention to the road.
In an automatic car, you're able to keep both your hands on the steering wheel for much longer because you aren't required to change gears manually. For more nervous learner drivers, this can help with confidence and feeling that you have more control of the car at all times.
If you just want to learn in the most comfortable setting, or if you're just not sure you'll ever use a manual car in the future and don't think it's necessary, then getting automatic driving lessons is a good way to help you gain the confidence and experience you need on the road. There's nothing stopping you coming back to it later on if you really want to learn to drive manual, and you can always bridge that skill gap when you've got a good base of confidence to build from.
Are you looking to find local automatic driving instructors near you? Then check out our online booking platform below.
Book driving lessons online today in under 60 seconds with EzLicence and get yourself on the right track to driving safely and successfully. If after a few lessons you're feeling confident enough to move to manual driving lessons, then changing your instructor is a hassle free process through our online booking portal.


text:
Evropská unie zahrádkářů neboli Evropská liga zahrádkářů (Coin de Terre et des Jardins Familiaux) je zájmové sdružení národních svazů, jejichž členové jsou majiteli či nájemci malých zahrádek nebo zájemci o trávení volného času činností nazývanou zahrádkaření. Byla založena v Lucembursku roku 1926. V současnosti sdružuje 15 organizací s více než 3,5 miliony členů.

Českou republiku zde zastupuje Český zahrádkářský svaz.

Členové Evropské unie zahrádkářů
Belgie – National Verbond van Volkstuinen/Ligue Nationale du Coin de Terre et du Foyer Jardins Populaires
Česko – Český zahrádkářský svaz
Dánsko – Kolonihaveforbundet for Denmark
Finsko – Suomen Siirtolapuutarhaliito
Francie – Ligue Française du Coin de Terre et du Foyer
Lucembursko – Ligue Luxembourgeoise du Coin de Terre et du Foyer
Německo – Bundesverband Deutscher Gartenfreunde
Nizozemsko – Algemeen Verbond van Volkstuinders Vereinigingen in Nederland
Norsko – Norsk Kolonihagerforbund
Polsko – Polski Związek Działkowców
Rakousko – Zentralverband der Kleingärtner, Siedler und Kleintierzüchter Österreichs
Slovensko – Slovenský zväz záhradkárov
Spojené království – National Society of Allotment and Leisure Gardeners
Švédsko – Svenska Forbundet for Kolonitradgardear och Fritidsbyar
Švýcarsko – Schweizer Familiengärtnerverband

Externí odkazy
Web Evropské unie zahrádkářů.
Údaje o Evropské unii zahrádkářů na webu ČZS.

Zahradnické organizace
Zahrádkáři
Nestátní neziskové organizace
Ekologické spolky


Slow braised meats are my favorite type of dish, and the osso bucco is a classic comfort dish – particularly good for the cold winter nights.
I first learned my osso bucco from the Terra cookbook and I recently had a "refresher" at the Culinary Institute of America bootcamp.
To prepare the mirepoix, dice the onion, carrots, and celery, and mince the garlic.
Heat the olive oil in a large frying pan, and saute the mirepoix (onions, garlic, carrots and celery) until translucent – about 10 – 15 min. Then add the fennel seeds and pepper flakes.
With a hand blender or food processor, puree the canned tomatoes. Stir in the tomatoe puree in the mirepoix. Saute for another 2 min. Add the white wine, and bring to a boil. Then add the stock and bring to a boil again. Season with 2 tbs salt or more if needed.
In the meantime, pat dry the veal shank pieces with paper towel.
Heat 2-3 tbs canola or vegetable oil in a frying pan. Season the shanks on one side with salt and pepper, and place in the pan with the seasoned side down. While the shanks are browning on the down side, season the upper side with salt and pepper. Once browned on one side, flip, and brown on the other.
While the meat is browning I usually use scissors to cut the connective tissue encircling the shanks. Otherwise the connective tissue has the tendency to shrink more / faster than the meat while cooking, and as a result the shank pieces tend to warp; cutting the connective tissue keeps them flat.
Remove from the pan and place in an oven proof Dutch oven. For all my braises I use a large Bulgarian clay pot called гювеч [gyuvech] that my dad brought me 20 yrs ago. But any oven proof Dutch oven would do.
You also need to make parchment lid for your Dutch oven. This is another trick I learned from the Terra cookbook. Start with a square piece of parchment large enough to cover your Dutch oven completely. Fold it diagonally to form a triangle. Hold the middle of the folded edge of the triangle, and fold again so that the long side of the triangle is folded on itself. Then hold the edge of the triangle that's folded, and keep folding in half. Every time you fold, use the handles of scissors or the handle of a knife to press the folded edges.
At the end you should have something resembling a paper airplane. Then measure the parchment lid in your Dutch oven – the length of your parchment "airplane" needs to be equal to the internal radius of the vessel.
Cut off the excess length of the paper airplane, and cut half an inch off the tip of it. When you unfold the parchment airplane you should have a circle with a small hole in the middle.
Add the mirepoix and stock mixture to the Dutch oven, cover with the parchment lid, and place in the oven.
Braise for 3+ hours in the oven. The meat should be very tender – falling off the large center bone. Once the meat is ready, use a slotted spoon to carefully remove the shanks from the Dutch oven and place them in a metal tray. Wait for the braising liquid to cool and then place it in the food processor. Puree the sauce until smooth. The resulting sauce should be quite thick.
When ready to serve, warm the veal shanks in the oven, place them on warn plates and cover with the sauce. Creamy polenta makes a nice side dish for the osso bucco. Optionally, you can also make gremolata (chopped parsley and lemon zest) and sprinkle it on top.


text:
Discover Music Free Weekly Download
This week's download from producer Nickodemus will make your body move
By Tarik Moody
This week's download comes from DJ and producer Nickodemus and his latest album, "A Long Engagement." You have seven days to download the track, "Inmortales (Body Move)" featuring Femina.
A project five years in the making, New York DJ and producer Nickodemus is gearing up for one of his largest undertakings to date with upcoming artist album, "A Long Engagement." Due out May 4 via Nickodemus' Brooklyn label Wonderwheel Recordings, the project encompasses the artist's travels over the past few years and incorporates a myriad of genres including funk, Latin, deep house, hip-hop, Arabic and electronic.
As for Nickodemus, the veteran DJ / producer is somewhat of a legend in his own right. Beginning in the mid-90s, Nickodemus has sculpted an international presence for himself DJing parties in cities across the world from Seoul to São Paulo. Through his travels, Nickodemus has been provided with a unique perspective that has allowed him to create an original sound that compiles soundbites from his journeys around the globe.
Free Weekly Download
Tarik Moody
HYFIN Program Director | Radio Milwaukee
See stories by Tarik Moody

redpajama_set_name: RedPajamaCommonCrawl


text:
import Attachment from "@sendgrid/helpers/classes/attachment";
import EmailAddress from "@sendgrid/helpers/classes/email-address";
import Mail from "@sendgrid/helpers/classes/mail"
import Personalization from "@sendgrid/helpers/classes/personalization";
import ResponseError from "@sendgrid/helpers/classes/response-error";

export {
  Attachment,
  EmailAddress,
  Mail,
  Personalization,
  ResponseError,
}

redpajama_set_name: RedPajamaGithub


text:
Fred Federspiel is an American technology entrepreneur, nuclear physicist and inventor.

Biography

Born in West Lafayette Indiana in 1963, Federspiel earned a PhD in experimental nuclear physics from the University of Illinois at Urbana–Champaign in 1991, where he led the first self-consistent  measurement of the electric and magnetic polarizability of the proton.

In 1993, he married his wife, Carey Mills, with whom he has four children,Harry, Ella,Erin, and Leo, who would go on to become keep-it-up world champion on February 9 2023, before getting thrown into a lake the same day. A Baritone Sax enthusiast, he played in professor John Garvey's Jazz band for seven years. In 1991 Federspiel joined Los Alamos National Laboratory where he built the real-time data acquisition and analysis system for the Liquid Scintillator Neutrino Detector experiment, which reported evidence for neutrino oscillations in 1996. In 1997 he joined BiosGroup, and then in 1999 founded e-Xchange Advantage Corporation (e-XA) to deploy technology allowing institutional traders to control the information released to the market about their orders.  e-XA became Pipeline Trading Systems LLC, which implemented Federspiel's inventions to reduce the cost inflicted by high-frequency trading on institutional trade execution. Federspiel's block market invention  was one of two major market structure experiments enabling institutions to direct information dissemination about block orders to likely trading counterparties, the other notable example being Liquidnet. In 2011, Pipeline reached a settlement with the Securities and Exchange Commission (SEC) over allegations that a Pipeline affiliate may have traded with Pipeline customer orders without adequate disclosure. Federspiel agreed to pay the SEC $100,000 to settle the matter. Federspiel is currently CEO and Founder of Dart Video Communications, provider of Home Dart, a real-time video text messaging tool for real estate professionals. In 2020 Fred joined AlgoCortex LLC to improve the efficiency of the trading process through intelligent automation and preserve the hard-earned assets of institutional investors and their clients.

Technical innovation

Federspiel is an inventor on US patents covering the display of market data, the design of trading systems, mechanisms to disseminate order information, and mechanisms to incentivize liquidity providers to provide quality trades to block trading systems.

References

1963 births
Living people
Grainger College of Engineering alumni
People from West Lafayette, Indiana


We don't know about you, but without a gloss of something pretty in pink or boldly red, our lips feel positively naked. Regardless of whether it's a bold red lipstick or a clear swipe of balm, our pouts always need a little something.
Lips Appreciation Day is March 16, and all of us are very appreciative of our favorite lip products. We asked our beauty blogger friends what their own lips can't live without and, after reading their favorites, – you may want to get your shopping list ready!


Ever wander through one of those beautiful boutique home decorating stores just before the Christmas season? If you have, you know these stores are often filled with tasteful, unique and sometimes breathtakingly beautiful holiday ideas. Just exactly where do these store owners get these original home decorating ideas? The answer to this burning question is that they get them at a variety of extravagant trade shows around the country. Let's take a look at just what the source is for all this holiday decorating bliss.
According to "Selling Christmas Decorations Magazine", the major shows that US buyers report as their most important sources of holiday decorating ideas are The Atlanta International Gift and Home Furnishings Market, The Dallas Total Home & Gift Market/Holiday & Home Expo, The New York International Gift Fair, and The Chicago Market: Living & Giving.
The Atlanta show is attended by buyers of furnishings and home décor, as well as gift shop owners, interior decorators and those who sell gourmet food and elegant tableware for the holidays. A big influence in the industry, this show is for the trade only, so if you want to know the latest you'll have to hook up with a local decorator who makes attendance at this show a priority.
Billed as the most complete wholesale market in the country, the Dallas Total Home & Gift Market this June featured 222 exhibitors in the Christmas category alone. In the category of Christmas lights, a real original is 12 Gauge Designs. In true Texas style, this off-the-wall manufacturer offered Christmas lights in the shape of 12 gauge shotgun shells. Don't let anyone ever tell you Texas doesn't have an attitude all its own!
Not to be outdone the New York International Gift Fair packs 2900 exhibitors into the Javitts Exhibition Hall and the Pier 94 passenger ship terminal. Here you'll find a mind boggling selection of merchandise for the home and holidays. Each August 30,000 buyers from 50 states and 77 countries descend on the city to collect the gather holiday decorating merchandise from the 4 corners of the world. When it comes to lights decorations, this show, as well as The Chicago Market, have plenty of ideas to satisfy even the most selective designer.


text:
Undirected Cyclic Thoughts
Regulations in lending: The Equal Credit Opportunity Act (2/7)
undirected.substack.com
UCL Letter #6: April 20, 2020
Will Fry
Welcome to the sixth letter of Undirected Cyclic Thoughts. The last letter served as the first of seven posts in a series on lending regulations. It outlined the Truth in Lending Act, one of the earliest laws still relevant to this day. Today we'll focus on the second regulation to be examined: The Equal Credit Opportunity Act.
If you are not one of the dozen people who subscribe to this newsletter, the context for this series can be found at the top of the first post: Regulations in lending: TILA (1/7).
If you are one of the dozen people who subscribe to this newsletter, sorry for the delay - I know this is the highlight of your quarantine and that you've put your life on hold for the past 20 days to hear what comes next. For better or worse, I'm trying to launch something by end of quarantine and, as always, my estimates for shipping were a bit, erm, optimistic.
So. Let's get to it!
This is the second act mentioned in Synchrony's list of lending-laws-that-we-may-or-may-not-be-breaking. Unlike the TILA, the Equal Credit Opportunity Act (or ECOA as we'll be referring to it) does not receive a special shoutout explaining exactly why it concerns the firm. But, fear not! Once you force yourself through the next 4000 words, you will very quickly understand what risk it poses.
Note to reader: This is a good time to close this tab, feel a small twinge of guilt but quickly move on with your life.
Note to reader: If you're still reading this, I'm sorry for you. I hope Netflix comes out with something new soon.
Ok, so similarly to what we did with the Truth in Lending Act, the best way to understand the ECOA is to look at the decade or so leading up to its introduction. The ECOA was first enacted in 1974. I say first because it took our lovely Congress a few tries to get it right… reminds me of a certain ally's killsquad performance in 2018. Anyway, this means we're looking at the 60s for clues as to how we got the ECOA. Luckily, you don't have to look very hard.
Wait? All men are created equal?
If you try to summarize the 60s in one sentence and neglect the Civil Rights Movement, you should really go back to grade school… or move out of Mississippi. One of the two.
The 60s was the decade of the Civil Rights Movement and set the stage for the ECOA.
The Civil Rights Act of 1964 banned discrimination based on "race, color, religion, sex or national origin" in employment practices and public spaces.
The Fair Housing Act of 1968, which was the most filibustered piece of legislation in our nation's history, expanded prohibitions on discrimination to include the sale, rental and financing of housing.
The majority of the nation was up in arms demanding equal rights, demanding that all men (and women) are treated equally, and pushing for change in many aspects of society.
And although one could read various civil rights acts as applying to discrimination in finance and lending, the banks clearly didn't. The only explicit call-out to date was discrimination based on race, religion, and national origin was prohibited in the sale, rental and financing of housing. Meaning discrimination continued in other departments of our nation's banks. Not only that, but the Fair Housing Act itself left some protected classes out to dry, including those on federal income support and those without a Y chromosome.
As with many social issues, change often comes from (1) injustice and (2) enough people caring about that injustice. Luckily, the preceding few decades in the U.S. meant just about every household cared about injustice as it pertained to lending.
One nation, Under debt, Indivisible…
In the previous letter we discussed the explosion of credit in the 50s. We looked at a nation obsessed with three things: homeownership, auto ownership, and grease in your hair. The 60s were no different (minus maybe the grease?).
Between 1945 and 1967, consumer credit skyrocketed in the U.S. In 1945, there was $7B in consumer credit outstanding, or about $50 per person. By 1967, that number was $100B, or about $500(!) per person.
Despite a change in the order of magnitude of outstanding debt, the processes behind lending weren't progressing at the same speed. Loan officers were often making lending decisions based off dubious "algorithms." There wasn't much in the way of automated credit scoring. Lenders were using hard copies of credit reports as well as additional "facts". "Facts" such as, and I kid you not, a person's reputation. THEIR REPUTATION!
I mean, if you confronted a loan officer in the 60s and questioned their "algorithm," it's not like they'd have nothing to show. They'd definitely show you their fancy scorecard. Scorecard? Yes, scorecard. Back in the day, loan officers used scorecards to determine creditworthiness. They'd get a list of factors and they would score each by their very standardized and unbiased intuition.
Unfortunately, this didn't work out well for a lot of Americans, including white people! As late as the early 70s, lenders were routinely requiring single, widowed, or divorced women to provide a male relative as a cosigner. Not only that, they were discounting the wage of working women even if they were the primary breadwinners. I mean, Jesus, discounting an already discounted wage… freedom and equality for all, huh?
Congress: We should do something
In the early 70s, Congress started kicking around a bunch of bills designed to clean up discrimination in lending. By late 1974, Congress had gotten one through the Senate and signed into law by President Ford. The ECOA was one of a series of lending-related acts and was formed as an amendment to a consumer protection act passed in the late 60s.
The act itself was quite brief - much more digestible than the TILA. It set out a pretty basic purpose: insure that credit is made available with fairness, impartiality and without discrimination on the basis of sex or marital status. Wait, what was that again? "[…] without discrimination on the basis of sex or marital status."
Sadly, the one bill that made it out to the senate floor was one that seemed to forget about the whole Civil Rights Movement of the decade prior. The laws may have had changed a good bit since the early 60s but the composition of the legislature hadn't. And it showed.
Prohibited Discrimination
The amendment itself prohibited discrimination in two ways:
(a) It shall be unlawful for any creditor to discriminate against any applicant on the basis of sex or marital status with respect to any aspect of a credit transaction.
The last part of that sentence is important: "with respect to any aspect of a credit transaction." This would later be interpreted to include aspects as removed as bank locations and language-specific ads.
(b) An inquiry of marital status shall not constitute discrimination for purposes of this title if such inquiry is for the purpose of ascertaining the creditor's rights and remedies applicable to the particular extension of credit, and not to discriminate in a determination of creditworthiness.
This is a not-very-important carve-out of the above and not worth spending too much time on.
Definition of Credit
Unlike the TILA which went to great lengths to define various forms of credit - revolving and non-revolving, floating vs. fixed interest - the ECOA made it quite simple.
It's credit if it is affording a debtor that right to (a) differ payment of debt, (b) incur debt, or (c) purchase property or services and pay later.
The ECOA carved out a set of regulations to accompany the act, however, they were not set by Congress. Instead, Congress put in a placeholder to keep everyone happy. "We'll get to this after enactment but before the effective date." In hindsight, this probably wasn't a great idea, as the very exercise of aligning on the regulations sent Congress back to the drawing board to right their wrongs.
Overriding the States
Nonetheless, they did have the wherewithal to say, "we don't know exactly what the regulations will be, but we take precedence over whatever <insert state name, default=Alabama> is telling their residents."
If you're familiar with this period of U.S. history, you'll be well aware that Congress had good reason:
With that in mind, the ECOA made it clear that this act overrides state laws with minimal exceptions. Moreover, it explicitly called out a few instances where state laws are no longer valid:
Any state law that prevents separate extension of credit to each spouse does not apply when each spouse voluntarily applies for separate credit from the same creditor.
Should each spouse apply and obtain credit accounts with the same creditor, their accounts cannot be aggregated or combined for determining charges or loan ceilings.
If you don't take the carrot, here's the stick
Lastly, they laid out the penalties. Should lenders choose to ignore this law, as their governors ignored civil rights acts for quite some time, they would face consequences.
There are three parts to the punishment here, and they seem to bite.
Damages to Applicant: If you do not comply with a requirement, you owe the aggrieved applicant the sum of the damages sustained by the applicant.
Punitive to Applicant: If you do not comply with a requirement, you may owe the aggrieved applicant up to $10,000 in punitive damages.
Punitive in Class Action: The total recovery of a class action lawsuit shall not exceed the lesser of $100,00 or 1% of the net worth of the creditor.
Where were you last decade?
In April 1975, the Board of the Fed met to align on the regulations which would accompany the ECOA. At this proceeding, the first set of regulations were proposed and commentators were allowed to address the body. Their message, in short, was, "where were you last decade?"
Out of that meeting came two things: (1) an initial set of regulations to accompany the existing Act, and (b) an embarrassed Congress sent out to amend an act passed only 6 months ago.
Regulation B (Unamended)
The initial set of regulations was decent insofar as preventing discrimination based on sex and age. They severely limited the ability to discriminate against a woman, married or not:
A creditor may only require a co-signer if the applicant is not creditworthy
A creditor may not discount the income of an applicant OR an applicant's spouse because of sex or marital status
A creditor may not ask about childbearing capability or intentions, nor mak assumptions relating to the likelihood of a woman's leaving the labor force.
Nonetheless, one victory that some did not expect was around credit history. Prior to the ECOA, if a couple had a joint credit line, most of the time information was only reported to the bureaus under the husband's name. Regulation B nipped that in the bud. Starting after June 1977, creditors were forced to report information in both spouses' name so long as both spouses either used or were contractually liable for the credit account.
ECOA (Amended)
When Congress came back with its tail between its leg, it seemed to have taken its tongue lashing seriously. In slightly less than a year after the rule-making proceeding of 1975, Congress put forth the Equal Credit Opportunity Act Amendments of 1976.
Within this set of amendments, it first set out to right its wrong with respect to forms of discrimination. It laid out three additional forms of discrimination prevented:
Discrimination on the basis of race, color, religion, national origin, age, sex or marital status
Discrimination based on all or part of an applicant's income originating from public assistance programs
Discrimination due to the applicant having exercised any right under the Consumer Credit Protection Act (e.g. the parent act of the ECOA)
Next, it added a major new form of protection for all consumers: transparency around applications. Under the amended ECOA, creditors are required to notify an applicant of its action within thirty days of receiving a completed application. Moreover, if the action is adverse (e.g. credit is denied, credit is revoked, an existing agreement is changed), the creditor is required to give a statement of reasons for the adverse action.
This statement of reasons can take two forms: either (i) the reasons spelled out in writing or (ii) a notification that discloses the applicant's right to a statement of reasons and the identity of the office from which that statement can be obtained.
If you have half a brain, you can imagine that most creditors allotted (and still allot) to go with form (ii). However, this protection was crucial for giving the ECOA any weight at all. Think about it - if you never knew what happened to your application or why it was denied, how could you go about filing a complaint in the first place?! "Excuse me, Mr. DOJ, but I applied for credit and I have a feeling they didn't like me very much."
Additionally, the amendments included a raising of the penalties for maximum class action awards from a ceiling of the lessor of $100,000 or 1% of the networth of creditor to the lesser of $500,000 or 1% of the networth of creditor. Why would this matter? Bank consolidation!!! More and more creditors were worth well of $10M, which made an increase to $500,000 or 1% a worthy cause.
To make matters even more serious, the amendment granted the Attorney General authorization to prosecute matters where there is reason to believe a pattern of behavior has occurred.
Lastly, Congress wanted to make sure it got it right this time. As such, it required annual reports on the administration of this act by the Board of the Fed and the Attorney General. These annual reports continue to this day and we'll dive into few recent ones in a bit.
Regulation B (Amended)
Now by the time the first meeting convened to put together an annual report for Congress, the Fed knew that the original Regulation B was due for some amendments after all the changes to the underlying ECOA. They quickly expanded upon the original to prevent the newly included forms of discrimination, and summarized things into two basic prohibitions:
A creditor cannot discriminate on a prohibited basis, and
A creditor cannot make any oral or written statement to applicants or to prospective applicants that would discourage them, on a prohibited basis, from applying.
They also clarified the adverse action notifications while giving two exceptions to the thirty-day rule:
If the creditor extended a counter-offer, they are given 90 days
If the creditor realized that the submitted application was incomplete and informed the applicant of such, then they do not need to give an adverse action.
All-in-all, by the end of 1976, the ECOA was a pretty good win for the country. The amended act extended to cover most forms of discrimination recognized at the time, and the accompanying Regulation B did a good job of spelling out the details.
With the amended act set to go live in 1977, the FTC, Fed and friends had their work cut out for them. And go to work they did. Over the following decades, they heard complaints, opened investigations, and referred matters that seemed to exhibit a pattern of behavior to the DOJ.
Theories of liability
What resulted from the early DOJ cases was a set of two theories of liability used when prosecuting matters: disparate treatment and disparate impact.
Treatment refers to the process the prospective debtor is subjected to with respect to any aspect of the transaction. Treatment is considered disparate if it is different for an applicant based on a prohibited basis (e.g. race, national origin, marital status). An example of this would be a request for more information from a divorcee vs. a married woman.
Impact refers to the outcome for a prospective debtor. Impact is considered disparate if it results from seemingly neutral policies or practices that have an adverse effect on a member of a protected class and either (i) do not meet a legitimate business need or (ii) whose stated need can be achieved by means less disparate in impact.
An example of disparate impact from policies not meeting a legitimate business need could be higher interest rates blindly charged to Hispanic applicants for auto loans.
An example of disparate impact from policies that can be achieved by means less disparate in impact could be the use of ZIP codes in underwriting. ZIP codes may often lead to discrimination against minority neighborhoods and there are likely better means to calculate individual creditworthiness.
As you can imagine, disparate impact is both the most important and the most difficult theory of liability to unwrap. However, it's easier to consider by example. To do that, let's look at these theories of liability in the context of recent reports to Congress.
Reporting to Congress
In September of 2017, the DOJ submitted its annual report to Congress on enforcement activities in 2016. The report gives a good peak behind the curtain of how this act is protecting consumers from discrimination.
Example of disparate treatment
For a case of disparate treatment to be won, it must be shown that the treatment of an applicant of a protected class is materially different than the treatment of a similar applicant of an unprotected class. One example in the report from 2017 is found in United States v. BancorpSouth.
BancorpSouth is a regional bank in the Southeast, but its activities under investigation centered in Memphis. After receiving complaints to the HUD and Bureau, the CFPB sent in undercover operatives to mystery shop credit products. Their finding: the bank failed to provide mortgage lending services on an equal basis to majority African American neighborhoods in the Memphis area.
There were two parts to this allegation: (1) active redlining and (2) discrimination in marketing efforts.
The bank outlined neighborhoods that were primarily African American and then refused to serve them or served them at much higher interest rates. The discriminatory redlining treatment resulted in the bank only opening branches in majority-white neighborhoods and actively discouraging applications from applicants residing in the primarily African American neighborhoods.
Their marketing efforts also fell short. They failed to perform meaningful marketing in the minority neighborhoods. In fact, there was absolutely no specific marketing efforts towards minority communities. Additionally, their advertisements promoted individual loan originators, most of whom were white, failing to market the availability of their product to all creditworthy applicants.
The CFPB consent order required the bank to rectify this through $2.78M in relief to borrowers, $4M in relief to the affected community, and $3M in penalties to the CFPB amongst other requirements.
Example of disparate impact
Now, in order to prove disparate impact, a seemingly neutral policy or practice must be shown to discriminate on a protected basis and either not being necessary for business or its aim be achievable by a means with less disparate impact.
As we discussed previously, this is more complicated than disparate treatment. Under the Trump administration, the CFPB has been under-resourced and enforcement activities under the disparate impact theory of liability have decreased. This has led to most disparate impact cases being focused on auto-lending, where brokers working on behalf of Toyota or Honda have been given too much leeway in setting interest rates. However, we can go back to the Obama administration's 2013 report for a more nuanced example.
One of the cases mentioned in that report was against Ally Financial (the auto lender owned by GM). The CFPB's complaint alleged that Ally discriminated by charging over 200,000 non-white borrowers higher interest rater than white borrowers. Although the case was settled, they set out to prove their original allegations by looking at underwriting and pricing results. By using proxies for race, they found that pricing had a disparate impact on minorities despite there not being a credible business need. Had they failed to prove that in court, the CFPB would have been forced to show that there was a similar pricing model that would have a less disparate impact - a feat that has not been proven by the DOJ as of late.
What's interesting here, is that the CFPB did not need to prove that a certain variable is included, which is responsible for a disparate impact. Instead, they only needed to show that the model in its entirety had a disparate impact. For anyone who's done a bit of statistics, this poses an obvious problem multi-variate models. With that in mind, let's look how the 1974/6 ECOA is affecting business today.
What does this mean today?
A lot. In my point of view, the ECOA is a more interesting act than the TILA. The TILA was an attempt at having some sense of law-and-order in a nascent and exploding credit industry. The ECOA was an attempt to make credit opportunities equal, something that is much harder to do. Whereas a business can comply with the TILA by being somewhat organized, a business needs to take a more concerted effort to comply with the ECOA.
Moreover, as both advertising and underwriting have grown much more sophisticated over the past 40 years, businesses are at heightened risks for imposing disparate treatment and disparate impact without malice. Two modern sectors that are clearly seeing these risks are targeted advertising and alternative lenders.
U.S. Government vs. Facebook: Episode 901
It's no news that Facebook has been in the hot seat with the U.S. government ever since the 2016 election. But, recently the ECOA has played a role in pouring gas on the fire.
Early last year, Facebook settled a series of lawsuits alleging that they were responsible for discrimination as it applied to job, housing and credit advertising. The ACLU, the Communications Workers of America and a few other groups sought to show that by offering micro-targeting features to advertisers (e.g. show an ad to users with children, users in a certain ZIP code, users of a certain age), Facebook was complicit in disparate treatment of protected communities.
According to the plaintiffs, the following use cases were being enabled by Facebook:
If a lender was worried that a handicap person is at a disadvantage in repaying the loan, the lender could exclude users who like pages associated with disabilities (e.g. wheelchair companies, ADA, etc) from seeing their ads.
If a lender was worried that a certain ZIP code represents people who are not creditworthy, the lender could exclude users from those ZIP codes from seeing their ads.
As a result of this settlement, Facebook overhauled their advertising platform. Now, Facebook reviews ads and determines if they belong to a special category. If they are, the advertisers' microtargeting abilities are severely limited.
Since everything in life is a tradeoff, this meant that running ads in a protected category became much less efficient. Small community banks are now forced to target users who clearly wouldn't bank with them (e.g. live dozens of miles away) and more and more users see irrelevant ads… (not to equate irrelevant ads and discrimination, but you get the point).
Fintech beware
But Facebook isn't the only company being affected. In the lending world there's been a huge push to more sophisticated origination and underwriting practices. Companies like Sofi are using novel datasets and newly-back-in-vogue financial products like income share agreements are taking off.
Nearly all of these startups are trying to gain a competitive advantage through underwriting. The idea is that by using more alternative data (e.g. performance in school, SAT scores, local job market data), lenders can better extend and price credit.
Whereas before someone may have no credit history and be denied financing, now with the help of alternative data a startup may be willing to lend based on projected income due to a STEM degree.
Yet despite these bold and optimistic pitches, the room for error in disparate impact is much larger than before. If you include a seemingly neutral (and maybe even, good) variable in your models, you could very well be denying equally creditworthy minority applicants.
Below is a chart from a study by the AEI, showing that some protected classes would be disparately impacted should a variable like the one we discussed above be weighted highly:
Although no regulation actions have been taken on ISA underwriting or the latest batch of startups offering consumer lending, the courts have already seen relevant drama unfold for traditional lenders.
Sallie Mae Corp, most clearly NOT a startup, used a variable as seemingly innocuous as university-specific default rates in their model for student loans. A decision that wound up costing them a pretty penny after a student sued. The student argued that such a variable unduly penalizes students that attend schools with large minority populations when other, less disparate, variables could have been used. This case was later settled, but I would not be surprised if more come about over the next decade.
Now that we've seen how the ECOA originated, the regulation actions taken on its basis, and the concerns it poses for both advertisers and lenders, I think it's pretty clear what risk Synchrony is referencing in their 10K. They need to keep an eye on their advertising audiences and track as much data as possible to be able to prove both business need and uniqueness of the models, should the CFPB or DOJ come calling.
Although the CFPB may be on uneasy footing under the Trump administration, the takeaway from this post should be that the disparate impact theory is still alive and well and the disparate treatment theory has never been stronger. With that in mind, it'll be interesting to see how the latest boom in fintech approaches ensuring equality of credit opportunities while pushing the envelope on the latest in advertising, underwriting and servicing.
All about the Equal Credit Opportunity Act
Do We Still Need the Equal Credit Opportunity Act?
Your Equal Credit Opportunity Rights
Equal Credit Opportunity Act Amendments of 1976
Guidance for ECOA
2016 Report to Congress
Fair Credit Billing Act and Equal Credit Opportunity Act
Laws and Regulations: ECOA
The fight against financial advertisers using Facebook for digital redlining
Pricing without discrimination: Alternative student loan pricing, income-share agreements, and the Equal Credit Opportunity Act
Facebook to limit demographic targeting by advertisers
2018 FAIR HOUSING TRENDS REPORT
Facebook Settles Civil Rights Cases by Making Sweeping Changes to Its Online Ad Platform
Request for Information Regarding the CFPB's Inherited Regulations and
Inherited Rulemaking Authorities, Docket No. CFPB-2018-0012, 12 CFR Chapter X
'Mystery Shoppers' Help U.S. Regulators Fight Racial Discrimination At Banks
The Evolution of Redlining Post-Financial Crisis and Best Practices for Financial Institutions
© 2023 Will Fry


text:
Community members find ways to work through traumas of police brutality
Target brings back teacher discount program for fourth year
Educators who sign up for Target Circle will get a one-time coupon for 15% off school supplies.
Author: Alexandra Simon
Published: 11:36 AM CDT July 20, 2021
Updated: 11:44 AM CDT July 20, 2021
MINNEAPOLIS — With summer in full swing, it might seem a bit early to start thinking about the upcoming school year. But teachers, it's time to make your back-to-school shopping list!
To help educators get their supply shopping done early and at a discount, Twin Cities-based Target is bringing back its popular Teacher Prep event for a fourth year.
To take advantage of the savings, teachers need to sign up for Target Circle, the retailer's loyalty program. Once registered, you'll get a one-time discount of 15% off select classroom supplies and necessities. It's redeemable through July 31.
The discount is available to all K-12 teachers, homeschool educators, daycare and early childhood learning center teachers, university and college professors and trade school teachers.
According to Target, over 80% of this year's back-to-school collection is under $10.
For parents and students doing their own school shopping, Target Circle users all earn 1% in rewards each time an eligible purchase is made with a non-RedCard.
Minnesota schools await further guidance on fall classes and masking
All students should wear masks in school this fall, top pediatrics group says
Freshmen enrollment at the University of Minnesota sees a boom after the pandemic


text:
package org.apereo.cas.support.oauth.web.endpoints;

import com.google.common.base.Throwables;
import org.apereo.cas.authentication.Authentication;
import org.apereo.cas.authentication.principal.PrincipalFactory;
import org.apereo.cas.authentication.principal.Service;
import org.apereo.cas.authentication.principal.ServiceFactory;
import org.apereo.cas.authentication.principal.WebApplicationService;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.apereo.cas.services.RegisteredServiceAccessStrategyUtils;
import org.apereo.cas.services.ServicesManager;
import org.apereo.cas.services.UnauthorizedServiceException;
import org.apereo.cas.support.oauth.OAuth20GrantTypes;
import org.apereo.cas.support.oauth.OAuth20ResponseTypes;
import org.apereo.cas.support.oauth.OAuthConstants;
import org.apereo.cas.support.oauth.profile.OAuth20ProfileScopeToAttributesFilter;
import org.apereo.cas.support.oauth.profile.OAuthClientProfile;
import org.apereo.cas.support.oauth.profile.OAuthUserProfile;
import org.apereo.cas.support.oauth.services.OAuthRegisteredService;
import org.apereo.cas.support.oauth.util.OAuthUtils;
import org.apereo.cas.support.oauth.validator.OAuth20Validator;
import org.apereo.cas.support.oauth.web.AccessTokenResponseGenerator;
import org.apereo.cas.support.oauth.web.BaseOAuthWrapperController;
import org.apereo.cas.ticket.OAuthToken;
import org.apereo.cas.ticket.accesstoken.AccessToken;
import org.apereo.cas.ticket.accesstoken.AccessTokenFactory;
import org.apereo.cas.ticket.code.OAuthCode;
import org.apereo.cas.ticket.refreshtoken.RefreshToken;
import org.apereo.cas.ticket.refreshtoken.RefreshTokenFactory;
import org.apereo.cas.ticket.registry.TicketRegistry;
import org.apereo.cas.web.support.WebUtils;
import org.pac4j.core.context.J2EContext;
import org.pac4j.core.profile.ProfileManager;
import org.pac4j.core.profile.UserProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.Optional;

/**
 * This controller returns an access token according to the given
 * OAuth code and client credentials (authorization code grant type)
 * or according to the refresh token and client credentials
 * (refresh token grant type) or according to the user identity
 * (resource owner password grant type).
 *
 * @author Jerome Leleu
 * @since 3.5.0
 */
public class OAuth20AccessTokenEndpointController extends BaseOAuthWrapperController {
    private static final Logger LOGGER = LoggerFactory.getLogger(OAuth20AccessTokenEndpointController.class);

    @Autowired
    private CasConfigurationProperties casProperties;

    private RefreshTokenFactory refreshTokenFactory;
    private AccessTokenResponseGenerator accessTokenResponseGenerator;

    public OAuth20AccessTokenEndpointController(final ServicesManager servicesManager,
                                                final TicketRegistry ticketRegistry,
                                                final OAuth20Validator validator,
                                                final AccessTokenFactory accessTokenFactory,
                                                final PrincipalFactory principalFactory,
                                                final ServiceFactory<WebApplicationService> webApplicationServiceServiceFactory,
                                                final RefreshTokenFactory refreshTokenFactory,
                                                final AccessTokenResponseGenerator accessTokenResponseGenerator,
                                                final OAuth20ProfileScopeToAttributesFilter scopeToAttributesFilter,
                                                final CasConfigurationProperties casProperties) {
        super(servicesManager, ticketRegistry, validator, accessTokenFactory,
                principalFactory, webApplicationServiceServiceFactory, scopeToAttributesFilter, casProperties);
        this.refreshTokenFactory = refreshTokenFactory;
        this.accessTokenResponseGenerator = accessTokenResponseGenerator;
    }

    /**
     * Handle request internal model and view.
     *
     * @param request  the request
     * @param response the response
     * @return the model and view
     * @throws Exception the exception
     */
    @PostMapping(path = OAuthConstants.BASE_OAUTH20_URL + '/' + OAuthConstants.ACCESS_TOKEN_URL)
    public ModelAndView handleRequestInternal(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
        try {
            response.setContentType(MediaType.TEXT_PLAIN_VALUE);

            if (!verifyAccessTokenRequest(request, response)) {
                LOGGER.error("Access token request verification fails");
                return OAuthUtils.writeTextError(response, OAuthConstants.INVALID_REQUEST);
            }

            final String grantType = request.getParameter(OAuthConstants.GRANT_TYPE);
            final Service service;
            final Authentication authentication;

            final boolean generateRefreshToken;
            final OAuthRegisteredService registeredService;

            final J2EContext context = WebUtils.getPac4jJ2EContext(request, response);
            final ProfileManager manager = WebUtils.getPac4jProfileManager(request, response);

            if (isGrantType(grantType, OAuth20GrantTypes.AUTHORIZATION_CODE) || isGrantType(grantType, OAuth20GrantTypes.REFRESH_TOKEN)) {
                final Optional<UserProfile> profile = manager.get(true);
                final String clientId = profile.get().getId();
                registeredService = OAuthUtils.getRegisteredOAuthService(getServicesManager(), clientId);

                // we generate a refresh token if requested by the service but not from a refresh token
                generateRefreshToken = registeredService != null && registeredService.isGenerateRefreshToken()
                        && isGrantType(grantType, OAuth20GrantTypes.AUTHORIZATION_CODE);

                final String parameterName;
                if (isGrantType(grantType, OAuth20GrantTypes.AUTHORIZATION_CODE)) {
                    parameterName = OAuthConstants.CODE;
                } else {
                    parameterName = OAuthConstants.REFRESH_TOKEN;
                }

                final OAuthToken token = getToken(request, parameterName);
                if (token == null) {
                    LOGGER.error("No token found for authorization_code or refresh_token grant types");
                    return OAuthUtils.writeTextError(response, OAuthConstants.INVALID_GRANT);
                }
                service = token.getService();
                authentication = token.getAuthentication();

            } else {
                final String clientId = request.getParameter(OAuthConstants.CLIENT_ID);
                registeredService = OAuthUtils.getRegisteredOAuthService(getServicesManager(), clientId);
                generateRefreshToken = registeredService != null && registeredService.isGenerateRefreshToken();

                try {
                    // resource owner password grant type
                    final Optional<OAuthUserProfile> profile = manager.get(true);
                    if (!profile.isPresent()) {
                        throw new UnauthorizedServiceException("OAuth user profile cannot be determined");
                    }
                    service = createService(registeredService, context);
                    authentication = createAuthentication(profile.get(), registeredService, context, service);

                    RegisteredServiceAccessStrategyUtils.ensurePrincipalAccessIsAllowedForService(service, registeredService, authentication);
                } catch (final Exception e) {
                    LOGGER.error(e.getMessage(), e);
                    return OAuthUtils.writeTextError(response, OAuthConstants.INVALID_GRANT);
                }
            }

            final AccessToken accessToken = generateAccessToken(service, authentication, context);
            RefreshToken refreshToken = null;
            if (generateRefreshToken) {
                refreshToken = this.refreshTokenFactory.create(service, authentication);
                getTicketRegistry().addTicket(refreshToken);
            }

            LOGGER.debug("access token: [{}] / timeout: [{}] / refresh token: [{}]", accessToken,
                    casProperties.getTicket().getTgt().getTimeToKillInSeconds(), refreshToken);

            final String responseType = context.getRequestParameter(OAuthConstants.RESPONSE_TYPE);
            final OAuth20ResponseTypes type = Arrays.stream(OAuth20ResponseTypes.values())
                    .filter(t -> t.getType().equalsIgnoreCase(responseType))
                    .findFirst().orElse(OAuth20ResponseTypes.CODE);

            this.accessTokenResponseGenerator.generate(request, response, registeredService, service,
                    accessToken, refreshToken, casProperties.getTicket().getTgt().getTimeToKillInSeconds(), type);

            getTicketRegistry().addTicket(accessToken);

            response.setStatus(HttpServletResponse.SC_OK);
            return null;
        } catch (final Exception e) {
            LOGGER.error(e.getMessage(), e);
            throw Throwables.propagate(e);
        }
    }

    /**
     * Return the OAuth token (a code or a refresh token).
     *
     * @param request       the HTTP request
     * @param parameterName the parameter name
     * @return the OAuth token
     */
    private OAuthToken getToken(final HttpServletRequest request, final String parameterName) {
        final String codeParameter = request.getParameter(parameterName);
        final OAuthToken token = getTicketRegistry().getTicket(codeParameter, OAuthToken.class);
        // token should not be expired
        if (token == null || token.isExpired()) {
            LOGGER.error("Code or refresh token expired: [{}]", token);
            if (token != null) {
                getTicketRegistry().deleteTicket(token.getId());
            }
            return null;
        }
        if (token instanceof OAuthCode && !(token instanceof RefreshToken)) {
            getTicketRegistry().deleteTicket(token.getId());
        }

        return token;
    }

    /**
     * Verify the access token request.
     *
     * @param request  the HTTP request
     * @param response the HTTP response
     * @return true, if successful
     */
    private boolean verifyAccessTokenRequest(final HttpServletRequest request, final HttpServletResponse response) {

        // must have the right grant type
        final String grantType = request.getParameter(OAuthConstants.GRANT_TYPE);
        if (!checkGrantTypes(grantType, OAuth20GrantTypes.AUTHORIZATION_CODE, OAuth20GrantTypes.PASSWORD, OAuth20GrantTypes.REFRESH_TOKEN)) {
            return false;
        }

        // must be authenticated (client or user)
        final J2EContext context = WebUtils.getPac4jJ2EContext(request, response);
        final ProfileManager manager = WebUtils.getPac4jProfileManager(request, response);
        final Optional<UserProfile> profile = manager.get(true);
        if (profile == null || !profile.isPresent()) {
            return false;
        }

        final UserProfile uProfile = profile.get();

        // authorization code grant type
        if (isGrantType(grantType, OAuth20GrantTypes.AUTHORIZATION_CODE)) {
            final String clientId = uProfile.getId();
            final String redirectUri = request.getParameter(OAuthConstants.REDIRECT_URI);
            final OAuthRegisteredService registeredService = OAuthUtils.getRegisteredOAuthService(getServicesManager(), clientId);

            return uProfile instanceof OAuthClientProfile
                    && getValidator().checkParameterExist(request, OAuthConstants.REDIRECT_URI)
                    && getValidator().checkParameterExist(request, OAuthConstants.CODE)
                    && getValidator().checkCallbackValid(registeredService, redirectUri);

        } else if (isGrantType(grantType, OAuth20GrantTypes.REFRESH_TOKEN)) {
            // refresh token grant type
            return uProfile instanceof OAuthClientProfile
                    && getValidator().checkParameterExist(request, OAuthConstants.REFRESH_TOKEN);

        } else {

            final String clientId = request.getParameter(OAuthConstants.CLIENT_ID);
            final OAuthRegisteredService registeredService = OAuthUtils.getRegisteredOAuthService(getServicesManager(), clientId);

            // resource owner password grant type
            return uProfile instanceof OAuthUserProfile
                    && getValidator().checkParameterExist(request, OAuthConstants.CLIENT_ID)
                    && getValidator().checkServiceValid(registeredService);
        }
    }

    /**
     * Check the grant type against expected grant types.
     *
     * @param type          the current grant type
     * @param expectedTypes the expected grant types
     * @return whether the grant type is supported
     */
    private boolean checkGrantTypes(final String type, final OAuth20GrantTypes... expectedTypes) {
        LOGGER.debug("Grant type: [{}]", type);

        for (final OAuth20GrantTypes expectedType : expectedTypes) {
            if (isGrantType(type, expectedType)) {
                return true;
            }
        }
        LOGGER.error("Unsupported grant type: [{}]", type);
        return false;
    }

    /**
     * Check the grant type against an expected grant type.
     *
     * @param type         the given grant type
     * @param expectedType the expected grant type
     * @return whether the grant type is the expected one
     */
    private static boolean isGrantType(final String type, final OAuth20GrantTypes expectedType) {
        return expectedType.name().equalsIgnoreCase(type);
    }
}


Hong YS, Chang Y, Ryu S, Cainzos-Achirica M, Kwon MJ, Zhang Y, Choi Y, Ahn J, Rampal S, Zhao D, Pastor-Barriuso R, Lazo M, Shin H, Cho J, Guallar E. Hepatitis B and C virus infection and diabetes mellitus: a cohort study. Sci Rep. 2017 Jul 4;7(1):4606.
The role of hepatitis virus infection in glucose homeostasis is uncertain. We examined the associations between hepatitis B virus (HBV) or hepatitis C virus (HCV) infection and the development of diabetes in a cohort (N = 439,708) of asymptomatic participants in health screening examinations. In cross-sectional analyses, the multivariable-adjusted odds ratio for prevalent diabetes comparing hepatitis B surface antigen (HBsAg) (+) to HBsAg (-) participants was 1.17 (95% CI 1.06-1.31; P = 0.003). The corresponding odds ratio comparing hepatitis C antibodies (HCV Ab) (+) to HCV Ab (-) participants was 1.43 (95% CI 1.01-2.02, P = 0.043). In prospective analyses, the multivariable-adjusted hazard ratio for incident diabetes comparing HBsAg (+) to HbsAg (-) participants was 1.23 (95% CI 1.08-1.41; P = 0.007). The number of incident cases of diabetes among HCV Ab (+) participants (10 cases) was too small to reliably estimate the prospective association between HCV infection and diabetes. In this large population at low risk of diabetes, HBV and HCV infections were associated with diabetes prevalence and HBV infection with the risk of incident diabetes. Our studies add evidence suggesting that diabetes is an additional metabolic complication of HBV and HCV infection.


Current first year student and promising Diver Emily Martin met with Their Royal Highnesses The Duke and Duchess of Cambridge, William and Kate, and double Olympic champion Lizzie Yarnold on 22nd March 2018. The event allowed The Duchess to meet young athletes like Emily who are supported by SportsAid, the charity The Duchess is a patron of.
The former Hounsdown School pupil met The Duke and Duchess inside the Copper Box Arena, in the Olympic Park, after Lizzie Yarnold had taken part in a session teaching Emily and her fellow young athletes how to tell their story to a wider audience using the media.
Emily has recently competed in the Kuala Lumpur and Singapore Grand Prix, at the start of what promises to be a very exciting future in sport.


But what can I eat at "America's steakhouse," you ask? I'll tell you what. Mac. And. Cheese. I'm not hard to please when it comes to cheesy pasta, but I'd kill a man for the stuff they dish up. It's sprinkled with white truffle oil and is, actually, the best mac and cheese I've ever had. No kidding.
And the bread. It comes in the container in which it's baked and it's all warm and buttery and soft and oh so good. And the creamed spinach. How I loved thee.
Okay, so my meal was two sides and some free bread. So what? I'm a cheap date.
That line is memorable, and as an "ad man," I have to say it's a bit of an overpromise. First thing I think when I think of cathedral is high ceilings, not the drop ceiling that this place had. Take out the thick steak and great service, and we could have been sitting in a hotel continental breakfast.
The steak was thick, not the best I've ever had, but well prepared and tasty. Really, you can't go wrong with steak. I think I was expecting a ten, so when I got a 7, it was like a negative 3 experience.
But, to spend some time with my beautiful girlfriend is always a ten. And to share a meal in the steak's cathedral with her, well, that's just more than I expected.


text:
Search Strategies: Home
From Topic to Search Strategy
Moving from a Topic to an effective Search Strategy involves Narrowing a Topic, breaking it down into its Core Concepts, and then constructing an effective Search Strategy using Boolean operators, nesting, truncation, and phrase searching. Here's an example:
Now, we can copy and paste this Search Strategy into a search field:
"united states" AND (opinion OR "public opinion" OR attitudes OR beliefs) AND (immigra* OR "illegal immigra*" OR "illegal aliens")
Permission to use "Moving from a Research Question to a Search Strategy" model and worksheet by Mandy Swygart-Hobaugh was granted and licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
Gathering Synonyms and Technical Terms
Some "alternative keywords" (such as "public opinion," "attitudes," and "beliefs" in the example above) are obvious. Others, especially subject headings and other technical terms, may not be. When you are building and expanding your lists of synonyms, be encouraged to use the tools available in online resources.
Subject Headings can often turn up far more plentiful and relevant results than mere keywords can. Subject Headings are created by authors, publishers, and catalogers in order to describe the main subjects of a given book or resource. A couple ways to find good subject headings are:
WorldCat Discovery - find a highly relevant book, click on the book record, click on the Description drop down, and then scroll down to see a list of Subjects. These are linked so that you can run quick single subject-searches in WorldCat Discovery to check results. Even better would be to gather the Subject Headings and fit them into a broader search strategy.
Library of Congress Subject Authority Search. This searchable index of subject headings.
Another way to find subject headings, and other technical terms, is to use the Thesaurus tools found in many databases, such as those hosted in Ebsco or ProQuest. To find the link to the database Thesaurus, select a particular database to search, then click on Advanced or Command Line search, and a link to the Thesaurus should appear on the page. You can then
For example, when you find a highly relevant book in the catalog (WorldCat Discovery), click on the book record, These Subject Headings can often turn up far more, both in terms of quantity and relevance, than mere keywords can.
Research Question to Search Strategy Worksheet
Find below a link to a blank worksheet with which you may go through the process of moving from topic to search strategy. Feel free to fill it out and send it to a Reference Librarian for feedback or to use during a research consultation.
Introducing Automated Search Strategy Builders
Below are two Automated Search Strategy Builders, tools designed to teach you and help you create a search string using Boolean logic. Basically, in order to get relevant information out of databases, you need to be able to ask for that information in a specific way using the language understood by those databases (Boolean).
Automated Search Strategy Builder (UofA)
The first Automated Search Strategy Builder is a web based version that allows for the use of up to 3 concepts and up to 3 synonyms for each concept. Simply enter the concepts and synonyms into the boxes below, click the button, and watch your Boolean search string come into existence in the box below. Be sure to put quotations marks around any phrases!
Concept 1 AND Concept 2 AND Concept 3
Name your concepts here
Search terms Search terms Search terms
List alternate terms for each concept.
These can be synonyms, or they can be specific examples of the concept.
Use single words or short phrases
Once you have generated the Search String, copy and paste it into a catalog or database search interface/box (such as ProQuest, Ebsco, JSTOR, etc.) and observe the results. Keep tweaking the concepts, synonyms, and search strings in your searches in order to hone your results, and be encouraged to keep a record of each search string you run and where!
The Search Strategy Builder was developed by the University of Arizona Libraries and is used under a Creative Commons License.
Automated Search Strategy Builder (Bilby-Chen)
Another automated Search Strategy Builder, developed in a Google sheet by CST student Jim Chen and CST librarian Mark Bilby, does the same thing, except that it automatically inserts quotation marks around phrases and allows for up to 5 concepts and 10 synonyms per concept. It also makes it easier to keep track of your searches, since you can easily copy and paste each search into a new cell or a new tab.
Search Strategies LibGuide by Mark Bilby is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.


text:
Q: Why is it that $\det(\phi-x\text{id})=\sum_{i=0}^n (-1)^ic_ix^i$? I'm trying to understand a certain formula for the determinant in a more general setting.
Say you have a free module $M$ of rank $n$ over a (commutative) ring $R$. Let $\phi\in\operatorname{End}(M)$, the $R$-module of $M$ endomorphisms, and denote by $c_i$ the trace of $\phi$ in the exterior algebra $\Lambda^i M$ (a.k.a alternating algebra, grassman algebra).
How come
$$
\det(\phi-x\text{id})=\sum_{i=0}^n (-1)^ic_ix^i?
$$
This seems like it would follow easily from induction, but unless I'm missing something obvious, I don't see how the trace fits in. Can someone explain why this polynomial identity is true? Many thanks.

A: This business about working over a commutative ring $R$ is a red herring. Ultimately this is a collection of $n$ polynomial identities in $n^2$ variables $x_{ij}$ over the integers; that is, it suffices to prove this identity over $\mathbb{Z}[x_{ij}]$ as an equality of integer polynomials. But two integer polynomials are equal abstractly if and only if they're equal, say, when the $x_{ij}$ are set to arbitrary complex numbers. So it actually suffices to prove the identity over a specific algebraically closed field of characteristic zero such as $\mathbb{C}$ to prove it in general.
At this point you can take any proof you like that works over $\mathbb{C}$. Here's one:

*

*The identity is obvious for diagonal matrices. Since the identity is conjugation-invariant, it follows for all diagonalizable matrices.

*The diagonalizable matrices are dense and polynomials are continuous (alternately: the diagonalizable matrices are Zariski-dense and polynomials are Zariski-continuous), so the identity is true for all matrices.

You didn't just ask for a proof, though: you asked for an explanation. I addressed this question in another math.SE answer. Briefly, one can think of the RHS of your identity as the "trace," in an appropriate sense, of the action of a linear transformation on the exterior algebra, and then the result follows for diagonalizable matrices by an observation about how the exterior algebra functor behaves on direct sums.

A: If $M$ is a module over $R$, any endomorphism $\phi:M\to M$ induces an endomorphism $\Lambda^r \phi:\Lambda^rM\to \Lambda^rM$.
If $M$ is free with basis $e_1,...,e_n$, then $\phi $ has a matrix $A=(a_{ij})$ in this basis.
The module $ \Lambda^rM$ is also free, with basis $(e_H)_{H\in\mathcal H}$ where $\mathcal H$ is the set of strictly increasing sequences  $H=(1\leq i_1\lt ...\lt i_r\leq n)$ and $e_H=e_{i_1}\wedge ...\wedge e_{i_r}$.
The key point is that with respect to  this basis the linear mapping  $\Lambda^r \phi$ has a matrix $\Lambda^r A=B= (b_{H,K})$  and that the entries $b_{H,K}$ can be computed:
 the result is $b_{H,K}=\operatorname { det } (A_{H,K})$, the minor obtained by extracting from $A$ the lines numbered by $H$ and the columns numbered by  $K$.
Hence  we have the formula at the heart of the answer to your question
$$\operatorname { Tr }(\Lambda^r \phi) =\sum_H  b_{H,H}=\sum_H \operatorname { det }(A_{H,H})$$     From this follows the required formula for the characteristic polynomial of $\phi$
$$ \chi_\phi(X)= \operatorname { det } ( X\cdot  1_n-A)=\sum_{r=0}^n (-1)^r  (\sum_H \operatorname { det }(A_{H,H}))X^{n-r}  =\sum_{r=0}^n (-1)^r  \operatorname { Tr }(\Lambda  ^r\phi) X^{n-r}                 $$
Remark
The formula $b_{H,K}=det (A_{H,K})$ giving the matrix of of the exterior product of an endomorphism is very useful, in the study of Plücker embeddings and Grassmannians   for example, and is a modern avatar of the venerable Laplace expansion of determinants.
 It is, in my opinon,  underappreciated and the very notion of exterior power $\Lambda^r A$ of a matrix $ A$ is very rarely mentioned.
[Amusingly the notion of tensor product of matrices, aka Kronecker product, seems to have made a comeback thanks to quantum computation and quantum information]


New Delhi: The Indian men's doubles pair of Satwiksairaj Rankireddy and Chirag Shetty has pulled out of the India Open to provide themselves more time to achieve full fitness and hit top form ahead of the Tokyo Olympic qualification.
The duo had also sent their entries for events in Malaysia and Singapore next month but after consulting the physio, they decided to miss the three events.
The 2020 Olympic qualification period starts 29 April with the Badminton World Federation using its rankings list which is scheduled to be published on 30 April, 2020 to allocate spots.
"There is Sudirman Cup and Australia Open next, so in a month's time we will play three tournaments, so we will be focusing on that now," he added.
"But I'm just happy that I can achieve fitness and start playing before the Olympic qualification kicks in late April," he added.
"The sessions are pretty tough. In a month's time we will get used to it. The Indonesian training is lot different," Chirag said, adding, "the focus is to achieve agility, he wants us to be more fit and move faster on court, so lots of on-court sessions and less time in gym. There is also multi-feed training two times a week."
They also reached semi-finals at Indonesia Masters Super 500 and French Open and quarters at China Super 750 and earned a career-best ranking of world no 16 in December.