{"ScriptPreparationCode":"var cfg = {\r\n \u0022car\u0022: \u0022resources/cars/141003\u0022,\r\n \u0022color\u0022: \u0022#AB2567\u0022,\r\n \u0022angle\u0022: 6,\r\n \u0022rims\u0022: \u0022resources/rims/NISSAN_SUV2_kicks_2021_18_1500\u0022,\r\n \u0022tyres\u0022: \u0022resources/tyres/T4_18_1500\u0022,\r\n \u0022tint\u0022: 25,\r\n \u0022shadow\u0022: true,\r\n \u0022height\u0022: 0,\r\n \u0022plate\u0022: \u0022\u0022,\r\n \u0022background\u0022: \u0022\u0022,\r\n \u0022plateFilterQuality\u0022: 0,\r\n \u0022partSelectionEnabled\u0022: true,\r\n \u0022soloPart\u0022: \u0022\u0022,\r\n \u0022soloMode\u0022: \u0022ghost\u0022\r\n}\r\n\r\n\r\nfunction pad (hash, len) {\r\n while (hash.length \u003C len) {\r\n hash = \u00270\u0027 \u002B hash;\r\n }\r\n return hash;\r\n}\r\n\r\nfunction fold (hash, text) {\r\n var i;\r\n var chr;\r\n var len;\r\n if (text.length === 0) {\r\n return hash;\r\n }\r\n for (i = 0, len = text.length; i \u003C len; i\u002B\u002B) {\r\n chr = text.charCodeAt(i);\r\n hash = ((hash \u003C\u003C 5) - hash) \u002B chr;\r\n hash |= 0;\r\n }\r\n return hash \u003C 0 ? hash * -2 : hash;\r\n}\r\n\r\nfunction foldObject (hash, o, seen) {\r\n return Object.keys(o).sort().reduce(foldKey, hash);\r\n function foldKey (hash, key) {\r\n return foldValue(hash, o[key], key, seen);\r\n }\r\n}\r\n\r\nfunction foldValue (input, value, key, seen) {\r\n var hash = fold(fold(fold(input, key), toString(value)), typeof value);\r\n if (value === null) {\r\n return fold(hash, \u0027null\u0027);\r\n }\r\n if (value === undefined) {\r\n return fold(hash, \u0027undefined\u0027);\r\n }\r\n if (typeof value === \u0027object\u0027 || typeof value === \u0027function\u0027) {\r\n if (seen.indexOf(value) !== -1) {\r\n return fold(hash, \u0027[Circular]\u0027 \u002B key);\r\n }\r\n seen.push(value);\r\n\r\n var objHash = foldObject(hash, value, seen)\r\n\r\n if (!(\u0027valueOf\u0027 in value) || typeof value.valueOf !== \u0027function\u0027) {\r\n return objHash;\r\n }\r\n\r\n try {\r\n return fold(objHash, String(value.valueOf()))\r\n } catch (err) {\r\n return fold(objHash, \u0027[valueOf exception]\u0027 \u002B (err.stack || err.message))\r\n }\r\n }\r\n return fold(hash, value.toString());\r\n}\r\n\r\nfunction toString (o) {\r\n return Object.prototype.toString.call(o);\r\n}\r\n\r\nfunction sum (o) {\r\n return pad(foldValue(0, o, \u0027\u0027, []).toString(16), 8);\r\n}\r\n\r\n\r\nfunction cyrb53(str, seed = 0) {\r\n let h1 = 0xdeadbeef ^ seed,\r\n h2 = 0x41c6ce57 ^ seed;\r\n for (let i = 0, ch; i \u003C str.length; i\u002B\u002B) {\r\n ch = str.charCodeAt(i);\r\n h1 = Math.imul(h1 ^ ch, 2654435761);\r\n h2 = Math.imul(h2 ^ ch, 1597334677);\r\n }\r\n \r\n h1 = Math.imul(h1 ^ (h1 \u003E\u003E\u003E 16), 2246822507) ^ Math.imul(h2 ^ (h2 \u003E\u003E\u003E 13), 3266489909);\r\n h2 = Math.imul(h2 ^ (h2 \u003E\u003E\u003E 16), 2246822507) ^ Math.imul(h1 ^ (h1 \u003E\u003E\u003E 13), 3266489909);\r\n \r\n return 4294967296 * (2097151 \u0026 h2) \u002B (h1 \u003E\u003E\u003E 0);\r\n};\r\n","TestCases":[{"Name":"hashSum","Code":"cfg.angle = Math.random()*36;\r\nconst h = sum(cfg);","IsDeferred":false},{"Name":"cyrb53","Code":"cfg.angle = Math.random()*36;\r\nconst h = cyrb53(JSON.stringify(cfg));","IsDeferred":false}]}