<snapdata remixID="9608327"><project name="Fermats Little Test" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAC/klEQVR4Xu3SO0okUQCG0aviI1HBRIwN3IKJSWciigiuwsgdmLiIocE1zDbEaAJjd+ACNKiBDgwG2kBkPpBTaT1+6rtnZZqmabgUaAr8WgGwKW91UQBAENICAKb5jQPIQFoAwDS/cQAZSAsAmOY3DiADaQEA0/zGAWQgLQBgmt84gAykBQBM8xsHkIG0AIBpfuMAMpAWADDNbxxABtICAKb5jQPIQFoAwDS/cQAZSAsAmOY3DiADaQEA0/zGAWQgLQBgmt84gAykBQBM8xsHkIG0AIBpfuMAMpAWADDNbxxABtICAKb5jQPIQFoAwDS/cQAZSAsAmOY3DiADaQEA0/zGAWQgLQBgmt84gAykBQBM8xsHkIG0AIBpfuMAMpAWADDNbxxABtICAKb5jQPIQFoAwDS/cQAZSAsAmOY3DiADaQEAl+Wfz+eLW7PZbBweHqan9IPHAVx2uC8vL+Pm5mZsbm6O19fXcXl5Oba3t8f19fXY3d39wSb+668B+Fnup6encXd3NzY2Nj4em6ZpvL+/j6urq7GzszMuLi4WSF1fKgDgZ9keHx/H/f39WFtb+3js7e1tHBwcjJOTk3F0dDSOj4+/VN5LiwIALoPw/Pw8bm9vx9bW1gLg6enp2N/fH+fn52N1dZWf7ykA4LKODw8PY319fZydnY29vb3vye0r/xYAkIm0AIBpfuMAMpAWADDNbxxABtICAKb5jQPIQFoAwDS/cQAZSAsAmOY3DiADaQEA0/zGAWQgLQBgmt84gAykBQBM8xsHkIG0AIBpfuMAMpAWADDNbxxABtICAKb5jQPIQFoAwDS/cQAZSAsAmOY3DiADaQEA0/zGAWQgLQBgmt84gAykBQBM8xsHkIG0AIBpfuMAMpAWADDNbxxABtICAKb5jQPIQFoAwDS/cQAZSAsAmOY3DiADaQEA0/zGAWQgLQBgmt84gAykBQBM8xsHkIG0AIBpfuMAMpAWADDNbxxABtICAKb5jQPIQFoAwDS/8QXAPzooEBX4/RcDMlBYrW5BcgAAAABJRU5ErkJggg==</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="1.0730203156107214" y="-1.2974884668360136" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list id="9"><item><costume name="unicorn" center-x="75" center-y="75" image="data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJ1bmljb3JuMSIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIxNTBweCIgaGVpZ2h0PSIxNTBweCIgdmlld0JveD0iMCAwIDE1MCAxNTAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE1MCAxNTAiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogIDxnPgogICAgPGcgaWQ9IkJhY2tfTGVnMiI+CiAgICAgIDxnIGlkPSJIb29mXzNfIj4KICAgICAgICA8cGF0aCBpZD0iRmlsbF8xMl8iIGZpbGw9IiM4MDgwODAiIGQ9Ik0yNy4zMzQsMTI0Ljk4NWMtMC4wNjIsMC4xNjctMC42NzYsMS41NDEtMC42NzYsMS41NDEmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0wLjI5NSwwLjYzNi0wLjU2OCwxLjI3OS0wLjY1MiwxLjk4MmMxLjgzMSwyLjE1LDguMTA5LDMuNTMzLDEwLjQ4NiwxLjk1M2MtMC44MTQtMS4wOTktMS41NjEtMi4yMzgtMi4yMzMtMy40MWwtMC41MjgtMS4zOTYmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7bDAuNTQ0LTAuNTQ3Yy00Ljg1Mi0zLjE0OS03LjQwMi0wLjI2MS03LjQwMi0wLjI2MWwwLDBDMjcuMTI3LDEyNC44NjgsMjcuMzYzLDEyNC45MDUsMjcuMzM0LDEyNC45ODV6Ii8+CiAgICAgICAgPHBhdGggaWQ9Ik91dGxpbmVfMTJfIiBkPSJNMzguNjU5LDEzMC4wNzVjLTAuNDU1LTAuOTg0LTEuNjc3LTIuMTc4LTIuMzIyLTMuMTQ2Yy0wLjE0NS0wLjIxOC0wLjI3Ni0wLjQzNS0wLjQxMy0wLjY1JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMC43NTItMS4xMTgtMS4yOTktMS40OTQtMS4yOTktMS40OTRsLTAuMzI1LDAuMzI5bC0wLjU0NCwwLjU0N2wwLjUyOCwxLjM5NmMwLjY3MiwxLjE3MiwxLjQxOSwyLjMxMiwyLjIzMywzLjQxJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMi4zNzcsMS41NzktOC42NTUsMC4xOTgtMTAuNDg2LTEuOTUzYzAuMDg0LTAuNzA0LDAuMzU3LTEuMzQ2LDAuNjUyLTEuOTgzYzAsMCwwLjYxMy0xLjM3MywwLjY3Ni0xLjU0MSYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMC4wMjktMC4wNzgtMC4yMDctMC4xMTgtMC40Ni0wLjEzN2MtMC4yNzctMC4wMjEtMC41NzQtMC4wMTktMC41NzQtMC4wMTlsLTAuODEzLDEuMzA0Yy0wLjQyMywxLjIwOC0yLjE5NywyLjI2LTAuNDUyLDMuNjg2JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O0MyOS45NDUsMTMzLjgxNSwzOS45NzQsMTMyLjkwMSwzOC42NTksMTMwLjA3NXoiLz4KICAgICAgPC9nPgogICAgICA8ZyBpZD0iTGVnXzNfIj4KICAgICAgICA8cGF0aCBpZD0iRmlsbF8xMV8iIGZpbGw9IiNGRkZGRkYiIGQ9Ik0zOC42OTMsMTAwLjk2NmMtMS4yODEsMi44MzUtMy4wODMsNC43OTgtNS40MDMsNi45MjMmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0xLjA4NywwLjk5Ni0xLjM0MSwzLjEwNi0xLjYxOSw0LjQ0OWMtMC44NSw0LjA4OC0yLjUwNCw3LjE3NC01LjQwMiwxMC4zODVjLTAuMTE3LDAuODQxLDEuNjIzLDEuNTQsMS43OTQsMS42NDYmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzIuMDMxLDAuODQ0LDYuNDg5LDEuOTIzLDUuODg3LDAuNzE5Yy0yLjk5Mi01Ljk4NCwxLjQ2Ny0xNC40ODQsOS41NzktMTguNjM1YzAsMCwxMC4xNjItNS4yMTgsMTEuNzItMTQuNDY4JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMC4wNjgtMC45MjgtMC4yMDctMS45NTItMC40MzctMy4xMWMtMC40NjktMi4zNjktNC45MzgtNy43Mi04LjgyOS03LjU3OWMtMC40NjMsMC4wMTctMS4wMDEsMC4yMTgtMS41NjIsMC41MTkmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0xLjU2NSwxLjk3My01LjE3LDQuNDY2LTUuNzI5LDkuNTVDMzguMzQ4LDk0LjUwNSw0MC4wNzEsOTcuOTEzLDM4LjY5MywxMDAuOTY2eiIvPgogICAgICAgIDxwYXRoIGlkPSJPdXRsaW5lXzExXyIgZD0iTTU2LjU2Miw5MS4zNzVjLTAuNTYyLTAuODEyLTEuMjYsMC4zMTItMS4yNiwwLjMxMmMtMC4wMTUsMC4xMDEtMC4wMzYsMC4xOTgtMC4wNTMsMC4yOTgmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0xLjU1OCw5LjI1LTExLjcyLDE0LjQ2OC0xMS43MiwxNC40NjhjLTguMTEyLDQuMTUtMTIuNTcsMTIuNjUtOS41NzksMTguNjM1YzAuNjAyLDEuMjA0LTMuODU2LDAuMTI1LTUuODg3LTAuNzE5JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMC4xNzEtMC4xMDYtMS45MTEtMC44MDYtMS43OTQtMS42NDZjMi44OTgtMy4yMTEsNC41NTItNi4yOTcsNS40MDItMTAuMzg1YzAuMjc4LTEuMzQzLDAuNTMyLTMuNDUzLDEuNjE5LTQuNDQ5JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MyLjMyLTIuMTI1LDQuMTIyLTQuMDg4LDUuNDAzLTYuOTIzYzEuMzc4LTMuMDUzLTAuMzQ1LTYuNDYxLDAtOS42MDJjMC41NTktNS4wODQsNC4xNjQtNy41NzcsNS43MjktOS41NSYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMC4xNTEtMC4xOSwwLjI5MS0wLjM3OCwwLjM5OS0wLjU2MWwtMC4zNTEtMC41NjdjLTIuNjMxLDAuOTExLTYuNjM0LDYuODQxLTcuMzk2LDkuMTEyYy0yLjE2LDYuNDI0LDUuNDc4LDkuNTUxLTUuNjg4LDE2LjY4NiYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTAuNDY2LDAuMjk4LTAuNjY5LDAuNjAzLTAuNjYsMC45OTJjMC4yMjEsOS43NTgtNi45MzIsMTMuNzkxLTYuOTMyLDE1LjMyOGMwLDAuODQyLDEuMDM2LDEuOTgzLDEuODczLDIuNDEyJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MzLjYwNSwxLjg0Niw4LjE0NiwyLjI2MiwxMC4wNTgsMS41MjVjMC4yNDktMC4wOTYsMC4xMjEtMC41MiwwLjE2OS0wLjc4OGMtMC41MjctMC44MzQtMC45NjctMS43MzUtMS4xNjEtMi43MzgmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0xLjA0Ni01LjQxNSwzLjEyMy0xMS44Niw4LjMxLTE0LjM1M2MxMC44NTQtNS42MzcsMTMuMjcxLTE0LjYxMywxMy41MjEtMTUuNDI2UzU3LjEyNSw5Mi4xODgsNTYuNTYyLDkxLjM3NXoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgaWQ9IkZyb250X0xlZzIiPgogICAgICA8ZyBpZD0iSG9vZl8xXyI+CiAgICAgICAgPHBhdGggaWQ9IkZpbGxfNl8iIGZpbGw9IiM4MDgwODAiIGQ9Ik0xMjEuMjAyLDY1LjM1M2MwLjAxOSwwLjE3NywwLjA4NSwxLjY4MSwwLjA4NSwxLjY4MWMwLjAyMSwwLjcwMSwwLjA2NCwxLjM5OCwwLjMwNSwyLjA2NSYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMi42LDEuMTA1LDguODM0LTAuNDY5LDEwLjI1NC0yLjk0NmMtMS4yMi0wLjYxOC0yLjM5OC0xLjMwMy0zLjUyNC0yLjA1MWwtMS4wOTctMS4wMTFsMC4yNDItMC43MzMmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy01Ljc0OS0wLjY0Ni02LjczOCwzLjA3OC02LjczOCwzLjA3OGwwLDBDMTIwLjk2NSw2NS4zMzksMTIxLjE5Myw2NS4yNjgsMTIxLjIwMiw2NS4zNTN6Ii8+CiAgICAgICAgPHBhdGggaWQ9Ik91dGxpbmVfNl8iIGQ9Ik0xMzMuNjA5LDY0LjgzOGMtMC44NDgtMC42NzctMi40NzUtMS4xOTgtMy40ODUtMS43NzdjLTAuMjI3LTAuMTI5LTAuNDQtMC4yNjUtMC42NTktMC4zOTYmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0xLjE3NC0wLjY2NC0xLjgzMS0wLjc1NS0xLjgzMS0wLjc1NWwtMC4xNDUsMC40MzlsLTAuMjQxLDAuNzMzbDEuMDk3LDEuMDExYzEuMTI2LDAuNzQ4LDIuMzA1LDEuNDMzLDMuNTIzLDIuMDUxJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMS40MiwyLjQ3Ny03LjY1Myw0LjA1MS0xMC4yNTQsMi45NDZjLTAuMjQtMC42NjctMC4yODItMS4zNjQtMC4zMDQtMi4wNjVjMCwwLTAuMDY2LTEuNTA0LTAuMDg1LTEuNjgxJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMC4wMS0wLjA4NS0wLjIzNy0wLjAxMy0wLjQ3NCwwLjA4M2MtMC4yNTYsMC4xMDYtMC41MjEsMC4yNDEtMC41MjEsMC4yNDFsLTAuMTQ0LDEuNTNjMC4xNjEsMS4yNjktMC45NTUsMy4wMDQsMS4yNDQsMy40OTkmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7QzEyNy40ODgsNzIuMDgzLDEzNi4wNDksNjYuNzc3LDEzMy42MDksNjQuODM4eiIvPgogICAgICA8L2c+CiAgICAgIDxnIGlkPSJMZWdfMV8iPgogICAgICAgIDxwYXRoIGlkPSJGaWxsXzVfIiBmaWxsPSIjRkZGRkZGIiBkPSJNMTE0LjQ1Myw1Mi4yMTdDMTE0LjQ1NCw1Mi4yMTYsMTE0LjQ1NCw1Mi4yMTYsMTE0LjQ1Myw1Mi4yMTcmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuMTE5LDAuMDU3LDAuMjMsMC4xMzMsMC4zMzcsMC4yMThjMi42NTQsMS44NTYsMi43OTksOC45NzgsMy40NDIsMTEuODE0YzAuMjk1LDEuMzAyLDcuNjIxLTAuMzEyLDkuMDIxLTEuMzg2JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MxLjEwMS0wLjg0NS01Ljc4OC01LjYyNS03LjQwMi05LjA4Yy0wLjc4MS0xLjY4LTEuNDM3LTMuNDQ2LTEuNjY0LTUuMjY5Yy0wLjA2Ni0wLjU0OSwwLjA5Mi0xLjEyNy0wLjA5LTEuNjU0JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMC4zMS0wLjkxMi0yLjM1NS0wLjU1MS0zLjEwNC0wLjQ5NWMtNC44MTIsMC4zNjctNi41MTgsNS4yMzUtMTAuMjY2LDcuMzM1Yy0wLjgyMiwwLjQ2MS05LjUxOCw0Ljk5OS05Ljk1Nyw1LjEwMyYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTAuNzcxLDAuMTgxLTEuMTE1LTAuOTM4LTEuMjY5LTEuNDI5YzAtMC4wMDEsMC4wMDMtMC4wMDQsMC4wMDMtMC4wMDZjLTAuNTI0LDAuMzk3LTAuOTc1LDAuODYtMS4yOTgsMS40MTgmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0xLjQwMywyLjQyMy0zLjM2NCw4Ljc3My0xLjE4MSwxMC43NTljMS4xNzEsMS4wNjUsMi42MzgsMS43ODUsNC4xODgsMi4xMjVjLTAuMDc4LTAuMjY4LTAuMTQyLTAuNTIzLTAuMjAyLTAuNjkzJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O0MxMDQuMTU2LDY2LDEwMi45NDcsNTMuMTMxLDExNC40NTMsNTIuMjE3eiIvPgogICAgICAgIDxwYXRoIGlkPSJPdXRsaW5lXzVfIiBkPSJNMTI4Ljg1Myw2MS40NDJjLTMuNjUyLTIuODk3LTYuMzE5LTYuMDY1LTcuODI5LTEwLjgzM2MtMC4zNjMtMS4xNTMtMC42MDktMy42OTMtMS4wNzgtNC41MzImI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0yLjA5OC0zLjc0Mi03LjY1MS0yLjA5NC05Ljk0OSwwLjQ5NGMtMy4zMDUsMy43MjItNC4wODEsNS4zMzQtOS4zODksNy4xOTljLTAuODk3LDAuMzE2LTQuOTU3LDIuNDU3LTUuODEyLDIuNzk1JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMC42NzcsMC4yNjgtMS4xMjgsMC4yMjktMS4yOSwwLjgwM2MwLDAuMDAyLTAuMDAzLDAuMDA0LTAuMDAzLDAuMDA2YzAuMTUzLDAuNDkxLDAuNDk4LDEuNjEsMS4yNjksMS40MjkmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuNDM5LTAuMTA0LDkuMTM1LTQuNjQyLDkuOTU3LTUuMTAzYzMuNzQ4LTIuMSw1LjQ1My02Ljk2OCwxMC4yNjYtNy4zMzVjMC43NDgtMC4wNTYsMi43OTQtMC40MTcsMy4xMDQsMC40OTUmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuMTgyLDAuNTI3LDAuMDIzLDEuMTA1LDAuMDksMS42NTRjMC4yMjgsMS44MjMsMC44ODMsMy41ODksMS42NjQsNS4yNjljMS42MTQsMy40NTQsOC41MDMsOC4yMzUsNy40MDIsOS4wOCYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTEuNCwxLjA3NS04LjcyNywyLjY4OC05LjAyMSwxLjM4NmMtMC42NDQtMi44MzYtMC43ODgtOS45NTgtMy40NDItMTEuODE0Yy0wLjExLTAuMDc3LTAuMjE3LTAuMTYxLTAuMzM2LTAuMjE5JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MwLDAsMCwwLTAuMDAxLDAuMDAxQzEwMi45NDcsNTMuMTMxLDEwNC4xNTYsNjYsOTUuMDE0LDcwLjk3OGMwLjA2MSwwLjE3LDAuMTI0LDAuNDI1LDAuMjAyLDAuNjkzJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MwLjE4NywwLjYzNiwwLjQ2OCwxLjM0NiwxLjA2NywxLjE4M2MwLjcwMS0wLjE5MSwyLjMxMS0xLjk4MywzLjkwNy0zLjk5NGMxLjg3OS0yLjM2OCwzLjc0LTUuMDQsNC4wNzktNS43NzYmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuNjY3LTEuNDUyLDEuMTgzLTMuMDI5LDIuMjc5LTQuNTJjMC44NzctMS4xOTEsMi4xMjQtMi4zMjYsNC4xMjMtMy4yOThjMC41NjItMC4yNzMsMS41NTUtMC41NTEsMi40MDYtMC45MzhsMC4wMDEsMC4wMDQmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuMDMxLTAuMDE5LDAuMDU5LTAuMDI4LDAuMDg5LTAuMDQ1YzAuMDk2LTAuMDQ1LDAuMTg4LTAuMDkxLDAuMjc5LTAuMTRjMS4wMjYtMC40MTcsMS41NzcsMC4yMzgsMS44NTUsMC44MzYmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuNzUsMi40MTYsMS4yNTcsNS4wMzUsMS4zMTEsNy40OTNjMC4wMTksMC44ODktMC4yNTQsMi42ODksMC40MDQsMy4zOGMwLjY0OSwwLjY4LDIuMjA5LDAuMzUzLDMuMDYyLDAuMjg5JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMC4wMDQsMC4wMTgtMC4wMTIsMC4wMzQtMC4wMTYsMC4wNTJDMTIwLjY2Myw2Ni4wNjMsMTMwLjkxNyw2NC42MjUsMTI4Ljg1Myw2MS40NDJ6Ii8+CiAgICAgIDwvZz4KICAgIDwvZz4KICAgIDxnIGlkPSJNYW5lIj4KICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJGaWxsXzEzXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSItMzQuODQ4MSIgeTE9IjIxMi41NzEzIiB4Mj0iLTE0LjIyNDYiIHkyPSIyMTIuNTcxMyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSA5NCAyNTQpIj4KICAgICAgICA8c3RvcCBvZmZzZXQ9IjAuMTUxNyIgc3R5bGU9InN0b3AtY29sb3I6IzAwRTFGRiIvPgogICAgICAgIDxzdG9wIG9mZnNldD0iMC40Nzc1IiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRjAwIi8+CiAgICAgICAgPHN0b3Agb2Zmc2V0PSIwLjY3OTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRjlBMEUiLz4KICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRjAwMDAiLz4KICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgPHBhdGggaWQ9IkZpbGxfMTBfIiBmaWxsPSJ1cmwoI0ZpbGxfMTNfKSIgZD0iTTY1Ljg1MSw0Mi42OGM3LjI5NC0yLjA2OCwzLjAxOC05LjI4NCwxMC43NjgtOC4yOCYjeEQ7JiN4QTsmI3g5OyYjeDk7YzEuMzk4LTcuMTgxLDIuODEyLTguOTExLDIuMjc4LTkuODcyYy0wLjEyOC0wLjExOS0wLjE5MS0wLjM2OS0wLjMwOS0wLjQ3N2MtMC44NTEtMC44LTIuNTI0LTEuMTMzLTMuNjktMC45ODkmI3hEOyYjeEE7JiN4OTsmI3g5O2MtMi45NjYsMC4zNjYtMy44MjgsMy41NTctNy4yNDcsMi42NzljLTMuMDUzLTAuNzg1LTMuOTk5LTQuMjU5LTAuNDg2LTUuOTY4Yy02LjkyMSwwLTYuNDYzLDUuMDc4LTEuNDYyLDcuNTEzJiN4RDsmI3hBOyYjeDk7JiN4OTtjMS4wMDksMC4zNjMsMS41OTQsMC42NjQsMi4xNTYsMC43NjdjMy4xMjksMC41NzMsMy43LDEuMjU5LDMuNywxLjI1OWMtMi4wOTYsMS4wMzEtMy42ODUsMi40MzgtNC4xNDksMy4yOTEmI3hEOyYjeEE7JiN4OTsmI3g5O2MtMC45NDMsMS43MzMsMS45NjYsNS4xOTUsMC41MDcsNy4xMzFjLTAuNzkzLDEuMDUzLTMuNTgsMS43NjctNC4zNDgtMS4yNDhjLTUuMTMxLDUuMDk5LDMuMzk2LDguMTcyLDguMTI5LDMuMDE5JiN4RDsmI3hBOyYjeDk7JiN4OTtjMC42NTUsMi4xNC0yLjM1OSwzLjkwNi01LjU0LDQuMDQyYy0wLjU0OSwwLjQ3My0xLjEwNiwwLjkzNS0wLjk4MSwxLjY4OGMwLjIyOCwxLjM4LDEuNjA0LDIuOTEsMC43OTUsNC4yOTEmI3hEOyYjeEE7JiN4OTsmI3g5O2MtMS4wMTgsMS43MzQtMi41NjIsMi43ODYtNi4xNDYsMS40MzljMS45ODcsMi45NzIsNC42NDksMy4xNzksNy4xNzMsMS44MjJjMC4xMjEsMC42NTctMC4yODEsMS4xNTctMC45NjQsMS40NzEmI3hEOyYjeEE7JiN4OTsmI3g5O2MtMC4xMiwwLjA5NS0wLjI0NSwwLjE4NS0wLjM3NSwwLjI2OGMtMS4yODEsMS4zMjMtMC44OTEsMy45MTQtMS43OTIsNS4zODZjMCwwLjA1NSwwLjAwMiwwLjEwNCwwLjAwMiwwLjE2MSYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy0wLjAzNCwwLTAuMDc2LDAuMDA4LTAuMTEzLDAuMDExYy0wLjI3MSwwLjM3MS0wLjY0MywwLjY1Ny0xLjE4LDAuODAzYzIuMjIxLDEuMTk4LDUuMDE5LTMuNDM4LDcuNjUzLTMuOTU2JiN4RDsmI3hBOyYjeDk7JiN4OTtjMCwwLDEuNzY2LTAuMjYsMy4zNTEtNS43NDFjLTAuNDE2LDAuMjIyLTAuODg4LDAuNDIxLTEuMjI5LDAuNjkxYy0yLjU3OCwxLjU4NC0yLjk3Miw2LjAwNC02Ljc1Nyw1LjU5JiN4RDsmI3hBOyYjeDk7JiN4OTtjMS43MDMtMC42MDIsMS44OTctMC44MDksMi40NjMtMS40OTFjMS4zNTQtMi4zNjIsMi4zNTYtNS45MTUsNS43NTgtNS42NDVjMC40MDItMS41NDYsMC43ODYtMy40NDksMS4xMTgtNS44MDUmI3hEOyYjeEE7JiN4OTsmI3g5O2MtMy41NTEsMC4zODUtNC4zMzMsNi42NDItOS41MDEsNi42NjhjNC42MDUtMC42MTQsNC43NS03Ljc5OCw5LjcyNy04LjM4NGMwLjA1My0wLjQ0NSwwLjEwNC0wLjkwNCwwLjE1NC0xLjM3NyYjeEQ7JiN4QTsmI3g5OyYjeDk7YzAuMzMzLTMuMTk1LDAuNzE5LTUuODI0LDEuMTEzLTguMDAzQzcwLjIsMzUuMjEzLDc0LjEwNSw0Mi40OTksNjUuODUxLDQyLjY4eiIvPgogICAgICA8cGF0aCBpZD0iT3V0bGluZV8xMF8iIGQ9Ik03OS43NDgsMjQuMzIxYy0wLjAwNy0wLjAzMi0wLjAxNS0wLjA1Ni0wLjAyMS0wLjA4NmMtMC4wMjYtMC4xMTItMC4wNTMtMC4yMjgtMC4wODItMC4zMiYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy0wLjA1Mi0wLjk3Ny0yLjMzLTIuMzY0LTMuNjY0LTIuNTQxYy0zLjQ5NS0wLjQ2Mi00LjI5LDIuMDU3LTYuNzk3LDIuODg0Yy0xLjYyMiwwLjUzMy0yLjk0NS0xLjAxNS0yLjM4Ni0yLjM5JiN4RDsmI3hBOyYjeDk7JiN4OTtjMC4zOTItMC45NjcsMS44MTktMS4xMDcsMi43LTEuNDg0Yy0wLjYwNi0wLjkyLTEuOTc1LTEuNjU5LTMuMTA3LTEuODk1Yy0xLjc4Ni0wLjM3My0zLjY3MiwwLjQxMi00Ljc3MSwxLjY4OSYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy0xLjg1NiwyLjE1OC0wLjIxNyw2LjU4NSwyLjU1NSw3LjYzNmwtMC4wMTQsMC4wMDZsMC4yNTUsMC4wNzhjMC4wNzEsMC4wMjIsMC4xNDEsMC4wNDksMC4yMTQsMC4wNjVsNC44MzQsMS40NzYmI3hEOyYjeEE7JiN4OTsmI3g5O2MwLDAtMS4yMDIsMC4yMzctMy4zMDIsMi45NjJjLTIuMzE1LDIuMzUxLDMuMDMzLDUuNzExLTAuMDk1LDcuMjY4Yy0xLjU4NywwLjc5LTEuMzE4LTIuMTExLTAuNzYtMy4zMTImI3hEOyYjeEE7JiN4OTsmI3g5O2MtMi4yMDksMC4zMDEtNC41NDksMi42MzYtNS4wODcsNC41NzRjLTAuNDE0LDEuNDg5LDEuNjY5LDMuODMzLDMuMjY3LDQuMzE0YzAuMTg5LDAuMDU3LDAuMzgzLDAuMSwwLjU3OCwwLjE0MSYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy0wLjAxLDAuMDEyLTAuMDIzLDAuMDIzLTAuMDM0LDAuMDM1Yy0xLjgyOSwyLjEyNywxLjE1LDMuNzYsMC42MzcsNS4xNDdjLTEuMzIxLDMuNTc0LTUuODg1LDAuNTMtNi4zNTMtMC4xMDgmI3hEOyYjeEE7JiN4OTsmI3g5O2MtMC44MjQsNC41OTksMy4yNTQsNi4zMyw2LjEwNyw2LjE2NmMtMS41LDEuMzk0LTAuNzYyLDQuMzg2LTEuODQ0LDQuOTg1Yy0wLjcxMiwwLjM5NS0xLjk0Ny0wLjE2NS0yLjQ3NS0wLjYxOCYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy0wLjA3MiwxLjYzMywwLjk5NiwzLjA4MiwyLjI1MSwzLjE3M2MzLjMwNywwLjIzOSw0Ljc0Mi0yLjI0NSw3LjIxMS0yLjM0NmM1LjE5LTEuODA2LDYuMjQ4LTkuMzE5LDcuMDYtMTkuMTM5JiN4RDsmI3hBOyYjeDk7JiN4OTtzMi44MTItMTMuNzQzLDMuMTUtMTYuMTE4Qzc5LjkxNSwyNS41NzgsNzkuODU5LDI0Ljg0OSw3OS43NDgsMjQuMzIxeiBNNzUuMTU5LDQ0LjgxNWMtNC45NzcsMC41ODYtNS4xMjIsNy43Ny05LjcyNyw4LjM4NCYjeEQ7JiN4QTsmI3g5OyYjeDk7YzUuMTY4LTAuMDI2LDUuOTUtNi4yODMsOS41MDEtNi42NjhjLTAuMzMyLDIuMzU1LTAuNzE2LDQuMjU4LTEuMTE4LDUuODA1Yy0zLjQwMi0wLjI3LTQuNDA0LDMuMjgzLTUuNzU4LDUuNjQ1JiN4RDsmI3hBOyYjeDk7JiN4OTtjLTAuNTY2LDAuNjgyLTAuNzYsMC44ODktMi40NjMsMS40OTFjMy43ODUsMC40MTQsNC4xNzktNC4wMDYsNi43NTctNS41OWMwLjM0MS0wLjI3MSwwLjgxMy0wLjQ3LDEuMjI5LTAuNjkxJiN4RDsmI3hBOyYjeDk7JiN4OTtjLTEuNTg1LDUuNDgxLTMuMzUxLDUuNzQxLTMuMzUxLDUuNzQxYy0yLjYzNCwwLjUxOC01LjQzMiw1LjE1NC03LjY1MywzLjk1NmMwLjUzNy0wLjE0NiwwLjkwOC0wLjQzMiwxLjE4LTAuODAzJiN4RDsmI3hBOyYjeDk7JiN4OTtjMC4wNC0wLjA1NSwwLjA3Ni0wLjExMywwLjExMS0wLjE3MWMwLjkwMS0xLjQ3MiwwLjUxMi00LjA2MywxLjc5Mi01LjM4NmMwLjA2LTAuMDYyLDAuMTE0LTAuMTI3LDAuMTgxLTAuMTgzJiN4RDsmI3hBOyYjeDk7JiN4OTtjMC4wNjgtMC4wMjYsMC4xMy0wLjA1NiwwLjE5My0wLjA4NWMwLjY4My0wLjMxNCwxLjA4NS0wLjgxNCwwLjk2NC0xLjQ3MWMtMi41MjQsMS4zNTctNS4xODYsMS4xNS03LjE3My0xLjgyMiYjeEQ7JiN4QTsmI3g5OyYjeDk7YzMuNTg0LDEuMzQ3LDUuMTI4LDAuMjk1LDYuMTQ2LTEuNDM5YzAuODA5LTEuMzgxLTAuNTY3LTIuOTExLTAuNzk1LTQuMjkxYy0wLjEyNS0wLjc1MywwLjQzMi0xLjIxNiwwLjk4MS0xLjY4OCYjeEQ7JiN4QTsmI3g5OyYjeDk7YzMuMTgtMC4xMzYsNi4xOTUtMS45MDEsNS41NC00LjA0MmMtNC43MzMsNS4xNTMtMTMuMjYsMi4wOC04LjEyOS0zLjAxOWMwLjc2OCwzLjAxNSwzLjU1NSwyLjMwMSw0LjM0OCwxLjI0OCYjeEQ7JiN4QTsmI3g5OyYjeDk7YzEuNDU5LTEuOTM2LTEuNDUtNS4zOTgtMC41MDctNy4xMzFjMC40NjQtMC44NTQsMi4wNTMtMi4yNiw0LjE0OS0zLjI5MWMwLDAtMC41NzEtMC42ODYtMy43LTEuMjU5JiN4RDsmI3hBOyYjeDk7JiN4OTtjLTAuNTYyLTAuMTAzLTEuMTQ3LTAuNDA0LTIuMTU2LTAuNzY3Yy01LjAwMS0yLjQzNi01LjQ1OS03LjUxMywxLjQ2Mi03LjUxM2MtMy41MTMsMS43MDktMi41NjcsNS4xODMsMC40ODYsNS45NjgmI3hEOyYjeEE7JiN4OTsmI3g5O2MzLjQxOSwwLjg3OCw0LjI4MS0yLjMxMyw3LjI0Ny0yLjY3OWMxLjE2Ni0wLjE0NCwyLjgzOSwwLjE4OSwzLjY5LDAuOTg5YzAuMTE3LDAuMTA4LDAuMTgxLDAuMzU4LDAuMzA5LDAuNDc3JiN4RDsmI3hBOyYjeDk7JiN4OTtjMC41MzMsMC45NjEtMC44OCwyLjY5MS0yLjI3OCw5Ljg3MmMtNy43NS0xLjAwMy0zLjQ3NCw2LjIxMi0xMC43NjgsOC4yOGM4LjI1NC0wLjE4Miw0LjM0OS03LjQ2NywxMC41NzUtNy4yNDYmI3hEOyYjeEE7JiN4OTsmI3g5O2MtMC4zOTUsMi4xNzktMC43OCw0LjgwOC0xLjExMyw4LjAwM0M3NS4yNjMsNDMuOTExLDc1LjIxMiw0NC4zNyw3NS4xNTksNDQuODE1eiIvPgogICAgPC9nPgogICAgPGcgaWQ9IkJvZHkiPgogICAgICA8cGF0aCBpZD0iRmlsbF80XyIgZmlsbD0iI0ZGRkZGRiIgZD0iTTg3Ljk5NSw0MS4xMUM4Ni4yNCwzMC41OTUsODMuNzUsMzAuODc1LDgwLjc1LDMwLjE4cy0zLjU0LDAuNzk1LTMuNTQsMC43OTVsLTAuMDkyLDEuNjQzJiN4RDsmI3hBOyYjeDk7JiN4OTtjLTAuMDc0LDAuNzg0LTAuMTYyLDEuNTgyLTAuMTc5LDEuNzE2Yy0wLjY3Miw1LjM3NS0wLjc3MSwxMC44NDMtMS42MDQsMTYuMTkzQzc0LjA0LDU4LjgzLDY5LjI3Nyw2NS4xMSw2MS42MDcsNjkuNTIzJiN4RDsmI3hBOyYjeDk7JiN4OTtjLTUuMTU5LDIuOTY4LTE0LjQ4OCw0LjIxNS0xNi43MTIsOS43NjNjLTAuNjI3LDEuNTY1LTEuMDA2LDQuNTIzLTEuMjM0LDYuNjMxYy0wLjEyMiwxLjEyNS0xLjQwMywxNC4yODIsMjAuMTUsNy4ydi0wLjA1NyYjeEQ7JiN4QTsmI3g5OyYjeDk7YzEuNzI2LTAuNzI4LDQuNDktMS44MDgsNi4zNDctMi4xOTFjNS4wNDItMS4wNDUsMTcuMjc3LTMuMjAzLDIwLjA3Ni03LjMzNmMwLjA2Ni0wLjA5OCwwLjY0Ni0xLjA3MSwwLjY4Ni0xLjE4MiYjeEQ7JiN4QTsmI3g5OyYjeDk7YzAsMCw2Ljk2OC05LjE1Myw1LjQ4Mi0xOS41ODVDOTUuMzY2LDU1LjAyLDg4LjQ0NSw0OS4xMDUsODcuOTk1LDQxLjExeiIvPgogICAgICA8cGF0aCBpZD0iT3V0bGluZV80XyIgZD0iTTk3LjU2OCw1OS40ODRjLTEuNjg5LTYuMjUzLTcuNjA0LTExLjg3OC03LjgxNy0xOC41NTJjMCwwLTAuNjg4LTkuMDY2LTUuMDAxLTEwLjkzNyYjeEQ7JiN4QTsmI3g5OyYjeDk7cy05LjcyMi0yLjk5OC05LjU0OCwzLjI1M2MtMC4wMDcsMC4zNDMtMC45MDIsMTAuNzEtMS4yNSwxNC44NjZjLTAuMzY4LDQuMzg1LTIuODM1LDkuNDI2LTUuMTg2LDEzLjA4NCYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy00Ljc5Miw3LjQ1NS0xOC42MzcsOC4zNzEtMjIuODI0LDE0LjY1MmwwLTAuMDAxYy0yLjg5MiwzLjg1MS0yLjQwNiw2Ljg5MS0yLjcwMSw5LjI5MmMtMC4zNDIsMi43ODktMS4zMjMsNi40NDEsNC40MjcsMTAuMzY2JiN4RDsmI3hBOyYjeDk7JiN4OTtzMTcuMzMyLTAuODkyLDE3LjMzMi0wLjg5MmMwLjAwNS0wLjAwNCwwLjAwOC0wLjAwOCwwLjAxMy0wLjAxM2MyLjA1NS0wLjQ0Myw0LjY2MS0xLjgxNSw2LjMxNy0yLjMzNSYjeEQ7JiN4QTsmI3g5OyYjeDk7YzUuOTc1LTEuODczLDEzLjY1OC0xLjI1NCwxOC41OTEtNS4xNWMwLjY1MS0wLjUxNiwxLjY3OC0xLjQ0OCwyLjQ0My0yLjQxNGwwLjAwMiwwLjAwM2MwLjAxLTAuMDE0LDAuMDE5LTAuMDI3LDAuMDI4LTAuMDQxJiN4RDsmI3hBOyYjeDk7JiN4OTtjMC4xOTYtMC4yNSwwLjM3Ny0wLjUwMSwwLjUyNS0wLjc0OWM4Ljc5OS0xMi43MjIsNC43Ny0yMy45OTEsNC42NjMtMjQuNDE4Qzk3LjU3OCw1OS40ODgsOTcuNTcyLDU5LjQ5LDk3LjU2OCw1OS40ODR6JiN4RDsmI3hBOyYjeDk7JiN4OTsgTTkwLjkyLDgyLjM1MmMtMC4wNCwwLjExLTAuNjE5LDEuMDg0LTAuNjg2LDEuMTgyYy0yLjc5OSw0LjEzMy0xNS4wMzQsNi4yOTEtMjAuMDc2LDcuMzM2Yy0xLjg1NywwLjM4NC00LjYyMSwxLjQ2NC02LjM0NywyLjE5MSYjeEQ7JiN4QTsmI3g5OyYjeDk7djAuMDU3Yy0yMS41NTMsNy4wODItMjAuMjcxLTYuMDc1LTIwLjE1LTcuMmMwLjIyOC0yLjEwNywwLjYwNi01LjA2NSwxLjIzNC02LjYzMWMyLjIyNC01LjU0OCwxMS41NTMtNi43OTUsMTYuNzEyLTkuNzYzJiN4RDsmI3hBOyYjeDk7JiN4OTtjNy42Ny00LjQxMywxMi40MzMtMTAuNjkzLDEzLjcyOS0xOC45OTZjMC44MzMtNS4zNSwwLjkzMi0xMC44MTgsMS42MDQtMTYuMTkzYzAuMDE3LTAuMTM0LDAuMTA0LTAuOTMyLDAuMTc5LTEuNzE2bDAuMDkyLTEuNjQzJiN4RDsmI3hBOyYjeDk7JiN4OTtjMCwwLDAuNTQtMS40OSwzLjU0LTAuNzk1czUuNDksMC40MTUsNy4yNDUsMTAuOTNjMC40NSw3Ljk5NSw3LjM3MSwxMy45MSw4LjQwNywyMS42NTZDOTcuODg4LDczLjE5OSw5MC45Miw4Mi4zNTIsOTAuOTIsODIuMzUyeiIvPgogICAgPC9nPgogICAgPGcgaWQ9IkJhY2tfTGVnMSI+CiAgICAgIDxnIGlkPSJIb29mXzJfIj4KICAgICAgICA8cGF0aCBpZD0iRmlsbF84XyIgZmlsbD0iIzgwODA4MCIgZD0iTTUxLjM0NiwxMjkuMjU2Yy0wLjA0MSwwLjE5NC0wLjQ4OSwxLjgxMS0wLjQ4OSwxLjgxMWMtMC4yMiwwLjc1LTAuNDE0LDEuNTA0LTAuMzksMi4yOTQmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzIuMzc1LDIuMDY3LDkuNTI0LDIuNTQ5LDExLjg4MywwLjQxM2MtMS4wNzktMS4wNzUtMi4wOTItMi4yMDgtMy4wMjctMy4zODlsLTAuODEzLTEuNDVsMC41MDktMC42OTMmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy01Ljg3LTIuNjY3LTguMjAyLDAuOTM5LTguMjAyLDAuOTM5bDAsMEM1MS4wOTksMTI5LjE2LDUxLjM2NiwxMjkuMTYzLDUxLjM0NiwxMjkuMjU2eiIvPgogICAgICAgIDxwYXRoIGlkPSJPdXRsaW5lXzhfIiBkPSJNNjQuNjczLDEzMi45ODhjLTAuNjY1LTEuMDEtMi4yMS0yLjEyMy0zLjA4MS0zLjA4NGMtMC4xOTUtMC4yMTYtMC4zNzYtMC40MzMtMC41NjItMC42NDgmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0xLjAxNS0xLjEwNy0xLjY4LTEuNDMxLTEuNjgtMS40MzFsLTAuMzA1LDAuNDE2bC0wLjUwOSwwLjY5M2wwLjgxMywxLjQ1YzAuOTM2LDEuMTgxLDEuOTQ4LDIuMzEzLDMuMDI3LDMuMzg5JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMi4zNTgsMi4xMzYtOS41MDgsMS42NTQtMTEuODgzLTAuNDEzYy0wLjAyNC0wLjc5LDAuMTctMS41NDQsMC4zOS0yLjI5NGMwLDAsMC40NDgtMS42MTYsMC40ODktMS44MTEmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuMDItMC4wOTMtMC4yNDctMC4wOTYtMC41My0wLjA3NWMtMC4zMDksMC4wMjMtMC42MzYsMC4wNzUtMC42MzYsMC4wNzVsLTAuNjgsMS41NzJjLTAuMjY3LDEuNC0yLjA0OCwyLjg1NCwwLjExMiw0LjEzNyYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtDNTUuNjg5LDEzOC41NTcsNjYuNTkxLDEzNS44ODUsNjQuNjczLDEzMi45ODh6Ii8+CiAgICAgIDwvZz4KICAgICAgPGcgaWQ9IkxlZ18yXyI+CiAgICAgICAgPHBhdGggaWQ9IkZpbGxfOV8iIGZpbGw9IiNGRkZGRkYiIGQ9Ik00Mi45MjUsODQuOTA0Yy0xLjU5NCw1LjkwNCwyLjI5MiwxMS40NjgsMi42MTEsMTYuNzYzJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MwLjIxMywzLjU1Mi0wLjc2MSw5LjEzOC0yLjUyMiwxMy4yMjhjLTEuMTk2LDIuNzc4LDUuNjk3LDQuNjI1LDcuMDIyLDguNjExYzAuNjI0LDEuODctMS40OTIsNS40OSwxLjkwMSw1LjQ5NGwzLjMxMiwwLjA2MiYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMi4zOTEtMC4xOTQsNC4yMzItMC43NzQsMy4yNS0xLjkzOGMtNC4wMTYtNC43NTgtOS41OS05LjU3Ny04LjI1LTE0LjgxMmMxLjExMS00LjMzNyw3LjQtNy41MTYsMTAuMDUxLTEyLjI1NCYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMS42ODYtMy4wMTYsMS45LTUuODg0LDMuMDYxLTguOTgxYzAuMTQ1LTAuMDI5LDAuMzk1LDAuMDQ5LDAuNTM1LDAuMTYzYy0wLjA5Mi0wLjcxLTAuMzAzLTEuNDAxLTAuNzQ1LTIuMDcxJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMS41My0yLjMxNi0zLjM1Ni00Ljc1NC01LjgyMS02LjE1M2MtMi41MjItMS40MzItNi4wMDUtMi42MTQtOS4wMzEtMi42MTZjLTIuMTYyLTAuMDAxLTMuNjM5LDAuNjY1LTQuNjI4LDEuNzA5JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O0M0NC4xNzcsODIuMzU4LDQzLjA5OSw4NC4yNTgsNDIuOTI1LDg0LjkwNHoiLz4KICAgICAgICA8cGF0aCBpZD0iT3V0bGluZV85XyIgZD0iTTU4LjgwNSwxMjkuODkzYzEuODM3LTAuMjE4LDIuNDYxLTEuODk0LDEuNjE4LTIuODUyYy0yLjk1NC0zLjM1NC03LjEzMi02Ljc2Mi04LjMxNS0xMC43NDgmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0xLjc5MS02LjA0MSw2LjE1Mi04Ljc5Nyw4Ljg2OS0xMy4wNjJjMS44OC0yLjk1LDQuMTY0LTguNDczLDMuMDE2LTExLjg2NmMtMC4wMTUtMC4wNDQtMC4wNDktMC4wODYtMC4wOTYtMC4xMjQmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0wLjE0LTAuMTE0LTAuMzktMC4xOTItMC41MzUtMC4xNjNjLTEuMTYxLDMuMDk4LTEuMzc1LDUuOTY2LTMuMDYxLDguOTgxYy0yLjY1MSw0LjczOC04Ljk0LDcuOTE3LTEwLjA1MSwxMi4yNTQmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0xLjM0LDUuMjM1LDQuMjM0LDEwLjA1NSw4LjI1LDE0LjgxMmMwLjk4MiwxLjE2My0wLjg1OSwxLjc0My0zLjI1LDEuOTM4TDUxLjkzOCwxMjljLTMuMzk0LTAuMDA0LTEuMjc3LTMuNjI0LTEuOTAxLTUuNDk0JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMS4zMjUtMy45ODYtOC4yMTgtNS44MzMtNy4wMjItOC42MTFjMS43NjEtNC4wOSwyLjczNS05LjY3NiwyLjUyMi0xMy4yMjhjLTAuMzE5LTUuMjk1LTQuMjA1LTEwLjg1OC0yLjYxMS0xNi43NjMmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuMTc0LTAuNjQ2LDEuMjUyLTIuNTQ2LDAuNzQ3LTIuNzk2Yy0wLjA5MS0wLjA0NS0wLjIyNi0wLjA0NC0wLjQzMiwwLjAzNGMtMi4wNTIsMC43NzMtMi42MjcsOS4xNjktMC4yODMsMTMuOTgyJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MwLjc0NywxLjUzMywwLjc3Myw1LjgxOCwwLjU5Nyw5LjI5MWMtMC4xNzksMy41ODQtMy4zNzIsOC44MzktMy4wMTUsMTEuNDU1YzAuMzQyLDIuNTAzLDYuMTc1LDMuNzUyLDcuMjYzLDUuODM1JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O0M1MC45NjIsMTI4Ljc1NSw0My42NjEsMTMxLjY4OCw1OC44MDUsMTI5Ljg5M3oiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgaWQ9IlRhaWwiPgogICAgICA8bGluZWFyR3JhZGllbnQgaWQ9IkZpbGxfMTRfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii04MS4zNzk5IiB5MT0iMTcwLjA4ODkiIHgyPSItNDkuNTgzNSIgeTI9IjE3MC4wODg5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDk0IDI1NCkiPgogICAgICAgIDxzdG9wIG9mZnNldD0iMC4xNTE3IiBzdHlsZT0ic3RvcC1jb2xvcjojMDBFMUZGIi8+CiAgICAgICAgPHN0b3Agb2Zmc2V0PSIwLjQ3NzUiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGMDAiLz4KICAgICAgICA8c3RvcCBvZmZzZXQ9IjAuNjc5OCIgc3R5bGU9InN0b3AtY29sb3I6I0ZGOUEwRSIvPgogICAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0ZGMDAwMCIvPgogICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgICA8cGF0aCBpZD0iRmlsbF83XyIgZmlsbD0idXJsKCNGaWxsXzE0XykiIGQ9Ik0yMC4wMzcsNzQuNTQ5Yy0zLjM3Myw2LjU2MiwwLjQzOSwxMy4yNCwwLjUxOCwxOS44OTEmI3hEOyYjeEE7JiN4OTsmI3g5O2MwLjA0MywzLjY5LTMuMDY3LDUuODI4LTYuOTMzLDUuMjU4YzIuMDcsMS4zOTgsNS40NjgsMi41NTIsOC4wMDQsMS45NTNjMi42MzEtMC42MjUsNC40Ny0yLjQ0Nyw0Ljk2Ny00Ljg3OSYjeEQ7JiN4QTsmI3g5OyYjeDk7YzAuOTAxLTQuNDA4LTQuODEyLTE1LjMxMiwwLjA2NC0xNy41NDVjNC41NDItMi4wNzgsNi42MzEsNi42OTUsMTMuNzYzLDQuMTc4YzAuMjM0LTAuMDgyLDAuNjM5LTAuMjU1LDEuMDkyLTAuNDM2JiN4RDsmI3hBOyYjeDk7JiN4OTtjLTQuMDI1LTAuNzI5LTQuNzI5LTkuNzA0LTkuNTIzLTEwLjM2MmMtNC4yNTgtMC41ODYtOC40MzEsMi40NTItMTAuMjk1LDUuNjgzYy0xLjk5OSwzLjQ2MS0wLjcxNyw2Ljk0NiwwLjI2MiwxMC40NTQmI3hEOyYjeEE7JiN4OTsmI3g5O2MwLjc5MiwyLjgzMywzLjU1MSw5LjEwNywwLjQ2MSwxMC44MTFjLTAuOTMzLDAuNTEyLTIuNzU0LDAuODYtMy44MjksMC43MTFjNC43NTYtMS4zNTgsNC4yMTEtNS4zMTUsMy44MjktNy43NjkmI3hEOyYjeEE7JiN4OTsmI3g5O2MtMC45ODEtNi4zLTUuMDYzLTEzLjA5NywwLjg3OS0xOC43NTRjMy40NzMtMy4zMDcsMTAuODQ5LTQuODAzLDE0LjAyMS0wLjU2OWMxLjYwNCwyLjE0NCwyLjExLDcuODM2LDQuNDY2LDguOTU4JiN4RDsmI3hBOyYjeDk7JiN4OTtjMC4zNDEsMC4xNjIsMC45MzYsMC4wNDEsMS4zNDEsMC4wODJsMC0wLjAwM2MwLDAsMC40ODctMC4xNjIsMC41NTYtMS4xNDZDNDIuNTU4LDYxLjI1MSwyNS45MzIsNjMuMDgsMjAuMDM3LDc0LjU0OXoiLz4KICAgICAgPHBhdGggaWQ9Ik91dGxpbmVfN18iIGQ9Ik00Mi41NDIsNjkuMDA3Yy0xLjYyNS0yLjE2Ny00LjM2OS00LjE1LTcuMTktNC42ODhjLTUuNzctMS4xLTEzLjE2LDIuMDM4LTE2LjAzOSw2LjcyNSYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy01LjU5Niw5LjExMS0xLjEsMTQuNDQyLTAuOTg0LDIzLjUzOWMwLjA2MSw0LjctNi42NTQsNC40MzgtOC4zMjksMS4yMjljMC44MSw1LjA5OCw5LjA3OCw5LjE5MywxNC4xMjIsNi42MjMmI3hEOyYjeEE7JiN4OTsmI3g5O2M4Ljg5OC00LjUzMSwwLjE5NS0xOS41NDksMi45NzctMjAuODIyYzUuMzYtMi40NTUsNC45MjcsOC4zODMsMTQuMDQ2LDIuODM0YzAuMzczLTAuMjI3LDEuMTUyLTAuNjEzLDEuODEyLTEuMDM2bDAsMC4wMDMmI3hEOyYjeEE7JiN4OTsmI3g5O2MxLjc0OS0wLjY3LDEuODYzLTIuMTYsMS44NjMtMi4xNkM0NS4zNjUsNzguNzc1LDQ0LjIzOSw3MS4yNjYsNDIuNTQyLDY5LjAwN3ogTTQzLjEyNSw4Mi4yMTFsMCwwLjAwMyYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy0wLjQwNi0wLjA0MS0xLDAuMDgtMS4zNDEtMC4wODJjLTIuMzU2LTEuMTIyLTIuODYyLTYuODE0LTQuNDY2LTguOTU4Yy0zLjE3Mi00LjIzNC0xMC41NDgtMi43MzgtMTQuMDIxLDAuNTY5JiN4RDsmI3hBOyYjeDk7JiN4OTtjLTUuOTQyLDUuNjU3LTEuODYsMTIuNDU0LTAuODc5LDE4Ljc1NGMwLjM4MiwyLjQ1MywwLjkyNyw2LjQxLTMuODI5LDcuNzY5YzEuMDc1LDAuMTQ5LDIuODk2LTAuMTk5LDMuODI5LTAuNzExJiN4RDsmI3hBOyYjeDk7JiN4OTtjMy4wOS0xLjcwMywwLjMzMS03Ljk3OC0wLjQ2MS0xMC44MTFjLTAuOTc5LTMuNTA4LTIuMjYxLTYuOTkzLTAuMjYyLTEwLjQ1NGMxLjg2NC0zLjIzMSw2LjAzNy02LjI2OSwxMC4yOTUtNS42ODMmI3hEOyYjeEE7JiN4OTsmI3g5O2M0Ljc5NSwwLjY1OCw1LjQ5OSw5LjYzMyw5LjUyMywxMC4zNjJjLTAuNDU0LDAuMTgxLTAuODU4LDAuMzU0LTEuMDkyLDAuNDM2Yy03LjEzMiwyLjUxOC05LjIyMS02LjI1Ni0xMy43NjMtNC4xNzgmI3hEOyYjeEE7JiN4OTsmI3g5O2MtNC44NzYsMi4yMzMsMC44MzcsMTMuMTM3LTAuMDY0LDE3LjU0NWMtMC40OTcsMi40MzItMi4zMzYsNC4yNTQtNC45NjcsNC44NzljLTIuNTM2LDAuNTk5LTUuOTM0LTAuNTU1LTguMDA0LTEuOTUzJiN4RDsmI3hBOyYjeDk7JiN4OTtjMy44NjYsMC41Nyw2Ljk3Ni0xLjU2Nyw2LjkzMy01LjI1OGMtMC4wNzktNi42NS0zLjg5MS0xMy4zMjgtMC41MTgtMTkuODkxYzUuODk1LTExLjQ2OSwyMi41MjEtMTMuMjk4LDIzLjY0NCw2LjUxNiYjeEQ7JiN4QTsmI3g5OyYjeDk7QzQzLjYxMiw4Mi4wNDksNDMuMTI1LDgyLjIxMSw0My4xMjUsODIuMjExeiIvPgogICAgPC9nPgogICAgPGcgaWQ9IkZyb250X0xlZzEiPgogICAgICA8ZyBpZD0iSG9vZiI+CiAgICAgICAgPHBhdGggaWQ9IkZpbGxfM18iIGZpbGw9IiM4MDgwODAiIGQ9Ik0xMTYuOTQ0LDk3LjUwNmMtMC4wNDEsMC4xOTQtMC40ODksMS44MTEtMC40ODksMS44MTFjLTAuMjIsMC43NS0wLjQxNCwxLjUwNC0wLjM5LDIuMjk0JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MyLjM3NSwyLjA2Nyw5LjUyNCwyLjU0OSwxMS44ODMsMC40MTNjLTEuMDc5LTEuMDc1LTIuMDkyLTIuMjA4LTMuMDI3LTMuMzg5bC0wLjgxMy0xLjQ1bDAuNTA5LTAuNjkzJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtNS44Ny0yLjY2Ny04LjIwMiwwLjkzOS04LjIwMiwwLjkzOWwwLDBDMTE2LjY5Nyw5Ny40MSwxMTYuOTY0LDk3LjQxMywxMTYuOTQ0LDk3LjUwNnoiLz4KICAgICAgICA8cGF0aCBpZD0iT3V0bGluZV8zXyIgZD0iTTEzMC4yNzEsMTAxLjIzOGMtMC42NjUtMS4wMS0yLjIxLTIuMTIzLTMuMDgxLTMuMDg0Yy0wLjE5NS0wLjIxNi0wLjM3Ni0wLjQzMy0wLjU2Mi0wLjY0OCYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTEuMDE1LTEuMTA3LTEuNjgtMS40MzEtMS42OC0xLjQzMWwtMC4zMDUsMC40MTZsLTAuNTA5LDAuNjkzbDAuODEzLDEuNDVjMC45MzYsMS4xODEsMS45NDgsMi4zMTMsMy4wMjcsMy4zODkmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0yLjM1OCwyLjEzNi05LjUwOCwxLjY1NC0xMS44ODMtMC40MTNjLTAuMDI0LTAuNzksMC4xNy0xLjU0NCwwLjM5LTIuMjk0YzAsMCwwLjQ0OC0xLjYxNiwwLjQ4OS0xLjgxMSYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMC4wMi0wLjA5My0wLjI0Ny0wLjA5Ni0wLjUzLTAuMDc1Yy0wLjMwOSwwLjAyMy0wLjYzNiwwLjA3NS0wLjYzNiwwLjA3NWwtMC42OCwxLjU3MmMtMC4yNjcsMS40LTIuMDQ4LDIuODU0LDAuMTEyLDQuMTM3JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O0MxMjEuMjg3LDEwNi44MDcsMTMyLjE4OSwxMDQuMTM1LDEzMC4yNzEsMTAxLjIzOHoiLz4KICAgICAgPC9nPgogICAgICA8ZyBpZD0iTGVnIj4KICAgICAgICA8cGF0aCBpZD0iRmlsbF8yXyIgZmlsbD0iI0ZGRkZGRiIgZD0iTTg5LjA2NCw3OS4yOTNjOS41NTUsNC4wNjYsMTcuMDExLTIuMzQxLDI1LjA3NCwwLjk4NmMxLjgwNSwzLjE1OCwzLjQ1MSw4LjMwMiwyLjc5MSwxMS44NjkmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0wLjI5NiwxLjU5Mi0yLjE0MSwyLjU5MS0yLjM4OSw0LjI0NGMwLjYwNiwxLjA2OSwyLjk2NiwxLjI0NiwzLjg2NSwxLjM0NWMyLjE3MywwLjIzOSw1LjY3NywwLjM4OCw1LjM4Mi0wLjgyNSYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTEuMTM2LTQuNjcyLTQuNDkxLTkuMTAyLTQuMTU4LTE0LjI0MWMzLjkxMi00Ljc0MS0yLjEyOC04LjM3MS00Ljk1LTcuOTExYy04LjExNywxLjMyMy04LjY0Ni0wLjM2My0xNS4yNjMtMy43NSYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTEuOTQ3LTAuOTk4LTQuODAyLTAuNzkzLTUuNTkyLTEuMTk3Yy0xLjMxNSwwLjA3NS0yLjYxNiwwLjI4OS0zLjgwOCwwLjc4N2MtMi44NTQsMS4xOTItNC4zMjQsMy45NDUtMi44NTYsNi44NDImI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuMzIyLDAuNjM2LDAuODI1LDEuNTAyLDEuNDQ4LDIuMzM1Qzg4LjcwMiw3OS41NjQsODguODUyLDc5LjM4Niw4OS4wNjQsNzkuMjkzeiIvPgogICAgICAgIDxwYXRoIGlkPSJPdXRsaW5lXzJfIiBkPSJNMTI1LjcyNSw5Ni4zMzJjMCwwLDAuMDItMC4wMDYsMC4wMjItMC4wMDhjLTEuNzI5LTIuMzM4LTMuMDI4LTQuNzc2LTMuOTU2LTcuNjM5JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMi4zMjctNy4xNzYsNS4xMDUtOS4yMTEtMS4zOTUtMTQuMTM0Yy01LjkyMi00LjQ4Mi03LjYyNywxLjkzOC0xNy44ODgtMy40MzdjLTAuNjI3LTAuMzI4LTguNjgzLTQuMTg4LTguODk5LTEuNTg5JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMC4wMTEsMC4xMjQsMC4wNzMsMC4yMTQsMC4yMTYsMC4yODdjMC43OSwwLjQwNCwzLjY0NSwwLjE5OSw1LjU5MiwxLjE5N2M2LjYxNiwzLjM4Nyw3LjE0Niw1LjA3MywxNS4yNjMsMy43NSYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMi44MjItMC40Niw4Ljg2MiwzLjE3LDQuOTUsNy45MTFjLTAuMzMzLDUuMTQsMy4wMjIsOS41NjksNC4xNTgsMTQuMjQxYzAuMjk1LDEuMjEzLTMuMjA5LDEuMDY0LTUuMzgyLDAuODI1JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMC44OTktMC4wOTktMy4yNTktMC4yNzUtMy44NjUtMS4zNDVjMC4yNDgtMS42NTMsMi4wOTMtMi42NTIsMi4zODktNC4yNDRjMC42Ni0zLjU2Ny0wLjk4Ni04LjcxMS0yLjc5MS0xMS44NjkmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy04LjA2My0zLjMyNy0xNS41MiwzLjA4LTI1LjA3NC0wLjk4NmMtMC4yMTMsMC4wOTMtMC4zNjIsMC4yNzEtMC40NTUsMC40ODNjLTAuMTU4LDAuMzYyLTAuMTQ4LDAuODIzLDAuMDA2LDEuMTI0JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MxLjg3OSwzLjYzMywxMC41MjEsMS43MDcsMTMuNjM5LDAuODY1YzMuNzI5LTEuMDA5LDYuMDgtMC40MTQsOS43MjUsMC4yODdjMS4zNTgsMC4yNiwxLjc1MiwwLjMzMywyLjI1MiwxLjYwNyYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMS4wNywyLjc0MiwxLjY1LDYuMjg1LDAuMDg4LDguOTgyYy0wLjY4OCwxLjE4Ni0yLjIzNiwyLjAyMy0yLjM0LDMuNDYxYzAuMDQ5LDAuMDgsMC4xMTksMC4xNDUsMC4xNzMsMC4yMjEmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuNDAyLDAuNDMsMi4wOTcsMi4wNTYsNS4yMDYsMi42NjRsMC4wMTksMC4wNDlsMC4wMTItMC4wNDFjMCwwLDMuODI4LDAuMzMzLDcuNDI5LTAuNjIzYzAuMzkzLTAuMTIzLDAuNzgyLTAuMjQxLDEuMTkzLTAuMzk2JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MwLjAwMSwwLDAuMDAxLDAsMC4wMDEtMC4wMDFDMTI2LjAxNCw5Ny45NzIsMTI2LjM5LDk3LjI3LDEyNS43MjUsOTYuMzMyeiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyBpZD0iSGVhZCI+CiAgICAgIDxnIGlkPSJIZWFkXzFfIj4KICAgICAgICA8cGF0aCBpZD0iRmlsbF8xXyIgZmlsbD0iI0ZGRkZGRiIgZD0iTTg1LjYsMzkuOTM4YzEuMzUyLTAuNTk3LDIuNzUtMC42NDIsNC4wMDgtMS40ODNjMi4zMTItMS41NDksMi44MzYtMy43MTIsMi41NjQtNi4yMjImI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuNzk5LTAuNzYzLDEuOTMyLTEuMTExLDMuMDYxLTEuMTk1YzIuNTE2LDMuOTU3LDguMjQsNC4yMTQsOC45NTktMC45ODljLTIuNDE2LTAuMjk5LTUuOTA3LDAuMTU3LTYuOTM0LTIuNDczbDAuMjI1LTAuMjA3JiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MxLjg2My0wLjAzMyw4LjY3LTAuOTI3LDguOTU5LTIuODQzYzAuMzI0LTIuMTQ1LTIuMTg4LTcuNzczLTUuMjY2LTYuNTUxYy0yLjI0MiwwLjg4OS0zLjQ5NiwzLjc1My02LjMwNCw0LjU3MyYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTMuMTQ5LDAuOTIxLTMuOTYxLDEuNzgxLTcuMDIyLDAuMjg5Yy0xLjc3MS0wLjg2NC00Ljg5LTAuMzY0LTYuNTIzLDAuOTA1Yy0yLjY5MiwyLjA5MS0zLjU5Niw1Ljc3OC00LjM2OSw1LjIzNCYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTIuODc0LTIuMDItNS41NjctMS43OTktNi45MzItMS42MDdjLTEuMjQzLDAuMTc2LTMuMzg5LDAuNzktMy45NjIsMS44OTZjMi43MzIsMi4yMDgsOS4wNjIsMi40NjQsMTEuMTQ3LDEuNzEmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuMDI3LTAuMDEsMC4wMjIsMC4yMDgsMC4wMDIsMC41MzJjLTAuMDk0LDEuMTExLTAuNDYyLDUuNjYsMi45OTYsNy45NTJDODIuMTE2LDQwLjcyMyw4NS42LDM5LjkzOCw4NS42LDM5LjkzOHoiLz4KICAgICAgICA8cGF0aCBpZD0iT3V0bGluZV8xXyIgZD0iTTk5LjE5NSwxNi4yMDJjLTEuOTg4LDEuNDk2LTMuMzgzLDMuNTY5LTUuNTgyLDQuOTQ0Yy01LjMwNSwzLjMyLTEwLjI2OC03LjEwNi0xNi4yMDUsNS45MzQmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7Yy0zLjY3LTEuODU4LTEyLjM0OS0yLjM4Ni0xMy44NjQsMi4yNjZjMy4wNzQsMi4yNiw3LjMwMSwzLjM5NiwxMS4yNTQsMi45NzFjMC4zOTQtMC4wNjQsMC43NzMtMC4xNzcsMS4xNDYtMC4zMDkmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuODA1LTAuMjg1LDAuNDczLTAuMTc1LDEuMjY4LTAuNTAxYzAuMDIxLTAuMzI0LDAuMDI1LTAuNTQyLTAuMDAyLTAuNTMyYy0yLjA4NSwwLjc1NC04LjQxNSwwLjQ5OC0xMS4xNDctMS43MSYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMC41NzMtMS4xMDYsMi43MTktMS43MiwzLjk2Mi0xLjg5NmMxLjM2NS0wLjE5Miw0LjA1OC0wLjQxMyw2LjkzMiwxLjYwN2MwLjc3MywwLjU0NCwxLjY3Ny0zLjE0Myw0LjM2OS01LjIzNCYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMS42MzQtMS4yNjksNC43NTMtMS43NjksNi41MjMtMC45MDVjMy4wNjIsMS40OTIsMy44NzMsMC42MzIsNy4wMjItMC4yODljMi44MDgtMC44Miw0LjA2Mi0zLjY4NCw2LjMwNC00LjU3MyYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjMy4wNzctMS4yMjIsNS41OSw0LjQwNiw1LjI2Niw2LjU1MWMtMC4yODksMS45MTYtNy4wOTYsMi44MS04Ljk1OSwyLjg0M2wtMC4yMjUsMC4yMDdjMS4wMjYsMi42Myw0LjUxOCwyLjE3NCw2LjkzNCwyLjQ3MyYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTAuNzE5LDUuMjAzLTYuNDQzLDQuOTQ2LTguOTU5LDAuOTg5Yy0xLjEyOSwwLjA4NC0yLjI2MiwwLjQzMi0zLjA2MSwxLjE5NWMwLjI3MSwyLjUxLTAuMjUzLDQuNjczLTIuNTY0LDYuMjIyJiN4RDsmI3hBOyYjeDk7JiN4OTsmI3g5O2MtMS4yNTgsMC44NDEtMi42NTYsMC44ODYtNC4wMDgsMS40ODNjMCwwLTAuMTg0LDAuNzI5LDEuMDI1LDEuMDZjMy44NTgsMS4wNTcsNy4zNTgtMy4xOTYsNy4xMDItNi41MDUmI3hEOyYjeEE7JiN4OTsmI3g5OyYjeDk7YzAuNjA1LTAuNDAyLDEuMTU0LTAuNjUzLDEuNjkzLTAuNzUyYzAuNzIzLDAuNjAyLDEuNDMyLDEuMDMzLDIuMTUyLDEuMzM2YzMuNCwxLjQyNSw4LjY0NS0wLjQwMSw4LjY0My00LjYxNiYjeEQ7JiN4QTsmI3g5OyYjeDk7JiN4OTtjLTAuMDAxLTIuODM4LTMuNTEtMC44ODktNS4wNC0xLjk3OGMxLjY0NC0wLjg2Nyw0LjkwNi0wLjYyNiw2LjAzMy0xLjk3OUMxMTEuMTAyLDIxLjgyNCwxMDMuMDY2LDEzLjI4OCw5OS4xOTUsMTYuMjAyeiIvPgogICAgICA8L2c+CiAgICAgIDxlbGxpcHNlIGlkPSJCYWNrX05vc3RyaWwiIGN4PSIxMDIuODM4IiBjeT0iMjAuMSIgcng9IjAuODc3IiByeT0iMC40NzgiLz4KICAgICAgPGVsbGlwc2UgaWQ9IkZyb250X05vc3RyaWwiIGN4PSIxMDIuNTkyIiBjeT0iMjMuMDE0IiByeD0iMS41NjQiIHJ5PSIwLjg3OSIvPgogICAgICA8cGF0aCBpZD0iQmFja19FeWUiIGQ9Ik04Ny42OTUsMjQuMTVjMC41OTgtMC40NDEsMC42NDQtMS4xODgsMC4yNTUtMS43OTJjLTAuMzk4LTAuNjIxLDAuNjE4LTEuMTY4LDEuMDE4LTAuNTQ3JiN4RDsmI3hBOyYjeDk7JiN4OTtjMC42MzIsMC45ODEsMC4xMjgsMi4xMTMtMC44NDEsMi44MjlDODcuNzcsMjQuOTAyLDg3LjMzOSwyNC40MTQsODcuNjk1LDI0LjE1eiIvPgogICAgICA8cGF0aCBpZD0iRnJvbnRfRXllIiBkPSJNODYuMDQ1LDI4LjkxN2MwLjkzMi0wLjM1NiwwLjkzNi0xLjU2MiwwLjQxMi0yLjM3Yy0wLjUtMC43NzEsMC43NjItMS40NTYsMS4yNjItMC42ODYmI3hEOyYjeEE7JiN4OTsmI3g5O2MwLjk1OCwxLjQ3OSwwLjU3NywzLjYxMi0xLjEyNiw0LjI2MUM4NS43MTUsMzAuNDU3LDg1LjE2NiwyOS4yNTEsODYuMDQ1LDI4LjkxN3oiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJIb3JuIj4KICAgICAgPHBhdGggaWQ9IkZpbGwiIGZpbGw9IiNGQkIwM0IiIGQ9Ik03OS40NDUsMjMuNTkzYzEuNjA0LDAuMzgsMi45MzEtMC42MjEsMy4yNDItMS42MTVjLTIuODgzLTMuNjE5LTYuOTkyLTguNTI0LTEwLjcxMi0xMi4zMjgmI3hEOyYjeEE7JiN4OTsmI3g5O0M3My45MTQsMTQuMjU1LDc3LjE2NiwxOS4xMyw3OS40NDUsMjMuNTkzeiIvPgogICAgICA8cGF0aCBpZD0iT3V0bGluZSIgZD0iTTg0LjM1NywyMS42NzZDODMuMjE0LDE5LjYyMyw3Mi4xMDEsNi43ODEsNzAuMDc5LDcuMDAyYy0wLjczNywwLjc1OSw1Ljk0NCwxNC43NTksOC40NSwxNy45MTYmI3hEOyYjeEE7JiN4OTsmI3g5O0M4Mi4wMTIsMjUuOTg4LDg1LjE4MiwyMy4xNTIsODQuMzU3LDIxLjY3NnogTTc3Ljk0MywxNi4zMjVjMC41NDksMS4wNCwwLjQzOCwzLjA1OC0wLjM1NywzLjg0OCYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy0wLjMzOC0wLjU5NS0wLjY4Mi0xLjE5NC0xLjAyNy0xLjc5NWMwLjA0MS0wLjAzMSwwLjA4MS0wLjA2MiwwLjExNC0wLjExNWMwLjUwMS0wLjc4MywwLjc3My0xLjcxNywwLjc0NS0yLjY0MSYjeEQ7JiN4QTsmI3g5OyYjeDk7YzAuMTU3LDAuMTgyLDAuMzEyLDAuMzYyLDAuNDY4LDAuNTQ0Qzc3LjkwNiwxNi4yMiw3Ny45MTIsMTYuMjY3LDc3Ljk0MywxNi4zMjV6IE03NS44NzMsMTMuODU4JiN4RDsmI3hBOyYjeDk7JiN4OTtjMC40NTgsMS4wMDksMC40OTIsMi42MzEsMC4xLDMuNDk3Yy0wLjQyMi0wLjczNi0wLjg0MS0xLjQ3My0xLjI1MS0yLjIxMmMwLjI4Ny0wLjY4NSwwLjQyMy0xLjQzNiwwLjM1OC0yLjE3MyYjeEQ7JiN4QTsmI3g5OyYjeDk7Qzc1LjM0NSwxMy4yNjQsNzUuNjA5LDEzLjU2MSw3NS44NzMsMTMuODU4eiBNNzMuNzI2LDExLjQ5M2MwLjIwOSwwLjY4MiwwLjI4MiwxLjUxNSwwLjIyOSwyLjIzNCYjeEQ7JiN4QTsmI3g5OyYjeDk7Yy0wLjczMS0xLjM3MS0xLjQxNC0yLjczNi0xLjk3OS00LjA3N0M3Mi41NTEsMTAuMjM5LDczLjEzNywxMC44Niw3My43MjYsMTEuNDkzeiBNNzguMDk0LDIxLjA4MyYjeEQ7JiN4QTsmI3g5OyYjeDk7YzAuMDI5LTAuMDE5LDAuMDYxLTAuMDI4LDAuMDktMC4wNTdjMC43NzYtMC43NTIsMS4zMTItMS43NTgsMS40MzgtMi44MDVjMC4xNDQsMC4xNzIsMC4yODgsMC4zNDUsMC40MywwLjUxNiYjeEQ7JiN4QTsmI3g5OyYjeDk7YzAuMDA2LDAuMDI2LDAuMDAyLDAuMDQ0LDAuMDExLDAuMDcxYzAuMzQ3LDEuMTE2LTAuMTUsMy4xMDEtMS4wOTIsMy43NDNjLTAuMDIxLDAuMDE1LTAuMDMyLDAuMDM0LTAuMDUxLDAuMDUmI3hEOyYjeEE7JiN4OTsmI3g5O0M3OC42NTIsMjIuMDk5LDc4LjM3OCwyMS41OTMsNzguMDk0LDIxLjA4M3ogTTc5LjQ0NSwyMy41OTNjLTAuMDE5LTAuMDM2LTAuMDM5LTAuMDcyLTAuMDU3LTAuMTA4JiN4RDsmI3hBOyYjeDk7JiN4OTtjMC4wMDctMC4wMDQsMC4wMTQtMC4wMDQsMC4wMjEtMC4wMDljMS4wNDgtMC43MTQsMS44NDEtMS44MDksMi4wNjMtMy4wMDhjMC40MjMsMC41MjEsMC44MzEsMS4wMjgsMS4yMTUsMS41MSYjeEQ7JiN4QTsmI3g5OyYjeDk7QzgyLjM3NiwyMi45NzIsODEuMDUsMjMuOTczLDc5LjQ0NSwyMy41OTN6Ii8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4=" id="10"/></item></list></costumes><sounds><list struct="atomic" id="11"></list></sounds><blocks></blocks><variables></variables><scripts><script x="14" y="10"><custom-block s="%s to the %s mod %s $speechBubbleOutline ? %n"><l>3</l><l>508</l><l>509</l><l>.1</l><comment w="386" collapsed="false">Fermat&apos;s little theorem: if n is prime, then for any 1&lt;a&lt;n, a^(n-1)=1 mod n&#xD;So if a^(n-1) mod n != 1, you know n is not prime! Test a bunch of a and n-1 and n.&#xD;&#xD;You can change the speed with the last parameter, or turn off speech bubbles with 0 </comment></custom-block></script><script x="12" y="309.16666666666686"><custom-block s="test primality of %s with base %s"><block s="reportSum"><block s="reportProduct"><l>2</l><block s="reportRandom"><l>500</l><l>4999</l></block></block><l>1</l></block><block s="reportRandom"><l>2</l><l>100</l></block><comment w="255.00000000000003" collapsed="false">How many random odd 4-digit numbers are (not) prime? The rest are probably prime, and we can be more certain if we test them with more a (or use more certain tests) </comment></custom-block></script><script x="16" y="126"><block s="doDeclareVariables"><list><l>n</l><l>a</l></list><comment w="347" collapsed="false">3x11x17=561 is a &apos;Carmichael Number&apos;, which means a^560=1 mod 561 a lot of the time, but not ALL the time </comment></block><block s="doSetVar"><l>n</l><block s="reportProduct"><l>3</l><block s="reportProduct"><l>11</l><l>17</l></block></block></block><block s="doSetVar"><l>a</l><block s="reportRandom"><l>2</l><block s="reportDifference"><block var="n"/><l>1</l></block></block></block><block s="bubble"><block s="reportJoinWords"><list><block var="a"/><l>^(</l><block var="n"/><l>-1) mod </l><block var="n"/><l> = </l><custom-block s="%s to the %s mod %s"><block var="a"/><block s="reportDifference"><block var="n"/><l>1</l></block><block var="n"/></custom-block></list></block></block></script><script x="10" y="485.16666666666686"><block s="receiveGo"></block><custom-block s="USE BIGNUMS %b"><block s="reportBoolean"><l><bool>true</bool></l></block><comment w="240.00000000000003" collapsed="false">This enables arithmetic with unlimited digits</comment></custom-block><block s="doDeclareVariables"><list><l>p</l><l>q</l><l>RSA-100</l></list></block><block s="doSetVar"><l>p</l><l>37975227936943673922808872755445627854565536638199</l></block><block s="doSetVar"><l>q</l><l>40094690950920881030683735292761468389214899724061</l></block><block s="doSetVar"><l>RSA-100</l><block s="reportProduct"><block var="p"/><block var="q"/></block><comment w="246.46875" collapsed="false">See https://en.wikipedia.org/wiki/RSA_numbers</comment></block><block s="doSayFor"><block s="reportJoinWords"><list><l>Semiprime RSA-100 is the product of large primes p </l><block var="p"/><l> and q </l><block var="q"/></list></block><l>2</l></block><block s="doThinkFor"><l>Is p prime?</l><l>1</l></block><custom-block s="test primality of %s with base %s"><block var="p"/><block s="reportRound"><block s="reportRandom"><l>2</l><l>1000000</l></block></block></custom-block><block s="doWait"><l>2</l></block><block s="doThinkFor"><l>Is q prime?</l><l>1</l></block><custom-block s="test primality of %s with base %s"><block var="q"/><block s="reportRound"><block s="reportRandom"><l>2</l><l>1000000</l></block></block></custom-block><block s="doWait"><l>2</l></block><block s="doThinkFor"><l>Is RSA-100 prime?</l><l>1</l></block><custom-block s="test primality of %s with base %s"><block var="RSA-100"/><block s="reportRound"><block s="reportRandom"><l>2</l><l>1000000</l></block></block></custom-block></script><script x="12" y="400.66666666666663"><custom-block s="test primality of %s with base %s"><l>3989</l><block s="reportRandom"><l>2</l><l>100</l></block><comment w="362" collapsed="false">A random number that doesn&apos;t immediately fail can be tested here more times </comment></custom-block></script><script x="457" y="478.50000000000034"><custom-block s="oopx p: %s q: %s e: %s"><l>521</l><l>911</l><l>14557</l></custom-block></script><script x="20" y="1046.833333333333"><custom-block s="compute decryption exponent p: %s q: %s e: %s"><l>521</l><l>911</l><l>14557</l></custom-block></script><script x="19" y="973.6666666666664"><custom-block s="compute decryption exponent p: %s q: %s e: %s"><l>131</l><l>167</l><l>761</l><comment w="228" collapsed="false">These are the same p,q,e from the video</comment></custom-block></script><script x="16" y="40.5"><custom-block s="%s to the %s mod %s"><l>3</l><l>508</l><l>509</l></custom-block></script></scripts></sprite></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="USE BIGNUMS %&apos;bool&apos;" type="command" category="operators"><comment x="0" y="0" w="303.3333333333333" collapsed="false">call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.</comment><header></header><code></code><translations>pt:altera utilização de aritmética do Scheme para _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doDeclareVariables"><list><l>isDone</l></list></block><block s="doSetVar"><l>isDone</l><block s="evaluate"><block s="reportJSFunction"><list><l>useBigNums</l></list><l>var done = false;&#xD;&#xD;function initialize (callback) {&#xD;    var bigScript = document.createElement(&apos;script&apos;);&#xD;    bigScript.src = &apos;//snap.berkeley.edu/snap/libraries/biginteger.js&apos;;&#xD;    bigScript.onload = loadScheme;&#xD;    document.head.appendChild(bigScript);&#xD;&#xD;    function loadScheme () {&#xD;        var schemeScript = document.createElement(&apos;script&apos;);&#xD;        schemeScript.src = &apos;//snap.berkeley.edu/snap/libraries/schemeNumber.js&apos;;&#xD;        schemeScript.onload = finish;&#xD;        document.head.appendChild(schemeScript);&#xD;    }&#xD;&#xD;    function finish () {&#xD;        makeGlobalObject();&#xD;        callback();&#xD;    }&#xD;}&#xD;&#xD;function makeGlobalObject () {&#xD;    window.bigNumbers = {&#xD;        originalEvaluate: InputSlotMorph.prototype.evaluate,&#xD;        originalChangeVar: VariableFrame.prototype.changeVar,&#xD;        originalPrims: {&#xD;            reportBasicSum: Process.prototype.reportBasicSum,&#xD;            reportBasicDifference: Process.prototype.reportBasicDifference,&#xD;            reportBasicProduct: Process.prototype.reportBasicProduct,&#xD;            reportBasicQuotient: Process.prototype.reportBasicQuotient,&#xD;            reportBasicPower: Process.prototype.reportBasicPower,&#xD;            reportBasicModulus: Process.prototype.reportBasicModulus,&#xD;            reportBasicRandom: Process.prototype.reportBasicRandom,&#xD;            reportBasicLessThan: Process.prototype.reportBasicLessThan,&#xD;            reportBasicGreaterThan: Process.prototype.reportBasicGreaterThan,&#xD;            reportEquals: Process.prototype.reportEquals,&#xD;            reportIsIdentical: Process.prototype.reportIsIdentical,&#xD;            reportMonadic: Process.prototype.reportMonadic&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;function loadBlocks () {&#xD;    var fn = SchemeNumber.fn;&#xD;    var originalPrims = window.bigNumbers.originalPrims;&#xD;    if (useBigNums) {&#xD;        InputSlotMorph.prototype.evaluate = function () {&#xD;            var contents = this.contents();&#xD;            if (this.constant) {&#xD;                return this.constant;&#xD;            }&#xD;            if (this.isNumeric) {&#xD;                return parseNumber(contents.text || &apos;0&apos;);&#xD;            }&#xD;            return contents.text;&#xD;        };&#xD;        VariableFrame.prototype.changeVar = function (name, delta, sender) {&#xD;            var frame = this.find(name),&#xD;                value,&#xD;                newValue;&#xD;            if (frame) {&#xD;                value = parseNumber(frame.vars[name].value);&#xD;                newValue = Number.isNaN(value) ? delta : fn[&apos;+&apos;](value, parseNumber(delta));&#xD;                if (sender instanceof SpriteMorph &amp;&amp;&#xD;                        (frame.owner instanceof SpriteMorph) &amp;&amp;&#xD;                        (sender !== frame.owner)) {&#xD;                    sender.shadowVar(name, newValue);&#xD;                } else {&#xD;                    frame.vars[name].value = newValue;&#xD;                }&#xD;&#xD;            }&#xD;        };&#xD;        Object.assign(Process.prototype, {&#xD;            reportBasicSum: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;+&apos;](a, b);&#xD;            },&#xD;            reportBasicDifference: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;-&apos;](a, b);&#xD;            },&#xD;            reportBasicProduct: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;*&apos;](a, b);&#xD;            },&#xD;            reportBasicQuotient: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (fn[&apos;=&apos;](b, &apos;0&apos;) &amp;&amp; !fn[&apos;=&apos;](a, &apos;0&apos;)) {&#xD;                      return (fn[&apos;&lt;&apos;](a, &apos;0&apos;) ? SchemeNumber(&apos;-inf.0&apos;) : SchemeNumber(&apos;+inf.0&apos;))&#xD;                };&#xD;                if (Number.isNaN(a) || Number.isNaN(b) || fn[&apos;=&apos;](b, &apos;0&apos;)) return NaN;&#xD;                return fn[&apos;/&apos;](a, b);&#xD;            },&#xD;            reportBasicPower: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;expt&apos;](a, b);&#xD;            },&#xD;            reportBasicModulus: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                var result = fn.mod(a, b);&#xD;                if (fn[&apos;&lt;&apos;](b, &apos;0&apos;) &amp;&amp; fn[&apos;&gt;&apos;](result, &apos;0&apos;)) {&#xD;                    result = fn[&apos;+&apos;](result, b);&#xD;                }&#xD;                return result;&#xD;            },&#xD;            reportBasicRandom: function (min, max) {&#xD;                var floor = parseNumber(min),&#xD;                    ceil = parseNumber(max);&#xD;                if (Number.isNaN(floor) || Number.isNaN(ceil)) return NaN;&#xD;                if (!fn[&apos;=&apos;](fn.mod(floor, &apos;1&apos;), &apos;0&apos;) || !fn[&apos;=&apos;](fn.mod(ceil, &apos;1&apos;), &apos;0&apos;)) {&#xD;                    // One of the numbers isn&apos;t whole. Include the decimal.&#xD;                    return fn[&apos;+&apos;](&#xD;                        fn[&apos;*&apos;](&#xD;                            Math.random(),&#xD;                            fn[&apos;-&apos;](ceil, floor)&#xD;                        ),&#xD;                        floor&#xD;                    );&#xD;                }&#xD;                return fn.floor(&#xD;                    fn[&apos;+&apos;](&#xD;                        fn[&apos;*&apos;](&#xD;                            Math.random(),&#xD;                            fn[&apos;+&apos;](&#xD;                                fn[&apos;-&apos;](ceil, floor),&#xD;                                &apos;1&apos;&#xD;                            )&#xD;                        ),&#xD;                        floor&#xD;                    )&#xD;                );&#xD;            },&#xD;            reportBasicLessThan: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;&lt;&apos;](a, b);&#xD;            },&#xD;            reportBasicGreaterThan: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;&gt;&apos;](a, b);&#xD;            },&#xD;            reportEqual: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) return snapEquals(a, b);&#xD;                return fn[&apos;=&apos;](x, y);&#xD;            },&#xD;            reportIsIdentical: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) return originalPrims.reportIsIdentical(a, b);&#xD;                return fn[&apos;=&apos;](x, y);&#xD;            },&#xD;            reportMonadic: function (fname, n) {&#xD;                if (this.enableHyperOps) {&#xD;                    if (n instanceof List) {&#xD;                        return n.map(each =&gt; this.reportMonadic(fname, each));&#xD;                    }&#xD;                }&#xD;&#xD;                n = parseNumber(n);&#xD;                if (Number.isNaN(n)) return NaN;&#xD;&#xD;                switch (Process.prototype.inputOption(fname)) {&#xD;                case &apos;abs&apos;:&#xD;                    return fn.abs(n);&#xD;                case &apos;neg&apos;:&#xD;                    return fn[&apos;-&apos;](n);&#xD;                case &apos;ceiling&apos;:&#xD;                    return fn.ceiling(n);&#xD;                case &apos;floor&apos;:&#xD;                    return fn.floor(n);&#xD;                case &apos;sqrt&apos;:&#xD;                    return sqrt(n);&#xD;                case &apos;sin&apos;:&#xD;                    return fn.sin(radians(n));&#xD;                case &apos;cos&apos;:&#xD;                    return fn.cos(radians(n));&#xD;                case &apos;tan&apos;:&#xD;                    return fn.tan(radians(n));&#xD;                case &apos;asin&apos;:&#xD;                    return degrees(fn.asin(n));&#xD;                case &apos;acos&apos;:&#xD;                    return degrees(fn.acos(n));&#xD;                case &apos;atan&apos;:&#xD;                    return degrees(fn.atan(n));&#xD;                case &apos;ln&apos;:&#xD;                    return fn.log(n);&#xD;                case &apos;log&apos;:&#xD;                    return fn.log(n, &apos;10&apos;);&#xD;                case &apos;lg&apos;:&#xD;                    return fn.log(n, &apos;2&apos;);&#xD;                case &apos;e^&apos;:&#xD;                    return fn.exp(n);&#xD;                case &apos;10^&apos;:&#xD;                    return fn.expt(&apos;10&apos;, n);&#xD;                case &apos;2^&apos;:&#xD;                    return fn.expt(&apos;2&apos;, n);&#xD;                default:&#xD;                    return SchemeNumber(&apos;0&apos;);&#xD;                }&#xD;            }&#xD;        });&#xD;    } else {&#xD;        InputSlotMorph.prototype.evaluate = window.bigNumbers.originalEvaluate;&#xD;        VariableFrame.prototype.changeVar = window.bigNumbers.originalChangeVar;&#xD;        Object.assign(Process.prototype, originalPrims);&#xD;    }&#xD;    done = true;&#xD;}&#xD;&#xD;function parseNumber (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;    if (!fn[&apos;number?&apos;](n)) {&#xD;        n = &apos;&apos; + n;&#xD;        try {&#xD;            return parseENotation(n) || SchemeNumber(n);&#xD;        } catch (err) {&#xD;            return NaN;&#xD;        }&#xD;    }&#xD;    return n;&#xD;}&#xD;&#xD;function parseENotation (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;&#xD;    var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i);&#xD;    if (!numbers) return null;&#xD;&#xD;    var coefficient = numbers[1];&#xD;    var exponent = numbers[2];&#xD;    return fn[&apos;*&apos;](&#xD;        coefficient,&#xD;        fn.expt(&apos;10&apos;, exponent)&#xD;    );&#xD;}&#xD;&#xD;function sqrt (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;&#xD;    if (!fn[&apos;exact?&apos;](n) || !fn[&apos;rational?&apos;](n) || fn[&apos;&lt;&apos;](n,&apos;0&apos;)) return fn.sqrt(n);&#xD;&#xD;    var rootNumerator = fn[&apos;exact-integer-sqrt&apos;](fn.numerator(n));&#xD;    if (!fn[&apos;=&apos;](rootNumerator[1], &apos;0&apos;)) return fn.sqrt(n);&#xD;&#xD;    var rootDenominator = fn[&apos;exact-integer-sqrt&apos;](fn.denominator(n));&#xD;    if (!fn[&apos;=&apos;](rootDenominator[1], &apos;0&apos;)) return fn.sqrt(n);&#xD;&#xD;    return fn[&apos;/&apos;](rootNumerator[0], rootDenominator[0]);&#xD;}&#xD;&#xD;function isDone () {&#xD;    return done;&#xD;}&#xD;&#xD;if (window.bigNumbers) {&#xD;    loadBlocks();&#xD;} else {&#xD;    initialize(loadBlocks);&#xD;}&#xD;&#xD;return isDone;</l></block><list><block var="bool"/></list></block></block><block s="doWaitUntil"><block s="evaluate"><block var="isDone"/><list></list></block></block></script></block-definition><block-definition s="%&apos;n&apos; !" type="reporter" category="operators"><comment x="0" y="0" w="190.66666666666663" collapsed="false">The factorial function, to make very large numbers, to demo bignums.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="n"/><l>0</l></block><l>1</l><block s="reportProduct"><block var="n"/><custom-block s="%n !"><block s="reportDifference"><block var="n"/><l>1</l></block></custom-block></block></block></block></script></block-definition><block-definition s="%&apos;x&apos;" type="reporter" category="operators"><comment x="0" y="0" w="234.66666666666666" collapsed="false">The identity function: reports its input.&#xD;It&apos;s useful to get things like 3/4 or 5-2i into&#xD;numeric input slots.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block var="x"/></block></script></block-definition><block-definition s="Scheme number %&apos;function&apos; of %&apos;number&apos;" type="reporter" category="operators"><comment x="0" y="0" w="300" collapsed="true">Provides Scheme arithmetic functions not in JavaScript</comment><header></header><code></code><translations>pt:_ de _&#xD;</translations><inputs><input type="%s" readonly="true"><options>number?&#xD;complex?&#xD;real?&#xD;rational?&#xD;integer?&#xD;exact?&#xD;inexact?&#xD;exact&#xD;inexact&#xD;finite?&#xD;infinite?&#xD;nan?&#xD;numerator&#xD;denominator&#xD;real-part&#xD;imag-part&#xD;magnitude&#xD;angle</options></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l><l>num</l></list><l>function parseNumber (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;    if (!fn[&apos;number?&apos;](n)) {&#xD;        n = &apos;&apos; + n;&#xD;        try {&#xD;            return parseENotation(n) || SchemeNumber(n);&#xD;        } catch (err) {&#xD;            return NaN;&#xD;        }&#xD;    }&#xD;    return n;&#xD;}&#xD;&#xD;function parseENotation (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;&#xD;    var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i);&#xD;    if (!numbers) return null;&#xD;&#xD;    var coefficient = numbers[1];&#xD;    var exponent = numbers[2];&#xD;    return fn[&apos;*&apos;](&#xD;        coefficient,&#xD;        fn.expt(&apos;10&apos;, exponent)&#xD;    );&#xD;}&#xD;var fn=SchemeNumber.fn,&#xD;      number=parseNumber(num);&#xD;&#xD;switch (which) {&#xD;  case &apos;number?&apos;:&#xD;  case &apos;complex?&apos;:&#xD;    return (fn[&apos;number?&apos;](number));&#xD;  case &apos;real?&apos;:&#xD;    return (fn[&apos;real?&apos;](number) || fn[&apos;real-valued?&apos;](number));&#xD;  case &apos;rational?&apos;:&#xD;    return (fn[&apos;rational?&apos;](number) || (fn[&apos;=&apos;](number, fn.rationalize(number, parseNumber(&apos;1.0e-5&apos;)))));&#xD;  case &apos;integer?&apos;:&#xD;    return (fn[&apos;integer?&apos;](number) || fn[&apos;integer-valued?&apos;](number));&#xD;  case &apos;exact?&apos;:&#xD;  case &apos;inexact?&apos;:&#xD;  case &apos;finite?&apos;:&#xD;  case &apos;infinite?&apos;:&#xD;  case &apos;nan?&apos;:&#xD;  case &apos;real-part&apos;:&#xD;  case &apos;imag-part&apos;:&#xD;    return (fn[which](number));&#xD;  case &apos;magnitude&apos;:&#xD;    return (fn.magnitude(number));&#xD;  case &apos;angle&apos;:&#xD;    return (fn.angle(number));&#xD;  case &apos;numerator&apos;:&#xD;    return (fn.numerator(number));&#xD;  case &apos;denominator&apos;:&#xD;    return (fn.denominator(number));&#xD;  case &apos;exact&apos;:&#xD;    return (fn.exact(number));&#xD;case &apos;inexact&apos;:&#xD;    return (fn.inexact(number));&#xD;}</l></block><list><block var="function"/><block var="number"/></list></block></block></script></block-definition><block-definition s="%&apos;base&apos; to the %&apos;power&apos; mod %&apos;modulus&apos; $speechBubbleOutline ? %&apos;t&apos;" type="reporter" category="operators"><comment x="0" y="0" w="341" collapsed="false">Compute a^k mod n efficiently by repeated halving (top-down version of bottom-up repeated squaring). If you send in a nonzero t, that&apos;s how long verbose speech bubbles will last</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%n">0</input></inputs><script><block s="doIf"><block s="reportEquals"><block var="power"/><l>1</l></block><script><block s="doSayFor"><block s="reportJoinWords"><list><l>answer is </l><block s="reportModulus"><block var="base"/><block var="modulus"/></block></list></block><block var="t"/></block><block s="doReport"><block s="reportModulus"><block var="base"/><block var="modulus"/></block></block></script><comment w="257.126953125" collapsed="false">If we&apos;ve halved all the way down to power=1, the answer is simple </comment></block><block s="doDeclareVariables"><list><l>halfpower</l><l>halfanswer</l><l>answer</l></list></block><block s="doSetVar"><l>halfpower</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="power"/><l>2</l></block></block></block><block s="doSayFor"><block s="reportJoinWords"><list><l>computing </l><block var="base"/><l> to the </l><block var="halfpower"/></list></block><block var="t"/></block><block s="doSetVar"><l>halfanswer</l><custom-block s="%s to the %s mod %s $speechBubbleOutline ? %n"><block var="base"/><block var="halfpower"/><block var="modulus"/><block var="t"/></custom-block><comment w="342" collapsed="false">Here&apos;s where the magic happens: this custom block calls this custom block. &#xD;FUNCTION-CEPTION!&#xD;Which in Computer Science is known as &apos;recursion&apos;</comment></block><block s="doIfElse"><block s="reportEquals"><block s="reportModulus"><block var="power"/><l>2</l></block><l>1</l></block><script><block s="doSetVar"><l>answer</l><block s="reportModulus"><block s="reportProduct"><block s="reportProduct"><block var="halfanswer"/><block var="halfanswer"/></block><block var="base"/></block><block var="modulus"/></block></block><block s="doSayFor"><block s="reportJoinWords"><list><block var="halfanswer"/><l> x </l><block var="halfanswer"/><l> x </l><block var="base"/><l> = </l><block var="answer"/><l> (odd)</l></list></block><block var="t"/></block></script><script><block s="doSetVar"><l>answer</l><block s="reportModulus"><block s="reportProduct"><block var="halfanswer"/><block var="halfanswer"/></block><block var="modulus"/></block></block><block s="doSayFor"><block s="reportJoinWords"><list><block var="halfanswer"/><l> x </l><block var="halfanswer"/><l> = </l><block var="answer"/><l> (even)</l></list></block><block var="t"/></block></script></block><block s="doReport"><block var="answer"/></block></script></block-definition><block-definition s="test primality of %&apos;n&apos; with base %&apos;a&apos;" type="command" category="operators"><comment x="0" y="0" w="319.5390625" collapsed="false">Test whether n is prime by computing a^(n-1)mod n. If the result is not 1, then a is a &apos;witness&apos; that n is not prime. If the result IS 1, then we haven&apos;t necessarily proved that n IS prime, but we also failed to find evidence that n is NOT prime... </comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s">2</input></inputs><script><block s="doDeclareVariables"><list><l>test</l></list></block><block s="doSetVar"><l>test</l><custom-block s="%s to the %s mod %s"><block var="a"/><block s="reportDifference"><block var="n"/><l>1</l></block><block var="n"/></custom-block></block><block s="bubble"><block s="reportJoinWords"><list><l>n=</l><block var="n"/><block s="reportIfElse"><block s="reportEquals"><block var="test"/><l>1</l></block><l> MIGHT be </l><l> is NOT</l></block><l> prime, because </l><block var="a"/><l>^(n-1)mod n = </l><block var="test"/></list></block></block></script></block-definition><block-definition s="%&apos;base&apos; to the %&apos;power&apos; mod %&apos;modulus&apos;" type="reporter" category="operators"><comment x="0" y="0" w="341" collapsed="false">Compute a^k mod n efficiently by repeated halving (top-down version of bottom-up repeated squaring). This version goes a lot faster than the other version with the &apos;Say&apos; blocks (even if say-time is 0)</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="power"/><l>1</l></block><script><block s="doReport"><block s="reportModulus"><block var="base"/><block var="modulus"/><comment w="257.126953125" collapsed="false">If we&apos;ve halved all the way down to power=1, the answer is simple </comment></block></block></script></block><block s="doDeclareVariables"><list><l>halfpower</l><l>halfanswer</l></list></block><block s="doSetVar"><l>halfpower</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="power"/><l>2</l></block></block></block><block s="doSetVar"><l>halfanswer</l><custom-block s="%s to the %s mod %s"><block var="base"/><block var="halfpower"/><block var="modulus"/></custom-block><comment w="342" collapsed="false">Here&apos;s where the magic happens: this custom block calls this custom block. &#xD;FUNCTION-CEPTION!&#xD;Which in Computer Science is known as &apos;recursion&apos;</comment></block><block s="doIfElse"><block s="reportEquals"><block s="reportModulus"><block var="power"/><l>2</l></block><l>0</l></block><script><block s="doReport"><block s="reportModulus"><block s="reportProduct"><block var="halfanswer"/><block var="halfanswer"/></block><block var="modulus"/></block></block></script><script><block s="doReport"><block s="reportModulus"><block s="reportProduct"><block s="reportProduct"><block var="halfanswer"/><block var="halfanswer"/></block><block var="base"/></block><block var="modulus"/></block></block></script></block></script></block-definition><block-definition s="oopx p: %&apos;p&apos; q: %&apos;q&apos; e: %&apos;e&apos;" type="command" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>E</l><l>rem</l><l>div</l><l>a</l><l>b</l></list></block><block s="doSetVar"><l>E</l><block s="reportProduct"><block s="reportDifference"><block var="p"/><l>1</l></block><block s="reportDifference"><block var="q"/><l>1</l></block></block></block><block s="doSetVar"><l>rem</l><block s="reportNewList"><list><block var="E"/><block var="e"/></list></block></block><block s="doSetVar"><l>div</l><block s="reportNewList"><list><l>1</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="E"/><block var="e"/></block></block></list></block></block><block s="doSetVar"><l>a</l><block s="reportNewList"><list><l>1</l><l>0</l></list></block></block><block s="doSetVar"><l>b</l><block s="reportNewList"><list><l>0</l><l>1</l></list></block></block><block s="doUntil"><block s="reportEquals"><custom-block s="last %l"><block var="rem"/></custom-block><l>1</l></block><script><block s="doAddToList"><block s="reportModulus"><custom-block s="next to last %l"><block var="rem"/></custom-block><custom-block s="last %l"><block var="rem"/></custom-block></block><block var="rem"/></block><block s="doAddToList"><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><custom-block s="next to last %l"><block var="rem"/></custom-block><custom-block s="last %l"><block var="rem"/></custom-block></block></block><block var="div"/></block><block s="doAddToList"><block s="reportDifference"><custom-block s="next to last %l"><block var="a"/></custom-block><block s="reportProduct"><custom-block s="last %l"><block var="a"/></custom-block><custom-block s="next to last %l"><block var="div"/></custom-block></block></block><block var="a"/></block><block s="doAddToList"><block s="reportDifference"><custom-block s="next to last %l"><block var="b"/></custom-block><block s="reportProduct"><custom-block s="last %l"><block var="b"/></custom-block><custom-block s="next to last %l"><block var="div"/></custom-block></block></block><block var="b"/></block></script></block><block s="doReport"><block s="reportModulus"><custom-block s="last %l"><block var="b"/></custom-block><block var="E"/></block></block></script><scripts><script x="345" y="455.49999999999994"><block s="doSayFor"><block s="reportNewList"><list><block var="rem"/><block var="div"/><block var="a"/><block var="b"/></list></block><l>1000</l></block></script></scripts></block-definition><block-definition s="next to last %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportDifference"><block s="reportListLength"><block var="list"/></block><l>1</l></block><block var="list"/></block></block></script></block-definition><block-definition s="last %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l><option>last</option></l><block var="list"/></block></block></script></block-definition><block-definition s="compute decryption exponent p: %&apos;p&apos; q: %&apos;q&apos; e: %&apos;e&apos;" type="reporter" category="operators"><comment x="0" y="0" w="274.6337890625" collapsed="false">Given chosen primes p and q and encryption exponent e, compute a decryption exponent d, so that for Euler number E=(p-1)(q-1), ed=1 mod E.&#xD;&#xD;This follows the computation methodology in the &apos;RSA Encryption with Excel&apos; videos by Jonathon Briggs, see youtube.com/watch?v=zxMNNwvhj94&#xD;He names columns a,b,d,k, I call his d and k &apos;rem&apos; for remainder and &apos;div&apos; for dividend </comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>E</l><l>rem</l><l>div</l><l>a</l><l>b</l></list></block><block s="doSetVar"><l>E</l><block s="reportProduct"><block s="reportDifference"><block var="p"/><l>1</l></block><block s="reportDifference"><block var="q"/><l>1</l></block></block></block><block s="doSetVar"><l>rem</l><block s="reportNewList"><list><block var="E"/><block var="e"/></list></block></block><block s="doSetVar"><l>div</l><block s="reportNewList"><list><l>1</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="E"/><block var="e"/></block></block></list></block></block><block s="doSetVar"><l>a</l><block s="reportNewList"><list><l>1</l><l>0</l></list></block></block><block s="doSetVar"><l>b</l><block s="reportNewList"><list><l>0</l><l>1</l></list></block></block><block s="doUntil"><block s="reportEquals"><custom-block s="last %l"><block var="rem"/></custom-block><l>1</l></block><script><block s="doAddToList"><block s="reportModulus"><custom-block s="next to last %l"><block var="rem"/></custom-block><custom-block s="last %l"><block var="rem"/></custom-block></block><block var="rem"/></block><block s="doAddToList"><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><custom-block s="next to last %l"><block var="rem"/></custom-block><custom-block s="last %l"><block var="rem"/></custom-block></block></block><block var="div"/></block><block s="doAddToList"><block s="reportDifference"><custom-block s="next to last %l"><block var="a"/></custom-block><block s="reportProduct"><custom-block s="last %l"><block var="a"/></custom-block><custom-block s="next to last %l"><block var="div"/></custom-block></block></block><block var="a"/></block><block s="doAddToList"><block s="reportDifference"><custom-block s="next to last %l"><block var="b"/></custom-block><block s="reportProduct"><custom-block s="last %l"><block var="b"/></custom-block><custom-block s="next to last %l"><block var="div"/></custom-block></block></block><block var="b"/></block></script></block><block s="doReport"><block s="reportModulus"><custom-block s="last %l"><block var="b"/></custom-block><block var="E"/></block></block></script></block-definition><block-definition s="testit" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>1</l></block></script></block-definition><block-definition s="say this: what for this long: nsecs seconds" type="command" category="looks"><header></header><code></code><translations></translations><inputs></inputs></block-definition></blocks><variables></variables></project><media name="Fermats Little Test" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>