text:
Water — Like Transportation?
Jan 7, 2022 8:38:37 PM
We interviewed key Toyota Exec, Cristian Danielli, for the show… Why does he say that Toyota predicts they will no longer be selling cars in 10 years?! And why is there such HUGE demand for pay-as-you-go, service-based commodities? Find out in this presentation!
News Show Host: OriginClear is a company that focuses on wastewater treatment.
CEO OriginClear — Riggs: And hello everyone. Welcome to the Water is the New Gold CEO briefing.
Riggs: Our mission is to transform the water industry.
OriginClear Chief Engineer: Decentralization offers us this opportunity.
CEO Manhattan Street Capital: The plan that you've built here is super impressive.
Investor: The world is experiencing a crisis in regards to water. It's a great opportunity that you're giving us investors.
Riggs: Decentralization of water treatment means that we no longer need to establish giant water treatment plants.
OriginClear VP Development: Let them fight over the 20%. Let's work with the 80% that's untreated.
Investment Advisor: Over 21 thousand unique alternative investments.
Riggs: Three million jobs in the US alone.
Investor: Making it easy for the regular investor.
Riggs: All the old trends just accelerated.
Investor: It's lucrative and fulfilling.
OriginClear Chief Engineer: The vision I've got is to standardize these products. Design, Build, Own and Operate.
Riggs: We have 65 people in the room.
CEO AGM Agency: We've got an important message to give to the world.
CEO PhilanthroInvestors: We can put a guy on the moon but our water is horrible.
Pool Cleaning Technician: Recycling all that water, it's a huge impact for the environment.
COO OriginClear: Bringing new infrastructure in drives the growth in America.
Riggs: That's a critical part of the picture.
Progressive Water Engineer: It's a twin 125 gallon per minute RO (reverse osmosis) system.
Riggs: I don't think we're talking about a 10 Million dollar fund, we're talking about a series of 10 million dollar funds.
Overseas Partner: The opportunity itself is very big.
International Investor: You want to live? Take care of the water.
Investor: Not too many CEOs do a weekly briefing and are willing to talk to individual investors.
Riggs Eckelberry:
And welcome everyone, thank you for joining on this very first presentation of the year, and it's. I'm so excited about 2022. There's so much to talk about, but I'm going to be... This is a great way to start because as I mentioned in today's CEO update, we're very close with Water on Demand™ to other things like transportation on demand, you know what is happening in the car industry, for example.
And so with that in mind, I thought I would go ahead and play just a fantastic interview that I had in late December. And I'm also going to be discussing some interesting updates. So let's bring it on, shall we? So I'm just going to go ahead and share a screen here.
We're, it's Thursday, January 66. Well, it is January 06 briefing number one forty one helping you thrive in the world's only vital, scarce and... fortunately I did not put six six six right. That would have been terrible. In any case, the we've been saying for a long time that water is vital, scarce and recession proof. But now we really have this, this model, this business model that is so exciting, so not to waste any further time on that.
I'm going to just move on and let you know, of course, that you can hear this in Spanish and you just click on the globe that's that's there on your system and there we go.
Usual Safe Harbor statement that we always do our very best to tell you what's happening and we are, you know, we're extremely transparent company and when we get it wrong, of course we corrected immediately. But the Securities Exchange Commission does not sign off on these things. Excuse me. And I'm also going to tell you, I've taken your working week and ends tomorrow and I've been skiing. It's been wonderful. So I'm actually literally in an Airbnb condo, which is why it's kind of like weird, weird backgrounds.
So let's take a look here, I've got some chats already. Yes, it's also, Stephen, thank you. It's also twenty twenty two. We'll fix that slide in post. Oh gosh, you know, fortunately, I got out of the 19th century that, that's a good thing. And Bob Roos? Yes, Bob was also, I'm not going to live this one down, am I? But anyway, J.R.W. was... All right, guys. Thank you very much. All right.
So the the gentlemen that you're going to be hearing from this brief interview, he speaks Spanish, but it will be subtitled. And he is, this is all about what's called Toyota Mobility, and this is this new thing called transportation as a service to TaaS, which you know, in 10 years, shall we say? Maybe longer or maybe shorter, who knows, you will have a car for sentimental reasons only, and you'll just basically order up a car to do whatever. Shoot, I need a pickup truck. Boom. Call up a pickup truck, whatever. And it's had a good rollout in Argentina, a program called Kinto One, for example. And these are basically you just you have a car and everything else is taken care of.
Now we're connected to Argentina through our very own Ivan Anz who brought us PhilanthroInvesting and many, many great investors. In fact, his Argentina Argentinean Toyota dealerships are number one in the country that was recently awarded. The great, great, Steve St. Angelo was also responsible for it for Toyota in Toyota Mobility when he was running the entirety of Toyota in Latin America. So we have a lot of connections to that. But without further ado, I'm going to go ahead and play this little interview. And then we will get to the next thing. Oh gosh, Jan. sixty-six. Twenty one. I don't think I'm going to live that one down. Truly. Oh, Lord. Ok, here we go.
Start of video presentation
Cristian: My name is Cristian Danielli and I have been working at an Official Toyota dealership in the city of San Luis for just over 11 years. I hold the position of Executive Director. The company, in addition to being the official Toyota dealer, is an official Toyota dealer in industrial equipment and I'm a Director in that business unit as well. So, today we're living a process of transformation that began just over four years ago where
Toyota's philosophy is beginning to change and is starting to offer mobility solutions, instead of offering to sell cars. They build the cars with a purpose, but the macro target that Toyota is looking for worldwide is more related to being a mobility solution. So they are working very hard, not only in the sale of cars, but in the value chain that involves or is related to the sale of cars.
Riggs: So, Mobility is a global initiative for Toyota, of course?
Cristian: The concept was made up of a combination of factors that Toyota started to develop with a large team at Toyota Motor Corporation headquarters in Tokyo, Japan. Considering the combination of research and factors and calculations a few selected this product, closely linked to the value chain and after a very thorough analysis, indicators and a lot of research and study they realized that you have to offer what the customer is looking for, what the customer needs.
Car Ownership No Longer Valued
So, we started to lose this concept of car ownership. People no longer value car ownership, and we realized, what a car actually represents to people which is a mobility service. A person's basic need for a car is for commuting to work or to go on vacation or to do "x" activity, that's a focus of specialized activity and therefore, the car ends up just being a means to an end.They are specialists in their activity and therefore hire a specific service to solve their mobility problem.
Mobility Station
It's a bit of a challenge for the concept at a general level. Consider Kinto a station — that's the Toyota Mobility Service. We changed the name from Toyota Mobility Service to Kinto. Kinto is Japanese for cloud.
Riggs: Ah. okay.
Cristian: The ingrained concept of the cloud is this thing about being able to move, and that it's anywhere, because it can also move. That's the concept of the cloud, that's why it's called Kinto. And the customer today...
Riggs: Traveling in the cloud!
Cristian: Traveling in the cloud, yes. The concept today in Argentina, in a country that is complex in the sense that it is complex because of its routes, complex because of its distances. I was just telling you that I live 700 kilometers (435 miles) from the capital city or from the Federal Capital and my situation is very similar for many people. So the concept of, I go to a business meeting to Buenos Aires, and not have to think abut when I'm leaving but to offer me a momentary solution, service solution, is vital.
More Than a Rental
Kinto is not a car rental service here, it's much more. It is much more than that, it's a product that gives a solution to the person who needs to move from point A to point B. That's the basic concept of Kinto and how it works. Make use of the car as needed and I don't pay a penny more for 10 minutes that I've had it parked outside the door.
That's kind of the concept. Rent a car at a Kinto station in San Luis and return the car at a Kinto station in Mendoza. I'm getting on a plane and I'm leaving. I leave it there and that's it. there is no problem, and it's a lot cheaper to do that than to be thinking about how I return it, how do I pay if it gets stolen, insurance, taxes etc.
Very Profitable
Riggs: But is it profitable for Toyota?
Cristian: Yes, yes. absolutely. In fact, it is a business that is part of the value chain and one of our most profitable sectors. The sale of the car itself is becoming more and more competitive in the world, not particularly in San Luis, but more competitively in the world and the more supply there is the more you lower the price and the car ends up becoming a commodity. So, either the dealers or the customer, they're not going to be able to price the car.
So, we have to look for these peripheral issues that have to do with the value chain and these are very profitable. We are talking about returns that are on the order of 40% to 45%, very important returns. Of course, the income stream is small. You have to volumize to do business, to pass the break even of the business, but these are businesses that are very profitable, for Toyota and for the dealer.
Like Water on Demand
Riggs: The initiative we have in water, that we discussed before the interview, is called Water on Demand™ and Kinto is "car on demand." You want it, you send it, boom, instantly. And the question people have for transportation, just like water, is adoption. How old do you need to be adopted? What is the basis for adoption now? What are the cases in which we have adoption? We need special cases, for example: the handicapped, or sick or other special cases to start the movement. What do we have as this trend?
Cristian: Basically, getting into a Toyota Mobility System is very easy. You download an application to your phone. In this business there are three parts: the Toyota brand, part two is the dealer, and then the customer. The first thing to know is that the customer comes first, and when the customer comes first, you have to give him the best and quickest and the fastest route.
Today, with a mobile application, in 30 seconds I rent a car and I can find out if it is available or not without talking to anyone. That is, I open the app, I see all the Kinto stations in the country, that there are more than 1200 units for rent. And if I'm going to head from point A to point B, I can see what availability there is, the car that's available and so on, and I rent it myself without telling anyone. I don't have to talk to anyone, because you're just a click away. That's kind of the concept too.
What About Market Share?
Riggs: In the concept of "market share" when do you think you will have a significant market share?
Cristian: Well, Toyota is making a prediction that in 10 years we'll probably stop selling cars to the pubic. Existing as a corporate sales dealer with dedicated mobility functions.
Riggs: Then in 10 years it will be normal to say, "I need a car, okay. (typing on phone - makes sound) Bop bop beep, Of course, I'm leaving." But, you need the automated self driven delivery, because if you need a person who comes to deliver, that's an expense for society. The preferred one would be, as Elon Musk says is "A robot driven taxi that comes automatically." Well, in 10 years that's a possibility, right?
Cristian: Well, it's similar. You know that I can tell by your examples this is happening, that's why Toyota makes the prediction that 10 years from now it's going to start to end. Today, the generation of kids who are 30 years old do not have a sense of car ownership as a status level. That exists for people who are 45 or 50.
For the 30-year-olds, it's not a question of status. They are not interested in owning property. Not interested in owning it, they don't want to own cars, they don't want to have a house; they don't have that concept of owning. So, they use the product for what it was conceived for, transportation. So, they don't want all the red tape of having to pay for insurance, to pay the annual memberships, taxes, fuel.
And I can tell you an experience: Last month we rented a Toyota SW4, which is a seven-seater SUV. Seven friends got together, they paid a little each and they went on vacation for 15 days with a truck they can't afford and wouldn't want to anyway. All combined together, renting for 15 days they paid for it and left in the SUV. Something they couldn't afford to own.
Riggs: This is an important point which is the adoption by companies, by businesses, adopting a "block" society that all our transportation would be in this concept of mobility, right?
Cristian: Kinto One is that business. Kinto is divided into two branches, one is Kinto Share, which is C2C or "customer to customer". And then there is Kinto One, which is for corporations. Argentinian corporations such as YPF, Arcor. Large corporations no longer have cars on their property. Costs and resources involving a fleet, for the maintenance, for the resources that have to be put into it. Arcor, for example, used to have 250 units in its fleet, so they had to have a chief maintenance engineer, a maintenance workshop that would take care of the entire fleet management. And Arcor is in the business of making candy, not maintaining a fleet of cars.
Outsourcing Non-Core Services and Risks
Riggs: It's what we see with water, with companies that now have to treat their own water, that didn't need to treat it before. It used to be the work of water treatment plants. But, water treatment plants in America and other parts of the world are degrading and now businesses have to do their own treatment. But their focus is not water. Say your job is like, brewing beer, maybe. Then the same as transportation, your job is not transportation. Their job is to do their core activity, their focus in society.
So more and more we need to outsource certain services of a business, so that they can focus on their core work, which allows for more impact and more profits because they can be left to do their own work.
Cristian: And they can do their work more efficiently because they have more dedication. For me, using the Kinto analogy towards a gallon of water purchase system, I pay for only the gallons I need.
For example, we in Argentina, we have an excellent agricultural system. We produce water that sustains one of the breadbaskets of the world and we use water softening systems or water treatment systems to be able to irrigate the fields. These are highly complex systems, difficult to manage. Water is corrosive, chemical considerations, treatment and quality, and measuring the quality of water being delivered. And besides, if I grow soybeans, I grow soybeans for three months and then I stop growing.
Riggs: It's also a health problem, a health problem for the people. because they don't want public health problems. Transportation is a risk too, delegate it and the risk is reduced.
CapEx Becomes OpEx
Cristian: I imagine, as customers in this "Kinto Water Business," if you will; I put it that way to be understood, I imagine that for companies that are launching a new product on the market or who are beginning, their investment in a water treatment plant, thinking that they have to invest in a product that they will then have to manufacture...,
Riggs: Of course.
Cristian: I would say, "If it goes bad for me later I'll keep the water treatment plant, and what do I do with that?" Better if I contract the amount of water or I rent the water treatment plant for a while and then if I do well, well, I'll see. But ultimately, in this process of waiting to see if it's doing well or not, it's much better to invest in a little of that and instead invest more of my money into the heart of my business. And not in a water treatment plant that is necessary for my business but it is not my finished product.
Riggs: Of course, of course. And also lower the capital expenditures of the monthly operating expenses. That is better for society, rather than raising capital, instead it becomes a normal operating expense, like the rent of the buildings, etc. It is the logical thing to do.
Global Trend
The world is becoming service-based, that's the global trend and it's a good trend, because it allows companies to specialize and stay away from things that are not their specialty. And I think we are united in this initiative to allow focus. So, you can be optimistic that it's going to fit in the business that's coming. This will become more adopted as time goes on. More and more and more speeding up, right?
Demand Continually Increases
Cristian: Every month we have more occupancy than the previous month. I mean, never have we sold less than the month before, never.
Riggs: Unbelievable, unbelievable.
Cristian: A product very much in demand, there is a limited supply, and if in one month we have and occupancy capacity of 70%, the next month 71, 72 and then 73%. We have always been climbing, always. Because we specialize in this and because we offer mobility products in general, you could buy a car from us, or you could rent one, but you could also end up repairing it. We're becoming specialists at this and we're getting better and better and we will continue to grow. So for us it's a very profitable business. And also, we're kind of delivering a customer satisfaction and that makes us happy too.
Better User Experience
Riggs: I think the quality of the experience for the customer is better because the cars are always new, more or less new, they are well maintained and there are no problems, you drive and that's it. And that's the quality of the experience, I think that's better. I have a car that I love very much, which is a 2016 Mercedes, because it was the lat year of diesel, I love diesel, but it needs constant maintenance.
And though I love it, love it very much, it's not logical. It would be better to just have a car as a service, nothing more, and move on. And I think in the future, 10 years from now, that will be the preference. I want my Mustang, I want my Corvette, to go out on Sunday. That's something else. That would be something else — a collection for pleasure, but for transportation I'll do everything via subscription of course.
Improving Efficiency of Use
Cristian: Yes, 70% of the people, use a car for commuting from home to work and some peripheral activity, such as taking a child to school and not much more than that.
Riggs: And it's parked all day!
Cristian: 24 hours in a day, the car is parked for at least 6 hours at the house, because you're sleeping. Then, you use it for maybe an hour to get to work and then it's parked for 8 hours, absolutely no movement. Then you use it for an hour and then you get home. Consequently, how much better would it be to have a service and use the car exactly when you need to use it? Because, when you don't you have to pay for parking too.
Riggs: But you have a responsibility to deliver good service, 100% service, because if that doesn't happen, it's going to stop the adoption if it's not well done. That's the challenge, isn't it?
Availability is Key
Cristian: Yes. Our worst enemy or, if you will, our competitor is the availability of the car. If we offer the mobility of a mobility service, and if the customer needs a car, the car has to be available. That's what we're up against, the core of the business, is it has to be like, what it's like to own a car. And must be available when a guy wants it, just as if it were his.
Riggs: That's the priority. That's why it's important to have instant availability. And if it isn't available, that's going to stop the program
Cristian: Yes of course there has to be quality. So that's why, that's why it's important that with just two or three clicks you have a car at your doorstep and that it doesn't end up being a traumatic experience and that the client ends up saying, "This is a failure, I'm buying a car." Because there, the value chain is over.
Riggs: Of course. Cristian, it was a very interesting discussion and best wishes for an incredible ear ahead.
Cristian: Well, thank you very much and thank you for your participation and count on me for whatever you need.
Riggs: Thank you very much and now I'm going to finish the interview. Thank you once again.
End of video presentation
Service Businesses
Riggs: This is a really interesting this this interview brought up many interesting points that that, you know, I can't help but really think about, for example, the fact that Toyota is, you know, is recognizing that margins in the auto business are low. And this is a solution that he's talking about, you know, 40 percent, 30, 35, 40 percent margins on these services. And yet their people appreciate them more.
I often say that in the old days, you used to be able to have a Microsoft Office for $130 one time and now you're paying, I don't know, $19 or whatever it is a month. You're paying more over time. But your experience is better. So Microsoft makes more money and you have better experience. It's a win win.
And this is, I think, happening in the automobile industry because we know the margins are terrible. I've shown you the the graph of GM finance versus GM itself, and we want to be in the finance business. But even more so in the services business. So that, I think is is the big lesson.
Meeting the Demand
The other thing that was very interesting. Notice how they can barely keep up with demand. And this is what we're finding also is that people are excited. Our potential clients, these people that we've been accumulating a big backlog of systems that they don't quite have the capital for, et cetera. They're eager to get going. And so, you know, we're very, very quickly going to get into the need to deliver in order to make this thing work.
And that's why we are raising the capital for this. And that's why investors like it very much because it's got this tremendous demand. And I believe that it really is the way that private water treatment and private water management will be done. One hundred percent in a matter of years, how many years? It's hard to say because it's just beginning now, but for sure, it's something that is really, really, you know, it makes me wonder why the heck nobody came up with this before. And you know, it just took us a long time for us to to really refine it. And here we are.
So I'm going to quickly wrap up, and what I have is some some OK, and let me just see some chats here. Ok, thank you. I'm glad you guys. There's some interesting representation. Send me a copy of possible, et cetera. They when you will get the replay and also a person, it doesn't show it fully macro. Something says I still needed to know what as an investor, what level I could come in at all will be answered. Let me continue because this is important and. I'm going to go ahead and come back to the presentation.
Personnel News
Personnel news. We've got people major developments and now this is I'm giving you a bit of a scoop because this has not been officially announced. And once again, something popped in here. I've got a bad date in the bottom left, so you're supposed to disregard that completely.
Chief Strategic Officer
All right. Andrea Agostini is somebody I've known for a long, long time, and he has an amazing background. I'm actually going to show you his his resume. But he is really a specialist in digital media marketing strategy, and I might also say crypto. And he is, you know, there's been a big problem we've had, which is that that we have a very, very good management team, but we lack or we really lack the the marketing and public relations and crypto.
That's stuff that I've been doing personally. And there's a limit to how much I can do and still run the rest of the company. So this is really, really needed, and I think it's going to be loosening up a tremendous amount of scale for us. And also, he is connecting us with international investors. Let's review his profile real fast, if we might do that right now.
So here it is. So, Andrea, you know, he's done a lot of amazing things. He was a key player in a very large company called American Power and Gas. That's how I've known most of his performance over the years. And today he is involved with a company called Sales Jet. And then you see, he's involved with coin share. Let me let me just make this bigger for you.
Here we go. Here we go. Coin share, which is a blockchain technology and he's done a tremendous number of projects. Here's American power and gas. They got to three hundred million dollars and growing, continuing to grow, amazing operation. And he has a background in radio and TV, and there's his educational background. This will all be announced, but I wanted you to kind of get a feel for this person who's joining us. He is. He's already on fire. So he's very welcome. You'll be hearing more.
And if you want to see what he looks like, there he is a couple of pictures of the man himself. So this is, I can tell you, because right now we have we have a chief operating officer, Tom Marchesello. We have, you know, we have a CFO chief finance officer. We also have Ken Berenger who I'm going to talk more about in a moment. And we really needed somebody in marketing and that's really where the rubber meets the road. Of course, we have all our people in the operating divisions, but the marketing and PR was really a problem.
So I'll be interviewing him in depth on next week's CEO briefing and that there will be a major announcement of his coming on board.
Executive VP
Now. Another big, big announcement I want to make today is that we are promoting Ken Berenger to executive vice president of the company, which makes him an officer and he really is the co-founder of Water on Demand. He and I created this together, and he has been pivotal to developing this initiative all along. He's also been involved with our crypto, which is a big deal. And so, you know, we really want to recognize that he is really. Perhaps more than me now, I think we're both equally vital to the company, and I really, really welcome him to this new position, this well, well deserved.
All right, now, speaking of which, there is you have the ability to join this Water on Demand. But remember that because it's early days, you can be a founder of Water on Demand. So it's not just the profit share that we give that we plan to give to everybody, but a tremendous amount of stock value. And what we've done is we've we've treated you. We're treating you right now as if you were investing a $5 million block. And you can really invest anything as long as you're qualified.
And so I'm not going to get into all this stuff, but it's a powerful, powerful package that you really should review with Ken directly.
So and that's the sweet spot is five million, and that's how one can get in for a whole lot less.
Call Ken
All right. You could talk to Ken. He just simply go to, oc.gold/Ken, schedule a call and talk to him. He is on the phone nonstop. So this is the best way to schedule with him. You can also email invest@originclear.com.
Well, it's it's been really interesting. The more I think about this analogy to the the whole automobile game is something that is really, really interesting to me. So I think it's I think it really works as an analogy. Well, there we are, and I want to thank you all. Somebody is calling me a handsome devil. Cute. Well, the handsome devil who keeps putting the wrong date on the slides. So, you know, don't hate me because I'm beautiful. Ok.
But anyway, it's been wonderful having you. I will be back in Florida tomorrow, and it's going to be a great pleasure to be able to. Well, I'm sorry. It was a great pleasure skiing. I'm just going to say that right now. And but it will. I'm really looking forward to making Water on Demand happen in 2022. And ultimately, we all know where it's going is to a place on a national exchange. So that is the big goal. Can't say it's going to happen in 2022, but certainly by making Water on Demand a success, it will give us the assets needed to do exactly that. So everyone, thank you so much. It's been great having this first meeting.
And Kelly Perazza. Hello, Kelly, "Congrats to Mr. Ken Berenger. Happy New Year to all." Well, Kelly, we love you. Thank you very, very much. All right. Thank you, guys. Have a great great weekend and I'll see you next week. We'll have Andrea on the show, and I think you'll find it fascinating. Thank you and good night.


Houdini is procedural power. So is this Asset, a nuclear Explosion that can be adjusted, scaled, changed and detailed setup, to shape the perfect nuke for your production, needs or learning curve.
Please have a look at the renderings and animations, to get an idea, what this great Asset can do!
The cache system is very fast and gives very nice results in a short amount of time.


…to my website and the blog for my book Superconnected: The Internet, Digital Media, and Techno-Social Life (now in its second edition, Sage Publications).
I'm a sociologist, professor and director of Undergraduate Interdisciplinary Studies at Rutgers University's School of Communication and Information. My research is on the impact of the internet, and digital/mobile/social media, on social connectedness and social life. It's fascinating to see and study people's creativity and ingenuity as they use technology to build relationships, networks, societies and even their own selves. And it's critical to consider the consequences of doing so, both beneficial and harmful. I had the good fortune to come of age with this topic when digital tech exploded in popularity, and I've been researching, writing, speaking, and teaching about our superconnected society ever since.
You can hear me discuss my research and book Superconnected on the digital New Books Network and on Magic 98.3 WMGQ's program "@CentralJersey." You might enjoy the short animated video "trailers" I voiced describing the programs I direct at Rutgers' School of Communication and Information — the Digital Communication, Information, and Media Minor and the Gender and Media Minor. And I give my thoughts on the future of our digitally connected societies in the video Globalization, Media & Social Change by Neal Bennett Productions.
In my spare time, I swim, hang out with my family and friends, enjoy pop culture (sports, music, movies, TV), go to the beach, and read for fun, preferably on the beach. But my somewhat secret passion is music-making and recording. I'm a singer and flutist and have joined with two of my best friends, Corey Dolgon and Jim Pennell, to express musically our hope for a more peaceful and just world. Our CD is displayed on the bottom left, and you can listen to four of our songs on the "Music" page. Corey and Jim are both sociologists, working at, respectively, Stonehill College and the University of Indianapolis. They're gifted singers, songwriters, guitarists, and sociologists, and they're even better friends.
Well, there's more, of course, but this is enough for the home page. Click around the site, read the blog, check out the articles, books and music, follow me on Twitter @MaryChayko and on LinkedIn.


Amazon Fba Profit Spreadsheet Spreadsheet Example amazon seller profit spreadsheet. amazon fba profit spreadsheet.
at Sunday, January 20th 2019 05:26:35 AM by Duane M. Sanchez.
Increasing the total amount of WBS elements increase the direction time essential to keep up the schedule and upgrade plans. The absolute most basic method would be to just make a list of the earnings and another selection of their purchase expenses. If you want to secure more details, click the logo below. Or else in the beginning, you can make simple spreadsheet record to keep your eye on your expenditures and income. Simple spreadsheets you can set up using applications such as Microsoft Excel can help you keep on top of it all.
In years ago accountants could leave their job on the job and escape from the sometimes-stressful facets of the project. No wonder we, accountants, are regarded as great when it's to do with numbers. 1 thing that's quite important is true bookkeeping. Inadequate bookkeeping can result in plenty of problems and substantial losses, and of course the possibility of severe trouble with the IRS. Accounting requires the interpretation and analysis of financial transactions so as to assist management decision making. So, it's not guesswork since it's done the methods utilized. If you're considering to reevaluate your accounting and invoicing procedure and eliminate dull paperwork, then the best alternative that you consider absolutely free statement generator.
Make a decision as to what it is you need to do on your PC. Bookkeeping applications is often as easy as a homemade dictionary but with additional facets that may have significant financial advantages to the organization. A number of the applications can also be quite flexible and can supply a choice of applications that may adapt work stream as and when the need comes up. It's possible to also select custom-made applications which can be utilized together with your little business practice. The tool is utilized from some clarification, to have the ability to permit a better mastery of the discipline, also guiding to a more appropriate means of handling the matter. Used widely throughout the industry world bookkeeping spreadsheets and templates can offer the important remedy to some little business keeping accurate accounts. There are lots of uses of spreadsheets past the easy arithmetical and information analysis we're accustomed to.


text:
Virgin Mary statue BEHEADED: Catholic Churches and statues become targets of vandalism
At least three statues of Mary were vandalized in separate incidents over the weekend.
Several attacks on Catholic Churches in the United States occurred over the weekend, including three separate instances of vandalism on a statue of the Blessed Virgin Mary.
There is no known motive for the attacks.
By Abigail James (CALIFORNIA NETWORK)
7/16/2020 (6 months ago)
Published in Living Faith
Keywords: Virgin Mary, Vandalism, Anti-Catholic, Attack, Arson
LOS ANGELES, CA (Catholic Online) - "What a strange time [we live in]," Bishop Richard Stika of Knoxville tweeted on July 13. "Over the weekend, an outdoor statue of the Blessed Mother was beheaded at St. Stephen Parish in Chattanooga."
The Chattanooga, Tennessee attack became the third reported incident against a statue of Mary in the same weekend, according to Catholic News Agency.
On July 11, Father Manuel Perez, a pastor of Chattanooga's St. Stephen Catholic Church, noticed the Blessed Virgin Mary statue had been knocked down. After getting a closer look, he realized it wasn't just knocked down, the statue had also been beheaded, and the head was no where to be found.
According to reports, there was no other damage done to the church.
"Anytime something like this happens, it's disappointing and it's concerning," expressed Jim Wogan, director of communications for the Diocese of Knoxville, noting there aren't any local controversies around this church that would spark such an attack.
In addition to this beheading attack, a statue of Mary, in Boston, was set on fire, and in Brooklyn, a statue was tagged in black spray paint with the word, "IDOL."
In this same weekend, a parish in Florida and the California mission founded by St. Junipero Serra were both burned in arson attacks.
According to Wong, we are in a "very chaotic time in our history."
"Anger seems to be sort of a default setting for people right now," he shared. "And I think our bishop and our pastors would hope that people would remember the sort of example that is set in the Gospels--that, we're to treat each other as we'd want to be treated."
St. Lorenzo Ruiz

redpajama_set_name: RedPajamaCommonCrawl


Last week two momentous events took place, neither of which will be forgotten.
On May 19, 2018, Meghan Markle and Prince Harry made lifelong commitments to to love, honour and respect each other as long as they both lived. The watching world was caught up in the breathtaking magic of the wedding at Windsor Castle and special moments that included the classic elegance of the dress, the magnificent train of the veil, and traditional and modern music, including a gospel choir. Scripturally-based spoken words of equipping for the marriage journey were eloquently delivered by English and American bishops. Love was in the air and could be felt by those watching on screens thousands of miles away. That day signified a coming together of royal bloodlines with the once common: elevating mixed race bloodlines, diversity, and celebrating the voice and influence of a strong woman. It was the ultimate fairy tale. Most of us were not on the guest list to witness the wedding nuptials in person, but the wedding somehow managed to find its' way into our hearts and homes. We feel the passion and imagine the future and influence this 'it' couple will have as they share their commitment for great causes that relieve suffering around the world.
On Tuesday, May 15, there was another gathering that left an indelible mark on those that were present. Gather Women hosted its' first-ever fundraising evening and as women gathered, the skies dismissed the rain and opened gloriously to a sun-filled, warm and glorious evening in Oakville, Ontario.
All of you were invited and we are so grateful to those of you who made the effort to join us for charcuterie, chocolate, conversation and friendship. We enjoyed great music. We were reminded of the passion and vision behind the continued forward movement of Gather Women. We heard the impact of Gather Circles on a woman and her neighbourhood. Our board chair, Elizabeth Pierce, expressed a moving call for us all to invest in the lives of women who are in this nation for this time in history - both those desiring to serve and those needing to receive.
I want to say a personal thank you to those that came to our gathering last week and being with us in sisterhood, as well as a thank you to those who prayed and sent your support through heartfelt encouragement. Thank you to all on behalf of our board for sharing your time and your financial resources so we can say with gratitude that the evening was a success and we are encouraged by your response and investment in this work.
We are just on the threshold of what we believe Gather was launched to accomplish. We have been focused on gathering face to face and have used the resources invested by our partners Compassion, IJM, the Gideons in Canada, and other partners and donors, to create gatherings across Canada.
Ø for creating content, connectivity and community for all of the Gather Circles across Canada.
We also know there is a need to address and bring into the light restorative and solution based conversations and calls to action for our displaced and marginalized women - First Nations communities, immigrant and refugee women, and all others who seek a place to belong in this nation and who God has brought to us to create community with.
Gather Women continues to believe that we are better together and that this movement is vital to our nation's spiritual and social health.
There are women across the nation who still believe the lie that they have not been invited to the party, or into the family of God. The enemy comes to steal and destroy the promise that there is an invitation for all to come and join the celebration. He replaces the invitation with a false expectation that life is a fairy tale, that there is a Prince Charming for all of us, or the perfect job, career, dress size or loyal friends.
While we wait for the ultimate Royal wedding feast (Rev 19:9 "Blessed are those who are invited to the marriage supper of the Lamb."), there are abundant opportunities to invite others to the celebration, available to us in waiting rooms, in our workplaces, in our challenging family situations, in the grocery checkout lines. How many are waiting for us to go to them while we are waiting for them to come to us? People are waiting for us everywhere. Your invitation could be life-changing.
Gather Women is not a fairy tale. It is a God-sized dream.
The fairy tale is that we think it should be easy and the strategic priorities should be accomplished overnight. The reality is that it is hard work, sometimes messy, painful, exhausting, and at times downright disappointing. I am grateful to those who stand with us in prayer and financial support. and remind us that we should never give up, that we must keep raising the funds to gather women, to go into darkness with light, to endure the spiritual warfare associated with a ministry movement, to endure the disappointment of people leaving the work, and to stay focused on the one, the few and the many.
May God richly bless all of you in every way for the way that you have invested in the women that make of the body of "Gather" across the nation. May we continue to link arms and move forward together as we realize that our sphere of influence is the space between our own two feet and as we all step forward we take more ground in confidence. Free women free women and our message is that freedom is found in the person and saving work of Jesus Christ and there is No Other Name.
We look forward to welcoming you and your friends (ALL of your friends!) to Gather Rise on October 27, 2018 at The Meeting House in Oakville, where this gospel will be proclaimed and Hope declared for every woman present in Jesus's name!
Please encourage us by registering as soon as possible - taking advantage of the early bird discount until June 1, the seniors and student rates, and also the discounts for groups of 10 or more. Pass this invitation on to your networks, your churches and your friends to join us for a memorable day together. All of the downloadable and printable posters and flyers and resources are found on the gatherwomen.com website.
We are so grateful for your support. This is bigger than a fairy tale. This celebration is for everyone and you and I are on the guest list! Every time we gather we have an opportunity to celebrate our adoption into the Royal family as Daughters of the King. Let us gather.
Older PostRelateHER: "Yet Not As I Will..."


text:
Q: Отправить текст в Text View Есть Fragment у него есть TextView, я его объявил в onCreateView но за его пределами оно его не "видит"
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_dialog, container, false);

    text = (TextView) view.findViewById(R.id.textView3);

    return view;
}

private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
    Request request = new Request.Builder()
            .url("http://publicobject.com/helloworld.txt")
            .build();

    Response response = client.newCall(request).execute();

    String result = response.body().string();

    text.setText(result);

}

Тоесть я пытаюсь отправить ответ сервера в TextView text.setText(result) , но увы. В чем  моя ошибка?

redpajama_set_name: RedPajamaStackExchange


In people with celiac disease, a protein in wheat, barley, and rye called gluten triggers the immune system to attack the villi. These are finger-like projections that carpet the inside of the small intestine. The classic symptoms of celiac disease include abdominal pain, bloating, and diarrhea. Sensitivity to gluten is a lifelong problem, so anyone with celiac disease, regardless of symptoms, should keep to a strict gluten-free diet.


Full disclaimer: I do not post any photo to Instagram without editing it in some way, shape or form. Yes I use FaceTune and no I don't think it's a bad thing. Here's why: if we lived in a perfect world, I would get to take all of my photos on a bright, sunny afternoon inside near a window or ideally, with a skylight. In reality, I do most of my blog work at night in an apartment that doesn't have good lighting even on the sunniest of days.
I edit my photos to color correct, enhance details and yes, take care of a pesky pimple if necessary. My goal with editing is to enhance the photo rather than completely alter it. I'm going to walk you through how I edit an outfit photo, but you can also check out my YouTube video HERE that shows you how I edit lifestyle photos as well.
I've tried a lot of apps, but these are what work the best for me. If you only want one, get Snapseed. It's incredible how much you can do in this little app. A coworker showed this to me and I'm not sure what I was doing before this app.
Step #1 Snapseed – Color correct: Depending on the time of day you're taking a picture, the photo can turn out very cool or very warm. You can see in the Before that there are a lot of blue undertones, so I use the "White Balance" tool to even out the temperature.
Step #2 Snapseed – Adjustments: Snapseed has a great suite of tools to adjust the brightness, highlights, contrast and even mood of the photo. I'll go through the "Tune Image" tools and adjust as necessary.
Step #3 FaceTune – Background Cleanup: Chicago is great but sometimes, there's trash on the street that's in the way of your perfect shot, but you're not about to touch it. Cue "Patch." This nifty tool let's you swap out one area of the photo for another. I use this tool to remove dust in close-up shots, add leaves in a fall shot and yes, this is how people remove zits. You're welcome.
Step #4 FaceTune – Color enhancement: There are 3 filters in FaceTune that can really amp up the color in your photos if you like really bright, bold pictures. I normally add a touch of S-Curve, Sigmoid or Gamma to a photo to make everything stand out.
Step #5 Snapseed – Sharpening: At the end, I take my photos back into Snapseed to add some sharpness with the "Details" tool. This is what takes your iPhone photo from amateur to professional. I add this at the end because I like to see how it all comes together before I sharpen things up.
Step #5 Snapseed – Blurring: As a final step with outfit photos, I like to blur out the background just a little to draw the eye toward the clothes. You can adjust the shape of the area you want to focus on, as well as the transition fade, amount of blurring and the vignette. I normally put my settings on: Transition 100, Blur Strength 10-15 and Vignette 0. My goal is to gently fade the background just a bit.
That's it! That's how I go from a decent picture to a (hopefully) great one. My Instagram doesn't really have a "theme" as far as filters goes, I normally just keep the photos true to color since I do a lot with makeup. I have a lot of fun editing photos and have definitely learned a lot over the years. I hope you were able to pick up a few tips and tricks. If you want to hear me talk through everything, you can check out my YouTube video here.


text:
Q: Is there any case when NPE and IAE get handled differently? Concerning the holy war question about choosing the proper exception in case of a null argument, I wonder if this choice has any practical consequences. I mean, is there a case when you'd catch a NullPointerException and not IllegalArgumentException, or vice versa, or catch both and handle them differently?

To make it clear: This is definitely not the linked question. I'm not asking what exception to throw... I'm asking if they ever get handled differently. I know that with both being RuntimeExceptions they hardly ever get caught, but sometimes you have to do it.

A: The intent of both exceptions is quiet different
NPE - in most scenarios that I can think of it occurs due to programming errors, so should not be handled.
In case of null, NPE should be thrown in a fail fast manner as it affects the trace. For which I personally use Preconditions.checkNotNull(E ref, String message) of Guava.
IAE - This means there that the class did not expect such a value from the caller. There can be scenarios when you can catch that exception and use default value for recovering.

I know that with both being RuntimeExceptions they hardly ever get
  caught

According to me this is quite a misconception that Runtime exceptions are hardly ever caught. Nowadays APIs are depending more on Runtime exceptions as they want to leave on the caller to decide whether the exception gets caught. Many APIs impose you to catch many exceptions which leads to a lot of pain when you know that exception is never going to occur. You are forced to catch it and leave an empty catch block or better log that it should not occur.
The APIs do however specifically document when a particular exception is meant to occur.
Take an example of Integer.parseInt(String s) which throws NumberFormatException and which is a Runtime exception, in most scenarios when I have used it I always catch it and do some recovery using default values.
Think of the scenario if NumberFormatException would have been a checked exception, and you making a call Integer.parseInt("1"), it is clearly visible that it won't occur but still you will be forced to catch it. Agreed that the example is a hypothetical one, but gets my point through.
Again this is just my opinion based on my experience.

I'm asking if they ever get handled differently.

As I have wrote NPE is not caught in most scenarios, but there are always exceptions. Like suppose there is a part of your system that is kept open for extension for someone else to program and there is NPE in that code and you don't want the upper layers to be affected by it then I catch NPE and remove that component from the system giving proper logs and traces.  A concrete example is a pluggable system, I didn't want my whole system to crash due to programming error in a user written plugin. So I caught Exception. This may be a bad example for others but worked for me.

A: IllegalArgumentException can be caught when sanitizing a user input based on criteria known only in the throwing method. It is a more subjective notion, and therefore I sometime catch it.
null you can always test yourself.

A: I don't think there is any difference from a technical point of view. I'd say stick to a strategy and document it as best as you can. Moreover, these are runtime exceptions, so they are not meant to be caught as they should happen in case of bugs or when a client calls a method/service without providing all the required parameters. Let it crash!
About the holy war question, I do believe NPE should only happen when a client tries to access a variable they think is not null but is, indeed, null and thus never thrown directly. IAE is more appropriate if a client expects a non null value and receives a null from a caller. This is IMO, don't want to take part in the feud.


Extended Stays Hotel accommodations you've come to expect.
Stretch your budget without sacrificing the amenities, comfort and convenience you'll find at many other affordable hotels. No matter which of our several Masters Inn hotels you choose, you'll be afforded all the extras you desire—without the big price tag. From the free continental breakfasts you'll find at most locations to free coffee, premium cable and free local phone calls, our accommodations are fully appointed for your total enjoyment and convenience. We also offer a 10th Night Free Program which allows you even further savings, and our Senior and AAA discounts make the deals even sweeter when you choose Masters Inn as your lodging destination of choice.
Masters Inn Extended Stay Hotels are Pet-Friendly!
If your travel plans include a longer stay, Masters Inn is the place for you. We are proud to offer extended stay weekly rate hotels. Business and leisure travelers alike appreciate being able to have a home-away-from-home at one of our many Masters Inn discount hotels. Additionally, you can enjoy the companionship of traveling with your pet because most Masters Inn hotels are pet-friendly.
If you're traveling Southeast, chances are there's a Masters Inn affordable hotel near you, so be sure to take advantage of our convenient hotel locations and affordable room rates. At Masters Inn, we understand value: so make your reservations where you will pay less, but that doesn't mean you get less.
Contact us if you would like further information on Masters Inn discount hotels or to make your reservations. We're looking forward to showing you why Masters Inn is tops when it comes to cozy lodging at a great value.


text:
Home » Delta variant worries, Haitian pharmacists fear counterfeit vaccines
Delta variant worries, Haitian pharmacists fear counterfeit vaccines
June 27, 2021 by archyde
The pandemic has killed more than 3.9 million people worldwide since the end of December 2019, according to a report established by Agence France-Presse (AFP) from official sources on Saturday, June 26 in the middle of the day.
The United States is the most affected country in terms of both deaths and cases, with more than 603,500 deaths. Brazil, which has more than 511,100 dead, is followed by India (394,400), Mexico (232,300) and Peru (191,400), the country which deplores the most deaths in relation to its population. These figures, which are based on daily reports from national health authorities, are generally underestimated. The World Health Organization (WHO) estimates that the toll of the pandemic could be two to three times higher than that officially calculated.
The Delta variant worries
Identified for the first time in India in April, the Delta variant is now present in at least 85 countries, according to the WHO, raising fears, despite vaccination campaigns, of new waves of the pandemic which has already made nearly four million dead.
In South Africa, this variant is at the origin of the significant rise in contamination, scientists announced on Saturday, while the government is considering new restrictions. The most affected country on the continent, South Africa recorded 18,762 new contaminations on Saturday, a record for the year 2021.
In Russia, hit hard by the Delta variant, Saint Petersburg, the host city of the Euro with 5.4 million inhabitants, officially recorded 107 deaths on Saturday in twenty-four hours. This is the highest number of daily deaths from Covid-19 in any Russian city since the start of the pandemic, according to Russian news agencies. The country as a whole recorded more than 21,600 new contaminations on Saturday, a threshold not reached since January. Contamination is up 25% over the last seven days compared to the previous seven days and the official death toll has increased by 33%.
Relaxation of restrictions in several European countries
In Europe, however, the time has yet to ease restrictions in several countries. In Spain, the mask is no longer mandatory outside since Saturday. In Madrid, however, most people still kept it. "I know I am protected, but we can still be contagious, so any safety measure is good", told AFP Eduardo Marin Valdez, a 59-year-old teacher vaccinated. Switzerland also decided to lift a large part of the restrictions still in place this Saturday, in particular the wearing of a mask outside. In Italy, it is Monday that the masks can fall outside.
Very different situation in the United Kingdom, where thousands of people demonstrated on Saturday in central London to denounce the restrictions in the face of Covid-19, after the postponement to July of the lifting of the last of them due to a increase in the number of contaminations. It is in this context that the British Minister for Health Matt Hancock, a key figure in government action against the pandemic, announced on Saturday his resignation for having violated the rules put in place in the face of Covid-19 in the part of an affair with a counselor, revealed by a tabloid.
Article reserved for our subscribers Read also UK health minister Matt Hancock resigns after breaking health rules
In Haiti, pharmacists fear counterfeit vaccines
The Haitian Pharmacists Association warned on Saturday about the risks of introducing counterfeit vaccines, after the state on Thursday authorized the importation by the private sector of vaccines against Covid-19, while it did not has not yet launched any public campaign to vaccinate the population. "There is a high risk of fake anti-Covid 19 vaccines being introduced into Haiti due to possible multiplication of uncontrolled points of sale, worries about the professional organization. Haiti does not have a quality control laboratory that can verify whether a vaccine is fake or not. "
Haitian importers of pharmaceutical products and doctors who wish to do so must indicate to the Ministry of Health the quantities, batch numbers and country of origin of the doses, no restriction as to the type of vaccines having been issued by the government of this country. Caribbean. Haiti is one of the few nations that has not yet started its vaccination campaign. Health ministry says it should receive 130,000 doses of AstraZeneca vaccine "Between early and mid-July", via the Covax program overseen by the WHO.
here is everything that changes in Belgium
A sarcophagus from the Merovingian period opened in Haute-Marne


I am 17 years old and been on Accutane twice. The first round I cleared up pretty well for about 6 to 7 months and started to breakout just as bad as before Accutane. During this time I had used over the counter gentle cleansers and moisturizers but nothing to really treat my acne. I just finished my 2nd round of Accutane in May and Ive noticed that Im already starting to breakout again like the 1st time. Everytime I ask my dermatologist she starts me off with the same products and eventually puts me back on Accutane, which Im trying to avoid. I really want to find something that can control my acne that I have for right now until I can get back into acne medications. does anyone have any good recommendations?
In terms of prescription medications, if you are female you could try oral antibiotics (preferably in combination with a topical retinoid for optimal results) or hormonal treatments such as oral contraceptives or spironolactone. Hormonal treatments aren't used in males for acne but all other treatments are.
The same products? Which products are those specifically? Have you tried maintenance therapy with Retin-A, Tazorac or Differin (really any retinoid should work)?
If that doesn't work, you could also try asking your dermatologist about low dose Accutane, i.e. once or twice weekly dosing. If you're in the US, this might be more difficult to do, especially if you're female, but it's worth asking about.
If your female I say go with spiro. Accutane failed me too. Spiro has been my answer. If you are male you can try saw palmetto which is over the counter. If does the Same thing spiro does but is safe for men.


text:
package org.drools.kproject;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.ProtectionDomain;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.enterprise.inject.spi.Bean;
import javax.enterprise.util.AnnotationLiteral;

import org.drools.KnowledgeBase;
import org.drools.commons.jci.compilers.CompilationResult;
import org.drools.commons.jci.compilers.EclipseJavaCompiler;
import org.drools.commons.jci.compilers.EclipseJavaCompilerSettings;
import org.drools.conf.AssertBehaviorOption;
import org.drools.conf.EventProcessingOption;
import org.drools.core.util.FileManager;
import org.drools.kproject.memory.MemoryFile;
import org.drools.kproject.memory.MemoryFileSystem;
import org.drools.kproject.memory.MemorytURLStreamHandler;
import org.drools.rule.JavaDialectRuntimeData;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.StatelessKnowledgeSession;
import org.drools.runtime.conf.ClockTypeOption;
import org.jboss.weld.bootstrap.api.Bootstrap;
import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;
import org.jboss.weld.environment.se.discovery.AbstractWeldSEDeployment;
import org.jboss.weld.environment.se.discovery.ImmutableBeanDeploymentArchive;
import org.jboss.weld.resources.spi.ResourceLoader;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.thoughtworks.xstream.XStream;

public class KProjectTest {
    private static final ProtectionDomain PROTECTION_DOMAIN;

    static {
        PROTECTION_DOMAIN = (ProtectionDomain) AccessController.doPrivileged( new PrivilegedAction() {

            public Object run() {
                return JavaDialectRuntimeData.class.getProtectionDomain();
            }
        } );
    }

    FileManager                           fileManager;

    @Before
    public void setUp() throws Exception {
        this.fileManager = new FileManager();
        this.fileManager.setUp();
    }

    @After
    public void tearDown() throws Exception {
        this.fileManager.tearDown();
    }

    public static class KPTestLiteral extends AnnotationLiteral<KPTest>
            implements
            KPTest {
        private String value;

        public KPTestLiteral(String value) {
            this.value = value;
        }

        public String value() {
            return this.value;
        }

    }

    @Test
    public void treatCreateMultpleJarAndFileResources() throws IOException,
                       ClassNotFoundException,
                       InterruptedException {
        createKProjectJar( "jar1", true );
        createKProjectJar( "jar2", true );
        createKProjectJar( "jar3", true );
        createKProjectJar( "fol4", false );

        ClassLoader origCl = Thread.currentThread().getContextClassLoader();
        try {
            java.io.File file1 = fileManager.newFile( "jar1.jar" );
            java.io.File file2 = fileManager.newFile( "jar2.jar" );
            java.io.File file3 = fileManager.newFile( "jar3.jar" );
            java.io.File fol4 = fileManager.newFile( "fol4" );
            URLClassLoader urlClassLoader = new URLClassLoader( new URL[]{file1.toURL(), file2.toURL(), file3.toURL(), fol4.toURL() } );
            Thread.currentThread().setContextClassLoader( urlClassLoader );

            Enumeration<URL> e = urlClassLoader.getResources( "META-INF/kproject.xml" );
            while ( e.hasMoreElements() ) {
                URL url = e.nextElement();
                System.out.println( url );
            }

            Class cls = Thread.currentThread().getContextClassLoader().loadClass( "org.drools.cdi.test.KProjectTestClassjar1" );
            assertNotNull( cls );
            cls = Thread.currentThread().getContextClassLoader().loadClass( "org.drools.cdi.test.KProjectTestClassjar2" );
            assertNotNull( cls );
            cls = Thread.currentThread().getContextClassLoader().loadClass( "org.drools.cdi.test.KProjectTestClassjar3" );
            assertNotNull( cls );

            Weld weldContainer = new Weld();
            WeldContainer weld = weldContainer.initialize();

            Set<Bean< ? >> beans = weld.getBeanManager().getBeans( KProjectTestClass.class, new KPTestLiteral( "jar1" ) );
            Bean bean = (Bean) beans.toArray()[0];
            KProjectTestClass o1 = (KProjectTestClass) bean.create( weld.getBeanManager().createCreationalContext( null ) );
            assertNotNull( o1 );
            testEntry(o1, "jar1");

            beans = weld.getBeanManager().getBeans( KProjectTestClass.class, new KPTestLiteral( "jar2" ) );
            bean = (Bean) beans.toArray()[0];
            KProjectTestClass o2 = (KProjectTestClass) bean.create( weld.getBeanManager().createCreationalContext( null ) );
            assertNotNull( o2 );
            testEntry(o2, "jar2");

            beans = weld.getBeanManager().getBeans( KProjectTestClass.class, new KPTestLiteral( "jar3" ) );
            bean = (Bean) beans.toArray()[0];
            KProjectTestClass o3 = (KProjectTestClass) bean.create( weld.getBeanManager().createCreationalContext( null ) );
            assertNotNull( o3 );
            testEntry(o3, "jar3");

            beans = weld.getBeanManager().getBeans( KProjectTestClass.class, new KPTestLiteral( "fol4" ) );
            bean = (Bean) beans.toArray()[0];
            KProjectTestClass o4 = (KProjectTestClass) bean.create( weld.getBeanManager().createCreationalContext( null ) );
            assertNotNull( o4 );
            testEntry(o4, "fol4");

            weldContainer.shutdown();
        } finally {
            Thread.currentThread().setContextClassLoader( origCl );
        }
    }

    public void testEntry(KProjectTestClass testClass, String jarName) {
        List<String> list = new ArrayList<String>();

        StatelessKnowledgeSession stlsKsession = testClass.getKBase1KSession1();
        stlsKsession.setGlobal( "list", list );
        stlsKsession.execute( "dummy" );
        assertEquals( 2, list.size() );
        assertTrue( list.contains( jarName + ".test1:rule1" ) );
        assertTrue( list.contains( jarName + ".test1:rule2" ) );

        list.clear();
        StatefulKnowledgeSession stflKsession = testClass.getKBase1KSession2();
        stflKsession.setGlobal( "list", list );
        stflKsession.fireAllRules();
        assertEquals( 2, list.size() );
        assertTrue( list.contains( jarName + ".test1:rule1" ) );
        assertTrue( list.contains( jarName + ".test1:rule2" ) );

        list.clear();
        stflKsession = testClass.getKBase2KSession3();
        stflKsession.setGlobal( "list", list );
        stflKsession.fireAllRules();
        assertEquals( 2, list.size() );

        assertTrue( list.contains( jarName + ".test2:rule1" ) );
        assertTrue( list.contains( jarName + ".test2:rule2" ) );

        list.clear();
        stlsKsession = testClass.getKBase3KSession4();
        stlsKsession.setGlobal( "list", list );
        stlsKsession.execute( "dummy" );
        assertEquals( 4, list.size() );
        assertTrue( list.contains( jarName + ".test1:rule1" ) );
        assertTrue( list.contains( jarName + ".test1:rule2" ) );
        assertTrue( list.contains( jarName + ".test2:rule1" ) );
        assertTrue( list.contains( jarName + ".test2:rule2" ) );
    }

    public void createKProjectJar(String namespace,
                                  boolean createJar) throws IOException,
                                                       ClassNotFoundException,
                                                       InterruptedException {
        KProject kproj = new KProjectImpl();

        kproj.setGroupArtifactVersion( new GroupArtifactVersion( "org.test", namespace, "0.1" ) );

        kproj.setKProjectPath( "src/main/resources/" );
        kproj.setKBasesPath( "src/kbases" );

        List<String> files = asList( new String[]{namespace + "/test1/rule1.drl", namespace + "/test1/rule2.drl"} );

        KBase kBase1 = kproj.newKBase( namespace + ".test1", "KBase1" )
                .setFiles( files )
                .setAnnotations( asList( "@ApplicationScoped; @Inject" ) )
                .setEqualsBehavior( AssertBehaviorOption.EQUALITY )
                .setEventProcessingMode( EventProcessingOption.STREAM );

        KSession ksession1 = kBase1.newKSession( namespace + ".test1", "KSession1" )
                .setType( "stateless" )
                .setAnnotations( asList( "@ApplicationScoped; @Inject" ) )
                .setClockType( ClockTypeOption.get( "realtime" ) );

        KSession ksession2 = kBase1.newKSession( namespace + ".test1", "KSession2" )
                .setType( "stateful" )
                .setAnnotations( asList( "@ApplicationScoped; @Inject" ) )
                .setClockType( ClockTypeOption.get( "pseudo" ) );

        files = asList( new String[]{namespace + "/test2/rule1.drl", namespace + "/test2/rule2.drl"} );
        KBase kBase2 = kproj.newKBase( namespace + ".test2", "KBase2" )
                .setFiles( files )
                .setAnnotations( asList( "@ApplicationScoped" ) )
                .setEqualsBehavior( AssertBehaviorOption.IDENTITY )
                .setEventProcessingMode( EventProcessingOption.CLOUD );

        KSession ksession3 = kBase2.newKSession( namespace + ".test2", "KSession3" )
                .setType( "stateful" )
                .setAnnotations( asList( "@ApplicationScoped" ) )
                .setClockType( ClockTypeOption.get( "pseudo" ) );

        KBase kBase3 = kproj.newKBase( namespace + ".test3", "KBase3" )
                .setFiles( asList( new String[]{} ) )
                .addInclude( kBase1.getQName() )
                .addInclude( kBase2.getQName() )
                .setAnnotations( asList( "@ApplicationScoped" ) )
                .setEqualsBehavior( AssertBehaviorOption.IDENTITY )
                .setEventProcessingMode( EventProcessingOption.CLOUD );

        KSession ksession4 = kBase3.newKSession( namespace + ".test3", "KSession4" )
                .setType( "stateless" )
                .setAnnotations( asList( "@ApplicationScoped" ) )
                .setClockType( ClockTypeOption.get( "pseudo" ) );

        MemoryFileSystem mfs = new MemoryFileSystem();
        KProjectChangeLogCommiter.commit( kproj, mfs );

        Folder fld2 = mfs.getFolder( "META-INF" );
        fld2.create();
        File fle2 = fld2.getFile( "beans.xml" );
        fle2.create( new ByteArrayInputStream( generateBeansXML( kproj ).getBytes() ) );

        XStream xstream = new XStream();
        String string = xstream.toXML( kproj );
        fle2 = fld2.getFile( "kproject.xml" );
        fle2.create( new ByteArrayInputStream( xstream.toXML( kproj ).getBytes() ) );

        String kBase1R1 = getRule( namespace + ".test1", "rule1" );
        String kBase1R2 = getRule( namespace + ".test1", "rule2" );

        String kbase2R1 = getRule( namespace + ".test2", "rule1" );
        String kbase2R2 = getRule( namespace + ".test2", "rule2" );

        String fldKB1 = kproj.getKBasesPath() + "/" + kBase1.getQName() + "/" + kBase1.getNamespace().replace( '.', '/' );
        String fldKB2 = kproj.getKBasesPath() + "/" + kBase2.getQName() + "/" + kBase2.getNamespace().replace( '.', '/' );

        mfs.getFolder( fldKB1 ).create();
        mfs.getFolder( fldKB2 ).create();

        mfs.getFile( fldKB1 + "/rule1.drl" ).create( new ByteArrayInputStream( kBase1R1.getBytes() ) );
        mfs.getFile( fldKB1 + "/rule2.drl" ).create( new ByteArrayInputStream( kBase1R2.getBytes() ) );
        mfs.getFile( fldKB2 + "/rule1.drl" ).create( new ByteArrayInputStream( kbase2R1.getBytes() ) );
        mfs.getFile( fldKB2 + "/rule2.drl" ).create( new ByteArrayInputStream( kbase2R2.getBytes() ) );

        MemoryFileSystem trgMfs = new MemoryFileSystem();
        MemoryFileSystem srcMfs = mfs;

        Folder fld1 = trgMfs.getFolder( "org/drools/cdi/test" );
        fld1.create();
        File fle1 = fld1.getFile( "KProjectTestClass" + namespace + ".java" );
        fle1.create( new ByteArrayInputStream( generateKProjectTestClass( kproj, namespace ).getBytes() ) );

        List<String> inputClasses = new ArrayList<String>();
        inputClasses.add( "org/drools/cdi/test/KProjectTestClass" + namespace + ".java" );

        //writeFs(namespace + "mod", srcMfs );
        final List<String> classes = compile( kproj, srcMfs, trgMfs, inputClasses );

        if ( createJar ) {
            writeJar( namespace, trgMfs );
        } else {
            writeFs( namespace, trgMfs );
        }
    }

    public List<String> compile(KProject kproj,
                                MemoryFileSystem srcMfs,
                                MemoryFileSystem trgMfs,
                                List<String> classes) {
        for ( KBase kbase : kproj.getKBases().values() ) {
            Folder srcFolder = srcMfs.getFolder( kproj.getKBasesPath() + "/" + kbase.getQName() );
            Folder trgFolder = trgMfs.getProjectFolder();

            copyFolder( srcMfs, srcFolder, trgMfs, trgFolder, kproj );
        }

        Folder srcFolder = srcMfs.getFolder( "META-INF" );
        Folder trgFolder = trgMfs.getFolder( "META-INF" );
        trgFolder.create();

        copyFolder( srcMfs, srcFolder, trgMfs, trgFolder, kproj );

        //printFs(trgMfs, trgMfs.getProjectFolder());
        // populateClasses(kproj, classes);

        System.out.println( classes );

        EclipseJavaCompilerSettings settings = new EclipseJavaCompilerSettings();
        settings.setSourceVersion( "1.5" );
        settings.setTargetVersion( "1.5" );
        EclipseJavaCompiler compiler = new EclipseJavaCompiler( settings );
        CompilationResult res = compiler.compile( classes.toArray( new String[classes.size()] ), trgMfs, trgMfs );

        if ( res.getErrors().length > 0 ) {
            fail( res.getErrors()[0].getMessage() );
            //fail(res.getErrors().toString());
        }

        List<String> classes2 = new ArrayList<String>( classes.size() );
        for ( String str : classes ) {
            classes2.add( filenameToClassname( str ) );
        }

        return classes2;
    }

    public String getRule(String packageName,
                          String ruleName) {
        String s = "package " + packageName + "\n" +
                   "global java.util.List list;\n" +
                   "rule " + ruleName + " when \n" +
                   "then \n" +
                   "  list.add(\"" + packageName + ":" + ruleName + "\"); " +
                   "end \n" +
                   "";
        return s;
    }

    public void copyFolder(MemoryFileSystem srcMfs,
                           Folder srcFolder,
                           MemoryFileSystem trgMfs,
                           Folder trgFolder,
                           KProject kproj) {
        if ( !trgFolder.exists() ) {
            trgMfs.getFolder( trgFolder.getPath() ).create();
        }

        Collection<Resource> col = (Collection<Resource>) srcFolder.getMembers();

        for ( Resource rs : srcFolder.getMembers() ) {
            if ( rs instanceof Folder ) {
                copyFolder( srcMfs, (Folder) rs, trgMfs, trgFolder.getFolder( ((Folder) rs).getName() ), kproj );
            } else {
                MemoryFile trgFile = (MemoryFile) trgFolder.getFile( ((File) rs).getName() );

                try {
                    trgMfs.setFileContents( trgFile, srcMfs.getFileContents( (MemoryFile) rs ) );
                } catch ( IOException e ) {
                    throw new RuntimeException( e );
                }
            }
        }
    }

    public void populateClasses(KProject kproject,
                                List<String> classes) {
        for ( KBase kBase : kproject.getKBases().values() ) {
            classes.add( kBase.getNamespace().replace( '.', '/' ) + "/" + kBase.getName() + "Producer.java" );
            classes.add( kBase.getNamespace().replace( '.', '/' ) + "/" + kBase.getName() + ".java" );
            for ( KSession kSession : kBase.getKSessions().values() ) {
                classes.add( kSession.getNamespace().replace( '.', '/' ) + "/" + kSession.getName() + "Producer.java" );
                classes.add( kSession.getNamespace().replace( '.', '/' ) + "/" + kSession.getName() + ".java" );
            }
        }
    }

    public void printFs(MemoryFileSystem mfs,
                        Folder f) {
        for ( Resource rs : f.getMembers() ) {
            System.out.println( rs );
            if ( rs instanceof Folder ) {
                printFs( mfs, (Folder) rs );
            } else {
                System.out.println( new String( mfs.getFileContents( (MemoryFile) rs ) ) );
            }
        }
    }

    public String generateKProjectTestClass(KProject kproject,
                                            String namespace) {
        String s = "package org.drools.cdi.test;\n" +
                   "import javax.inject.Named;\n" +
                   "import javax.inject.Inject;\n" +
                   "import javax.inject.Inject;\n" +
                   "import javax.enterprise.event.Observes;\n" +
                   "import org.jboss.weld.environment.se.events.ContainerInitialized;\n" +
                   "import " + KnowledgeBase.class.getName() + ";\n" +
                   "import " + StatefulKnowledgeSession.class.getName() + ";\n" +
                   "import " + StatelessKnowledgeSession.class.getName() + ";\n" +
                   "import " + org.drools.cdi.KBase.class.getName() + ";\n" +
                   "import " + org.drools.cdi.KSession.class.getName() + ";\n" +
                   "import " + KPTest.class.getName() + ";\n" +

                   "@KPTest(\"" + namespace + "\") \n" +
                   "public class KProjectTestClass" + namespace + " implements org.drools.kproject.KProjectTestClass {\n" +
                   "    private @Inject @KBase(\"" + namespace + ".test1.KBase1\")  " +
                   "    KnowledgeBase kBase1; \n" +
                   "    public KnowledgeBase getKBase1() {\n" +
                   "        return kBase1;\n" +
                   "    }\n" +
                   "    private @Inject @KBase(\"" + namespace + ".test2.KBase2\") " +
                   "    KnowledgeBase kBase2; \n" +
                   "    public KnowledgeBase getKBase2() {\n" +
                   "        return kBase2;\n" +
                   "    }\n" +
                   "    private @Inject @KBase(\"" + namespace + ".test3.KBase3\") \n" +
                   "    KnowledgeBase kBase3; \n" +
                   "    public KnowledgeBase getKBase3() {\n" +
                   "        return kBase3;\n" +
                   "    }\n" +
                   "    private @Inject @KSession(\"" + namespace + ".test1.KSession1\") StatelessKnowledgeSession kBase1kSession1; \n" +
                   "    public StatelessKnowledgeSession getKBase1KSession1() {\n" +
                   "        return kBase1kSession1;\n" +
                   "    }\n" +
                   "    private @Inject @KSession(\"" + namespace + ".test1.KSession2\") StatefulKnowledgeSession kBase1kSession2; \n" +
                   "    public StatefulKnowledgeSession getKBase1KSession2() {\n" +
                   "        return kBase1kSession2;\n" +
                   "    }\n" +
                   "    private @Inject @KSession(\"" + namespace + ".test2.KSession3\") StatefulKnowledgeSession kBase2kSession3; \n" +
                   "    public StatefulKnowledgeSession getKBase2KSession3() {\n" +
                   "        return kBase2kSession3;\n" +
                   "    }\n" +
                   "    private @Inject @KSession(\"" + namespace + ".test3.KSession4\") StatelessKnowledgeSession kBase3kSession4; \n" +
                   "    public StatelessKnowledgeSession getKBase3KSession4() {\n" +
                   "        return kBase3kSession4;\n" +
                   "    }\n" +
                   "}\n";

        return s;
    }

    public static String filenameToClassname(String filename) {
        return filename.substring( 0, filename.lastIndexOf( ".java" ) ).replace( '/', '.' ).replace( '\\', '.' );
    }

    public String generateBeansXML(KProject kproject) {
        String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                   "<beans xmlns=\"http://java.sun.com/xml/ns/javaee\"  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"  xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd\">\n" +
                   "</beans>";
        return s;
    }

    /**
     * This is an Internal Drools Class
     */
    public static class MemoryFileSystemClassLoader extends ClassLoader {

        MemoryFileSystem mfs;

        public MemoryFileSystemClassLoader(MemoryFileSystem mfs) {
            super( MemoryFileSystemClassLoader.class.getClassLoader() );
            this.mfs = mfs;
        }

        public Class< ? > loadClass(final String name,
                                    final boolean resolve) throws ClassNotFoundException {
            Class< ? > cls = fastFindClass( name );

            if ( cls == null ) {
                cls = getParent().loadClass( name );
            }

            if ( cls == null ) {
                throw new ClassNotFoundException( "Unable to load class: " + name );
            }

            return cls;
        }

        public Class< ? > fastFindClass(final String name) {
            Class< ? > cls = findLoadedClass( name );

            if ( cls == null ) {
                final byte[] clazzBytes = this.mfs.read( convertClassToResourcePath( name ) );
                if ( clazzBytes != null ) {
                    String pkgName = name.substring( 0,
                                                     name.lastIndexOf( '.' ) );
                    if ( getPackage( pkgName ) == null ) {
                        definePackage( pkgName,
                                       "",
                                       "",
                                       "",
                                       "",
                                       "",
                                       "",
                                       null );
                    }

                    cls = defineClass( name,
                                       clazzBytes,
                                       0,
                                       clazzBytes.length,
                                       PROTECTION_DOMAIN );
                }

                if ( cls != null ) {
                    resolveClass( cls );
                }
            }

            return cls;
        }

        public InputStream getResourceAsStream(final String name) {
            final byte[] clsBytes = this.mfs.read( name );
            if ( clsBytes != null ) {
                return new ByteArrayInputStream( clsBytes );
            }

            return getParent().getResourceAsStream( name );
        }

        public URL getResource(String name) {
            final byte[] clsBytes = this.mfs.read( name );
            if ( clsBytes != null ) {
                try {
                    return new URL( null, "memory://" + name, new MemorytURLStreamHandler( clsBytes ) );
                } catch ( MalformedURLException e ) {
                    throw new RuntimeException( "Unable to create URL for: " + name );
                }
            }
            return getParent().getResource( name );
        }

        public Enumeration<URL> getResources(String name) throws IOException {
            return getParent().getResources( name );
        }

        public static String convertClassToResourcePath(final String pName) {
            return pName.replace( '.',
                                  '/' ) + ".class";
        }

    }

    public static class TestWeldSEDeployment extends AbstractWeldSEDeployment {
        private final BeanDeploymentArchive beanDeploymentArchive;

        public TestWeldSEDeployment(ResourceLoader resourceLoader,
                                    Bootstrap bootstrap,
                                    List<String> classes) {
            super( bootstrap );
            beanDeploymentArchive = new ImmutableBeanDeploymentArchive( "classpath", classes, null );

        }

        public Collection<BeanDeploymentArchive> getBeanDeploymentArchives() {
            return Collections.singletonList( beanDeploymentArchive );
        }

        public BeanDeploymentArchive loadBeanDeploymentArchive(Class< ? > beanClass) {
            return beanDeploymentArchive;
        }

    }

    public void writeFs(String outFilename, MemoryFileSystem mfs) {
        java.io.File file = fileManager.newFile( outFilename );
        file.mkdir();
        writeFs(mfs, mfs.getProjectFolder(), file);
    }

    public void writeFs(MemoryFileSystem mfs,
                        Folder f,
                        java.io.File file1) {
        for ( Resource rs : f.getMembers() ) {
            if ( rs instanceof Folder ) {
                java.io.File file2 = new java.io.File( file1, ((Folder) rs).getName());
                file2.mkdir();
                writeFs( mfs, (Folder) rs, file2 );
            } else {
                byte[] bytes = mfs.getFileContents( (MemoryFile) rs );

                try {
                    FileManager.write( new java.io.File( file1, ((File) rs).getName()), bytes);
                } catch ( IOException e ) {
                    fail( "Unable to write project to file system\n" + e.getMessage() );
                }
            }
        }
    }

    public void writeJar(String outFilename,
                         MemoryFileSystem mfs) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            ZipOutputStream out = new ZipOutputStream( baos );

            writeJarEntries( mfs,
                             mfs.getProjectFolder(),
                             out );
            out.close();

            FileManager.write( fileManager.newFile( outFilename + ".jar" ), baos.toByteArray() );
        } catch ( IOException e ) {
            e.printStackTrace();
        }
    }

    public void writeJarEntries(MemoryFileSystem mfs,
                                Folder f,
                                ZipOutputStream out) throws IOException {
        byte[] buf = new byte[1024];
        for ( Resource rs : f.getMembers() ) {
            if ( rs instanceof Folder ) {
                writeJarEntries( mfs, (Folder) rs, out );
            } else {
                out.putNextEntry( new ZipEntry( rs.getPath().toPortableString() ) );

                byte[] contents = mfs.getFileContents( (MemoryFile) rs );

                ByteArrayInputStream bais = new ByteArrayInputStream( contents );

                int len;
                while ( (len = bais.read( buf )) > 0 ) {
                    out.write( buf, 0, len );
                }

                out.closeEntry();
                bais.close();
            }
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
The Circles of Power (1994) is volume fifteen in the French comic book science fiction series Valérian and Laureline, created by writer Pierre Christin and artist Jean-Claude Mézières.

Synopsis

Valérian and Laureline have brought their crippled astroship to a repair yard in the First Circle on the planet Rubanis, but have no money to pay for it. They are approached by three Shingouz who advise them to visit Colonel T'loc, the chief of police, who has a job for them.

They are driven by flying cab through the chaotic traffic of the First Circle of the city into the Second Circle. They proceed to the orbital station and T'loc's headquarters. The colonel says that he is concerned about trouble brewing in the Circles. The police force are corrupt so he is turning to Valérian and Laureline to help him. He describes the five Circles of Rubanis: the First, dedicated to heavy industry; the Second, designated for business, and the Third, dedicated to shopping and entertainment. The Fourth Circle is dedicated to the aristopatrons: the leaders of the religions, public service, and business. T'loc receives his orders from this Circle via a machine in his office, but he has received none for a long time.

Valérian and Laureline ask to examine the machine but T'loc forbids it, saying they would risk their lives. He wants the couple to investigate the Fifth and final Circle – the Circle of Power, a Circle that no one enters, and offers them seven hundred thousand bloutoks. Valérian moves to open the machine and T'loc pulls his gun, warning that if the machine is opened, the Scunindar virus will spread. T'loc agrees to double their risk bonus, and also gives them an advance payment, a Grumpy Transmuter from Bluxte, able to duplicate any currency .

T'loc's deputy, Indicator Croupachof, gives them a contact to start their inquiries. They plan to go to the Third Circle but, while flying through the Second Circle, they are attacked by a woman driving a black limousine, who crashes her vehicle. Landing in the Third Circle, Valérian, Laureline and S'Traks, the taxi driver, go to a bar to meet the contact. They find that the Shingouz are also in the bar to introduce this figure. The contact demands 100 Ebebe pearls for the information.  Laureline puts the grumpy to work, and the contact says there is a way into the Fifth Circle through an old, abandoned entrance.  They are interrupted by Na'Zultra, the woman in the limousine, who is accompanied by henchmen and swinging a whip. Laureline and the Shingouz are mesmerized; the contact is shot while trying to escape. The henchmen grab Laureline and make off with her. Valérian is too late to catch them.

S'Traks thinks he can find Na'Zultra through mechanics, who will recover her crashed limousine.  Valérian and S'Traks return to it and hide in the wreck. The recovery vehicle takes them and the limousine into the Fourth Circle.  As they explore, a group of aristopatrons – priests, high officials and businessmen –march by. S'Traks is shocked by their appearance: their necks have elongated and their heads have shrunk.  Valérian and S'Traks steal clothes of stragglers to disguise themselves and follow the crowd.

Elsewhere, Na'Zultra is interrogating Laureline.  Na'Zultra says she intends to seize power and demands Laureline's information from the contact.  But Laureline says the contact was killed before he could tell her anything. Na'Zultra threatens Laureline with a machine that will infect her with the Scunindar virus. This process is interrupted by watchmen warning of outsiders at an aristopatron meeting.  Thinking they must be Valerian and S'Traks, Na'Zultra departs, leaving only one man to guard Laureline, still strapped into the machine. She outwits the guard, knocks him unconscious, and explores the Fourth Circle. with her men leaving just one guard to look after Laureline who is still strapped into the machine.

Laureline finds a group of aristopatrons connected to a series of the machines that release the Scunindar virus.  Further, she finds Valérian and S'Traks, pinned down by fire from Na'Zultra and her Vlago-Vlago mercenaries, but all three escape.

Valérian, Laureline and S'Traks plan next steps. In the Third Circle, Laureline meets the Shingouz again.  She notices how entranced the population is by the screens that located all around the Circle.  The Shingouz explain that these are a variation on the machines in the Fourth Circle. Laureline asks the Shingouz if they can find the ancient service entrance to the Circle of Power.  They say they know of a man who may have a set of plans.

Arriving at police headquarters, Valérian notices Croupachof's surprise at seeing him again and realises that it was he who warned Na'Zultra.  Meeting with T'loc, Valérian asks why he has been sent on a useless mission since T'loc not only already knows that the aristopatrons have succumbed to the Scunindar virus but that he also has an antidote.  Valérian points to the machine and asks to use it – he will protect himself from the virus by using T'loc's antidote.

Elsewhere, in the First Circle, S'Traks is assembling his army from the best pilots in the city.

In the Second Circle with the Shingouz, Laureline visits Dr. Zoump, the real estate salesman who may have a map of the Fifth Circle.

Valérian, connected to the machine, is presented with a series of strange images, including that of the mysterious Hyper-Prince.  Switching off, Valérian asks T'loc if he is aware that they are putting together an expedition to go into the Circle of Power and find out who is transmitting the images.  T'loc replies that he does and that he is also assembling a team of his own.  They will move once the entrance has been located.  T'loc gives Valerian the agreed fee of one million, seven hundred thousand bloutoks.  As Valérian is picked up from T'loc's headquarters by S'Traks, he notices the large armada of police vehicles that T'loc is assembling.  S'Traks replies that his team is even larger.

In the Second Circle, Dr Zoump gives them the map for a fee.  Laureline and the Shingouz leave just before Na'Zultra and Croupachof arrive, who are also seeking the map.

Valérian is reunited with Laureline and the Shingouz at the rendezvous point where the S'Traks' has assembled the team for the assault on the Circle of Power.  They take off, closely monitored by both Na'Zultra and her mercenaries and T'loc and his police force. Valérian, Laureline and S'Traks punch their way in at the entrance, but find only a derelict room with cameras transmitting images of the Hyper-Prince and Scunindar virus. The Hyper-Prince lies before the cameras. Unaffected by the virus, Valerian snatches the ring of authority from his finger, which is no longer potent. At that moment T'loc and Na'Zultra burst in.  As fighting breaks out between the forces, Valérian, Laureline and the Shingouz escape.

Some time later, Valerian and Laureline depart Rubanis by their repaired astroship. The Shingouz tell them S'Traks is winning the battle on Rubanis!

Main characters
 Valérian, a spatio-temporal agent from Galaxity, future capital of Earth, in the 28th century
 Laureline, originally from France in the 11th century, now a spatio-temporal agent of Galaxity in the 28th century
 The Shingouz, a group of three aliens who trade in information
 S'Traks, a cabdriver on the planet Rubanis
 Colonel T'loc, chief of police on Rubanis
 Indicator Croupachof, aide to Colonel T'loc
 Na'Zultra, an ambitious power-hungry mercenary. Heads a band of mercenaries from Vlago-Vlago
 Dr Zoup, a former real-estate salesman

Setting
The planet Rubanis in the Constellation of Cassiopeia, previously seen  in Métro Châtelet, Direction Cassiopeia and The Ghosts of Inverloch. Since The Ghosts of Inverloch, Colonel T'loc has relocated his headquarters to an orbital platform. The robot thanatologists seen in The Ghosts of Inverloch seem to have disappeared. As in previous albums, the never-ending traffic congestion is a hallmark of the planet.

Rubanis is composed of five distinct circles:
 The First Circle. Where all of Rubanis' heavy industry is located. The most anarchic part of the planet.
 The Second Circle. The business district. More regulated than the first circle. Floating mines keep the traffic in order. However, businessmen flinging themselves from their buildings when the stock exchange crashes can cause a hazard to traffic.
 The Third Circle. Where merchants, amusements and arts congregate.
 The Fourth Circle. Home to high priests, respected public officials and the business aristocracy.
 The Fifth Circle. The mysterious circle of power.

Notes

 Colonel T'loc previously appeared in The Ghosts of Inverloch where it was revealed that he had the Scunindar virus. The antidote he now possesses presumably comes from Orq-The-Healer whose location T'loc was given by the Shingouz in that album.
 A Grumpy Transmuter from Bluxte was first seen in Ambassador of the Shadows.
 A cretiniser whip was first seen in On the Frontiers.
 This album was a major influence on the 1997 Luc Besson film The Fifth Element. Jean-Claude Mézières was contracted in 1991 to provide concept art for the film. He produced concepts for the futuristic New York, with its flying cars, as well as the Fhloston Paradise space-liner. When the production on the film was suspended in 1993, Besson turned to making the film Léon and Mézières returned to Valérian where he reworked several of the concepts he had been working on into The Circles of Power — most notably the flying taxi cabs. When the album was finished in 1994, Mézières sent a copy to Besson who was so taken with the cab-driving character of S'Traks that he rewrote the script of The Fifth Element, changing the occupation of protagonist Korben Dallas from a worker in a rocketship factory to cab driver. The film resumed production in 1996 and was released in 1997.
 The Circles of Power was translated into English by Timothy Ryan Smith and published, along with On the Frontiers and The Living Weapons in the same volume, in November 2004 by iBooks under the title Valerian: The New Future Trilogy. The pages were shrunk from their normal size to US comic book size.
 In 1995, this album was nominated for a Haxtur Award for Best Short Comic Strip, at the Salón Internacional del Cómic del Principado de Asturias (International Comics Convention of the Principality of Asturia, Spain).

References
Citations

Bibliography
 Mézières, J-C. (1998), Les Extras de Mézières No.2 (Mon Cinquieme Element), Dargaud, Paris, .
 Mézières, J-C. and Christin, P.(2004), Valerian: The New Future Trilogy, trans. T.R. Smith, iBooks, New York,  .
 The Fifth Element (1997), film, directed by Luc Besson, France: Pathé.

1994 graphic novels
Valérian and Laureline

redpajama_set_name: RedPajamaWikipedia