text:
Trump Tweeted; Trade War Tariffs on $200B Chinese Imports Will Rise 25%
By 24/7 Staff / www.supplychain247.com / May 5th, 2019
President Donald Trump threatened to dramatically escalate the trade war with China and said on Friday that tariffs on $200 billion worth of Chinese goods will increase from 10% to 25% and the US will slap an additional $325 billion worth of Chinese goods with a 25% tariff.
According to the Business Insider, President Donald Trump on Sunday threatened to dramatically ramp up the trade war with China unless a breakthrough on trade talks is reached by the end of the week.
The president said current tariffs on $200 billion worth of Chinese goods will be increased from 10% to 25% and the US will place 25% tariffs on an additional $325 billion worth of Chinese goods that are currently untaxed on Friday.
Trump said the slow pace of trade deal negotiations was the cause for the new restrictions.
"For 10 months, China has been paying Tariffs to the USA of 25% on 50 Billion Dollars of High Tech, and 10% on 200 Billion Dollars of other goods," Trump tweeted.
"These payments are partially responsible for our great economic results. 10% will go up to 25% on Friday. 325 Billions Dollars of additional goods sent to us by China remain untaxed but will be shortly at a rate of 25%."
"The Tariffs paid to the USA have had little impact on product cost, mostly borne by China. The Trade Deal with China continues, but too slowly, as they attempt to renegotiate. No!" Donald J. Trump✔@realDonaldTrump
For 10 months, China has been paying Tariffs to the USA of 25% on 50 Billion Dollars of High Tech, and 10% on 200 Billion Dollars of other goods. These payments are partially responsible for our great economic results. The 10% will go up to 25% on Friday. 325 Billions Dollars....
91.2K 12:08 PM - May 5, 2019 Twitter Ads info and privacy
36.5K people are talking about this
Reported by CNN, Trump appeared to be reviving an old playbook by threatening to ratchet up tariffs on Beijing in the hopes of applying additional pressure on China to force negotiators to strike a deal as early as this week.
Earlier this year, Trump said he was prepared to enact new sanctions, and increase existing ones, if a deal wasn't struck by a hard deadline of March 1, but indefinitely shelved those plans.
The President's renewed tariff threat alarmed investors Sunday, sending stock futures down.
The Dow was down more than 400 points Sunday evening, while the Nasdaq was down more than 100 points.
Trade talks between the US and China have been ongoing since Trump and Chinese president Xi Jinping reached a temporary trade truce at the end of November, but major sticking points on how to enforce the deal and what to do with current tariffs have caused problems in the discussions.
Chinese Vice Premier Liu He, the country's top economic official, is scheduled to travel to Washington, DC, for another round of talks this week.
While a deal is close, reports suggest that the US has backed down on a handful of demands designed to force China to make fundamental changes to its economy.
As it stands the US has placed tariffs on $250 billion worth of goods coming from China, while Beijing has responded with tariffs on $110 billion of American goods.
Tariffs Hurt the Heartland, a nationwide campaign against recent tariffs on American businesses, farmers and consumers, today released new data that shows American businesses paid an additional $2.7 billion in tariffs in November 2018 - the most recent month data is available from the U.S. Census Bureau due to the government shutdown.
This figure reflects the additional tariffs levied because of the administration's actions and represents a $2.7 billion tax increase and a massive year-over-year increase from $375 million in tariffs on the same products in November 2017.
The historic tax increases come despite overall imports being slightly lower. The data, compiled by Trade Partnership, also shows that U.S. export growth hit its lowest level of 2018 in November, thanks in part to a 37 percent decline in exports of products facing retaliatory tariffs.
"This data shows that Americans, not our foreign competitors, are the big losers in the trade war," Tariffs Hurt the Heartland Spokesman and former Congressman Charles Boustany said.
"U.S. businesses are being hit by a double whammy of historic tax increases in the form of tariffs and declining exports as farmers and manufacturers lose opportunities in the overseas markets they rely on for their livelihoods. As U.S.-China trade talks resume, we hope the administration will heed the concerns of the thousands of American companies facing unprecedented tariff costs while making further progress toward an improved trading relationship and an end to the trade war. The proposed March 1 tariff increase should be completely off the table as American businesses are already facing billions more in tariffs every month."
The November 2018 data shows that retaliatory tariffs, in particular, have had an immediate and severe effect on US exports. In November 2018, US exports of products subject to retaliatory tariffs declined by $4.1 billion, or 37 percent, from the previous year.
Export Growth on Products Targeted For Retaliation Nosedives
Other key takeaways from the November data:
Despite $426 million in monthly steel import tariffs and the Trump administration targeting even allies like Canada and Mexico with tariffs, steel imports actually INCREASED in November 2018.
China Section 301 tariffs cost American companies approximately $2.1 billion in November. Products subject to the Section 301 remedies faced $2.5 billion in tariffs in October, compared to just $363 million in November 2017. Tariffs on most of these products could rise from 10 percent to 25 percent unless the U.S. and China reach a deal in the coming weeks.
Source: Tariffs Hurt the Heartland
Small Parcel Negotiation and Audit Consultants
Retailers Urge Congress to Pass Tariff Relief Legislation | Tariffs Cost US $2.7 Billion per Month
8 Retailers Facing Rising Risk as China Trade War Escalates
Tariffs and China - Time to Reshore Now?
U.S. Retailers Get Some Good News on Easing China Trade Tensions
Transpacific ocean pricing 'more than double' a year ago
Trump administration announces list of tariffs on $200 billion in Chinese goods
U.S. Christmas Trade Truce With China Buys Supply Chain Managers a Little More Time


There are two Cape Kiwanda parks. The Tillamook County park includes the parking lot, while the state park contains the cape itself, and is located on the Three Capes Scenic Route. The action of wind and waves on the sandstone that forms the cape has created an interesting headland to explore. The "other" Haystack Rock can be seen offshore. The more famous one is near Cannon Beach.
Cape Kiwanda is a popular spot for hang gliding and kite flying.


Chelsea began 2019 with a disappointing home draw against Southampton on Wednesday night.
It was a frustrating night for the Blues as we came up against a resolute Saints side who were determined not to give anything away.
Visiting goalkeeper Angus Gunn put in a man of the match display on his Premier League debut, making key saves from Eden Hazard and Alvaro Morata, while the Spaniard had a second-half goal ruled out for offside.
Another headache for Maurizio Sarri will be the injury to Willian sustained in the first half, adding to our current injury problems with wide players.
Sarri made just one change from that which started at Selhurst Park on Sunday. Alvaro Morata replaced the injured Olivier Giroud in attack, after the Frenchman limped out of the win over Crystal Palace. Cesc Fabregas and Ruben Loftus-Cheek were deemed fit to return to the squad and both were on the bench.
Saints' new boss Ralph Hasenhuttl made eight changes following their defeat to Manchester City, with England Under-21 goalkeeper Gunn coming in for his league debut in place of Alex McCarthy. Former Blue Oriol Romeu captained the visitors but Ryan Bertrand missed out withinjury.
The Blues began well and Gunn was quickly called into action to prevent an Eden Hazard through-ball reaching Willian, and then saved from Morata's header after Cesar Azpilicueta had picked out his fellow Spaniard with a raking long pass into the area.
At the other end, Kepa Arrizabalaga had to race from his area to head clear before watching a Danny Ings header fly over the bar. That was a rare attack for Southampton though, whowereset up largely to limit the Blues' threat rather than offer their own.
Much of the first half followed the pattern from Sunday at Palace. Chelsea were dominating possession but unable to create clear-cut chances against a well-organised opponent. Willian cut inside before smashing a shot against Maya Yoshida and then nearly played in Hazard as the Blues countered quickly.
Our best chance of the first period came just after the half-hour mark when another ball from deep, this time from Toni Rudiger, found Hazard who hit hard and high, Gunn saving it somewhat fortuitously with his face when he was unable to get his hands up quickly enough.
Sarri revealed on Sunday injury concerns with a number of his squad, pointing to a shortage of wide players with Pedro and Callum Hudson-Odoi already out. He will have been cursing his luck to see Willian limp off towards the end of the first half, replaced by Loftus-Cheek, who had played right wing at times for England during the World Cup.
Chelsea pressure continued to mount in the closing stages with Kepa regularly the only man in our half. Morata and Marcos Alonso both had shots deflected behind before the break but the visitors were able to see out the half relatively untroubled.
Just after the restart, they came as close as they would to finding the net as Kepa turned a Stuart Armstrong curler past the post. In truth, it was probably heading wide anyway.
Chelsea continued to huff and puff. Hazard danced past two but couldn't find the power to beat Gunn at his near post, and then a rare poor touch from the Belgian allowed the goalkeeper to take the ball off his toe after David Luiz had played another one of those laser-guided passes into the area from deep.
Jorginho's drive was held by the keeper and Kepa punched away a dangerous Saints corner as we approached the final 20 minutes.
Sarri called for Fabregas in an attempt to carve open the visitors' defence, the Spaniard tucking in on the right of the midfield three on his 350th Premier League outing.
He took only two minutes to be involved in a key moment, exchanging passes with Hazard before playing in Morata who slotted into the net. The offside flag was raised but replays were inconclusive. It was the third goal scored by a Chelsea forward in two games ruled out by an assistant's flag. All required very close examination.
As we entered the closing stages it became evident Southampton were beginning to tire. Fabregas turned defence into attack and released Loftus-Cheek, who suddenly had space to run into. The England man laid off to his left, finding Morata, but this time the striker could not beat the keeper, who was enjoying a night to remember.
We added to the pressure as time ticked away, the visitors engaging in more than a fair amount of time-wasting as they tried to preserve what could be a big point in their battle for survival. N'Golo Kante and Loftus-Cheek both came close to finding a way through the red and white wall of shirts on the edge of the box but were denied by last-ditch tackles.
Marcos Alonso went down in the area under a challenge from Shane Long, and then brought Gunn's final save of the game with a low long-range effort that had the goalkeeper scrambling to his right.
So the year begins with two points dropped rather than one gained, but we go three clear of Arsenal in fourth place. It is now 10 days until our next Premier League fixture when Newcastle visit the Bridge, but first, we host Nottingham Forest in the FA Cup third round.
Chelsea (4-3-3): Kepa; Azpilicueta (c), Rudiger, David Luiz, Alonso; Kante, Jorginho, Barkley (Fabregas 68); Willian (Loftus-Cheek 37), Morata, Hazard.
Unused subs: Caballero, Christensen, Ampadu, Zappacosta, Emerson.
Southampton (3-4-3): Gunn; Bednarek, Yoshida, Vestergaard; Valery, Ward-Prowse, Romeu (c), Cedric; Redmond (Stephens 90+5), Ings (Long h-t), Armstrong (Austin 89).
Unused subs: McCarthy, Elyounoussi, Slattery, Ramsay.


Fulton says that most firewalls and other security solutions don't examine or understand the structure of DNS queries.
Infoblox has introduced Infoblox DNS Threat Analytics, technology that applies behavioural analytics to DNS queries in real time to detect and actively block data exfiltration attempts using DNS as a communications pathway.
Stealing proprietary information through DNS has recently become commonplace among cybercriminals, and Infoblox seeks to help block loss of valuable data.
- Nearly half (46 percent) of large businesses have experienced DNS-based data exfiltration and 45 percent experienced DNS tunneling in the previous year, according to a December 2014 survey.
- According to a 2015 report, the average total cost of a data breach to an enterprise is $3.8 million, including forensic efforts, resolution, and the consequences of customer defection.
- A data breach at a major U.S. health insurance company reported earlier this year could ultimately cost the firm more than $100 million.
Infoblox is making significant investments in building technologies to help secure DNS, the company says. Infoblox DNS Threat Analytics further enables enterprises and service providers to protect their DNS infrastructure and leverage DNS as a control point to defeat cybercrime. Infoblox is the first to offer a DNS server with built-in behavioural analytics to address DNS-based threats, the company added.
Domain Name System (DNS) queries are typically small packets of data that make a simple request: translating a domain name such as www.infoblox.com into an Internet Protocol (IP) address such as 54.235.223.101 that computers and endpoints understand. However, cybercriminals have learned to exploit DNS to smuggle out an organization's data—including highly sensitive information such as trade secrets and customer credit card numbers.
- Size: The query is larger than normal, or contains more information than normal.
- Encryption: The query contains encrypted data.
- Timing: The query is being repeated at precise intervals, unlike the intermittent DNS requests initiated by humans.
Traditional reputation-based and signature-based security—already built into Infoblox DNS security appliances—can already block known threats that have been identified by threat intelligence researchers. Infoblox DNS Threat Analytics goes a step further with its ability to automatically block so-called zero-day threats—attacks that haven't yet been discovered—after analysing DNS queries and spotting suspicious behaviour. There's no need to install additional software on end-user devices or to deploy additional devices in the data centre. Infoblox DNS Threat Analytics can scale to provide enforcement across the network and provide visibility into infected devices or rogue employees trying to steal data. Infoblox can also notify other security systems when threats are detected, accelerating remediation.
The real-time analysis and detection capability in Infoblox DNS Threat Analytics works as queries are being processed. This is essential to fast identification of indicators of compromise (IOC). Other off-line approaches such as gathering mountains of log data and analysing these files after the fact can take weeks to months—which is unacceptable in today's' high-stakes security environments.


Home Adventures My favorite CPC booths….
My wife's favorite booth… EVERY church needs one of these wonder machines!
This funny guy has had an effective ministry for years!
CEF, while one of the longest enduring ministies, has not always been known for being cutting edge (most known for their flannel graphs) so the flat screens and DVD players stopped me in my tracks! Looks like some good fresh things are happening.
Crosspoint / Centri-Kid is a ministry of Life Way, these guys also provided the eZone where the new INCM.org site Kidology built was launched and featured at CPC.
The Harvest guys (Joe shown here) are great friends and partners with Kidology.
This team is AWESOME – we hope to add their stuff to Kidology soon!
These guys ROCK! Also, creators of Timbuktoons!
Faithful for so many years (since 1974), One Way Street continues to be the #1 place for puppets and other creative tools for ministry. This is Liz VonSeggen, founder with her husband Dale.
Of course, I HAD to visit Speed Stacks and do some racing. I skipped the big kid and raced the little guy… he still beat me, but only by .03 seconds!
I think the secret is to stick your tongue out while stacking!
Was it the 252Basics curriculum? Nope, (though I am looking at that closely after some buzz on Kidology about it), it was the couch and candy!
Thanks for posting all these pictures. They let me feel a little as If I were there!
I know the Lord will give me the possibility in the future.


text:
Dr. Shlomo Ben-Ami
Photo: Avigail Uzi
Former FM says Israel a captive of Shoah memories
Shlomo Ben-Ami, speaking to Spanish Parliament in honor of Holocaust Memorial Day, says Israeli Jews must stop comparing current events to Shoah or current leaders to Hitler in order not to legitimize comparisons between Israel and the Nazis
Itamar Eichner |Published: 01.30.07 , 09:49
It's time for Israeli Jews to leave behind the mentality of the victim and the ghetto, and stop making comparisons between Hitler and Arafat, Saddam Hussein or even Ahmadinejad, said former Foreign Minister Shlomi Ben-Ami in a speech to the Spanish Parliament Sunday.
Such comparisons are an obstacle to Israel's relationship with the international community and, even worse, "Give legitimacy to some Palestinian comparisons between Israel and the Nazis," he said.
In his speech, the keynote event in a Spanish ceremony in honor of the International Holocaust Remembrance Day, Ben-Ami also censured Europe and Spain's left-wing, whom he claimed lead a campaign of anti-Semitism, disguised as anti-Zionism.
In particular, he condemned Nobel prizewinner Jose Saramago, who referred to Jenin as "Auschwitz".
Nonetheless, he concluded his speech with criticism of Israel and Jews in general, saying "if the strongest nation in the Middle East refers to every war and every threat as a threat of Holocaust, we ourselves are making the Holocaust banal."
We can't hold on obsessively to the mentality of being the victim, he continued, warning that "Israel is a captive of paranoia of the memory of the Holocaust."
Ben-Ami's statements caused a storm in the small Jewish community in Spain, and among Israel's Ministry of Foreign Affairs. The head of Spain's Jewish community, Jacobo Israel, emphasized to the Spanish Parliament that Israel is under existential threat by the Iranian regime.
The Foreign Ministry said that Ben-Ami's statements were enraging, particularly when made abroad by an Israeli Jew, speaking in the capacity of a former foreign minister.
Ben-Ami defended himself to the Yedioth Aharonoth newspaper Monday, saying "I believe in explaining things in a balanced manner, which is the only thing that lends credence to our cries against others...We must not interpret current events as a Shoah."
"The ability to critique ourselves is sometimes the best advocacy...I'm sorry that narrow-minded people, instead of promoting Israeli interests, are weakening Israeli advocacy," he said
"Ninety-nine percent of my speech was a defense of Israel and a harsh criticism of the European left...I respect everyone's feelings but am sorry for those who don't see the statements within the proper context," he added
See all talkbacks "Former FM says Israel a captive of Shoah memories"

redpajama_set_name: RedPajamaCommonCrawl


text:
Funds & Performance
Funds Overview
Global Fund
Overseas Fund
U.S. Value Fund
High Yield Fund
Fund of America
First Eagle Viewpoints
Literature & Forms
Shareholder Reports
Client Servicing
Fees & Expenses
Minimum Investments
Proxy Voting Information
Fund Holdings
XBRL Filings
First Eagle Investment Management Launches Suite of Retirement Share Classes for its Mutual Funds
< News
NEW YORK—(March 1, 2017)— First Eagle Investment Management ("First Eagle") today announced that it has launched a suite of retirement share classes for its mutual fund line-up. The new R3, R4, R5 and R6 shares, available for purchase on March 1, 2017, represent a transparent and complementary menu of pricing options from which retirement plan fiduciaries can choose the share class most suited to the needs of their plan.
The new retirement share classes are available without investment minimums or front-end sales charges and offer varying levels of intermediary compensation, including 12b-1 and sub-TA fees. The R6 shares do not include any form of intermediary compensation and represent the lowest-cost offering among the newly launched shares.
"By introducing share classes that are dedicated to group retirement plans, we are continuing our commitment to this important market," said Mike Rosenberg, head of Retirement Investment Solutions at First Eagle. "I am excited that plan fiduciaries will have access to our investment solutions through share classes of their choice that address their specific needs. This brings us a step closer in our quest to help American savers with investment strategies that aim to deliver attractive returns, preserve purchasing power and provide downside protection."
First Eagle created a dedicated retirement effort in November 2016 with the goal of helping American retirement savers reach their investment goals. The Retirement Investment Solutions group closely partners with financial advisors, investment consultants and retirement plan recordkeepers to provide investment solutions to plan sponsors, plan participants and individual retirement savers.
About First Eagle Investment Management
First Eagle is an independent investment management firm that manages approximately $97 billion in assets (as of 12/31/16) on behalf of institutional and individual clients. With the core purpose of providing prudent stewardship of client assets, the firm focuses on active, fundamental and benchmark-agnostic investing, with a strong focus on downside protection. First Eagle's investment capabilities include equity, fixed income and multi-asset strategies. Over a long history dating back to 1864, First Eagle has helped its clients avoid permanent impairment of capital and earn attractive returns through widely varied economic cycles—a tradition that is central to its mission today. First Eagle Investment Management is the adviser to First Eagle Funds. For more information, please visit www.feim.com.
Hedda Nadler
hedda@mountandnadler.com
Mount and Nadler
Check the background of FEF Distributors on FINRA's BrokerCheck.
Investors should consider investment objectives, risks, charges and expenses carefully before investing. The prospectus and summary prospectus contain this and other information about the Funds and may be obtained by ordering online or calling us at 800.747.2008. Please read our prospectus carefully before investing.


ACI Motors, the largest Agri machineries supplier in Bangladesh, has officially brought KOBELCO Excavator sales and after sales service in Bangladesh.
Dr F H Ansarey, Managing Director & CEO of ACI Motors and Mr. Nakagawa Koji, Managing Director & CEO of KOBELCO Construction Equipment India Pvt. Ltd, formally unveiled the new product KOBELCO Excavator in Bangladesh market on October, 23 at Le Méridien Dhaka.
Subrata Ranjan Das, Executive Director of ACI Motors and Vikram Sharma, Advisor (India & South Asia) and Rajesh Kapoor, Head of Sales & Marketing of KOBELCO Construction Equipment India Pvt. Ltd and top officials of ACI Group were also present on the occasion.


Colex Insulation Sleeve & Sheet is made from polyethylene, corss-linkage agent and foaming agent in batch process under the condition of high pressure (about 2000 PSIG) and high temperature (about 150 to 200 degree C). Each micro foam cell is chemically bonded to form a tightly closed structure; therefore, our foam is 100% closed-cell and will not absorb moisture inside to cause condensation in the cell. Even exists under the pure oxygen or below the utmost low temperature (-196 degree C ) for years, the chemical bond of Colex foam will not be degraded. Consequently, it could be used over 30 years and its operation temperature range affords to endure from 100 to -196 degree C.
Furthermore, our Colex foam has the excellent floating ability on water. Even thrust by sharp material, the floating strength will not be reduced. It is rather suitable for the application on vessel and floating materials.
2.Air-condition Insulation: chilling waters, chillers, and ducts of air conditioner, etc.
4.Others: package, fishery, agriculture, toys, and sport equipment, etc.


text:
byRobert Louis Stevenson, Lou Cameron
Hardcover | January 19, 2016
Audio Book (CD)
Audio Book (Cassette)
Reinforced Library Binding
Dr. Henry Jekyll is a well-liked and respected physician. When he calls upon his lawyer, Mr. Utterson, to draw up a new will to include a strange new beneficiary, Mr. Utterson takes it upon himself to investigate the identity of this strange man. But nothing sufficiently prepares him for the truth he will uncover! Classics Illustrated tells this wonderful tale in colorful comic strip form, offering an excellent introduction for younger readers. This edition also includes theme discussions and study questions, which can be used both in the classroom or at home to further engage the reader in the story. The Classics Illustrated comic book series began life in 1941 with its first issue, Alexandre Dumas' "The Three Musketeers", and has since included over 200 classic tales released around the world. This new CCS Books edition is specifically tailored to engage and educate young readers with some of the greatest works ever written, while still thrilling older readers who have loving memories of this series of old. Each book contains dedicated theme discussions and study questions to further develop the reader's understanding and enjoyment of the work at hand.
Title:Dr. Jekyll And Mr. HydeFormat:HardcoverProduct dimensions:9.41 X 7.24 X 0.98 inShipping dimensions:9.41 X 7.24 X 0.98 inPublished:January 19, 2016Publisher:Classics IllustratedLanguage:English
Customer Reviews of Dr. Jekyll And Mr. Hyde


I caught this at just the right moment! A ray of sun on the road in Kentucky's Red River Gorge last fall.
Posted in Kentucky, nature, photography, travelTagged autumn, colors, fall, fall colors, Kentucky, KY, nature, park, photography, Red River Gorge, road, sun, winding roadBookmark the permalink.
Thanks Tina! I thought so!


Hail damage to corn can occur as reduced leaf area, plant bruising, stand loss, or direct ear damage.
As the season progresses, hail-damaged corn should be scouted and monitored for stalk rots and lodging so that fields can be targeted for an early harvest if necessary.
Corn yield loss due to hail damage can result from leaf area reduction caused by defoliation, plant bruising, stand reduction, and direct damage to the ears.
Figure 1. Hail damaged corn leaves.
Understanding the severity of each of these factors is important to accurately assess the extent of hail damage and its impact on yield potential. Evaluating the health of the growing point can be done soon after the storm, but making a decision regarding the yield potential of the field is premature because the plants have not been given enough time to recover. To accurately assess potential yield loss from hail, corn plants should be evaluated 7 to 10 days after the storm. At that time, it is easier to more accurately distinguish between living plants and plants that are unable to withstand the hail damage or subsequent disease infection.
Plant defoliation results in the loss of photosynthetically active leaf area. The severity of the loss depends not only on the amount of leaf area removed, but also the corn growth stage when damage occurs. Keep in mind that leaf damage usually looks worse than it really is, especially in the first few days after a storm. Shredded leaves that remain green and attached to the plant will often continue to produce photosynthates for the plant.
To avoid overestimating the amount of damage, be sure to look at all leaves and average the percent defoliation. Use the average percent defoliation for all leaves and the stage of plant growth and refer to Table 1 to estimate the reduction of yield potential from defoliation.
Assessing the extent of stem and whorl bruising and its effects on the health and productivity of the plant is difficult. Bruising may create an avenue for infection, which can increase the risk for stalk lodging later in the season. Fields that contain severely bruised plants may need to be evaluated again toward the end of the season.
By the V6 growth stage, the growing point is generally at or above the soil surface. Wind, hail, and/or driving rains may cause stalks to break below the growing point. If stalks are broken below the growing point, they will not recover to produce an ear. After V10, potential yield loss and stand reductions are at nearly a one to one ratio (for example: 80% stand = 80% yield potential). Yield losses due to stand reductions are additive to yield losses due to defoliation. Stand loss at this stage will likely result in considerably greater loss of yield potential compared to leaf defoliation.
Figure 3. Hail damaged corn ear.
Figure 2. Hail damaged corn ear.
The factors involved in estimating potential yield loss include: defoliation, stand loss, plant bruising, possible disease infection of damaged plants, stalk lodging later in the season, and environmental conditions during the remainder of the growing season. Growers should scout and monitor for stalk rot and lodging, increased nitrate levels in fields intended for animal feed, and late-season weed flushes due to increased light penetration in defoliated areas. Potential yield loss figures due to damaged or missing plants are only estimates. True yield loss from a hail storm cannot be fully determined until harvest.


text:
Top 7 Android Games of the Month
Prayank
Google Play Store contains hundreds and thousands of games from different genres and there is one for everyone. But since there are so many of them, it can get difficult to sort out the best ones.
To make things easier for you, we've compiled a list of the best games you should check out this month.
The list contains game titles which have been a success on PC as well as those based on popular movies and actors.
Also Read: Top 11 Portable Game Apps for Windows.
Here are the seven best Android games you should give a try this month.
As the name suggests, Nonstop Chuck Norris is a game based on the on-screen antics and legend of Hollywood superstar — Chuck Norris.
The game developers have rightly said, 'Everything is a weapon when you're Chuck Norris'.
Expect a lot of action in this game as you battle out infinite villains as Chuck Norris in the endeavour to save multiple universes.
The game is free to play with some in-app purchases, which can be turned off easily and it runs without an internet connection.
My personal favourite in this list, Age of Empires: Castle Siege is the mobile version of one of the most popular strategy games ever.
This game title was awaited by a lot many and Microsoft has finally brought the acclaimed strategy game to handheld devices.
The game is set in the medieval era and like the PC edition, you can choose from several civilisations, train troops, defend your city and fight battles while researching new techniques.
Also Read: Top 3 Football Manager Games on Android.
Transformers: Forged to Fight is based on the popular Transformers movie franchise and players get to control their favourite Autobots, Decepticons, Predacons and Maximals in the game.
The action-fighting RPG game lets you play as Optimus Prime, Bumblebee, Megatron, Soundwave and several other Transformers as you fight out other players.
You can even team up with your friends to battle in global events, set up defences to protect your base and raid enemy bases with your allies.
The game requires an active internet connection to play.
Baahubali: The Game (Official)
Baahubali: The Game is based on the popular Indian movie — Baahubali — which has garnered an insane response from the audience and the recently released second part of the movie is fast rising the chart of top grossing movies from India.
It's a strategy game wherein you need to build up your defences in order to ascertain that your fort doesn't fall to enemy attacks.
Train your troops, defend your fort, attack the enemies with heroes such as Baahubali, Kattappa and more.
You can also battle other players, make clans with friends to battle other clans worldwide.
Also Read: 5 Android Player Games to Play with Your Partner.
CATS: Crash Arena Turbo Stars is another fighting game on the list which needs players to assemble their war machine with collected parts, design it and then battle other players.
You'll need to design, craft and upgrade your battle robot to come fight other players in PvP action.
Enter your battle-ready bot into the World Championship and battle hundreds of other customised robots to become the ultimate champion.
Power Rangers: Legacy Wars
Power Rangers: Legacy Wars is based on the popular franchise which goes by the same name. Players will need to defeat Rita Repulsa who has cloned Power Rangers and making them fight for her.
Defeat Rita and save the Morphin Grid. You can also engage in real-time PvP battles against players globally in famous locations from the movie and TV show.
Players will have 40+ warriors to choose from — both Rangers and villains from the Power Rangers multiverse in this high graphic game.
Also Read: 7 Amazing Android Puzzle Games to Take Your Brain For a Spin.
Chicken Scream
Chicken Scream is a platformer game, but an unusual one. The chicken needs to keep walking to complete the level and jump in order to avoid falling down.
The unusual part is that you're going to control the chicken using your voice. You'll have to talk or sing to make the chicken walk and scream to make it jump — beware of the obstacles.
Yes, you read that right. There is no tapping involved while playing this game, which is controlled solely by your voice.
Also Read: 10 Must-Have Offline Android Games.
Let us know how you like these games and if we missed out your favourite, share it with us in the comments below.
#game #games
XBox was initially supposed to be called as DirectXbox.
How to Solve Hamachi Not Working with Minecraft
How to Troubleshoot and Automatically Join Team Chat in Overwatch
Bike enthusiast, traveller, ManUtd follower, army brat, word-smith; Delhi University, Asian College of Journalism, Cardiff University alumnus; a journalist breathing tech these days.


text:
Q: Specifying permisions with icacls I want to allocate read only permission to "Everyone" on an empty folder so that the users are not allowed to change the folder name.
However I want "Everyone" to be able to create/modify/delete files in the folder.
say the folder is called /fred/myfolder
I've tried
icacls /fred /grant Everyone:(OI)R

and
icacls /fred/myfolder /grant Everyone:(CI)R
icacls /fred/myfolder /grant Everyone:(OI)F

and various combinations to no avail.
The documentation/my knowledge isn't great.
Any help would be appreciated

A: I found the answer.
I needed
icacls /fred /grant Everyone:(OI)R

Then i just needed
icacls /fred/myfolder /grant Everyone:(OI)(CI)(OI)F

These were the combinations that I found very useful:
(NP) This Folder Only.
(OI) This folder and files.
(CI) This folder and subfolders.
(OI)(CI) This folder, subfolders, and files.
(OI)(CI)(IO) Subfolders and files only.
(CI)(IO) Subfolders only.
(OI)(IO) Files only.

redpajama_set_name: RedPajamaStackExchange


text:
package org.elasticsearch.repositories.encrypted;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.cluster.metadata.RepositoryMetadata;
import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.CheckedSupplier;
import org.elasticsearch.common.UUIDs;
import org.elasticsearch.common.blobstore.BlobContainer;
import org.elasticsearch.common.blobstore.BlobMetadata;
import org.elasticsearch.common.blobstore.BlobPath;
import org.elasticsearch.common.blobstore.BlobStore;
import org.elasticsearch.common.blobstore.DeleteResult;
import org.elasticsearch.common.blobstore.support.AbstractBlobContainer;
import org.elasticsearch.common.bytes.BytesArray;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.cache.Cache;
import org.elasticsearch.common.cache.CacheBuilder;
import org.elasticsearch.common.io.Streams;
import org.elasticsearch.common.io.stream.ReleasableBytesStreamOutput;
import org.elasticsearch.common.settings.SecureString;
import org.elasticsearch.common.util.BigArrays;
import org.elasticsearch.core.CheckedConsumer;
import org.elasticsearch.core.CheckedFunction;
import org.elasticsearch.core.Tuple;
import org.elasticsearch.indices.recovery.RecoverySettings;
import org.elasticsearch.license.LicenseUtils;
import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.repositories.FinalizeSnapshotContext;
import org.elasticsearch.repositories.RepositoryException;
import org.elasticsearch.repositories.RepositoryStats;
import org.elasticsearch.repositories.SnapshotShardContext;
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
import org.elasticsearch.snapshots.SnapshotInfo;
import org.elasticsearch.xcontent.NamedXContentRegistry;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.NoSuchFileException;
import java.security.GeneralSecurityException;
import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.function.Function;
import java.util.function.Supplier;

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

import static org.elasticsearch.repositories.encrypted.EncryptedRepositoryPlugin.ENCRYPTED_SNAPSHOT_FEATURE;

public class EncryptedRepository extends BlobStoreRepository {
    static final Logger logger = LogManager.getLogger(EncryptedRepository.class);
    // the following constants are fixed by definition
    static final int GCM_TAG_LENGTH_IN_BYTES = 16;
    static final int GCM_IV_LENGTH_IN_BYTES = 12;
    static final int AES_BLOCK_LENGTH_IN_BYTES = 128;
    // the following constants require careful thought before changing because they will break backwards compatibility
    static final String DATA_ENCRYPTION_SCHEME = "AES/GCM/NoPadding";
    static final long PACKET_START_COUNTER = Long.MIN_VALUE;
    static final int MAX_PACKET_LENGTH_IN_BYTES = 8 << 20; // 8MB
    // this should be smaller than {@code #MAX_PACKET_LENGTH_IN_BYTES} and it's what {@code EncryptionPacketsInputStream} uses
    // during encryption and what {@code DecryptionPacketsInputStream} expects during decryption (it is not configurable)
    static final int PACKET_LENGTH_IN_BYTES = 64 * (1 << 10); // 64KB
    // the path of the blob container holding all the DEKs
    // this is relative to the root base path holding the encrypted blobs (i.e. the repository root base path)
    static final String DEK_ROOT_CONTAINER = ".encryption-metadata"; // package private for tests
    static final int DEK_ID_LENGTH = 22; // {@code org.elasticsearch.common.UUIDS} length

    // the snapshot metadata (residing in the cluster state for the lifetime of the snapshot)
    // contains the salted hash of the repository password as present on the master node (which starts the snapshot operation).
    // The hash is verified on each data node, before initiating the actual shard files snapshot, as well
    // as on the master node that finalizes the snapshot (which could be a different master node from the one that started
    // the operation if a master failover occurred during the snapshot).
    // This ensures that all participating nodes in the snapshot operation agree on the value of the key encryption key, so that
    // all the data included in a snapshot is encrypted using the same password.
    static final String PASSWORD_HASH_USER_METADATA_KEY = EncryptedRepository.class.getName() + ".repositoryPasswordHash";
    static final String PASSWORD_SALT_USER_METADATA_KEY = EncryptedRepository.class.getName() + ".repositoryPasswordSalt";
    private static final int DEK_CACHE_WEIGHT = 2048;

    // this is the repository instance to which all blob reads and writes are forwarded to (it stores both the encrypted blobs, as well
    // as the associated encrypted DEKs)
    private final BlobStoreRepository delegatedRepository;
    // every data blob is encrypted with its randomly generated AES key (DEK)
    private final Supplier<Tuple<BytesReference, SecretKey>> dekGenerator;
    // license is checked before every snapshot operations; protected non-final for tests
    protected Supplier<XPackLicenseState> licenseStateSupplier;
    private final SecureString repositoryPassword;
    private final String localRepositoryPasswordHash;
    private final String localRepositoryPasswordSalt;
    private volatile String validatedLocalRepositoryPasswordHash;
    private final Cache<String, SecretKey> dekCache;

    /**
     * Returns the byte length (i.e. the storage size) of an encrypted blob, given the length of the blob's plaintext contents.
     *
     * @see EncryptionPacketsInputStream#getEncryptionLength(long, int)
     */
    public static long getEncryptedBlobByteLength(long plaintextBlobByteLength) {
        return (long) DEK_ID_LENGTH /* UUID byte length */
            + EncryptionPacketsInputStream.getEncryptionLength(plaintextBlobByteLength, PACKET_LENGTH_IN_BYTES);
    }

    protected EncryptedRepository(
        RepositoryMetadata metadata,
        NamedXContentRegistry namedXContentRegistry,
        ClusterService clusterService,
        BigArrays bigArrays,
        RecoverySettings recoverySettings,
        BlobStoreRepository delegatedRepository,
        Supplier<XPackLicenseState> licenseStateSupplier,
        SecureString repositoryPassword
    ) throws GeneralSecurityException {
        super(
            metadata,
            namedXContentRegistry,
            clusterService,
            bigArrays,
            recoverySettings,
            BlobPath.EMPTY /* the encrypted repository uses a hardcoded empty
                            base blob path but the base path setting is honored for the delegated repository */
        );
        this.delegatedRepository = delegatedRepository;
        this.dekGenerator = createDEKGenerator();
        this.licenseStateSupplier = licenseStateSupplier;
        this.repositoryPassword = repositoryPassword;
        // the salt used to generate an irreversible "hash"; it is generated randomly but it's fixed for the lifetime of the
        // repository solely for efficiency reasons
        this.localRepositoryPasswordSalt = UUIDs.randomBase64UUID();
        // the "hash" of the repository password from the local node is not actually a hash but the ciphertext of a
        // known-plaintext using a key derived from the repository password using a random salt
        this.localRepositoryPasswordHash = AESKeyUtils.computeId(
            AESKeyUtils.generatePasswordBasedKey(repositoryPassword, localRepositoryPasswordSalt)
        );
        // a "hash" computed locally is also locally trusted (trivially)
        this.validatedLocalRepositoryPasswordHash = this.localRepositoryPasswordHash;
        // stores decrypted DEKs; DEKs are reused to encrypt/decrypt multiple independent blobs
        this.dekCache = CacheBuilder.<String, SecretKey>builder().setMaximumWeight(DEK_CACHE_WEIGHT).build();
        if (isReadOnly() != delegatedRepository.isReadOnly()) {
            throw new RepositoryException(
                metadata.name(),
                "Unexpected fatal internal error",
                new IllegalStateException("The encrypted repository must be read-only iff the delegate repository is read-only")
            );
        }
    }

    @Override
    public RepositoryStats stats() {
        return this.delegatedRepository.stats();
    }

    /**
     * The repository hook method which populates the snapshot metadata with the salted password hash of the repository on the (master)
     * node that starts of the snapshot operation. All the other actions associated with the same snapshot operation will first verify
     * that the local repository password checks with the hash from the snapshot metadata.
     * <p>
     * In addition, if the installed license does not comply with the "encrypted snapshots" feature, this method throws an exception,
     * which aborts the snapshot operation.
     *
     * See {@link org.elasticsearch.repositories.Repository#adaptUserMetadata(Map)}.
     *
     * @param userMetadata the snapshot metadata as received from the calling user
     * @return the snapshot metadata containing the salted password hash of the node initializing the snapshot
     */
    @Override
    public Map<String, Object> adaptUserMetadata(Map<String, Object> userMetadata) {
        // because populating the snapshot metadata must be done before the actual snapshot is first initialized,
        // we take the opportunity to validate the license and abort if non-compliant
        if (false == ENCRYPTED_SNAPSHOT_FEATURE.checkWithoutTracking(licenseStateSupplier.get())) {
            throw LicenseUtils.newComplianceException("encrypted snapshots");
        }
        Map<String, Object> snapshotUserMetadata = new HashMap<>();
        if (userMetadata != null) {
            snapshotUserMetadata.putAll(userMetadata);
        }
        // fill in the hash of the repository password, which is then checked before every snapshot operation
        // (i.e. {@link #snapshotShard} and {@link #finalizeSnapshot}) to ensure that all participating nodes
        // in the snapshot operation use the same repository password
        snapshotUserMetadata.put(PASSWORD_SALT_USER_METADATA_KEY, localRepositoryPasswordSalt);
        snapshotUserMetadata.put(PASSWORD_HASH_USER_METADATA_KEY, localRepositoryPasswordHash);
        logger.trace(
            "Snapshot metadata for local repository password  [{}] and [{}]",
            localRepositoryPasswordSalt,
            localRepositoryPasswordHash
        );
        return Map.copyOf(snapshotUserMetadata);
    }

    @Override
    public void finalizeSnapshot(FinalizeSnapshotContext finalizeSnapshotContext) {
        final SnapshotInfo snapshotInfo = finalizeSnapshotContext.snapshotInfo();
        try {
            validateLocalRepositorySecret(snapshotInfo.userMetadata());
        } catch (RepositoryException passwordValidationException) {
            finalizeSnapshotContext.onFailure(passwordValidationException);
            return;
        }
        // remove the repository password hash (and salt) from the snapshot metadata so that it is not displayed in the API response
        // to the user
        final Map<String, Object> updatedUserMetadata = new HashMap<>(snapshotInfo.userMetadata());
        updatedUserMetadata.remove(PASSWORD_HASH_USER_METADATA_KEY);
        updatedUserMetadata.remove(PASSWORD_SALT_USER_METADATA_KEY);
        final SnapshotInfo updatedSnapshotInfo = new SnapshotInfo(
            snapshotInfo.snapshot(),
            snapshotInfo.indices(),
            snapshotInfo.dataStreams(),
            snapshotInfo.featureStates(),
            snapshotInfo.reason(),
            snapshotInfo.version(),
            snapshotInfo.startTime(),
            snapshotInfo.endTime(),
            snapshotInfo.totalShards(),
            snapshotInfo.successfulShards(),
            snapshotInfo.shardFailures(),
            snapshotInfo.includeGlobalState(),
            updatedUserMetadata,
            snapshotInfo.state(),
            snapshotInfo.indexSnapshotDetails()
        );
        super.finalizeSnapshot(
            new FinalizeSnapshotContext(
                finalizeSnapshotContext.updatedShardGenerations(),
                finalizeSnapshotContext.repositoryStateId(),
                finalizeSnapshotContext.clusterMetadata(),
                updatedSnapshotInfo,
                finalizeSnapshotContext.repositoryMetaVersion(),
                finalizeSnapshotContext
            )
        );
    }

    @Override
    public void snapshotShard(SnapshotShardContext context) {
        try {
            validateLocalRepositorySecret(context.userMetadata());
        } catch (RepositoryException passwordValidationException) {
            context.onFailure(passwordValidationException);
            return;
        }
        super.snapshotShard(context);
    }

    @Override
    protected BlobStore createBlobStore() {
        final Supplier<Tuple<BytesReference, SecretKey>> blobStoreDEKGenerator;
        if (isReadOnly()) {
            // make sure that a read-only repository can't encrypt anything
            blobStoreDEKGenerator = () -> {
                throw new RepositoryException(
                    metadata.name(),
                    "Unexpected fatal internal error",
                    new IllegalStateException("DEKs are required for encryption but this is a read-only repository")
                );
            };
        } else {
            blobStoreDEKGenerator = this.dekGenerator;
        }
        return new EncryptedBlobStore(
            delegatedRepository.blobStore(),
            delegatedRepository.basePath(),
            metadata.name(),
            this::generateKEK,
            blobStoreDEKGenerator,
            dekCache
        );
    }

    @Override
    protected void doStart() {
        this.delegatedRepository.start();
        super.doStart();
    }

    @Override
    protected void doStop() {
        super.doStop();
        this.delegatedRepository.stop();
    }

    @Override
    protected void doClose() {
        super.doClose();
        this.delegatedRepository.close();
    }

    @SuppressWarnings("HiddenField")
    private Supplier<Tuple<BytesReference, SecretKey>> createDEKGenerator() throws GeneralSecurityException {
        // DEK and DEK Ids MUST be generated randomly (with independent random instances)
        // the rand algo is not pinned so that it goes well with various providers (eg FIPS)
        // TODO maybe we can make this a setting for rigurous users
        final SecureRandom dekSecureRandom = new SecureRandom();
        final SecureRandom dekIdSecureRandom = new SecureRandom();
        final KeyGenerator dekGenerator = KeyGenerator.getInstance(DATA_ENCRYPTION_SCHEME.split("/")[0]);
        dekGenerator.init(AESKeyUtils.KEY_LENGTH_IN_BYTES * Byte.SIZE, dekSecureRandom);
        return () -> {
            final BytesReference dekId = new BytesArray(UUIDs.randomBase64UUID(dekIdSecureRandom));
            final SecretKey dek = dekGenerator.generateKey();
            logger.debug("Repository [{}] generated new DEK [{}]", metadata.name(), dekId);
            return new Tuple<>(dekId, dek);
        };
    }

    // pkg-private for tests
    Tuple<String, SecretKey> generateKEK(String dekId) {
        try {
            // we rely on the DEK Id being generated randomly so it can be used as a salt
            final SecretKey kek = AESKeyUtils.generatePasswordBasedKey(repositoryPassword, dekId);
            final String kekId = AESKeyUtils.computeId(kek);
            logger.debug("Repository [{}] computed KEK [{}] for DEK [{}]", metadata.name(), kekId, dekId);
            return new Tuple<>(kekId, kek);
        } catch (GeneralSecurityException e) {
            throw new RepositoryException(metadata.name(), "Failure to generate KEK to wrap the DEK [" + dekId + "]", e);
        }
    }

    /**
     * Called before the shard snapshot and finalize operations, on the data and master nodes. This validates that the repository
     * password on the master node that started the snapshot operation is identical to the repository password on the local node.
     *
     * @param snapshotUserMetadata the snapshot metadata containing the repository password hash to assert
     * @throws RepositoryException if the repository password hash on the local node mismatches the master's
     */
    private void validateLocalRepositorySecret(Map<String, Object> snapshotUserMetadata) throws RepositoryException {
        assert snapshotUserMetadata != null;
        assert snapshotUserMetadata.get(PASSWORD_HASH_USER_METADATA_KEY) instanceof String;
        final String masterRepositoryPasswordId = (String) snapshotUserMetadata.get(PASSWORD_HASH_USER_METADATA_KEY);
        if (false == masterRepositoryPasswordId.equals(validatedLocalRepositoryPasswordHash)) {
            assert snapshotUserMetadata.get(PASSWORD_SALT_USER_METADATA_KEY) instanceof String;
            final String masterRepositoryPasswordIdSalt = (String) snapshotUserMetadata.get(PASSWORD_SALT_USER_METADATA_KEY);
            final String computedRepositoryPasswordId;
            try {
                computedRepositoryPasswordId = AESKeyUtils.computeId(
                    AESKeyUtils.generatePasswordBasedKey(repositoryPassword, masterRepositoryPasswordIdSalt)
                );
            } catch (Exception e) {
                throw new RepositoryException(metadata.name(), "Unexpected fatal internal error", e);
            }
            if (computedRepositoryPasswordId.equals(masterRepositoryPasswordId)) {
                this.validatedLocalRepositoryPasswordHash = computedRepositoryPasswordId;
            } else {
                throw new RepositoryException(
                    metadata.name(),
                    "Repository password mismatch. The local node's repository password, from the keystore setting ["
                        + EncryptedRepositoryPlugin.ENCRYPTION_PASSWORD_SETTING.getConcreteSettingForNamespace(
                            EncryptedRepositoryPlugin.PASSWORD_NAME_SETTING.get(metadata.settings())
                        ).getKey()
                        + "], is different compared to the elected master node's which started the snapshot operation"
                );
            }
        }
    }

    @Override
    public boolean hasAtomicOverwrites() {
        return delegatedRepository.hasAtomicOverwrites();
    }

    // pkg-private for tests
    class EncryptedBlobStore implements BlobStore {
        private final BlobStore delegatedBlobStore;
        private final BlobPath delegatedBasePath;
        private final String repositoryName;
        private final Function<String, Tuple<String, SecretKey>> getKEKforDEK;
        private final Cache<String, SecretKey> dekCache;
        private final CheckedSupplier<SingleUseKey, IOException> singleUseDEKSupplier;

        EncryptedBlobStore(
            BlobStore delegatedBlobStore,
            BlobPath delegatedBasePath,
            String repositoryName,
            Function<String, Tuple<String, SecretKey>> getKEKforDEK,
            Supplier<Tuple<BytesReference, SecretKey>> dekGenerator,
            Cache<String, SecretKey> dekCache
        ) {
            this.delegatedBlobStore = delegatedBlobStore;
            this.delegatedBasePath = delegatedBasePath;
            this.repositoryName = repositoryName;
            this.getKEKforDEK = getKEKforDEK;
            this.dekCache = dekCache;
            this.singleUseDEKSupplier = SingleUseKey.createSingleUseKeySupplier(() -> {
                Tuple<BytesReference, SecretKey> newDEK = dekGenerator.get();
                // store the newly generated DEK before making it available
                storeDEK(newDEK.v1().utf8ToString(), newDEK.v2());
                return newDEK;
            });
        }

        // pkg-private for tests
        SecretKey getDEKById(String dekId) throws IOException {
            try {
                return dekCache.computeIfAbsent(dekId, ignored -> loadDEK(dekId));
            } catch (ExecutionException e) {
                // some exception types are to be expected
                if (e.getCause() instanceof IOException) {
                    throw (IOException) e.getCause();
                } else if (e.getCause() instanceof ElasticsearchException) {
                    throw (ElasticsearchException) e.getCause();
                } else {
                    throw new RepositoryException(repositoryName, "Unexpected exception retrieving DEK [" + dekId + "]", e);
                }
            }
        }

        private SecretKey loadDEK(String dekId) throws IOException {
            final BlobPath dekBlobPath = delegatedBasePath.add(DEK_ROOT_CONTAINER).add(dekId);
            logger.debug("Repository [{}] loading wrapped DEK [{}] from blob path {}", repositoryName, dekId, dekBlobPath);
            final BlobContainer dekBlobContainer = delegatedBlobStore.blobContainer(dekBlobPath);
            final Tuple<String, SecretKey> kekTuple = getKEKforDEK.apply(dekId);
            final String kekId = kekTuple.v1();
            final SecretKey kek = kekTuple.v2();
            logger.trace("Repository [{}] using KEK [{}] to unwrap DEK [{}]", repositoryName, kekId, dekId);
            final byte[] encryptedDEKBytes = new byte[AESKeyUtils.WRAPPED_KEY_LENGTH_IN_BYTES];
            try (InputStream encryptedDEKInputStream = dekBlobContainer.readBlob(kekId)) {
                final int bytesRead = Streams.readFully(encryptedDEKInputStream, encryptedDEKBytes);
                if (bytesRead != AESKeyUtils.WRAPPED_KEY_LENGTH_IN_BYTES) {
                    throw new RepositoryException(
                        repositoryName,
                        "Wrapped DEK [" + dekId + "] has smaller length [" + bytesRead + "] than expected"
                    );
                }
                if (encryptedDEKInputStream.read() != -1) {
                    throw new RepositoryException(repositoryName, "Wrapped DEK [" + dekId + "] is larger than expected");
                }
            } catch (NoSuchFileException e) {
                // do NOT throw IOException when the DEK does not exist, as this is a decryption problem, and IOExceptions
                // can move the repository in the corrupted state
                throw new ElasticsearchException(
                    "Failure to read and decrypt DEK ["
                        + dekId
                        + "] from "
                        + dekBlobContainer.path()
                        + ". Most likely the repository password is incorrect, where previous "
                        + "snapshots have used a different password.",
                    e
                );
            }
            logger.trace("Repository [{}] successfully read DEK [{}] from path {} {}", repositoryName, dekId, dekBlobPath, kekId);
            try {
                final SecretKey dek = AESKeyUtils.unwrap(kek, encryptedDEKBytes);
                logger.debug("Repository [{}] successfully loaded DEK [{}] from path {} {}", repositoryName, dekId, dekBlobPath, kekId);
                return dek;
            } catch (GeneralSecurityException e) {
                throw new RepositoryException(
                    repositoryName,
                    "Failure to AES unwrap the DEK ["
                        + dekId
                        + "]. "
                        + "Most likely the encryption metadata in the repository has been corrupted",
                    e
                );
            }
        }

        // pkg-private for tests
        void storeDEK(String dekId, SecretKey dek) throws IOException {
            final BlobPath dekBlobPath = delegatedBasePath.add(DEK_ROOT_CONTAINER).add(dekId);
            logger.debug("Repository [{}] storing wrapped DEK [{}] under blob path {}", repositoryName, dekId, dekBlobPath);
            final BlobContainer dekBlobContainer = delegatedBlobStore.blobContainer(dekBlobPath);
            final Tuple<String, SecretKey> kek = getKEKforDEK.apply(dekId);
            logger.trace("Repository [{}] using KEK [{}] to wrap DEK [{}]", repositoryName, kek.v1(), dekId);
            final byte[] encryptedDEKBytes;
            try {
                encryptedDEKBytes = AESKeyUtils.wrap(kek.v2(), dek);
                if (encryptedDEKBytes.length != AESKeyUtils.WRAPPED_KEY_LENGTH_IN_BYTES) {
                    throw new RepositoryException(
                        repositoryName,
                        "Wrapped DEK [" + dekId + "] has unexpected length [" + encryptedDEKBytes.length + "]"
                    );
                }
            } catch (GeneralSecurityException e) {
                // throw unchecked ElasticsearchException; IOExceptions are interpreted differently and can move the repository in the
                // corrupted state
                throw new RepositoryException(repositoryName, "Failure to AES wrap the DEK [" + dekId + "]", e);
            }
            logger.trace("Repository [{}] successfully wrapped DEK [{}]", repositoryName, dekId);
            dekBlobContainer.writeBlobAtomic(kek.v1(), new BytesArray(encryptedDEKBytes), true);
            logger.debug("Repository [{}] successfully stored DEK [{}] under path {} {}", repositoryName, dekId, dekBlobPath, kek.v1());
        }

        @Override
        public BlobContainer blobContainer(BlobPath path) {
            BlobPath delegatedBlobContainerPath = delegatedBasePath;
            for (String s : path.parts()) {
                delegatedBlobContainerPath = delegatedBlobContainerPath.add(s);
            }
            final BlobContainer delegatedBlobContainer = delegatedBlobStore.blobContainer(delegatedBlobContainerPath);
            return new EncryptedBlobContainer(path, repositoryName, delegatedBlobContainer, singleUseDEKSupplier, this::getDEKById);
        }

        @Override
        public void close() {
            // do NOT close delegatedBlobStore; it will be closed when the inner delegatedRepository is closed
        }
    }

    private final class EncryptedBlobContainer extends AbstractBlobContainer {
        private final String repositoryName;
        private final BlobContainer delegatedBlobContainer;
        // supplier for the DEK used for encryption (snapshot)
        private final CheckedSupplier<SingleUseKey, IOException> singleUseDEKSupplier;
        // retrieves the DEK required for decryption (restore)
        private final CheckedFunction<String, SecretKey, IOException> getDEKById;

        EncryptedBlobContainer(
            BlobPath path, // this path contains the {@code EncryptedRepository#basePath} which, importantly, is empty
            String repositoryName,
            BlobContainer delegatedBlobContainer,
            CheckedSupplier<SingleUseKey, IOException> singleUseDEKSupplier,
            CheckedFunction<String, SecretKey, IOException> getDEKById
        ) {
            super(path);
            this.repositoryName = repositoryName;
            final String rootPathElement = path.parts().isEmpty() ? null : path.parts().get(0);
            if (DEK_ROOT_CONTAINER.equals(rootPathElement)) {
                throw new RepositoryException(repositoryName, "Cannot descend into the DEK blob container " + path);
            }
            this.delegatedBlobContainer = delegatedBlobContainer;
            this.singleUseDEKSupplier = singleUseDEKSupplier;
            this.getDEKById = getDEKById;
        }

        @Override
        public boolean blobExists(String blobName) throws IOException {
            return delegatedBlobContainer.blobExists(blobName);
        }

        /**
         * Returns a new {@link InputStream} for the given {@code blobName} that can be used to read the contents of the blob.
         * The returned {@code InputStream} transparently handles the decryption of the blob contents, by first working out
         * the blob name of the associated DEK id, reading and decrypting the DEK (given the repository password, unless the DEK is
         * already cached because it had been used for other blobs before), and lastly reading and decrypting the data blob,
         * in a streaming fashion, by employing the {@link DecryptionPacketsInputStream}.
         * The {@code DecryptionPacketsInputStream} does not return un-authenticated data.
         *
         * @param   blobName The name of the blob to get an {@link InputStream} for.
         */
        @Override
        public InputStream readBlob(String blobName) throws IOException {
            // This MIGHT require two concurrent readBlob connections if the DEK is not already in the cache and if the encrypted blob
            // is large enough so that the underlying network library keeps the connection open after reading the prepended DEK ID.
            // Arguably this is a problem only under lab conditions, when the storage service is saturated only by the first read
            // connection of the pair, so that the second read connection (for the DEK) can not be fulfilled.
            // In this case the second connection will time-out which will trigger the closing of the first one, therefore
            // allowing other pair connections to complete.
            // In this situation the restore process should slowly make headway, albeit under read-timeout exceptions
            final InputStream encryptedDataInputStream = delegatedBlobContainer.readBlob(blobName);
            try {
                // read the DEK Id (fixed length) which is prepended to the encrypted blob
                final byte[] dekIdBytes = new byte[DEK_ID_LENGTH];
                final int bytesRead = Streams.readFully(encryptedDataInputStream, dekIdBytes);
                if (bytesRead != DEK_ID_LENGTH) {
                    throw new RepositoryException(repositoryName, "The encrypted blob [" + blobName + "] is too small [" + bytesRead + "]");
                }
                final String dekId = new String(dekIdBytes, StandardCharsets.UTF_8);
                // might open a connection to read and decrypt the DEK, but most likely it will be served from cache
                final SecretKey dek = getDEKById.apply(dekId);
                // read and decrypt the rest of the blob
                return new DecryptionPacketsInputStream(encryptedDataInputStream, dek, PACKET_LENGTH_IN_BYTES);
            } catch (Exception e) {
                try {
                    encryptedDataInputStream.close();
                } catch (IOException closeEx) {
                    e.addSuppressed(closeEx);
                }
                throw e;
            }
        }

        @Override
        public InputStream readBlob(String blobName, long position, long length) throws IOException {
            throw new UnsupportedOperationException("Not yet implemented");
        }

        /**
         * Reads the blob content from the input stream and writes it to the container in a new blob with the given name.
         * If {@code failIfAlreadyExists} is {@code true} and a blob with the same name already exists, the write operation will fail;
         * otherwise, if {@code failIfAlreadyExists} is {@code false} the blob is overwritten.
         * The contents are encrypted in a streaming fashion. The DEK (encryption key) is randomly generated and reused for encrypting
         * subsequent blobs such that the same IV is not reused together with the same key.
         * The DEK encryption key is separately stored in a different blob, which is encrypted with the repository key.
         *
         * @param   blobName
         *          The name of the blob to write the contents of the input stream to.
         * @param   inputStream
         *          The input stream from which to retrieve the bytes to write to the blob.
         * @param   blobSize
         *          The size of the blob to be written, in bytes. The actual number of bytes written to the storage service is larger
         *          because of encryption and authentication overhead. It is implementation dependent whether this value is used
         *          in writing the blob to the repository.
         * @param   failIfAlreadyExists
         *          whether to throw a FileAlreadyExistsException if the given blob already exists
         */
        @Override
        public void writeBlob(String blobName, InputStream inputStream, long blobSize, boolean failIfAlreadyExists) throws IOException {
            // reuse, but possibly generate and store a new DEK
            final SingleUseKey singleUseNonceAndDEK = singleUseDEKSupplier.get();
            final BytesReference dekIdBytes = getDEKBytes(singleUseNonceAndDEK);
            final long encryptedBlobSize = getEncryptedBlobByteLength(blobSize);
            // make sure we do not close this stream here, it is closed by the caller
            try (InputStream encryptedInputStream = encryptedInput(Streams.noCloseStream(inputStream), singleUseNonceAndDEK, dekIdBytes)) {
                delegatedBlobContainer.writeBlob(blobName, encryptedInputStream, encryptedBlobSize, failIfAlreadyExists);
            }
        }

        @Override
        public void writeBlob(String blobName, BytesReference bytes, boolean failIfAlreadyExists) throws IOException {
            // reuse, but possibly generate and store a new DEK
            final SingleUseKey singleUseNonceAndDEK = singleUseDEKSupplier.get();
            final BytesReference dekIdBytes = getDEKBytes(singleUseNonceAndDEK);
            try (
                ReleasableBytesStreamOutput tmp = new ReleasableBytesStreamOutput(
                    Math.toIntExact(getEncryptedBlobByteLength(bytes.length())),
                    bigArrays
                )
            ) {
                try (InputStream encryptedInputStream = encryptedInput(bytes.streamInput(), singleUseNonceAndDEK, dekIdBytes)) {
                    org.elasticsearch.core.internal.io.Streams.copy(encryptedInputStream, tmp, false);
                }
                delegatedBlobContainer.writeBlob(blobName, tmp.bytes(), failIfAlreadyExists);
            }
        }

        @Override
        public void writeBlob(
            String blobName,
            boolean failIfAlreadyExists,
            boolean atomic,
            CheckedConsumer<OutputStream, IOException> writer
        ) throws IOException {
            // TODO: this is just a stop-gap solution for until we have an encrypted output stream wrapper
            try (ReleasableBytesStreamOutput out = new ReleasableBytesStreamOutput(bigArrays)) {
                writer.accept(out);
                if (atomic) {
                    writeBlobAtomic(blobName, out.bytes(), failIfAlreadyExists);
                } else {
                    writeBlob(blobName, out.bytes(), failIfAlreadyExists);
                }
            }
        }

        private ChainingInputStream encryptedInput(InputStream inputStream, SingleUseKey singleUseNonceAndDEK, BytesReference dekIdBytes)
            throws IOException {
            return ChainingInputStream.chain(
                dekIdBytes.streamInput(),
                new EncryptionPacketsInputStream(
                    inputStream,
                    singleUseNonceAndDEK.getKey(),
                    singleUseNonceAndDEK.getNonce(),
                    PACKET_LENGTH_IN_BYTES
                )
            );
        }

        private BytesReference getDEKBytes(SingleUseKey singleUseNonceAndDEK) {
            final BytesReference dekIdBytes = singleUseNonceAndDEK.getKeyId();
            if (dekIdBytes.length() != DEK_ID_LENGTH) {
                throw new RepositoryException(
                    repositoryName,
                    "Unexpected fatal internal error",
                    new IllegalStateException("Unexpected DEK Id length [" + dekIdBytes.length() + "]")
                );
            }
            return dekIdBytes;
        }

        @Override
        public void writeBlobAtomic(String blobName, BytesReference bytes, boolean failIfAlreadyExists) throws IOException {
            // the encrypted repository does not offer an alternative implementation for atomic writes
            // fallback to regular write
            writeBlob(blobName, bytes, failIfAlreadyExists);
        }

        @Override
        public DeleteResult delete() throws IOException {
            return delegatedBlobContainer.delete();
        }

        @Override
        public void deleteBlobsIgnoringIfNotExists(Iterator<String> blobNames) throws IOException {
            delegatedBlobContainer.deleteBlobsIgnoringIfNotExists(blobNames);
        }

        @Override
        public Map<String, BlobMetadata> listBlobs() throws IOException {
            return delegatedBlobContainer.listBlobs();
        }

        @Override
        public Map<String, BlobMetadata> listBlobsByPrefix(String blobNamePrefix) throws IOException {
            return delegatedBlobContainer.listBlobsByPrefix(blobNamePrefix);
        }

        @Override
        public Map<String, BlobContainer> children() throws IOException {
            final Map<String, BlobContainer> childEncryptedBlobContainers = delegatedBlobContainer.children();
            final Map<String, BlobContainer> resultBuilder = new HashMap<>(childEncryptedBlobContainers.size());
            for (Map.Entry<String, BlobContainer> childBlobContainer : childEncryptedBlobContainers.entrySet()) {
                if (childBlobContainer.getKey().equals(DEK_ROOT_CONTAINER) && path().parts().isEmpty()) {
                    // do not descend into the DEK blob container
                    continue;
                }
                // get an encrypted blob container for each child
                // Note that the encryption metadata blob container might be missing
                resultBuilder.put(
                    childBlobContainer.getKey(),
                    new EncryptedBlobContainer(
                        path().add(childBlobContainer.getKey()),
                        repositoryName,
                        childBlobContainer.getValue(),
                        singleUseDEKSupplier,
                        getDEKById
                    )
                );
            }
            return Map.copyOf(resultBuilder);
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
China's Progress and Growing Role in Sustainable Development
March 1, 2021 | By Marisa Lim, 2021 Spring Intern; Zixiang (George) Zhou, Associate; and Alexis Fang, 2020 Summer Intern, Bridge Consulting
Since its official commitment in 2015, China has taken monumental efforts to ensure the realization of the 2030 Sustainable Development Agenda, especially in poverty alleviation, health and education. Chinese philanthropy towards domestic projects has also increased over the years.
Through its international development efforts, China has also explored projects in poverty alleviation, health, agriculture and climate change, though philanthropy towards international projects has remained largely stagnant and limited.
In addition, China has initiated two major international development projects: South-South Cooperation (SSC) and Belt and Road Initiative (BRI), which involve multilateral and bilateral cooperation respectively. Weighing their pros and cons, China should explore more multilateral projects than bilateral ones to have greater impact on international sustainable development.
September 2015 marked a significant moment in the history of human development; the 2030 Sustainable Development Agenda was signed by all UN Member States at the 70th Session of the United Nations (UN) General Assembly. The Agenda covers 17 sustainable development goals (SDGs) for the world, a universal call to action to ensure that all people enjoy peace and prosperity by 2030. Since its official commitment in 2015, China has taken monumental efforts to ensure the realization of the 2030 Sustainable Development Agenda. China's progress in sustainable development has spurred it on to take up international development projects to share its experience as well.
At the recent World Economic Forum Virtual Event of the Davos Agenda on Jan 25, 2021, Chinese President Xi Jinping gave a speech on multilateralism, in which he emphasized the importance of multilateral institutions and mentioned that China's plans for the 2030 Agenda for Sustainable Development will "uphold multilateralism".
Since 2015, China has embarked on both multilateral and bilateral international development projects, while its bilateral projects have more shortcomings and draw more criticism. Despite President Xi's reassurance, do China's international development projects still live up to Xi's commitment to multilateralism?
China's monumental domestic progress in sustainable development
China has taken great efforts to work towards the 17 SDGs domestically, with notable progress in SDG1 (No Poverty), SDG3 (Good Health & Well-being), and SDG4 (Quality Education).
Poverty alleviation. In 1978, more than 700 million people lived below the poverty line (100 CNY per year), but now, only 43 million people live on under 2300 CNY (constant 2010) per year (fig. S8E). Poverty incidence in rural China has dropped sharply from 97.5% in 1978 to 4.5% in 2016 (national line 2010). By the end of 2018, the number of poor people in rural China had been greatly reduced to 16.6 million from 55.75 million in 2015. Meanwhile, incidence of poverty, representing the percentage of population who are under the poverty line, had also decreased to 1.7% from 5.7%.
Public health. By the end of 2019, over 97% Chinese were covered by China's basic medical insurance, insuring more than 1.35 billion people, and maternal and neonatal mortality ratios have further declined, meeting the respective SDG targets ahead of time. Meanwhile, the national essential medicine list has been further expanded to 685 from 520, providing access to a wider selection of essential medicines for the insured, exceeding the number of essential medicines listed by the WHO.
Quality education. Within four decades, China is now the world's largest education system after the number of tertiary students surged sixfold from just 7.4 million in 2000 to nearly 45 million in 2018, while the country's tertiary gross enrollment rate (GER) spiked from 7.6 percent to 50 percent.
Source: CGTN
Philanthropy towards domestic projects. As a group largely independent of the Chinese government, Chinese philanthropy has grown eminently, with charitable giving growing 20% year-on-year, and is contributing to China's effort to meet SDGs. According to a report supported by the Rockefeller Foundation, the total amount of charitable giving in China had quadrupled between 2009 and 2018, amounting to US$23.4 billion. Four goals received the most attention from Chinese foundations: SDG4 (Quality Education), SDG1 (No Poverty), SDG11(Sustainable Cities and Communities) and SDG3 (Good Health and Wellbeing). Environment-related goals received the least investment, though that stands to change in the near term given the increased attention on this issue on both the national and international level.
China's growing international role in sustainable development
China's monumental domestic progress in sustainable development has enriched it with the knowledge and expertise that could benefit other developing nations. As the largest developing country, China has the potential to play a key role in ensuring sustainable development not only domestically, but also internationally. A beneficiary from such international development projects not too long ago, in recent years, China has also begun exploring offshore development projects to fulfil Goal 17, Partnerships for the Goals. Since 1950, China has been increasing its involvement in international development assistance projects, with a focus on Asia and Africa. China joined the South-South Cooperation (SSC) and initiated the Belt and Road Initiative (BRI), both of which aim to help developing nations develop and achieve the SDGs in the process.
Sources: BRI, FAO, OECD, UNICEF
Founded by the UN, SSC is a multilateral cooperation that involves different stakeholders in their projects through public-private partnerships. On the other hand, BRI is China's own initiative to provide a two-way channel for Chinese investors to explore development projects in countries of interest, realizing itself through bilateral cooperation between the Chinese and local government. China has embarked on many international development projects that contribute to sustainable development in host countries.
Poverty alleviation. Having jointly founded the International Poverty Reduction Center in China (IPRCC) with the United Nations Development Programme (UNDP) and other international organizations in 2005, China launched the East Asia Poverty Reduction Cooperation Pilot Project in Laos, Myanmar and Cambodia. For each project, China contributed to infrastructure development, supporting rural industries, and improved environmental protection, and impacted over 12,000 people across six villages.
Global health. The multilateral China-UK Global Health Support Program empowered China to play a greater and more effective international role in global health, and explored possible collaborations between the UK Department for International Development and China. Another bilateral project between China and Comoros to combat malaria led to a 98-percent drop in malaria cases, from over 100,000 to 1,300 a year, leveraging upon China's own exemplary malaria reduction efforts.
Sustainable agriculture. The China-FAO South-South agricultural cooperation program actively involved China as the provider of capital and technology, while allowing host countries, such as Mongolia and Uganda, to proactively provide supportive conditions and consider setting up a unilateral trust fund in FAO, through which they can also financially contribute to the cost of project implementation.
Climate change. China has contributed to the construction of a few renewable energy power plants under BRI, including the Karot Hydropower Plant, Suki Kinari Hydropower Project and Dawood Wind Power Project in Pakistan. In Argentina, the state-funded Exim Bank of China financed 85 percent of the $400-million cost for South America's largest solar farm.
Philanthropy towards international projects. Philanthropic donations to international projects from China remain largely uncommon, let alone to international development projects. In this area, the Jack Ma Foundation is an exception in Chinese philanthropy and has made philanthropic contributions worldwide, helping recipient countries on SDG1 (Poverty Alleviation), SDG4 (Quality Education), SDG5 (Gender Equality), and environment-related goals (SDG12-15).
Multilateralism or bilateralism: China's challenges in international development
While China has made much progress in domestic projects, its international efforts have been confronted with challenges due to the complex nature of its projects. Specifically, China's bilateral projects have drawn significant criticism from the international community.
I. Bilateralism: The Controversy about BRI
Despite being one of the most ambitious infrastructure projects ever conceived, China's BRI has drawn much criticism from analysts internationally. However, while China has expressed an interest in promoting sustainable development through BRI, the geopolitical and economic motivations are obvious, creating problems for its BRI projects.
Debt vulnerability. Many BRI projects are financed with low-interest loans, which could be financially harmful to countries that take large loans to fund infrastructure upgrades. Overall debt from BRI-recipient countries to China has grown since 2013, surpassing 20% of GDP in some countries.
Lack of transparency. Many have pointed out that the bidding process of various BRI investments have not been completely transparent. Some BRI projects also requires the use of Chinese contractors who have been accused of inflating costs.
Bicultural disputes. As many BRI projects are spearheaded by Chinese firms, the stark contrast between the Chinese culture and that of many BRI-recipient countries is the crux of many disputes under BRI. Africa-China projects have faced language and cultural barriers that often lead to misunderstand and ignorance of local regulations.
Questionable motivations. Despite its commitment to sustainable development, China has supplied 70% of the financing for the world's new coal-fired plants under BRI. Its projects have also involved largescale pollution and ecological damage.
II. Multilateralism: The Way Forward?
In contrast to the bilateral model of BRI, SSC is a multilateral platform that combines the expertise of various nations under the umbrella of the UN. China plays a vital role in the SSC, not only through monetary contributions, but also through the sharing of its expertise in various areas of development. Specifically, trilateral cooperation has proven successful in many Chinese projects.
Equal partnership. To minimize disputes, trilateral cooperation projects can ensure that donor and recipient countries are equal partners under the leadership of a non-governmental organization.
Better expertise. Involving more experienced aid agencies and countries can help the Chinese aid sector climb the learning curve, as China's lack of mature systems for managing overseas assistance in many areas limits its repertoire of activities to infrastructure and construction.
Funds management. Multi-stakeholder partnerships under the lead of an international aid organization will ensure transparency in project financing and motivations.
International standards for sustainability. International organizations will ensure the upholding of international standard and policies by participating donor countries when conducting projects in recipient nations.
Despite its vast benefits, the multilateral system is rather complex and fragmented itself, with overlapping mandates and coordination problems. It is common for a multilateral organization's project progress to be slow and resources to be wasted; multi-stakeholder coordination is not always straightforward. All multilateral organizations have shortcomings and room for improvement.
While it may not be the perfect solution, multilateral cooperation provides a better alternative to bilateral cooperation for international sustainable development aid. In China's case, since its own international projects often draw much criticism from the international community, the involvement of a third-party stakeholder in these bilateral projects can help to ensure transparency in many areas, neutralizing skeptics.
China has made exemplary progress in achieving its SDGs. However, in its global partnerships for sustainable development, China is still confronted with the challenge of navigating the rough waters of foreign aid politics. But as Xi has emphasized, multilateralism trumps bilateralism and unilateralism in creating greater impact, and will be the way forward for the international community in achieving sustainable development.
Marisa Lim
Marisa Lim is a Singapore-based aspiring trailblazer majoring in Biomedical Engineering with a specialization in Robotics, passionate about global health and social causes. Find Marisa on LinkedIn.
Zixiang (George) Zhou
Zixiang (George) Zhou is an experienced international relations and development professional who has worked in Washington DC, Nairobi, and Beijing. Find George on LinkedIn.
Alexis Fang
Alexis Fang is a Final Year student majoring in Business Management and Marketing Research. She was an intern for Bridge in Summer 2020. Find Alexis on LinkedIn.


MANILA, Philippines (UPDATED) – Cloie Syquia Skarne, the half-sister of actress KC Concepcion, is Sweden's representative to the Miss Earth pageant in October.
Cloie was crowned Miss Earth Sweden on Sunday, August 28 (Monday, August 29 in Manila), during the Miss Universe Sweden competition. Makeup artist Au Mauricio, who was at the event, posted a photo of Cloie's winning moment.
"Our [Cloie Syquia] is Miss Earth Sweden!!! She'll be competing globally in October. Congratulations Cloie!!!" Au said.
Our @cloiesyquia is Miss Earth Sweden!!! She'll be competing globally in October Congratulations Cloie!!!
Au also posted a photo and video of Cloie during the competition.
On Instagram, Cloie thanked everyone for supporting her journey in the pageant.
"I'm MISS EARTH SWEDEN 2016! Thank you to those who have supported me and believed in me. I would not have been who I am today without you," she said.
KC posted a short message for her sister on Twitter.
"Her childhood dream has finally come true! Congratulations to my sister [Cloie Syquia Skarne] = MISS EARTH Sweden!"
Her childhood dream has finally come true! Congratulations to my sister @CloieSyquiaS = MISS EARTH Sweden!
Meanwhile, Ida Ovmar was crowned as Miss Universe Sweden, according to a post by the Miss Universe Sweden pageant host and Miss Earth Sweden 2014 Frida Fornander.


I am sure as buyers and sellers all agents say they will be in your corner when you work with them. I am certainly one of them! However, I thought I would share some information that substantiates my claims!
Last week I was examining some market data in the MLS (multiple listing service) in one of my longest served geographic markets and stumbled upon some amazing statistics. If you exclude the one builder in the data who buys and sells his own homes (obviously) Wheatland Realty ranked #1 for negotiating the highest list price to sold price ratios for my sellers and the lowest ratios for my buyers.
Wheatland Realty, We are the Cure for the Common Agent!
If you are thinking of buying or selling call us! We are happy to help and will serve you well.
If you know someone facing foreclosure, we can help, there are other options!


text:
New and vital research on infertility has slowed after the pioneering achievements of the 'Founding Fathers of IVF'
More than eight million children have been born around the world as a result of in vitro fertilisation (IVF) since the first so-called test tube baby was delivered in England over 40 years ago.
Scientist Robert Edwards and gynaecologist Patrick Steptoe – the pioneering "Fathers of IVF" – took ten years of intensive research, trial and error before Louise Brown was born in Manchester on 25 July 1978.
Since that amazing breakthrough, assisted reproductive technology has advanced to the extent that today about 75 per cent of couples turning to IVF do ultimately achieve their dream having a baby through one or more cycles of treatment.
IVF, and associated male infertility factor technologies such as Intracytoplasmic Sperm Injection (ICSI) – where a singe sperm is injected into an egg to achieve fertilisation – have brought the joys of parenthood to many of the estimated one in six couples who have failed to achieve conception or a live birth after a year of unprotected intercourse.
But despite the fact that the world is now widely populated with IVF offspring, about 25 per cent of couples experiencing infertility will not be able to have a baby as a result of assisted conception.
A global congress on human infertility in Hong Kong today reflected on the achievements of Robert Edwards and Patrick Steptoe and the teams of pioneers who followed them in research and clinical practice to advance assisted reproductive technology.
But an Australian fertility specialist, and one of the globally recognised pathfinders of IVF, questioned why about 25 per cent of hopeful couples and individuals still fail to have the babies they so desire.
Professor John Yovich, who delivered Western Australia's first IVF baby – being the second State in Australia to achieve success – is a speaker at the 9th Congress of the Asia Pacific Initiative on Reproduction (ASPIRE 2019) at the Hong Kong Convention and Exhibition Centre.
"As we reflect on Louise Brown's 40th birthday, it is appropriate to look back at the ground-breaking and innovative teams in the field of reproductive medicine, nine of whom generated live births in the four years following Louise Brown, and a further three soon after leading to the explosive establishment of successful teams in 1983," he said.
"This time frame defines those IVF pioneers who relied essentially on their own resources and ideas to bring about the world's first IVF-generated children.
"They were followed by other teams that were largely reliant on training and experience from these innovative pioneers.
"Collectively, they broke the back of infertility to achieve success in up to 75 per cent of cases, particularly younger patients.
"But, in my view, the necessary quest for knowledge through further research in this field has slowed.
"As IVF units proliferate around the world, the research necessary to address the problems of the 25 per cent of patients who fail to conceive after assisted reproductive technology is somewhat on the backburner."
Professor Yovich said the trend for couples to delay parenthood until after their peak fertility years because of work or lifestyle choices was a contributing factor to the failure to conceive even after repeated IVF cycles.
He said nutritional factors such as necessary vitamin levels, and pre-occupation with body image to the detriment of natural health and well-being were also likely to be involved in infertility.
"We need to know more by exploring new research dynamics. For example, what makes eggs so fragile in older women and what is causing the decline in male fertility around the world?"
Professor Yovich, who is Adjunct Clinical Professor, School of Biomedical Sciences in the Faculty of Health Sciences at Curtin University in Western Australia, said Australia had led the way with single embryo transfers in IVF to avoid multiple birth rates and the consequent health complications for mothers and offspring.
"The huge majority of IVF units in Australia voluntarily practice single embryo transfer," he said. "Latest data shows that between 2006 and 2016 the multiple birth rate following IVF in Australia plummeted from 14 per cent to four per cent.
"Impressively, this occurred as live birth rates increased from 22 per cent in 2012 to 26 per cent in 2016.
"Furthermore, latest data in Australia shows that stored frozen embryos thawed for transfer achieve an implantation rate twice that of fresh embryos, and there is a big story to tell in this regard, particularly in the benefits of quality management systems.
"In other parts of the world, IVF units are transferring multiple embryos in IVF, sometimes up to five embryos in older women in the hope of conception, and this is resulting in undesirable multiple birth rates."
The ASPIRE Congress at the Hong Kong Convention and Exhibition Centre has attracted about 1,700 delegates – including scientists, clinicians, embryologists, nurses and IVF counsellors – from 50 countries to participate in a dynamic program that will help guide all future aspects of fertility preservation and assisted conception around the world.
For further information, go to the Congress website www.aspire2019.com
To arrange an interview with Professor John Yovich, please contact Trevor Gill, ASPIRE 2019 Congress Media Relations, on 0418 821948 or e-mail at lighthousepr@adelaide.on.net