text:
The Right Dishonourable Podcast
are creating Political Podcasts
per null
We know that Brexit means Brexit; Jimmy voted to leave, and Jazza still has PTSD from early morning on 24 June 2016, but there is so much more to UK and global politics than whether or not leaving the EU is going to be over-easy or scrambled.
The Right Dishonourable isn't like other British current events podcasts. We aren't funded by a traditional media organisation and we refuse to become an echo-chamber of ideas. We aren't industry insiders and are 'only as truthful as resources permit', but if we can try and understand what's happening in the world, anyone can. Just see us as that slightly annoying guy down the pub that read the whole article rather than the headline. Also there is banter. An insufferable amount of banter.
At the time of writing we've been cultivating this community for over 90 episodes (plus an earlier video series) and endured four years, two general elections, two referendums and a shit ton of leadership changes. And we need your help.
We're not backed by advertising or a larger media company, and have sunk nearly £1,000 into this podcast over the last few years. Not to mention the time it takes to record, book guests, buy and replace equipment and edit, all on a weekly basis. In order for us to be able to keep this going, we need your help. By help we mean money. Give us money.
Whatever you can afford or think is worth it, please pledge what you can. Check out the rewards available, from merchandise (MUGS!!!) to shoutouts to exclusive content, hopefully there's something that will tickle your pickle. We'll love you forever, be it $1 or $100. ($100/ episode is not currently an option, but marriage will probably be on the cards).
Thank you for all the support over the past few years. We appreciate you no end and love making this podcast.
Tentative Party-Member
$1 or more per creation
It's not like you're phone banking for Momentum, but you'll definitely sign a change.org petition or share a well-edited, inaccurate video on Facebook.
You're (supposedly) the backbone of any political organisation, and will get to choose the future leader! That is assuming you're given any choice.
This tier will give you access to:
Free Podcast Download!
Access to the Patreon feed with polls, behind the scenes, bonus audio and written snippets.
Sceptical Backbencher
You squeaked into your marginal seat on a couple-hundred votes. You'll happily support the government, but secretly love kicking the PM when they're down. (In this metaphor, Jazza and Jimmy are the PM, in case that wasn't clear).
This tier give you you:
Same as previous tier.
A personal shout out and thank you at the end of each podcast.
Access to the monthly live stream with Jimmy & Jazza.
A Right Dishonourable badge (only available in the UK, sorry).
Blood-Thirsty Cabinet Colleague
$12 or more per creation
You've paid your dues, served for several decades, but your time is nigh. The Department for Education seemed an honour at first, but you deserve more.
You're waiting for the PM to slip up on communicating the new A-Levels legislation in order to appear on Sunday morning television to mount a coup.
This tier gives you access to:
All previous tiers.
A Right Dishonourable mug (only available in the UK, sorry).
Dishonourable Future Leader
Quietly waiting in the wings to pounce. The country needs purpose, it needs direction, it needs *dramatic pause* leadership. (In this metaphor, the country is the podcast).
This tier includes:
The chance to come on the podcast as a guest, choosing a topic to talk about and sticking it to the man, a.k.a. Jimmy.
You'll probably end up taking over the podcast as Jazza and Jimmy wither and age.
Recent posts by The Right Dishonourable Podcast


President Petro Poroshenko has had a meeting with Former president of Ukraine (1991-1994) Leonid Kravchuk, former president of Ukraine (1994-2005) Leonid Kuchma and former president of Ukraine (2005-2010) Viktor Yuschenko to discuss development of Ukraine and settlement of the Donbas conflict.
Press service of the President of Ukraine said this in a statement, the Ukrainian News Agency reports.
Poroshenko noted the important role of the three presidents they played in the times of their rule.
As Ukrainian News Agency earlier reported, the next presidential election are scheduled for March 31, 2019.


From Scout Master Leland: Thank you! Thank you! Thank you!
You gave us a great high adventure experience aboard the Ciganka–more than we could ever ask for. Thanks for everything you did to make our trip so rewarding.
We are in the process of putting our photos on our Facebook page. You can check out photo albums of all our activities at https://www.facebook.com/pages/Boy-Scout-Troop-62-Carlinville-IL/103822839715391?sk=photos_stream.
2 Responses to "Comments from Troop 62 – Carlinville, IL"
Hope you avoid the tropical storm–but get some good winds!


In one of the first NCAA women's championships, South Dakota State University delivered an outstanding performance. All five Jackrabbits – Vicki Coyle (second overall), Kristin Asp (third), Audry Stavrum (fifth), Nancy Gieske (seventh) and Lori Bocklund (ninth) – finished in the top 10, helping their team score 26 points and capture the national title.
Tracy Caulkins won five individual events, catapulting the University of Florida to the first team title in the NCAA Division I Women's Swimming and Diving Championships.
Buzzer beaters are normally associated with basketball, but they became relevant in the 1985 Division II Outdoor Track and Field Championships when Abilene Christian University's Ann Foster leaped 41 feet, 9½ inches in the waning moments. Foster's triple-jump victory enabled Abilene Christian to edge three-time defending champion California Polytechnic State University, 106-103, in the final standings.
Courtney Allen closed out her career by winning the individual singles and doubles titles at the NCAA Division III Women's Tennis Championships. The accomplishment gave Allen an NCAA-record six individual championships in her career. She had also won singles titles in 1984 and 1985 and doubles championships in 1984 and 1986.
All the times practicing a shot to win a championship paid off for the University of North Carolina, Chapel Hill's Charlotte Smith in the championship game of the 1994 Women's Final Four. With her team trailing Louisiana Tech University, 59-57, and seven-tenths of a second remaining in the game, the Tar Heels were set to inbound the ball from underneath the basket in the frontcourt, and coach Sylvia Hatchell drew up a play for Smith to take a three-point shot.
Being designated as the key person on the play didn't resonate with Smith right away.
North Carolina used Kodak All-American Tonya Sampson as a decoy and designed the 3-pointer for Smith – despite the fact she had made only eight field goals beyond the arc all season.
Stephanie Lawrence made a pass over a defender and underneath the backboard to the open Smith.
North Carolina continued a dominant streak by capturing its ninth consecutive NCAA title with a 5-0 win over the University of Notre Dame. Tisha Venturini scored twice to lead North Carolina to the victory that capped its impressive 206-2-8 stretch over nine years.
This victory launched the University of Connecticut women's basketball dynasty. Behind the efforts of All-American Rebecca Lobo, the Huskies completed a 35-0 season by downing the University of Tennessee, Knoxville, 70-64, in the national championship game. UConn has won 10 NCAA titles and is looking for what would be an NCAA Division I record fourth straight in 2016.
Kentucky's Jenny Hansen became the only woman to win three consecutive NCAA all-around championships in gymnastics. Hansen also won individual national titles in the balance beam and vault twice and added a floor exercise in 1995.
North Dakota State University set a Division II championship game record for points scored in defeating Shippensburg University of Pennsylvania, 104-78. The win marked the fourth straight national title for the Bison, who went 119-9 over that stretch.
Pennsylvania State University's Olga Kalinovskaya ended her stellar career by defeating Notre Dame's Sara Walsh, 15-4, in women's foil, becoming the only fencer in NCAA history to win four consecutive individual titles in one fencing event.
When the University of Arizona tied with San Jose State University, the tournament went to a playoff – but the format was more complicated than in individual competition. Five players from each team played the 18th hole in two groups. The teams could discard the highest score on the hole, then total the remaining scores to see which team completed the hole in the fewest shots.
Two Arizona players and three from San Jose State played in the first group. Marisa Baena and two of her teammates played in the second group with two San Jose State players.
After her tee shot, Baena found herself 147 yards from the hole. On her shot to the green, she hit an 8-iron. The ball took one bounce, then disappeared into the hole for an eagle 2.
After the playoff scores were tallied, Arizona took home the team title by one shot.
The Franklin Pierce women became the only Division II team to capture four consecutive NCAA titles with a 3-0 win over West Virginia Wesleyan. The Ravens went a combined 78-1 in their four-year national championship reign.
The University of Utah's Christl Hager won her third individual NCAA women's giant slalom title, which tied a national record. She also won the giant slalom in 1994 and 1995.
Florida's Dawn Buth and Stephanie Nickitas became the first set of teammates to capture back-to-back Division I doubles championships. Buth and Nickitas finished their collegiate careers with a 91-8 record as doubles partners.
Louisiana State University's quest for an 11th consecutive outdoor NCAA title seemed to be over until the Tigers scored 43 points on the final day. LSU found itself trailing by 26 points with nine events remaining, but its closing burst edged out the University of Texas at Arlington, 63-62.
Kenyon College claimed its 17th consecutive Division III Women's Swimming and Diving Championships by winning six individual titles and two relays and outscoring runner-up Denison University by more than 200 points. The emotional win came just two months after a team van accident claimed the life of co-captain Molly Hatcher.
The College of New Jersey and Tufts University were tied, 1-1, in the championship match. In the waning seconds, The College of New Jersey's Denise Buckley, who had scored the game's first goal nine minutes into the match, made a strong run down the left flank, where she sent a centering pass toward junior Lisa Pelligrino. Tufts goalkeeper Randee McArdle batted the ball before it reached the attacking Pelligrino, but she couldn't control the rebound.
Pelligrino took a shot, and again McArdle made the save. This time, the rebound popped straight into the air, where Cara Gabage raced over to head the loose ball into the net with three seconds remaining. The shot gave her program its third national title. The partisan crowd supporting the homestanding Tufts team could only watch in stunned silence.
Tasha Rodgers of Washington University in St. Louis had career highs of 36 points and 13 rebounds to lead the Bears to their fourth consecutive Division III women's basketball title with a 67-45 win over Messiah College. The Bears, who won 81 straight games during the best stretch of their four-year championship run, joined Division II's North Dakota State (1993-96) as the only NCAA women's basketball teams with four straight national titles.
Allison Comito scored with eight seconds remaining in triple overtime to lift the University of Maryland, College Park, over Georgetown University, 14-13, and give the Terrapins their seventh straight NCAA lacrosse championship. Maryland went 140-5 over its seven-year championship run and finished the 2001 season 23-0.
Saint Augustine's University won its third consecutive team title in the Division II Women's Outdoor Track and Field Championships in dramatic fashion. The Falcons trailed North Dakota State by one point heading into the final event: the 1,600-meter relay. Georgia Mullings, Camethia Baker, Shakirah Rutherford and Libia Rodriguez responded with a winning time of 3 minutes, 36.86 seconds to earn 10 team points and a 54-53 Falcons victory.
UCLA pitcher Keira Goerl threw a nine-inning no-hitter in the title game of the Women's College World Series as the Bruins outlasted defending champion University of California, Berkeley, 1-0. It is the only no-hitter in a Women's College World Series championship game. The Bruins had battled through the losers bracket after dropping their first game of the series – and had to beat Texas All-America pitcher Cat Osterman twice to advance to the championship game.
Adelphi University junior Katherine Hock's six second-half goals led the Panthers to a 12-11 victory over West Chester University of Pennsylvania, part of the inaugural Division II National Championships Festival in Orlando, Florida. The win was Adelphi's first championship for a women's program at the school.
Missy Buttry of Wartburg College became the first woman in any division to win three individual NCAA cross country championships. Buttry finished 24 seconds ahead of Liz Woodworth of the University of Wisconsin-Oshkosh, who claimed runner-up honors for the second consecutive year. Relatively speaking, Buttry's win was her closest championships victory. She won as a sophomore by just under a minute, then beat Woodworth the next year by slightly more than a minute. On a cool, windy day in 2004, Buttry ran about 21 seconds slower than the previous year, enabling Woodworth to cut the gap in half. But Buttry retained command of the race throughout.
A seismic power shift took place in Division I softball when the University of Michigan became the first team east of the Mississippi River to take the championship trophy. The Wolverines, who had been ranked No. 1 most of the season, completed the historic first by rallying to defeat two-time defending champion UCLA in the best-of-three championship final of the Women's College World Series. Michigan freshman first baseman Samantha Findlay's three-run home run in the top of the 10th was the winning blow as the Wolverines downed UCLA, 4-1, to take the series, 2-1.
Maryland's Kristi Toliver hit a step-back 3-pointer over 6-foot-7-inch Duke University center Alison Bales with 6.1 seconds left to force overtime, and the Terrapins went on to defeat the Blue Devils, 78-75, in the championship game of the Women's Final Four. Toliver, who finished with 16 points and four assists, felt the shot was good as soon as it left her hands.
UCLA won the school's 100th overall championship by downing Stanford University, 5-4, in the 2007 water polo championship game. The victory made the Bruins the first athletics department to eclipse the century mark in championships.
Williams College rowed to victory in the Varsity I Eights grand final to wrap up its second consecutive Division III national championship. The Ephs went on to win eight straight NCAA titles before the streak was ended by Trinity College (Connecticut) in 2014.
The NCAA Division III Women's Golf Championships began in 2000, and for the first 13 years of its existence, Methodist University took home the championship trophy. The Monarchs were at their most dominant in 2007 when they captured the title by an NCAA-record 88 strokes over second-place DePauw University.
No list about NCAA women's championships would be complete without mentioning legendary Tennessee women's basketball coach Pat Summitt. The Lady Vols captured Summitt's eighth and final NCAA title with a 64-48 victory over Stanford in the 2008 Women's Final Four. Summitt retired from coaching in 2012 with a record 1,098 career wins.
Penn State finished off a 38-0 season by beating Stanford, 25-20, 26-24, 25-23, in the finals of the Division I tournament. The Nittany Lions were so dominant that they won an NCAA-record 111 straight sets dating from the national championship match in 2007 until the 2008 national semifinals.
The Bloomsburg University of Pennsylvania field hockey team sent coach Jan Hutchinson out in style by winning the national title with a 3-2 victory over the University of Massachusetts Lowell. Hutchinson had announced her plans to retire that year, and the win ended her stellar career with 13 Division II national titles and a 591-75-20 record. She remains the NCAA all-time leader in career coaching wins in field hockey.
Jessica Wong scored with 33.6 seconds remaining in the third overtime to give the University of Minnesota Duluth a 3-2 victory over Cornell University in the championship game. It was the longest women's ice hockey championship game, surpassing Minnesota Duluth's 4-3 double-overtime win over Harvard in 2003.
Fairleigh Dickinson University, Metropolitan Campus, rallied for wins the last two games of the final to down the University of Nebraska, Lincoln, 4-3, and win the championship. The Knights won Game 6, 230-190, and took the decisive game of the match, 208-174. It was fitting that senior Erica Perez from Carteret, New Jersey, about 10 miles from the championship venue, knocked down the final pins.
Western Washington captured the Division II national title for the seventh consecutive year. The Vikings also won the Division II NCAA title in 2017, meaning the program has won half of the national trophies since Division II began holding the championship in 2002.
Concordia University, St. Paul, claimed its record-tying sixth consecutive Division II Women's Volleyball Championship, defeating the University of Tampa in an epic five-set thriller (27-29, 17-25, 25-23, 25-23, 16-14) in the tournament finals. After dropping the first two sets, Concordia-St. Paul coach Brady Starkey gave his team an impassioned piece of advice. "We've got them right where we want them," he said. "This is you guys all the way. Nothing will feel better than coming back from down 0-2 and to win in five." And in that moment, he never sensed panic from his team. Said Starkey: "They were all like, 'We're good!'" The Golden Bears set a new record with their seventh straight championship the following season.
Petra Zublasing won both the smallbore and air rifle individual events to lead West Virginia University to the team title. She is the only woman to win both events in the same year.
When the final scores were allotted in the National Collegiate Women's Gymnastics Championships, the results were unprecedented: Florida and the University of Oklahoma were tied at 198.175. Neither team was quite sure how to react: What did the rule book call for as a tiebreaker?
As it turned out, women's gymnastics does not outline a way to settle a tie. The Gators and Sooners were declared co-champions.
Individual track and field events are usually settled by the slimmest of margins. But in the 2014 Division I Women's Indoor Track and Field Championships, the entire team title came down to the last leg of the last event, with the University of Oregon's Phyllis Francis edging Texas' Ashley Spencer in the 1,600-meter relay. The finish allowed Oregon to win the NCAA title, 44-43.5, over the Longhorns.
Tufts finished a perfect 51-0 season by rallying to defeat Texas-Tyler 7-4 in the championship game. The Jumbos scored six runs in the top of the sixth inning and added an insurance run in the seventh. The victory also gave Tufts its third consecutive national title.
The NCAA's 90th championship came to fruition in May 2016. After three days of competition in Gulf Shores, Alabama, Southern California capped off winning the inaugural beach volleyball title by jumping into the Gulf of Mexico to celebrate.
The road to the first beach volleyball championship started in 2008 when the NCAA Committee on Women's Athletics received notice that 10 schools planned to start varsity teams. This commitment meant it was added to the list for emerging sports for women. After more than 40 schools added the sport over the next few years, beach volleyball became a championship, which included being televised by Turner's family of networks.
Mississippi State's Morgan William shocked the women's basketball world by sinking a 15-foot jumper at the overtime buzzer to down UConn 66-64 in the semifinals of the Women's Final Four. The shot toppled the dynastic Huskies, who saw their string of 111 straight victories and four consecutive national championships come to a stunning end. William's shot also handed UConn its first defeat in 865 days.
"We beat the greatest team, with the greatest streak in the history of sports. We're very proud of that," Mississippi State coach Vic Schaefer said.
Plattsburgh State captured its fourth consecutive Division III national title when Erin Brand scored at 10:34 into overtime to give the Bulldogs a 4-3 victory over Adrian. Plattsburgh State ended the season with a 22-game unbeaten streak.
McKendree became the first Division II team to win the NCAA bowling championship. The Bearcats accomplished the feat by sweeping five-time national champion Nebraska. McKendree's 4-0 victory was the first title-match sweep in the championship's 14 years.
Oklahoma and Florida locked into a battle of wills in Game 1 of the championship series. The Sooners and Gators battled for a record 17 innings before Oklahoma's Shay Knighten hit a three-run homer in the top of the frame to lead her team to a 7-5 victory. The Sooners defeated the top-seeded Gators 5-4 the next night to win their second consecutive national title.
This story originally appeared in the Winter 2016 issue of Champion magazine.


text:
/*
 *  Project: Doubly Linked list_t C-API, example data type
 *  File:   DoublyLinkedlist_t_ADT.h
 *  Author: Chris Aslanoglou
 *  Github: https://github.com/chris-asl/doubly-linked-list-API
 */

#ifndef DOUBLYLINKEDLIST_ADT_H
#define	DOUBLYLINKEDLIST_ADT_H

#ifdef	__cplusplus
extern "C" {
#endif

    typedef struct DoublyLinkedList_ADT *list_t;
    typedef int IteratorID;

    /*
     * Function responsible for initializing the Doubly Linked list_t ADT
     * Return values:
     *      [*] On success,  0 is returned
     *      [*] On failure,  -1 is returned
     */
    int dll_init(list_t*);
    /*
     * Function returning the size of the list
     */
    int dll_size(list_t);
    /*
     * Function responsible for checking if the list is empty
     * Return values:
     *      [*] on empty list, 1 is returned
     *      [*] on non empty list, 0 is returned
     */
    int dll_isempty(list_t);
    /*
     * Function responsible for printing the list in this fashion:
     *          "element -> element -> element" (delimiter "->")
     * Return values:
     *      [*] On success,  0 is returned
     *      [*] On failure,  -1 is returned
     */
    void dll_print(const list_t, void (*print_data)(void*), int);
    /*
     * Function responsible for inserting an element at the end of the list
     * Return values:
     *      [*] On success,  0 is returned
     *      [*] On failure,  -1 is returned
     */
    int dll_insert_at_back(list_t, void*, void* (*)(void*));
    /*
     * Function responsible for inserting an element at the start of the list
     * The 2nd and 3rd arguments are to be used in conjuction, as the data parameter
     * acts as a dummy object which is going to be duplicated as a new object of the
     * data member of the list node struct.
     * The duplicate function is responsible for allocating a new object and
     * assigning the values of source to destination.
     * Return values:
     *      [*] On success,  0 is returned
     *      [*] On failure,  -1 is returned
     */
    int dll_insert_at_front(list_t, void*, void* (*)(void*));
    /*
     * Function responsible for inserting an element into the list keeping the list
     * sorted by a comparison defined by the user with a function called issmaller
     * Elements are going to be presented in ascending order starting from the head
     * Return values:
     *      [*] On success,  0 is returned
     *      [*] On failure,  -1 is returned
     */
    int dll_insert_sorted(list_t, void*, int (*)(void*, void*),
            void* (*)(void*));
    /*
     * Inserts the element `data` before the `key` element provided. If the key is
     * not found -1 is returned.
     * Return values:
     *      [*]: On success, 0 is returned
     *      [*]: On error or `on key not found`, -1 is returned
     */
    int dll_insert_before(list_t, void*, void* (*)(void*), void*,
            int (*)(void*, void*));
    /*
     * Inserts the element `data` after the `key` element provided. If the key is
     * not found -1 is returned.
     * Return values:
     *      [*]: On success, 0 is returned
     *      [*]: On error or `on key not found`, -1 is returned
     */
    int dll_insert_after(list_t, void*, void* (*)(void*),
            void*, int (*)(void*, void*));
    /*
    * Function that enables accessing data at the list, identified by the 2nd
    * argument, with an is_equal type function as 3rd argument
    * Return values:
    *      [*] On success, the object is returned
    *      [*] On element not found or on error, NULL is returned
    */
    void* dll_edit_data(list_t, void*, int (*)(void*, void*));
    /*
     * Function that returns a copy of the data located at the front (Head) of
     * the list, if getCopy option is true, or the actual data if the option is
     * set to 0 (false)
     */
    const void* dll_get_front(list_t, void* (*)(void*), int);
    /*
     * Function that returns a copy of the data located at the back (Tail) of
     * the list, if getCopy option is true, or the actual data if the option is
     * set to 0 (false)
     */
    const void* dll_get_back(list_t, void* (*)(void*), int);
    /*
     * Function that is responsible for copying src list to dest list
     * Dest list must be initialized and empty
     * Return values:
     *      [*] On success, 0 is returned
     *      [*] On failure, -1 is returned
     *      [*] On destination list not empty, 2 is returned
     *      [*] On empty source list, 1 is returned
     */
    int dll_copy(list_t, list_t, void* (*)(void*), void (*)(void*));
    /*
     * Function responsible for appending `list b` to `list a`
     * Upon return, the second list pointer (a.k.a. list_t) is going to be freed
     * and nullified, so that it cannot longer be used
     */
    void dll_append(list_t, list_t*);
    /*
     * Function responsible for deleting the element that contains the `key`
     * given as a 2nd parameter
     * Also, two pointers to functions needed, the 1st for identifying the
     * correct element and the second one for freeing it
     * Return values:
     *      [*] On success,             0 is returned
     *      [*] On element not found,   1 is returned
     *      [*] On error,               -1 is returned
     */
    int dll_delete(list_t, void*, int (*)(void*, void*), void (*)(void*));
    /*
     * Deletes the tail element of the list
     */
    void dll_delete_back(list_t, void (*)(void*));
    /*
     * Deletes the head element of the list
     */
    void dll_delete_front(list_t, void (*)(void*));
    /*
     * Function responsible for freeing all the allocated memory
     */
    void dll_destroy(list_t*, void (*)(void*));
    /*
     *  Allocates a new Iterator object
     *  assigning it to the head of the list and then returning its id
     *  Return values:
     *      [*] On success, the ID of the Iterator is returned
     *      [*] On failure, -1 is returned
     */
    IteratorID dll_iteratorRequest(list_t);
    /*
     *  Sets the iterator with ID iterID
     *  to point to the head of the list
     *  Return values:
     *      [*] On success, 0 is returned
     *      [*] On failure, -1 is returned
     */
    int dll_iteratorBegin(list_t, IteratorID);
    /*
     *  Sets the iterator with ID iterID
     *  to point to the tail of the list
     *  Return values:
     *      [*] On success, 0 is returned
     *      [*] On failure, -1 is returned
     */
    int dll_iteratorEnd(list_t, IteratorID);
    /*
     *  Returns the Object of the node
     *  pointed by the iterator
     *  Return values:
     *      [*] On success, the object is returned
     *      [*] On failure, NULL is returned
     */
    void* dll_iteratorGetObj(list_t, IteratorID);
    /*
    *  Sets the iterator to the next node
    *  If by advancing, the iterator is requested to point after the tail
    *  of the list, 2 is returned
    *  Return values:
    *      [*] On success, 0 is returned
    *      [*] On failure, -1 is returned
    *      [*] On empty list, 1 is returned to indicate invalidation of iterators
    *      [*] On the case described above, 2 is returned
    */
    int dll_iteratorNext(list_t, IteratorID);
    /*
    *  Sets the iterator to the previous node
    *  If by requesting the previous node, the iterator points before the head
    *  of the list, 2 is returned
    *  Return values:
    *      [*] On success, 0 is returned
    *      [*] On failure, -1 is returned
    *      [*] On empty list, 1 is returned to indicate invalidation of iterators
    *      [*] On the case described above, 2 is returned
    */
    int dll_iteratorPrev(list_t, IteratorID);
    /*
     * Acts both as a copy constructor and copy function
     * When you need copy constructor functionality, dest IteratorID must be
     * NULL, and this function will allocate a new iterator setting it
     * to point to the node that src Iterator points
     * When you need simple copy functionality, the function will copy the
     * address of the node that src Iterator points to the node of dest Iterator
     * Return values:
     *      [*] On success, 0 is returned
     *      [*] On failure, -1 is returned
     *      [*] On empty list, 1 is returned to indicate the invalidation of the
     *          iterators
     *      [*] On iteratorIdxOutOfBounds error, 2 is returned
     *
     */
    int dll_iteratorCopy(list_t, const IteratorID, IteratorID*);
    /*
     * Deletes the current node pointed by the iterator
     * After the deletion the iterator points to the next element of the list
     * (towards the end). If the element to be destroyed is the last element of the
     * list, which means that the list will be empty, all the iterators are
     * invalidated
     * Return values:
     *         [*] On success, 0 is returned
     *         [*] On failure, -1 is returned
     *         [*] On empty list, 1 is returned to indicate invalidation of
     *             iterators
     */
    int dll_iteratorDeleteCurrentNode(list_t, IteratorID, void (*)(void*));
    /*
     *  Deletes the iterator pointed by iterID
     *  Return values:
     *      [*] On success, 0 is returned
     *      [*] On failure, -1 is returned
     */
    int dll_iteratorDelete(list_t, IteratorID);
    /*
     *  Deletes all iterators
     *  Return values:
     *      [*] On success, 0 is returned
     *      [*] On failure, -1 is returned
     */
    int dll_iteratorDeleteAll(list_t);

#ifdef	__cplusplus
}
#endif

#endif	/* DOUBLYLINKEDLIST_ADT_H */

redpajama_set_name: RedPajamaGithub


Human sexuality has been regulated and shaped by men to serve men's needs.
I wanted everything. What could you not want when you are brown and Indian-looking in a society in which the white aesthetic is praised as acceptable?
I've spent my whole life in Chicago being asked where am I from, so that I have a sense of displacement that also is very psychologically disorienting.
There are things coming from me that I felt I wanted to talk about. My search for my own blend of spirituality, my acknowledgement of my sexuality, my being the single mother of a young man.
I'm obviously an American citizen. My parents are American citizens. But I'm not looked at as an American.
For things to have value in man's world, they are given the role of commodities. Among man's oldest and most constant commodity is woman.


A third of VF's revenue comes from international sales, according to Corp. Counsel, July 2012 at 38, and five members of its 18-person legal department are stationed outside the United States." VF Corp. is the world's largest apparel and footwear company. It makes sense that a company that does business and sells shoes everywhere should have the same proportion of its lawyers serving internationally (really, "boots on the ground").
This blog refers often to the geographic scattering of law department offices and the likely trend in this direction (See my post of Jan. 16, 2009: physically decentralized law departments with 13 references.). The term "footprint" figures notably in these references (See my post of June 20, 2008: geographically dispersed lawyers and a tool to help them reach each other; Jan. 8, 2009: location of in-house counsel will eventually match the global footprint of a company; Dec. 13, 2009: InBev lawyers where the business is; March 2, 2010: 3M and dispersion of its lawyers; Aug. 9, 2011: international footprint of Cargill lawyers; Oct. 19, 2011: management tools needed as law departments disperse; and April 16, 2012: John Deere and its Asian presence.).


text:
THE EASTERN PERSPECTIVE
The US Trade War With China: Can There Be a Winner?
Pavel Cheremisin
Increasingly, one can hear that the 45th President of the United States, Donald Trump, who has made a name for himself for both his extravagance and his decisive action, has a propensity for trampling on all established legal means of international interaction. Under his rule, Washington withdrew from the Iranian nuclear deal (JSPOA) and the Intermediate-Range Nuclear Forces Treaty (INF). He also announced his withdrawal from the Paris Agreement on climate change and the UN Arms Trade Treaty (ATT), and is still considering the need to extend US participation in the agreement on strategic offensive weaponry (New START), which expires in 2021. Moreover, America has begun to raise import tariffs on certain goods from its trade partners, including Mexico, Canada, Japan and the EU, and in general to carry out a policy of protectionism resembling that introduced during the presidency of William McKinley.
With these bold steps, Donald Trump attempted to fulfil the promise stated in his election slogan: "make America great again". A special emphasis in achieving this would be placed on enhancing the economic power of the country and providing US citizens with jobs. According to statistics, the US has a trade deficit. Specifically, in 2017 this figure increased 12.1% and amounted to 566 billion dollars (exports of 2.3 trillion dollars of goods, lagged imports, worth 2.9 trillion dollars).
Globalization, which had previously been considered one of the principle tenets promoted through American Leadership is about, is beginning to play against the United States and contribute to the growth of other centres of power. Of course, Washington finds this unacceptable.
In an effort to reverse this unfavourable trend, America, led by Donald Trump, has launched a policy which has been dubbed Trumponomics. It is based on an exclusive subordination of foreign policy to the national interests of the country, protectionism, as well as a set of economic measures aimed at returning national capital and production to the United States. In addition, there is an emphasis on accelerating GDP growth in accordance with a new fiscal policy and through investments in the country's infrastructure.
The United States' largest trading partner is China. At the same time, it also became the biggest challenge to American economic leadership. In 2018, the country's trade deficit with China amounted to 419 billion dollars: America imported $540 billion in goods from China yet exported only $121 billion. The main imports were computers, mobile phones and clothing, while aircraft, soybeans and vehicles were its principle exports.
China has a huge trade surplus with the United States. Beijing uses these profits to purchase US Treasury bonds, writes Valdai Club expert David Lane, Fellow of the Academy of Social Sciences (UK), Emeritus Fellow at Emmanuel College at Cambridge University, and vice president of the European Sociological Association. "China <…> has used its dollar surplus to buy US Treasury notes – thereby maintaining the value of the dollar, and concurrently making China its largest foreign lender," he notes.
By the beginning of 2019, America's debt to China had reached 1.12 trillion dollars. "This was facilitated by lower prices for Chinese goods," David Lane says. On the one hand, "American consumers have benefitted from lower priced goods, and American companies, with subsidiaries or suppliers in China as well as retailers in the USA, have profited. On the other hand, the flight of production to China and other Asian countries has led to significant loss of jobs – the number of employees in US manufacturing industry has fallen by 34 per cent between 1998 and 2010. Financially, Chinese ownership of US debt gives potential influence over US financial policy, as a blanket sale of Treasury notes would weaken the dollar and possibly lead to a rise of US interest rates making lending more expensive."
The US merchandise trade balance with China was $418 billion in 2018. Donald Trump had promised to reduce it as part of his election campaign to restore American manufacturing jobs, which have fallen from 40% at the end of World War II to less than 9% today, a result of technology and productivity gains, but also outsourcing to China.
Alan Cafruny, Hamilton College
To preserve its superiority, America can no longer manage by "soft power" alone and has begins to use "hard power" with elements of military and economic pressure to slow down the geo-economic processes that are losing controllability, as well as globalization, which strengthens China's position.
The new tariff policy was chosen as the main instrument for restraining the expansion of the Middle Kingdom, and in 2018 push came to shove. President Trump imposed new import duties on $50 billion in Chinese goods. China responded by mirroring the move, introducing its own duties on US goods worth the same amount. Then the Trump administration introduced an additional 10% duty on $200 billion in imports of certain goods and threatened to raise the rate to 25% in the future. China responded by imposing duties on imports from the United States another $50 billion. Following this, Washington announced plans to impose duties on all imports from China. In May 2019, the United States imposed a 25% duty. China responded by also raising duties on US imports. Beijing and Washington have conducted 11 rounds of consultations on the resolution of trade contradictions, but it still hasn't been possible to find a way out of the impasse.
Tariffs and Nostalgia. Counterproductive and Shortsighted Strategy of Donald Trump
Richard Lachmann
President Trump's announcement that he would impose tariffs of 25 percent on steel and 10 percent on aluminum creates the danger of a global trade war. Other countries can impose retaliatory tariffs under the rules of the World Trade Organization.
High hopes were pinned on the meeting between US President and the Chinese President during the G20 summit in Osaka, Japan on June 29. At the summit, Donald Trump promised that he would not introduce any new duties on Chinese goods yet, and expressed confidence that Washington and Beijing had a good chance of concluding a trade deal. Xi also stressed the need to overcome the difficulties encountered that did not correspond to the interests of both sides.
Upon returning to the White House, Trump announced that the US-China negotiations had already resumed. However, according to the president, China had enjoyed a "big advantage in trade with the United States for 'many years.' So obviously you can't make a 50-50 deal," Trump said. "It has to be a deal that is somewhat tilted to our advantage." But will China agree to such conditions?
At the July 1 briefing, Chinese Foreign Ministry spokesman Geng Shuang said: "An important basis for the resumption of consultations is equality and mutual respect. What concerns is the way in which to resume negotiations, and that this done, <...> the trade and economic delegations of the two countries are currently discussing specific issues. " A deal for the Americans is possible only if it is partial towards them, while China insists it will only work on equal terms.
It should be noted that the understanding of equality among the Chinese does not always coincide with the point of view of its partners. "China's mercantilist industrial policies have drawn a similar response from much of the world: the EU, Japan, Australia and other nations," says Valdai Club expert and senior researcher at the Scowcroft Center for Strategy and Security Robert Manning. Already there have been complaints to the WTO regarding Chinese demand for the compulsory transfer of technology and restrictions on foreign direct investment in key technology-related industries. Therefore, in his opinion, these countries could support the US position in a trade dispute.
The political establishments in the US and many other countries are concerned about Chinese practices on market access, industrial policy, intellectual property (IP) protection, and other issues.
Clifford Kupchan, Eurasia Group
Perhaps Trump had hoped that raising tariffs and strengthening economic threats against China would push Beijing to conduct reforms that would reduce trade imbalances and strengthen the position of American companies in the country through the abandonment of subsidies and the abolition of mandatory technology transfer and intellectual property rights. But in the context of globalization, the world has turned into a system of interconnecting vessels and an increase in tariffs caused panic in the financial markets at the end of 2018. It became obvious that it would be better for both parties to make a deal: Trump would do so to avoid a recession and the closure of the Chinese market for American farmers, which could ruin his election campaign in 2020, and Xi Jinping could maintain China's economic growth and attractiveness for foreign investors.
Both the USA and China would lose from a trade war. Together, the two countries account for 40% of the world economy and so Europe, whose economy is already slowing dramatically, would be caught in the crossfire, as would emerging markets and, to some extent, Russia.
Clifford Kupchan, chairman and research director for Eurasia Group, a consulting company, argues that if the dispute is not settled, the American agricultural sector, aircraft manufacturing industry and other industries will suffer losses. In addition, it promises major trouble for American companies whose supply chains are tied to China.
China, meanwhile, cannot avoid a recession. Its products will become less competitive in the US market, and access to American technology and know-how will be reduced in the country. It is also possible that, in addition to another increase in duties, Washington will begin to put pressure on its trading partners, pushing them to reduce cooperation with some Chinese companies. This mechanism of secondary sanctions has already proven its effectiveness in the case of Iran. Many of Iran's European partners, for fear of losing access to the US market, have frozen economic ties with Iranian companies.
For China, the trade war has created uncertainty in the investment climate, which is one reason why Chinese economic growth has slowed … That's risky for China, as it means key reforms have slowed.
To minimize costs, «Chinese firms are withdrawing from supply chains that are susceptible to U.S. sanctions, seeking instead to produce inputs either domestically or within China's sphere of influence», said Valdai expert and Hamilton College International Relations Professor Alan Cafruny. American companies have also begun to cut supplies from China, and are choosing alternative sources. "Notably, production is not generally returning to the United States: notwithstanding Trump's campaign rhetoric the "trade war" has less to do with a promised domestic reindustrialization than the drive of U.S. corporations to expand markets and profits worldwide and retain global technological leadership," adds the expert.
Despite all the possible difficulties, China probably will not abandon its development model, which Xi Jinping called the "new Great March." It will not give up its claims to a new place in the global economy. This will lead to a further aggravation of the contradictions between the countries and the lowering of the "economic iron curtain".
APEC Summit: Destructive Influence of the US-China Confrontation
Alexander Lomanov
The APEC summit held in November 2018 was a clear example of the destructive influence of the US-China confrontation on the regional development prospects. The dispute over the joint communiqué reflected the depth of divergence between Washington and Beijing. The United States demanded that the participants strongly condemn China for "dishonest" trade. China wanted the forum to speak out against protectionism and unilateralist policies – that would amount to unequivocal criticism of the United States.
The protracted US-China trade conflict will send shockwaves that will sweep through the entire world economy, triggering falling prices in stock exchanges not only in the US, but throughout the world. According to IMF estimates, the damage from such a slowdown in economic growth in 2020 will reach 0.5% of world GDP and amount to $455 billion.
How to Help, Not Hinder Global Growth Christine Lagarde
As the G-20 finance ministers and central bank governors gather this week in Fukuoka, they can take inspiration from their host city. Known as Japan's "startup city," Fukuoka has flourished in recent decades by embracing trade, innovation, and openness.
This exceeds, for example, the size of the South African economy. In addition, perhaps amid the conditions of an economic downturn, Trump will continue to raise trade duties for other, even more loyal partners.
President Trump's actions and negotiating style have made many nations uneasy. Trump is clearly willing to use tariff hikes often and has even threatened to backtrack on his own agreements (for example, so far refusing to lift section 232 steel and aluminum tariffs on Canada). The US president's trade policies have led other nations in the Asia-Pacific region to begin hedging by seeking trade relations with a wider range of partners.
At the macro-regional level, the United States policy, particularly the withdrawal from the Trans-Pacific Partnership Agreement (TPP); slapping tariffs on key allies such as the EU, Canada and Japan; and the transition to managed trade have substituted multilateralism as a means of cooperation with a series of bilateral agreements. US allies and partners in Asia and Europe have begun to make more and more serious efforts, in an attempt to protect themselves from the risks associated with uncertainty, says Robert Manning. "Japan pushed forward CPTPP without the US, the EU is frantically signing trade agreements, the EU-Japan trade pace is one important milestone of this trend toward a post-American trade system. This hedging extend to the security realm, as Trump's denigration of allies and alliances has raised growing doubts about US reliability."
The American Gambit: Did the US Really Quit the TPP?
Alexander Rogozhin
The United States' foreign trade priorities was the key issue during Donald Trump's electoral campaign, and quiting the Trans-Pacific Partnership was one of his main promises. On March 8, the Chilean Foreign Ministry reported that the new version of the agreement was signed without the United States' participation. Nevertheless, as Valdai club expert Alexander Rogozhin supposes, nothing prevents the US from signing an updated version of the agreement in the future – and that is what it is most likely to do.
The restructuring of the international trade system may be one of the harbingers of a future crisis. According to Russia's Minister of Economic Development Maxim Oreshkin, who participated in the Valdai Club discussion on the eve of the G20 summit in Japan, the coming crisis will be fundamentally different from the previous one in terms of causes and consequences. The period when trade was the driver of the global economy, and created new value added through the division of labour, is coming to an end, the minister explained. Under these conditions, there is a demand for a new model of globalization.
Oreshkin cited the growth of tariffs and restrictions as well as access to technology and education as being among the current risks to the global economy. When goods move freely, and technologies are prohibited, technological monopolization starts to emerge among the individual countries.
To break the deadlock in the trade dialogue between the US and China, one needs to understand the true causes of this conflict. Chief among these was Beijing's demand for a revision of the global geopolitical picture and China's place in it. Beijing and Washington have different views on how states should participate, given the new rules of the game.
China moved from being economically dependent on the West for technological development, to being in a state of competitive interdependence. China had turned the table and became a successful competitor. Faced with a rising economic power, the US then turned to making its own rules of international trade to work in its favour.
David Lane, Academy of Social Sciences (UK)
In order to preserve US trade advantages in the 21st century, the Trump administration is trying to maintain a certain level of excellence in high technology industries. These primarily include the production of engines and vehicles, as well as new materials and electronics, as well as genetic engineering and pharmaceuticals.
On May 15, 2019, the US authorities banned the Chinese telecommunications giant Huawei from selling its products on the US market and imposed strict restrictions on the sale of Huawei's products to American firms. This move further heightened tensions between the US and China.
Finance as an Operational Theater in US-China Trade War
Alexander Losev
This is how a global economic crisis can break out. We can only but hope that China has a number of other strategies and non-conventional moves up its sleeve in case the trade war escalates in order to achieve results without leaving the global economy in tatters.
There is every reason to believe that a technological war will serve as a continuation of the trade war. Russian President Vladimir Putin, speaking at the St. Petersburg International Economic Forum in June 2019, touched upon the situation surrounding the Chinese company Huawei and defined it as the "first technological war of the upcoming digital economy".
The Trump administration does not want US firms, especially those that are developing innovative or "breakthrough" technology, to depend on Chinese suppliers. This entails significant threats to the entire global economy.
"Decoupling will produce slower innovation," says Clifford Kupchan. "Much innovation has occurred through collaboration between US and Chinese firms. And megaprojects such as 5G development will occur more slowly and cost more in light of decoupling. Moreover, key parts of the global economy including the innovation and national security sectors will move toward 'partition'." A division of the world according to technological standards will begin.
The future will see a battle between the two nations for large third country markets, such as Brazil and Indonesia. Most nations and their firms – in the innovation and national security sectors – will align with either the US or China. Governments will seek reliable supply, and firms will seek to avoid producing for different standards regimes and to avoid exposure to tariff wars.
Global competition between Washington and Beijing will intensify regardless of progress in resolving trade issues. Communication and quantum technologies, artificial intelligence, robotics and bioengineering are areas in which the struggle for dominance in the global economy will unfold in the coming decades between the United States and China, according to Clifford Kupchan. It will be difficult, if not impossible, to avoid structural and dangerous competition.
As a result, the West will have to admit that the economic pole of the world has shifted to China and the interests of this giant cannot be ignored, since the cost of the conflict may be unacceptably high for all.
The present logic of world politics is that the Western powers have to acknowledge the rise of China and either include the country in the hegemonic core or be prepared for the emergence of a counter hegemonic power.
Is introducing tariffs or raising existing ones worth it? In any event, is it possible to win a trade war in the context of global peace? It has long been impossible to unequivocally say exactly which country a particular product is made in. In the context of globalization, production processes are widely branched out and may cover dozens of countries without reference to borders and distances. Building barriers to the free movement of goods and capital leads to costs for all parties. This has been proven repeatedly in history. Even the 25th President of the United States William McKinley, originally an ardent supporter of protectionism, finally came to understand that "trade wars don't bring profits" and that benevolence and friendly trade relations can help to avoid confrontation. After more than 100 years, his advice remains relevant and is worth listening to.
US-China Relations: Trade Wars or Countervailing Powers?
The Western powers have to acknowledge the rise of China and either include the country in the hegemonic core or be prepared for the emergence of a counter hegemonic power, writes David Lane, Emeritus Fellow of Emmanuel College, Cambridge University.
I recommend you this article on the Valdai Club website: https://valdaiclub.com/a/highlights/the-us-trade-war-with-china-can-there-be-a-winner/
Increasingly, one can hear that the 45th President of the United States, Donald Trump, who has made a name for himself for both his extravagance and his decisive action, has a propensity for trampling
USA, Europe and Containment of China Follow the link
China's Control Over its Pace with the US Follow the link
Berlin Continues to Look to Moscow and Washington for Major Strides in Nuclear Arms Control Follow the link

redpajama_set_name: RedPajamaCommonCrawl


text:
/*
 * Allocation tracking and reporting.  We maintain a circular buffer with
 * the most recent allocations.  The data can be viewed through DDMS.
 *
 * There are two basic approaches: manage the buffer with atomic updates
 * and do a system-wide suspend when DDMS requests it, or protect all
 * accesses with a mutex.  The former is potentially more efficient, but
 * the latter is much simpler and more reliable.
 *
 * Ideally we'd just use the object heap allocation mutex to guard this
 * structure, but at the point we grab that (under dvmMalloc()) we're just
 * allocating a collection of bytes and no longer have the class reference.
 * Because this is an optional feature it's best to leave the existing
 * code undisturbed and just use an additional lock.
 *
 * We don't currently track allocations of class objects.  We could, but
 * with the possible exception of Proxy objects they're not that interesting.
 *
 * TODO: if we add support for class unloading, we need to add the class
 * references here to the root set (or just disable class unloading while
 * this is active).
 *
 * TODO: consider making the parameters configurable, so DDMS can decide
 * how many allocations it wants to see and what the stack depth should be.
 * Changing the window size is easy, changing the max stack depth is harder
 * because we go from an array of fixed-size structs to variable-sized data.
 */
#include "Dalvik.h"

#define kMaxAllocRecordStackDepth   16      /* max 255 */
#define kNumAllocRecords            512     /* MUST be power of 2 */

/*
 * Record the details of an allocation.
 */
struct AllocRecord {
    ClassObject*    clazz;      /* class allocated in this block */
    u4              size;       /* total size requested */
    u2              threadId;   /* simple thread ID; could be recycled */

    /* stack trace elements; unused entries have method==NULL */
    struct {
        const Method* method;   /* which method we're executing in */
        int         pc;         /* current execution offset, in 16-bit units */
    } stackElem[kMaxAllocRecordStackDepth];

    /*
     * This was going to be either wall-clock time in seconds or monotonic
     * time in milliseconds since the VM started, to give a rough sense for
     * how long ago an allocation happened.  This adds a system call per
     * allocation, which is too much overhead.
     */
    //u4      timestamp;
};

/*
 * Initialize a few things.  This gets called early, so keep activity to
 * a minimum.
 */
bool dvmAllocTrackerStartup(void)
{
    /* prep locks */
    dvmInitMutex(&gDvm.allocTrackerLock);

    /* initialized when enabled by DDMS */
    assert(gDvm.allocRecords == NULL);

    return true;
}

/*
 * Release anything we're holding on to.
 */
void dvmAllocTrackerShutdown(void)
{
    free(gDvm.allocRecords);
    dvmDestroyMutex(&gDvm.allocTrackerLock);
}

/*
 * ===========================================================================
 *      Collection
 * ===========================================================================
 */

/*
 * Enable allocation tracking.  Does nothing if tracking is already enabled.
 *
 * Returns "true" on success.
 */
bool dvmEnableAllocTracker(void)
{
    bool result = true;
    dvmLockMutex(&gDvm.allocTrackerLock);

    if (gDvm.allocRecords == NULL) {
        LOGI("Enabling alloc tracker (%d entries, %d frames --> %d bytes)\n",
            kNumAllocRecords, kMaxAllocRecordStackDepth,
            sizeof(AllocRecord) * kNumAllocRecords);
        gDvm.allocRecordHead = gDvm.allocRecordCount = 0;
        gDvm.allocRecords =
            (AllocRecord*) malloc(sizeof(AllocRecord) * kNumAllocRecords);

        if (gDvm.allocRecords == NULL)
            result = false;
    }

    dvmUnlockMutex(&gDvm.allocTrackerLock);
    return result;
}

/*
 * Disable allocation tracking.  Does nothing if tracking is not enabled.
 */
void dvmDisableAllocTracker(void)
{
    dvmLockMutex(&gDvm.allocTrackerLock);

    if (gDvm.allocRecords != NULL) {
        free(gDvm.allocRecords);
        gDvm.allocRecords = NULL;
    }

    dvmUnlockMutex(&gDvm.allocTrackerLock);
}

/*
 * Get the last few stack frames.
 */
static void getStackFrames(Thread* self, AllocRecord* pRec)
{
    int stackDepth = 0;
    void* fp;

    fp = self->curFrame;

    while ((fp != NULL) && (stackDepth < kMaxAllocRecordStackDepth)) {
        const StackSaveArea* saveArea = SAVEAREA_FROM_FP(fp);
        const Method* method = saveArea->method;

        if (!dvmIsBreakFrame(fp)) {
            pRec->stackElem[stackDepth].method = method;
            if (dvmIsNativeMethod(method)) {
                pRec->stackElem[stackDepth].pc = 0;
            } else {
                assert(saveArea->xtra.currentPc >= method->insns &&
                        saveArea->xtra.currentPc <
                        method->insns + dvmGetMethodInsnsSize(method));
                pRec->stackElem[stackDepth].pc =
                    (int) (saveArea->xtra.currentPc - method->insns);
            }
            stackDepth++;
        }

        assert(fp != saveArea->prevFrame);
        fp = saveArea->prevFrame;
    }

    /* clear out the rest (normally there won't be any) */
    while (stackDepth < kMaxAllocRecordStackDepth) {
        pRec->stackElem[stackDepth].method = NULL;
        pRec->stackElem[stackDepth].pc = 0;
        stackDepth++;
    }
}

/*
 * Add a new allocation to the set.
 */
void dvmDoTrackAllocation(ClassObject* clazz, int size)
{
    dvmLockMutex(&gDvm.allocTrackerLock);
    if (gDvm.allocRecords == NULL)
        goto bail;

    Thread* self = dvmThreadSelf();
    if (self == NULL) {
        LOGW("alloc tracker: no thread\n");
        goto bail;
    }

    /* advance and clip */
    if (++gDvm.allocRecordHead == kNumAllocRecords)
        gDvm.allocRecordHead = 0;

    AllocRecord* pRec = &gDvm.allocRecords[gDvm.allocRecordHead];

    pRec->clazz = clazz;
    pRec->size = size;
    pRec->threadId = self->threadId;
    getStackFrames(self, pRec);

    if (gDvm.allocRecordCount < kNumAllocRecords)
        gDvm.allocRecordCount++;

bail:
    dvmUnlockMutex(&gDvm.allocTrackerLock);
}

/*
 * ===========================================================================
 *      Reporting
 * ===========================================================================
 */

/*
The data we send to DDMS contains everything we have recorded.

Message header (all values big-endian):
  (1b) message header len (to allow future expansion); includes itself
  (1b) entry header len
  (1b) stack frame len
  (2b) number of entries
  (4b) offset to string table from start of message
  (2b) number of class name strings
  (2b) number of method name strings
  (2b) number of source file name strings
  For each entry:
    (4b) total allocation size
    (2b) threadId
    (2b) allocated object's class name index
    (1b) stack depth
    For each stack frame:
      (2b) method's class name
      (2b) method name
      (2b) method source file
      (2b) line number, clipped to 32767; -2 if native; -1 if no source
  (xb) class name strings
  (xb) method name strings
  (xb) source file strings

  As with other DDM traffic, strings are sent as a 4-byte length
  followed by UTF-16 data.

We send up 16-bit unsigned indexes into string tables.  In theory there
can be (kMaxAllocRecordStackDepth * kNumAllocRecords) unique strings in
each table, but in practice there should be far fewer.

The chief reason for using a string table here is to keep the size of
the DDMS message to a minimum.  This is partly to make the protocol
efficient, but also because we have to form the whole thing up all at
once in a memory buffer.

We use separate string tables for class names, method names, and source
files to keep the indexes small.  There will generally be no overlap
between the contents of these tables.
*/
const int kMessageHeaderLen = 15;
const int kEntryHeaderLen = 9;
const int kStackFrameLen = 8;

/*
 * Return the index of the head element.
 *
 * We point at the most-recently-written record, so if allocRecordCount is 1
 * we want to use the current element.  Take "head+1" and subtract count
 * from it.
 *
 * We need to handle underflow in our circular buffer, so we add
 * kNumAllocRecords and then mask it back down.
 */
inline static int headIndex(void)
{
    return (gDvm.allocRecordHead+1 + kNumAllocRecords - gDvm.allocRecordCount)
        & (kNumAllocRecords-1);
}

/*
 * Dump the contents of a PointerSet full of character pointers.
 */
static void dumpStringTable(PointerSet* strings)
{
    int count = dvmPointerSetGetCount(strings);
    int i;

    for (i = 0; i < count; i++)
        printf("  %s\n", (const char*) dvmPointerSetGetEntry(strings, i));
}

/*
 * Get the method's source file.  If we don't know it, return "" instead
 * of a NULL pointer.
 */
static const char* getMethodSourceFile(const Method* method)
{
    const char* fileName = dvmGetMethodSourceFile(method);
    if (fileName == NULL)
        fileName = "";
    return fileName;
}

/*
 * Generate string tables.
 *
 * Our source material is UTF-8 string constants from DEX files.  If we
 * want to be thorough we can generate a hash value for each string and
 * use the VM hash table implementation, or we can do a quick & dirty job
 * by just maintaining a list of unique pointers.  If the same string
 * constant appears in multiple DEX files we'll end up with duplicates,
 * but in practice this shouldn't matter (and if it does, we can uniq-sort
 * the result in a second pass).
 */
static bool populateStringTables(PointerSet* classNames,
    PointerSet* methodNames, PointerSet* fileNames)
{
    int count = gDvm.allocRecordCount;
    int idx = headIndex();
    int classCount, methodCount, fileCount;         /* debug stats */

    classCount = methodCount = fileCount = 0;

    while (count--) {
        AllocRecord* pRec = &gDvm.allocRecords[idx];

        dvmPointerSetAddEntry(classNames, pRec->clazz->descriptor);
        classCount++;

        int i;
        for (i = 0; i < kMaxAllocRecordStackDepth; i++) {
            if (pRec->stackElem[i].method == NULL)
                break;

            const Method* method = pRec->stackElem[i].method;
            dvmPointerSetAddEntry(classNames, method->clazz->descriptor);
            classCount++;
            dvmPointerSetAddEntry(methodNames, method->name);
            methodCount++;
            dvmPointerSetAddEntry(fileNames, getMethodSourceFile(method));
            fileCount++;
        }

        idx = (idx + 1) & (kNumAllocRecords-1);
    }

    LOGI("class %d/%d, method %d/%d, file %d/%d\n",
        dvmPointerSetGetCount(classNames), classCount,
        dvmPointerSetGetCount(methodNames), methodCount,
        dvmPointerSetGetCount(fileNames), fileCount);

    return true;
}

/*
 * Generate the base info (i.e. everything but the string tables).
 *
 * This should be called twice.  On the first call, "ptr" is NULL and
 * "baseLen" is zero.  The return value is used to allocate a buffer.
 * On the second call, "ptr" points to a data buffer, and "baseLen"
 * holds the value from the result of the first call.
 *
 * The size of the output data is returned.
 */
static size_t generateBaseOutput(u1* ptr, size_t baseLen,
    const PointerSet* classNames, const PointerSet* methodNames,
    const PointerSet* fileNames)
{
    u1* origPtr = ptr;
    int count = gDvm.allocRecordCount;
    int idx = headIndex();

    if (origPtr != NULL) {
        set1(&ptr[0], kMessageHeaderLen);
        set1(&ptr[1], kEntryHeaderLen);
        set1(&ptr[2], kStackFrameLen);
        set2BE(&ptr[3], count);
        set4BE(&ptr[5], baseLen);
        set2BE(&ptr[9], dvmPointerSetGetCount(classNames));
        set2BE(&ptr[11], dvmPointerSetGetCount(methodNames));
        set2BE(&ptr[13], dvmPointerSetGetCount(fileNames));
    }
    ptr += kMessageHeaderLen;

    while (count--) {
        AllocRecord* pRec = &gDvm.allocRecords[idx];

        /* compute depth */
        int  depth;
        for (depth = 0; depth < kMaxAllocRecordStackDepth; depth++) {
            if (pRec->stackElem[depth].method == NULL)
                break;
        }

        /* output header */
        if (origPtr != NULL) {
            set4BE(&ptr[0], pRec->size);
            set2BE(&ptr[4], pRec->threadId);
            set2BE(&ptr[6],
                dvmPointerSetFind(classNames, pRec->clazz->descriptor));
            set1(&ptr[8], depth);
        }
        ptr += kEntryHeaderLen;

        /* convert stack frames */
        int i;
        for (i = 0; i < depth; i++) {
            if (origPtr != NULL) {
                const Method* method = pRec->stackElem[i].method;
                int lineNum;

                lineNum = dvmLineNumFromPC(method, pRec->stackElem[i].pc);
                if (lineNum > 32767)
                    lineNum = 32767;

                set2BE(&ptr[0], dvmPointerSetFind(classNames,
                        method->clazz->descriptor));
                set2BE(&ptr[2], dvmPointerSetFind(methodNames,
                        method->name));
                set2BE(&ptr[4], dvmPointerSetFind(fileNames,
                        getMethodSourceFile(method)));
                set2BE(&ptr[6], (u2)lineNum);
            }
            ptr += kStackFrameLen;
        }

        idx = (idx + 1) & (kNumAllocRecords-1);
    }

    return ptr - origPtr;
}

/*
 * Compute the size required to store a string table.  Includes the length
 * word and conversion to UTF-16.
 */
static size_t computeStringTableSize(PointerSet* strings)
{
    int count = dvmPointerSetGetCount(strings);
    size_t size = 0;
    int i;

    for (i = 0; i < count; i++) {
        const char* str = (const char*) dvmPointerSetGetEntry(strings, i);

        size += 4 + dvmUtf8Len(str) * 2;
    }

    return size;
}

/*
 * Convert a UTF-8 string to UTF-16.  We also need to byte-swap the values
 * to big-endian, and we can't assume even alignment on the target.
 *
 * Returns the string's length, in characters.
 */
int convertUtf8ToUtf16BEUA(u1* utf16Str, const char* utf8Str)
{
    u1* origUtf16Str = utf16Str;

    while (*utf8Str != '\0') {
        u2 utf16 = dexGetUtf16FromUtf8(&utf8Str);       /* advances utf8Str */
        set2BE(utf16Str, utf16);
        utf16Str += 2;
    }

    return (utf16Str - origUtf16Str) / 2;
}

/*
 * Output a string table serially.
 */
static size_t outputStringTable(PointerSet* strings, u1* ptr)
{
    int count = dvmPointerSetGetCount(strings);
    u1* origPtr = ptr;
    int i;

    for (i = 0; i < count; i++) {
        const char* str = (const char*) dvmPointerSetGetEntry(strings, i);
        int charLen;

        /* copy UTF-8 string to big-endian unaligned UTF-16 */
        charLen = convertUtf8ToUtf16BEUA(&ptr[4], str);
        set4BE(&ptr[0], charLen);

        ptr += 4 + charLen * 2;
    }

    return ptr - origPtr;
}

/*
 * Generate a DDM packet with all of the tracked allocation data.
 *
 * On success, returns "true" with "*pData" and "*pDataLen" set.
 */
bool dvmGenerateTrackedAllocationReport(u1** pData, size_t* pDataLen)
{
    bool result = false;
    u1* buffer = NULL;

    dvmLockMutex(&gDvm.allocTrackerLock);

    /*
     * Part 1: generate string tables.
     */
    PointerSet* classNames = NULL;
    PointerSet* methodNames = NULL;
    PointerSet* fileNames = NULL;

    /*
     * Allocate storage.  Usually there's 60-120 of each thing (sampled
     * when max=512), but it varies widely and isn't closely bound to
     * the number of allocations we've captured.  The sets expand quickly
     * if needed.
     */
    classNames = dvmPointerSetAlloc(128);
    methodNames = dvmPointerSetAlloc(128);
    fileNames = dvmPointerSetAlloc(128);
    if (classNames == NULL || methodNames == NULL || fileNames == NULL) {
        LOGE("Failed allocating pointer sets\n");
        goto bail;
    }

    if (!populateStringTables(classNames, methodNames, fileNames))
        goto bail;

    if (false) {
        printf("Classes:\n");
        dumpStringTable(classNames);
        printf("Methods:\n");
        dumpStringTable(methodNames);
        printf("Files:\n");
        dumpStringTable(fileNames);
    }

    /*
     * Part 2: compute the size of the output.
     *
     * (Could also just write to an expanding buffer.)
     */
    size_t baseSize, totalSize;
    baseSize = generateBaseOutput(NULL, 0, classNames, methodNames, fileNames);
    assert(baseSize > 0);
    totalSize = baseSize;
    totalSize += computeStringTableSize(classNames);
    totalSize += computeStringTableSize(methodNames);
    totalSize += computeStringTableSize(fileNames);
    LOGI("Generated AT, size is %zd/%zd\n", baseSize, totalSize);

    /*
     * Part 3: allocate a buffer and generate the output.
     */
    u1* strPtr;

    buffer = (u1*) malloc(totalSize);
    strPtr = buffer + baseSize;
    generateBaseOutput(buffer, baseSize, classNames, methodNames, fileNames);
    strPtr += outputStringTable(classNames, strPtr);
    strPtr += outputStringTable(methodNames, strPtr);
    strPtr += outputStringTable(fileNames, strPtr);
    if (strPtr - buffer != (int)totalSize) {
        LOGE("size mismatch (%d vs %zd)\n", strPtr - buffer, totalSize);
        dvmAbort();
    }
    //dvmPrintHexDump(buffer, totalSize);

    *pData = buffer;
    *pDataLen = totalSize;
    buffer = NULL;          // don't free -- caller will own
    result = true;

bail:
    dvmPointerSetFree(classNames);
    dvmPointerSetFree(methodNames);
    dvmPointerSetFree(fileNames);
    free(buffer);
    dvmUnlockMutex(&gDvm.allocTrackerLock);
    //dvmDumpTrackedAllocations(false);
    return result;
}

/*
 * Dump the tracked allocations to the log file.
 *
 * If "enable" is set, we try to enable the feature if it's not already
 * active.
 */
void dvmDumpTrackedAllocations(bool enable)
{
    if (enable)
        dvmEnableAllocTracker();

    dvmLockMutex(&gDvm.allocTrackerLock);
    if (gDvm.allocRecords == NULL)
        goto bail;

    /*
     * "idx" is the head of the list.  We want to start at the end of the
     * list and move forward to the tail.
     */
    int idx = headIndex();
    int count = gDvm.allocRecordCount;

    LOGI("Tracked allocations, (head=%d count=%d)\n",
        gDvm.allocRecordHead, count);
    while (count--) {
        AllocRecord* pRec = &gDvm.allocRecords[idx];
        LOGI(" T=%-2d %6d %s\n",
            pRec->threadId, pRec->size, pRec->clazz->descriptor);

        if (true) {
            int i;
            for (i = 0; i < kMaxAllocRecordStackDepth; i++) {
                if (pRec->stackElem[i].method == NULL)
                    break;

                const Method* method = pRec->stackElem[i].method;
                if (dvmIsNativeMethod(method)) {
                    LOGI("    %s.%s (Native)\n",
                        method->clazz->descriptor, method->name);
                } else {
                    LOGI("    %s.%s +%d\n",
                        method->clazz->descriptor, method->name,
                        pRec->stackElem[i].pc);
                }
            }
        }

        /* pause periodically to help logcat catch up */
        if ((count % 5) == 0)
            usleep(40000);

        idx = (idx + 1) & (kNumAllocRecords-1);
    }

bail:
    dvmUnlockMutex(&gDvm.allocTrackerLock);
    if (false) {
        u1* data;
        size_t dataLen;
        if (dvmGenerateTrackedAllocationReport(&data, &dataLen))
            free(data);
    }
}


Photo of an antique radio turned art lamp. Shot with the 50-140mm - long exposure, tripod collar loosened. Part of the exposure time the camera is stationary; other part camera gets spun inside the loosened collar.


Analysts have been talking up one of the leading online gambling ventures this past week, Sportingbet, in the wake of a measure to legalize the activity passing in a House Subcommittee earlier this month.
Sportingbet is another company that has been working with the U.S. Government as a means of trying to enter the lucrative gambling market should online gambling become legalized there.
Gambling911.com readers might recall back in 2006, the state of Louisiana issued an arrest warrant for Sportingbet Chairman Peter Dicks. Though he was apprehended at New York's JFK Airport, that state refused to extradite him to Louisiana. Dicks later settled with the state but Louisiana serves as just another example of additional obstacles at the local level that must be overcome regardless of whether federal legislation ultimately passes.
For the time being, analysts seem undeterred.


text:
markdhouse.com
Home Technology Diablo 2 vs. Diablo 2 Resurrected
Diablo 2 vs. Diablo 2 Resurrected
More than 20 years have passed since Diablo 2 was released; its new version, Diablo 2 Resurrected, arrived to please fans of the franchise with new features and functions. Detail the graphics and gameplay to find the main differences.
After 2 decades, technology has influenced this new version although it preserves the essence of the franchise. One of the things that has changed and that has had a lot of booms is the purchase and sale of Diablo 2 Resurrected items to improve the characters.
In addition to a digital marketplace to exchange, sell and buy Diablo 2 Resurrected items, there are several differences between the two games that you will be interested to know if you have not yet played the new version of the game and which we will talk about below.
Diablo 2 Resurrected is a remastered version of the original version, so most of its differences are related to graphical and technical improvements, both in its image and gameplay.
Graphical improvements
In this version of Diablo 2 Resurrected there is a significant improvement in terms of graphics. It is now possible to appreciate new textures, dynamic lighting, much faster FPS, and several scenes with 4k resolution.
The evolution from 2D to 3D images is one of the improvements that players will immediately recognize. Lighting and shadow effects are part of the most important change in this version, as announced by Blizzard's president.
However, to prevent fans from being reluctant to so many changes, the developers took care of applying the 3D effects over the Diablo 2 graphic code so that the difference doesn't cause such a different impact among fans.
Although the new effects maintain the original mechanics of the previous version, the combination of this with the improvement in the image has resulted in something very positive according to the perception of the game's fans.
The game's personal grid has been increased from 6×8 to 10×10, with a much larger window and a tab to share Diablo 2 Resurrected items with other players.
This version of the game features subtle but important improvements to the user interface and the way statistics are read during gameplay.
With Diablo 2 Resurrected, players will have the opportunity to use more commands, shortcuts, or hotkeys in the PC version of the game. These keys will allow them to perform in-game actions much faster and easier.
The developers have added a cybersecurity system to the game to protect players from viruses, hackers, and malicious programs.
The most important thing about Diablo 2 Resurrected is that although it presents notable changes in the quality of the graphics and gameplay, after 20 years this version maintains the atmosphere of the original game to please longtime fans and show new players the true essence of the game.
The best way to know if this new version of the franchise is really worth it is to play it, make sure you have all the technical requirements for Diablo 2 Resurrected to run correctly on your computer.
Previous articleHow to Reset a Laptop Battery That Isn't Being Detected or Charging?
Next articleThe Use of 3D Printers in Todays Society
Darlene is a woman with a love of all things technological and decorative. She spends her days finding new ways to merge the two worlds together, and has made a name for herself in the process. Her work has caught the eye of many in the tech industry, and she is often consulted for her expertise. Darlene also enjoys spending time with her family and friends, and loves to decorate her home in her free time.
Do you konw how pressure washer work for your job?
The Use of 3D Printers in Todays Society
How to Reset a Laptop Battery That Isn't Being Detected or Charging?
The 12v power bank is the perfect accessory
Printing Your Customized Planner At Home
Attractive Ways to Use Custom Acrylic Charms
What is an electric pergola and what are its benefits?
What to Know About Wholesale Laser Marking Machines
4 Common Uses of Quality Linear Bearings
Lifestyle December 4, 2022
YouTube Music continues glacial development pace, adds background playback
Tech August 5, 2021
What Gadgets do You Need to Set Up a Home Office?
Technology November 15, 2021
Factors to Consider Before Choosing a Crushing Equipment
Technology February 4, 2022
We brings to you the latest and most popular news related to every kind of tech. Our platform contains news related to Technology.
Darlene - December 4, 2022 0
The 12v power bank is the perfect accessory for someone who needs to charge their phone often. It will enable you to top up...


Allied Development Corp.packaging industry studies, research, consulting, economic, and environmental analysis.
Le Mac Enterprises Pty Ltd.
Procter & Gamble Technology Ltd. Co.
Pet Food in Pouches vs Trays - U.S.A.
Allied Development provides unrivaled packaging intelligence. The company's focus on the packaging industry makes it possible to provide the best available products and services. As a result, Allied Development serves more than 500 clients comprising the leaders of the packaging industry from around the globe.
Allied Development has functional practices for a wide variety of activities in the packaging supply chain. Some of the most important include economic analysis, life cycle analysis, operations, sales & marketing, sustainability, strategy, technology, and value chain.
If you are a raw material producer, packaging producer, consumer product company, equipment supplier, or a retailer, Allied Development already understands your suppliers, your products, your customers, your processes, and your markets. Shouldn't you be using Allied Development products and services for the most effective answers to your packaging intelligence needs and the best possible value for your investment?
Best known for being the most reliable source for packaging industry intelligence, Allied Development offers comprehensive consulting services.
Allied Development researches, writes, publishes, and markets multi-client studies for the packaging industry. You can investigate and order these packaging studies on this web site.
Allied Development Corp. has developed powerful and unique interactive services for the packaging industry. These include the world's best tools for economic and environmental analysis. You can investigate and purchase these subscription services on this website.
Allied Development designs new packages, re-designs existing packages, analyzes new and existing designs, and provides detailed comparisons of competitive packaging.
Allied Development designs, develops, and maintains the software and content for packaging centric web applications.
Contact Us Copyright 1997 - 2019 Allied Development Corp.


text:
Q: function broke after updating PHP I have a little problem with a function which doesn't seem to fully work in new php version and I receive

Notice: String offset cast occurred in D:\xampp\htdocs\decode\bencoded.php on line 266
  Notice: String offset cast occurred in D:\xampp\htdocs\decode\bencoded.php on line 270

Here is my function:
function bdecode($s, &$pos=0) {
  if($pos>=strlen($s)) {
    return null;
  }
  switch($s[$pos]){
  case 'd':
    $pos++;
    $retval=array();
    while ($s[$pos]!='e'){
      $key=bdecode($s, $pos);
      $val=bdecode($s, $pos);
      if ($key===null || $val===null)
        break;
      $retval[$key]=$val;
    }
    $retval["isDct"]=true;
    $pos++;
    return $retval;

  case 'l':
    $pos++;
    $retval=array();
    while ($s[$pos]!='e'){
      $val=bdecode($s, $pos);
      if ($val===null)
        break;
      $retval[]=$val;
    }
    $pos++;
    return $retval;

  case 'i':
    $pos++;
    $digits=strpos($s, 'e', $pos)-$pos;
    // Proger_XP: changed (int) -> (float) to avoid trimming of values exceeding
    //            signed int's max value (2147483647).
    $val=(float)substr($s, $pos, $digits);
    $pos+=$digits+1;
    return $val;

//  case "0": case "1": case "2": case "3": case "4":
//  case "5": case "6": case "7": case "8": case "9":
  default:
    $digits=strpos($s, ':', $pos)-$pos;
    if ($digits<0 || $digits >20)
      return null;
    $len=(float)substr($s, $pos, $digits);
    $pos+=$digits+1;
    $str=substr($s, $pos, $len);
    $pos+=$len;
    //echo "pos: $pos str: [$str] len: $len digits: $digits\n";
    return (string)$str;
  }
  return null;
}

i understand that i get a warning in the new php, but i have no idea how to fix it.
line 266 (before case 'd'):      switch($s[$pos]){
line 270 (after case '1'):        while ($s[$pos]!='e'){

A: i think the simplest solution to solve this should be to disable the notices using the follwing code:
// Report all errors except E_NOTICE
error_reporting(E_ALL ^ E_NOTICE);

You may want to do this if you are sure that the code always returns the correct result and the notice doesn't matter.
Why is the notice shown?
As far as i can see, the notice is shown because you try to access the strings offset not by an integer but by an float value.
The key lines of your code are these:
$len=(float)substr($s, $pos, $digits);
$pos+=$digits+1;
$str=substr($s, $pos, $len);
$pos+=$len;

$len is casted to float and added to $pos. The result is that $pos is converted to float after doing this. No problem. But you will get the notice if you use $pos later to access the offset of your string because it is not an integer any more:
//line 266 (before case 'd'):
switch($s[$pos]){

//line 270 (after case '1'):
while ($s[$pos]!='e'){

maybe you want to solve it by convert $pos to int explecit like this:
//line 266 (before case 'd'):
switch($s[(int)$pos]){

//line 270 (after case '1'):
while ($s[(int)$pos]!='e'){

The result of your function should be the same and the notice should been gone.

redpajama_set_name: RedPajamaStackExchange


text:
Preventing Millions of Strokes and Heart Attacks Doesn't Have to Come with the Risk of Life-threatening Bleeding
Verseon's scientific journey to highly promising therapeutic candidates for cardiovascular disease appears in European Journal of Medicinal Chemistry
December 14, 2022 — Verseon announced that the European Journal of Medicinal Chemistry has published a paper describing the company's groundbreaking research that led to promising novel drug candidates for cardiovascular disease. Cardiovascular disease is the leading cause of death and disability in the world. Hundreds of millions of patients worldwide need anticoagulants to prevent clots that lead to life-threatening events like strokes, heart attacks, and pulmonary embolisms.
However, currently prescribed so-called novel oral anticoagulants (NOACs) carry well-documented risks of major bleeds, which in many cases require hospitalization and can be life threatening. Developing drugs that prevent unwanted clots while preserving the body's ability to stop excessive bleeding is the "Holy Grail" of anticoagulant drug programs. Verseon is developing a new generation of anticoagulants called PROACs (Precision Oral Anticoagulants) that address this very large unmet medical need.
The peer-reviewed paper documents how Verseon's medicinal chemistry team optimized various physicochemical properties — including potency, selectivity, and in vivo stability — of compounds from a novel class called N-acylpyrazoles. The resulting selective reversible covalent thrombin inhibitors are highly effective at preventing clots in animal models. Yet unlike NOACs, they do not inhibit thrombin-mediated activation of platelets, a critical step to stop injury-induced bleeding. Because of their unique mechanism of action, Verseon's drug candidates have shown far lower bleeding risks in animal models.
"We are pleased to document the great work and insights that went into the discovery and development of this novel class of direct thrombin inhibitors with unique pharmacology," commented Dr. David Kita, Verseon's Chief Scientific Officer. "We look forward to describing further work behind the development of our first PROAC clinical candidate (VE-1902), which we expect will address a significant unmet medical need affecting a very large number of cardiovascular patients worldwide."
The scientific paper, entitled "Discovery of novel N-acylpyrazoles as potent and selective thrombin inhibitors," is available at https://doi.org/10.1016/j.ejmech.2022.114855.


Tickets for our away Premier League match against Sunderland on Saturday will be on sale from turnstile 71 at the stadium with cash only admission priced at £29, from 1.30pm.
For those fans that have already booked on the supporters coaches please note that they depart from Selhurst Park at 6.30am.
CLICK HERE for details of other games that are currently on sale.


Matt Damon in "Promised Land"
UPDATED: "Promised Land," HBO doc "Gasland Part II" and Hayden Panettiere also were feted at the Environmental Media Association event.
Matt Damon and his fracking drama Promised Land received separate honors at Saturday's Environmental Media Awards, held on the Warner Bros. lot.
The Environmental Media Association event honored Promised Land in the feature film category, while Damon received the EMA Ongoing Commitment Award for his environmental work. Damon is a co-founder of Water.org and has promoted access to safe water and sanitation around the world.
Netflix's House of Cards won in TV drama category, while ABC's Last Man Standing won for TV comedy. HBO's Gasland Part II was won for documentary film. Other honorees included Hayden Panettiere (EMA Futures Award), Anna Getty (EMA Green Parent Award) and Bill McKibben (EMA Lifetime Achievement Award).
The Environmental Media Association was founded in 1989 by Cindy and Alan Horn and Lyn and Norman Lear. The nonprofit organization seeks to use the power of celebrity and the media to promote sustainable lifestyles. Industry decision-makers and talent alike, including Malin Akerman, Julie Bowen, Mehcad Brooks, Josh Henderson, Amy Smart, Darby Stanchfield and James Van Der Beek, showed support for the organization at Saturday's event.
Glee's Darren Criss opened the outdoor awards show with an acoustic version of "What a Wonderful World" that led into an evening of honoring celebrities and entertainment environmentalists for their dedication and activism for green efforts.
The Nashville starlet has consciously made activism evident in her personal life. Most notably remembered for surfing in a peaceful protest at the age of 18 to stop an annual dolphin slaughter in Japan, Panettiere and five fellow protestors were forcefully chased off with boathooks and blockaded with propellers by fisherman.
The evening concluded with a celebratory dinner, served with compostable dinnerware, a silent auction and eco-friendly giveaways for guests.
Visit the origination online at www.ema-online.org and www.facebook.com/EMAOnline.
Find the complete list of nominees below, with winners in bold and offset by an asterisk.
About: Astronauts who have seen the Earth from space have often described the 'overview effect' as an experience that has transformed their perspective of the planet and mankind's place upon it, and enabled them to perceive it as our shared home, without boundaries between nations or species.
About: Animated short depicting humankind's ongoing destruction of our natural resources throughout history.
About: Singing puppets put pressure on President Obama to act on climate change with a smart and unique plea for the planet.


Keeping track of which entities and accounts are driving exposure definition is imperative.
Knowing you have the right data is only winning half the battle.
With modern, automated currency risk management programs becoming the norm – especially programs that monitor exposure on a weekly or daily basis – it is imperative that organizations be able to trust the exposure data they have.
FiREapps exposure data integrity solutions are designed to help treasury and accounting teams identify possibly erroneous posting that could distort what is recorded in the FX gain/loss accounts.
If integrity issues are detected in the ERP system, FiREapps automatically filters those problematic accounts out of the exposure definition.
A powerful way to incorporate historical trends, anticipated sales and expenses, and an array of forecasting algorithms.
FiREapps automated balance sheet exposure forecasting solutions help organizations automatically generate a forecast of balance sheet exposures.


What about a sorting-on-place-filter in the portfolio's?
This is about a sorting filter in the portfolio's, so you can filter on place. So all winning entries in a row, than second places et cetera. Sorting portfolio on votes is nice, but on places is more relevant I think. Back in the days (2005/2006) we had like 60/80 entries each day, a winner had like 70/80 votes. Some 1st/2nd/3rd etc places are way back in the portfolio's. With a place filter you don't have to search for all your winning entries, 2nds etc.
And if I find out you go near my locker, I swear to God I'll give you a karate chop right in the head.
You can sort by PREFERENCE. You can put all your 1st, 2nd, 3rd, etc, in the order you want them to be viewed. Check out my portfolio.
Can you tell me how you did this?
Keep moving the down arrow (or up arrow depending on how you want an image to move) until it moves to the next row or next page.
Well you asked for a solution. The only one I have! keep working!
They never update the site with new ideas.
Ohh, well it can't move up anymore LOL, If your referring to the 2nd and third lines on the first page, move the right pic on the line above DOWN! it will replace the left pic on the 2nd (or 3rd) line below.
I need Portfolio's place filter!!!
Lazy people!!! The world is full of Lazy people!!


text:
Module 2 Feminist research about education and gender References
Athanasiou, A. (2006). Introduction. In A. Athanasiou (ed) Feminist Theory and Cultural criticism (pp 13-140) Anthens: nisos.
Cameron, D. (2018). Feminism. London: Profile Books
Chronaki, A. (2013c) Gender and Technology in Education: Synthesis of Literature Review and Development of a Methodological Framework. Centre for the Greek Language
Dillabough, J.A. & Arnot, M. (2001). Feminist Sociology of Education: dynamics, Debates and Direction. In J. Demaine (ed) Sociology of Education Today (pp. 30-48). Berlin: Springer.
Deligianni- Kouimtzi, V. (2007). Modern Research for Youth and Gender in the School Context. In V. Deligianni- Kouimtzi & D. Sakka (eds) from Αdolescence to Adulthood (pp. 19-48) Athens: Gutenberg.
Deligianni, V. & Sakka, D (2003). Αdolescent Identities of Gender. Investigating the factor of Gender in the School Context. Athens: K.E.th.I
Dimakopoulou, F. (2019). Feminist Theories and Education. C.V.P. of Pedagogy and Education. Accessed 24 April 2021 from https://bit.ly/32MFjyt
Maropoulou, M. (2016a). Introduction to problematic Feminism and Law. In Rethimniotaki, E. Maropoulou, M., Tsakiraki, C. (eds) Feminism and Law (pp12-19). Athens: HEALink. available from http://hdl.handle.net/11419/6178
Maropoulou, M. (2016b). The Second Feminist Wave: Differentia Feminism or Feminism of Difference. In In Rethimniotaki, E. Maropoulou, M., Tsakiraki, C. (eds) Feminism and Law. (pp. 44-51). Athens: HEALink. available in: http://hdl.handle.net/11419/6180 .
Maropoulou, M. (2016c). Third Feminist Wave: The Post-modern or Post-structural Feminism. In Rethimniotaki, E. Maropoulou, M., Tsakiraki, C. (eds) Feminism and Law (pp. 121-133). Athens: HEALink. Available in : http://hdl.handle.net/11419/6185
Moschovakou, N. & Dani, S. (2018). Discriminations due to Gender Identity and Sexual Orientation.: Data, Institutional Framework and Qualitative Research. Athens: K.E.th.I
Sifaki, E. (2015). Gender Studies and Literature. Athens: HEALink.
Rethimniotaki, E. & Maropoulou, M. (2016) First Feminist Wave. In Rethimniotaki, E. Maropoulou, M., Tsakiraki, C. (eds) Feminism and Law (pp. 20-43). Athens: HEALink. Available in: http://hdl.handle.net/11419/6179
Ropers-Huilman, R., & Winters, K. T. (2011). Feminist research in higher education. Journal of Higher Education, 82(6), 667–690. http://dx.doi.org/10.1353/jhe.2011.0035
St. Pierre, E.A. (2000). Poststructural feminism in education: An overview. International Journal of Qualitative Studies in Education, 13(5), 477-515.
Thompson, Α. (2011). Four Feminist Theories on Gender and Education. Curriculum Inquiry, 33(1), 9-65.
Tsaousi- Chatzi, A. (2015). Feminism and Law: Modern Trends of the American Feminist Law Thought. Science and Society: Political and Moral Theory Review, 1, 97-121. doi: https://doi.org/10.12681/sas.686
Karakoulaki, M. (2013) The three Feminist Waves and the Islamic Feminism. KE.M.ME.P., 2.
Lymperi, K. (2010). The Gendered Identities Game. Accessed 27 December 2016 from http://www.24grammata.com/wp-content/uploads/2014/03/Judith-Butler
Tsakistraki, C. (2016). Second Feminist Wave: The French Feminism of Difference. In Rethimniotaki, E. Maropoulou, M., Tsakiraki, C. (eds) Feminism and Law (pp. 78-93). Athens: HEALink. Available from http://hdl.handle.net/11419/6182
Pechtelidis, G. (2012). Sociology of "Masculinity" at School. In S. Athanasopoulou- Cypriou, P. Voutsina, M. Kotzampazi, M. Nikiphoridis, R. Pothitaki (eds) Look with Different Eyes, See Different. Gendered Approaches in Education (pp. 197-216). Athens: Moraiti School.
Kokogiannis, K. (2007). The Understanding of M. Foucault's philosophy by the Current (Post- modern) Feminist Thought. In G. Papageorgiou (ed). Gendered Transformations (pp. 19-31). Rethymno: University of Krete.
Wittig, M. (2006). You are not Born a Woman. in Athanasiou, A. (ed). Feminist Theory and Cultural Criticism. (pp. 409-422) Athens: nisos.
Kantaraki, M., Pagkaki, M. & Stamatelipoulou, E. (2008). Professional Segregation (Vertical and Horizontal): Discriminations and inequalities in Education against Women. Athens: K.E.th.I.
Karalis, D. (2013). Instead of the Freedom of the Gendered Subject, Freedom by the Gendered Subject. The Post-modern Feminism of Judith Butler. Theseis: Quarterly review, 122. accessed 27 December 2016 from http//www.theseis.com/index2.php?option=com_content&task=view&id=1216
Frosi, L. Kouimtzi, E. & Papadimou, C. (2001) The Factor of Gender and the School Reality in Primary and Secondary Education. Athens: K.E.th.I.
Retrieved from: stock.adobe.com


The AIT (Advanced Intelligent Tape ) format is Sony's latest innovation in fast access high density tape recording technology.
AIT forms the basis of Sony's new SDX series of tape drives and media. The ability to store large amounts of data and retrieve information quickly is critical in today's applications. Tape storage and retrieval has been revolutionized by Sony's award-winning Memory in Cassette (MIC architecture).
The MIC consists of a memory chip built into the data cartridge which holds the system's log and other user-definable information. Applications that benefit from MIC's capabilities include hierarchical storage management, video server, film editing and real-time data acquisition.
If you have AIT tape that you are replacing or want to dispose of, please contact us today! We can give you cash for your obsolete and used tape!