google.pacman||function(){
    var a=true,e=false,g={},i=[1,4,2,8],l={
        0:{
            axis:0,
            increment:0
        },
        1:{
            axis:0,
            increment:-1
        },
        2:{
            axis:0,
            increment:+1
            },
        4:{
            axis:1,
            increment:-1
        },
        8:{
            axis:1,
            increment:+1
            }
        },m=[0,7,17,32],n=[{
    x:5,
    y:1,
    w:56
},{
    x:5,
    y:4,
    w:5
},{
    x:5,
    y:1,
    h:4
},{
    x:9,
    y:1,
    h:12
},{
    x:5,
    y:12,
    h:4
},{
    x:10,
    y:12,
    h:4
},{
    x:5,
    y:15,
    w:16
},{
    x:5,
    y:12,
    w:31
},{
    x:60,
    y:1,
    h:4
},{
    x:54,
    y:1,
    h:4
},{
    x:19,
    y:1,
    h:12
},{
    x:19,
    y:4,
    w:26
},{
    x:13,
    y:5,
    w:7
},{
    x:13,
    y:5,
    h:4
},{
    x:13,
    y:8,
    w:3
},{
    x:56,
    y:4,
    h:9
},{
    x:48,
    y:4,
    w:13
},{
    x:48,
    y:1,
    h:12
},{
    x:60,
    y:12,
    h:4
},{
    x:44,
    y:15,
    w:17
},{
    x:54,
    y:12,
    h:4
},{
    x:44,
    y:12,
    w:17
},{
    x:44,
    y:1,
    h:15
},{
    x:41,
    y:13,
    w:4
},{
    x:41,
    y:13,
    h:3
},{
    x:38,
    y:13,
    h:3
},{
    x:38,
    y:15,
    w:4
},{
    x:35,
    y:10,
    w:10
},{
    x:35,
    y:1,
    h:15
},{
    x:35,
    y:13,
    w:4
},{
    x:21,
    y:12,
    h:4
},{
    x:24,
    y:12,
    h:4
},{
    x:24,
    y:15,
    w:12
},{
    x:27,
    y:4,
    h:9
},{
    x:52,
    y:9,
    w:5
},{
    x:56,
    y:8,
    w:10,
    type:1
},{
    x:1,
    y:8,
    w:9,
    type:1
}],o=[{
    x:1,
    y:8,
    w:8
},{
    x:57,
    y:8,
    w:9
},{
    x:44,
    y:2,
    h:10
},{
    x:35,
    y:5,
    h:7
},{
    x:36,
    y:4,
    w:8
},{
    x:36,
    y:10,
    w:8
},{
    x:39,
    y:15,
    w:2
}],p=[{
    x:5,
    y:15
},{
    x:5,
    y:3
},{
    x:15,
    y:8
},{
    x:60,
    y:3
},{
    x:60,
    y:15
}],q=[{
    x:2,
    y:8
},{
    x:63,
    y:8
}],r={
    1:[{
        x:39.5,
        y:15,
        dir:4
    },{
        x:39.5,
        y:4,
        dir:4,
        scatterX:57,
        scatterY:-4
    },{
        x:39.5,
        y:7,
        dir:2,
        scatterX:0,
        scatterY:-4
    },{
        x:37.625,
        y:7,
        dir:1,
        scatterX:57,
        scatterY:20
    },{
        x:41.375,
        y:7,
        dir:1,
        scatterX:0,
        scatterY:20
    }],
    2:[{
        x:40.25,
        y:15,
        dir:8
    },{
        x:38.75,
        y:15,
        dir:4
    },{
        x:39.5,
        y:4,
        dir:4,
        scatterX:57,
        scatterY:-4
    },{
        x:39.5,
        y:7,
        dir:2,
        scatterX:0,
        scatterY:-4
    },{
        x:37.625,
        y:7,
        dir:1,
        scatterX:57,
        scatterY:20
    },{
        x:41.375,
        y:7,
        dir:1,
        scatterX:0,
        scatterY:20
    }]
    },s=[32,312],v=[80,312],w={
    0:0.16,
    1:0.23,
    2:1,
    3:1,
    4:2.23,
    5:0.3,
    6:1.9,
    7:2.23,
    8:1.9,
    9:5,
    10:1.9,
    11:1.18,
    12:0.3,
    13:0.5,
    14:1.9,
    15:9,
    16:10,
    17:0.26
},y=0.8*0.4,z=[{},{
    ghostSpeed:0.75,
    ghostTunnelSpeed:0.4,
    playerSpeed:0.8,
    dotEatingSpeed:0.71,
    ghostFrightSpeed:0.5,
    playerFrightSpeed:0.9,
    dotEatingFrightSpeed:0.79,
    elroyDotsLeftPart1:20,
    elroySpeedPart1:0.8,
    elroyDotsLeftPart2:10,
    elroySpeedPart2:0.85,
    frightTime:6,
    frightBlinkCount:5,
    fruit:1,
    fruitScore:100,
    ghostModeSwitchTimes:[7,20,7,20,5,20,5,1],
    penForceTime:4,
    penLeavingLimits:[0,0,30,60]
    },{
    ghostSpeed:0.85,
    ghostTunnelSpeed:0.45,
    playerSpeed:0.9,
    dotEatingSpeed:0.79,
    ghostFrightSpeed:0.55,
    playerFrightSpeed:0.95,
    dotEatingFrightSpeed:0.83,
    elroyDotsLeftPart1:30,
    elroySpeedPart1:0.9,
    elroyDotsLeftPart2:15,
    elroySpeedPart2:0.95,
    frightTime:5,
    frightBlinkCount:5,
    fruit:2,
    fruitScore:300,
    ghostModeSwitchTimes:[7,20,7,20,5,1033,1/60,1],
    penForceTime:4,
    penLeavingLimits:[0,0,0,50],
    cutsceneId:1
},{
    ghostSpeed:0.85,
    ghostTunnelSpeed:0.45,
    playerSpeed:0.9,
    dotEatingSpeed:0.79,
    ghostFrightSpeed:0.55,
    playerFrightSpeed:0.95,
    dotEatingFrightSpeed:0.83,
    elroyDotsLeftPart1:40,
    elroySpeedPart1:0.9,
    elroyDotsLeftPart2:20,
    elroySpeedPart2:0.95,
    frightTime:4,
    frightBlinkCount:5,
    fruit:3,
    fruitScore:500,
    ghostModeSwitchTimes:[7,20,7,20,5,1033,1/60,1],
    penForceTime:4,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.85,
    ghostTunnelSpeed:0.45,
    playerSpeed:0.9,
    dotEatingSpeed:0.79,
    ghostFrightSpeed:0.55,
    playerFrightSpeed:0.95,
    dotEatingFrightSpeed:0.83,
    elroyDotsLeftPart1:40,
    elroySpeedPart1:0.9,
    elroyDotsLeftPart2:20,
    elroySpeedPart2:0.95,
    frightTime:3,
    frightBlinkCount:5,
    fruit:3,
    fruitScore:500,
    ghostModeSwitchTimes:[7,20,7,20,5,1033,1/60,1],
    penForceTime:4,
    penLeavingLimits:[0,
    0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:40,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:20,
    elroySpeedPart2:1.05,
    frightTime:2,
    frightBlinkCount:5,
    fruit:4,
    fruitScore:700,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0],
    cutsceneId:2
},{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:50,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:25,
    elroySpeedPart2:1.05,
    frightTime:5,
    frightBlinkCount:5,
    fruit:4,
    fruitScore:700,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:50,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:25,
    elroySpeedPart2:1.05,
    frightTime:2,
    frightBlinkCount:5,
    fruit:5,
    fruitScore:1E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:50,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:25,
    elroySpeedPart2:1.05,
    frightTime:2,
    frightBlinkCount:5,
    fruit:5,
    fruitScore:1E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:60,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:30,
    elroySpeedPart2:1.05,
    frightTime:1,
    frightBlinkCount:3,
    fruit:6,
    fruitScore:2E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0],
    cutsceneId:3
},{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:60,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:30,
    elroySpeedPart2:1.05,
    frightTime:5,
    frightBlinkCount:5,
    fruit:6,
    fruitScore:2E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:60,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:30,
    elroySpeedPart2:1.05,
    frightTime:2,
    frightBlinkCount:5,
    fruit:7,
    fruitScore:3E3,
    ghostModeSwitchTimes:[5,
    20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:80,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:40,
    elroySpeedPart2:1.05,
    frightTime:1,
    frightBlinkCount:3,
    fruit:7,
    fruitScore:3E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:80,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:40,
    elroySpeedPart2:1.05,
    frightTime:1,
    frightBlinkCount:3,
    fruit:8,
    fruitScore:5E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0],
    cutsceneId:3
},{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:80,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:40,
    elroySpeedPart2:1.05,
    frightTime:3,
    frightBlinkCount:5,
    fruit:8,
    fruitScore:5E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:100,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:50,
    elroySpeedPart2:1.05,
    frightTime:1,
    frightBlinkCount:3,
    fruit:8,
    fruitScore:5E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:100,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:50,
    elroySpeedPart2:1.05,
    frightTime:1,
    frightBlinkCount:3,
    fruit:8,
    fruitScore:5E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:100,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:50,
    elroySpeedPart2:1.05,
    frightTime:0,
    frightBlinkCount:0,
    fruit:8,
    fruitScore:5E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0],
    cutsceneId:3
},{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:100,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:50,
    elroySpeedPart2:1.05,
    frightTime:1,
    frightBlinkCount:3,
    fruit:8,
    fruitScore:5E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:120,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:60,
    elroySpeedPart2:1.05,
    frightTime:0,
    frightBlinkCount:0,
    fruit:8,
    fruitScore:5E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:1,
    dotEatingSpeed:0.87,
    ghostFrightSpeed:0.6,
    playerFrightSpeed:1,
    dotEatingFrightSpeed:0.87,
    elroyDotsLeftPart1:120,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:60,
    elroySpeedPart2:1.05,
    frightTime:0,
    frightBlinkCount:0,
    fruit:8,
    fruitScore:5E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    },{
    ghostSpeed:0.95,
    ghostTunnelSpeed:0.5,
    playerSpeed:0.9,
    dotEatingSpeed:0.79,
    ghostFrightSpeed:0.75,
    playerFrightSpeed:0.9,
    dotEatingFrightSpeed:0.79,
    elroyDotsLeftPart1:120,
    elroySpeedPart1:1,
    elroyDotsLeftPart2:60,
    elroySpeedPart2:1.05,
    frightTime:0,
    frightBlinkCount:0,
    fruit:8,
    fruitScore:5E3,
    ghostModeSwitchTimes:[5,20,5,20,5,1037,1/60,1],
    penForceTime:3,
    penLeavingLimits:[0,0,0,0]
    }],A={
    1:[{
        x:37.6,
        y:7,
        dir:1,
        dest:6.375,
        speed:0.48
    },{
        x:37.6,
        y:6.375,
        dir:2,
        dest:7.625,
        speed:0.48
    },{
        x:37.6,
        y:7.625,
        dir:1,
        dest:7,
        speed:0.48
    }],
    2:[{
        x:39.5,
        y:7,
        dir:2,
        dest:7.625,
        speed:0.48
    },{
        x:39.5,
        y:7.625,
        dir:1,
        dest:6.375,
        speed:0.48
    },{
        x:39.5,
        y:6.375,
        dir:2,
        dest:7,
        speed:0.48
    }],
    3:[{
        x:41.4,
        y:7,
        dir:1,
        dest:6.375,
        speed:0.48
    },{
        x:41.4,
        y:6.375,
        dir:2,
        dest:7.625,
        speed:0.48
    },{
        x:41.4,
        y:7.625,
        dir:1,
        dest:7,
        speed:0.48
    }],
    4:[{
        x:37.6,
        y:7,
        dir:8,
        dest:39.5,
        speed:y
    },{
        x:39.5,
        y:7,
        dir:1,
        dest:4,
        speed:y
    }],
    5:[{
        x:39.5,
        y:7,
        dir:1,
        dest:4,
        speed:y
    }],
    6:[{
        x:41.4,
        y:7,
        dir:4,
        dest:39.5,
        speed:y
    },{
        x:39.5,
        y:7,
        dir:1,
        dest:4,
        speed:y
    }],
    7:[{
        x:39.5,
        y:4,
        dir:2,
        dest:7,
        speed:1.6
    },{
        x:39.5,
        y:7,
        dir:4,
        dest:37.625,
        speed:1.6
    }],
    8:[{
        x:39.5,
        y:4,
        dir:2,
        dest:7,
        speed:1.6
    }],
    9:[{
        x:39.5,
        y:4,
        dir:2,
        dest:7,
        speed:1.6
    },{
        x:39.5,
        y:7,
        dir:8,
        dest:41.375,
        speed:1.6
    }],
    10:[{
        x:37.6,
        y:7,
        dir:8,
        dest:39.5,
        speed:y
    },{
        x:39.5,
        y:7,
        dir:1,
        dest:4,
        speed:y
    }],
    11:[{
        x:39.5,
        y:7,
        dir:1,
        dest:4,
        speed:y
    }],
    12:[{
        x:41.4,
        y:7,
        dir:4,
        dest:39.5,
        speed:y
    },{
        x:39.5,
        y:7,
        dir:1,
        dest:4,
        speed:y
    }]
    },B={
    1:{
        actors:[{
            ghost:e,
            x:64,
            y:9,
            id:0
        },{
            ghost:a,
            x:68.2,
            y:9,
            id:1
        }],
        sequence:[{
            time:5.5,
            moves:[{
                dir:4,
                speed:0.75*0.8*2
            },{
                dir:4,
                speed:0.78*0.8*2
            }]
            },{
            time:0.1,
            moves:[{
                dir:4,
                speed:32
            },{
                dir:4,
                speed:0
            }]
            },{
            time:9,
            moves:[{
                dir:8,
                speed:0.75*0.8*2,
                elId:"pcm-bpcm"
            },{
                dir:8,
                speed:0.8,
                mode:4
            }]
            }]
        },
    2:{
        actors:[{
            ghost:e,
            x:64,
            y:9,
            id:0
        },{
            ghost:a,
            x:70.2,
            y:9,
            id:1
        },{
            ghost:a,
            x:32,
            y:9.5,
            id:2
        }],
        sequence:[{
            time:2.7,
            moves:[{
                dir:4,
                speed:0.75*0.8*2
            },{
                dir:4,
                speed:0.78*0.8*2
            },{
                dir:0,
                speed:0,
                elId:"pcm-stck"
            }]
            },{
            time:1,
            moves:[{
                dir:4,
                speed:0.75*0.8*2
            },{
                dir:4,
                speed:0.1*0.8
            },{
                dir:0,
                speed:0,
                elId:"pcm-stck"
            }]
            },{
            time:1.3,
            moves:[{
                dir:4,
                speed:0.75*0.8*2
            },{
                dir:4,
                speed:0
            },{
                dir:0,
                speed:0,
                elId:"pcm-stck"
            }]
            },{
            time:1,
            moves:[{
                dir:4,
                speed:0.75*0.8*2
            },{
                dir:4,
                speed:0,
                elId:"pcm-ghfa"
            },{
                dir:0,
                speed:0,
                elId:"pcm-stck"
            }]
            },{
            time:2.5,
            moves:[{
                dir:4,
                speed:0.75*0.8*2
            },{
                dir:4,
                speed:0,
                elId:"pcm-ghfa"
            },{
                dir:0,
                speed:0,
                elId:"pcm-stck"
            }]
            }]
        },
    3:{
        actors:[{
            ghost:e,
            x:64,
            y:9,
            id:0
        },{
            ghost:a,
            x:70.2,
            y:9,
            id:2
        }],
        sequence:[{
            time:5.3,
            moves:[{
                dir:4,
                speed:0.75*0.8*2
            },{
                dir:4,
                speed:0.78*0.8*2,
                elId:"pcm-ghin"
            }]
            },{
            time:5.3,
            moves:[{
                dir:4,
                speed:0
            },{
                dir:8,
                speed:0.78*0.8*2,
                elId:"pcm-gbug"
            }]
            }]
        }
    },C=[90,45,30],D=C[0];
function E(b){
    this.id=b
    }
E.prototype.A=function(){
    var b=r[g.playerCount][this.id];
    this.pos=[b.y*8,b.x*8];
    this.posDelta=[0,0];
    this.tilePos=[b.y*8,b.x*8];
    this.targetPos=[b.scatterY*8,b.scatterX*8];
    this.scatterPos=[b.scatterY*8,b.scatterX*8];
    this.lastActiveDir=this.dir=b.dir;
    this.physicalSpeed=this.requestedDir=this.nextDir=0;
    this.c(0);
    this.reverseDirectionsNext=this.freeToLeavePen=this.modeChangedWhileInPen=this.eatenInThisFrightMode=e;
    this.l()
    };
E.prototype.createElement=function(){
    this.el=document.createElement("div");
    this.el.className="pcm-ac";
    this.el.id="actor"+this.id;
    g.prepareElement(this.el,0,0);
    g.playfieldEl.appendChild(this.el);
    this.elPos=[0,0];
    this.elBackgroundPos=[0,0]
    };
E.prototype.a=function(b){
    var c=this.mode;
    this.mode=b;
    if(this.id==g.playerCount+3&&(b==16||c==16))g.updateCruiseElroySpeed();
    switch(c){
        case 32:
            g.ghostExitingPenNow=e;
            break;
        case 8:
            g.ghostEyesCount>0&&g.ghostEyesCount--;
            g.ghostEyesCount==0&&g.playAmbientSound();
            break
            }
            switch(b){
        case 4:
            this.fullSpeed=g.levels.ghostFrightSpeed*0.8;
            this.tunnelSpeed=g.levels.ghostTunnelSpeed*0.8;
            this.followingRoutine=e;
            break;
        case 1:
            this.fullSpeed=g.levels.ghostSpeed*0.8;
            this.tunnelSpeed=g.levels.ghostTunnelSpeed*0.8;
            this.followingRoutine=
            e;
            break;
        case 2:
            this.targetPos=this.scatterPos;
            this.fullSpeed=g.levels.ghostSpeed*0.8;
            this.tunnelSpeed=g.levels.ghostTunnelSpeed*0.8;
            this.followingRoutine=e;
            break;
        case 8:
            this.tunnelSpeed=this.fullSpeed=1.6;
            this.targetPos=[s[0],s[1]];
            this.freeToLeavePen=this.followingRoutine=e;
            break;
        case 16:
            this.l();
            this.followingRoutine=a;
            this.routineMoveId=-1;
            switch(this.id){
            case g.playerCount+1:
                this.routineToFollow=2;
                break;
            case g.playerCount+2:
                this.routineToFollow=1;
                break;
            case g.playerCount+3:
                this.routineToFollow=
                3;
                break
                }
                break;
        case 32:
            this.followingRoutine=a;
            this.routineMoveId=-1;
            switch(this.id){
            case g.playerCount+1:
                this.routineToFollow=5;
                break;
            case g.playerCount+2:
                this.routineToFollow=4;
                break;
            case g.playerCount+3:
                this.routineToFollow=6;
                break
                }
                g.ghostExitingPenNow=a;
        break;
        case 64:
            this.followingRoutine=a;
            this.routineMoveId=-1;
            switch(this.id){
            case g.playerCount:case g.playerCount+1:
                this.routineToFollow=8;
                break;
            case g.playerCount+2:
                this.routineToFollow=7;
                break;
            case g.playerCount+3:
                this.routineToFollow=9;
                break
                }
                break;
        case 128:
            this.followingRoutine=a;
            this.routineMoveId=-1;
            switch(this.id){
            case g.playerCount:case g.playerCount+1:
                this.routineToFollow=11;
                break;
            case g.playerCount+2:
                this.routineToFollow=10;
                break;
            case g.playerCount+3:
                this.routineToFollow=12;
                break
                }
                break
        }
        this.d()
    };

E.prototype.l=function(){
    if(this.id>=g.playerCount)this.targetPlayerId=Math.floor(g.rand()*g.playerCount)
        };
E.prototype.z=function(b){
    if(this.dir==g.oppositeDirections[b]){
        this.dir=b;
        this.posDelta=[0,0];
        this.currentSpeed!=2&&this.c(0);
        if(this.dir!=0)this.lastActiveDir=this.dir;
        this.nextDir=0
        }else if(this.dir!=b)if(this.dir==0){
        if(g.playfield[this.pos[0]][this.pos[1]].allowedDir&b)this.dir=b
            }else{
        var c=g.playfield[this.tilePos[0]][this.tilePos[1]];
        if(c&&c.allowedDir&b){
            c=l[this.dir];
            var d=[this.pos[0],this.pos[1]];
            d[c.axis]-=c.increment;
            var f=0;
            if(d[0]==this.tilePos[0]&&d[1]==this.tilePos[1])f=1;
            else{
                d[c.axis]-=
                c.increment;
                if(d[0]==this.tilePos[0]&&d[1]==this.tilePos[1])f=2
                    }
                    if(f){
                this.dir=b;
                this.pos[0]=this.tilePos[0];
                this.pos[1]=this.tilePos[1];
                c=l[this.dir];
                this.pos[c.axis]+=c.increment*f;
                return
            }
        }
        this.nextDir=b;
    this.posDelta=[0,0]
    }
    };
E.prototype.i=function(b){
    var c=this.tilePos,d=l[this.dir],f=[c[0],c[1]];
    f[d.axis]+=d.increment*8;
    var h=g.playfield[f[0]][f[1]];
    if(b&&!h.intersection)h=g.playfield[c[0]][c[1]];
    if(h.intersection)switch(this.mode){
        case 2:case 1:case 8:
            if((this.dir&h.allowedDir)==0&&h.allowedDir==g.oppositeDirections[this.dir])this.nextDir=g.oppositeDirections[this.dir];
            else{
            b=99999999999;
            c=0;
            for(var j in i){
                var k=i[j];
                if(h.allowedDir&k&&this.dir!=g.oppositeDirections[k]){
                    d=l[k];
                    var x=[f[0],f[1]];
                    x[d.axis]+=d.increment;
                    d=g.getDistance(x,[this.targetPos[0],this.targetPos[1]]);
                    if(d<b){
                        b=d;
                        c=k
                        }
                    }
            }
            if(c)this.nextDir=c
            }
            break;
    case 4:
        if((this.dir&h.allowedDir)==0&&h.allowedDir==g.oppositeDirections[this.dir])this.nextDir=g.oppositeDirections[this.dir];
        else{
        do f=i[Math.floor(g.rand()*4)];while((f&h.allowedDir)==0||f==g.oppositeDirections[this.dir]);
        this.nextDir=f
        }
        break
    }
    };
E.prototype.p=function(b){
    g.tilesChanged=a;
    if(this.reverseDirectionsNext){
        this.dir=g.oppositeDirections[this.dir];
        this.nextDir=0;
        this.reverseDirectionsNext=e;
        this.i(a)
        }
        if(!this.ghost&&!g.playfield[b[0]][b[1]].path){
        this.pos[0]=this.lastGoodTilePos[0];
        this.pos[1]=this.lastGoodTilePos[1];
        b[0]=this.lastGoodTilePos[0];
        b[1]=this.lastGoodTilePos[1];
        this.dir=0
        }else this.lastGoodTilePos=[b[0],b[1]];
    g.playfield[b[0]][b[1]].type==1&&this.mode!=8?this.c(2):this.c(0);
    !this.ghost&&g.playfield[b[0]][b[1]].dot&&
    g.dotEaten(this.id,b);
    this.tilePos[0]=b[0];
    this.tilePos[1]=b[1]
    };

E.prototype.t=function(){
    var b=this.tilePos;
    switch(this.dir){
        case 1:
            var c=[b[0],b[1]],d=[b[0]+3.6,b[1]];
            break;
        case 2:
            c=[b[0]-4,b[1]];
            d=[b[0],b[1]];
            break;
        case 4:
            c=[b[0],b[1]];
            d=[b[0],b[1]+3.6];
            break;
        case 8:
            c=[b[0],b[1]-4];
            d=[b[0],b[1]];
            break
            }
            if(this.pos[0]>=c[0]&&this.pos[0]<=d[0]&&this.pos[1]>=c[1]&&this.pos[1]<=d[1]){
        b=l[this.nextDir];
        this.posDelta[b.axis]+=b.increment
        }
    };
E.prototype.n=function(){
    if(this.pos[0]==q[0].y*8&&this.pos[1]==q[0].x*8){
        this.pos[0]=q[1].y*8;
        this.pos[1]=(q[1].x-1)*8
        }else if(this.pos[0]==q[1].y*8&&this.pos[1]==q[1].x*8){
        this.pos[0]=q[0].y*8;
        this.pos[1]=(q[0].x+1)*8
        }
        this.mode==8&&this.pos[0]==s[0]&&this.pos[1]==s[1]&&this.a(64);
    if(!this.ghost&&this.pos[0]==v[0]&&(this.pos[1]==v[1]||this.pos[1]==v[1]+8))g.eatFruit(this.id)
        };
E.prototype.u=function(){
    this.n();
    this.ghost&&this.i(e);
    var b=g.playfield[this.pos[0]][this.pos[1]];
    if(b.intersection)if(this.nextDir&&this.nextDir&b.allowedDir){
        if(this.dir!=0)this.lastActiveDir=this.dir;
        this.dir=this.nextDir;
        this.nextDir=0;
        if(!this.ghost){
            this.pos[0]+=this.posDelta[0];
            this.pos[1]+=this.posDelta[1];
            this.posDelta=[0,0]
            }
        }else if((this.dir&b.allowedDir)==0){
        if(this.dir!=0)this.lastActiveDir=this.dir;
        this.nextDir=this.dir=0;
        this.c(0)
        }
    };
E.prototype.o=function(){
    var b=this.pos[0]/8,c=this.pos[1]/8,d=[Math.round(b)*8,Math.round(c)*8];
    if(d[0]!=this.tilePos[0]||d[1]!=this.tilePos[1])this.p(d);
    else{
        b=[Math.floor(b)*8,Math.floor(c)*8];
        this.pos[1]==b[1]&&this.pos[0]==b[0]&&this.u()
        }!this.ghost&&this.nextDir&&g.playfield[d[0]][d[1]].intersection&&this.nextDir&g.playfield[d[0]][d[1]].allowedDir&&this.t()
    };
E.prototype.B=function(){
    if(this.id==g.playerCount&&g.dotsRemaining<g.levels.elroyDotsLeftPart1&&this.mode==2&&(!g.lostLifeOnThisLevel||g.actors[g.playerCount+3].mode!=16)){
        var b=g.actors[this.targetPlayerId];
        this.targetPos=[b.tilePos[0],b.tilePos[1]]
        }else if(this.ghost&&this.mode==1){
        b=g.actors[this.targetPlayerId];
        switch(this.id){
            case g.playerCount:
                this.targetPos=[b.tilePos[0],b.tilePos[1]];
                break;
            case g.playerCount+1:
                this.targetPos=[b.tilePos[0],b.tilePos[1]];
                var c=l[b.dir];
                this.targetPos[c.axis]+=
                32*c.increment;
                if(b.dir==1)this.targetPos[1]-=32;
                break;
            case g.playerCount+2:
                var d=g.actors[g.playerCount],f=[b.tilePos[0],b.tilePos[1]];
                c=l[b.dir];
                f[c.axis]+=16*c.increment;
                if(b.dir==1)f[1]-=16;
                this.targetPos[0]=f[0]*2-d.tilePos[0];
                this.targetPos[1]=f[1]*2-d.tilePos[1];
                break;
            case g.playerCount+3:
                c=g.getDistance(b.tilePos,this.tilePos);
                this.targetPos=c>64?[b.tilePos[0],b.tilePos[1]]:this.scatterPos;
                break
                }
            }
};
E.prototype.v=function(){
    this.routineMoveId++;
    if(this.routineMoveId==A[this.routineToFollow].length)if(this.mode==16&&this.freeToLeavePen&&!g.ghostExitingPenNow){
        this.eatenInThisFrightMode?this.a(128):this.a(32);
        return
    }else if(this.mode==32||this.mode==128){
        this.pos=[s[0],s[1]+4];
        this.dir=this.modeChangedWhileInPen?8:4;
        var b=g.mainGhostMode;
        if(this.mode==128&&b==4)b=g.lastMainGhostMode;
        this.a(b);
        return
    }else if(this.mode==64){
        if(this.id==g.playerCount||this.freeToLeavePen)this.a(128);
        else{
            this.eatenInThisFrightMode=
            a;
            this.a(16)
            }
            return
    }else this.routineMoveId=0;
    b=A[this.routineToFollow][this.routineMoveId];
    this.pos[0]=b.y*8;
    this.pos[1]=b.x*8;
    this.dir=b.dir;
    this.physicalSpeed=0;
    this.speedIntervals=g.getSpeedIntervals(b.speed);
    this.proceedToNextRoutineMove=e;
    this.b()
    };
E.prototype.m=function(){
    var b=A[this.routineToFollow][this.routineMoveId];
    if(b)if(this.speedIntervals[g.intervalTime]){
        var c=l[this.dir];
        this.pos[c.axis]+=c.increment;
        switch(this.dir){
            case 1:case 4:
                if(this.pos[c.axis]<b.dest*8){
                this.pos[c.axis]=b.dest*8;
                this.proceedToNextRoutineMove=a
                }
                break;
            case 2:case 8:
                if(this.pos[c.axis]>b.dest*8){
                this.pos[c.axis]=b.dest*8;
                this.proceedToNextRoutineMove=a
                }
                break
            }
            this.b()
        }
    };
E.prototype.j=function(){
    if(this.routineMoveId==-1||this.proceedToNextRoutineMove)this.v();
    this.m()
    };

E.prototype.d=function(){
    switch(this.currentSpeed){
        case 0:
            var b=this.id==g.playerCount&&(this.mode==2||this.mode==1)?g.cruiseElroySpeed:this.fullSpeed;
            break;
        case 1:
            b=this.dotEatingSpeed;
            break;
        case 2:
            b=this.tunnelSpeed;
            break
            }
            if(this.physicalSpeed!=b){
        this.physicalSpeed=b;
        this.speedIntervals=g.getSpeedIntervals(this.physicalSpeed)
        }
    };

E.prototype.c=function(b){
    this.currentSpeed=b;
    this.d()
    };
E.prototype.e=function(){
    if(this.dir)if(this.speedIntervals[g.intervalTime]){
        var b=l[this.dir];
        this.pos[b.axis]+=b.increment;
        this.o();
        this.b()
        }
    };

E.prototype.move=function(){
    if(g.gameplayMode==0||this.ghost&&g.gameplayMode==1&&(this.mode==8||this.mode==64)){
        if(this.requestedDir!=0){
            this.z(this.requestedDir);
            this.requestedDir=0
            }
            if(this.followingRoutine){
            this.j();
            this.mode==64&&this.j()
            }else{
            this.e();
            this.mode==8&&this.e()
            }
        }
};
E.prototype.k=function(){
    var b=g.getPlayfieldX(this.pos[1]+this.posDelta[1]),c=g.getPlayfieldY(this.pos[0]+this.posDelta[0]);
    if(this.elPos[0]!=c||this.elPos[1]!=b){
        this.elPos[0]=c;
        this.elPos[1]=b;
        this.el.style.left=b+"px";
        this.el.style.top=c+"px"
        }
    };
E.prototype.s=function(){
    var b=0,c=0,d=this.dir;
    if(d==0)d=this.lastActiveDir;
    if(g.gameplayMode==1&&this.id==g.playerEatingGhostId){
        b=3;
        c=0
        }else if((g.gameplayMode==9||g.gameplayMode==10)&&this.id==0){
        b=2;
        c=0
        }else if(g.gameplayMode==4||g.gameplayMode==5||g.gameplayMode==7){
        b=this.id==0?2:4;
        c=0
        }else if(g.gameplayMode==3)if(this.id==g.playerDyingId){
        d=20-Math.floor(g.gameplayModeTime/g.timing[4]*21);
        if(this.id==0){
            b=d-1;
            switch(b){
                case -1:
                    b=0;
                    break;
                case 11:
                    b=10;
                    break;
                case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:
                    b=
                    11;
                    break
                    }
                    c=12
            }else switch(d){
            case 0:case 1:case 2:case 6:case 10:
                b=4;
                c=3;
                break;
            case 3:case 7:case 11:
                b=4;
                c=0;
                break;
            case 4:case 8:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:
                b=4;
                c=2;
                break;
            case 5:case 9:
                b=4;
                c=1;
                break
                }
            }else{
        b=3;
        c=0
        }else if(this.el.id=="pcm-bpcm"){
    b=14;
    c=0;
    d=Math.floor(g.globalTime*0.2)%4;
    if(d==3)d=1;
    c+=2*d
    }else{
    switch(d){
        case 4:
            c=0;
            break;
        case 8:
            c=1;
            break;
        case 1:
            c=2;
            break;
        case 2:
            c=3;
            break
            }
            if(g.gameplayMode!=2)b=Math.floor(g.globalTime*0.3)%4;
    if(b==3&&this.dir==
        0)b=0;
    if(b==2&&this.id==0)b=0;
    if(b==3){
        b=2;
        if(this.id==0)c=0
            }
            if(this.id==1)b+=4
        }
        return[c,b]
};
E.prototype.r=function(){
    var b=0,c=0;
    if(g.gameplayMode==10||g.gameplayMode==4||g.gameplayMode==3){
        b=3;
        c=0
        }else if(g.gameplayMode==1&&this.id==g.ghostBeingEatenId){
        switch(g.modeScoreMultiplier){
            case 2:
                b=0;
                break;
            case 4:
                b=1;
                break;
            case 8:
                b=2;
                break;
            case 16:
                b=3;
                break
                }
                c=11;
        this.el.className="pcm-ac pcm-n"
        }else if(this.mode==4||(this.mode==16||this.mode==32)&&g.mainGhostMode==4&&!this.eatenInThisFrightMode){
        b=0;
        c=8;
        if(g.frightModeTime<g.levels.frightTotalTime-g.levels.frightTime&&Math.floor(g.frightModeTime/
            g.timing[1])%2==0)b+=2;
        b+=Math.floor(g.globalTime/16)%2
        }else if(this.mode==8||this.mode==64){
        c=this.nextDir;
        if(!c)c=this.dir;
        switch(c){
            case 4:
                b=2;
                break;
            case 8:
                b=3;
                break;
            case 1:
                b=0;
                break;
            case 2:
                b=1;
                break
                }
                c=10
        }else if(this.el.id=="pcm-ghin"){
        b=6;
        c=8;
        b+=Math.floor(g.globalTime/16)%2
        }else if(this.el.id=="pcm-gbug"){
        b=6;
        c=9;
        c+=Math.floor(g.globalTime/16)%2
        }else if(this.el.id=="pcm-ghfa"){
        b=g.cutsceneSequenceId==3?6:7;
        c=11
        }else if(this.el.id=="pcm-stck"){
        b=g.cutsceneSequenceId==1?g.cutsceneTime>60?1:g.cutsceneTime>
        45?2:3:g.cutsceneSequenceId==2?3:g.cutsceneSequenceId==3||g.cutsceneSequenceId==4?4:0;
        c=13
        }else{
        c=this.nextDir;
        if(!c||g.playfield[this.tilePos[0]][this.tilePos[1]].type==1)c=this.dir;
        switch(c){
            case 4:
                b=4;
                break;
            case 8:
                b=6;
                break;
            case 1:
                b=0;
                break;
            case 2:
                b=2;
                break
                }
                c=4+this.id-g.playerCount;
        if(this.speed>0||g.gameplayMode!=13)b+=Math.floor(g.globalTime/16)%2
            }
            return[c,b]
    };
E.prototype.b=function(){
    this.k();
    var b=[0,0];
    b=g.gameplayMode==8||g.gameplayMode==14?[0,3]:this.ghost?this.r():this.s();
    if(this.elBackgroundPos[0]!=b[0]||this.elBackgroundPos[1]!=b[1]){
        this.elBackgroundPos[0]=b[0];
        this.elBackgroundPos[1]=b[1];
        b[0]*=16;
        b[1]*=16;
        g.changeElementBkPos(this.el,b[1],b[0],a)
        }
    };

g.rand=function(){
    var b=4294967296,c=134775813;
    c=c*g.randSeed+1;
    return(g.randSeed=c%b)/b
    };

g.seed=function(b){
    g.randSeed=b
    };
g.getDistance=function(b,c){
    return Math.sqrt((c[1]-b[1])*(c[1]-b[1])+(c[0]-b[0])*(c[0]-b[0]))
    };

g.getPlayfieldX=function(b){
    return b+-32
    };

g.getPlayfieldY=function(b){
    return b+0
    };

g.getCorrectedSpritePos=function(b){
    return b/8*10+2
    };

g.getDotElementId=function(b,c){
    return"pcm-d"+b+"-"+c
    };

g.showElementById=function(b,c){
    var d=document.getElementById(b);
    if(d)d.style.visibility=c?"visible":"hidden"
        };
g.getAbsoluteElPos=function(b){
    var c=[0,0];
    do{
        c[0]+=b.offsetTop;
        c[1]+=b.offsetLeft
        }while(b=b.offsetParent);
    return c
    };
g.prepareElement=function(b,c,d){
    c=g.getCorrectedSpritePos(parseInt(c,10));
    d=g.getCorrectedSpritePos(parseInt(d,10));
    if(g.useCss){
        b.style.backgroundImage="url(/logos/pacman10-hp-sprite.png)";
        b.style.backgroundPosition=-c+"px "+-d+"px";
        b.style.backgroundRepeat="no-repeat"
        }else{
        b.style.overflow="hidden";
        c="display: block; position: relative; left: "+-c+"px; top: "+-d+"px";
        b.innerHTML='<img style="'+c+'" src="/logos/pacman10-hp-sprite.png">'
        }
    };
g.changeElementBkPos=function(b,c,d,f){
    if(f){
        c=g.getCorrectedSpritePos(c);
        d=g.getCorrectedSpritePos(d)
        }
        if(g.useCss)b.style.backgroundPosition=-c+"px "+-d+"px";
    else if(b.childNodes[0]){
        b.childNodes[0].style.left=-c+"px";
        b.childNodes[0].style.top=-d+"px"
        }
    };

g.determinePlayfieldDimensions=function(){
    g.playfieldWidth=0;
    g.playfieldHeight=0;
    for(var b in n){
        var c=n[b];
        if(c.w){
            c=c.x+c.w-1;
            if(c>g.playfieldWidth)g.playfieldWidth=c
                }else{
            c=c.y+c.h-1;
            if(c>g.playfieldHeight)g.playfieldHeight=c
                }
            }
    };
g.preparePlayfield=function(){
    g.playfield=[];
    for(var b=0;b<=g.playfieldHeight+1;b++){
        g.playfield[b*8]=[];
        for(var c=-2;c<=g.playfieldWidth+1;c++)g.playfield[b*8][c*8]={
            path:0,
            dot:0,
            intersection:0
        }
        }
    };
g.preparePaths=function(){
    for(var b in n){
        var c=n[b],d=c.type;
        if(c.w){
            for(var f=c.y*8,h=c.x*8;h<=(c.x+c.w-1)*8;h+=8){
                g.playfield[f][h].path=a;
                if(g.playfield[f][h].dot==0){
                    g.playfield[f][h].dot=1;
                    g.dotsRemaining++
                }
                g.playfield[f][h].type=!d||h!=c.x*8&&h!=(c.x+c.w-1)*8?d:0
                }
                g.playfield[f][c.x*8].intersection=a;
            g.playfield[f][(c.x+c.w-1)*8].intersection=a
            }else{
            h=c.x*8;
            for(f=c.y*8;f<=(c.y+c.h-1)*8;f+=8){
                if(g.playfield[f][h].path)g.playfield[f][h].intersection=a;
                g.playfield[f][h].path=a;
                if(g.playfield[f][h].dot==
                    0){
                    g.playfield[f][h].dot=1;
                    g.dotsRemaining++
                }
                g.playfield[f][h].type=!d||f!=c.y*8&&f!=(c.y+c.h-1)*8?d:0
                }
                g.playfield[c.y*8][h].intersection=a;
            g.playfield[(c.y+c.h-1)*8][h].intersection=a
            }
        }
    for(b in o)if(o[b].w)for(h=o[b].x*8;h<=(o[b].x+o[b].w-1)*8;h+=8){
    g.playfield[o[b].y*8][h].dot=0;
    g.dotsRemaining--
}else for(f=o[b].y*8;f<=(o[b].y+o[b].h-1)*8;f+=8){
    g.playfield[f][o[b].x*8].dot=0;
    g.dotsRemaining--
}
};
g.prepareAllowedDirections=function(){
    for(var b=8;b<=g.playfieldHeight*8;b+=8)for(var c=8;c<=g.playfieldWidth*8;c+=8){
        g.playfield[b][c].allowedDir=0;
        if(g.playfield[b-8][c].path)g.playfield[b][c].allowedDir+=1;
        if(g.playfield[b+8][c].path)g.playfield[b][c].allowedDir+=2;
        if(g.playfield[b][c-8].path)g.playfield[b][c].allowedDir+=4;
        if(g.playfield[b][c+8].path)g.playfield[b][c].allowedDir+=8
            }
        };
g.createDotElements=function(){
    for(var b=8;b<=g.playfieldHeight*8;b+=8)for(var c=8;c<=g.playfieldWidth*8;c+=8)if(g.playfield[b][c].dot){
        var d=document.createElement("div");
        d.className="pcm-d";
        d.id=g.getDotElementId(b,c);
        d.style.left=c+-32+"px";
        d.style.top=b+0+"px";
        g.playfieldEl.appendChild(d)
        }
    };
g.createEnergizerElements=function(){
    for(var b in p){
        var c=p[b],d=g.getDotElementId(c.y*8,c.x*8);
        document.getElementById(d).className="pcm-e";
        g.prepareElement(document.getElementById(d),0,144);
        g.playfield[c.y*8][c.x*8].dot=2
        }
    };

g.createFruitElement=function(){
    g.fruitEl=document.createElement("div");
    g.fruitEl.id="pcm-f";
    g.fruitEl.style.left=g.getPlayfieldX(v[1])+"px";
    g.fruitEl.style.top=g.getPlayfieldY(v[0])+"px";
    g.prepareElement(g.fruitEl,-32,-16);
    g.playfieldEl.appendChild(g.fruitEl)
    };
g.createPlayfieldElements=function(){
    g.doorEl=document.createElement("div");
    g.doorEl.id="pcm-do";
    g.doorEl.style.display="none";
    g.playfieldEl.appendChild(g.doorEl);
    g.createDotElements();
    g.createEnergizerElements();
    g.createFruitElement()
    };

g.createActors=function(){
    g.actors=[];
    for(var b=0;b<g.playerCount+4;b++){
        g.actors[b]=new E(b);
        if(b<g.playerCount){
            g.actors[b].ghost=e;
            g.actors[b].mode=1
            }else g.actors[b].ghost=a
            }
        };

g.restartActors=function(){
    for(var b in g.actors)g.actors[b].A()
        };
g.createActorElements=function(){
    for(var b in g.actors)g.actors[b].createElement()
        };

g.createPlayfield=function(){
    g.playfieldEl=document.createElement("div");
    g.playfieldEl.id="pcm-p";
    g.canvasEl.appendChild(g.playfieldEl)
    };

g.resetPlayfield=function(){
    g.dotsRemaining=0;
    g.dotsEaten=0;
    g.playfieldEl.innerHTML="";
    g.prepareElement(g.playfieldEl,256,0);
    g.determinePlayfieldDimensions();
    g.preparePlayfield();
    g.preparePaths();
    g.prepareAllowedDirections();
    g.createPlayfieldElements();
    g.createActorElements()
    };
g.keyPressed=function(b){
    var c=e;
    switch(b){
        case 37:
            g.actors[0].requestedDir=4;
            c=a;
            break;
        case 38:
            g.actors[0].requestedDir=1;
            c=a;
            break;
        case 39:
            g.actors[0].requestedDir=8;
            c=a;
            break;
        case 40:
            g.actors[0].requestedDir=2;
            c=a;
            break;
        case 65:
            if(g.playerCount==2){
            g.actors[1].requestedDir=4;
            c=a
            }
            break;
        case 83:
            if(g.playerCount==2){
            g.actors[1].requestedDir=2;
            c=a
            }
            break;
        case 68:
            if(g.playerCount==2){
            g.actors[1].requestedDir=8;
            c=a
            }
            break;
        case 87:
            if(g.playerCount==2){
            g.actors[1].requestedDir=1;
            c=a
            }
            break
        }
        return c
    };
g.handleKeyDown=function(b){
    if(!b)b=window.event;
    if(g.keyPressed(b.keyCode))if(b.preventDefault)b.preventDefault();else b.returnValue=e
        };

g.canvasClicked=function(b,c){
    var d=g.getAbsoluteElPos(g.canvasEl);
    b-=d[1]- -32;
    c-=d[0]-0;
    d=g.actors[0];
    var f=g.getPlayfieldX(d.pos[1]+d.posDelta[1])+16,h=g.getPlayfieldY(d.pos[0]+d.posDelta[0])+32,j=Math.abs(b-f),k=Math.abs(c-h);
    if(j>8&&k<j)d.requestedDir=b>f?8:4;
    else if(k>8&&j<k)d.requestedDir=c>h?2:1
        };
g.handleClick=function(b){
    if(!b)b=window.event;
    g.canvasClicked(b.clientX,b.clientY)
    };

g.registerTouch=function(){
    document.body.addEventListener("touchstart",g.handleTouchStart,a);
    g.canvasEl.addEventListener("touchstart",g.handleTouchStart,a);
    document.f&&document.f.q&&document.f.q.addEventListener("touchstart",g.handleTouchStart,a)
    };
g.handleTouchStart=function(b){
    g.touchDX=0;
    g.touchDY=0;
    if(b.touches.length==1){
        g.touchStartX=b.touches[0].pageX;
        g.touchStartY=b.touches[0].pageY;
        document.body.addEventListener("touchmove",g.handleTouchMove,a);
        document.body.addEventListener("touchend",g.handleTouchEnd,a)
        }
        b.preventDefault();
    b.stopPropagation()
    };

g.handleTouchMove=function(b){
    if(b.touches.length>1)g.cancelTouch();
    else{
        g.touchDX=b.touches[0].pageX-g.touchStartX;
        g.touchDY=b.touches[0].pageY-g.touchStartY
        }
        b.preventDefault();
    b.stopPropagation()
    };
g.handleTouchEnd=function(b){
    if(g.touchDX==0&&g.touchDY==0)g.canvasClicked(g.touchStartX,g.touchStartY);
    else{
        var c=Math.abs(g.touchDX),d=Math.abs(g.touchDY);
        if(c<8&&d<8)g.canvasClicked(g.touchStartX,g.touchStartY);
        else if(c>15&&d<c*2/3)g.actors[0].requestedDir=g.touchDX>0?8:4;
        else if(d>15&&c<d*2/3)g.actors[0].requestedDir=g.touchDY>0?2:1
            }
            b.preventDefault();
    b.stopPropagation();
    g.cancelTouch()
    };
g.cancelTouch=function(){
    document.body.removeEventListener("touchmove",g.handleTouchMove,a);
    document.body.removeEventListener("touchend",g.handleTouchEnd,a);
    g.touchStartX=null;
    g.touchStartY=null
    };

g.addEventListeners=function(){
    if(window.addEventListener){
        window.addEventListener("keydown",g.handleKeyDown,e);
        g.canvasEl.addEventListener("click",g.handleClick,e);
        g.registerTouch()
        }else{
        document.body.attachEvent("onkeydown",g.handleKeyDown);
        g.canvasEl.attachEvent("onclick",g.handleClick)
        }
    };
g.startGameplay=function(){
    g.score=[0,0];
    g.extraLifeAwarded=[e,e];
    g.lives=3;
    g.level=0;
    g.paused=e;
    g.globalTime=0;
    g.newLevel(a)
    };
g.restartGameplay=function(b){
    g.seed(0);
    g.frightModeTime=0;
    g.intervalTime=0;
    g.gameplayModeTime=0;
    g.fruitTime=0;
    g.ghostModeSwitchPos=0;
    g.ghostModeTime=g.levels.ghostModeSwitchTimes[0]*D;
    g.ghostExitingPenNow=e;
    g.ghostEyesCount=0;
    g.tilesChanged=e;
    g.updateCruiseElroySpeed();
    g.hideFruit();
    g.resetForcePenLeaveTime();
    g.restartActors();
    g.updateActorPositions();
    g.switchMainGhostMode(2,a);
    for(var c=g.playerCount+1;c<g.playerCount+4;c++)g.actors[c].a(16);
    g.dotEatingChannel=[0,0];
    g.dotEatingSoundPart=[1,1];
    g.clearDotEatingNow();
    b?g.changeGameplayMode(4):g.changeGameplayMode(6)
    };

g.initiateDoubleMode=function(){
    if(g.playerCount!=2){
        g.stopAllAudio();
        g.changeGameplayMode(12)
        }
    };

g.newGame=function(){
    g.playerCount=1;
    g.createChrome();
    g.createPlayfield();
    g.createActors();
    g.startGameplay()
    };

g.switchToDoubleMode=function(){
    g.playerCount=2;
    g.createChrome();
    g.createPlayfield();
    g.createActors();
    g.startGameplay()
    };

g.insertCoin=function(){
    g.gameplayMode==8||g.gameplayMode==14?g.newGame():g.initiateDoubleMode()
    };
g.createKillScreenElement=function(b,c,d,f,h){
    var j=document.createElement("div");
    j.style.left=b+"px";
    j.style.top=c+"px";
    j.style.width=d+"px";
    j.style.height=f+"px";
    j.style.zIndex=119;
    if(h){
        j.style.background="url(/logos/pacman10-hp-sprite.png) -"+g.killScreenTileX+"px -"+g.killScreenTileY+"px no-repeat";
        g.killScreenTileY+=8
        }else j.style.background="black";
    g.playfieldEl.appendChild(j)
    };
g.killScreen=function(){
    g.seed(0);
    g.canvasEl.style.visibility="";
    g.createKillScreenElement(272,0,200,80,e);
    g.createKillScreenElement(280,80,192,56,e);
    g.killScreenTileX=80;
    g.killScreenTileY=0;
    for(var b=280;b<=472;b+=8)for(var c=0;c<=136;c+=8){
        if(g.rand()<0.03){
            g.killScreenTileX=Math.floor(g.rand()*25)*10;
            g.killScreenTileY=Math.floor(g.rand()*2)*10
            }
            g.createKillScreenElement(b,c,8,8,a)
        }
        g.changeGameplayMode(14)
    };
g.newLevel=function(b){
    g.level++;
    g.levels=g.level>=z.length?z[z.length-1]:z[g.level];
    g.levels.frightTime=Math.round(g.levels.frightTime*D);
    g.levels.frightTotalTime=g.levels.frightTime+g.timing[1]*(g.levels.frightBlinkCount*2-1);
    for(var c in g.actors)g.actors[c].dotCount=0;g.alternatePenLeavingScheme=e;
    g.lostLifeOnThisLevel=e;
    g.updateChrome();
    g.resetPlayfield();
    g.restartGameplay(b);
    g.level==256&&g.killScreen()
    };
g.newLife=function(){
    g.lostLifeOnThisLevel=a;
    g.alternatePenLeavingScheme=a;
    g.alternateDotCount=0;
    g.lives--;
    g.updateChromeLives();
    g.lives==-1?g.changeGameplayMode(8):g.restartGameplay(e)
    };
g.switchMainGhostMode=function(b,c){
    if(b==4&&g.levels.frightTime==0)for(var d in g.actors){
        var f=g.actors[d];
        if(f.ghost)f.reverseDirectionsNext=a
            }else{
        f=g.mainGhostMode;
        if(b==4&&g.mainGhostMode!=4)g.lastMainGhostMode=g.mainGhostMode;
        g.mainGhostMode=b;
        if(b==4||f==4)g.playAmbientSound();
        switch(b){
            case 1:case 2:
                g.currentPlayerSpeed=g.levels.playerSpeed*0.8;
                g.currentDotEatingSpeed=g.levels.dotEatingSpeed*0.8;
                break;
            case 4:
                g.currentPlayerSpeed=g.levels.playerFrightSpeed*0.8;
                g.currentDotEatingSpeed=g.levels.dotEatingFrightSpeed*
                0.8;
                g.frightModeTime=g.levels.frightTotalTime;
                g.modeScoreMultiplier=1;
                break
                }
                for(d in g.actors){
            f=g.actors[d];
            if(f.ghost){
                if(b!=64&&!c)f.modeChangedWhileInPen=a;
                if(b==4)f.eatenInThisFrightMode=e;
                if(f.mode!=8&&f.mode!=16&&f.mode!=32&&f.mode!=128&&f.mode!=64||c){
                    if(!c&&f.mode!=4&&f.mode!=b)f.reverseDirectionsNext=a;
                    f.a(b)
                    }
                }else{
            f.fullSpeed=g.currentPlayerSpeed;
            f.dotEatingSpeed=g.currentDotEatingSpeed;
            f.tunnelSpeed=g.currentPlayerSpeed;
            f.d()
            }
        }
        }
};
g.figureOutPenLeaving=function(){
    if(g.alternatePenLeavingScheme){
        g.alternateDotCount++;
        switch(g.alternateDotCount){
            case m[1]:
                g.actors[g.playerCount+1].freeToLeavePen=a;
                break;
            case m[2]:
                g.actors[g.playerCount+2].freeToLeavePen=a;
                break;
            case m[3]:
                if(g.actors[g.playerCount+3].mode==16)g.alternatePenLeavingScheme=e;
                break
                }
            }else if(g.actors[g.playerCount+1].mode==16||g.actors[g.playerCount+1].mode==8){
    g.actors[g.playerCount+1].dotCount++;
    if(g.actors[g.playerCount+1].dotCount>=g.levels.penLeavingLimits[1])g.actors[g.playerCount+
        1].freeToLeavePen=a
        }else if(g.actors[g.playerCount+2].mode==16||g.actors[g.playerCount+2].mode==8){
    g.actors[g.playerCount+2].dotCount++;
    if(g.actors[g.playerCount+2].dotCount>=g.levels.penLeavingLimits[2])g.actors[g.playerCount+2].freeToLeavePen=a
        }else if(g.actors[g.playerCount+3].mode==16||g.actors[g.playerCount+3].mode==8){
    g.actors[g.playerCount+3].dotCount++;
    if(g.actors[g.playerCount+3].dotCount>=g.levels.penLeavingLimits[3])g.actors[g.playerCount+3].freeToLeavePen=a
        }
    };
g.resetForcePenLeaveTime=function(){
    g.forcePenLeaveTime=g.levels.penForceTime*D
    };
g.dotEaten=function(b,c){
    g.dotsRemaining--;
    g.dotsEaten++;
    g.actors[b].c(1);
    g.playDotEatingSound(b);
    if(g.playfield[c[0]][c[1]].dot==2){
        g.switchMainGhostMode(4,e);
        g.addToScore(50,b)
        }else g.addToScore(10,b);
    var d=document.getElementById(g.getDotElementId(c[0],c[1]));
    d.style.display="none";
    g.playfield[c[0]][c[1]].dot=0;
    g.updateCruiseElroySpeed();
    g.resetForcePenLeaveTime();
    g.figureOutPenLeaving();
    if(g.dotsEaten==70||g.dotsEaten==170)g.showFruit();
    g.dotsRemaining==0&&g.finishLevel();
    g.playAmbientSound()
    };
g.getFruitSprite=function(b){
    var c=b<=4?128:160;
    b=128+16*((b-1)%4);
    return[c,b]
    };

g.getFruitScoreSprite=function(b){
    var c=128;
    b=16*(b-1);
    return[c,b]
    };

g.hideFruit=function(){
    g.fruitShown=e;
    g.changeElementBkPos(g.fruitEl,32,16,a)
    };

g.showFruit=function(){
    g.fruitShown=a;
    var b=g.getFruitSprite(g.levels.fruit);
    g.changeElementBkPos(g.fruitEl,b[0],b[1],a);
    g.fruitTime=g.timing[15]+(g.timing[16]-g.timing[15])*g.rand()
    };
g.eatFruit=function(b){
    if(g.fruitShown){
        g.playSound("fruit",0);
        g.fruitShown=e;
        var c=g.getFruitScoreSprite(g.levels.fruit);
        g.changeElementBkPos(g.fruitEl,c[0],c[1],a);
        g.fruitTime=g.timing[14];
        g.addToScore(g.levels.fruitScore,b)
        }
    };

g.updateActorTargetPositions=function(){
    for(var b=g.playerCount;b<g.playerCount+4;b++)g.actors[b].B()
        };

g.moveActors=function(){
    for(var b in g.actors)g.actors[b].move()
        };
g.ghostDies=function(b,c){
    g.playSound("eating-ghost",0);
    g.addToScore(200*g.modeScoreMultiplier,c);
    g.modeScoreMultiplier*=2;
    g.ghostBeingEatenId=b;
    g.playerEatingGhostId=c;
    g.changeGameplayMode(1)
    };

g.playerDies=function(b){
    g.playerDyingId=b;
    g.changeGameplayMode(2)
    };
g.detectCollisions=function(){
    g.tilesChanged=e;
    for(var b=g.playerCount;b<g.playerCount+4;b++)for(var c=0;c<g.playerCount;c++)if(g.actors[b].tilePos[0]==g.actors[c].tilePos[0]&&g.actors[b].tilePos[1]==g.actors[c].tilePos[1])if(g.actors[b].mode==4){
        g.ghostDies(b,c);
        return
    }else g.actors[b].mode!=8&&g.actors[b].mode!=16&&g.actors[b].mode!=32&&g.actors[b].mode!=128&&g.actors[b].mode!=64&&g.playerDies(c)
        };
g.updateCruiseElroySpeed=function(){
    var b=g.levels.ghostSpeed*0.8;
    if(!g.lostLifeOnThisLevel||g.actors[g.playerCount+3].mode!=16){
        var c=g.levels;
        if(g.dotsRemaining<c.elroyDotsLeftPart2)b=c.elroySpeedPart2*0.8;
        else if(g.dotsRemaining<c.elroyDotsLeftPart1)b=c.elroySpeedPart1*0.8
            }
            if(b!=g.cruiseElroySpeed){
        g.cruiseElroySpeed=b;
        g.actors[g.playerCount].d()
        }
    };
g.getSpeedIntervals=function(b){
    if(!g.speedIntervals[b]){
        var c=0,d=0;
        g.speedIntervals[b]=[];
        for(var f=0;f<D;f++){
            c+=b;
            if(Math.floor(c)>d){
                g.speedIntervals[b].push(a);
                d=Math.floor(c)
                }else g.speedIntervals[b].push(e)
                }
            }
        return g.speedIntervals[b]
};

g.finishLevel=function(){
    g.changeGameplayMode(9)
    };
g.changeGameplayMode=function(b){
    g.gameplayMode=b;
    if(b!=13)for(var c=0;c<g.playerCount+4;c++)g.actors[c].b();
    switch(b){
        case 0:
            g.playAmbientSound();
            break;
        case 2:
            g.stopAllAudio();
            g.gameplayModeTime=g.timing[3];
            break;
        case 3:
            g.playerDyingId==0?g.playSound("death",0):g.playSound("death-double",0);
            g.gameplayModeTime=g.timing[4];
            break;
        case 6:
            g.canvasEl.style.visibility="hidden";
            g.gameplayModeTime=g.timing[5];
            break;
        case 7:
            g.stopAllAudio();
            g.canvasEl.style.visibility="";
            g.doorEl.style.display="block";
            b=document.createElement("div");
            b.id="pcm-re";
            g.prepareElement(b,160,0);
            g.playfieldEl.appendChild(b);
            g.gameplayModeTime=g.timing[6];
            break;
        case 4:
            g.doorEl.style.display="block";
            b=document.createElement("div");
            b.id="pcm-re";
            g.prepareElement(b,160,0);
            g.playfieldEl.appendChild(b);
            g.gameplayModeTime=g.timing[7];
            g.stopAllAudio();
            g.playerCount==2?g.playSound("start-music-double",0,a):g.playSound("start-music",0,a);
            break;
        case 5:
            g.lives--;
            g.updateChromeLives();
            g.gameplayModeTime=g.timing[8];
            break;
        case 8:case 14:
            b=document.getElementById("pcm-re");
            google.dom.remove(b);
            g.stopAllAudio();
            b=document.createElement("div");
            b.id="pcm-go";
            g.prepareElement(b,8,152);
            g.playfieldEl.appendChild(b);
            g.gameplayModeTime=g.timing[9];
            break;
        case 9:
            g.stopAllAudio();
            g.gameplayModeTime=g.timing[10];
            break;
        case 10:
            g.doorEl.style.display="none";
            g.gameplayModeTime=g.timing[11];
            break;
        case 11:
            g.canvasEl.style.visibility="hidden";
            g.gameplayModeTime=g.timing[12];
            break;
        case 12:
            g.playfieldEl.style.visibility="hidden";
            g.gameplayModeTime=g.timing[13];
            break;
        case 1:
            g.gameplayModeTime=
            g.timing[2];
            break;
        case 13:
            g.startCutscene();
            break
            }
        };

g.showChrome=function(b){
    g.showElementById("pcm-sc-1-l",b);
    g.showElementById("pcm-sc-2-l",b);
    g.showElementById("pcm-sc-1",b);
    g.showElementById("pcm-sc-2",b);
    g.showElementById("pcm-li",b);
    g.showElementById("pcm-so",b)
    };
g.startCutscene=function(){
    g.playfieldEl.style.visibility="hidden";
    g.canvasEl.style.visibility="";
    g.showChrome(e);
    g.cutsceneCanvasEl=document.createElement("div");
    g.cutsceneCanvasEl.id="pcm-cc";
    g.canvasEl.appendChild(g.cutsceneCanvasEl);
    g.cutscene=B[g.cutsceneId];
    g.cutsceneSequenceId=-1;
    g.frightModeTime=g.levels.frightTotalTime;
    g.cutsceneActors=[];
    for(var b in g.cutscene.actors){
        var c=g.cutscene.actors[b].id;
        if(c>0)c+=g.playerCount-1;
        var d=document.createElement("div");
        d.className="pcm-ac";
        d.id="actor"+
        c;
        g.prepareElement(d,0,0);
        c=new E(c);
        c.el=d;
        c.elBackgroundPos=[0,0];
        c.elPos=[0,0];
        c.pos=[g.cutscene.actors[b].y*8,g.cutscene.actors[b].x*8];
        c.posDelta=[0,0];
        c.ghost=g.cutscene.actors[b].ghost;
        g.cutsceneCanvasEl.appendChild(d);
        g.cutsceneActors.push(c)
        }
        g.cutsceneNextSequence();
    g.stopAllAudio();
    g.playAmbientSound()
    };

g.stopCutscene=function(){
    g.playfieldEl.style.visibility="";
    google.dom.remove(g.cutsceneCanvasEl);
    g.showChrome(a);
    g.newLevel(e)
    };
g.cutsceneNextSequence=function(){
    g.cutsceneSequenceId++;
    if(g.cutscene.sequence.length==g.cutsceneSequenceId)g.stopCutscene();
    else{
        var b=g.cutscene.sequence[g.cutsceneSequenceId];
        g.cutsceneTime=b.time*D;
        for(var c in g.cutsceneActors){
            var d=g.cutsceneActors[c];
            d.dir=b.moves[c].dir;
            d.speed=b.moves[c].speed;
            if(b.moves[c].elId)d.el.id=b.moves[c].elId;
            if(b.moves[c].mode)d.mode=b.moves[c].mode;
            d.b()
            }
        }
        };

g.checkCutscene=function(){
    g.cutsceneTime<=0&&g.cutsceneNextSequence()
    };
g.advanceCutscene=function(){
    for(var b in g.cutsceneActors){
        var c=g.cutsceneActors[b],d=l[c.dir];
        c.pos[d.axis]+=d.increment*c.speed;
        c.b()
        }
        g.cutsceneTime--
};

g.updateActorPositions=function(){
    for(var b in g.actors)g.actors[b].k()
        };
g.blinkEnergizers=function(){
    switch(g.gameplayMode){
        case 4:case 5:case 6:case 7:case 9:case 10:case 11:case 12:
            g.playfieldEl.className="";
            break;
        case 8:case 14:
            g.playfieldEl.className="blk";
            break;
        default:
            if(g.globalTime%(g.timing[0]*2)==0)g.playfieldEl.className="";
            else if(g.globalTime%(g.timing[0]*2)==g.timing[0])g.playfieldEl.className="blk";
            break
            }
        };
g.blinkScoreLabels=function(){
    if(g.gameplayMode!=13){
        var b="";
        if(g.globalTime%(g.timing[17]*2)==0)b="visible";
        else if(g.globalTime%(g.timing[17]*2)==g.timing[17])b="hidden";
        if(b)for(var c=0;c<g.playerCount;c++)g.scoreLabelEl[c].style.visibility=b
            }
        };

g.finishFrightMode=function(){
    g.switchMainGhostMode(g.lastMainGhostMode,e)
    };
g.handleGameplayModeTimer=function(){
    if(g.gameplayModeTime){
        g.gameplayModeTime--;
        switch(g.gameplayMode){
            case 2:case 3:
                for(var b=0;b<g.playerCount+4;b++)g.actors[b].b();
                break;
            case 10:
                Math.floor(g.gameplayModeTime/(g.timing[11]/8))%2==0?g.changeElementBkPos(g.playfieldEl,322,2,e):g.changeElementBkPos(g.playfieldEl,322,138,e)
                }
                if(g.gameplayModeTime<=0){
            g.gameplayModeTime=0;
            switch(g.gameplayMode){
                case 1:
                    g.changeGameplayMode(0);
                    g.ghostEyesCount++;
                    g.playAmbientSound();
                    g.actors[g.ghostBeingEatenId].el.className=
                    "pcm-ac";
                    g.actors[g.ghostBeingEatenId].a(8);
                    var c=e;
                    for(b=g.playerCount;b<g.playerCount+4;b++)if(g.actors[b].mode==4||(g.actors[b].mode==16||g.actors[b].mode==128)&&!g.actors[b].eatenInThisFrightMode){
                        c=a;
                        break
                    }
                    c||g.finishFrightMode();
                    break;
                case 2:
                    g.changeGameplayMode(3);
                    break;
                case 3:
                    g.newLife();
                    break;
                case 4:
                    g.changeGameplayMode(5);
                    break;
                case 6:
                    g.changeGameplayMode(7);
                    break;
                case 7:case 5:
                    b=document.getElementById("pcm-re");
                    google.dom.remove(b);
                    g.changeGameplayMode(0);
                    break;
                case 8:
                    b=document.getElementById("pcm-go");
                    google.dom.remove(b);
                    google.pacManQuery&&google.pacManQuery();
                    break;
                case 9:
                    g.changeGameplayMode(10);
                    break;
                case 10:
                    g.changeGameplayMode(11);
                    break;
                case 11:
                    if(g.levels.cutsceneId){
                    g.cutsceneId=g.levels.cutsceneId;
                    g.changeGameplayMode(13)
                    }else{
                    g.canvasEl.style.visibility="";
                    g.newLevel(e)
                    }
                    break;
                case 12:
                    g.playfieldEl.style.visibility="";
                    g.canvasEl.style.visibility="";
                    g.switchToDoubleMode();
                    break
                    }
                }
    }
};

g.handleFruitTimer=function(){
    if(g.fruitTime){
        g.fruitTime--;
        g.fruitTime<=0&&g.hideFruit()
        }
    };
g.handleGhostModeTimer=function(){
    if(g.frightModeTime){
        g.frightModeTime--;
        if(g.frightModeTime<=0){
            g.frightModeTime=0;
            g.finishFrightMode()
            }
        }else if(g.ghostModeTime>0){
    g.ghostModeTime--;
    if(g.ghostModeTime<=0){
        g.ghostModeTime=0;
        g.ghostModeSwitchPos++;
        if(g.levels.ghostModeSwitchTimes[g.ghostModeSwitchPos]){
            g.ghostModeTime=g.levels.ghostModeSwitchTimes[g.ghostModeSwitchPos]*D;
            switch(g.mainGhostMode){
                case 2:
                    g.switchMainGhostMode(1,e);
                    break;
                case 1:
                    g.switchMainGhostMode(2,e);
                    break
                    }
                }
    }
}
};
g.handleForcePenLeaveTimer=function(){
    if(g.forcePenLeaveTime){
        g.forcePenLeaveTime--;
        if(g.forcePenLeaveTime<=0){
            for(var b=1;b<=3;b++)if(g.actors[g.playerCount+b].mode==16){
                g.actors[g.playerCount+b].freeToLeavePen=a;
                break
            }
            g.resetForcePenLeaveTime()
            }
        }
};

g.handleTimers=function(){
    if(g.gameplayMode==0){
        g.handleForcePenLeaveTimer();
        g.handleFruitTimer();
        g.handleGhostModeTimer()
        }
        g.handleGameplayModeTimer()
    };
g.tick=function(){
    var b=(new Date).getTime();
    g.lastTimeDelta+=b-g.lastTime-g.tickInterval;
    if(g.lastTimeDelta>100)g.lastTimeDelta=100;
    if(g.canDecreaseFps&&g.lastTimeDelta>50){
        g.lastTimeSlownessCount++;
        g.lastTimeSlownessCount==20&&g.decreaseFps()
        }
        var c=0;
    if(g.lastTimeDelta>g.tickInterval){
        c=Math.floor(g.lastTimeDelta/g.tickInterval);
        g.lastTimeDelta-=g.tickInterval*c
        }
        g.lastTime=b;
    if(g.gameplayMode==13){
        for(b=0;b<g.tickMultiplier+c;b++){
            g.advanceCutscene();
            g.intervalTime=(g.intervalTime+1)%D;
            g.globalTime++
        }
        g.checkCutscene();
        g.blinkScoreLabels()
        }else for(b=0;b<g.tickMultiplier+c;b++){
        g.moveActors();
        if(g.gameplayMode==0)if(g.tilesChanged){
            g.detectCollisions();
            g.updateActorTargetPositions()
            }
            g.globalTime++;
        g.intervalTime=(g.intervalTime+1)%D;
        g.blinkEnergizers();
        g.blinkScoreLabels();
        g.handleTimers()
        }
    };

g.extraLife=function(b){
    g.playSound("extra-life",0);
    g.extraLifeAwarded[b]=a;
    g.lives++;
    if(g.lives>5)g.lives=5;
    g.updateChromeLives()
    };
g.addToScore=function(b,c){
    g.score[c]+=b;
    !g.extraLifeAwarded[c]&&g.score[c]>1E4&&g.extraLife(c);
    g.updateChromeScore(c)
    };

g.updateChrome=function(){
    g.updateChromeLevel();
    g.updateChromeLives();
    for(var b=0;b<g.playerCount;b++)g.updateChromeScore(b)
        };
g.updateChromeScore=function(b){
    var c=g.score[b].toString();
    if(c.length>g.scoreDigits)c=c.substr(c.length-g.scoreDigits,g.scoreDigits);
    for(var d=0;d<g.scoreDigits;d++){
        var f=document.getElementById("pcm-sc-"+(b+1)+"-"+d),h=c.substr(d,1);
        h?g.changeElementBkPos(f,8+8*parseInt(h,10),144,a):g.changeElementBkPos(f,48,0,a)
        }
    };

g.updateChromeLives=function(){
    g.livesEl.innerHTML="";
    for(var b=0;b<g.lives;b++){
        var c=document.createElement("div");
        c.className="pcm-lif";
        g.prepareElement(c,64,129);
        g.livesEl.appendChild(c)
        }
    };
g.updateChromeLevel=function(){
    g.levelEl.innerHTML="";
    for(var b=g.level;b>=Math.max(g.level-4+1,1);b--){
        var c=b>=z.length?z[z.length-1].fruit:z[b].fruit,d=document.createElement("div");
        c=g.getFruitSprite(c);
        g.prepareElement(d,c[0],c[1]);
        g.levelEl.appendChild(d)
        }
        g.levelEl.style.marginTop=(4-Math.min(g.level,4))*16+"px"
    };
g.createChrome=function(){
    g.canvasEl.innerHTML="";
    g.scoreDigits=g.playerCount==1?10:5;
    g.scoreLabelEl=[];
    g.scoreLabelEl[0]=document.createElement("div");
    g.scoreLabelEl[0].id="pcm-sc-1-l";
    g.prepareElement(g.scoreLabelEl[0],160,56);
    g.canvasEl.appendChild(g.scoreLabelEl[0]);
    g.scoreEl=[];
    g.scoreEl[0]=document.createElement("div");
    g.scoreEl[0].id="pcm-sc-1";
    for(var b=0;b<g.scoreDigits;b++){
        var c=document.createElement("div");
        c.id="pcm-sc-1-"+b;
        c.style.top=b*8+"px";
        c.style.left=0;
        c.style.position="absolute";
        c.style.width="8px";
        c.style.height="8px";
        g.prepareElement(c,48,0);
        g.scoreEl[0].appendChild(c)
        }
        g.canvasEl.appendChild(g.scoreEl[0]);
    g.livesEl=document.createElement("div");
    g.livesEl.id="pcm-li";
    g.canvasEl.appendChild(g.livesEl);
    g.levelEl=document.createElement("div");
    g.levelEl.id="pcm-le";
    g.canvasEl.appendChild(g.levelEl);
    if(g.playerCount==2){
        g.scoreLabelEl[1]=document.createElement("div");
        g.scoreLabelEl[1].id="pcm-sc-2-l";
        g.prepareElement(g.scoreLabelEl[1],160,64);
        g.canvasEl.appendChild(g.scoreLabelEl[1]);
        g.scoreEl[1]=document.createElement("div");
        g.scoreEl[1].id="pcm-sc-2";
        for(b=0;b<g.scoreDigits;b++){
            c=document.createElement("div");
            c.id="pcm-sc-2-"+b;
            c.style.top=b*8+"px";
            c.style.left=0;
            c.style.position="absolute";
            c.style.width="8px";
            c.style.height="8px";
            g.prepareElement(c,48,0);
            g.scoreEl[1].appendChild(c)
            }
            g.canvasEl.appendChild(g.scoreEl[1])
        }
    };

g.clearDotEatingNow=function(){
    g.dotEatingNow=[e,e];
    g.dotEatingNext=[e,e]
    };
g.playSound=function(b,c,d){
    if(!(!g.soundAvailable||!g.soundEnabled||g.paused)){
        d||g.stopSoundChannel(c);
        try{
            g.flashSoundPlayer.playTrack(b,c)
            }catch(f){
            g.soundAvailable=e
            }
        }
};

g.stopSoundChannel=function(b){
    if(g.soundAvailable&&g.soundEnabled)try{
        g.flashSoundPlayer.stopChannel(b)
        }catch(c){
        g.soundAvailable=e
        }
    };

g.stopAllAudio=function(){
    if(g.soundAvailable&&g.soundEnabled){
        try{
            g.flashSoundPlayer.stopAmbientTrack()
            }catch(b){
            g.soundAvailable=e
            }
            for(var c=0;c<5;c++)g.stopSoundChannel(c)
            }
        };
g.playDotEatingSound=function(b){
    if(g.soundAvailable&&g.soundEnabled)if(g.gameplayMode==0)if(g.dotEatingNow[b])g.dotEatingNext[b]=a;
        else{
        if(b==0){
            var c=g.dotEatingSoundPart[b]==1?"eating-dot-1":"eating-dot-2";
            g.playSound(c,1+g.dotEatingChannel[b],a);
            g.dotTimer=window.setInterval(g.repeatDotEatingSoundPacMan,150)
            }else{
            g.playSound("eating-dot-double",3+g.dotEatingChannel[b],a);
            g.dotTimerMs=window.setInterval(g.repeatDotEatingSoundMsPacMan,150)
            }
            g.dotEatingChannel[b]=(g.dotEatingChannel[b]+1)%2;
        g.dotEatingSoundPart[b]=
        3-g.dotEatingSoundPart[b]
        }
    };

g.repeatDotEatingSound=function(b){
    g.dotEatingNow[b]=e;
    if(g.dotEatingNext[b]){
        g.dotEatingNext[b]=e;
        g.playDotEatingSound(b)
        }
    };

g.repeatDotEatingSoundPacMan=function(){
    g.repeatDotEatingSound(0)
    };

g.repeatDotEatingSoundMsPacMan=function(){
    g.repeatDotEatingSound(1)
    };
g.playAmbientSound=function(){
    if(g.soundAvailable&&g.soundEnabled){
        var b=0;
        if(g.gameplayMode==0||g.gameplayMode==1)b=g.ghostEyesCount?"ambient-eyes":g.mainGhostMode==4?"ambient-fright":g.dotsEaten>241?"ambient-4":g.dotsEaten>207?"ambient-3":g.dotsEaten>138?"ambient-2":"ambient-1";
        else if(g.gameplayMode==13)b="cutscene";
        if(b)try{
            g.flashSoundPlayer.playAmbientTrack(b)
            }catch(c){
            g.soundAvailable=e
            }
        }
    };
g.initializeTickTimer=function(){
    window.clearInterval(g.tickTimer);
    g.fps=C[g.fpsChoice];
    g.tickInterval=1E3/g.fps;
    g.tickMultiplier=D/g.fps;
    g.timing={};

    for(var b in w){
        var c=!g.soundEnabled&&(b==7||b==8)?1:w[b];
        g.timing[b]=Math.round(c*D)
        }
        g.lastTime=(new Date).getTime();
    g.lastTimeDelta=0;
    g.lastTimeSlownessCount=0;
    g.tickTimer=window.setInterval(g.tick,g.tickInterval)
    };
g.decreaseFps=function(){
    if(g.fpsChoice<C.length-1){
        g.fpsChoice++;
        g.initializeTickTimer();
        if(g.fpsChoice==C.length-1)g.canDecreaseFps=e
            }
        };
g.addCss=function(){
    var b="#pcm-c {  width: 554px;  border-top: 25px solid black;  padding-bottom: 25px;  height: 136px;  position: relative;  background: black;  outline: 0;  overflow: hidden;  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);}#pcm-c * {  position: absolute;  overflow: hidden;}#pcm-p,#pcm-cc {  left: 45px;  width: 464px;  height: 136px;  z-index: 99;  overflow: hidden;}#pcm-p .pcm-d {  width: 2px;  height: 2px;  margin-left: 3px;  margin-top: 3px;  background: #f8b090;  z-index: 100;}#pcm-p .pcm-e {  width: 8px;  height: 8px;  z-index: 101;}#pcm-sc-1 {  left: 18px;  top: 16px;  width: 8px;  height: 56px;  position: absolute;  overflow: hidden;}#pcm-sc-2 {  left: 18px;  top: 80px;  width: 8px;  height: 56px;  position: absolute;  overflow: hidden;}#pcm-le {  position: absolute;  left: 515px;  top: 74px;  height: 64px;  width: 32px;} #pcm-le div {  position: relative;}#pcm-sc-1-l {    left: -2px;  top: 0;  width: 48px;  height: 8px;}#pcm-sc-2-l {    left: -2px;  top: 64px;  width: 48px;  height: 8px;}#pcm-so {  left: 7px;  top: 116px;  width: 12px;  height: 12px;  border: 8px solid black;  cursor: pointer;}#pcm-li {  position: absolute;  left: 523px;  top: 0;  height: 80px;  width: 16px;}#pcm-li .pcm-lif {  position: relative;  width: 16px;  height: 12px;  margin-bottom: 3px;}#pcm-p.blk .pcm-e {  visibility: hidden;}#pcm-c .pcm-ac {  width: 16px;  height: 16px;  margin-left: -4px;  margin-top: -4px;  z-index: 110;}#pcm-c .pcm-n {  z-index: 111;}#pcm-c #pcm-stck {  z-index: 109;}#pcm-c #pcm-gbug {  width: 32px;}#pcm-c #pcm-bpcm {  width: 32px;  height: 32px;  margin-left: -20px;  margin-top: -20px;}#pcm-f,#pcm-le div {  width: 32px;  height: 16px;  z-index: 105;}#pcm-f {  margin-left: -8px;  margin-top: -4px;}#pcm-do {  width: 19px;  height: 2px;  left: 279px;  top: 46px;  overflow: hidden;  position: absolute;  background: #ffaaa5;}#pcm-re {  width: 48px;  height: 8px;  z-index: 120;  left: 264px;  top: 80px;}#pcm-go {  width: 80px;  height: 8px;  z-index: 120;  left: 248px;  top: 80px;}";
    g.styleElement=
    document.createElement("style");
    g.styleElement.type="text/css";
    if(g.styleElement.styleSheet)g.styleElement.styleSheet.cssText=b;else g.styleElement.appendChild(document.createTextNode(b));
    document.getElementsByTagName("head")[0].appendChild(g.styleElement)
    };

g.createCanvasElement=function(){
    g.canvasEl=document.createElement("div");
    g.canvasEl.id="pcm-c";
    g.canvasEl.hideFocus=a;
    document.getElementById("logo").appendChild(g.canvasEl);
    g.canvasEl.tabIndex=0;
    g.canvasEl.focus()
    };
g.everythingIsReady=function(){
    if(!g.ready){
        g.ready=a;
        var b=document.getElementById("logo-l");
        google.dom.remove(b);
        document.getElementById("logo").style.background="black";
        g.addCss();
        g.createCanvasElement();
        g.speedIntervals=[];
        g.oppositeDirections=[];
        g.oppositeDirections[1]=2;
        g.oppositeDirections[2]=1;
        g.oppositeDirections[4]=8;
        g.oppositeDirections[8]=4;
        g.addEventListeners();
        g.fpsChoice=0;
        g.canDecreaseFps=a;
        g.initializeTickTimer();
        g.newGame()
        }
    };
g.checkIfEverythingIsReady=function(){
    if(g.soundReady||g.graphicsReady)g.updateLoadingProgress(0.67);
    if(g.soundReady&&g.graphicsReady){
        g.updateLoadingProgress(1);
        g.everythingIsReady()
        }
    };

g.preloadImage=function(b){
    var c=new Image,d=google.browser.engine.IE;
    if(!d)c.onload=g.imageLoaded;
    c.src=b;
    d&&g.imageLoaded()
    };

g.imageLoaded=function(){
    g.graphicsReady=a;
    g.checkIfEverythingIsReady()
    };

g.prepareGraphics=function(){
    g.graphicsReady=e;
    g.preloadImage("/logos/pacman10-hp-sprite.png")
    };
g.trimString=function(b){
    return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")
    };

g.g=function(b,c){
    if(b<c)return-1;
    else if(b>c)return 1;
    return 0
    };
g.compareVersions=function(b,c){
    for(var d=0,f=g.trimString(String(b)).split("."),h=g.trimString(String(c)).split("."),j=Math.max(f.length,h.length),k=0;d==0&&k<j;k++){
        var x=f[k]||"",F=h[k]||"",G=new RegExp("(\\d*)(\\D*)","g"),H=new RegExp("(\\d*)(\\D*)","g");
        do{
            var t=G.exec(x)||["","",""],u=H.exec(F)||["","",""];
            if(t[0].length==0&&u[0].length==0)break;
            d=t[1].length==0?0:parseInt(t[1],10);
            var I=u[1].length==0?0:parseInt(u[1],10);
            d=g.g(d,I)||g.g(t[2].length==0,u[2].length==0)||g.g(t[2],u[2])
            }while(d==
            0)
    }
    return d
    };

g.getFlashVersion=function(b){
    b=b.match(/[\d]+/g);
    b.length=3;
    return b.join(".")
    };
g.detectFlash=function(){
    var b=e,c="";
    if(navigator.plugins&&navigator.plugins.length){
        var d=navigator.plugins["Shockwave Flash"];
        if(d){
            b=a;
            if(d.description)c=g.getFlashVersion(d.description)
                }
                if(navigator.plugins["Shockwave Flash 2.0"]){
            b=a;
            c="2.0.0.11"
            }
        }else if(navigator.mimeTypes&&navigator.mimeTypes.length){
    if(b=(d=navigator.mimeTypes["application/x-shockwave-flash"])&&d.enabledPlugin){
        c=d.enabledPlugin.description;
        c=g.getFlashVersion(c)
        }
    }else try{
    d=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
    b=a;
    c=g.getFlashVersion(d.GetVariable("$version"))
    }catch(f){
    try{
        d=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
        b=a;
        c="6.0.21"
        }catch(h){
        try{
            d=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
            b=a;
            c=g.getFlashVersion(d.GetVariable("$version"))
            }catch(j){}
    }
}
g.hasFlash=b;
g.flashVersion=c
};

g.isFlashVersion=function(b){
    return g.compareVersions(g.flashVersion,b)>=0
    };
g.prepareSound=function(){
    g.soundAvailable=e;
    g.soundEnabled=e;
    g.soundReady=e;
    g.detectFlash();
    if(!g.hasFlash||!g.isFlashVersion("9.0.0.0")){
        g.soundReady=a;
        g.checkIfEverythingIsReady()
        }else{
        g.flashIframe=document.createElement("iframe");
        g.flashIframe.name="pm-sound";
        g.flashIframe.style.position="absolute";
        g.flashIframe.style.top="-150px";
        g.flashIframe.style.border=0;
        g.flashIframe.style.width="100px";
        g.flashIframe.style.height="100px";
        google.dom.append(g.flashIframe);
        g.flashIframeDoc=g.flashIframe.contentDocument;
        if(g.flashIframeDoc==undefined||g.flashIframeDoc==null)g.flashIframeDoc=g.flashIframe.contentWindow.document;
        g.flashIframeDoc.open();
        g.flashIframeDoc.write('<html><head></head><body><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="0" height="0" id="pacman-sound-player" type="application/x-shockwave-flash"> <param name="movie" value="logos/swf/pacman10-hp-sound.swf"> <param name="allowScriptAccess" value="always"> <object id="pacman-sound-player-2"  type="application/x-shockwave-flash" data="logos/swf/pacman10-hp-sound.swf" width="0" height="0"><param name="allowScriptAccess" value="always"> </object></object></body></html>');
        g.flashIframeDoc.close();
        window.setTimeout(g.flashNotReady,3E3)
        }
    };

g.flashNotReady=function(){
    if(!g.ready){
        g.soundAvailable=e;
        g.soundEnabled=e;
        g.soundReady=a;
        g.checkIfEverythingIsReady()
        }
    };

g.flashReady=function(b){
    g.flashSoundPlayer=b;
    g.soundAvailable=a;
    g.soundEnabled=a;
    g.soundReady=a;
    g.checkIfEverythingIsReady()
    };
g.flashLoaded=function(){
    if(g.flashIframeDoc){
        var b=g.flashIframeDoc.getElementById("pacman-sound-player");
        if(b&&b.playTrack){
            g.flashReady(b);
            return
        }else if((b=g.flashIframeDoc.getElementById("pacman-sound-player-2"))&&b.playTrack){
            g.flashReady(b);
            return
        }
    }
    g.flashNotReady()
};
g.destroy=function(){
    if(google.pacman){
        g.stopAllAudio();
        window.clearInterval(g.tickTimer);
        window.clearInterval(g.dotTimer);
        window.clearInterval(g.dotTimerMs);
        google.dom.remove(g.styleElement);
        google.dom.remove(g.flashIframe);
        google.dom.remove(g.canvasEl);
        google.pacman=undefined
        }
    };

g.exportFunctionCalls=function(){
    google.pacman={};

    google.pacman.insertCoin=g.insertCoin;
    google.pacman.flashLoaded=g.flashLoaded;
    google.pacman.destroy=g.destroy
    };
g.updateLoadingProgress=function(b){
    b=Math.round(b*200);
    document.getElementById("logo-b").style.width=b+"px"
    };

g.init=function(){
    g.ready=e;
    document.getElementById("logo").title="";
    g.updateLoadingProgress(0.33);
    g.exportFunctionCalls();
    g.useCss=navigator.userAgent.indexOf("MSIE 5.")!=-1||navigator.userAgent.indexOf("MSIE 6.")!=-1||navigator.userAgent.indexOf("MSIE 7.")!=-1?e:a;
    g.prepareGraphics();
    g.prepareSound()
    };

g.init();
}();
