Russia is interested in major war in Middle East. The massive missile and drone attack by Iran on Israel on the night of April the 13th to the 14th instantly became the top priority of the international agenda. With support from a number of Western and Arab countries, Israel's air defense successfully handled the attack with minimal damage. Now in the Middle East and beyond, all eyes are on Israel's response. The country's leadership has assured that a response will come, but its format and timing remain secret. The retaliation will come at a moment when Iran least expects it, says Arkady Milman, Israeli diplomat who served as ambassador to Moscow from 2003 to 2006 and previously led Israeli diplomatic missions in Azerbaijan and Kazakhstan. Milman currently heads the Russia Studies Program at the Israeli Institute for National Security Studies. Diplomat told RBC Ukraine that following the Hamas terrorist attack on Israel last October and after Russian authorities and propagandists clearly outlined their position in that story, Russia has become a close ally of Iran, making it clear to the Israeli population that Russia is not a friendly country for them. However, Israel's political and military establishment is only just realising this. According to him on October the 7th, Russia unequivocally took an anti-Israel pro-Hamas position 100%. It became clear to the entire population, all civilians, everyone began to understand that Russia is an absolutely unfriendly country. If a harsh response by Israel is potentially chosen, for example, a strike on Iranian positions, this exchange of attacks between Iran and Israel turn into a full-scale war involving many countries in the region. Arkady Milman says that all of this could escalate into a large regional war, if not bigger than that. And by the way, Russia is very interested in this. These strikes by Iran on Israel were beneficial for them now because everyone forgot there was a war in Ukraine. He added. A total of 400-500 missiles and drones will be fired at Israel from Iran, Iraq, Syria, Southern Lebanon and the Vuthis, ABC News outlet reported, citing an unnamed US official. The source said that the bulk of missiles will be launched form the territory of Iran. The drones are the same kind used in Ukraine, according to the source. Meanwhile, US media also report that President Joe Biden will address the nation from the Oval Office today. According to the latest reports, Biden has already arrived in the Oval Office. Israeli Defense Forces reported on Saturday night that Iran launched drones and cruise missiles at Israel. Amid the escalation of the tension in the region, Egypt, Yemen, Iraq closed their airpaces. Meanwhile, US Air Force fighter jets have been scrambled over Iraq and Jordan to combat Iranian drones, the Al-Kahirah Alec Bariat TV channel reported.


Item Number SCP Safe-J Object Class Safe, Euclid and Keter Special Containment Procedures The dangers and difficulties of the safe and unsafe aspects of SCP Safe-J are still being determined. Please use your safest judgment when dealing with SCP Safe-J-A, the safe component of SCP Safe-J, SCP Safe-J-B, the Euclid component of SCP Safe-J, and SCP Safe-J-C, the Keter component of SCP Safe-J. Description SCP Safe-J is a set of three safes, all brand safes, which are visually identical to each other. SCP Safe-J-A is a safe safe, SCP Safe-J-B is a Euclid safe, and SCP Safe-J-C is a Keter safe. Whilst the safety of each safe is implied by its Object Class, whether safe or not safe, the practical safety of each safe is outlined below. The safe safe is safe for testing, it needs no extensive containment. The Euclid safe is safe so long as it's not near the Keter safe, in which case only the safe safe can return the Euclid safe back to safe. The Keter safe is never safe. Its in progress containment procedures attempt to keep this safe as safe as the safe safe, but the Keter safe will never be as safe as the safe safe or the Euclid safe. Current staff assigned to the SCP Safe-J safes are Dr. Safe, Dr. Euclid, and Dr. Keter. Dr. Safe is in charge of the safe safe, Dr. Euclid is in charge of the Euclid safe, and Dr. Keter helps with both the safe safe and the Euclid safe. The Keter safe is overseen by all three doctors, and it takes the combined efforts of Dr. Safe, Dr. Euclid and Dr. Keter to ensure that the Keter safe is as safe as Dr. Safe safe safe and Dr. Euclid's Euclid safe. Recently, it's been found that macro-scale microwave emissions into Euclidean space by the Keter safe can heat up and thaw out food, drink, and other groupings of items that would be considered a meal. The meals thawed by the Keter safe's ability to thaw meals are designated SCP Safe-J-D and could be used to keep the Keter safe safe, giving the thawed meals a thaw meal object class. Thawed meal thawed meals are safe to use on Dr. Safe Safe Safe, Dr. Euclid's Euclid Safe, and Dr. Safe Euclid and Keter's unsafe Keter safe. The safety of the doctor's Keter safe's Euclidean intrusion of macro-scale microwave emissions and the safety of thawed meals thawed by its ability to thaw meals have been confirmed to be safe but not safe by Dr. Safe, Dr. Euclid and Dr. Keter. Safe to say, when all components of SCP Safe-J are safely contained, Dr. Safe's safe safe, Dr. Euclid Euclid safe, Dr. Safe Euclid and Keter's Keter safe, and the safe thaw meal thawed meals caused by the safe but not safe macro-scale microwave emissions into Euclidean space by the doctor's safe Euclid and Keter's unsafe Keter safe. The whole entity of SCP Safe-J is considered safe.


Okay, this is James P. Madonna Megalife 21 consumer advocate and progressive Talk show host and I am here on my second office. I just left the Dollar Tree Actually, I just left the Chinese takeout over there and that strip mall for my lunch special Then I went to the Dollar Tree Over there is Another strip mall Yeah, welcome to America with all these damn strip malls Heaven forbid we should have actual foliage vegetation Beautiful trees, you know like the old days now America is like one big gigantic strip mall and parking lot over here.   Give me a give me a break blink for a gymnasium. What do you think?  It has to be them the owners or the founders last name mr. Blank as long as Isn't that weird? I dropped. Oh here it is The the the primary topic of the video I dropped it on the floor Always keep one of these in your car Commodore Jeff Zambello. This is a new This is a new one by placers called right angle. It's supposed to Be ideal for cleaning the front and back teeth. It is the modern High-tech replacement for dental floss. I've used placers, I mean the standard one For Couple years now and It is superior and it is much faster and easier than dental floss And the reason why I'm saying keep a package of one of these in the car Which cost me only a dollar? at the Dollar Tree is Simply because if you're out and about and you get something to eat and you have a piece of food Stuck in between your teeth and it's driving you crazy and and you feel very uncomfortable And you're trying to get it out and you can't get it out.   So that's it That's it placers Never leave home without it keep it in your glove compartment Because you never know when you might need it. All right. All right Today's lunch special was let's see. What did I get shrimp with lobster sauce? with roast poke fried lice and I Think they gave me an egg roll and of course I always asked for Canada dry ginger ale as my Soda my beverage It's the lesser of the of all the soda evils


It feels amazing. You know when I was applying, I really thought maybe I might win and when you win, it's an out of the world feeling. To be recognized by so many people in the industry, I don't think it gets better than this. Absolutely. It is completely number driven. If you talk about branding, they want numbers at the end. If there is an idea coming in front of them, it's number driven. I mean, after all, I'm with Performix. The name itself suggests that anything we do is going to have to do with numbers. So yes, I completely agree that it's a number driven industry now.


If you drove through downtown Brainer this evening, you may have noticed a message from people on the corner of Washington and six streets. The Brainer Area Coalition for Peace held a peace vigil this evening to demand an immediate end to U.S. participation in the wars in the Middle East and Afghanistan. The group is also against U.S. drone assassinations, increasing the military budget and the anti-environmental stance of the Trump administration. Despite the political leaning of the group, the central message of the rally was peace. What we're asking for is that the United States sees its involvement in the wars in the Middle East and Afghanistan, pull out all the troops, stop bombing, and all drone assassinations. Drone assassinations are extra-judicial killings. You know, they're illegal under international law, illegal under the U.S. Constitution. After the vigil, the demonstration moved to Gregory Park for a picnic and informal discussion on the issues. If you've enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland Public Television.


This talk is part of an online undergraduate course on the theory of numbers, and will be about RSA cryptography. So cryptography, crypt means hidden, and graphy means writing, so cryptography is just hidden writing. In other words, basically you want to send someone a coded message that other people can't read it. So early in the 20th century some number theorists like Hardy used to kind of almost boast about how useless number theory was. And RSA cryptography turns out to be a rather major practical application of a number theory, like a lot of internet commerce depends on this and similar things. So the basic problem is as follows. You have two people who are traditionally called Alice and Bob, and they wish to communicate with each other over the internet or a phone or whatever. They want to send each other messages they don't want someone to read. And in between them is someone traditionally called Eve, for Eve's dropper I guess, who reads all the messages between Alice and Bob. And Alice and Bob do not wish Eve to know what they're saying. For example Alice might be you, and Bob might be the owner of some internet store, and Alice is sending her credit card number and doesn't want Eve to know what it is. Well there are several methods of doing this. So we could use a code book. So Alice and Bob could share a code, so AAAA means something and so on. And this was a method used by navies in the 20th century. So the British and German navies, all the ships and submarines would carry these huge code books telling them what various sequence of letters really meant. Well code books are a little bit cumbersome. The Germans had something called an enigma machine, which was a very ingenious electromechanical device for turning messages into apparent gibberish. A third method is a one-time pad. So a one-time pad consists of a sequence of random letters or numbers that both Alice and Bob have. They have the same one-time pads and Alice simply adds the garbage in the one-time pad to her message and Bob subtracts it again. And if the one-time pad is random, this is completely secure. Well these methods all have various problems. So code books and enigma could actually be broken by code breaking. In fact the British broke the German codes, which has been very well publicised. But British keep rather more quiet about the fact that Germans also broke the British naval codes, but whatever. One-time pads are very secure but they're really cumbersome. In actually making one-time pads used to be a really tedious process. It was used for very high-secure communications. For example, the Russians tended to use one-time pads for their spies in the United States. Obviously it has a bit of a disadvantage that if you're caught and have a one-time pad on you, it's a little bit difficult to explain away. But all these methods have the following problem. We need to transfer something from Alice to Bob. I mean you need to transfer a code book or an enigma sheen or a one-time pad or whatever. And this is really inconvenient. If you're buying something off the internet, you don't want to have to take a code book or something along with you all the time. Or if the internet seller had to send all customers a code book, this would be really inconvenient. So the problem is how can Alice and Bob communicate without actually sending each other a physical object? So they're only allowed to communicate over a telephone line or whatever where Eve can listen to everything either of them says. Well, a method of doing this was found by Diffie and Hellman. At least assuming the existence of something called a trapdoor function. So what is a trapdoor function? Well a trapdoor function, you know, a trapdoor is sort of one way. You can go through it easily one way but can't go through it the other way. So a trapdoor function is a function s from some set to some set s. So f is, first of all, it's easy to compute. Second, it has the property that the inverse is hard to compute unless you have a secret key. Well, if you can compute f, why can't you compute the inverse just by trying all elements of s and applying to f to them to see what answer you get? Well, in order for the inverse to be hard to compute, s needs to be very large. So s has to be some large set. It might typically have say 10 to the 100 or maybe 10 to the 1000 elements. So it's completely impractical to find the inverse of f by checking every element of s to see what it is. And s might be something like say integers from 1 to 10 to the 100 or something. So you can encode messages by selecting an element of this set s. And then a and b can communicate as follows. So Alice chooses some trapdoor function f a, I'll call it Alice's trapdoor function, and publishes it. So both Eve and Bob know Alice's trapdoor function. Well, Bob uses f a to send messages to Alice. So what Bob does is he takes a message, applies f a to it and sends that to Alice. And Eve can read f a of the message but can't decode it because this function f a is very hard to invert. It needs massive amounts of computing power. On the other hand Alice can invert it and find the message because she's got the secret key that allows you to invert the function f. So that allows Bob to send secret messages to Alice. Well Alice sends secret messages to Bob in the same way that Bob chooses Bob's trapdoor function fb and publishes it. And Eve is then stuck unless they have a computer that allows them to sort of sort through 10 to 1000 cases or something that they can't read the messages. Well there's a problem here. We need to actually have a trapdoor function. I better say first of all there's a difference between a trapdoor function and a secure hash function. So trapdoor functions and secure hashes are very similar. They're both functions from some set s to itself that are easy to compute and the inverse is hard to compute. Well the difference between a trapdoor function and a secure hash is the trapdoor function has a secret key that allows you to invert it. But a secure hash doesn't. So there are actually several common applications of a secure hash I'll just mention. So here are some applications of the hash function. There's one very one that's been in the news a lot recently which is blockchain. So a blockchain is a series of blocks each of which contains a secure hash of the previous block. And this makes it this means that if you know each block you can verify all the previous blocks by knowing the secure hash because it's very hard to fake the secure hash. Another one is in Bitcoin. Mining a Bitcoin is sort of related to inverting a secure hash function. We want to find s so that f of s is in some small set. So this is very difficult to do and takes a lot of computation. You just have to keep on searching for all s until you find something f of s in that small set. So that's roughly what Bitcoin mining is. It's essentially trying to invert a secure hash function. There's another application for this which is password files. In the very early days computers would just store passwords in open text. And this was a real problem if a hacker actually found the password file then they would know everybody's password. So what you do is you hash all the passwords with a secure hash function. And then in order to check someone's password you just hash the password they've entered and see if it's the same as the hash you've got. And since the hash function is hard to compute if you don't know the password but have read the password file it's still not much use to you. Incidentally there's been a certain amount of speculation about whether certain public secure hash files are really secretly trapped or functions because of course if you had a trapdoor function and published it as a secure hash function then you'd be able to read everybody's secret messages that they've hashed. But as far as I know the secure hash functions in common use don't have secret trapdoors and no one's even been able to think of a way in which they could have secret trapdoors. So anyway we now come to the following problem. Find a trapdoor function. And the first example of a trapdoor function was found by Clifford Cox in about 1973. And for various technical reasons Clifford Cox never published this and it wasn't really known that he'd found this until about 20 or 30 years later. His trapdoor function was rediscovered by Rivest Shamir and Adelman a few years later and is usually known by their initials RSA. And it works as follows. So what we do is we pick P and Q as two large primes. Well what does large mean? Well large means pretty large. It means hundreds or maybe thousands of digits depending on how secure you want to be and how paranoid you are.  However you're careful not to publish P and Q so P and Q are kept secret. So you only publish the product you don't publish P and Q. And now your trapdoor function is given by F of X is X to the K modulo M where M is this number P, Q. So we've published M. And now you notice this is easy to calculate because we showed earlier that calculating powers modulo and integer can be done fairly rapidly by using writing K in binary and remembering to reduce mod M each step. So how do you invert it? Well we can invert it using the secret key. And the secret key is knowing the individual primes P and Q such that P, Q equals M. And you do this using Euler's theorem. So Euler's theorem says that X for phi of M is congruent to 1 modulo M. So X is congruent to X to the phi of M plus 1 modulo M. So if J K is congruent to 1 modulo phi of M then X to the J times X to the, sorry X to the J to the K will be congruent to X modulo M. So X goes to X to the J is the inverse of X goes to X to the K which was your trapdoor function. Well how do you find J? Well we need to solve this equation here. So J is the inverse. We can find it using Euler's algorithm because this is just finding the inverse of a number modulo phi of M. If we know phi of M. Well phi of M is easy because M is P Q product of two primes. So phi of M is equal to P Q minus P minus Q plus 1. So this is just P minus 1 times Q minus 1. So if we know the factorization of M then we can invert our trapdoor function. So there's your trapdoor function. If you know the factorization of M we can invert it. And if you don't then it seems to be very difficult. Well let's discuss a few problems with this. So problem one, how do we find large primes P and Q? Well remember these have hundreds of digits. You can't really test whether they're prime by testing all their factors. They just take too long. So what can we do? Well as we saw earlier we can use some various prime tests. For instance we can check to see if 2 to the x is congruent to 2 modulo x. And if this is true then x is probably prime. So you can just choose a random hundred digit number and test this. And if it is then you can use x as your prime. Well of course that's not certain because you might have run into one of these funny car Michael numbers and it might not be prime. Well this is actually a very crude primality test. There are actually much better tests that people use which you can even have tests, fast tests that make it certain that P is prime. But the point is that finding large primes is not actually very difficult. By the way the difficult part in this is that it's hard to produce random numbers on a computer. Ok well your programming language that you use probably has a random number generator except it's not actually generating random numbers. It's generating random numbers according to some simple numerical procedure and what it's actually producing is pseudo random numbers. And the trouble is if anybody knows what random number generator you're using they can easily simulate this and find out what your supposedly random numbers are. So you should never use a random number generator if you want to produce random numbers in cryptography. This is a kind of standard mistake. What you can do instead is use something like a common one is to time keystrokes. Your computer can measure the time you measure between different keystrokes in milliseconds and it can work out whether this number of milliseconds is odd or even and that gives you one random bit of information. So if you type lots and lots of keys you can actually generate reasonably random sequences that are hard for an attacker to find out.  The problem too, can we break it? Well one way to break it would be can we factor pq fast? And at the moment if p times q has say a thousand digits there seems to be no fast way to factor it. All known algorithms for factorising numbers take far more than polynomial time in general. It's unclear if there's a method of inverting the function without actually factorising pq. No one's managed to think of one and as far as I know no one's managed to rule out this possibility. So there's a bit of uncertainty there. We can factor pq very fast on a quantum computer. So for quantum computers there's something called Schor's algorithm which allows you to factorise large digit numbers fast if you've got a big working quantum computer. Well this leads into a bit of a problem because we don't actually have a working quantum computer big enough to factorise these large numbers. It's very difficult working out exactly how good quantum computers are at the moment because there's an incredible amount of hype put out by some people involved in quantum computing about the performance of their computers. I was going to have a sort of rant about this but I've decided that it's not really connected with number theory so I'm putting the rant into a separate video that you can link to if you have nothing better to do with your time. A problem three is there may be plenty of other attacks. So one problem is cryptography and trying to keep your message secret is stupidity.  For example you need to use, suppose you want to have several different trapdoor functions using different pairs of primes, you might have p1, q1 and p2, q2 and so on and finding these large primes maybe you think it's too difficult finding thousand digit numbers so you come up with a great idea. You're going to pick one prime and then you're going to choose various other primes and form your trapdoor functions using these products here and this seems perfectly safe because you can't factor p1, q1, that's just as hard and you can't factor p2, q2 and so on. But if you do that you've done something really dumb because an attacker can take these two public keys and work out their greatest common divisor and that will be p. So if you reuse a large prime in order to save effort which at first sight seems harmless your codes will be broken by any competent attacker. Another example of something that can go wrong is so called man in the middle attack. So this is just one of, a typical example of many things that can go wrong with an apparently secure crypto system. So the man in the middle attack is as follows, you have Alice here communicating with Bob here and we have Eve in the middle but instead of just watching what goes between Alice and Bob Eve has actually taken control of some computer on the internet through which Alice and Bob's messages transfer. And now what Eve does is as follows, Alice sends her trapdoor function fA down the internet and Eve intersects it and sends Bob Eve's trapdoor function and with a little message saying it's from Alice Bob then uses Eve's trapdoor function to send the message back. Eve unravels it, reads the message and then uses Alice's trapdoor function to send the message on to Alice. So Bob has sent a message to Alice using what he thinks is Alice's trapdoor function but Eve has managed to read it by intercepting it and changing it. So even if you have a theoretically, you know, you might be able to prove mathematically that maybe you could prove mathematically that you can't factorise large numbers. This wouldn't actually mean your cryptographic system was secure because there are all sorts of other ways it can be attacked. Okay, I think I'll leave it at that. The next video will not really be about number theorists as said at the sort of rant about quantum computers and after that I'll get back to number theory.


Hi and welcome to this video tutorial on how to create an arithmetic expression in Petropark composite attributes. Login to a true set console and go to the infrastructure policies and their configuration tab. Enter the policy name, agent post name and enable the policy. It is required to have a KM configured before using the composite KM. I am using Oracle KM to compose an arithmetic expression. In order to use attributes of ETSM monitor type, the Oracle database should be configured. Here are the details of the configured Oracle database. Now click on add monitor configuration to configure the policy. Now select ETSM monitor profile from Oracle database. Select monitoring solution and monitor profile as composite attributes and monitor type as composite agent level. Specify the full path of the JRE directory on the pattern legend server. If the specified path does not exist or if the field is left blank, the KM searches for the JRE in the atl home directory. If you want, you can specify the JVM arguments. To create composite instances, click on the add tab. Specify the unique label name for the composite instance. Specify the attribute name that is used to represent the composite attributes in the true set console. Select the expression type as arithmetic. The attributes used space and space left from ETSM monitor type are used to create an arithmetic expression. Click on add to add source attributes. Specify the attribute path variable name which is a user defined name. It is an alpha numeric field, special characters and blank spaces are not alone. Specify the existing monitor attribute path that will be assigned to the attribute path variable. Here we are specifying the path. The path should be specified in this format. Application class, application instance, parameter. If you go to the true set console under agent actions, you can see two menu commands. Get monitor details and get all monitor details. By using these menu commands, you can find the path of the attributes. Add one more attribute to the list by clicking on the add. Specify the attribute path variable name and the attribute path. Enter the arithmetic expression using variables mentioned in the source attribute list. Specify the polling interval. By default the instances will be created under composite container. If you want to create a composite instance at a different parent, specify the existing instance name that is used as a parent for the created logical instance. Save the policy. Now go to the devices under the monitoring tab. Here you can see the result of arithmetic expression. Thank you for watching this video. For more details, log on to docs.bmc.com.


The world's largest packaging show of the year is back in Chicago and giving back to the industry. Join your peers at the annual Pack Gives Back event. Enjoy complimentary drinks and light hors d'oeuvres as you network with other industry professionals.  Tickets are only $75 and support the education of future packaging and processing innovators through the Pack Expo Scholarship Program. Purchase tickets while you register for Pack Expo International and Health Care Packaging Expo. If you've already registered for the show, simply log back into registration and follow the prompts to purchase your ticket. We hope you'll enjoy the night of comedy and camaraderie, all for a good cause.


Welcome to Toffy TV, it's the start of the 11 show Everton versus Luton Town in the FA Cup fourth round at Gwldersen Park. We've obviously got a few missing for this game and it could lead to some interest in selections from Sean Dyshwell. Let's get into my team. In goal, Jal Virginia, he's obviously played in both of the FA Cup games so far and I think it's good that he continues that. I think he done really really well in the last round against Crystal Palace. And I think he deserves to carry on. Listen, when the Premier League comes back on Tuesday, it'll obviously be Jordan Pickford. He's our number one, but it's good to have that little bit of competition to push Jordan to know just someone breathing down his neck. There's nothing wrong with that whatsoever. And the only way that's going to really happen is if the manager gives Jal Virginia the opportunity to continue in that role. So, yeah, he will start in goal for me. At right back, Nathan Patterson, we know there's no shame is common. We know Ashley Young's not ready yet, so of course it will be Nathan Patterson playing there. And again, good for his development, be another game under his belt. And yeah, I think the back four functions really well. We've kept clean sheets. The other three positions need the same players, which I'll mention in a minute. But the right back, I think we can get away with one of the three. So Patterson again starts for me. And obviously he can get up and down the right hand side. He's got that energy and that's what we need as well. So it is nice to have a shame is common there or maybe a young now and again just that old experience. But it is good to have the energy of a young player as well getting up and down and giving us something a little bit different. When some players look a little bit stretched from the from obviously the schedule. At left back, Tali Michalenco, again, probably our most consistent player this season, has been in really good form and seems to be getting better all the time. So he starts at left back. The centre backs, James Tarkowski and Jared Branthwaith are centre backs. And long made that continue. They have to start basically, don't they? They have to start every game if possible. And they did. I mean, certainly Tarky around the Walls game looked a lot fatigued, but they've had a nice rest now. They've had the winter break, obviously. And we're back into the back into the footy and obviously playing Saturday, playing Tuesday. And these players should be ready for the second half of the season. So that's my back four into midfield. Onane, again, just sitting in there as our number six. Obviously takes the ball off the back four, moves it round again. I'd like to see him just just grab hold of the game by the scruff of the neck. I thought against Palace away. He was absolutely brilliant, so comfortable. Be nice to see him have another game like that where he just grabs hold of the game and uses the ball the way we know he can and get it round the pitch. Next to him, James Garner, a little bit more movement around the pitch and he's going to have to in this game. Good on the ball, good tackle it. I'd like to see him get a little bit more into the final third. I'd like to see him get a few more shots off, be a little bit more dangerous, create maybe a few more opportunities. But again, he's been quite consistent this season. Be just nice to see if he could go up to the next level at some point. But obviously he's been very, very consistent. On the right side, Jack Harrison will continue. Again, he will have benefited from that time away. That little break and obviously he needs probably to get back to the level he was at maybe a month or so ago. Maybe when we were having when we were in a good run, good run, having the four wins on the right hand side, on the left hand side, Dwight MacNeill, who again will have massively benefited from that time away. Cos he had the injury obviously against Palace away, came back, looked like he come back a little bit too quickly. But if he was fit to play, he was fit to play. He will have benefited massively, massively. He has to step up now. I don't think he's being at the level he was last season. There are reasons on and off the pitch for that. Fully understand that. Again, he had a great little spell during the four games, which we won. He's got to try and get back to that level and have a second half of the season like he did last season in the second half. So both wingers, we need just that little bit more from both of them. Saley without the Corry in the side as well. I'm going to go with two off-front. I'm going to go with Beto and Dominic Arvill-Lewin. It hasn't been tried yet. We've got no one to go with this. We could put Dan Duminin. We could put Harrison in the centre. We could put McNeill on the other side. We could put Dobbin in the team. It's low. I just think for one game with it being the FA Cup, why not try something a little bit different? Why not try something just to see if it works, even if it's just for like an hour? Lewin obviously play off a lot of set pieces to have an extra player with the height of Beto and Dominic Arvill-Lewin offensively and defensively. I think it could be a big boost to us. But I just like to see how that would work. And I think we're running out of options just for the time being. We're just running out of the ability to see what works and what doesn't work. And this hasn't been tried yet from the start of a game. It would be nice. I think it would be exciting for a few people to go with the game. Listen, the manager might say, can't work, doesn't work. We need to have an extra person in the midfield. But ultimately, you go with the game to see goals. You go with the game to be entertained. And if we just go long, if we're a little bit more direct, if Dominic Arvill-Lewin is playing knockdowns, the better and fights face it. And then that's when we pick the ball up. I think we take that. I think we all wouldn't mind that in an FA Cup game. So that's my 11. Let me know your thoughts in the comments. I doubt that will be Sean Beishers. I mean, it might be pretty close. It might just be better out the team and maybe Dan Duma start or even Dobbin start, but who knows? Let me know your thoughts in the comments anyway. Make sure you check out the match preview with Baz and myself as well. If you want more videos, daily live exclusives, videos without any advert, podcasts without any advert, head over to Toffy TV Premier. The link is in the description and the QR codes come on the screen now. See you later.


So hello These talk is about some work that I did with my previous employer when I left them They asked me to remove the logo from the slides and not to mention their name. So I'm here with no business affiliation And unlike probably most talks in this conference. This is not about writing stuff with python This is about python himself and most specifically about the see python, which is the reference implementation And even more specifically about the parser, which is part of the implementation So what is the python parser when I put python parser into Google? This is the picture that came up But actually parser is the first stage of the interpreter which converts the source code into parse tree which the compiler then compiles into white coat and the white coat is what the interpreter actually runs Now what is python parser like? Same as any mature programming language. It has a formal grammar which looks something like this If this link should open Has a formally defined production three start Symbols for three different kinds of inputs. Every line defines a new Non-terminal symbol and the notation here is a bit more complicated than the BNF notation that Grammar says usually written in Something more like regular expressions. So we have something like plus modifiers and Somewhere star modifiers for repetitions as well as parentheses for grouping and the other Ingredient is the header file with the definition of all tokens Python has 57 types of tokens numbered 0 to 56 The numbers above 256 are reserved for non-terminals, which are the ones that are defined in the grammar then we have parser generator that based on the formal grammar and the token definitions produces FL which looks like this basically, it's Just a definition of static data. It doesn't have any code in it All it does is it defines the DFA one DFA for every non-terminal that the grammar defines So every DFA is defined as an array of states every state is defined as an array of arcs and every arc has a label and destination state. Oh Sorry, I thought my screen is duplicated, but it's not really Sorry Did the previous Files got missing again Did you see the previous folder files that I was trying to show Okay, then I'll have to scroll back This is what the grammar looks like with the productions and the right-hand sides that looks like regular expressions and that's what the header file looks like with the Token definitions. I don't know how to make it Deplicate it again. Let me try Right now at least I see myself what I'm showing. So to go back each State is defined as an array of arcs going out of this state and each arc is defined as an No, each DFA is defined as an Array of state each state is defined as an array of arcs going out of it. The first Item is the arc label, which is more or less the same as the symbol number And the second item is the destination state And in fact, we have a special table which converts the symbol IDs into arc labels because Symbol number one it corresponds to all keywords and all identifiers So we also have to match which specific keyword it corresponds to so that each one of those get a different Arc label number even though they are all sharing the same symbol ID and near the very end of this file we have in the definition of DFA themselves and for each DFA we also have the Start set which shows which tokens the specific non-terminal can start with And this is all sophisticated enough so I prepared a short demonstration of how this works for a Very simple Python program which looks like this. We parse it as a single input So that's the production that we are parsing it according to and our parse tree starts with the just root note of single input and The DFA which pars a single input is the DFA number zero which looks like this and In the initial states, which is state number zero. We have three arcs going out of it So the first arc with label number two corresponds to new line Next arc to simple statement Third arc to compound statement and we are looking at the if token in the inputs and According to the start sets we know that simple statement cannot begin with if if is not a new line But compound statement can begin with if so we transition along the last arc add the compound statement note to the parse tree and before we actually transition to State number two we switch to the new DFA which parses compound statements for Compound set we have we have nine options. So in the initial state we have nine arcs going out of it only the first arc which is for if statement can start with an if token So we add if statement note of the parse tree transition along this arc So on now we switch to the DFA which parses if statement It's sophisticated enough that it didn't fit on this slide because you see that it definition is also sophisticated having the parenthesis and repetitions and optional parts in the initial set we have only one arc which With the label 97 corresponds to the if token because it's a terminal symbol We just add it to the parse tree consume it from the input switch to the next state and stay in the same DFA the Next state once again has only one arc going out of it, but this one it's for test Non-terminal the start set for test says that it can indeed begin with the number such as 42. So we add the test node Switch to the DFA which Parses test and so on it goes for an awful long time before we actually get back into the same DFA and Now we are in state number two has one arc which consumes the colon token from the input transitions to the next state Once again, we have only one arc corresponding to sweet the Set confirms that sweet can begin from a print token. So we add a sweet note of the parse tree switch to DFA for sweet once again, it takes an awful long time before we get here and the interesting bit is now we have three arcs going out of the state number four Arc with label 98 corresponding to the terminal L if 99 to the terminal else and the next token in the input is the new line. So it's neither of this and the Arc label zero means that it's a final state. So if we didn't match anything Which are just done with this DFA and go back to the previous one So we go back to compound statement We're ending up in state that only has zero arc Which means no matter what the next token in the input is we are done and going back to the previous one Go back to the root DFA that we started from there is only one arc with label number two Which is for new line. So we consume the new line from the input add a note to the parse tree And that transition to state number one, which is final So we are at end of input. We're in the final state of the root DFA, which means that the parsing succeeded We are done. So what has just happened? We had a program which was 27 bytes long tokenized into seven tokens and This is the parse tree, which we produced for it 64 nodes takes a hundred times As much memory as the source code itself and it's not so much a tree as a bamboo stalk because it almost doesn't branch We see that we have a huge like series of a dozen nodes With a single child each All these because Python has a rather primitive parser Which has to define grammar like this it works to actually see this instead of Repeating all steps that I have shown just earlier. Yeah, that's more important because the parse tree can Can take a hundred times as much memory as the source code if I have a moderately big Python source file of say 30 megabytes then the Parcer would not even be able to load it into memory because the syntax tree for it would would be too big So that was my motivation for this work I had a 30 megabytes Python file and I couldn't possibly run it through Python to show these CSTs standing for concrete syntax tree. There is a standard module called parser and it can show you the CST serialized into structure of nested lists and Every listing the structure has two elements. The first one is the symbol ID So it's 0 to 56 for terminals and something above 256 for non-terminals and the second item is the token string for terminals also subtree Been in a nested list for non-terminals the documentation for parser module Actually says that people shouldn't use it because there is a better module called AST standard for abstract syntax tree Which is a second kind of syntax tree that the Python uses and the these example shows What the AST? looks like for the same Example Python code you see that it's much more compact It's almost human readable and the point is unlike CST Which reflects how the program is represented in the source code the AST reflects what the program actually intends to do So it's actually the AST that the compiler runs on to generate the bytecode so the Second kind of syntax tree actually also has a formal grammar Which is what this formal grammar looks like a different format now We have each kind of AST no defining what its children should be How many and what are their types and the funny bit is that there is no parser generator Which takes this file as input this file is just formal documentation But the parser is handwritten Hope it opens Yeah, so this handwritten parser is actually 5200 lines long It's a bit of very old and dusty code which dates from 2005 to 2007 nobody touches it nobody remembers how it works and the general attitude is the if you're 10 broke don't fix it It has been working for 10 years time has proven that it does work. Okay Yeah, and once again the AST for our sample code is the very simple structure of nine nodes which I'm shown here So this is what these second parser actually looks like has the example is Function that a parser's expert type of nodes and what it does It has a loop organized with the label and I go to from the middle of the function something that Dijkstra would not approve of and What it actually does is that for each node which only has one child it knows that there is nothing interesting for this node so nothing to do we just skip to the next node So we see that two-thirds of the nodes in the CST have one child. We don't do anything with them We just skip to the next node what I thought was Why do we have all these useless nodes? Occupying the memory if we can eliminate them at the time when we generate the CST then at the same time We are saving two-thirds of the memory and also the second parser becomes simpler because it doesn't have to be concerned with the Skipping all these useless nodes. This is what an example of compressed CST looks like It's actually small enough. So it fits on one slide without scrolling and at the same time we have this Modified function which no longer has the awkward loop actually doesn't have any loops at all What it does is that in each branch of the switch it can assert that the node has more than one child Meaning we can do something meaningful with this node and not just keep it now the this shows the serialized CSTs we before and after my fix and you can see that the CST has become so small that they almost becomes human readable The catch here is that the only purpose of CST is to be parsed by the second parser into the AST And then it's discarded from the memory. We never use it again So if we have a long-running script such as Web service for example that loads in a split second and then runs for hours and days Then it really doesn't matter how much memory the CST takes because it's only there for the first split second on the other hand if we have a System utility which runs for a split second and finishes immediately And then the performance of this utility would be dominated by the performance of the parser And that was my case my script was just looking up a value in the 30 megabytes literal dictionary and indeed with my fix to the Python parser memory consumption of my script Reduced by a factor of three so I was curious how my patch would affect other standard benchmarks and This are the results One of them has shown the improvement by a third a few of them have shown around a dozen percent improvement Then nothing has got worse But actually this Benchmark package which I was using was Procaded in October last year on the grounds that the results it was showing were inconsistent and meaningless For some purposes like I'm not a performance analysis person So I don't know what it did and what it did wrong but it had been superseded with the by performance back package and This are the results basically something got a little bit better something got a little bit worse, but The big picture is that nothing changed my intuition is that by performance Intentionally runs a few warm-up loops Before starting the timer and this way intentionally avoids it timing the loading and parsing of the source code Didn't actually look inside to the by performance. It's big and sophisticated enough but nevertheless even these results come from that my Patch has no unintended side effects doesn't break anything and at the same time it Enables a use case which may not be relevant to most of the Python programmers But at least a if I bumped into it, maybe other people's other people would bump into it as well So then my Desire was to share this patch with the community you get it included into Python How somebody does this is it opens a bug in the bug tracker because that's where all the discussions happen where all the reviews happen and There you also have a mailing list where and you're allowed to send Pings once a month if your bug is not getting enough attention So I opened to Issues in the bug tracker and one of them the second one of them actually got accepted and committed to took me three months waiting for a review and what it does was The second handwritten parser knows that the input that it parses always comes from the first parser So it's guaranteed to conform with the first formal grammar So it doesn't have to validate That it conforms to it It knows for sure that for example for if statement node the first child is always if token then the second child is always test but parser module can take an arbitrary serialized CST as input and run it through these second parser and Then if it doesn't conform to the formal grammar the Python binary would just crash on invalid memory access so they had to implement the validation for CST themselves How they implemented this was? Like this. I'm showing just validation for three different types of nodes, but it was all more or less the same They are checking that the number of the Children in the node is correct that the types of the children are correct and then recursively descending into each child node and The colon validation function for the child node When I was looking at this code which had to be updated with the every change to the grammar too much the updated grammar I thought maybe we can auto-generate the from the grammar maybe we can Write some DFS which would traverse the CST to see if it's valid and Then what occurred to me is that we already have this DFS these are the DFS which parser runs We can just run them on the CST instead of the token in stream of the input So this way I could eliminate 2400 lines of handwritten code With the just 70 lines of code for running the DFS which we already have in Python parser And which are guaranteed to stay in sync with the parser because they are what the parser runs but After three months in review my other patch was rejected by widow and rossum himself And that's because it's so big unsophisticated and nobody has volunteered to review it over three months I shouldn't hold my breath for anybody to jump up and review it and If nobody cares as much as I do about running the 30 megabytes Python scripts through the interpreter Then tough luck for me Basically, this is the motivation while I'm here. Maybe you can enter this Bpo to six four one five back ticket Take a weekend to review it and from that it's okay. Yet it committed Yeah, basically, I have explained what my patch does but that's not all if The only purpose of the CST is to get Parced by the second parser and discarded. Why do we have to store it in the memory at all? Maybe we can generate one CST note at a time Handle it in the ST parser and discard it immediately that way instead of improving its Memory consumption by a factor of three. We're improving it infinitely. It will take zero memory what the current parser actually does is It has two entry points one for string objects and one for file objects It passes this input to parse talk function which runs a loop inside it Extracting one token at a time from the input passing this extracted token to by parser at token function and this ad token kind of consumer function Maintains its state in a parser state structure, which most importantly has the stack of the DFA's keeping track of the current state for each DFA and The pointer to the CST root node, so it's appends new CST nodes to this tree after parse talk is done at the end of input it returns the CST root to the caller and the caller passes it to the second function called by ST from node object Which is essentially the second parser It recursively traverses this tree and for each subtree of the CST It generates the corresponding subtree of the ST the important bit here is that the whole of CST is Available by the time second parser runs so it can analyze nodes out of order it can analyze as one node repeatedly And so on my suggestion is to replace the by ST from node Object with a different function something like by ST from tokenizer which would more or less do the same but for getting each CST node it would call this next node function, which would take the parser state All the parameters for the tokenizer which would just pass on to the tokenizer and generate one node in the output which means only node type and node string but no children and as well return in unvalue Indicating the position of the new node Relatively to the previous node so whether it's the first child of a parent node and next sibling of a child node or Whether the previous node was the last child and we're going back to the parent The difficult question here is well, what are we going to do with the web parser module? Because we no longer have these CSTs memory. There is nothing that it could serialize into the structure of Enested lists and I'm not sure anybody is actually using the parser module even especially so that it's documented as deprecated All source cores analyze it that I have seen are using the AST because it's much easier to use but with Some effort we can make the parser itself call next node recursively to materialize the CST To serialize it into these nested lists and then to discard the whole thing just for compatibility with Existing consumers if there are some and there are some difficulties here The minor difficulty is that the parse talk can no longer have a loop running inside it We have to change it to a generator function and extract a loop out of it into the parser state structure But the main difficulty is that we have to rewrite all the 5200 lines of the hundred in parser This is the example of rewriting one function in this way. This is for parser for slice nodes slices when you have Like square brackets and two one or two or three numbers separated by columns inside them and you see that the old parser Does all kinds of interesting things about the rewritten parser can only Check each node once and it has to go on these nodes in order which actually simplifies the code the question is it would obviously take some time to rewrite the 5200 lines this way maybe several weekends, maybe many weekends and Do we want to do this and? If for example, I take several weekends to do this will there be somebody who wants to Review the patch including the writing of 5200 lines of code. That's actually all I have and one I Put Python questions into Google. This is the image that came up So Python's are actually cute. Thank you very much. So any questions? When you had the problem tokenizing your 30 megabyte source file What was the limit that you hit to do simply run out of memory or was there some internal structure? There was a static size and it over-followed Yes, I was doing it on my laptop which only has two gigabytes of memory so if you bought more memory or had more swap then It wouldn't have been a problem and in the future when computers are even larger than they are It's not going to be a problem for hardly anybody If you want to run Python on your phone, then it always we have problem. Oh, we already know Python doesn't run on phones Rather than rewrite all the conversion from the concrete parse tree to the abstract syntax tree Is it not possible to some equivalent to a grammar definition for that and generate the code? Because it does look awfully repetitive that code I agree that it does look repetitive and I think that the I can actually show this like most grammars for yak for example include the bits of code with each production that the parser generator Inserts into the parser. Maybe something similar can be done to this SDL file To help to generate in the parser but this would change the syntax of this file which is Something formal and somebody outside of the parser Python tree may rely on this exact structure So yes, while keeping the same Input structure of the grammar. It's not possible if we Give ourselves the availability to rewrite the grammar then it would be possible But we may be breaking somebody else's code. Hi, I for one think this is awesome And if the entire problem is having a co-maintainer, I think you could become one you clearly qualified Thank you for what it's worth the see Python tree moved to get four or five months ago So all of your hg links are now five months out of date Sorry, can you repeat this web page is at hg.python.org? Python is now hosted on github and has been for five months. So we're now looking at five month old source code Yeah, my slide deck is actually older than five months because this work has been going on since a year ago But I'm sorry about using outdated links. They still work any other questions. Okay, so thanks again for a very interesting talk


In this topic, since we are talking about performance management and we are saying that international performance management is more complicated than domestic performance management. So we are going to look at various factors which make international performance management a more complicated and more challenging process than domestic performance management. So in this topic, we are going to look at one of the factors which is whole versus parts. Now what does it mean by whole versus part? You know that a multinational organization is spread and dispersed in various parts of the world and it is not working as a whole. It is working as different parts, working in different parts of the world. But it is yet an organization which is working towards a uniform objective. They have a uniform vision, mission and strategies and the targets that they want to achieve are global targets which must be looked at as a whole. So this is a confusion which often creates dilemma for human resource management that whether they should be concerned about the parts or they should be concerned about whole and who should be guiding this strategy of making the performance management process as directed towards the performance of the whole rather than that of the parts. So that needs a uniform mindset, a universal global mindset that is held by the subsidiary managers as well as the headquarter managers that they have to look at the performance of the organization as a whole. So multinational is a single entity that faces a global environment which means that it simultaneously confronts differing national environments. So it does confront differing national environments but it is trying to achieve global targets which creates a dilemma. So this is a constraint for international performance management that what do we need to evaluate to? We need to be myopic and focused only on the subsidiary unit performance that the subsidiary unit must perform well. It doesn't matter how does it affect the rest of the global objectives of the organization. So that leads to integration and control imperatives. So you need to because you want the organization to work as a whole that means that you need to first of all integrate the performance management process. You need to have a comprehensive look. You just can't look at the numbers coming from different subsidiaries and then say okay subsidiary A tick, subsidiary B tick. You cannot do that you need to look at the performance of the organization as a whole. So this means you need to have an integrated view. It also means that you need to have control over the entire organization. You cannot entirely delegate responsibility and authority for performance management to subsidiary units. So there has to be a decision about what level of control your organization is going to impose upon your subsidiary units. And that is what is going to lead to the mindset that good of the whole is more important than one subsidiary's short term profitability. So it's not important that the subsidiary is giving a short term profitability at the cost of its global goodwill at the cost of its global reputation at the cost of its global objectives. So for that we have discussed an example over here. We are not going to name the organization but the example of that is that a multinational organization it established a subsidiary in a particular market with an existing global competitor. So a multinational in a market where an already existing global competitor existed and whose market share and market value was an established market share over there. They just created a challenge for the global competitor. So what they did was that they established the market of that particular product in that market to create competition for that global competitor. So what happened was that the global competitor's investments, its focus, its attention was tied up to that market where a competitor came from. So to reduce its attention from the rest of the area, they established their own subsidiary unit in that market so that the global competitor could divert its attention from the other market, so that its investment, its assets could be tied up in that market so that it could fight for the profits to be saved because the market share was there. So that competitor would take away investment from other parts of the world and invest on that. So because of that, strategically the remaining areas, the remaining markets, the value and opportunities of this multinational there increased because of that. So an explanation of this example is that the balance sheet of this particular subsidiary might be continuously in red. But this strategy by tying up the competitor resources may allow substantially higher returns in another market. So this is something that I've just described. So to generate higher returns in another market, a subsidiary unit which was in red was established here. So the difficulties in quantifying such a global strategy in terms of the usual return on investment objectives are obvious. That you cannot obviously have a 2 plus 2 criteria of performance in this. This is a strategic decision and you are establishing a subsidiary which is not profitable which is rather going in losses but it is something which is creating opportunities for you in other parts of the world. So these are the challenges of whole versus part for international performance management in the international arena.


Hi everyone, Joe for jaspyscasebreaks.com coming at you with 2016 Panini Prime Cuts Baseball Five Box. Pick your team number 2020 from jaspyscasebreaks.com. Very big thanks to all of these folks for getting into the action. The second inner case of that master we popped open. There's the second half right there, 2016 Prime Cuts Baseball. Five boxes. Gotta do that check. So there's four and five boxes right here. Good luck. Use that blank card to slow play the hits a little bit. There's old George Case, 10 out of 49. Old George Case. Everyone remembers George Case and where he goes, right old Washington Senator turned into, this is 1940s Senators I think turned into the Twins, right? Correct, yeah. Senators in 1901 relocated to Minnesota and then turned into the Twins in 61. So this goes to the Twins. So that'll be for Dan Carlberg with Minnesota. I'm not sure what happened. What happened with the, because then the Senators came back as the Senators again. I don't know what happened to that Senators team. Did that turn into the Rangers maybe? There's Gary Carter, 34 out of 99. Montreal Expo stuff goes to the Nationals, B.J. Jordan. Piece of his lumber. We've got Mariano Rivera, 147 out of 149.  We're watching Yankees Red Sox right now in an old ALCS game. There you go. Yankees, that'll be for Sawyer. Kind of hard to see the print right here, but I think most of these are game-worn materials. And we've got a one-of-one Jared Weaver, Angel going to Steve. There you go, Steve. All aboard the Big Head Express. And we've got Souvenir Cuts for Oakland. That is Dick Williams, 7 out of 140. It can break tonight if it sells out, Russell, but that's up to you. Not me. I don't know. I don't know if it's going to be tonight or tomorrow. That's entirely up to the people, entirely up to the 100 people watching right now. If they want to sell out tonight, then it'll go tonight. But I think there are still a couple, I think there's a few sell-o-packs that we need to move before that happens. So it depends on how quickly we hustle on that. Five out of five, Stan the Man Musil. That's pretty cool. That goes to Jimmy Brandt and the Redbirds. And that's game-used material right there. That's pretty awesome. Jimmy. All aboard the Big Head Express. Woo-hoo. 25 out of 25, Paul Molliter, Brewer's Edition going to Carlos Duran. Will the Thrill, 8 out of 99, Will Clark. That'll go to Michael and the San Francisco Baseball Giants. 4 out of 49, that's Raul Monacy. Rookie Otto Royals. That will be for Matthew Stubblefield. And then we've got prime-cut rookie autographs, Byung Ho Park. Is that Twins, Byung Ho Park? Or is that Byung Ho Kim? Or was that the old Diamondbacks Korean, the Korean Diamondbacks Closer? Yes, this is Byung Ho Park, DH and First Basement for the Twins. What's he doing now? He was supposed to be like the, yeah, he didn't really quite make it. This goes with the Nexen Kiwum Heroes, the Korean baseball league just started. This goes to the Twins. I guess I'll have to get into that. I think Adalberto Monacy is Raul Monacy. I think Raul Monacy, Jr., right, got popped for PEDs. And then when he came back, he's like, I'm going by Adalberto Monacy, fresh start. I think that's right. Royals fans. Talk to me here. Is that true? There's Jose Abreu, 26 out of 149. That goes to the White Sox. That'll be for Adam Richards. We've got Bryce Harper up here to 149. That's still National's Edition BJ Jordan. I want to say Raul Monacy, Sr., who used to be a former Dodger. I think he became a mayor of a city, like the Dominican Republic or somewhere. And then he got popped for, like, accepting bribes. There's Kirby Puckett to 149. We'll have to look that up. Kirby Puckett Twins, Dan Carleberg. A couple more here. We've got a piece of Darryl Strawberry's Lumber and Autograph, 25 out of 25. That's Metz Edition going to BJ Jordan, the strawman. This top loader is not worth, it's not worth, the strawman deserves better. And there you go. The straw piles up home runs and piles of powder with cut straws. And then we've got Oledmi's Diaz. I guess I have to mark the drug part of the YouTube upload now. 78 out of 99. Oledmi's Diaz Rookie Auto for the Cardinals. Jimmy. Right, right, right. I know. He's a man of God now, Darryl Strawberry, so I'm sure he wasn't the only one in the 80s. I don't know why, I guess he was a more public figure. I'll bet a lot of ball players in the 80s dabbled in such things. I mean, the Bulls team in the last dance, right? Michael Jordan all but confirmed that. There is Oledmi's Diaz and Stephen Piscotti, both Cardinals. Dual Relic, 82 out of 99 for Jimmy Brant. And got Rocket Roger Clemens to 149. That's Astros Edition going to Mark Nation. And a one out of three, Nolan Ryan, Timeline Relic. Wow. Astros. It's another one for Mark Nation. That's pretty cool. Enclosed Game War material as well. That's sharp. All aboard the Big Hit Express. Woo-hoo. Couple more here and then one more box. We've got G-Man Choi, 21 out of 99. He was on the Angels. Sean Corbett, was he on the Angels? I don't remember him as an Angel. I think he's still with the Rays now. And a four out of five, Barry Bonds, little oppo Joe Mojo going to the Giants. That'll be for Michael. There you go. He's got his own hologram sticker there, too.  Well, I've got to still have to hit it. There you go, Michael, all aboard the Big Hit Express. Woo-hoo. All right, solid five boxes thus far. Let's see what's in the final box. Good luck, everybody. This is Pick Your Team 20. A lot of breaks piled up already.  I feel like Korea has produced some decent pitchers in Major League Baseball over the years, but I don't think there's really been a bonafide sluggerly yet. I think Cheong-Ho Kang, Kang Cheong-Ho for the Pirates, I think, was great for a couple years. But then he ran into a lot of DUI issues and domestic violence issues and stuff like that and injuries and stuff. So it just kind of fell apart rather quickly for him. There's Phil Rizzuto to 149. Yankees, that'll be for Sawyer. There is Kargo, Carlos Gonzalez, 39 out of 99. Remember when Kargo was supposed to be a guy? This is for Arthur, where he was like, he's the next guy that's going to get that huge seven-year contract and break records and stuff. But he kind of fizzled out before his contract year came up. Yadir Molina to 149.  I think this year was supposed to be his last year, but now he's thinking, now that I got this extended break, could I do another year or two? There may be other players that are in that situation. That year, this extended time off may have helped their bodies. And they may think, hey, I could probably go an additional year, year longer than I thought. Nice, John Gray, Triple Relic, and Autograph. Nice RPA for AP, Arthur, with the rocks. And the last hit in Prime Cuts 20, Triple Relic and Autograph. That is, is that Fred Lynn? It is. Nine out of 15, old Fred Lynn. Did Fred Lynn really win the Rookie of the Year and the MVP in the same season? He became the first to win both Rookie of the Year and MVP and only each of us have repeated that feat in 2001. Wow. So he had a cup of coffee with the Red Sox in 74 and that's Derek Disser with the Red Sox and hit 419 when he was called up but still maintained his rookie eligibility. And then he hit 331 with 21 home runs and 105 RBIs the following season. It's pretty good. Pretty nice. Going to Derek and there you have it ladies and gentlemen. Joe for Jaspy's casebreaks.com. Thanks for watching. Thanks for breaking with us. I'll see you next time. Bye bye.