{"id":427455,"date":"2024-07-26T09:00:48","date_gmt":"2024-07-26T09:00:48","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=427455"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=427455","title":{"rendered":"<span>justCTF 2024 [teaser] \u2014 blockchain<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div class=\"persona\"><img decoding=\"async\" class=\"image persona__image\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8e2\/188\/184\/8e21881844d02b9524f7cc3801b17eff.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8e2\/188\/184\/8e21881844d02b9524f7cc3801b17eff.png\"\/><\/p>\n<h5 class=\"persona__heading\">\u0420\u0443\u0441\u0442\u0430\u043c \u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432<\/h5>\n<p>\u043f\u0440\u0435\u0434\u0441\u0435\u0434\u0430\u0442\u0435\u043b\u044c \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430 \u0420\u0410\u0414 \u041a\u041e\u041f<\/p>\n<\/div>\n<blockquote>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430\u0448\u0438\u043c \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0435\u043c \u0420\u0430\u0442\u043c\u0438\u0440\u043e\u043c \u041a\u0430\u0440\u0430\u0431\u0443\u0442\u043e\u043c (<a href=\"https:\/\/ratmirkarabut.com\">https:\/\/ratmirkarabut.com<\/a>) , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0420\u0410\u0414 \u041a\u041e\u041f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f CTF \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430.<\/p>\n<\/blockquote>\n<p>\u0421\u0440\u0435\u0434\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u043c 24-\u0447\u0430\u0441\u043e\u0432\u043e\u043c \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0440\u0430\u0443\u043d\u0434\u0435 justCTF, \u0442\u0440\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u043b\u0438\u0441\u044c \u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 \u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0432\u043e\u0435\u0439 \u0438\u043c\u0435\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438\u0433\u0440\u044b-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043d\u0430 Move, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u0441\u0442\u043d\u0435\u0442\u0435 Sui. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 \u0441\u043e\u0431\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442-\u0441\u043e\u043b\u0432\u0435\u0440 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0439 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0435\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c-\u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u0442\u0434\u0430\u0442\u044c \u0444\u043b\u0430\u0433.<\/p>\n<p>\u041d\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e\u0439, \u043d\u043e, \u0441\u0443\u0434\u044f \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u0437\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0432 \u0446\u0435\u043b\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043f\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 \u044d\u0442\u0438 \u0442\u0440\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0441\u043a\u043e\u0440\u0438\u043d\u0433\u0443 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0447\u043a\u043e\u0432. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u043e\u0432\u0441\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0430 \u043c\u0438\u043a\u0447\u0435\u043a-\u0440\u0430\u0437\u043c\u0438\u043d\u043a\u0443 \u0441 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u0432\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0431\u043e\u043b\u0435\u0435 \u0432\u043e\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u043e\u0439, \u043d\u043e \u0437\u0430\u0433\u0430\u0434\u043a\u0430 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u043e\u0439, \u0447\u0442\u043e \u0438 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u043b\u043e \u043c\u0435\u043d\u044f \u043d\u0430 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e. \u0421\u0442\u043e\u0438\u0442, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<div class=\"persona\"><img decoding=\"async\" class=\"image persona__image\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a45\/fd3\/b57\/a45fd3b57296c749e2629b3a9ff6a28f.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a45\/fd3\/b57\/a45fd3b57296c749e2629b3a9ff6a28f.png\"\/><\/p>\n<h5 class=\"persona__heading\">\u0420\u0443\u0441\u0442\u0430\u043c \u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432<\/h5>\n<p>\u043f\u0440\u0435\u0434\u0441\u0435\u0434\u0430\u0442\u0435\u043b\u044c \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430 \u0420\u0410\u0414 \u041a\u041e\u041f<\/p>\n<\/div>\n<blockquote>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430\u043c\u0438 \u043f\u043e \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0443 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0438\u0435\u0445\u0430\u043b\u0438 \u0432 \u0433\u043e\u0441\u0442\u0438 \u043a \u0420\u0430\u0442\u043c\u0438\u0440\u0443 \u0432 \u044f\u043d\u0432\u0430\u0440\u0435 2022 \u0433\u043e\u0434\u0430 \u043c\u0435\u043d\u044f \u043f\u043e\u0440\u0430\u0437\u0438\u043b\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0435\u0433\u043e \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f. \u041f\u043e\u043c\u043d\u044e \u0435\u0433\u043e \u043b\u0435\u043a\u0446\u0438\u044e \u043f\u043e \u043a\u043d\u0438\u0433\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%BE%D0%B9%D0%B0,_%D0%94%D1%8C%D1%91%D1%80%D0%B4%D1%8C\">\u0414\u044c\u0435\u0440\u0434\u044f \u041f\u043e\u0439\u044f <\/a>\u00ab\u041a\u0430\u043a \u0440\u0435\u0448\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443\u00bb, \u0438 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435 \u0445\u0430\u043a\u0435\u0440\u0430 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430, \u0440\u0435\u0448\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0443. \u041e\u0447\u0435\u043d\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0435\u0451 \u043a \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0430 \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u00ab\u0441\u0442\u0430\u0432\u0438\u0442 \u043c\u043e\u0437\u0433\u0438 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e\u00bb, \u0432\u043e\u0442 \u043f\u0430\u0440\u0430 \u0446\u0438\u0442\u0430\u0442:<\/p>\n<p>\u00ab\u0413\u043b\u0443\u043f\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043d\u0435 \u043f\u043e\u043d\u044f\u043b\u0438. \u041d\u0435\u0432\u0435\u0441\u0435\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0446\u0435\u043b\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043d\u0435 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u0441\u044c. \u0422\u0430\u043a\u0438\u0435 \u0433\u043b\u0443\u043f\u044b\u0435 \u0438 \u043d\u0435\u0432\u0435\u0441\u0451\u043b\u044b\u0435 \u0432\u0435\u0449\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0432 \u0448\u043a\u043e\u043b\u0435, \u0442\u0430\u043a \u0438 \u0432\u043d\u0435 \u0435\u0451, \u043e\u0434\u043d\u0430\u043a\u043e \u0443\u0447\u0438\u0442\u0435\u043b\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0438\u0445 \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043b\u0430\u0441\u0441\u0435. \u0423\u0447\u0435\u043d\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043d\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443. \u041d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c; \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0445\u043e\u0442\u0435\u0442\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u0435\u0451. \u0415\u0441\u043b\u0438 \u0443\u0447\u0435\u043d\u0438\u043a\u0443 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043a \u043d\u0435\u0439, \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0433\u043e \u0432\u0438\u043d\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0443\u043c\u0435\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u0430, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u0440\u0443\u0434\u043d\u043e\u0439 \u0438 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043b\u0451\u0433\u043a\u043e\u0439, \u0431\u044b\u0442\u044c \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u043b\u044f \u0435\u0451 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438\u00bb.<\/p>\n<p>\u00ab\u041f\u0443\u0442\u044c \u043e\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0431\u0435 \u043f\u043b\u0430\u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u043b\u0433\u0438\u043c \u0438 \u0438\u0437\u0432\u0438\u043b\u0438\u0441\u0442\u044b\u043c. \u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0448\u0430\u0433 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0434\u0435\u044e \u043f\u043b\u0430\u043d\u0430. \u042d\u0442\u0430 \u0438\u0434\u0435\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e. \u0418\u043b\u0438 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432\u0434\u0440\u0443\u0433, \u0432 \u043e\u0434\u0438\u043d \u043c\u0438\u0433, \u043f\u043e\u0441\u043b\u0435, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0431\u0435\u0437\u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0439. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0451 \u00ab\u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0435\u0439 \u0438\u0434\u0435\u0435\u0439\u00bb.<\/p>\n<p>\u041b\u0443\u0447\u0448\u0435\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0447\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u0443\u0447\u0430\u0449\u0435\u0433\u043e\u0441\u044f, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0443\u0442\u0451\u043c \u043d\u0435\u043d\u0430\u0437\u043e\u0439\u043b\u0438\u0432\u043e\u0439 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u043c\u0443 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0443\u044e \u0438\u0434\u0435\u044e\u00bb.<\/p>\n<\/blockquote>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2e0\/cc1\/3a7\/2e0cc13a7f4aed3543381ef5e52f7963.png\" alt=\"\u0414\u044c\u0435\u0440\u0434\u044c \u041f\u043e\u0439\u0430 \u0438 \u0435\u0433\u043e \u043a\u043d\u0438\u0433\u0430 &quot;\u041a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443&quot;\" title=\"\u0414\u044c\u0435\u0440\u0434\u044c \u041f\u043e\u0439\u0430 \u0438 \u0435\u0433\u043e \u043a\u043d\u0438\u0433\u0430 &quot;\u041a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443&quot;\" width=\"1080\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e0\/cc1\/3a7\/2e0cc13a7f4aed3543381ef5e52f7963.png\"\/><\/p>\n<div><figcaption><strong>\u0414\u044c\u0435\u0440\u0434\u044c \u041f\u043e\u0439\u0430 \u0438 \u0435\u0433\u043e \u043a\u043d\u0438\u0433\u0430 &#171;\u041a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443&#187;<\/strong><\/figcaption><\/div>\n<\/figure>\n<h2>[The Otter Scrolls] &#8212; easy (246 points, 33 solves)<\/h2>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430:<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/2024.justctf.team\/challenges\/11\">https:\/\/2024.justctf.team\/challenges\/11<\/a><\/p>\n<p>module challenge::theotterscrolls {<\/p>\n<pre><code class=\"rust\">\/\/ --------------------------------------------------- \/\/ DEPENDENCIES \/\/ ---------------------------------------------------  use sui::table::{Self, Table}; use std::string::{Self, String}; use std::debug;  \/\/ --------------------------------------------------- \/\/ STRUCTS \/\/ ---------------------------------------------------  public struct Spellbook has key {     id: UID,     casted: bool,     spells: Table&lt;u8, vector&lt;String&gt;&gt; }  \/\/ --------------------------------------------------- \/\/ FUNCTIONS \/\/ ---------------------------------------------------  \/\/The spell consists of five magic words, which have to be read in the correct order!  fun init(ctx: &amp;mut TxContext) {          let mut all_words = table::new(ctx);      let fire = vector[         string::utf8(b\"Blast\"),         string::utf8(b\"Inferno\"),         string::utf8(b\"Pyre\"),         string::utf8(b\"Fenix\"),         string::utf8(b\"Ember\")     ];      let wind = vector[         string::utf8(b\"Zephyr\"),         string::utf8(b\"Swirl\"),         string::utf8(b\"Breeze\"),         string::utf8(b\"Gust\"),         string::utf8(b\"Sigil\")     ];      let water = vector[         string::utf8(b\"Aquarius\"),         string::utf8(b\"Mistwalker\"),         string::utf8(b\"Waves\"),         string::utf8(b\"Call\"),         string::utf8(b\"Storm\")     ];      let earth = vector[         string::utf8(b\"Tremor\"),         string::utf8(b\"Stoneheart\"),         string::utf8(b\"Grip\"),         string::utf8(b\"Granite\"),         string::utf8(b\"Mudslide\")     ];      let power = vector[         string::utf8(b\"Alakazam\"),         string::utf8(b\"Hocus\"),         string::utf8(b\"Pocus\"),         string::utf8(b\"Wazzup\"),         string::utf8(b\"Wrath\")     ];      table::add(&amp;mut all_words, 0, fire);      table::add(&amp;mut all_words, 1, wind);      table::add(&amp;mut all_words, 2, water);      table::add(&amp;mut all_words, 3, earth);      table::add(&amp;mut all_words, 4, power);       let spellbook = Spellbook {         id: object::new(ctx),         casted: false,         spells: all_words     };      transfer::share_object(spellbook); }  public fun cast_spell(spell_sequence: vector&lt;u64&gt;, book: &amp;mut Spellbook) {      let fire = table::remove(&amp;mut book.spells, 0);     let wind = table::remove(&amp;mut book.spells, 1);     let water = table::remove(&amp;mut book.spells, 2);     let earth = table::remove(&amp;mut book.spells, 3);     let power = table::remove(&amp;mut book.spells, 4);      let fire_word_id = *vector::borrow(&amp;spell_sequence, 0);     let wind_word_id = *vector::borrow(&amp;spell_sequence, 1);     let water_word_id = *vector::borrow(&amp;spell_sequence, 2);     let earth_word_id = *vector::borrow(&amp;spell_sequence, 3);     let power_word_id = *vector::borrow(&amp;spell_sequence, 4);      let fire_word = vector::borrow(&amp;fire, fire_word_id);     let wind_word = vector::borrow(&amp;wind, wind_word_id);     let water_word = vector::borrow(&amp;water, water_word_id);     let earth_word = vector::borrow(&amp;earth, earth_word_id);     let power_word = vector::borrow(&amp;power, power_word_id);      if (fire_word == string::utf8(b\"Inferno\")) {         if (wind_word == string::utf8(b\"Zephyr\")) {             if (water_word == string::utf8(b\"Call\")) {                 if (earth_word == string::utf8(b\"Granite\")) {                     if (power_word == string::utf8(b\"Wazzup\")) {                         book.casted = true;                     }                 }             }         }     }  }  public fun check_if_spell_casted(book: &amp;Spellbook): bool {     let casted = book.casted;     assert!(casted == true, 1337);     casted } <\/code><\/pre>\n<p>}<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u0449\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, The Otter Scrolls, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c &#8212; \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0432 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u043c\u0443 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430, \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0444\u043b\u0430\u0433\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0442\u0435\u043b\u043e `solve()` \u0432 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u043c `sources\/framework-solve\/solve\/sources\/solve.move`:<\/p>\n<pre><code class=\"rust\">public fun solve(     _spellbook: &amp;mut theotterscrolls::Spellbook,     _ctx: &amp;mut TxContext ) {     let spell = vector[1u64,0,3,3,3];     theotterscrolls::cast_spell(spell, _spellbook);     theotterscrolls::check_if_spell_casted(_spellbook); }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 `sources\/framework-solve\/dependency\/Move.toml` \u0432\u0435\u0440\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 (\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u0432\u0448\u0438\u0441\u044c \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443 \u043f\u043e \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e `nc tos.nc.jsctf.pro 31337`):<\/p>\n<pre><code class=\"rust\">```toml ... [addresses]              admin = \"0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e\"                  challenge = \"542fe29e11d10314d3330e060c64f8fb9cd341981279432b03b2bd51cf5d489b\"     ```<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e `HOST=tos.nc.jctf.pro .\/runclient.sh` (\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 [Sui] (<a href=\"https:\/\/docs.sui.io\/guides\/developer\/getting-started\/sui-install#install-sui-binaries-from-source\">https:\/\/docs.sui.io\/guides\/developer\/getting-started\/sui-install#install-sui-binaries-from-source<\/a>)), \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0444\u043b\u0430\u0433.<\/p>\n<h2>[Dark BrOTTERhood] &#8212; medium (275 points, 25 solves)<\/h2>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430:<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/2024.justctf.team\/challenges\/13\">https:\/\/2024.justctf.team\/challenges\/13<\/a><\/p>\n<p>module challenge::Otter {<\/p>\n<pre><code class=\"rust\">\/\/ --------------------------------------------------- \/\/ DEPENDENCIES \/\/ ---------------------------------------------------  use sui::coin::{Self, Coin}; use sui::balance::{Self, Supply}; use sui::url; use sui::random::{Self, Random}; use sui::table::{Self, Table};  \/\/ --------------------------------------------------- \/\/ CONST \/\/ ---------------------------------------------------  const NEW: u64 = 1; const WON: u64 = 2; const FINISHED: u64 = 3;  const WRONG_AMOUNT: u64 = 1337; const BETTER_BRING_A_KNIFE_TO_A_GUNFIGHT: u64 = 1338; const WRONG_STATE: u64 = 1339; const ALREADY_REGISTERED: u64 = 1340; const NOT_REGISTERED: u64 = 1341; const TOO_MUCH_MONSTERS: u64 = 1342; const NOT_SOLVED: u64 = 1343;  const QUEST_LIMIT: u64 = 25; \/\/ --------------------------------------------------- \/\/ STRUCTS \/\/ ---------------------------------------------------  public struct OTTER has drop {}  public struct OsecSuply&lt;phantom CoinType&gt; has key {     id: UID,     supply: Supply&lt;CoinType&gt; }  public struct Vault&lt;phantom CoinType&gt; has key {     id: UID,     cash: Coin&lt;CoinType&gt; }  public struct Monster has store {     fight_status: u64,     reward: u8,     power: u8 }  public struct QuestBoard has key, store {     id: UID,     quests: vector&lt;Monster&gt;,     players: Table&lt;address, bool&gt; }  public struct Flag has key, store {     id: UID,     user: address,     flag: bool }  public struct Player has key, store {     id: UID,     user: address,     coins: Coin&lt;OTTER&gt;,     power: u8 }  \/\/ --------------------------------------------------- \/\/ MINT CASH \/\/ ---------------------------------------------------  fun init(witness: OTTER, ctx: &amp;mut TxContext) {     let (mut treasury, metadata) = coin::create_currency(         witness, 9, b\"OSEC\", b\"Osec\", b\"Otter ca$h\", option::some(url::new_unsafe_from_bytes(b\"https:\/\/osec.io\/\")), ctx     );     transfer::public_freeze_object(metadata);      let pool_liquidity = coin::mint&lt;OTTER&gt;(&amp;mut treasury, 50000, ctx);      let vault = Vault&lt;OTTER&gt; {         id: object::new(ctx),         cash: pool_liquidity     };      let supply = coin::treasury_into_supply(treasury);      let osec_supply = OsecSuply&lt;OTTER&gt; {         id: object::new(ctx),         supply     };      transfer::transfer(osec_supply, tx_context::sender(ctx));      transfer::share_object(QuestBoard {         id: object::new(ctx),         quests: vector::empty(),         players: table::new(ctx)     });      transfer::share_object(vault); }  public fun mint(sup: &amp;mut OsecSuply&lt;OTTER&gt;, amount: u64, ctx: &amp;mut TxContext): Coin&lt;OTTER&gt; {     let osecBalance = balance::increase_supply(&amp;mut sup.supply, amount);     coin::from_balance(osecBalance, ctx) }  public entry fun mint_to(sup: &amp;mut OsecSuply&lt;OTTER&gt;, amount: u64, to: address, ctx: &amp;mut TxContext) {     let osec = mint(sup, amount, ctx);     transfer::public_transfer(osec, to); }  public fun burn(sup: &amp;mut OsecSuply&lt;OTTER&gt;, c: Coin&lt;OTTER&gt;): u64 {     balance::decrease_supply(&amp;mut sup.supply, coin::into_balance(c)) }  \/\/ --------------------------------------------------- \/\/ REGISTER \/\/ ---------------------------------------------------  public fun register(sup: &amp;mut OsecSuply&lt;OTTER&gt;, board: &amp;mut QuestBoard, player: address, ctx: &amp;mut TxContext) {     assert!(!table::contains(&amp;board.players, player), ALREADY_REGISTERED);      table::add(&amp;mut board.players, player, false);      transfer::transfer(Player {         id: object::new(ctx),         user: tx_context::sender(ctx),         coins: mint(sup, 137, ctx),         power: 10     }, player); }  \/\/ --------------------------------------------------- \/\/ SHOP \/\/ ---------------------------------------------------  #[allow(lint(self_transfer))] public fun buy_flag(vault: &amp;mut Vault&lt;OTTER&gt;, player: &amp;mut Player, ctx: &amp;mut TxContext): Flag {     assert!(coin::value(&amp;player.coins) &gt;= 1337, WRONG_AMOUNT);      let coins = coin::split(&amp;mut player.coins, 1337, ctx);     coin::join(&amp;mut vault.cash, coins);      Flag {         id: object::new(ctx),         user: tx_context::sender(ctx),         flag: true     } }  public fun buy_sword(vault: &amp;mut Vault&lt;OTTER&gt;, player: &amp;mut Player, ctx: &amp;mut TxContext) {     assert!(coin::value(&amp;player.coins) &gt;= 137, WRONG_AMOUNT);      let coins = coin::split(&amp;mut player.coins, 137, ctx);     coin::join(&amp;mut vault.cash, coins);      player.power = player.power + 100; }  \/\/ --------------------------------------------------- \/\/ ADVENTURE TIME \/\/ ---------------------------------------------------  #[allow(lint(public_random))] public fun find_a_monster(board: &amp;mut QuestBoard, r: &amp;Random, ctx: &amp;mut TxContext) {     assert!(vector::length(&amp;board.quests) &lt;= QUEST_LIMIT, TOO_MUCH_MONSTERS);      let mut generator = random::new_generator(r, ctx);      let quest = Monster {         fight_status: NEW,         reward: random::generate_u8_in_range(&amp;mut generator, 13, 37),         power: random::generate_u8_in_range(&amp;mut generator, 13, 73)     };      vector::push_back(&amp;mut board.quests, quest);  }  public fun fight_monster(board: &amp;mut QuestBoard, player: &amp;mut Player, quest_id: u64) {     let quest = vector::borrow_mut(&amp;mut board.quests, quest_id);     assert!(quest.fight_status == NEW, WRONG_STATE);     assert!(player.power &gt; quest.power, BETTER_BRING_A_KNIFE_TO_A_GUNFIGHT);      player.power = 10; \/\/ sword breaks after fighting the monster :c      quest.fight_status = WON; }  public fun return_home(board: &amp;mut QuestBoard, quest_id: u64) {     let quest_to_finish = vector::borrow_mut(&amp;mut board.quests, quest_id);     assert!(quest_to_finish.fight_status == WON, WRONG_STATE);      quest_to_finish.fight_status = FINISHED; }  #[allow(lint(self_transfer))] public fun get_the_reward(     vault: &amp;mut Vault&lt;OTTER&gt;,     board: &amp;mut QuestBoard,     player: &amp;mut Player,     quest_id: u64,     ctx: &amp;mut TxContext, ) {     let quest_to_claim = vector::borrow_mut(&amp;mut board.quests, quest_id);     assert!(quest_to_claim.fight_status == FINISHED, WRONG_STATE);      let monster = vector::pop_back(&amp;mut board.quests);      let Monster {         fight_status: _,         reward: reward,         power: _     } = monster;      let coins = coin::split(&amp;mut vault.cash, (reward as u64), ctx);      coin::join(&amp;mut player.coins, coins); }  \/\/ --------------------------------------------------- \/\/ PROVE SOLUTION \/\/ ---------------------------------------------------  public fun prove(board: &amp;mut QuestBoard, flag: Flag) {     let Flag {         id,         user,         flag     } = flag;      object::delete(id);      assert!(table::contains(&amp;board.players, user), NOT_REGISTERED);     assert!(flag, NOT_SOLVED);     *table::borrow_mut(&amp;mut board.players, user) = true; }  \/\/ --------------------------------------------------- \/\/ CHECK WINNER \/\/ ---------------------------------------------------  public fun check_winner(board: &amp;QuestBoard, player: address) {     assert!(*table::borrow(&amp;board.players, player) == true, NOT_SOLVED); } <\/code><\/pre>\n<p>}<\/p>\n<\/div>\n<\/details>\n<h3>\u0410\u043d\u0430\u043b\u0438\u0437<\/h3>\n<p>\u041f\u0440\u043e\u0431\u0435\u0436\u0430\u0432 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0430\u044f \u043d\u0430\u0441 \u0438\u0433\u0440\u043e\u0432\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043e\u0431\u0432\u044f\u0437\u043a\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0441\u0435\u043a\u0446\u0438\u0439 SHOP \u0438 ADVENTURE TIME. \u041f\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 137 \u043c\u043e\u043d\u0435\u0442 \u0438 10 \u0441\u0438\u043b\u044b; \u0432\u044b\u0437\u0432\u0430\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e `find_a_monster()`, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 `board.quests` &#171;\u043c\u043e\u043d\u0441\u0442\u0440\u0430&#187; \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u0438\u043b\u044b (\u043e\u0442 13 \u0434\u043e 37) \u0438 \u043d\u0430\u0433\u0440\u0430\u0434\u044b (\u043e\u0442 13 \u0434\u043e 73), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c `NEW`.\u00a0 `fight_monster()` \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c \u043c\u043e\u043d\u0441\u0442\u0440\u0430 \u0438\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043a\u0432\u0435\u0441\u0442\u043e\u0432, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 `NEW`, \u0430 \u0435\u0433\u043e \u0441\u0438\u043b\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0438\u043b\u044b \u0438\u0433\u0440\u043e\u043a\u0430, \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0438\u043b\u0443 \u0438\u0433\u0440\u043e\u043a\u0430 \u043a 10 \u0438 \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u0432\u0435\u0441\u0442\u0430 \u043d\u0430 `WON`.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0434\u043b\u044f \u043f\u043e\u0431\u0435\u0434\u044b \u0441\u0438\u043b\u0443, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u0432\u0430\u0442\u044c `buy_sword()` &#8212; &#171;\u043c\u0435\u0447&#187; \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u0441\u0438\u043b\u0443 \u043d\u0430 100 (\u0447\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0438\u0437 `fight_monster()`), \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u0438\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u0443 137 \u043c\u043e\u043d\u0435\u0442 &#8212; \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0434\u0435\u043d\u044c\u0433\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0430\u0434\u0430 \u0437\u0430 \u043c\u043e\u043d\u0441\u0442\u0440\u0430 &#8212; \u0432\u0441\u0435\u0433\u043e 73 \u043c\u043e\u043d\u0435\u0442\u044b, \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 &#171;\u0431\u043e\u0439&#187; \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u043f\u043e \u0435\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c &#8212; \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 `buy_flag` \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u0444\u043b\u0430\u0433\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 1337 \u043c\u043e\u043d\u0435\u0442.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &#8212; `return_home()`, \u0441\u043c\u044b\u0441\u043b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0432\u0435\u0441\u0442\u0430 \u0441 `WON` \u043d\u0430 `FINISHED`, \u0438 `get_the_reward()`, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 `FINISHED` \u0438 \u0432\u044b\u0434\u0430\u0435\u0442 \u0438\u0433\u0440\u043e\u043a\u0443 \u043d\u0430\u0433\u0440\u0430\u0434\u0443. \u041a \u043d\u0435\u0439-\u0442\u043e \u043d\u0430\u043c \u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435:<\/p>\n<pre><code class=\"rust\">\u00a0\u00a0\u00a0\u00a0#[allow(lint(self_transfer))]     public fun get_the_reward(         vault: &amp;mut Vault&lt;OTTER&gt;,         board: &amp;mut QuestBoard,         player: &amp;mut Player,         quest_id: u64,         ctx: &amp;mut TxContext,     ) {         let quest_to_claim = vector::borrow_mut(&amp;mut board.quests, quest_id);         assert!(quest_to_claim.fight_status == FINISHED, WRONG_STATE);          let monster = vector::pop_back(&amp;mut board.quests);          let Monster {             fight_status: _,             reward: reward,             power: _         } = monster;          let coins = coin::split(&amp;mut vault.cash, (reward as u64), ctx);          coin::join(&amp;mut player.coins, coins);     }<\/code><\/pre>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c, \u0431\u0440\u043e\u0441\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430 &#8212; \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 _\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u043e\u0433\u043e_ \u043a\u0432\u0435\u0441\u0442\u0430 \u043a\u0432\u0435\u0441\u0442\u0443, _\u0443\u0431\u0438\u0440\u0430\u0435\u043c\u043e\u043c\u0443_ \u0438\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u0430; \u0445\u043e\u0442\u044f \u043d\u0430\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u043a\u0432\u0435\u0441\u0442\u0430, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0430\u0434\u0443, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 `FINISHED`, \u0438\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0443\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043e\u043d \u0441\u0430\u043c, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 &#8212; \u0447\u0435\u0440\u0435\u0437 `vector::pop_back()` ([Vector &#8212; The Move Book](<a href=\"https:\/\/move-language.github.io\/move\/vector.html#operations\">https:\/\/move-language.github.io\/move\/vector.html#operations<\/a>))!<\/p>\n<h3>\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0412\u044b\u0445\u043e\u0434\u0438\u0442, \u0447\u0442\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0438\u0447\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043c \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c (\u0434\u043e `QUEST_LIMIT` &#8212; 25) \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u0432\u0435\u0441\u0442\u043e\u0432, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0443 \u0438\u0433\u0440\u044b \u0434\u0432\u0443\u0445 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432, \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u043a\u0443\u043f\u0438\u0432 \u043c\u0435\u0447 &#8212; \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f &#8212; \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u0432\u0435\u0441\u0442\u0430 0 \u0432 `WON`, \u0437\u0430\u0442\u0435\u043c \u0432 `FINISHED` \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 `return_home()`, \u0437\u0430\u0442\u0435\u043c, \u0443\u043a\u0430\u0437\u0430\u0432 \u0435\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 `get_the_reward()`, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0430\u0434\u0443 \u0437\u0430 _\u0432\u0442\u043e\u0440\u043e\u0433\u043e_ &#8212; \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0435 &#8212; \u043c\u043e\u043d\u0441\u0442\u0440\u0430, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 `FINISHED`. \u0412\u044b\u0437\u044b\u0432\u0430\u044f \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e `find_a_monster()` \u0438 `get_the_reward()` \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 &#8212; \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0444\u043b\u0430\u0433 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0437\u0430 \u0441\u043e\u0442\u043d\u044e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0414\u043e\u043f\u0438\u0448\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 `solve()`:<\/p>\n<pre><code class=\"rust\">    public fun solve(         _vault: &amp;mut Otter::Vault&lt;OTTER&gt;,         _board: &amp;mut Otter::QuestBoard,         _player: &amp;mut Otter::Player,         _r: &amp;Random,         _ctx: &amp;mut TxContext,     ) {         Otter::buy_sword(_vault, _player, _ctx);          Otter::find_a_monster(_board, _r, _ctx);         Otter::fight_monster(_board, _player, 0);                 Otter::return_home(_board, 0);                  let mut i = 0;         loop {             Otter::find_a_monster(_board, _r, _ctx);             Otter::get_the_reward(_vault, _board, _player, 0, _ctx);             i = i + 1;             if (i == 100) break;         };          let flag = Otter::buy_flag(_vault, _player, _ctx);         Otter::prove(_board, flag);     }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 `sources\/framework-solve\/dependency\/Move.toml` \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0438, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043a\u043b\u0438\u0435\u043d\u0442, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0444\u043b\u0430\u0433.<\/p>\n<h2>[World of Ottercraft] &#8212; hard (271 points, 26 solves)<\/h2>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430: <\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/2024.justctf.team\/challenges\/12\">https:\/\/2024.justctf.team\/challenges\/12<\/a><\/p>\n<p>module challenge::Otter {<\/p>\n<pre><code class=\"rust\">\/\/ --------------------------------------------------- \/\/ DEPENDENCIES \/\/ ---------------------------------------------------  use sui::coin::{Self, Coin}; use sui::balance::{Self, Balance, Supply}; use sui::table::{Self, Table}; use sui::url;  \/\/ --------------------------------------------------- \/\/ CONST \/\/ ---------------------------------------------------  \/\/ STATUSES const PREPARE_FOR_TROUBLE: u64 = 1; const ON_ADVENTURE: u64 = 2; const RESTING: u64 = 3; const SHOPPING: u64 = 4; const FINISHED: u64 = 5;  \/\/ ERROR CODES const WRONG_AMOUNT: u64 = 1337; const BETTER_GET_EQUIPPED: u64 = 1338; const WRONG_PLAYER_STATE: u64 = 1339; const ALREADY_REGISTERED: u64 = 1340; const TOO_MANY_MONSTERS: u64 = 1341; const BUY_SOMETHING: u64 = 1342; const NO_SUCH_PLAYER: u64 = 1343; const NOT_SOLVED: u64 = 1344;  \/\/ LIMITS const QUEST_LIMIT: u64 = 25;  \/\/ --------------------------------------------------- \/\/ STRUCTS \/\/ ---------------------------------------------------  public struct OTTER has drop {}  public struct OsecSuply&lt;phantom CoinType&gt; has key {     id: UID,     supply: Supply&lt;CoinType&gt; }  public struct Vault&lt;phantom CoinType&gt; has key {     id: UID,     cash: Coin&lt;CoinType&gt; }  public struct Monster has store {     reward: u64,     power: u64 }  public struct QuestBoard has key, store {     id: UID,     quests: vector&lt;Monster&gt;,     players: Table&lt;address, bool&gt; \/\/&lt;player_address, win_status&gt; }  public struct Player has key, store {     id: UID,     user: address,     power: u64,     status: u64,     quest_index: u64,     wallet: Balance&lt;OTTER&gt; }  public struct TawernTicket {     total: u64,     flag_bought: bool }  \/\/ --------------------------------------------------- \/\/ MINT CASH \/\/ ---------------------------------------------------  fun init(witness: OTTER, ctx: &amp;mut TxContext) {     let (mut treasury, metadata) = coin::create_currency(witness, 9, b\"OSEC\", b\"Osec\", b\"Otter ca$h\", option::some(url::new_unsafe_from_bytes(b\"https:\/\/osec.io\/\")), ctx);     transfer::public_freeze_object(metadata);      let pool_liquidity = coin::mint&lt;OTTER&gt;(&amp;mut treasury, 50000, ctx);      let vault = Vault&lt;OTTER&gt; {         id: object::new(ctx),         cash: pool_liquidity     };      let supply = coin::treasury_into_supply(treasury);      let osec_supply = OsecSuply {         id: object::new(ctx),         supply     };      transfer::transfer(osec_supply, tx_context::sender(ctx));      transfer::share_object(QuestBoard {         id: object::new(ctx),         quests: vector::empty(),         players: table::new(ctx)     });      transfer::share_object(vault); }  public fun mint(sup: &amp;mut OsecSuply&lt;OTTER&gt;, amount: u64, ctx: &amp;mut TxContext): Coin&lt;OTTER&gt; {     let osecBalance = balance::increase_supply(&amp;mut sup.supply, amount);     coin::from_balance(osecBalance, ctx) }  public entry fun mint_to(sup: &amp;mut OsecSuply&lt;OTTER&gt;, amount: u64, to: address, ctx: &amp;mut TxContext) {     let osec = mint(sup, amount, ctx);     transfer::public_transfer(osec, to); }  public fun burn(sup: &amp;mut OsecSuply&lt;OTTER&gt;, c: Coin&lt;OTTER&gt;): u64 {     balance::decrease_supply(&amp;mut sup.supply, coin::into_balance(c)) }  \/\/ --------------------------------------------------- \/\/ REGISTER - ADMIN FUNCTION \/\/ ---------------------------------------------------  public fun register(_: &amp;mut OsecSuply&lt;OTTER&gt;, board: &amp;mut QuestBoard, vault: &amp;mut Vault&lt;OTTER&gt;, player: address, ctx: &amp;mut TxContext) {     assert!(!table::contains(&amp;board.players, player), ALREADY_REGISTERED);      let new_cash = coin::into_balance(coin::split(&amp;mut vault.cash, 250, ctx));      let new_player_obj = Player {         id: object::new(ctx),         user: player,         power: 10,         status: RESTING,         quest_index: 0,         wallet: new_cash     };      table::add(&amp;mut board.players, player, false);      transfer::transfer(new_player_obj, player); }  public fun check_winner(board: &amp;QuestBoard, player: address) {     assert!(table::contains(&amp;board.players, player), NO_SUCH_PLAYER);     assert!(table::borrow(&amp;board.players, player) == true, NOT_SOLVED); }  \/\/ --------------------------------------------------- \/\/ TAVERN \/\/ ---------------------------------------------------  public fun enter_tavern(player: &amp;mut Player): TawernTicket {     assert!(player.status == RESTING, WRONG_PLAYER_STATE);      player.status = SHOPPING;      TawernTicket{ total: 0, flag_bought: false } }  public fun buy_flag(ticket: &amp;mut TawernTicket, player: &amp;mut Player) {     assert!(player.status == SHOPPING, WRONG_PLAYER_STATE);      ticket.total = ticket.total + 537;     ticket.flag_bought = true; }  public fun buy_sword(player: &amp;mut Player, ticket: &amp;mut TawernTicket) {     assert!(player.status == SHOPPING, WRONG_PLAYER_STATE);      player.power = player.power + 213;     ticket.total = ticket.total + 140; }  public fun buy_shield(player: &amp;mut Player, ticket: &amp;mut TawernTicket) {     assert!(player.status == SHOPPING, WRONG_PLAYER_STATE);      player.power = player.power + 7;     ticket.total = ticket.total + 20; }  public fun buy_power_of_friendship(player: &amp;mut Player, ticket: &amp;mut TawernTicket) {     assert!(player.status == SHOPPING, WRONG_PLAYER_STATE);      player.power = player.power + 9000; \/\/it's over 9000!     ticket.total = ticket.total + 190; }  public fun checkout(ticket: TawernTicket, player: &amp;mut Player, ctx: &amp;mut TxContext, vault: &amp;mut Vault&lt;OTTER&gt;, board: &amp;mut QuestBoard) {     let TawernTicket{ total, flag_bought } = ticket;      assert!(total &gt; 0, BUY_SOMETHING);       assert!(balance::value&lt;OTTER&gt;(&amp;player.wallet) &gt;= total, WRONG_AMOUNT);      let balance = balance::split(&amp;mut player.wallet, total);     let coins = coin::from_balance(balance, ctx);      coin::join(&amp;mut vault.cash, coins);      if (flag_bought == true) {          let flag = table::borrow_mut(&amp;mut board.players, tx_context::sender(ctx));         *flag = true;          std::debug::print(&amp;std::string::utf8(b\"$$$$$$$$$$$$$$$$$$$$$$$$$ FLAG BOUGHT $$$$$$$$$$$$$$$$$$$$$$$$$\")); \/\/debug     };      player.status = RESTING; }  \/\/ --------------------------------------------------- \/\/ ADVENTURE TIME \/\/ ---------------------------------------------------  public fun find_a_monster(board: &amp;mut QuestBoard, player: &amp;mut Player) {     assert!(player.status != SHOPPING &amp;&amp; player.status != FINISHED &amp;&amp; player.status != ON_ADVENTURE, WRONG_PLAYER_STATE);     assert!(vector::length(&amp;board.quests) &lt;= QUEST_LIMIT, TOO_MANY_MONSTERS);      let quest = if (vector::length(&amp;board.quests) % 3 == 0) {         Monster {             reward: 100,             power: 73         }     } else if (vector::length(&amp;board.quests) % 3 == 1) {         Monster {             reward: 62,             power: 81         }     } else {         Monster {             reward: 79,             power: 94         }     };      vector::push_back(&amp;mut board.quests, quest);     player.status = PREPARE_FOR_TROUBLE; }  public fun bring_it_on(board: &amp;mut QuestBoard, player: &amp;mut Player, quest_id: u64) {     assert!(player.status != SHOPPING &amp;&amp; player.status != FINISHED &amp;&amp; player.status != RESTING &amp;&amp; player.status != ON_ADVENTURE, WRONG_PLAYER_STATE);      let monster = vector::borrow_mut(&amp;mut board.quests, quest_id);     assert!(player.power &gt; monster.power, BETTER_GET_EQUIPPED);      player.status = ON_ADVENTURE;      player.power = 10; \/\/equipment breaks after fighting the monster, and friends go to party :c     monster.power = 0; \/\/you win! wow!     player.quest_index = quest_id; }  public fun return_home(board: &amp;mut QuestBoard, player: &amp;mut Player) {     assert!(player.status != SHOPPING &amp;&amp; player.status != FINISHED &amp;&amp; player.status != RESTING &amp;&amp; player.status != PREPARE_FOR_TROUBLE, WRONG_PLAYER_STATE);      let quest_to_finish = vector::borrow(&amp;board.quests, player.quest_index);     assert!(quest_to_finish.power == 0, WRONG_AMOUNT);      player.status = FINISHED; }  public fun get_the_reward(vault: &amp;mut Vault&lt;OTTER&gt;, board: &amp;mut QuestBoard, player: &amp;mut Player, ctx: &amp;mut TxContext) {     assert!(player.status != RESTING &amp;&amp; player.status != PREPARE_FOR_TROUBLE &amp;&amp; player.status != ON_ADVENTURE, WRONG_PLAYER_STATE);      let monster = vector::remove(&amp;mut board.quests, player.quest_index);      let Monster {         reward: reward,         power: _     } = monster;      let coins = coin::split(&amp;mut vault.cash, reward, ctx);      let balance = coin::into_balance(coins);      balance::join(&amp;mut player.wallet, balance);      player.status = RESTING; } <\/code><\/pre>\n<p>}<\/p>\n<\/div>\n<\/details>\n<h3>\u0410\u043d\u0430\u043b\u0438\u0437<\/h3>\n<p>\u0418\u0433\u0440\u0430 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0435 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e, \u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430, \u0430 \u043d\u0435 \u043c\u043e\u043d\u0441\u0442\u0440\u0430, \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439\u00a0 \u043f\u044f\u0442\u044c &#8212; `PREPARE_FOR_TROUBLE`, `ON_ADVENTURE`, `RESTING`, `SHOPPING` \u0438 `FINISHED`. \u0414\u0430\u043b\u0435\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u0441\u0438\u043b\u044b (\u0438 \u0444\u043b\u0430\u0433\u0430) \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0432 &#171;\u0442\u0430\u0432\u0435\u0440\u043d\u0443&#187;, \u0432\u044b\u0437\u0432\u0430\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e `enter_tavern()` &#8212; \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u0438\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e (\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e) `RESTING` \u0432 `SHOPPING`, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e\u043a\u0443\u043f\u043a\u0438, \u0438 \u0432\u0435\u0440\u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0438\u043f\u0430 `TawernTicket`, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c Move \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 &#8212; \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 `checkout()`. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u0433\u0440\u043e\u043a \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442 &#171;\u043a\u043e\u0440\u0437\u0438\u043d\u0443&#187; \u043f\u043e\u043a\u0443\u043f\u043e\u043a \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 &#171;\u0442\u0430\u0432\u0435\u0440\u043d\u044b&#187;, \u0441\u043d\u043e\u0432\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 `RESTING`. \u0418\u0437 `register()` \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 250 \u043c\u043e\u043d\u0435\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0447\u0435\u0442\u044b\u0440\u0435 &#8212; `buy_flag()` \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u043b\u0430\u0433 `ticket` (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 `checkout()`, \u043f\u0440\u0438\u0432\u043e\u0434\u044f \u043a \u043f\u043e\u0431\u0435\u0434\u0435) \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0443 \u043d\u0430 537 \u043c\u043e\u043d\u0435\u0442, `buy_sword()`, `buy_shield()` \u0438 `buy_power_of_friendship()` \u0436\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0441\u0438\u043b\u0443 \u0438\u0433\u0440\u043e\u043a\u0430 \u043d\u0430 213, 7 \u0438 9000 \u0437\u0430 140, 20 \u0438 190 \u043c\u043e\u043d\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e **\u0441\u0438\u043b\u0430 \u043f\u0440\u0438 \u043f\u043e\u043a\u0443\u043f\u043a\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e**, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0434\u043b\u044f \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u0441\u0443\u043c\u043c\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0447\u0435\u0442\u0443 \u0438\u0433\u0440\u043e\u043a\u0430 &#8212; \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0430\u043c\u043e\u043c `checkout()`, \u043a\u0430\u043a \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u0449\u0430\u044f \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0448\u0435 0 &#8212; \u043d\u0435 \u043a\u0443\u043f\u0438\u0432 \u0447\u0435\u0433\u043e-\u0442\u043e, \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u0442\u0430\u0432\u0435\u0440\u043d\u044b \u043d\u0435\u043b\u044c\u0437\u044f.\u00a0<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u043a\u0443\u043f\u043a\u0438, `checkout()` \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 &#8212; \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, **\u0440\u0430\u0441\u043f\u043b\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u043d\u043e, \u0438 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 &#171;\u0442\u0430\u0432\u0435\u0440\u043d\u0435&#187;**. \u0417\u0430\u043f\u043e\u043c\u043d\u0438\u043c \u044d\u0442\u043e \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435.<\/p>\n<p>\u0421\u0435\u043a\u0446\u0438\u044f ADVENTURE TIME \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 &#8212; `find_a_monster()`, `bring_it_on()`, `return_home()` \u0438 `get_the_reward()`. \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<pre><code class=\"rust\">public fun find_a_monster(board: &amp;mut QuestBoard, player: &amp;mut Player) {     assert!(player.status != SHOPPING &amp;&amp; player.status != FINISHED &amp;&amp; player.status != ON_ADVENTURE, WRONG_PLAYER_STATE);     assert!(vector::length(&amp;board.quests) &lt;= QUEST_LIMIT, TOO_MANY_MONSTERS);      let quest = if (vector::length(&amp;board.quests) % 3 == 0) {         Monster {             reward: 100,             power: 73         }     } else if (vector::length(&amp;board.quests) % 3 == 1) {         Monster {             reward: 62,             power: 81         }     } else {         Monster {             reward: 79,             power: 94         }     };      vector::push_back(&amp;mut board.quests, quest);     player.status = PREPARE_FOR_TROUBLE; }<\/code><\/pre>\n<p>`find_a_monster()` \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043d\u0435 \u043d\u0430\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0430 \u0440\u0430\u0437\u0434\u0430\u0435\u0442 \u043d\u0430\u0433\u0440\u0430\u0434\u0443 \u0438 \u0441\u0438\u043b\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0435. \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 `PREPARE_FOR_TROUBLE`, \u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0430 \u043d\u0435 \u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 `SHOPPING`, `FINISHED` \u0438 `ON_ADVENTURE`. \u0414\u0435\u0442\u0430\u043b\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u0432\u0438\u043d\u043d\u043e\u0439, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043c &#8212; **\u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c `find_a_monster()` \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434**.<\/p>\n<pre><code class=\"rust\">public fun bring_it_on(board: &amp;mut QuestBoard, player: &amp;mut Player, quest_id: u64) {     assert!(player.status != SHOPPING &amp;&amp; player.status != FINISHED &amp;&amp; player.status != RESTING &amp;&amp; player.status != ON_ADVENTURE, WRONG_PLAYER_STATE);      let monster = vector::borrow_mut(&amp;mut board.quests, quest_id);     assert!(player.power &gt; monster.power, BETTER_GET_EQUIPPED);      player.status = ON_ADVENTURE;      player.power = 10; \/\/equipment breaks after fighting the monster, and friends go to party :c     monster.power = 0; \/\/you win! wow!     player.quest_index = quest_id; }<\/code><\/pre>\n<p>`bring_it_on()` \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u043d\u0430 _\u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435_, \u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043a\u0440\u043e\u043c\u0435 `BRING_IT_ON`, \u043d\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f &#8212; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 `find_a_monster()`, \u0447\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u041a\u0430\u043a \u0438 \u0432 Dark BrOTTERhood, \u0438\u0433\u0440\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u0430 \u0438\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0441 \u043d\u0438\u043c \u0441\u0438\u043b\u043e\u0439. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0431\u0435\u0434\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 `ON_ADVENTURE`, \u0441\u0438\u043b\u0430 \u0438\u0433\u0440\u043e\u043a\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 10, \u0441\u0438\u043b\u0430 \u043c\u043e\u043d\u0441\u0442\u0440\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 0, `player.quest_index` (\u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e 0) &#8212; \u0432 \u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u043d\u0441\u0442\u0440\u0430.<\/p>\n<pre><code class=\"rust\">public fun return_home(board: &amp;mut QuestBoard, player: &amp;mut Player) {     assert!(player.status != SHOPPING &amp;&amp; player.status != FINISHED &amp;&amp; player.status != RESTING &amp;&amp; player.status != PREPARE_FOR_TROUBLE, WRONG_PLAYER_STATE);      let quest_to_finish = vector::borrow(&amp;board.quests, player.quest_index);     assert!(quest_to_finish.power == 0, WRONG_AMOUNT);      player.status = FINISHED; }<\/code><\/pre>\n<p>`return_home()` \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435\u0443\u043a\u043b\u044e\u0436\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d\u0430, \u0432\u0438\u0434\u0438\u043c\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 `bring_it_on()` &#8212; \u0441\u0442\u0430\u0442\u0443\u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 `ON_ADVENTURE` \u0432 `FINISHED`, \u0435\u0441\u043b\u0438 \u0441\u0438\u043b\u0430 \u043c\u043e\u043d\u0441\u0442\u0440\u0430 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 `player.quest_index` \u0440\u0430\u0432\u043d\u0430 \u043d\u0443\u043b\u044e.<\/p>\n<pre><code class=\"rust\">public fun get_the_reward(vault: &amp;mut Vault&lt;OTTER&gt;, board: &amp;mut QuestBoard, player: &amp;mut Player, ctx: &amp;mut TxContext) {     assert!(player.status != RESTING &amp;&amp; player.status != PREPARE_FOR_TROUBLE &amp;&amp; player.status != ON_ADVENTURE, WRONG_PLAYER_STATE);      let monster = vector::remove(&amp;mut board.quests, player.quest_index);      let Monster {         reward: reward,         power: _     } = monster;      let coins = coin::split(&amp;mut vault.cash, reward, ctx);      let balance = coin::into_balance(coins);      balance::join(&amp;mut player.wallet, balance);      player.status = RESTING; }<\/code><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, `get_the_reward()` \u0441\u043d\u043e\u0432\u0430 \u043d\u0435\u0434\u043e\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 &#8212; \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043a\u0440\u043e\u043c\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u043c\u043e\u0433\u043e `FINISHED` **\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0430\u0434\u0443 \u0437\u0430 \u043a\u0432\u0435\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u044f \u0438\u0437 \u0442\u0430\u0432\u0435\u0440\u043d\u044b**, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 `SHOPPING`. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Dark BrOTTERhood, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043f\u043e\u0431\u0435\u0436\u0434\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u0441\u0442\u0440 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0443\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 &#8212; \u0432\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f `player.quest_index`, \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0435\u043b\u044c\u0437\u044f. \u0418\u0433\u0440\u043e\u043a \u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043c\u043e\u043d\u0435\u0442\u044b \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 `RESTING`.<\/p>\n<h3>\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0434\u0432\u0435\u0434\u0435\u043c \u0438\u0442\u043e\u0433\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u043c \u0431\u0430\u0433\u0430\u043c:<\/p>\n<p>1. \u0441\u0438\u043b\u0430 \u0438\u0433\u0440\u043e\u043a\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0430\u0432\u0435\u0440\u043d\u0435 \u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435\u0436\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c<\/p>\n<p>2. \u0440\u0430\u0441\u043f\u043b\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u0447\u0435\u043a\u0443 \u0442\u0430\u0432\u0435\u0440\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u0443\u0433\u043e\u0434\u043d\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f<\/p>\n<p>3. \u0438\u0441\u043a\u0430\u0442\u044c \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u043c\u043e\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0444\u0438\u0447\u0430?)<\/p>\n<p>4. \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0430\u0434\u0443 \u0437\u0430 \u043f\u043e\u0431\u0435\u0436\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u0430 (\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u0437\u0430\u0441\u043b\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u043e\u0442\u0434\u044b\u0445) \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0442\u0430\u0432\u0435\u0440\u043d\u044b<\/p>\n<p>\u041f\u043e\u043a\u0440\u0443\u0442\u0438\u0432 \u044d\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0443\u043d\u043a\u0442\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0442\u0430\u043a \u0438 \u044d\u0434\u0430\u043a, \u043e\u0441\u043e\u0437\u043d\u0430\u0435\u043c, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 &#8212; **\u043d\u0430\u0433\u0440\u0430\u0434\u0443 \u0437\u0430 \u043c\u043e\u043d\u0441\u0442\u0440\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0432 \u0442\u0430\u0432\u0435\u0440\u043d\u0435, \u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442 \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u043a\u0443\u043f\u043a\u0438**! \u0412 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0435\u0441\u043b\u0438 \u043d\u0430\u0433\u0440\u0430\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0442\u0430\u0432\u0435\u0440\u043d\u044b \u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0432 `RESTING`, \u0430 `checkout()` \u0441\u0442\u0430\u0442\u0443\u0441 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0432\u043e\u0432\u0441\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c `TawernTicket` \u0438 \u0440\u0430\u0441\u043f\u043b\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e, \u043d\u0430 \u0434\u0435\u043b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432, \u0430 \u043d\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0432, \u0441\u0443\u043c\u043c\u0443 \u043d\u0430 \u0441\u0447\u0435\u0442\u0443 &#8212; \u0431\u0435\u0437 \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043d\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u0434\u0435\u0448\u0435\u0432\u044b\u0435 \u0449\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0430\u0434\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u0435\u0448\u0438\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u043a\u0430\u043a `get_the_reward()` \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u0439 `player.quest_index`, \u0430 \u0442\u0430\u043a\u0436\u0435 &#8212; \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 &#8212; **\u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u0432\u0435\u0441\u0442\u0430** (\u0432\u0435\u0434\u044c \u0441\u0438\u043b\u0430 \u043c\u043e\u043d\u0441\u0442\u0440\u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 `bring_it_on()` \u0438 `return_home()`) &#8212; \u0442\u043e \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0437 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u043d\u0438\u0435, \u043f\u043e\u0441\u043b\u0443\u0448\u043d\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 (\u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u043c\u0443) \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043d\u043e\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 `get_the_reward()`.\u00a0<\/p>\n<p>\u041d\u043e &#8212; \u0432-\u0442\u0440\u0435\u0442\u044c\u0438\u0445 &#8212; **\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0443\u043d\u043a\u0442\u0443 3 \u043c\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u044c**! \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043a\u0430\u043a \u0438 \u0432 Dark BrOTTERhood, \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u0430\u0440\u0430\u0442\u044c \u0440\u0443\u043a\u0438 \u0438 \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 &#8212; \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043c\u044b \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0433, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 `TawerTicket` \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u041d\u043e \u044d\u0442\u043e\u0433\u043e \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e &#8212; \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0430\u043f\u0438\u0442\u0430\u043b\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0443\u043f\u0438\u0442\u044c \u043c\u0435\u0447 \u0438 \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0438\u043d\u0433\u0435\u043d\u0442 \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044b\u0445 \u043c\u043e\u043d\u0441\u0442\u0440\u043e\u0432 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u0447\u0435\u0440\u0435\u0437 `find_a_monster()`:<\/p>\n<pre><code class=\"rust\">public fun solve(     _board: &amp;mut Otter::QuestBoard,     _vault: &amp;mut Otter::Vault&lt;OTTER&gt;,     _player: &amp;mut Otter::Player,     _ctx: &amp;mut TxContext ) {     let mut ticket = Otter::enter_tavern(_player);     Otter::buy_sword(_player, &amp;mut ticket);     Otter::checkout(ticket, _player, _ctx, _vault, _board);          let mut i = 0;     loop {         Otter::find_a_monster(_board, _player);         i = i + 1;         if (i == 25) break;     };          Otter::bring_it_on(_board, _player, 0);     Otter::return_home(_board, _player);     Otter::get_the_reward(_vault, _board, _player, _ctx);      i = 0;     loop {         let mut ticket = Otter::enter_tavern(_player);         Otter::buy_shield(_player, &amp;mut ticket);         Otter::get_the_reward(_vault, _board, _player, _ctx);         Otter::checkout(ticket, _player, _ctx, _vault, _board);         i = i + 1;         if (i == 24) break;     };              let mut ticket = Otter::enter_tavern(_player);     Otter::buy_flag(&amp;mut ticket, _player);     Otter::checkout(ticket, _player, _ctx, _vault, _board); }<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0432 \u0437\u043d\u0430\u043a\u043e\u043c\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0440\u0435\u0442\u0438\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0444\u043b\u0430\u0433 \u0432 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043d\u0435 \u0438\u043c\u0435\u043b\u0438 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a Move (\u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0434\u043e\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 `TawernTicket` \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435) &#8212; \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043e\u0444\u0444\u0447\u0435\u0439\u043d\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u044b \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u043e, \u0440\u0435\u0448\u0430\u0442\u044c \u0438\u0445 \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u0430 \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 Sui \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u043e, \u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u043e \u0437\u0434\u0435\u0441\u044c 792 \u0438\u0437 1325 \u043d\u0430\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0439 \u043e\u0447\u043a\u043e\u0432 &#8212; \u0430 \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u043e\u0439 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 MoveCTF.<\/p>\n<div class=\"persona\"><img decoding=\"async\" class=\"image persona__image\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a45\/fd3\/b57\/a45fd3b57296c749e2629b3a9ff6a28f.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a45\/fd3\/b57\/a45fd3b57296c749e2629b3a9ff6a28f.png\"\/><\/p>\n<h5 class=\"persona__heading\">\u0420\u0443\u0441\u0442\u0430\u043c \u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432<\/h5>\n<p>\u043f\u0440\u0435\u0434\u0441\u0435\u0434\u0430\u0442\u0435\u043b\u044c \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430 \u0420\u0410\u0414 \u041a\u041e\u041f<\/p>\n<\/div>\n<blockquote>\n<p>\u0422\u0430\u043a, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u0440\u0435\u0445 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043a\u0430\u043a \u00ab\u043f\u0443\u0433\u0430\u044e\u0449\u0438\u0439 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u00bb, \u043f\u0440\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043d\u0435\u0432\u0435\u0434\u043e\u043c\u043e\u0439 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0432\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u043c\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. \u0410 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u00ab\u0432\u044b\u0445\u043e\u0434\u0430 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438\u00bb \u0438 \u00ab\u0437\u0430\u0445\u043e\u0434\u0430 \u043d\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0443\u0442\u044c\u044e \u0445\u0430\u043a\u0435\u0440\u0441\u043a\u043e\u0433\u043e \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f, \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0447\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u044b \u043a \u0440\u0430\u0437\u043d\u044b\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c \u0436\u0438\u0437\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u2026. \u0412 \u043f\u0440\u043e\u0447\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 =)<\/p>\n<\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/831560\/\"> https:\/\/habr.com\/ru\/articles\/831560\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div class=\"persona\">\n<h5 class=\"persona__heading\">\u0420\u0443\u0441\u0442\u0430\u043c \u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432<\/h5>\n<p>\u043f\u0440\u0435\u0434\u0441\u0435\u0434\u0430\u0442\u0435\u043b\u044c \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430 \u0420\u0410\u0414 \u041a\u041e\u041f<\/p>\n<\/div>\n<blockquote>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430\u0448\u0438\u043c \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0435\u043c \u0420\u0430\u0442\u043c\u0438\u0440\u043e\u043c \u041a\u0430\u0440\u0430\u0431\u0443\u0442\u043e\u043c (<a href=\"https:\/\/ratmirkarabut.com\">https:\/\/ratmirkarabut.com<\/a>) , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0420\u0410\u0414 \u041a\u041e\u041f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f CTF \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430.<\/p>\n<\/blockquote>\n<p>\u0421\u0440\u0435\u0434\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u043c 24-\u0447\u0430\u0441\u043e\u0432\u043e\u043c \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0440\u0430\u0443\u043d\u0434\u0435 justCTF, \u0442\u0440\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u043b\u0438\u0441\u044c \u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 \u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0432\u043e\u0435\u0439 \u0438\u043c\u0435\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438\u0433\u0440\u044b-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043d\u0430 Move, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u0441\u0442\u043d\u0435\u0442\u0435 Sui. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 \u0441\u043e\u0431\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442-\u0441\u043e\u043b\u0432\u0435\u0440 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0439 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0435\u0433\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c-\u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u0442\u0434\u0430\u0442\u044c \u0444\u043b\u0430\u0433.<\/p>\n<p>\u041d\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e\u0439, \u043d\u043e, \u0441\u0443\u0434\u044f \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u0437\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0432 \u0446\u0435\u043b\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043f\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 \u044d\u0442\u0438 \u0442\u0440\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0441\u043a\u043e\u0440\u0438\u043d\u0433\u0443 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0447\u043a\u043e\u0432. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u043e\u0432\u0441\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0430 \u043c\u0438\u043a\u0447\u0435\u043a-\u0440\u0430\u0437\u043c\u0438\u043d\u043a\u0443 \u0441 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u0432\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0431\u043e\u043b\u0435\u0435 \u0432\u043e\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u043e\u0439, \u043d\u043e \u0437\u0430\u0433\u0430\u0434\u043a\u0430 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u043e\u0439, \u0447\u0442\u043e \u0438 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u043b\u043e \u043c\u0435\u043d\u044f \u043d\u0430 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e. \u0421\u0442\u043e\u0438\u0442, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<div class=\"persona\">\n<h5 class=\"persona__heading\">\u0420\u0443\u0441\u0442\u0430\u043c \u0413\u0443\u0441\u0435\u0439\u043d\u043e\u0432<\/h5>\n<p>\u043f\u0440\u0435\u0434\u0441\u0435\u0434\u0430\u0442\u0435\u043b\u044c \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0430 \u0420\u0410\u0414 \u041a\u041e\u041f<\/p>\n<\/div>\n<blockquote>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430\u043c\u0438 \u043f\u043e \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u0443 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0438\u0435\u0445\u0430\u043b\u0438 \u0432 \u0433\u043e\u0441\u0442\u0438 \u043a \u0420\u0430\u0442\u043c\u0438\u0440\u0443 \u0432 \u044f\u043d\u0432\u0430\u0440\u0435 2022 \u0433\u043e\u0434\u0430 \u043c\u0435\u043d\u044f \u043f\u043e\u0440\u0430\u0437\u0438\u043b\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0435\u0433\u043e \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f. \u041f\u043e\u043c\u043d\u044e \u0435\u0433\u043e \u043b\u0435\u043a\u0446\u0438\u044e \u043f\u043e \u043a\u043d\u0438\u0433\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%BE%D0%B9%D0%B0,_%D0%94%D1%8C%D1%91%D1%80%D0%B4%D1%8C\">\u0414\u044c\u0435\u0440\u0434\u044f \u041f\u043e\u0439\u044f <\/a>\u00ab\u041a\u0430\u043a \u0440\u0435\u0448\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443\u00bb, \u0438 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0442\u043e\u0433\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435 \u0445\u0430\u043a\u0435\u0440\u0430 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430, \u0440\u0435\u0448\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0443. \u041e\u0447\u0435\u043d\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0435\u0451 \u043a \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0430 \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u00ab\u0441\u0442\u0430\u0432\u0438\u0442 \u043c\u043e\u0437\u0433\u0438 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e\u00bb, \u0432\u043e\u0442 \u043f\u0430\u0440\u0430 \u0446\u0438\u0442\u0430\u0442:<\/p>\n<p>\u00ab\u0413\u043b\u0443\u043f\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043d\u0435 \u043f\u043e\u043d\u044f\u043b\u0438. \u041d\u0435\u0432\u0435\u0441\u0435\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0446\u0435\u043b\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043d\u0435 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0435\u0441\u044c. \u0422\u0430\u043a\u0438\u0435 \u0433\u043b\u0443\u043f\u044b\u0435 \u0438 \u043d\u0435\u0432\u0435\u0441\u0451\u043b\u044b\u0435 \u0432\u0435\u0449\u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0432 \u0448\u043a\u043e\u043b\u0435, \u0442\u0430\u043a \u0438 \u0432\u043d\u0435 \u0435\u0451, \u043e\u0434\u043d\u0430\u043a\u043e \u0443\u0447\u0438\u0442\u0435\u043b\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0438\u0445 \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043b\u0430\u0441\u0441\u0435. \u0423\u0447\u0435\u043d\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043d\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443. \u041d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c; \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0445\u043e\u0442\u0435\u0442\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u0435\u0451. \u0415\u0441\u043b\u0438 \u0443\u0447\u0435\u043d\u0438\u043a\u0443 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043a \u043d\u0435\u0439, \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0433\u043e \u0432\u0438\u043d\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0443\u043c\u0435\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u0430, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u0440\u0443\u0434\u043d\u043e\u0439 \u0438 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043b\u0451\u0433\u043a\u043e\u0439, \u0431\u044b\u0442\u044c \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u043b\u044f \u0435\u0451 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438\u00bb.<\/p>\n<p>\u00ab\u041f\u0443\u0442\u044c \u043e\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0431\u0435 \u043f\u043b\u0430\u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u043b\u0433\u0438\u043c \u0438 \u0438\u0437\u0432\u0438\u043b\u0438\u0441\u0442\u044b\u043c. \u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0448\u0430\u0433 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0434\u0435\u044e \u043f\u043b\u0430\u043d\u0430. \u042d\u0442\u0430 \u0438\u0434\u0435\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e. \u0418\u043b\u0438 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432\u0434\u0440\u0443\u0433, \u0432 \u043e\u0434\u0438\u043d \u043c\u0438\u0433, \u043f\u043e\u0441\u043b\u0435, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u0431\u0435\u0437\u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0439. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0451 \u00ab\u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0435\u0439 \u0438\u0434\u0435\u0435\u0439\u00bb.<\/p>\n<p>\u041b\u0443\u0447\u0448\u0435\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0447\u0438\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u0443\u0447\u0430\u0449\u0435\u0433\u043e\u0441\u044f, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0443\u0442\u0451\u043c \u043d\u0435\u043d\u0430\u0437\u043e\u0439\u043b\u0438\u0432\u043e\u0439 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u043c\u0443 \u0431\u043b\u0435\u0441\u0442\u044f\u0449\u0443\u044e \u0438\u0434\u0435\u044e\u00bb.<\/p>\n<\/blockquote>\n<figure class=\"bordered full-width\">\n<div><figcaption><strong>\u0414\u044c\u0435\u0440\u0434\u044c \u041f\u043e\u0439\u0430 \u0438 \u0435\u0433\u043e \u043a\u043d\u0438\u0433\u0430 &#171;\u041a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443&#187;<\/strong><\/figcaption><\/div>\n<\/figure>\n<h2>[The Otter Scrolls] &#8212; easy (246 points, 33 solves)<\/h2>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430:<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/2024.justctf.team\/challenges\/11\">https:\/\/2024.justctf.team\/challenges\/11<\/a><\/p>\n<p>module challenge::theotterscrolls {<\/p>\n<pre><code class=\"rust\">\/\/ --------------------------------------------------- \/\/ DEPENDENCIES \/\/ ---------------------------------------------------  use sui::table::{Self, Table}; use std::string::{Self, String}; use std::debug;  \/\/ --------------------------------------------------- \/\/ STRUCTS \/\/ ---------------------------------------------------  public struct Spellbook has key {     id: UID,     casted: bool,     spells: Table&lt;u8, vector&lt;String&gt;&gt; }  \/\/ --------------------------------------------------- \/\/ FUNCTIONS \/\/ ---------------------------------------------------  \/\/The spell consists of five magic words, which have to be read in the correct order!  fun init(ctx: &amp;mut TxContext) {          let mut all_words = table::new(ctx);      let fire = vector[         string::utf8(b\"Blast\"),         string::utf8(b\"Inferno\"),         string::utf8(b\"Pyre\"),         string::utf8(b\"Fenix\"),         string::utf8(b\"Ember\")     ];      let wind = vector[         string::utf8(b\"Zephyr\"),         string::utf8(b\"Swirl\"),         string::utf8(b\"Breeze\"),         string::utf8(b\"Gust\"),         string::utf8(b\"Sigil\")     ];      let water = vector[         string::utf8(b\"Aquarius\"),         string::utf8(b\"Mistwalker\"),         string::utf8(b\"Waves\"),         string::utf8(b\"Call\"),         string::utf8(b\"Storm\")     ];      let earth = vector[         string::utf8(b\"Tremor\"),         string::utf8(b\"Stoneheart\"),         string::utf8(b\"Grip\"),         string::utf8(b\"Granite\"),         string::utf8(b\"Mudslide\")     ];      let power = vector[         string::utf8(b\"Alakazam\"),         string::utf8(b\"Hocus\"),         string::utf8(b\"Pocus\"),         string::utf8(b\"Wazzup\"),         string::utf8(b\"Wrath\")     ];      table::add(&amp;mut all_words, 0, fire);      table::add(&amp;mut all_words, 1, wind);      table::add(&amp;mut all_words, 2, water);      table::add(&amp;mut all_words, 3, earth);      table::add(&amp;mut all_words, 4, power);       let spellbook = Spellbook {         id: object::new(ctx),         casted: false,         spells: all_words     };      transfer::share_object(spellbook); }  public fun cast_spell(spell_sequence: vector&lt;u64&gt;, book: &amp;mut Spellbook) {      let fire = table::remove(&amp;mut book.spells, 0);     let wind = table::remove(&amp;mut book.spells, 1);     let water = table::remove(&amp;mut book.spells, 2);     let earth = table::remove(&amp;mut book.spells, 3);     let power = table::remove(&amp;mut book.spells, 4);      let fire_word_id = *vector::borrow(&amp;spell_sequence, 0);     let wind_word_id = *vector::borrow(&amp;spell_sequence, 1);     let water_word_id = *vector::borrow(&amp;spell_sequence, 2);     let earth_word_id = *vector::borrow(&amp;spell_sequence, 3);     let power_word_id = *vector::borrow(&amp;spell_sequence, 4);      let fire_word = vector::borrow(&amp;fire, fire_word_id);     let wind_word = vector::borrow(&amp;wind, wind_word_id);     let water_word = vector::borrow(&amp;water, water_word_id);     let earth_word = vector::borrow(&amp;earth, earth_word_id);     let power_word = vector::borrow(&amp;power, power_word_id);      if (fire_word == string::utf8(b\"Inferno\")) {         if (wind_word == string::utf8(b\"Zephyr\")) {             if (water_word == string::utf8(b\"Call\")) {                 if (earth_word == string::utf8(b\"Granite\")) {                     if (power_word == string::utf8(b\"Wazzup\")) {                         book.casted = true;                     }                 }             }         }     }  }  public fun check_if_spell_casted(book: &amp;Spellbook): bool {     let casted = book.casted;     assert!(casted == true, 1337);     casted } <\/code><\/pre>\n<p>}<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u0449\u0438\u0439 \u0441\u043c\u044b\u0441\u043b \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, The Otter Scrolls, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0441\u044f \u0432 \u043e\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c &#8212; \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0432 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u043c\u0443 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430, \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0444\u043b\u0430\u0433\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0442\u0435\u043b\u043e `solve()` \u0432 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u043c `sources\/framework-solve\/solve\/sources\/solve.move`:<\/p>\n<pre><code class=\"rust\">public fun solve(     _spellbook: &amp;mut theotterscrolls::Spellbook,     _ctx: &amp;mut TxContext ) {     let spell = vector[1u64,0,3,3,3];     theotterscrolls::cast_spell(spell, _spellbook);     theotterscrolls::check_if_spell_casted(_spellbook); }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 `sources\/framework-solve\/dependency\/Move.toml` \u0432\u0435\u0440\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 (\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u043e\u0441\u0442\u0443\u0447\u0430\u0432\u0448\u0438\u0441\u044c \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443 \u043f\u043e \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e `nc tos.nc.jsctf.pro 31337`):<\/p>\n<pre><code class=\"rust\">```toml ... [addresses]              admin = \"0xfccc9a421bbb13c1a66a1aa98f0ad75029ede94857779c6915b44f94068b921e\"                  challenge = \"542fe29e11d10314d3330e060c64f8fb9cd341981279432b03b2bd51cf5d489b\"     ```<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e `HOST=tos.nc.jctf.pro .\/runclient.sh` (\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 [Sui] (<a href=\"https:\/\/docs.sui.io\/guides\/developer\/getting-started\/sui-install#install-sui-binaries-from-source\">https:\/\/docs.sui.io\/guides\/developer\/getting-started\/sui-install#install-sui-binaries-from-source<\/a>)), \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0444\u043b\u0430\u0433.<\/p>\n<h2>[Dark BrOTTERhood] &#8212; medium (275 points, 25 solves)<\/h2>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430:<\/summary>\n<div class=\"spoiler__content\">\n<p><a href=\"https:\/\/2024.justctf.team\/challenges\/13\">https:\/\/2024.justctf.team\/challenges\/13<\/a><\/p>\n<p>module challenge::Otter {<\/p>\n<pre><code class=\"rust\">\/\/ --------------------------------------------------- \/\/ DEPENDENCIES \/\/ ---------------------------------------------------  use sui::coin::{Self, Coin}; use sui::balance::{Self, Supply}; use sui::url; use sui::random::{Self, Random}; use sui::table::{Self, Table};  \/\/ --------------------------------------------------- \/\/ CONST \/\/ ---------------------------------------------------  const NEW: u64 = 1; const WON: u64 = 2; const FINISHED: u64 = 3;  const WRONG_AMOUNT: u64 = 1337; const BETTER_BRING_A_KNIFE_TO_A_GUNFIGHT: u64 = 1338; const WRONG_STATE: u64 = 1339; const ALREADY_REGISTERED: u64 = 1340; const NOT_REGISTERED: u64 = 1341; const TOO_MUCH_MONSTERS: u64 = 1342; const NOT_SOLVED: u64 = 1343;  const QUEST_LIMIT: u64 = 25; \/\/ --------------------------------------------------- \/\/ STRUCTS \/\/ ---------------------------------------------------  public struct OTTER has drop {}  public struct OsecSuply&lt;phantom CoinType&gt; has key {     id: UID,     supply: Supply&lt;CoinType&gt; }  public struct Vault&lt;phantom CoinType&gt; has key {     id: UID,     cash: Coin&lt;CoinType&gt; }  public struct Monster has store {     fight_status: u64,     reward: u8,     power: u8 }  public struct QuestBoard has key, store {     id: UID,     quests: vector&lt;Monster&gt;,     players: Table&lt;address, bool&gt; }  public struct Flag has key, store {     id: UID,     user: address,     flag: bool }  public struct Player has key, store {     id: UID,     user: address,     coins: Coin&lt;OTTER&gt;,     power: u8 }  \/\/ --------------------------------------------------- \/\/ MINT CASH \/\/ ---------------------------------------------------  fun init(witness: OTTER, ctx: &amp;mut TxContext) {     let (mut treasury, metadata) = coin::create_currency(         witness, 9, b\"OSEC\", b\"Osec\", b\"Otter ca$h\", option::some(url::new_unsafe_from_bytes(b\"https:\/\/osec.io\/\")), ctx     );     transfer::public_freeze_object(metadata);      let pool_liquidity = coin::mint&lt;OTTER&gt;(&amp;mut<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-427455","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/427455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=427455"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/427455\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=427455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=427455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=427455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}