text:
Facebook-f Youtube Tiktok Telegram
Local Trending
Readers' Contributions
About Us – Sure Boh Singapore
Our WhatsApp
Diner found half a cockroach in tofu after taking a bite, stall owner said it's supplier's issue
By Soon Xue Ling
A man found some black spots on the inside of a piece of braised tofu which his daughter had just taken a bite from and decided to "peel" it open to check. To his horror, he discovered half of a dead cockroach which unsurprisingly disgust his whole family.
The incident, reported by Shin Min Daily News, detailed how a man known as Mr Zhang, 60, who brought his family of four for dinner turned into a "memorable" dinner.
According to the report, the man and his family visited Bukit Panjang Hawker Centre at about 5pm on Sunday (1 Jan), and ordered a few side dishes from a soup stall, which included braised tofu.
Mr Zhang told the newspaper that when his daughter took a bite of the braised tofu, he realised something was wrong.
"I saw black spots in it, so I quickly told her not to eat it, and then I looked carefully at it, and it turned out that there was half a dead cockroach in the braised tofu!"
Daughter suspected to have swallowed the other half of the cockroach
Mr Zhang said that he suspected that his daughter had swallowed the other half of the cockroach. She later felt queasy and went to the toilet to try to vomit out the other half, but to no avail.
"She is usually afraid of seeing cockroaches, let alone eating cockroaches," he added.
According to the photo provided by Mr Zhang, half of the cockroach was inside the braised tofu, and the tail, feet, and a small part of the body of the cockroach could still be seen after digging out. Affected by the incident, the mood of Mr Zhang's family soured, and they reportedly went home without finishing their dinner.
"We may not eat braised tofu anymore for the rest of the year," said Mr Zhang.
Mr Zhang said that when he reported his discovery to the stall owner, not only did the stall owner not reply, the stall owner just said that it was a problem with the braised tofu supplier.
An employee of the stall apologised
An employee who is working at the stall said that he felt sorry for the customer and also added that he would ask the boss to report the problem to the supplier.
A reporter who visited the stall that night found an employee closing the stall. He said he heard a colleague discussing the matter with a customer when he was in the kitchen, and mentioning a supplier problem.
The employee said that the braised tofu is delivered to them by a factory that processes the food, which is then sent to them by the supplier. He also expressed his apologies for the incident and said that he will bring the matter up with the stall owner, who will contact the supplier.
Sure Boh?
If you'd like to contribute your story to us, drop us an email at [email protected] and we'll review it. We read each submission that comes to us within two weeks of receiving it.
PrevPreviousRecap: 5 Top News of 2022 you should not have missed!
NextAll Singaporean households to get $300 CDC vouchers on 3 January, usable at 5 supermarket chainsNext
26-year-old masseuse to pay boss $50,000 to "buy back time"
Here's the tea. Ms Li, a 26-year-old masseuse working in Tampines had to "buy back time" by paying her boss S$50,000 to take more leave
Ex-offender Yeo Yun Luo says that companies and society must be more accepting of ex-offenders
At the same time, Mr Yeo also encourages ex-offenders to take a step back and look at what one is good at and areas where
88-year-old ah ma allegedly loses $700 to woman who offered her help to keep her belongings
An 88-year-old ah ma was on her way home from shopping when she met a very "kind and helpful" woman who offered to help her
Police investigating 8 youths after viral video shows teen beaten up at Serangoon fitness corner
Eight teenagers aged between 11 and 14 are under investigation over a rioting incident that took place at a fitness corner in Serangoon. The incident
© 2015-2023 SocialGround Pte Ltd


text:
Studio: Paramount Pictures
Etusivu » Paramount Pictures
Julkaistu: March 14, 2022
Ryder and the pups are called to Adventure City to stop Mayor Humdinger from turning the bustling metropolis into a state of chaos.
Daddy's Home 2
Julkaistu: December 2, 2021
In the sequel to the 2015 hit comedy, father and stepfather Dusty and Brad decide to join forces to give their children the perfect Christmas. However, their newly made agreement is put to the test when Dusty's macho father from the old alliance and Brad's über-emotional softie (John Lithgow) arrive for the guests just in time to make the family's Christmas party a whirlwind. Directed by Sean Anders. As actors, e.g. Will Ferrell, Mark Wahlberg and Mel Gibson.
No Country For Old Man
Julkaistu: July 26, 2021
Llewelyn Moss stumbles upon dead bodies, $2 million and a hoard of heroin in a Texas desert, but methodical killer Anton Chigurh comes looking for it, with local sheriff Ed Tom Bell hot on his trail. The roles of prey and predator blur as the violent pursuit of money and justice collide.
Julkaistu: February 15, 2019
An Inconvenient Truth is a documentary about one man's attempt to expose the myths and misconceptions associated with global warming and awaken the nations of the world to act together to save our planet. The film is based on Al Gore's lectures. Gore is a great performer and the lecture is delivered in such a way that the viewer's interest is not piqued even for a moment. The subject of the film is serious and gives you something to think about for a long time. The film has been awarded two Oscars in 2007 (Best Original Score and Best Documentary Film). The film was directed by Davis Guggenheim.
An Inconvenient Sequel: Truth to Power
The former vice president of the United States and Nobel laureate Al Gore still want to make heads of state and leaders understand the importance of climate change. The documentary follows Al Gore to the conclusion of the Paris climate agreement in late 2015. Directed by Bonni Cohen and Jon Shenk.
Hugo is a magical story about an orphan boy who lives his own little mysterious life in a Paris train station. He has a slightly peculiar girl to help him and together they search for the answer to a mysterious problem involving his recently deceased father, the evil toy shop owner who lives downstairs and a heart-shaped lock with a missing key. Directed by Martin Scorsese. In roles e.g. Asa Butterfield, Chloë Grace Moretz and Christopher Lee.
Rocketman tells the inspiring story of Elton John's breakthrough years, when shy piano virtuoso Reginald Dwight becomes an international superstar. The film depicts Sir Elton John's stages from childhood to the beginning of the 90s. Genius child developed into a music superstar, whose life was overshadowed by difficult relationships with his parents, low self-esteem, uncertainty about his own sexuality, various addictions and bulimia. The brutality of the music industry and the difficulty of loving also come to the fore in relation to the manager boyfriend.

redpajama_set_name: RedPajamaCommonCrawl


Watch Political & Current Affair Show Khara Sach With Mubashir Luqman 20th November 2015 On Channel 24.
Kahara Sach is the most popular show hosted by Mubasher Lucman, It is on aired at Channel 24 which is among the most viewed TV channel across Pakistan. This is the live show where number of political and non-political personalities of Pakistan are invited in order to discuss the series issues and current affair situation of Pakistan internally and from across the border. As Pakistan has been facing series political and governing crises with some other issues, the Khara Sach becomes the platform with diverse opinion intellectuals and individual to find out the solution of the situations. Mubashir Lucman is the popular and senior journalist, anchor person, news reporter and analyst in Pakistan with years of journalism experience. He has also work with the various top electronic media groups across Pakistan.
Mubashir Lucman who is known for the cross and straight question journalism brings the fact and figures to the people of Pakistan in order to reveal the truth and the real circumstances. City 24 is the channel, which aims to provide true journalism, information, news and guidance to the people across Pakistan. Channel 24 is also available live online streaming at urduwire.com in high quality.
dear luqman salamatAasman saakin zameen chupp ke dekhan panama case se kia delivery hoti hai.kraption ka bacha to pate se bahir latak raha hai. Adaalat ka ahtram ham par wajib magar aisa lagta hai ke adalat main tashreef farma munsfon ko haqeeqat samjane ke liay aasman se wahi darkar hai ghaunsala jall raha hai aur wo khud bhi issi ghaunsle main tapp rahi hain. qayamat hai ke un ko shacch dikhai nai de rahaa. yaqeenan un ko adalat ki shan aur aan ko sirbuland karne ke lai apne paron ka sadqa de ker hi iss ghaunsle ko bachana hoga. dalail to kohe hamalia ki terha aankhon per jadoo ker rahay hain.old man near to death.
kaash! pakistan ka koi naabaligh bachah hi achanik chilla uthey ke badshah nanga hai. dear mubashar luqman islami jamhooria pk ke munsafon ko Syedena hazrat Umar (ra) ka wo faisla jissey kanoon ki kali kitabon ke musanif bhool rahey jiss ke mutabiq jazia jamaa kerne waale se tahaif yeh keh ker batalmal main jamaa ker liey gai ke tum iss mansab per na hote tu phir bhi wo log tumehain ye tahaif ataa kerte? agr sharif khandan pakista ke hukmran na hotey tu Qatri jangliun se ya tahaif milte taa keh ye sharif london ke flats khreed sakain? kia shreefon ka ye farz nahin tha k wo tahaif pakistan ke malkhane main jama kraatey? uss haar ki tarha ju gilani se wapis liyaa giya tha?kia Qatri letter ke mutabi yeh loge khianat ke mutakib nahi paiy gaiy? kia 62 63 ki zadd main nain aate Islami jajjs kia soch rahey hain''''Jis noor se saara jahan jagmaga uthaa magar muflis ki kutia main ab tak kiyoon andhare machaa huwa hai ?shareefon ke kham-o- pache ko zamane ki aankh pehchanti nahi hai''''hadaf se begana teer us ka nazar na ho jis ki aarifana? Khuda jane naadan bachah kab ye shore machaiy gaa jiss se sab ki aankhain khul jain. Dear mubashar agr ye mali khaulia pasand na aai to tum khud he kisi programm main ye khari baat ker dena taa keh yeh nukta khuda wandane adaalat tak paunch jai. thanks for the nation.
dear Luqman salamat.. Election comition ka kaam vote shumaar karna hota hai aur adalat ka kaam ghalatt aur sahi main farq karna na ke voton ka dhair dekhna ke kis tarf hai ye hargiz nahi ke wo ye kahay ke glass main pashab tu zroor gira hai magr vote to asif ke gandgi nikaal kar bhi ziada hi hain.agr che us ne hifze maa tqaddam ke paishe nazr ye dhandhly ki thi ya kerwai thi. jajj ka kamm haq aur sach main farq wazeh karna hota hai.chori aik ki ho ya lakh ki 62 63 kia kehta hai? jhooton par Allah ki laanat.aur un ki hamyat kaisi hai? mera kisi parti se taalluq nahi albatta pakistan ko wajood main aate zarur dekha tha-Hai Allah ne aise insaf ke liay ye jahan banaya tha.Iqbal says mataai deen-o-danish lut gai Allah walon ki. ye kis kafir adaa ka ghamza-e-khun raze hai saqi.
Kudos to you for the program on the commercialisation of Ramadan (Ramzan ki Dukan"). Somebody has to bring attention to this vulgar commercialisation of the sacred and serene month! Hope PEMRA will heed to this and issue some guidelines or warnings. In this same line I wish attention can also be drawn to the shows which advocate the blatant spreading and encouragement of astrology numerology cards telling your future (taro) and even parrots predicting the future outcome of sport fixtures. This is plainly "bid''''at" and goes against teachings of Islam. I would greatly appreciate your attention to this increasing "folly" by some TV channels who are further driving our masses towards illiteracy and "Gunnah".
Dear Mubashir Luqman Sahb The person name "John Doe" mentioned by you for supplying Panama Papers info is not a real name. It is used frequently in police reports where an unknown person is involved until real name is found after investigations. As the above fact is of critical nature it is better to clarify in your program.
Plz brother Jhelum Ku croption ki news k leey contact kerain i m imran shakeel from jurnalist.recently 40 kroor ki TMA Jhelum maen croption ki gai h.jis maen antycroption thana bi in k sath mila how''s h.cplz contact me.
Kharra Sach is among the most popular Talk shows in Pakistan and can be named as the most ranked show of the channel.
Kharra Sach is a great show and full credit should be given to its host Mubashir Luqman as due to his efforts the show is highly ranked.
Kharra Sach is a nice show but we just can not compete that show with the most popular talk shows which might be due to the fact that its host is not a good enough one always going in favor of either side.
Currently Kharra Sach can be seen as the most dominated Talk Show because of his all time experienced host Mubashir Luqman and the willingness of the officials of the show to be on point.
A show like Kharra Sach is a delight for the viewers to have as the show completely works to expose both sides of the picture.
Kharra Sach is such a good show always trying to expose the current stability of our politics and society giving a clear image to viewers.
Kharra sach can not be counted among the best talk shows of Pakistan as the host of the show is a biased one always criticizing the government and rarely says anything about PTI.
The show khabardaar owns a nice theme but i think the show requires a change of anchor as Mubashir Luqman is too much aggressive and can also be considered as a biased host.
Khara Sach is a distinctive talk show of Pakistan where truth is revealed fearlessly by the most bold host Mubashir Luqman...I see that show as the best production of the channel.
The show Khara Sach targets public interest as it is hosted by such a unique and bold host Mubashir Luqman who might be the reason due to which i watch that show.
Mubashir Luqman is a good host conducting a show Kharra Sach but sometimes i just see him as a biased anchor using aggressive language for the respectable representatives of Pakistan.
Mubashir Luqman is the most bold and fearless anchor of the current era and i just want to appreciate his services for us in the shows like Khara Sach.
Kharra Sach with Mubashir Luqman is a joy to watch as most of the quarries of locals are removed in the show and also he tries his best to speak in the favor of its viewers.
We should speak khara sach in any case. People of Pakistan needs truth spoken personalities for its progress.
The most unfeared anchor and journalist of Pakistan use to host the show Kharra Sach so there is no doubt in the fact that it is more than best as compared with other Talk shows of Pakistan.
Kharra Such is a great show and an effective way for a newly born channel 24 to make itself famed. The show is hosted by the most obedient journalist and hopefully he will continue his unbiased work in the future.
KharaSach on the 24 news channel is a great talk show I like these types of talk show KharaSach is hosted by Mubashir Luqman he is a great anchor in the media industry of Pakistan I also appreciate him with his great work in media industry.
I like the current affair show khara sach please announce the date of starting this new khara such with mubasir luqman.
I watch the promo of New talk show khara sach with mubbasir luqman in channel 24 its good news he will provide latest information about croup t leaders.
What is the date of starting show Khara Sach With Mubashir Lucman in channel 24 also confirm this tv channel is not on air our cable kindly provide channel 24 detail then we will able to says our cable operator about this tv channel open.
Its good news Mubasher Lucman again start show khara such I hope this tv channel also hit due to Mubasher Lucman show.
I enjoyed the Khabarnak very much. Good effort by Aftab iqbal.
The host the show anchorperson Mubashir Luqman is acter less men he is not a good men government should completly ban to Mubashir Luqman.
AOA! Mubashir Luqman sb I have read a book of Saudian princess about Royal family. I can send you it''''s reference. Inna lillah e waa Inna allaihe raajeoon.
Excellent programme nice to c u back on live tv. Shame to Govt. for not doing anything about this basic necessity.


text:
How Floomby works
Terms of Service (User Agreement)
The User Agreement governs the relations between the project Floomby which is comprised of the website (hereinafter to be referred to as the Site) and the program for Windows (hereinafter to be referred to as the Program) on the one hand and the individual (hereinafter to be referred to as the User) on the other hand who wants to upload and share Screenshots (hereinafter to be referred to as the Images or Screenshots), or use the Site or Program in any other way.
By taking the advantage of uploading images or using the Site or the Program in any other way, the User agrees to follow all the terms of the given User Agreement and comply with them, otherwise stops using the Site.
Floomby gives the possibility to the User to take screenshots, upload them to the Site and share with other Users for free. Uploading is carried out by saving the Image in a shared database of the Site and displaying the Image to the User who has a direct link to the Image. The usage of the Site and the program is governed by the given User Agreement.
The User agrees that the Image which is uploaded by him/her to the Site will be available for other Users directly on the Site via a shareable link. The User agrees that the Image uploaded by him/her to the Site will be available for printing for all Users who have access to the Image.
All rights to the Images uploaded on the Site are considered to belong to the Users who upload the Images for as long until there are any reasons to consider otherwise. The Users of the Site do not get any rights to use the Images of other Users outside the opportunities provided by the Site and the Program and are fully responsible to the author for unlawful use of the Images.
The User himself/herself bears responsibility to the third parties for his/her actions associated with uploading and sharing the Images on the Site, and also for that the content of the Image corresponds to the requirements of the legislation and does not violate the rights and legitimate interests of the third parties. The Image as a whole and each of its elements must not violate the rights for copyright, trademark, means of identification and/or rights for other intellectual property matters belonging to the third parties. If the main object of the Image is a person, the User is responsible for ensuring the consent of the person for uploading his/her Image to the Site. The User himself/herself and at his/her own expense agrees to settle all complaints of the third parties related to the designing and uploading of the Images on the Site.
Floomby has the right to refuse uploading of the Image to the Site or remove the Image from the Site without giving a notice or reason to the User at any time. In particular, the grounds for refusal to upload or remove the Image subsequently from the Site are:
Usage of the objects, the intellectual property rights for which belong to the third parties;
uploading of the Images, the main object of which is the person or the personal information, in case the person objects to the uploading of his/her Image on the Site;
Uploading of the Images of a pornographic character;
Floomby is not responsible for the use (both lawful and unlawful) of the uploaded Image by the third parties including the reproduction and distribution of the Image in any possible ways.
The services of Floomby Project are provided 'as is'. Floomby does not guarantee the correspondence of the Site and the Program to the objectives and expectations of the Site User, uninterrupted and error-free operation, and safety of the Images uploaded by the Users to the Site and the information which characterizes them. Floomby does not reimburse any losses or damages, direct or indirect, caused to the User or third parties by the use of or inability to use the Site or the Program.
All complaints arising from the use / inability to use the Images on the Site and Program should be sent to one of our contacts.
At any time without a notice to the User Floomby can update the text of the given User Agreement and/or any other terms and conditions of the Site usage. The actual text of this User Agreement is given here: http://Floomby.com/tos.
The program can be uninstalled as follows: Start > Programs > Floomby > Uninstall
Download Floomby
Floomby Chrome Extension
How to take a screenshot FAQ Terms of Service Privacy Contacts
Floomby


text:
Skeens tops Gazette's all-area girls hoops squad
Southeastern's Ella Skeens has been named the 2016-17 Gazette Player of the Year.
Skeens tops Gazette's all-area girls hoops squad Southeastern's Ella Skeens has been named the 2016-17 Gazette Player of the Year. Check out this story on chillicothegazette.com: http://ohne.ws/2ouZdYm
Derrick Webb, Reporter Published 12:12 p.m. ET March 28, 2017
Southeastern's drives to the bucket against Jackson in a regular season contest. Skeens is the Gazette's 2016-17 Player of the Year.(Photo: Gazette file image)Buy Photo
CHILLICOTHE – Monday, the Gazette announced its 2016-17 all-area boys basketball team.
Tuesday belongs to the girls.
While both Chillicothe and Southeastern reached district championship contests this season, no area team was a pushover at any point in the year.
Altogether, six of the nine teams won more than 10 games before beating up on each other during tournament play.
With a young nucleus of talent, take a look at your 2016-17 all-Gazette girls basketball team.
Player of the Year: Ella Skeens, Southeastern
For a third straight season, Skeens was phenomenal. The junior do-it-all player never wavered atop the scoring columns and led the Panthers to a second straight SVC title, a first ever gold ball and a 23-2 overall mark. Skeens was the SVC Player of the Year, the AP's Southeast District Player of the Year and a first-team all-Ohioan. She ended the season with averages of 22.2 points, 7.6 rebounds and 2.6 assists per contest.
Point guard: Emily Coleman, Unioto
Just a freshman, Coleman lived up to the hype surrounding her each night. The 5-foot-6 floor general ran the Shermans' offense smoothly and handled the ball well. She dished out 65 assists while scoring 197 points and bringing down 49 rebounds. Defensively, Coleman was also effective as she pieced together an average of 2.3 steals per outing. Her future will only get brighter and her ceiling is sky high.
Shooting guard: Braiden Collins, Huntington
Huntington's Braiden Collins scores against West Union at Paint Valley High School this past winter. Collins is a Gazette first-team all-area selection. (Photo: Gazette file image)
Having possibly the most rapid ascent to stardom in quite some time, Collins showed up and showed out during her sophomore year of play. The young guard guided her Huntsmen to a 15-8 mark and finished second in the area — behind Skeens — in scoring with 21.8 points per game. Collins was a first-team all-district player and an honorable mention all-Ohio selection.
Small forward: Lexi Woods, Paint Valley
Each year, Woods continues to get better and each year, she's overlooked. After notching her 1,000th career point as a junior, Woods went on a tirade of high-scoring, high-performance outbursts. She ended the year with averages of 18.4 points, 10.2 rebounds and 2.3 assists per contest. Woods was a first-team all-district player and an honorable mention all-Ohio recipient.
Power forward: Kara Blanton, Piketon
Even through injury, Blanton pieced together a magnificent senior year. When they needed an answer, the Redstreaks called upon their leader and Blanton habitually answered. She led the area in rebounds per game (14.2) and added 14.4 points per outing to the mix as well. She ends her career in Piketon with an overall record of 62-32.
Center: Osh Brown, Chillicothe
The only Division I basketball commit in the area yet again failed to disappoint. After practically dragging the rest of her teammates to a district final, Brown ended the year with averages of 13.6 points, 10.6 rebounds and 3.3 assists per game. The future Ball State University Cardinal was first-team all-SCOL, the AP's Southeast District Co-Player of the Year and a first-team all-Ohioan.
Honorable Mention Honorees
Avery Reuter (Piketon), Morgan Arledge (Zane Trace), Shawnee Smith (Chillicothe), Jocie Fisher (Unioto), Alexis Putnam (Adena)
dwebb@chillicothegazette.com
Twitter: @dw1509
Local AAU team wins big tournament
Cutright wins national volleyball championship
Five Paints named Prospect League all-stars
Q&A with Southeastern's Dalton Thurston
Eisel hits for the cycle, leads Paints to win
Cole Andrews continuing school season success


Ahh summer, is there really a better time to pack your bags and embark on that long awaited European adventure?
Summer is one of the most popular and most pleasant times to visit the cities of Europe. As the sun shines and the temperatures rise, these old world beauties come alive!
The best way to taking in the sights, sounds and smells is on foot; and, nothing ruins a day of travel more than sore and aching feet.
Whether you're browsing a museum, navigating the cobblestones, or simply making your way to the beach, the last thing you want to be thinking about is how much your feet hurt.
To help you make the most of your trip, we've rounded up the options to keep you and your feet feeling great. Here are the best shoes, flats and sandals to slip, slide and strap into to guarantee a summer of style AND comfort.
If you're looking for a casual, comfortable walking sneaker that looks good with pants, skirts, dresses, rompers, then look no further: converse sneakers are the choice for you!
These iconic shoes are perfect for a day of exploring, offering ample support on cobblestone streets. The breathable fabric makes them a great choice for hot climates, but also offers enough protection to avoid chilly feet on those cooler night or if you find yourself battling colder temperatures.
Converse sneakers are a great choice for anyone looking to express a little bit of flare with their footwear. These classics come in myriad of styles, colours and patterns, so you're bound to find the perfect shoe just for you!
Good for hot or cool climates.
Look great with pants, skirts, dresses, you name it!
Birkenstock sandals are the ideal travel shoe, once you've broken them in. I will be honest, those first few wears aren't the most comfortable, but the more you wear them the more the cork moulds to your foot, ensuring the proper support where you need it.
The thick cork sole makes navigating any terrain – from cobblestones to rocky paths to sand – a breeze; you'll feel perfectly supported in your Birkenstocks, no matter what the activity.
Although some shoppers might be turned off by the hefty price tag, Birkenstocks are worth it! Take my word for it, I've been rocking my black Gizeh sandals for years, and I don't plan on retiring them anytime soon.
Birkenstocks come in myriad of style, materials, colours and patterns, perfect for expressing yourself though your feet.
Perfect for walking in town, strolling on the beach, or riding bikes.
Range of colours, styles, patterns.
Hear me out on this one! I know Crocs are not the most attractive shoe, but Crocs flats must be considered in a category of their own.
When I bought mine two years ago I was mortified; I couldn't believe I was actually going to become one of *those* people. But after testing them out on the streets and hills of Porto, Portugal, I was a changed woman.
Crocs Ballet Flats offer all the same cushioning as the originals, just in a nicer packaging. They mould to your feet, cushioning and supporting your soles where you need them.
Plus, they are the easiest shoes to clean. No need to pick up a new pair if your feet get a little wet, sticky or sweaty, simply run them under the tap and you're good to go!
Espadrilles are one of the most versatile shoes out there.
They're made from natural fibres, so you know your feet will feel fresh no matter where you wander. They come in a variety of styles, colours, patterns and heel heights, so whether your plans include a day in the museum, or spending all night in the club, Espadrilles can take you there.
They are also perfect for packing, as they're lightweight and squish down so they can be tucked into even the smallest nook or cranny in your suitcase or backpack.
Whether you prefer a sandal, flat or wedge style, Espadrilles are the perfect shoes to take you from Milan to Minsk this summer.
Perfect for navigating cobblestone streets, no matter the height of the heel.
Breathable materials for those hot and sticky days.
When choosing the perfect shoe for your overseas summer adventures, style and comfort shouldn't be mutually exclusive. By choosing one of these styles, you'll not only look good but feel great as you explore Europe (and beyond!) this summer.


text:
<!DOCTYPE HTML>

		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<link type="text/css" href="http://www.nomad.so/ddoc/css/theme.css" rel="stylesheet" media="all" />

		<title>tkd.widget.common.data</title>

tkd.widget.common.data

Values module.

License

MIT. See LICENSE for full details.

template Data()

These are common commands that apply to all widgets that have them injected.

string[] getData();

Get the data values of the widget.

Return Value

An array of data values.

auto setData(this T)(string[] values);

Set data values of the widget.

Parameters

string[] values
The data values.

Return Value

This widget to aid method chaining.

redpajama_set_name: RedPajamaGithub


text:
World Prison Brief
World Prison Brief (WPB) is a unique database that provides free access to information about prison systems throughout the world. Country information is updated on a monthly basis, using data largely derived from governmental or other official sources. The WPB also presents 'highest to lowest' country lists, enabling country-by-country and regional comparisons to be made of prison population rates and totals, occupancy rates, and proportions of pre-trial/remand prisoners, female prisoners and foreign prisoners. WPB data are regularly relied on by monitoring bodies and regional standards agencies, national governments, journalists, civil society organisations, economists, academics and social researchers. The data are used as indicators of human development and for purposes of international comparison on the use of imprisonment.
World Prison Brief can be accessed here
Helen Fair Roy Walmsley
Walmsley, Roy (2018) World Prison Population List (12th edition). Institute for Criminal Policy Research, London.
Walmsley, Roy (2017) World Female Imprisonment List (4th edition). Institute for Criminal Policy Research, London


text:
Are Chelsea the best in premier league?
Yes Chelsea are a very good and strong team.
chú Chích Chòe Newcastle United
Newcastle United FC Reserves and Academy staff contact
Q: Are Chelsea the best in premier league?
Which player has Won champions league uefa cup premier league and scottish premier league and still plays?
Chelsea are the best in the premier league
What soccer league is Chelsea in?
Chelsea FC is currently in the English Premier League. (as of 2012-2013 season)
Which team in the premier league is the best?
Manchester United!!!!!!! But CHELSEA SUCK!!!!! :P
Are Chelsea football club the best team in the premier league?
Both Manchester United and Chelsea are equally good.
What league does Chelsea play for?
What league is Chelsea in?
Barclays Premier League - England.
Is Chelsea going to win the premier league?
yes Chelsea are going to win the premier league this year because of the recent form they are playing in come on Chelsea!
When did Chelsea last win the league?
Chelsea last won the Premier League in 2010.
What team won the 1st premier league?
Chelsea won the first premier league.
How many premier league titles have Chelsea won?
Chelsea have won three Premier League titles in 2004,2005 and 2010
When did Chelsea win the English premier league?
Chelsea won the English Premier League in 2005, 2006 and 2010. They won the old first division in 1955, the equivalent of the Premier League now.


text:
/*!
 * @file gpmi.c
 * @brief The driver source for the GPMI controller.
 *
 * @ingroup diag_nand
 */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <assert.h>
#include "sdk.h"
#include "gpmi/gpmi.h"
#include "gpmi_internal.h"
#include "registers/regsapbh.h"
#include "registers/regsgpmi.h"
#include "registers/regsbch.h"

////////////////////////////////////////////////////////////////////////////////
// Definitions
////////////////////////////////////////////////////////////////////////////////

//! Controls whether GPMI timing values should be printed to TSS when they are set.
//! Set to 1 to print timings.
#define GPMI_PRINT_TIMINGS 0

#define MAX_DATA_SETUP_CYCLES (BM_GPMI_TIMING0_DATA_SETUP >> BP_GPMI_TIMING0_DATA_SETUP)

#define MAX_DATA_SAMPLE_DELAY_CYCLES            (uint32_t)(BM_GPMI_CTRL1_RDN_DELAY >> BP_GPMI_CTRL1_RDN_DELAY)
#define GPMI_DELAY_SHIFT                        (3)         // Right shift value to get the fractional GPMI time for data delay
#define GPMI_MAX_DLL_PERIOD_NS                  (32)        // Max GPMI clock Period that the GPMI DLL works for
#define GPMI_DLL_HALF_THRESHOLD_PERIOD_NS       (16)        // Threshold for GPMI clock Period that above thise requires a divide by two for the DLL
#define GPMI_WAIT_CYCLES_AFTER_DLL_ENABLE       (64)        // Number of GPMI clock cycles to wait for use of GPMI after DLL enable

#define GPMI_DATA_SETUP_NS                      (0)         // Time in nanoSeconds required for GPMI data read internal setup

#define GPMI_MAX_HARDWARE_DELAY_NS              (uint32_t)(16)        // Time in nanoSeconds required for GPMI data read internal setup

// Max data delay possible for the GPMI.  Use the min
// of the time (16 nS) or what will fit in the register
// If the GPMI clock period is greater than
// GPMI_MAX_DLL_PERIOD_NS then can't use the delay.
#define GPMI_GET_MAX_DELAY_NS(x)                ((x < GPMI_MAX_DLL_PERIOD_NS) ? \
                                                (std::min( GPMI_MAX_HARDWARE_DELAY_NS, ((MAX_DATA_SAMPLE_DELAY_CYCLES * x) / u32GpmiDelayFraction))) : \
                                                0)

//! Frequency in kHz for GPMI_CLK. PMI will do its best to give us
//! this frequency when the PLL is enabled.
// #define GPMI_CLK_PLL_ON_FREQUENCY_kHZ (96000)
//
// //! Frequency to use for GPMI_CLK when the PLL is disabled.
// #define GPMI_CLK_PLL_OFF_FREQUENCY_kHZ (24000)

//! @brief Busy Timeout time in microsec. (10msec)
//!
//! Should only need 100msec (Program/Erase), and reads shouldn't be anywhere near this long..
#define NAND_BUSY_TIMEOUT          (100000)

#define DDI_NAND_HAL_GPMI_SOFT_RESET_LATENCY  (2)

//! @brief Default values for the signal propagation delay.
enum _default_prop_delays
{
    kDefaultMinPropagationDelay = 5,    //!< 5 ns
    kDefaultMaxPropagationDelay = 9     //!< 9 ns
};

//! Timing characteristics that work with every device we've ever known.
#define NAND_SAFESTARTUP_TIMINGS  { 80, 60, 25, 0, 0, 0 }

////////////////////////////////////////////////////////////////////////////////
// Prototypes
////////////////////////////////////////////////////////////////////////////////

void gpmi_init_apbh();
void gpmi_init_dma_channel(int u32ChipNumber);

uint32_t gpmi_init_data_sample_delay(uint32_t u32GpmiPeriod_ns);
void gpmi_set_and_enable_data_sample_delay(uint32_t u32DelayCycles, uint32_t u32GpmiPeriod_ns);

uint32_t gpmi_get_clock_period_ns(void);

void gpmi_set_timing_internal(const GpmiNandTimings_t * theTimings,
                                    uint32_t u32GpmiPeriod_ns,
                                    uint32_t u32PropDelayMin_ns,
                                    uint32_t u32PropDelayMax_ns);

uint32_t gpmi_find_cycles_ceiling(uint64_t u32NandTime_ns, uint32_t u32GpmiPeriod_ns, uint32_t u32MinVal);
uint32_t gpmi_find_cycles_rounded(uint64_t u32NandTime_ns, uint32_t u32GpmiPeriod_ns);

////////////////////////////////////////////////////////////////////////////////
// Variables
////////////////////////////////////////////////////////////////////////////////

//! @brief The current GPMI driver state information.
GpmiState_t g_gpmi;

////////////////////////////////////////////////////////////////////////////////
// Code
////////////////////////////////////////////////////////////////////////////////

#if GPMI_PRINT_TIMINGS

static void _print_dynamic_timing_summary(
    uint32_t u32GpmiPeriod_ns,
    uint32_t u32GpmiDelayFraction,
    uint32_t i32tEYE,
    uint32_t i32DelayTime_ns,
    uint32_t u32GpmiMaxDelay_ns,
    uint32_t u32DataSetupCycles,
    uint32_t u32DataSetup_ns)
{
    printf("  GpmiPeriod = %d ns@n", u32GpmiPeriod_ns);
    printf("  GpmiDelayFraction = %d@n", u32GpmiDelayFraction);
    printf("  tEYE = %d ns@n", i32tEYE);
    printf("  DelayTime = %d ns@n", i32DelayTime_ns);
    printf("  GpmiMaxDelay = %d ns@n", u32GpmiMaxDelay_ns);
    printf("  DataSetupCycles = %d cycles@n", u32DataSetupCycles);
    printf("  DataSetup = %d ns@n", u32DataSetup_ns);

    return;
}
#endif  //GPMI_PRINT_TIMINGS

void gpmi_init_apbh()
{
    // APBH - disable reset, enable clock
    // bring APBH out of reset
    HW_APBH_CTRL0_CLR(BM_APBH_CTRL0_SFTRST);
    // Poll until the SFTRST is truly deasserted.
    while (HW_APBH_CTRL0.B.SFTRST);

    HW_APBH_CTRL0_CLR(BM_APBH_CTRL0_CLKGATE);
    // Poll until the CLKGATE is truly deasserted.
    while (HW_APBH_CTRL0.B.CLKGATE);
}

void gpmi_init_dma_channel(int u32ChipNumber)
{
    reg32_t r32ChipDmaNumber = NAND0_APBH_CH + u32ChipNumber;
    reg32_t chipDmaMask = 1 << r32ChipDmaNumber;

    // Reset dma channel
    HW_APBH_CHANNEL_CTRL_SET(BF_APBH_CHANNEL_CTRL_RESET_CHANNEL(chipDmaMask));

    // Wait for the reset to complete
    while (HW_APBH_CHANNEL_CTRL.B.RESET_CHANNEL & chipDmaMask);

    // Clear IRQ
    HW_APBH_CTRL1_CLR(chipDmaMask);
}

int gpmi_init(uint32_t minDelay, uint32_t maxDelay)
{
    // Set and enable GPMI_CLK before doing anything else.
    gpmi_nand_clk_setup();

    // Can't use NAND if GPMI block is not present
    if (!(HW_GPMI_STAT_RD() & BM_GPMI_STAT_PRESENT))
    {
        return ERROR_DDI_NAND_GPMI_NOT_PRESENT;
    }

    // Init globals.
    gpmi_get_safe_timings(&g_gpmi.currentTimings);

    // Apply default values for propagation delay.
    if (minDelay == 0)
    {
        minDelay = kDefaultMinPropagationDelay;
    }

    if (maxDelay == 0)
    {
        maxDelay = kDefaultMaxPropagationDelay;
    }

    g_gpmi.propDelayMin_ns = minDelay;
    g_gpmi.propDelayMax_ns = maxDelay;

    // Configure GPMI pins.
    gpmi_iomux_config();

    // Init APBH DMA controller.
    gpmi_init_apbh();
    gpmi_init_dma_channel(0);

    // Soft-reset GPMI
    gpmi_soft_reset();

    // Init ECC engine.
    bch_init();

    // Init interrupts. This must be done after APBH, GPMI, and BCH are all ready to roll.
    gpmi_init_interrupts(0);

    // Put GPMI in NAND mode, disable DEVICE reset, and make certain polarity is active high,
    // sample on GPMI clock. We also enable ganged R/B# and DECOUPLE_CS, which allows us to
    // only have to use a single DMA channel.
    HW_GPMI_CTRL1_WR(
        BF_GPMI_CTRL1_DECOUPLE_CS(1) |
        BF_GPMI_CTRL1_GANGED_RDYBUSY(1) |
        BF_GPMI_CTRL1_BCH_MODE(1) |
        BF_GPMI_CTRL1_BURST_EN(1) |
        BF_GPMI_CTRL1_DEV_RESET(BV_GPMI_CTRL1_DEV_RESET__DISABLED) |
        BF_GPMI_CTRL1_ATA_IRQRDY_POLARITY(BV_GPMI_CTRL1_ATA_IRQRDY_POLARITY__ACTIVEHIGH) |
        BF_GPMI_CTRL1_GPMI_MODE(BV_GPMI_CTRL1_GPMI_MODE__NAND));

    // Use the failsafe timings and default 24MHz clock
    gpmi_set_timing_internal(&g_gpmi.currentTimings, 0, g_gpmi.propDelayMin_ns, g_gpmi.propDelayMax_ns);

    // Set the timeout for the wait for ready mode.
    gpmi_set_busy_timeout(NAND_BUSY_TIMEOUT);

    return SUCCESS;
}

////////////////////////////////////////////////////////////////////////////////
//! @brief GPMI Init Data Sample Delay.
//!
//! This function determines the fraction of GPMI period for the data sample
//! delay period per delay count.  The data sample delay period per cycle is a
//! fraction of the GPMI clock.  The fraction amount is a function of chip type
//! and GPMI clock speed.
//!
//! @param[in]  u32GpmiPeriod_ns GPMI Clock Period in nsec.
//!
//! @return Fraction (ie amount to divide by) of the GPMI period for a delay period
////////////////////////////////////////////////////////////////////////////////
uint32_t gpmi_init_data_sample_delay(uint32_t u32GpmiPeriod_ns)
{
    uint32_t retVal = GPMI_DELAY_SHIFT;

    BW_GPMI_CTRL1_DLL_ENABLE(0);                        // Init to a known value
    BW_GPMI_CTRL1_RDN_DELAY(0);                         // Init to a known value

    if (u32GpmiPeriod_ns > GPMI_DLL_HALF_THRESHOLD_PERIOD_NS )
    {
        // the GPMI clock period is high enough that the DLL
        // requires a divide by two
        BW_GPMI_CTRL1_HALF_PERIOD(1);

        // Account for the half period, add 1 to shift (or / by 2)
        retVal++;
    }

    return (1 << retVal);
}

////////////////////////////////////////////////////////////////////////////////
//! @brief GPMI Set And Start Data Sample Delay.
//!
//! This function sets the NAND Timing register which controls the delay
//! in the data read sampling.  It then set the delay hardware to be active
//! (if needed by hardware)
//!
//! @param[in]  u32DelayCycles Delay count to put to register
//!
//! @return None
////////////////////////////////////////////////////////////////////////////////
void gpmi_set_and_enable_data_sample_delay(uint32_t u32DelayCycles, uint32_t u32GpmiPeriod_ns)
{
    // DLL_ENABLE must be set to zero when setting RDN_DELAY or HALF_PERIOD!!!
    BW_GPMI_CTRL1_DLL_ENABLE(0);

    if ((u32DelayCycles == 0) || (u32GpmiPeriod_ns > GPMI_MAX_DLL_PERIOD_NS) )
    {
        // If no delay is desired, or if GPMI clock period is out of supported
        // range, then don't enable the delay

        //BW_GPMI_CTRL1_DLL_ENABLE(0);    // This is already done several lines up
        BW_GPMI_CTRL1_RDN_DELAY(0);
        BW_GPMI_CTRL1_HALF_PERIOD(0);
    }
    else
    {
        // Set the delay and needed registers to run.  GPMI_CTRL1_HALF_PERIOD is
        // assumed to have already been set properly

        uint32_t waitTimeNeeded;

        BW_GPMI_CTRL1_RDN_DELAY(u32DelayCycles);
        BW_GPMI_CTRL1_DLL_ENABLE(1);

        // After the GPMI DLL has been enable it is reqiured to wait for
        // GPMI_WAIT_CYCLES_AFTER_DLL_ENABLE number of GPMI clock cycles before
        // using the GPMI interface.

        // calculate out the wait time and convert from nanoSeconds to microSeconds
        waitTimeNeeded = (u32GpmiPeriod_ns * GPMI_WAIT_CYCLES_AFTER_DLL_ENABLE) / 1000;

        // wait until the required time for DLL hardware startup has passed.
        hal_delay_us(waitTimeNeeded);

    }
}

////////////////////////////////////////////////////////////////////////////////
//! @brief Find NAND Timing.
//!
//! This function determines the NAND Timing parameter which is given in
//! units of GPMI cycles.  The GPMI period is used to determine how many
//! cycles fit into the NAND parameter.
//!
//! @param[in] u32NandTime_ns The quantity in nsec to be converted to units of GPMI cycles.
//! @param[in] u32GpmiPeriod_ns GPMI Clock Period in nsec.
//! @param[in] u32MinValue Minimum value to be returned, if the computed value is less than
//!     this value.
//!
//! @return Number of GPMI cycles required for this time.
////////////////////////////////////////////////////////////////////////////////
uint32_t gpmi_find_cycles_ceiling(uint64_t u32NandTime_ns, uint32_t u32GpmiPeriod_ns, uint32_t u32MinVal)
{
    uint32_t retVal = ((u32NandTime_ns + (u32GpmiPeriod_ns - 1)) / u32GpmiPeriod_ns);
    return std::max(retVal, u32MinVal);
}

////////////////////////////////////////////////////////////////////////////////
//! @brief Find a NAND timing value that is rounded as appropriate.
//!
//! This function determines the NAND Timing parameter which is given in
//! units of GPMI cycles.  The GPMI period is used to determine how many
//! cycles fit into the NAND parameter, rounding up or down as appropriate.
//!
//! @param[in]  u32NandTime_ns      The quantity in nsec to be converted to units of
//!                                 GPMI cycles.
//! @param[in]  u32GpmiPeriod_ns    GPMI Clock Period in nsec.
//!
//! @return Number of GPMI cycles required for this time.
////////////////////////////////////////////////////////////////////////////////
uint32_t gpmi_find_cycles_rounded(uint64_t u32NandTime_ns, uint32_t u32GpmiPeriod_ns)
{
    return (u32NandTime_ns + (u32GpmiPeriod_ns>>1)) / u32GpmiPeriod_ns;
}

uint32_t gpmi_get_clock_period_ns(void)
{
    uint32_t freq_MHz = get_peri_clock(RAWNAND_CLK);
    return 1000000000 / freq_MHz;
}

////////////////////////////////////////////////////////////////////////////////
//! @brief Compute and setup the NAND clocks.
//!
//! This function sets the GPMI NAND timing based upon the desired NAND timings that
//! are passed in. If the GPMI clock period is non-zero it is used in the
//! calculation of the new register values. If zero is passed instead, the
//! current GPMI_CLK frequency is obtained and used to calculate the period
//! in nanoseconds.
//!
//! @param[in] theTimings  Pointer to a nand-timing Structure with Address Setup, Data Setup and Hold, etc.
//!                             This structure must be one of those that contains an eState element,
//!                             so this function can tell how to crack it and process it.
//! @param[in]  u32GpmiPeriod_ns GPMI Clock Period in nsec. May be zero, in
//!                             which case the actual current GPMI_CLK period is used.
//! @param[in] u32PropDelayMin_ns Minimum propagation delay in nanoseconds.
//! @param[in] u32PropDelayMax_ns Maximum propagation delay in nanoseconds.
////////////////////////////////////////////////////////////////////////////////
void gpmi_set_timing_internal(const GpmiNandTimings_t * theTimings,
                                    uint32_t u32GpmiPeriod_ns,
                                    uint32_t u32PropDelayMin_ns,
                                    uint32_t u32PropDelayMax_ns)
{
    uint32_t u32GpmiDelayFraction;
    int32_t u32GpmiMaxDelay_ns;
    uint32_t u32AddressSetupCycles;
    uint32_t u32DataSetupCycles;
    uint32_t u32DataHoldCycles;
    uint32_t u32DataSampleDelayCycles;
    uint32_t u32DataSetup_ns;
    int32_t  i32tEYE;
    int32_t  i32DelayTime_ns;
#if GPMI_PRINT_TIMINGS
    char bPrintInterimTimings = false;
#endif

    assert(theTimings);

    // If u32GpmiPeriod is passed in as 0, we get the current GPMI_CLK frequency
    // and compute the period in ns.
    if (u32GpmiPeriod_ns == 0)
    {
        u32GpmiPeriod_ns = gpmi_get_clock_period_ns();
    }

    u32GpmiDelayFraction = gpmi_init_data_sample_delay(u32GpmiPeriod_ns);

    u32GpmiMaxDelay_ns = GPMI_GET_MAX_DELAY_NS(u32GpmiPeriod_ns);

#if GPMI_PRINT_TIMINGS
    printf("NAND GPMI timings:@n");
#endif

    /* *******************************************************************
        Process the given AddressSetup, DataSetup, and DataHold
        parameters
    ******************************************************************* */

    // The chip hardware quantizes the setup and hold parameters to intervals of
    // the GPMI clock period.
    // Quantize the setup and hold parameters to the next-highest GPMI clock period to
    // make sure we use at least the requested times.
    //
    // For DataSetup and DataHold, the chip interprets a value of zero as the largest
    // amount of delay supported.  This is not what's intended by a zero
    // in the input parameter, so we modify the zero input parameter to
    // the smallest supported value.

    u32AddressSetupCycles = gpmi_find_cycles_ceiling(theTimings->tSU, u32GpmiPeriod_ns, 0);
    u32DataSetupCycles    = gpmi_find_cycles_ceiling(theTimings->tDS, u32GpmiPeriod_ns, 1);
    u32DataHoldCycles     = gpmi_find_cycles_ceiling(theTimings->tDH, u32GpmiPeriod_ns, 1);

//     switch (theTimings->eState)
//     {
//         case e_NAND_Timing_State_STATIC_DSAMPLE_TIME:
//         {
//             // Get delay time and include required chip read setup time
//             i32DelayTime_ns = theTimings->u8DSAMPLE_TIME + GPMI_DATA_SETUP_NS;
//
//             // Extend the Data Setup time as needed to reduce delay time below
//             // the max supported by hardware.  Also keep DataSetup in allowable range
//             while ((i32DelayTime_ns > u32GpmiMaxDelay_ns) && (u32DataSetupCycles  < MAX_DATA_SETUP_CYCLES))
//             {
//                 u32DataSetupCycles++;
//                 i32DelayTime_ns -= u32GpmiPeriod_ns;
//                 if (i32DelayTime_ns < 0)
//                 {
//                     i32DelayTime_ns = 0;
//                 }
//             }
//
//             u32DataSampleDelayCycles = std::min( gpmi_find_cycles_ceiling( (u32GpmiDelayFraction * i32DelayTime_ns), u32GpmiPeriod_ns, 0), MAX_DATA_SAMPLE_DELAY_CYCLES);
//
// #if GPMI_PRINT_TIMINGS
//             printf("(--static--)@n");
// #endif
//             break;
//         } // case e_NAND_Timing_State_STATIC_DSAMPLE_TIME:
//
//         case e_NAND_Timing_State_DYNAMIC_DSAMPLE_TIME:
//         {

            // Compute the times associated with the quantized number of GPMI cycles.
            u32DataSetup_ns = u32GpmiPeriod_ns * u32DataSetupCycles;

            // This accounts for chip specific GPMI read setup time on the data sample
            // circuit.  See 378x datasheet "14.3.4. High-Speed NAND Timing"
            u32PropDelayMax_ns += GPMI_DATA_SETUP_NS;

         /* *******************************************************************
                Compute tEYE, the width of the data eye when reading from the NAND.
            ******************************************************************* */

            // Note that we use the quantized versions of setup and hold, because the chip
            // uses these quantized values, and these timings create the eye.
            //
            // end of the eye = u32PropDelayMin_ns + theTimings->tRHOH + u32DataSetup_ns
            // start of the eye = u32PropDelayMax_ns + theTimings->tREA
            i32tEYE = ( (int)u32PropDelayMin_ns + (int)theTimings->tRHOH + (int)u32DataSetup_ns ) - ( (int)u32PropDelayMax_ns + (int)theTimings->tREA );

            // The eye has to be open.  Constrain tEYE to be greater than zero
            // and the number of DataSetup cycles to fit in the timing register.
            while ( (i32tEYE <= 0) && (u32DataSetupCycles  < MAX_DATA_SETUP_CYCLES) )
            {
                // The eye is not open.  An increase in data-setup time
                // causes a coresponding increase to size of the eye.
                u32DataSetupCycles++;                               // Give an additional DataSetup cycle
                u32DataSetup_ns += u32GpmiPeriod_ns;                // Keep DataSetup time in step with cycles
                i32tEYE += u32GpmiPeriod_ns;                        // And adjust the tEYE accordingly

            } // while ( i32tEYE

         /* *******************************************************************
                Compute the ideal point at which to sample the data
                at the center of tEYE.
            ******************************************************************* */

            // Find the delay to get the center in time-units.
            // Delay for center of the eye = ((end of the eye + start of the eye) / 2) - DataSetup
            // This simplifies to the following:
            i32DelayTime_ns = ( (int)u32PropDelayMax_ns + (int)theTimings->tREA + (int)u32PropDelayMin_ns + (int)theTimings->tRHOH - (int)u32DataSetup_ns ) >> 1;

            // The chip can't accomodate a negative parameter for the sample point.
            if ( i32DelayTime_ns < 0 ) i32DelayTime_ns = 0;

            //  Make sure the required DelayTime does not exceed the max allowed value.
            //  Also make sure the quantized DelayTime (at u32DataSampleDelayCycles) is
            //  within the eye.
            //
            //  Increasing DataSetup decreases the length of DelayTime
            //  required to get to into the eye.  Increasing DataSetup also moves the rear
            //  of the eye back, enlarges the eye (helpful in the case where quantized
            //  DelayTime does not fall inside the initial eye).
            //
            //          ____                   __________________________________________
            //  RDN         \_________________/
            //
            //                                               <----- tEYE ---->
            //                                             /--------------------\                    x
            //  Read Data --------------------------------<                      >-------
            //                                             \--------------------/
            //              ^                 ^                      ^   tEYE/2     ^
            //              |                 |                      |              |
            //              |<---DataSetup--->|<-----DelayTime------>|              |
            //              |                 |                      |              |
            //              |                 |                                     |
            //              |                 |<------quantized DelayTime---------->|
            //              |                 |                                     |
            //

            #if GPMI_PRINT_TIMINGS
            printf("(--dynamic--)(--Start--)@n");
            _print_dynamic_timing_summary(
                u32GpmiPeriod_ns,
                u32GpmiDelayFraction,
                i32tEYE,
                i32DelayTime_ns,
                u32GpmiMaxDelay_ns,
                u32DataSetupCycles,
                u32DataSetup_ns);
            #endif

            // Extend the Data Setup time as needed to reduce delay time below
            // the max allowable value.  Also keep DataSetup in allowable range
            while ((i32DelayTime_ns > u32GpmiMaxDelay_ns) && (u32DataSetupCycles  < MAX_DATA_SETUP_CYCLES))
            {
                #if GPMI_PRINT_TIMINGS
                if ( !bPrintInterimTimings )
                {
                    // Print an explanation once now...
                    printf("(DelayTime > GPMI max %d) and DataSetupCycles < max %d. Adjusting DelayTime.@n",u32GpmiMaxDelay_ns,MAX_DATA_SETUP_CYCLES );
                    // ...and print an interim list of timings afterward.
                    bPrintInterimTimings = true;
                }
                #endif
                u32DataSetupCycles++;                               // Give an additional DataSetup cycle
                u32DataSetup_ns += u32GpmiPeriod_ns;                // Keep DataSetup time in step with cycles
                i32tEYE += u32GpmiPeriod_ns;                        // And adjust the tEYE accordingly
                i32DelayTime_ns -= (u32GpmiPeriod_ns >> 1);         // decrease DelayTime by one half DataSetup cycle worth, to keep in the middle of the eye
                if (i32DelayTime_ns < 0)
                {
                    i32DelayTime_ns = 0;                            // Do not allow DelayTime less than zero
                }
            }

            // The DelayTime parameter is expressed in the chip in units of fractions of GPMI clocks.
            // Convert DelayTime to an integer quantity of fractional GPMI cycles..
            u32DataSampleDelayCycles = std::min( gpmi_find_cycles_ceiling( (u32GpmiDelayFraction * i32DelayTime_ns), u32GpmiPeriod_ns, 0), MAX_DATA_SAMPLE_DELAY_CYCLES);

            #if GPMI_PRINT_TIMINGS
            if ( bPrintInterimTimings )
            {
                _print_dynamic_timing_summary(
                    u32GpmiPeriod_ns,
                    u32GpmiDelayFraction,
                    i32tEYE,
                    i32DelayTime_ns,
                    u32GpmiMaxDelay_ns,
                    u32DataSetupCycles,
                    u32DataSetup_ns);
                bPrintInterimTimings = false;
            }

            #endif
            #define DSAMPLE_IS_NOT_WITHIN_THE_DATA_EYE  ( i32tEYE>>1 < std::abs( (int32_t)((u32DataSampleDelayCycles * u32GpmiPeriod_ns) / u32GpmiDelayFraction) - i32DelayTime_ns ))

            // While the quantized DelayTime is out of the eye reduce the DelayTime or extend
            // the DataSetup to get in the eye.  Do not allow the number of DataSetup cycles to
            // exceed the max supported by hardware.
            while ( DSAMPLE_IS_NOT_WITHIN_THE_DATA_EYE
                    && (u32DataSetupCycles  < MAX_DATA_SETUP_CYCLES) )
            {
                #if GPMI_PRINT_TIMINGS
                if ( !bPrintInterimTimings )
                {
                    // Print an explanation once now.
                    printf("Data sample point not within data eye.  Adjusting.@n" );
                    bPrintInterimTimings = true;
                }
                #endif
                if ( (int32_t)((u32DataSampleDelayCycles * u32GpmiPeriod_ns) / u32GpmiDelayFraction) > i32DelayTime_ns )
                {
                    // If quantized DelayTime is greater than max reach of the eye decrease quantized
                    // DelayTime to get it into the eye or before the eye

                    if (u32DataSampleDelayCycles != 0)
                    {
                        u32DataSampleDelayCycles--;
                    }
                }
                else
                {
                    // If quantized DelayTime is less than min reach of the eye, shift up the sample
                    // point by increasing DataSetup.  This will also open the eye (helping get
                    // quantized DelayTime in the eye)
                    u32DataSetupCycles++;                           // Give an additional DataSetup cycle
                    u32DataSetup_ns += u32GpmiPeriod_ns;            // Keep DataSetup time in step with cycles
                    i32tEYE         += u32GpmiPeriod_ns;            // And adjust the tEYE accordingly
                    i32DelayTime_ns -= (u32GpmiPeriod_ns >> 1);     // decrease DelayTime by one half DataSetup cycle worth, to keep in the middle of the eye
                    i32DelayTime_ns -= u32GpmiPeriod_ns;            // ...and one less period for DelayTime.

                    if ( i32DelayTime_ns < 0 ) i32DelayTime_ns = 0; // keep DelayTime from going negative

                    // Convert time to GPMI cycles and make sure the number of
                    // cycles fit in the coresponding hardware register...
                    u32DataSampleDelayCycles = std::min( gpmi_find_cycles_ceiling( (u32GpmiDelayFraction * i32DelayTime_ns), u32GpmiPeriod_ns, 0), MAX_DATA_SAMPLE_DELAY_CYCLES);
                }

            }   // while ( DSAMPLE_IS_NOT_WITHIN_THE_DATA_EYE )

#if GPMI_PRINT_TIMINGS
            printf("(--Final--)@n");
            _print_dynamic_timing_summary(
                u32GpmiPeriod_ns,
                u32GpmiDelayFraction,
                i32tEYE,
                i32DelayTime_ns,
                u32GpmiMaxDelay_ns,
                u32DataSetupCycles,
                u32DataSetup_ns);
//            hal_delay_us(GPMI_PRINT_DELAY);
#endif

//             break;
//         } //case e_NAND_Timing_State_DYNAMIC_DSAMPLE_TIME:
//
//         default:
// #if GPMI_PRINT_TIMINGS
//             printf("(--unchanged--)@n");
// #endif
//             return;
//     }

#if GPMI_PRINT_TIMINGS
    printf("GPMI (tDS, tDH, tAS, DelayT) = (%d, %d, %d, %d) ns@n",
                    u32GpmiPeriod_ns * u32DataSetupCycles,
                    u32GpmiPeriod_ns * u32DataHoldCycles,
                    u32GpmiPeriod_ns * u32AddressSetupCycles,
                    ((u32GpmiPeriod_ns * u32DataSampleDelayCycles) / u32GpmiDelayFraction) );
//    hal_delay_us(GPMI_PRINT_DELAY);

    printf("(DataSetup, DataHold, AddressSetup, DelayTime) = (%d, %d, %d, %d) Count@n",
                    u32DataSetupCycles,
                    u32DataHoldCycles,
                    u32AddressSetupCycles,
                    u32DataSampleDelayCycles );

//    hal_delay_us(GPMI_PRINT_DELAY);
#endif

    // Set the values in the registers.
    HW_GPMI_TIMING0_WR( BF_GPMI_TIMING0_ADDRESS_SETUP(u32AddressSetupCycles)
                        | BF_GPMI_TIMING0_DATA_SETUP(u32DataSetupCycles)
                        | BF_GPMI_TIMING0_DATA_HOLD(u32DataHoldCycles));

    gpmi_set_and_enable_data_sample_delay(u32DataSampleDelayCycles, u32GpmiPeriod_ns);

    return;
}

void gpmi_set_busy_timeout(uint32_t busyTimeout)
{
    // Get current GPMI_CLK period in nanoseconds.
//     uint32_t u32GpmiPeriod_ns = gpmi_get_clock_period_ns();
//
//     // Convert from microseconds to nanoseconds.
//     uint64_t busyTimeout_ns = busyTimeout * 1000;
//
//     // Divide the number of GPMI_CLK cycles for the timeout by 4096 as the
//     // timeout register expects.
//     uint32_t busyTimeout_gpmiclk = gpmi_find_cycles_ceiling(busyTimeout_ns, u32GpmiPeriod_ns, 0) / 4096;
//
//     // The busy timeout field is only 16 bits, so make sure the desired timeout will fit.
//     if ((busyTimeout_gpmiclk & 0xffff0000) != 0)
//     {
//         // Set the timeout to the maximum value.
//         busyTimeout_gpmiclk = 0xffff;
//     }

    HW_GPMI_TIMING1_WR(BF_GPMI_TIMING1_DEVICE_BUSY_TIMEOUT(0xffff)); //busyTimeout_gpmiclk));
}

void gpmi_disable()
{
    // Gate clocks to GPMI.
    BW_GPMI_CTRL0_CLKGATE(1);

    // Disable BCH as well.
    bch_disable();
}

void gpmi_enable_writes(bool bClearOrSet)
{
    if (bClearOrSet)
    {
        HW_GPMI_CTRL1_SET(BM_GPMI_CTRL1_DEV_RESET);
    }
    else
    {
        HW_GPMI_CTRL1_CLR(BM_GPMI_CTRL1_DEV_RESET);
    }
}

void gpmi_soft_reset(void)
{
    // Reset the GPMI_CTRL0 block.
    // Prepare for soft-reset by making sure that SFTRST is not currently
    // asserted.  Also clear CLKGATE so we can wait for its assertion below.
    HW_GPMI_CTRL0_CLR(BM_GPMI_CTRL0_SFTRST);

    // Wait at least a microsecond for SFTRST to deassert.
    hal_delay_us(DDI_NAND_HAL_GPMI_SOFT_RESET_LATENCY);
    while (HW_GPMI_CTRL0.B.SFTRST);

    // Also clear CLKGATE so we can wait for its assertion below.
    HW_GPMI_CTRL0_CLR(BM_GPMI_CTRL0_CLKGATE);

    // Now soft-reset the hardware.
    HW_GPMI_CTRL0_SET(BM_GPMI_CTRL0_SFTRST);

    // Poll until clock is in the gated state before subsequently
    // clearing soft reset and clock gate.
    while (!HW_GPMI_CTRL0.B.CLKGATE);

    // bring GPMI_CTRL0 out of reset
    HW_GPMI_CTRL0_CLR(BM_GPMI_CTRL0_SFTRST);

    // Wait at least a microsecond for SFTRST to deassert. In actuality, we
    // need to wait 3 GPMI clocks, but this is much easier to implement.
    hal_delay_us(DDI_NAND_HAL_GPMI_SOFT_RESET_LATENCY);
    while (HW_GPMI_CTRL0.B.SFTRST);

    HW_GPMI_CTRL0_CLR(BM_GPMI_CTRL0_CLKGATE);

    // Poll until clock is in the NON-gated state before returning.
    while (HW_GPMI_CTRL0.B.CLKGATE);
}

void gpmi_set_timings(const GpmiNandTimings_t * newTimings)
{
    // Handle a NULL newTimings (means clock-change only, so use old newTimings)
    if (newTimings != NULL)
    {
        // We have a new set of timings at the newTimings parameter.
        // Copy the new timing-table into the static table.
        g_gpmi.currentTimings = *newTimings;
    }

    // Pass 0 for period to use 24MHz default.
    gpmi_set_timing_internal(&g_gpmi.currentTimings, 0, g_gpmi.propDelayMin_ns, g_gpmi.propDelayMax_ns);
}

void gpmi_get_safe_timings(GpmiNandTimings_t * timings)
{
    const GpmiNandTimings_t safeTimings = NAND_SAFESTARTUP_TIMINGS;
    *timings = safeTimings;
}

const GpmiNandTimings_t * gpmi_get_current_timings()
{
    return &g_gpmi.currentTimings;
}

int gpmi_wait_for_dma(uint32_t u32usec, uint32_t chipSelect)
{
    reg32_t     r32ChipDmaNumber = NAND0_APBH_CH; // + chipSelect;
    bool        bTimedOut = FALSE;
    int  rtStatus = SUCCESS;

#if 1 //def RTOS_THREADX
    // Wait for the IRQ to unlock the spinlock.
    int lockResult = spinlock_lock(&g_gpmi.dmaInfo.irqSpinlock, u32usec);

    // Note that, in the RTOS_THREADX case, SEMA.PHORE register can easily be nonzero if the CPU is running fast.
    // (The DMA engine can trigger the ISR at the end of the DMA, before decrementing
    // the SEMA.PHORE count, thus creating a race condition that lets us find a
    // nonzero SEMA.PHORE value here.)
    //
    // Since SEMA.PHORE can still be nonzero, we cannot use it as
    // evidence of timeout.  We have to rely on the RTOS timeout indicator.
    bTimedOut = (lockResult != 0); //( TX_SUCCESS != retCode_tx_semaphore );

#else   // RTOS_THREADX not defined
    // Poll for DMA completion.
    {
        uint64_t u64StartTime;

        // Microsecond read - always read at start of transaction so that if
        // ThreadX times out, that time is included in the overall timeout time.
        u64StartTime = g_gpmi.dmaInfo.uStartDMATime;

        // End of DMA chain will decrement the hardware semaphore.  Poll the hardware semaphore for
        // DMA completion.
        do {
            i32Sema = HW_APBH_CHn_SEMA_RD(r32ChipDmaNumber) & BM_APBH_CHn_SEMA_PHORE;
        } while ((i32Sema != 0) && ( (hw_profile_GetMicroseconds() - u64StartTime) < u32usec));
    }

    // Re-read the hardware semaphore in case a higher-priority thread caused the timeout between semaphore
    // and timeout test.
    i32Sema = HW_APBH_CHn_SEMA_RD(r32ChipDmaNumber) & BM_APBH_CHn_SEMA_PHORE;

    bTimedOut = (0 != i32Sema);

#endif  // ifdef RTOS_THREADX

    //
    // If timeout: return error,
    //       else: return BAR field from last DMA command
    //

    if ( bTimedOut )
    {
        // The DMA has not completed within the alotted time.
        //
        // Clean up.

        //! @todo Since we don't know exactly what caused the timeout, it
        //! could be beneficial to also reset the GPMI block here.
        //! Note, however, that soft-resetting the GPMI block changes
        //! its register settings.  Thus, it would also be necessary to
        //! re-initialize the GPMI settings completely.  Otherwise the
        //! GPMI may not work.

        // abort dma by resetting channel
//         BW_APBH_CHANNEL_CTRL_RESET_CHANNEL(1 << r32ChipDmaNumber);
//
//         // Wait for the reset to complete
//         while ( HW_APBH_CHANNEL_CTRL.B.RESET_CHANNEL & (0x1 << r32ChipDmaNumber) )
//         {
//             ;
//         }
//
//         //
//         // Okay, this is important.
//         // When we read from the NAND using GPMI with ECC,
//         // there will be an ECC interrupt upon completion of the ECC correction.
//         // Thereafter, these actions must happen in sequence:
//         //     1.  ECC status must be read.
//         //     2.  ECC ISR must be reenabled.
//         //     3.  ECC-completion must be cleared, which frees the ECC
//         //         block to process the next data.
//         // The status must be read before the ECC-completion is cleared, or
//         // the next ECC cycle will overwrite the status.  In the case of a
//         // successful DMA and ECC, the code that reads the ECC status
//         // also performs steps 2 and 3.
//         //
//         // Q:  What happens if the DMA times-out for some reason?
//         // A:  Somebody may have to clean-up by using steps 2 and 3.
//         //     That somebody is us.
//         //
//
//         // If there was an ECC-completion expected...
//         if (kNandGpmiDmaWaitMask_Ecc & g_gpmi.dmaInfo.u16DmaWaitMask)
//         {
//             // ...then we have to clear the ECC-completion and the ECC circuit.
//
//             // It is not necessary to reset the BCH block after an "uncorrectable" error.
//             // In fact, due to a 378x chip bug it is not possible to reset the
//             // BCH block after it has been used to transfer data.
//
//             // Clear the ECC-completion.
//             gpmi_clear_ecc_isr_enable( );
//         }

        rtStatus = ERROR_DDI_NAND_GPMI_DMA_TIMEOUT;
    }
    else
    {
        // The DMA descriptor chain was set up with the alternate meaning
        // of the BAR register.  Rather than containing an
        // address at this point, it contains a return-code that indicates whether
        // the "success" or "failure" part of the chain executed last.
        // So, here we get that return code.
        rtStatus = (int)BF_RDn(APBH_CHn_BAR, r32ChipDmaNumber, ADDRESS);
    }

    return rtStatus;
}

int gpmi_run_dma(apbh_dma_t * theDma, unsigned chipSelect, uint16_t waitMask, uint32_t timeout)
{
    uint32_t    physicalCommandAddress;
    reg32_t     r32ChipDmaNumber        = (NAND0_APBH_CH); //+chipSelect);
    reg32_t     r32ChannelMask          = (0x1 << r32ChipDmaNumber);
    bool        bDmaIsRunning;
    int  rtStatus = SUCCESS;

    // Save off the chip that we're watching in the DMA completion structure.
    g_gpmi.dmaInfo.u16CurrentChip = chipSelect;

    // We're using DMA channel 0 for all DMAs.
    g_gpmi.dmaInfo.dmaChannel = 0;

    // Set the criteria for finishing this DMA.
    g_gpmi.dmaInfo.u16DmaWaitMask      = waitMask;

    // Clear the status word used to check the criteria for finishing this DMA.
    g_gpmi.dmaInfo.u16DmaWaitStatus    = kNandGpmiDmaWaitMask_Nothing;

    // Alert me if a DMA chain is currently running!!
    // Note that this checks the SEMA.PHORE register field for the DMA.
    bDmaIsRunning = gpmi_is_dma_active(chipSelect);

    if (bDmaIsRunning)
    {
        rtStatus = ERROR_DDI_NAND_GPMI_DMA_BUSY;

        goto _standardExit;
    }

    // At this point, there should be no DMA running.
    // Sanity-test to make sure the DMA channel IRQ is deasserted.
    // (Note that the optimizing compiler will probably combine the
    // body of this section with the previous section.)
    if ( 0 != (HW_APBH_CTRL1_RD() & (r32ChannelMask << BP_APBH_CTRL1_CH0_CMDCMPLT_IRQ)) )
    {
        rtStatus = ERROR_DDI_NAND_GPMI_DMA_BUSY;

        goto _standardExit;
    }

    // Get the physical address of the DMA chain.
    physicalCommandAddress = (uint32_t)nand_virtual_to_physical(theDma);

    // Flush the data cache. We don't need to invalidate since the hardware is only reading
    // the DMA chain, not writing to it. If the caller set the length to 0, then they don't
    // want us to flush the cache, probably because they just flushed the entire cache already.
//     if (dmaCommandLength > 0)
//     {
//         hw_core_clean_DCache_MVA_BySize((uint32_t)pDmaCmd, dmaCommandLength);
//     }

    // Initialize DMA by setting up NextCMD field
    HW_APBH_CHn_NXTCMDAR_WR(r32ChipDmaNumber, (reg32_t)physicalCommandAddress);

    // Start DMA by incrementing the semaphore.
    BW_APBH_CHn_SEMA_INCREMENT_SEMA(r32ChipDmaNumber, 1);

    // Record the time that I started the transaction
    // Used in the NAND_HAL_Dma_Status function below and the ddi_gpmi_wait_for_dma
    // function above to determine timeouts.
    g_gpmi.dmaInfo.uStartDMATime = time_get_microseconds();

    rtStatus = gpmi_wait_for_dma(timeout, chipSelect);

_standardExit:

    return rtStatus;
}

bool gpmi_is_dma_active(uint32_t chipSelect)
{
    uint32_t    u32Sema;
    reg32_t     r32ChipDmaNumber    = (NAND0_APBH_CH); //+chipSelect);
    uint32_t    u32Run;

    u32Sema = HW_APBH_CHn_SEMA_RD(r32ChipDmaNumber) & BM_APBH_CHn_SEMA_PHORE;

    u32Run = BF_RD(GPMI_CTRL0, RUN);

    // A nonzero value for either of these means a DMA is running.
    return ( u32Sema | u32Run );
}

////////////////////////////////////////////////////////////////////////////////
// End of file
////////////////////////////////////////////////////////////////////////////////
//! @}


text:
Jihadist Kills Almost 50 Regime Fighters Across Syria
BEIRUT - Jihadists have killed almost 50 Syrian regime fighters in 48 hours, a monitor said Saturday, in some of the deadliest attacks on pro-Damascus forces in recent weeks.
Kurdish-led forces in March announced the defeat of the Islamic State group's 'caliphate' in eastern Syria, but the jihadists have retained hideouts there and in other parts of the country as well as the ability to carry out deadly assaults.
Since Thursday, IS jihadists have killed 35 pro-Damascus fighters in regime-held parts of central and eastern Syria, the Syrian Observatory for Human Rights said.
Observatory chief Rami Abdel Rahman described those attacks as producing 'the highest death toll among regime forces since the caliphate was declared defeated' in the eastern village of Baghouz last month.
Meanwhile, regime fighters also came under attack on another front of Syria's grinding eight-year war, the Britain-based monitor added.
On Saturday, jihadists linked to Syria's former Al-Qaeda affiliate attacked loyalist checkpoints and positions on the western edges of the northern city of Aleppo, killing 13 more pro-Assad fighters, it said.
It was the latest death tally in a civil war that has killed more than 370,000 people since starting in 2011 with the brutal repression of anti-government protests.
President Bashar al-Assad has managed to claw back around 60 percent of the country with Russian military backing since 2015, but several regions remain beyond its control.
IS assaults
These include a large swathe of northeastern Syria held by Kurdish-led forces who have been fighting IS with the support of a US-led coalition, as well as the jihadist-held region of Idlib west of Aleppo city.
Regime forces in theory control the vast desert that stretches from the capital Damascus to the Iraqi border, but IS is still present there.
Attacks by the jihadists have killed 27 troops and allied militiamen, including four senior Syrian army officers, in the desert east of Homs province since Thursday, the Observatory said.
The propaganda arm of IS said its fighters carried out the operation.
The Observatory also said IS fighters killed another eight soldiers and militiamen, including two officers, in the eastern province of Deir Ezzor on Thursday night.
That attack targeted a desert village south of the city of Mayadeen on the Euphrates River, upstream from the village of Baghouz where IS made a desperate last stand in March.
IS swept across a large swathe of Syria and Iraq in 2014, declaring a cross-border 'caliphate' in areas it controlled.
At the height of its rule, the extremist group imposed its brutal ideology on millions in territory roughly the size of the United Kingdom.
But after various military operations in both countries, IS lost the last shred of its proto-state on the eastern banks of the Euphrates last month.
The US-led coalition has however warned repeatedly that the jihadists' loss of their last piece of territory does not mean their elimination as a fighting force.
Earlier this month, IS claimed responsibility for a twin attack on April 9 in the northern city of Raqa held by Kurdish-led forces, which the Observatory said killed 13 people, mostly civilians.
Aleppo attack
In the north of Syria, regime forces face another jihadist group.
Syria's former Al-Qaeda affiliate, Hayat Tahrir al-Sham, control the northwestern region of Idlib, which remains beyond regime control.
Idlib is supposed to be protected from a massive regime military offensive by a deal inked in September by government ally Russia and rebel backer Turkey.
But the accord has unwound as HTS took full control of the region in January, and the area has come under increasing bombardment.
The Observatory said Saturday's attack by the HTS-linked Abu Bakr Al-Sadeeq Army on the western edges of Aleppo city came after regime bombardment overnight hit eastern and southeastern parts of the Idlib region.
A planned buffer zone around the region was never fully implemented as jihadists refused to withdraw from it.
On Friday, Assad insisted the main aim of the Idlib deal was to 'eliminate terrorists', after they failed to pull out from the planned demilitarized cordon.
He urged progress on removing 'obstacles' to the stalled deal ahead of talks to be attended by Russia, fellow ally Iran, and Turkey next week in Kazakhstan.
Endless rounds of U.N.-backed peace talks have failed to end Syria's war, and the parallel track backed by Moscow, Tehran and Ankara has gained momentum.


The simplest way to create estimates, bill your clients and manage payments.
All your stuff on-line, secured and backed-up every day.
See pricing and plans Free and easy registration, no long term contract.
FacturationZen is built for small businesses and entrepreneurs, to let them focus on their business instead of fighting with their invoices. FacturationZen is a simple web based software with just what you need and nothing more.
No long term contract, so you are free to leave us when ever you want : you decide if FacturationZen is what you need. If not, simply export all your datas and voilà !
Your data safety is important for us. We're doing anything to avoid any harm to them : everyday full backup, SSL and .


text:
Fr. Z on incorrupt bodies of saints
I am going to swipe a goodly part of Fr. Z's post just because it's so interesting. He begins my answering a question from a reader:
Hi Father, is it important for a saints body to be incorrupt after death? Does it confirm the person was holy and what does it say about the saints whose bodies are not incorrupt? Thanks!
He answers.
Well, the fact that the body of a saint is incorrupt is certainly important, but it is not obligatory for the saint's cause or our veneration. It can, however, be a powerful sign of the sanctity of the person and that they are probably in heaven.
Just as certain gifts and graces are given to people while alive, so too certain gifts are also given after death, even to their earthly bodies. Such is the case with the incorrupt bodies of some saints.
I have in mind the bodies of a couple of saints, St. John Vianney and St. Bernadette Soubirous. The former died in 1859 and the later in 1879. Their bodies are miraculously preserved and seem as if they are asleep.
This is especially the case with St. Bernadette. At the time when her cause for beatification and canonization was being explored, as a necessary part of the process her body was exhumed – in fact several times over the years – so that it could be examined (remember, these causes are like court cases and habeas corpus!) and so that relics could be collected. The ground in which she had been buried was extremely damp and her habit had pretty much rotted away, but she was untouched by corruption except in some patch of skin where salts had concentrated. The links of the rosary she was buried with were entirely gone from rusting and the glass beads were around her. A prominent atheist was asked to do an examination of the body. When he opened her abdomen, he found incorrupt skeleton and organs. He converted to Catholicism. That is, of course, one of the signs of the holiness of saints: they bring about conversions. Bernadette was reclothed in a habit and her body placed on display in the convent church in Nevers. When you compare a photo of her after death and prepared for burial, and a photo her now… well.
The fact of her incorrupt body, inexplicable by science, was considered miraculous and contributed evidence for her cause. However, that, in itself, was not the deciding factor.
In October Bl. John Henry Newman will be canonized. He, too, was buried in very damp ground and, when his grave was opened for examination, it was found that his body was simply gone, eroded away. However, even though they didn't have his body, his cause moved forward.
So, an incorrupt body is a spectacular sign, but it is not the only or decisive factor in the cause of canonization.
Are we facing the death of Darwinism?


Toronto Notes 2017 is global version of Essential Med Notes 2017 which is used only in United State and Canada.
Toronto Notes is a concise and comprehensive medical review revised annually by the University of Toronto student contributors under the guidance of the Faculty of Medicine. This reference text started as a compilation of notes written by and shared among University of Toronto students to study for their medical licensing exams. After 32 years, it has become the most reputable study guide used by medical students across Canada and around the world.


text:
Home Field Vantage
A 50-Yard-Line View of Texas High School Football Shrines
Published: November 1, 2010 at 1:00 pm
Written by Natalie Moore | From the November 2010 issue | Updated: July 24, 2020 | Filed Under: Travel News
Wildcat Field, Wink
"When 1was in junior high, Wink was playing Pecos and the teams got into a big fight. I took out that way. But then my dad said,'Stay put.'Someone called the fire department, which came out and hosed everybody down." -Lillian Horner
Text and photographs excerpted from Home Field, Texas High School Football Stadiums from Alice to Zephyr, by Jeff Wilson
Foreword by Buzz Bissinger; Text compiled by Bobby Hawthorne
As a photographer, I am compelled to document and reserve for posterity both the things that interest me and the things that I feel have an impact on the larger landscape of modern culture. In our society, football is a pursuit that is rife with meaning, both overt and obscure. It is easy to discount the importance of what is, in essence, just a game. To do that, however, is to overlook the cultural significance of sports in general, and football in particular. In the intricacies and eccentricities of human endeavors, rarely is there an undertaking that is truly superficial.
Texas high school football has alternately been presented as a noble pursuit and as the apogee of excess. It has been aggrandized to the point of hyperbole in television, motion pictures, and print. The idea of the football stadium as a house of worship is a shopworn metaphor, but one that lives on because it is close enough to reality to remain eerily and sometimes comically plausible. In truth, each community has its own relationship to the game and to the cultural phenomenon it embodies. That relationship manifests itself in many ways, from the color of the uniforms, to the choice of mascot, right down to the playing surface. The stadium, however, has become a particularly special expression of how a community as a whole feels about the game and, oftentimes, how it feels about itself. It is a specialized architecture, meant for only one purpose. It is a structure that is revered in a way that most will never be. In many ways it is a community gathering place, on a par with the drive-in on Saturday nights or the corner coffee shop. It is a place to congregate, to exchange thoughts and ideas, and, most importantly, to experience a kind of camaraderie unavailable, and possibly even frowned upon, in any other venue.
The promise of an empty football field is an irresistible force for those who understand and revere the game. It represents a blank canvas begging to be painted with the varied sights and sounds of youthful action and enthusiasm. Covering a cross section of social, economic, and geographic criteria, the photographs in this book represent a small but varied sample of stadiums across the state. By surveying the stadiums in winter repose, after the season has run its course and the crowds have filed out, we as viewers are privy to a quieter and more contemplative side of the subject that is seldom revealed to the casual observer. Presenting the home stands of each stadium from the same vantage point on the 50-yard line allows the viewer to see them as equals, regardless of their position in any hierarchy. Looking at these photographs, we can experience these places that hold so much collective memory in a state they were not meant to be seen in: as potential, rather than kinetic, energy. Far removed from their normal state of intense dynamism, they become cultural artifacts to be puzzled over for their quirks and appreciated for their ability to offer us a window into the hearts of those responsible for them.
Any fan, however jaded, would be hard-pressed to stand in the middle of a West Texas football field at dawn and not be moved. The relative innocence of the game in high school keeps the sport grounded in a way that it can never be at the collegiate and professional levels. The banners of butcher paper exhorting players to excel, the colorful images of mascots crafted from plastic cups stuck in chain-link fences, and the grass trampled by hundreds of pairs of cleats tell the story of a season. The meaning of something as basic as one hundred yards and a pair of goalposts can easily be clouded by the introduction of money and the expectation of profits that inevitably follows. But for the time being—as captured in these photographs—it is simple and pure, like a perfect spiral arcing gracefully across the sky.
Falcon Field, Veribest
Mustang Bowl, Sweetwater
Eagle Stadium, Sanderson
"Our stadium was built for flood control and is affectionately known as 'The Pit.' {flooding) doesn't happen very often as we're 'The Cactus Capital of Texas.' Four or five years ago, we had a heavy rain and the newspaper ran a photo of kids swimming back and forth between the 40-yard lines." -Beverly Farley Choate
Eagle Stadium, Leakey
"The stadium was originally built for eight-man football, which used an 80-yard field. When we switched to 11-man, we had to add 20 yards to the field. Now, the bleachers are centered on the 30 to 35 yard line, not the SO." – Martin Martinez
Rabbit Stadium, Atlanta
From the November 2010 issue


To be cognizant of the philosophy and objectives of adult education and of the college, and to use them as guidelines in planning, structuring, and teaching courses.
Be knowledgeable of the philosophy and objectives of the College and adult education, and use them as guidelines in planning, structuring, and teaching each course.
Maintain scheduled class hours and maximize instructional potential of every class.
Use a variety of instructional approaches in every class in order to accommodate different learning styles and levels of functioning.
Use instructional technology when appropriate and available.
Use a variety of strategies and approaches aimed at retaining students and improving their class attendance.
Engage in activities aimed at retaining students.
Maintain an awareness of community services and make appropriate student referrals.
Conduct an intake interview with each student and complete student intake procedures and required documentation.
Develop and implement an individual Educational and Employability Plan (EEP) for off campus students enrolled in the instructor's class site.
Provide assistance and guidance to students to help them understand and maximize their learning, personal and social development.
Promote student transitioning to job training, job placement and future education.
Conduct periodic student learning assessments using approved assessment instruments in accordance with department and regulatory guidelines.
Participate in department efforts aimed at improving programs and services.
Maintain current knowledge of the field of adult education.
Communicate and coordinate with partnering agencies in collaboration with the supervisor.
Maintain student files and records in accordance with department and grant requirements, and submit them regularly and/or by request to the supervisor.
Must be able to provide verbal/visual presentations to students, employees, and the general public.
Frequent contact is made with students, volunteers, and general public in the routine performance of duties and in providing routine departmental services and duties.
Bachelor's degree is required. Experience teaching adults, knowledge of adult education and a degree in education are preferred.


FIT offers over 600 online course sections per year, including two online degree programs. Online courses run asynchronously on the same semester schedule as face-to-face courses. Activities in online courses are the same as in a traditional class: students read course materials, write papers, do research, take exams, and communicate with their instructor and fellow students. Students and faculty use technology as a tool in accomplishing these tasks. Students leverage the wealth of resources available through the Internet to support their learning.
If you opt to take an online course, you will access your course through Blackboard. Online courses are not for everyone, and work best for independent learners who communicate comfortably through reading and writing. You may be expected to participate in online discussions with your class several times per week. Online courses are open to both degree and non-degree students, as well as international students.
Created by the FIT Office of Online Learning.


text:
Christian leaders upset by Indian judge's comments
Madras judge accuses Christian missionaries of conversions and says Christian schools are unsafe for students
ucanews.com reporter, New Delhi
A Madras Christian College professor has been accused of sexually harassing female students. (Photo from Wikimedia Commons)
An Indian judge's comments that Christian missioners indulge in conversions and that Christian schools have become unsafe for students were offensive, say Christian leaders.
Justice S. Vaidyanathan of Madras High Court in the southern state of Tamil Nadu made the observations on Aug. 16 while hearing a case against a Madras Christian College professor who has been accused of sexual harassment by 30 female students.
Professor Samuel Tennyson of the college's zoology department approached the court seeking a direction to quash the finding of the college's internal complaints committee, which found him guilty of sexually harassing students.
The judge refused to quash the college's move to take action against the professor, who faces dismissal if he fails to explain before the college board why that action cannot be taken.
"Before parting with the judgment, this court feels it appropriate to point out that Christian missionaries are always the source of attack in one way or the other and, in the present era, there are several accusations against them for indulging in compulsory conversion of people of other religions into Christianity," Justice Vaidyanathan said.
He added that "there is a general feeling amongst the parents of students, especially female students, that co-educational study in Christian institutions is highly unsafe for the future of their children and, though they impart good education, the preaching of morality will be a million-dollar question."
Christian leaders said the judge's comments were painful but they welcomed the court's decision not to interfere with the decision of the college, which British Protestant missionaries established in 1837.
"The remarks the judge made in the order are highly disappointing," said Father L. Sahayaraj, deputy secretary of the Catholic bishops' forum in Tamil Nadu. The comments could "damage the image of the Church and the reputation of its education intuitions," the priest told ucanews.com.
The National Council of Churches in India, a forum of Protestant and Orthodox churches in India, said the comments were hurtful.
"We are hurt and sorry for such remarks in the order," said general secretary Asir Ebenezer. "Christians work with commitment and diligence. Unfortunately, we are blamed and our places portrayed as unsafe. It really makes us sad."
Catholic nuns deny conversion claims in India
Call for conversion debate in India seen as political ploy
Indian Christians look to Supreme Court for religious freedom
The Tamil Nadu Catholic Bishops' Council in an official statement termed the observations "very unfortunate."
It said conversion or the safety of Christian schools were not the issues before the court. It was one "relating to sexual harassment by a professor and the college has taken necessary action against him without any excuse."
The council also said Christian educational institutions have "produced stalwarts" in India, including Hindus and Muslims.
Prabhakar Tirkey, national president of the Rashtriya Isai Mahasang (National Federation of Christians), said the court seems to have forgotten that "not a single Christian has been convicted" for violating conversion laws in the history of India.
He noted that Christian missionaries introduced English education some five centuries ago but when the British left India in 1947, the Christian population was less than 3 percent, and "now it is 2.3 percent."
"If education was used for conversion during colonial times or even after them, Christian numbers should have been different," Tirkey said.
Observations such as those by the judge will give credence to biased and negative feelings against the Christian community propagated by radical Hindu groups, he said.
Madras Christian College has 8,500 students, about half of them female, according to the college website.


When I was a little girl living in Pakistan many years ago, I loved to see entire cities light up when Ramadan came around. People would rush to the street vendors a few minutes before sunset to grab samosas and jalebis for iftaar, families would send food to each other every day, and as the month came to an end, colourful bangles, bedazzled clothes and henna cones could be found on every corner of every street in preparation for Eid.
I always knew that all this festivity was secondary to the true spirit of Ramadan, which is of course achieving closeness to Allah through the act of fasting, but I loved the atmosphere nonetheless. For most of us living in countries where Islam is not the majority religion, practicing our faith usually becomes a private affair. This isn't necessarily a bad thing but that sense of communal festivity and celebration can sometimes be lost.
Ramadan is a blessing that God bestows upon us every year. Thirty days to come closer to Him, thirty days to engage in productive actions and conversations, thirty days to seek forgiveness for all the mistakes we made during the rest of the year and to be granted that forgiveness. If these aren't things to be celebrated, then I don't know what is!
There are lots of creative DIYs you can do to make your house look and feel a little more special this Ramadan.
Simple fairy lights will do!
Try making this bangle wreath with a bunch of bangles and a ribbon.
Or, go for a traditional wreath that you can hang on your door.
You can also make a garland using shapes like the star and the moon or lanterns with any material or fabric you want – get creative!
You can always find little candles or lanterns to place around the house.
You can also print off different Quran'ic verses and reminders, frame them, and place them around the house to encourage everyone in the family to strive harder this Ramadan.
My personal favorite is this free template of "Today's Iftaar time is…" that you can frame and hang in the kitchen.
It's really important to foster a special kind of love for Ramadan in kids, whether they be your own kids or younger siblings or even cousins, so that they eagerly look forward to this month every year and want to participate in all its activities.
There are various ways to organize this but one way is to get a jar and fill it up with 30 good deeds. The kids can pull out one good deed each day!
Each night after Iftaar, reward the kids with treats that they select. There are multiple ways to store the treats, such as in these balloons that they can pop at the end of each day. These treats can also be rewards for whatever good deed they did that day.
You can have the kids color various Ramadan templates (like this one) or make different crafts like cut-out lanterns or mosques. Dozens of ideas for these kinds of crafts are a simple google search away!
Ramadan is an excellent time to earn more of Allah's pleasure by doing good to the people around you and to spread kindness. It's the perfect opportunity to share a thing or two about Islam with your non-Muslim neighbors, teachers, or co-workers.
Here is an example of an informative and friendly note that you can print out and attach to the gift.
The free printable is available for download here.
Let your own teachers, your kids' teachers or your co-workers know that Ramadan has started and that you will be taking part in certain religious activities like fasting by giving them a small gift. Nobody will say no to a big jar of healthy and delicious dates!
Of course, send gifts and greeting cards to Muslim friends and family and celebrate this joyous month with them!
InshaAllah (God willing) these ideas help you enjoy the month of Ramadan even more. Remember to not allow all of this to distract you from actually worshipping God and working hard to improve your character this Ramadan! However, these little celebrations should enable you to further surround yourself with the spirit of Ramadan and benefit more from this month.
Comment below if you have any of your own ideas for encouraging festivities during Ramadan!


Running Cron Jobs in Magento 2 can be very useful to automate repetitive tasks. A cron is a Linux utility which schedules a command or script on your server to run automatically at a specified time and date.
First of all, to run Cron Jobs in Magento 2 you have to set up the Magento 2 cron commands in your crontab service.
If your php directory is not /usr/bin/php or your magento directory is not /var/www/magento-two/ replace them for your php and magento paths.
Adding a custom cron to our module.
First of all, create a file 'crontab.xml' inside the etc folder of your module /app /code /Vendor /Module /etc /crontab.xml.
Here you have to specify a group_id (can be a default group or a custom group), and the job name. Inside the job, you have to set the instance of the class and the method you want to execute, and finally the schedule in crontab format.
Here you can specify the timings for the cron generation and the history lifetime times.
Magento 2 gives you the ability to change the group configuration. You can change it in Configuration > Advanced > System > Cron configuration options.
I hope you enjoyed the post about Running Cron Jobs in Magento 2, and helps you with your cron jobs setup. Do you have any tricks to share? Please comment!


text:
The 2005 Colorado State Rams football team  represented Colorado State University in the college football 2005 NCAA Division I-A football season. They played their home games at Hughes Stadium in Fort Collins, CO  and were led by head coach Sonny Lubick.

Schedule

References

Colorado State
Colorado State Rams football seasons
Colorado State Rams football

redpajama_set_name: RedPajamaWikipedia