//@ runDefault("--useConcurrentJIT=0")
function main() {
    const u0 = {a: 0};
    const u3 = {
        d: 0.1,
        eeeee: 0,
        abcdefghijklm: 0,
    };

    const u4 = {
        abcdefghijklm: 0,
    };

    function f2() {
        for (let i = 0; i < 10; i++) {
            const o0 = { a: 0 };
            [0];
            const o1 = {};
            const u6 = {
                a: 0,
                b: -2,
                log10: 0,
                copyWithin: 0,
                values: -20
            };
            const s0 = 'aaabcdef';
            function f0() {
                const u8 = {
                    abcde: 20,
                };
                for (const u9 of s0) {
                }
                String.fromCharCode([0], 256, 0);
                const u9 = {caaaaa: 0};
                o1[-4000000000] = WeakMap;
                const f4 = Function.bind(0, 0);
                new Promise(f4);
            }
            const p2 = {
                call: 0,
                construct: 0,
                getPrototypeOf: 0,
                has: 0,
                defineProperty: 0,
                isExtensible: 0,
            };
            new Promise(f0);
            function f3(ay) {
                new Promise(WeakSet);
            }
            const u12 = new Promise(f3);
            function f1(ax) {
                'use strict';
                ax.xa = f1;
            }
            if (i != 0) {
                let c0 = 0;
                while (c0 < 6) {
                    let c1 = 0;
                    while (c1 < 8) {
                        c1++;
                    }
                    c0++;
                }
                f1(o0, 0);
            } else {
                o0.xy = 0;
                o0.xx = {q:0};
            }
            for (let c2 = 0; c2 < 100; c2++) {}
            const u11 = [0, 0, 1.1];
            const o2 = { a: 0 };
            for (let c3 = 0; c3 < 100; c3++) {
                o2.toString;
            }
            o0.xyz;
        }
        print;
    }
    f2();
    f2();

    Math.atan();
    new Uint8Array();
}

main();
